@qqbrowser/openclaw-qbot 0.0.88 → 0.0.90

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 (158) hide show
  1. package/dist/{agents-Dxk5oWw_.js → agents-BBYlUP5T.js} +1 -1
  2. package/dist/{agents.config-CXoN8qvY.js → agents.config-CoZtnyKH.js} +1 -1
  3. package/dist/{agents.config-D6kg-4Ct.js → agents.config-Dyqz-Sk-.js} +1 -1
  4. package/dist/{auth-choice-COKpi33u.js → auth-choice-CVvPBerD.js} +1 -1
  5. package/dist/{auth-choice-K5eGX1sj.js → auth-choice-DSNX3Hdu.js} +1 -1
  6. package/dist/{banner-DsZegXc3.js → banner-C4Bgn_Gf.js} +1 -1
  7. package/dist/build-info.json +3 -3
  8. package/dist/bundled/boot-md/handler.js +1 -1
  9. package/dist/bundled/session-memory/handler.js +1 -1
  10. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  11. package/dist/{channel-options-BU9Qf5Cq.js → channel-options-9lP0IBR0.js} +1 -1
  12. package/dist/{channel-options-C-h17ZYO.js → channel-options-C9PHeVlU.js} +1 -1
  13. package/dist/{channel-web-DmmMXUdc.js → channel-web-DhNCVKla.js} +1 -1
  14. package/dist/{channel-web-C2Z4xKq3.js → channel-web-NeSGV-e7.js} +1 -1
  15. package/dist/{channels-cli-WBY_CB2-.js → channels-cli-CWu-PrIl.js} +1 -1
  16. package/dist/{channels-cli-DM6DIc_P.js → channels-cli-DHD8V6-q.js} +1 -1
  17. package/dist/{cli-DXZKyKLK.js → cli-BWE7sLVx.js} +1 -1
  18. package/dist/{cli-RLbxgNsy.js → cli-DF5ZcuuX.js} +1 -1
  19. package/dist/{command-registry-CIBlcDrG.js → command-registry-DIOnYWDt.js} +1 -1
  20. package/dist/{compact-BfHim3cA.js → compact-DgbuvsDF.js} +6 -6
  21. package/dist/{compact.runtime-C_urV0W5.js → compact.runtime-B5zaMKSa.js} +1 -1
  22. package/dist/{compact.runtime-eUr8DtWw.js → compact.runtime-B6qfwW6l.js} +1 -1
  23. package/dist/{compact.runtime-DtLl0dZ5.js → compact.runtime-BofMQvNu.js} +1 -1
  24. package/dist/{compact.runtime-BpYpUiXf.js → compact.runtime-C-OsuZNM.js} +1 -1
  25. package/dist/{completion-cli-BYf6ef-t.js → completion-cli-CckNzelT.js} +1 -1
  26. package/dist/{completion-cli-Dsi5-gGE.js → completion-cli-F60ntV7X.js} +1 -1
  27. package/dist/{config-cli-GwzrxUR-.js → config-cli-1Ut82gjz.js} +1 -1
  28. package/dist/{config-cli-IpFnLniP.js → config-cli-BVtPmTcO.js} +1 -1
  29. package/dist/{configure-Cx7WvgVM.js → configure-3Kgwf3gj.js} +1 -1
  30. package/dist/{configure-DIVEkxxF.js → configure-Bpy51qkb.js} +1 -1
  31. package/dist/{deps-send-whatsapp.runtime-CdAcLrxO.js → deps-send-whatsapp.runtime-CI4UsY0E.js} +1 -1
  32. package/dist/{deps-send-whatsapp.runtime-Dj_dh7mb.js → deps-send-whatsapp.runtime-CJbg_i22.js} +1 -1
  33. package/dist/{deps-send-whatsapp.runtime-DJOAewju.js → deps-send-whatsapp.runtime-CPhSRgv3.js} +1 -1
  34. package/dist/{deps-send-whatsapp.runtime-BfuHSQxE.js → deps-send-whatsapp.runtime-DLRNnLUS.js} +1 -1
  35. package/dist/{doctor-completion-BcvWFszV.js → doctor-completion-CucfTzWR.js} +1 -1
  36. package/dist/{doctor-completion-CQMvGm9I.js → doctor-completion-D76qqYqG.js} +1 -1
  37. package/dist/entry.js +1 -1
  38. package/dist/extensionAPI.js +1 -1
  39. package/dist/{gateway-cli-CBK9IHgW.js → gateway-cli-BKWQlBHk.js} +2 -2
  40. package/dist/{gateway-cli-BUcUT6It.js → gateway-cli-DtqcCdL7.js} +2 -2
  41. package/dist/{health-CiTej6rM.js → health-BXDoFh4Q.js} +1 -1
  42. package/dist/{health-Pqtl8jCk.js → health-xCl2atiY.js} +1 -1
  43. package/dist/{hooks-cli-C6nsAzQh.js → hooks-cli-B2j44Nvk.js} +1 -1
  44. package/dist/{hooks-cli-BR-m9Vxi.js → hooks-cli-DT0Hmbz-.js} +1 -1
  45. package/dist/index.js +2 -2
  46. package/dist/llm-slug-generator.js +1 -1
  47. package/dist/{models-CxaUXLzo.js → models-DhX1F_Pj.js} +1 -1
  48. package/dist/{models-cli-DuamSrQA.js → models-cli-B-kAey2t.js} +1 -1
  49. package/dist/{models-cli-DM55mW-t.js → models-cli-B53yy1mw.js} +1 -1
  50. package/dist/{npm-resolution-CKwFeFIB.js → npm-resolution-BIifLd1f.js} +1 -1
  51. package/dist/{npm-resolution-9bO0TPQF.js → npm-resolution-C2Ow0mqR.js} +1 -1
  52. package/dist/{onboard-BU0gG29k.js → onboard-D9IefEER.js} +2 -2
  53. package/dist/{onboard-channels-CsKyM82H.js → onboard-channels-B8JZHEaQ.js} +1 -1
  54. package/dist/{onboard-channels-BK5KINY9.js → onboard-channels-ByD6UdVu.js} +1 -1
  55. package/dist/{onboard-BlGJhhEF.js → onboard-qMIhLeRM.js} +2 -2
  56. package/dist/{onboarding-CM_9Fyo2.js → onboarding-CddGtlY5.js} +1 -1
  57. package/dist/{onboarding-Kz5K9mKB.js → onboarding-CgqsAteJ.js} +1 -1
  58. package/dist/{onboarding.finalize-DstFPCVD.js → onboarding.finalize-BgCWB7kF.js} +1 -1
  59. package/dist/{onboarding.finalize-C96gv5GP.js → onboarding.finalize-CkHWKgcF.js} +1 -1
  60. package/dist/{pi-embedded-BHryO0s2.js → pi-embedded-C6L57IhI.js} +6 -6
  61. package/dist/{pi-embedded-D_03X4gB.js → pi-embedded-CN25rQwp.js} +6 -6
  62. package/dist/{plugin-registry-DyreKTxc.js → plugin-registry-Cido8VxT.js} +1 -1
  63. package/dist/{plugin-registry-Dsb86j5r.js → plugin-registry-CpPyaWT0.js} +1 -1
  64. package/dist/plugin-sdk/{channel-web-BDO73YAY.js → channel-web-DgBEXyWx.js} +1 -1
  65. package/dist/plugin-sdk/{channel-web-C0hljM9U.js → channel-web-T7e1VB_g.js} +1 -1
  66. package/dist/plugin-sdk/{compact.runtime-B-jUdCSu.js → compact.runtime-B0qhTLAN.js} +1 -1
  67. package/dist/plugin-sdk/{compact.runtime-iEjcWTOi.js → compact.runtime-C5aI5KIg.js} +1 -1
  68. package/dist/plugin-sdk/{compact.runtime-BspLSIc1.js → compact.runtime-Da9JL-Re.js} +1 -1
  69. package/dist/plugin-sdk/{compact.runtime-CMWw2lwa.js → compact.runtime-DuWXCPO4.js} +1 -1
  70. package/dist/plugin-sdk/{compact.runtime-HnqzVAl7.js → compact.runtime-F35snTaz.js} +1 -1
  71. package/dist/plugin-sdk/{compact.runtime-C2keFFLA.js → compact.runtime-kL8PhhSi.js} +1 -1
  72. package/dist/plugin-sdk/compat.js +1 -1
  73. package/dist/plugin-sdk/{deps-send-whatsapp.runtime-BRm24Qy-.js → deps-send-whatsapp.runtime-BWVV9ImJ.js} +1 -1
  74. package/dist/plugin-sdk/{deps-send-whatsapp.runtime-Bw9eegUO.js → deps-send-whatsapp.runtime-BdOLZ0P3.js} +1 -1
  75. package/dist/plugin-sdk/{deps-send-whatsapp.runtime-DdS9G3TR.js → deps-send-whatsapp.runtime-DMD-mrgL.js} +1 -1
  76. package/dist/plugin-sdk/{deps-send-whatsapp.runtime-ClvlojBM.js → deps-send-whatsapp.runtime-DNaHPuYl.js} +1 -1
  77. package/dist/plugin-sdk/{deps-send-whatsapp.runtime-DjAB5JP0.js → deps-send-whatsapp.runtime-DkmDJ3eX.js} +1 -1
  78. package/dist/plugin-sdk/{deps-send-whatsapp.runtime-yd5qmNGP.js → deps-send-whatsapp.runtime-nRQWODTL.js} +1 -1
  79. package/dist/plugin-sdk/{dispatch-BtGxkC47.js → dispatch--4Vuy9oL.js} +6 -6
  80. package/dist/plugin-sdk/{dispatch-BO5EIrCx.js → dispatch-DPafUBvi.js} +6 -6
  81. package/dist/plugin-sdk/{dispatch-DABpoSJj.js → dispatch-DzdnDix3.js} +6 -6
  82. package/dist/plugin-sdk/{dispatch-DfBUhUa2.js → dispatch-_3aPMKVc.js} +6 -6
  83. package/dist/plugin-sdk/{dispatch-BFVL83hy.js → dispatch-v8f5j6tA.js} +6 -6
  84. package/dist/plugin-sdk/index.js +1 -1
  85. package/dist/plugin-sdk/irc.js +1 -1
  86. package/dist/plugin-sdk/matrix.js +1 -1
  87. package/dist/plugin-sdk/msteams.js +1 -1
  88. package/dist/plugin-sdk/nextcloud-talk.js +1 -1
  89. package/dist/plugin-sdk/{reply-0QJVop5g.js → reply-FZOMaPdT.js} +6 -6
  90. package/dist/plugin-sdk/{slash-dispatch.runtime-I6_T20Yd.js → slash-dispatch.runtime-CV3coyWo.js} +1 -1
  91. package/dist/plugin-sdk/{slash-dispatch.runtime-BwEZoF7O.js → slash-dispatch.runtime-CYrhiT19.js} +1 -1
  92. package/dist/plugin-sdk/{slash-dispatch.runtime-W9VRo3lf.js → slash-dispatch.runtime-CkVpd9xh.js} +1 -1
  93. package/dist/plugin-sdk/{slash-dispatch.runtime-CaemgmaW.js → slash-dispatch.runtime-CzBVRyba.js} +1 -1
  94. package/dist/plugin-sdk/{slash-dispatch.runtime-B4nePbcc.js → slash-dispatch.runtime-DjGJDpWI.js} +1 -1
  95. package/dist/plugin-sdk/{slash-dispatch.runtime-ByQEhvcx.js → slash-dispatch.runtime-WIHCc0nP.js} +1 -1
  96. package/dist/plugin-sdk/{subagent-registry-runtime-pjzgZyiw.js → subagent-registry-runtime-4o_8yfyB.js} +1 -1
  97. package/dist/plugin-sdk/{subagent-registry-runtime-ikSo08Bh.js → subagent-registry-runtime-BJxZkq6N.js} +1 -1
  98. package/dist/plugin-sdk/{subagent-registry-runtime-BPHOIYnR.js → subagent-registry-runtime-BRl0zIp-.js} +1 -1
  99. package/dist/plugin-sdk/{subagent-registry-runtime-C2TUyWmj.js → subagent-registry-runtime-C-2UF0IM.js} +1 -1
  100. package/dist/plugin-sdk/{subagent-registry-runtime-Co3rxlYB.js → subagent-registry-runtime-bCP-yDZd.js} +1 -1
  101. package/dist/plugin-sdk/{subagent-registry-runtime-Wu14xqj_.js → subagent-registry-runtime-lM2A6bas.js} +1 -1
  102. package/dist/plugin-sdk/{web-Bgl0ILbD.js → web--MzzmLKe.js} +1 -1
  103. package/dist/plugin-sdk/{web-BzRQSS8R.js → web-BoQezxCE.js} +1 -1
  104. package/dist/plugin-sdk/{web-CK9n5ZfK.js → web-CgFT-LB5.js} +1 -1
  105. package/dist/plugin-sdk/{web-3TYyfPQG.js → web-CskfGkR8.js} +1 -1
  106. package/dist/plugin-sdk/{web-WIpdyZZQ.js → web-KZ3WEX08.js} +1 -1
  107. package/dist/plugin-sdk/{web-BCOXLnUB.js → web-sUKMDnvE.js} +1 -1
  108. package/dist/plugin-sdk/whatsapp.js +1 -1
  109. package/dist/{plugins-cli-B_m-0xTz.js → plugins-cli-7Rom2MRn.js} +1 -1
  110. package/dist/{plugins-cli-fpI_fBTE.js → plugins-cli-ULYhpcRr.js} +1 -1
  111. package/dist/{program-B52FJo5X.js → program-C8M8kVC0.js} +2 -2
  112. package/dist/{program-context-9FmjmgRi.js → program-context-DNheupaq.js} +1 -1
  113. package/dist/{prompt-select-styled-7bpPt2PG.js → prompt-select-styled-BfSAWDfm.js} +1 -1
  114. package/dist/{prompt-select-styled-bL9scez3.js → prompt-select-styled-Qtie1Z5m.js} +1 -1
  115. package/dist/{provider-auth-helpers-CatlYQ1x.js → provider-auth-helpers-PSez6fyE.js} +1 -1
  116. package/dist/{provider-auth-helpers-DgQEZQZm.js → provider-auth-helpers-fIKVMJmj.js} +1 -1
  117. package/dist/{push-apns-Bc0uTUFe.js → push-apns-CZ3x5b7S.js} +1 -1
  118. package/dist/{push-apns-Dq1z7GKZ.js → push-apns-D4QwEU4o.js} +1 -1
  119. package/dist/{register.agent-Cjvn_JC_.js → register.agent-CQCSZoM3.js} +1 -1
  120. package/dist/{register.agent-DZ68nNV_.js → register.agent-CkdmFMol.js} +1 -1
  121. package/dist/{register.configure-DAq-OZQ_.js → register.configure-CY7jH_t-.js} +1 -1
  122. package/dist/{register.configure-DNeVIlZk.js → register.configure-jvsFtsEY.js} +1 -1
  123. package/dist/{register.maintenance-Cx5TbFUH.js → register.maintenance-Cn2-JBxc.js} +1 -1
  124. package/dist/{register.maintenance-BGD-EdYb.js → register.maintenance-DbdyMqnN.js} +1 -1
  125. package/dist/{register.message-BVBF2xBA.js → register.message-8Pxm1wyr.js} +1 -1
  126. package/dist/{register.message-BahjRagK.js → register.message-DxNX0-7A.js} +1 -1
  127. package/dist/{register.onboard-BYsU9URi.js → register.onboard-BeuVHdxu.js} +1 -1
  128. package/dist/{register.onboard-CsUvw9JY.js → register.onboard-D9LNxSOp.js} +1 -1
  129. package/dist/{register.setup-DUGQ3LjU.js → register.setup-AyriKZAD.js} +1 -1
  130. package/dist/{register.setup-Czz8kiz8.js → register.setup-D6sjApkR.js} +1 -1
  131. package/dist/{register.status-health-sessions-DwQDXdjY.js → register.status-health-sessions-C3YEi9ej.js} +1 -1
  132. package/dist/{register.status-health-sessions-C-6pt1vC.js → register.status-health-sessions-DLibm4n2.js} +1 -1
  133. package/dist/{register.subclis-nr-J0DsM.js → register.subclis-DMwBX73g.js} +1 -1
  134. package/dist/{reply-Bv0w_dst.js → reply-JaJmymld.js} +6 -6
  135. package/dist/{run-main-C9SR6tqO.js → run-main-BtJ9Rvkf.js} +1 -1
  136. package/dist/{server-node-events-DBU3p4Am.js → server-node-events-B1xc0xHC.js} +1 -1
  137. package/dist/{server-node-events-duTsLOu5.js → server-node-events-DkYb_tMY.js} +1 -1
  138. package/dist/{slash-dispatch.runtime-BKW0b-z4.js → slash-dispatch.runtime-5FhvH4vs.js} +1 -1
  139. package/dist/{slash-dispatch.runtime-Dllhj5El.js → slash-dispatch.runtime-8bdhjt7e.js} +1 -1
  140. package/dist/{slash-dispatch.runtime-BykVo525.js → slash-dispatch.runtime-BSGNAoT3.js} +1 -1
  141. package/dist/{slash-dispatch.runtime-CwKA-3Mz.js → slash-dispatch.runtime-DzFzghS8.js} +1 -1
  142. package/dist/{status-BUdDRE9f.js → status-Ln-hRgxh.js} +1 -1
  143. package/dist/{status-QCEyD_DK.js → status-XJoKJIPd.js} +1 -1
  144. package/dist/{subagent-registry-runtime-ANqbVbfo.js → subagent-registry-runtime-CMgr0_UE.js} +1 -1
  145. package/dist/{subagent-registry-runtime-CWrWUjll.js → subagent-registry-runtime-DA3RtD85.js} +1 -1
  146. package/dist/{subagent-registry-runtime-CA_UwsAM.js → subagent-registry-runtime-DDF1mHS2.js} +1 -1
  147. package/dist/{subagent-registry-runtime-DjLSmsYn.js → subagent-registry-runtime-DTliYOy2.js} +1 -1
  148. package/dist/{update-cli-2Prf30Co.js → update-cli-DhZZ9nIA.js} +1 -1
  149. package/dist/{update-cli-BZ7xaJXP.js → update-cli-T5qjfgGh.js} +1 -1
  150. package/dist/{update-runner-Dmea_7oZ.js → update-runner-C6Z9RGJ6.js} +1 -1
  151. package/dist/{update-runner-CzyTP7xB.js → update-runner-DThdoQ9_.js} +1 -1
  152. package/dist/{web-BYWPQTzp.js → web-BinddLZf.js} +1 -1
  153. package/dist/{web-B90WZv9Y.js → web-CWJIsRZO.js} +1 -1
  154. package/dist/{web-DTS3rwm1.js → web-D995jmBq.js} +1 -1
  155. package/dist/{web-BvZz642s.js → web-F5nE_LwQ.js} +1 -1
  156. package/package.json +1 -1
  157. package/preset-config.json +15 -1
  158. package/docs/competitor-openclaw-analysis.md +0 -390
@@ -1,2 +1,2 @@
1
- import"./paths-DfDmyG-r.js";import{A as e,O as t,k as n,p as r}from"./subsystem-B35lZH6M.js";import{S as i}from"./utils-eSzw3-BW.js";import{A as a,D as o,Gs as s,Hs as c,M as l,O as u,P as d,Ql as f,Qs as p,Tt as m,Vl as h,Wl as g,Xs as _,Yl as v,Zl as y,_c as b,c as x,cu as S,d as C,du as w,f as T,g as ee,gt as E,h as te,i as D,j as O,jt as ne,r as re,su as ie,tu as ae,v as oe,vu as se,wt as ce,xs as le,yu as k}from"./model-selection-D_WMcs-m.js";import{$r as ue,$t as de,Dt as fe,Mn as pe,Qt as me,Xt as he,a as ge,i as _e,o as ve,r as A}from"./reply-Bv0w_dst.js";import{F as j,N as M,P as ye,a as be,d as xe,f as N,j as P,l as Se,s as Ce}from"./agent-scope-DauKPN2a.js";import{r as we}from"./string-normalization-BrUPaXaM.js";import"./openclaw-root-D_0Q6--h.js";import{i as F,l as Te}from"./types.secrets-C-5U96pc.js";import"./github-copilot-token-HBWzEstG.js";import{t as I}from"./command-format-BbDT1tlm.js";import"./boolean-Ch3DfXPy.js";import"./env-DEV6pFi3.js";import"./env-overrides-CYDvuetI.js";import"./registry-DwigmP92.js";import"./skills-sxAZFqk6.js";import"./frontmatter-BkZkwkVO.js";import"./plugins-CPVBLi22.js";import"./logger-DMM_uqZu.js";import"./exec-Ble6PWIi.js";import"./windows-spawn-ylt31bST.js";import"./redact-DtCbW9Lh.js";import"./path-alias-guards-mvyLCPlN.js";import"./errors-alPucxwR.js";import"./send-BjtuHdPu.js";import"./send-hasPbLlg.js";import{i as Ee,s as De}from"./paths-wWzafjVT.js";import"./chat-envelope-HVpKusFc.js";import"./audio-transcription-runner-Blz-FPzD.js";import"./image-CX5WRMvG.js";import"./models-config-C5gOZ_nc.js";import"./tool-display-C3cLzGSo.js";import"./fetch-guard-vEM0OBSM.js";import"./api-key-rotation-WckBsEDu.js";import"./local-roots-CFjRwfz-.js";import{n as Oe}from"./model-catalog-CXPniyHC.js";import"./proxy-fetch-C2wlnGrt.js";import"./tokens-DH__4wsg.js";import"./deliver-2PlJp__j.js";import"./commands-DwmEeRNm.js";import"./commands-registry-BU4HdCpx.js";import"./call-bAaUSED1.js";import"./read-only-account-inspect-O_P5quS_.js";import"./send-D7fq-nJ3.js";import{n as ke,t as Ae}from"./pi-model-discovery-a98ybLTx.js";import"./ir-BQmB5KFM.js";import"./render-CtSBbJxV.js";import"./target-errors-CNaozwgN.js";import"./with-timeout-DHfOS7eC.js";import"./diagnostic-J-Dby8Y5.js";import"./exec-approvals-allowlist-DtUEPDK1.js";import"./exec-safe-bin-runtime-policy-CbFmGEO0.js";import"./exec-approvals-CZ6LJByp.js";import"./nodes-screen-Daq3OqWy.js";import"./restart-F8FFXkby.js";import"./system-run-command-zYUx5RNl.js";import"./runtime-web-tools-Cs8NdOZU.js";import"./runtime-n_o60Cbj.js";import"./stagger-Ch71fX1z.js";import"./channel-selection-CVjAE1aK.js";import"./plugin-auto-enable-BACDL0lj.js";import"./send-DIiiAeSV.js";import"./outbound-attachment-BHK3lwtT.js";import"./fetch-D0ctXgLA.js";import"./delivery-queue-BavBjrc5.js";import"./send-Du5iNpc_.js";import"./pairing-store-DYDGw_J1.js";import"./session-cost-usage-C7K68CQv.js";import"./sqlite-DayONBPh.js";import"./channel-activity-BPEitbxC.js";import"./tables-DoACu3IR.js";import"./fetch-MmzBES-O.js";import"./skill-commands-CPsCP-Wn.js";import"./workspace-dirs-BT0ehvIx.js";import"./pairing-token-BNYR9_wD.js";import{i as L,s as R}from"./command-secret-targets-BPZrI3UX.js";import"./connection-auth-BNIAz5tD.js";import{f as z}from"./onboard-helpers-Dn0KiH64.js";import{n as B,r as je,t as V}from"./prompt-style-Ct-2QSEG.js";import"./pairing-labels-D_pIiFsE.js";import"./memory-cli-BohipG7v.js";import"./manager-Dc0951tf.js";import{t as H}from"./links-CmkiG3i0.js";import{n as U,t as W}from"./cli-utils-Cfu5AugP.js";import"./help-format-BY8dc9BS.js";import{r as Me}from"./progress-CDXE9V22.js";import"./provider-env-vars-D8p6Ohpj.js";import"./note-CxxIxPA5.js";import{t as Ne}from"./clack-prompter-BTYj-mu-.js";import"./issue-format-D8eNC7S1.js";import{n as Pe,t as Fe}from"./table-jkvoEPT5.js";import{t as Ie}from"./model-param-b-BqIr5rY5.js";import{n as G}from"./format-Bn1bwJKX.js";import{a as K,c as Le,d as Re,f as ze,i as Be,l as Ve,m as q,n as He,o as Ue,p as We,r as Ge,s as Ke,t as qe,u as Je}from"./openai-codex-model-default-DgsieC4l.js";import{Mt as Ye,h as Xe,n as Ze}from"./auth-token-fqM91VLE.js";import{t as Qe}from"./oauth-env-CxkS-K1N.js";import{n as J}from"./logging-KnZSytkB.js";import{a as $e,c as et,i as tt,n as nt,o as rt,r as it,s as at,t as ot}from"./provider-auth-helpers-CatlYQ1x.js";import"./oauth-tls-preflight-CQ38e7su.js";import st from"node:path";import ct from"node:fs/promises";import lt from"node:crypto";import{complete as ut,getEnvApiKey as dt,getModel as ft}from"@mariozechner/pi-ai";import{Type as pt}from"@sinclair/typebox";import{cancel as mt,confirm as ht,isCancel as gt,multiselect as _t,select as vt,text as yt}from"@clack/prompts";async function bt(e){try{let{snapshot:e}=await _();if(e.valid)return e.resolved}catch{}return e}async function xt(e){let t=s(),n=await bt(t),{resolvedConfig:r,diagnostics:i}=await R({config:t,commandName:e.commandName,targetIds:L()});if(e.runtime)for(let t of i)e.runtime.log(`[secrets] ${t}`);return p(r,n),{sourceConfig:n,resolvedConfig:r,diagnostics:i}}async function Y(e){return(await xt(e)).resolvedConfig}async function St(e,t){Be(e);let n=(await Y({commandName:`models aliases list`,runtime:t})).agents?.defaults?.models??{},r=Object.entries(n).reduce((e,[t,n])=>{let r=n?.alias?.trim();return r&&(e[r]=t),e},{});if(e.json){t.log(JSON.stringify({aliases:r},null,2));return}if(e.plain){for(let[e,n]of Object.entries(r))t.log(`${e} ${n}`);return}if(t.log(`Aliases (${Object.keys(r).length}):`),Object.keys(r).length===0){t.log(`- none`);return}for(let[e,n]of Object.entries(r))t.log(`- ${e} -> ${n}`)}async function Ct(e,t,n){let r=Je(e),i=We({raw:t,cfg:await Y({commandName:`models aliases add`,runtime:n})});await q(e=>{let t=`${i.provider}/${i.model}`,n={...e.agents?.defaults?.models};for(let[e,i]of Object.entries(n)){let n=i?.alias?.trim();if(n&&n===r&&e!==t)throw Error(`Alias ${r} already points to ${e}.`)}return n[t]={...n[t]??{},alias:r},{...e,agents:{...e.agents,defaults:{...e.agents?.defaults,models:n}}}}),J(n),n.log(`Alias ${r} -> ${i.provider}/${i.model}`)}async function wt(e,t){let n=Je(e),r=await q(e=>{let t={...e.agents?.defaults?.models},r=!1;for(let[e,i]of Object.entries(t))if(i?.alias?.trim()===n){t[e]={...i,alias:void 0},r=!0;break}if(!r)throw Error(`Alias not found: ${n}`);return{...e,agents:{...e.agents,defaults:{...e.agents?.defaults,models:t}}}});J(t),(!r.agents?.defaults?.models||Object.values(r.agents.defaults.models).every(e=>!e?.alias?.trim()))&&t.log(`No aliases configured.`)}function Tt(e){return(typeof e==`symbol`||gt(e))&&(mt(`Cancelled.`),process.exit(0)),e}const Et=async e=>Tt(await ht({...e,message:B(e.message)})),Dt=async e=>Tt(await yt({...e,message:B(e.message)})),Ot=async e=>Tt(await vt({...e,message:B(e.message),options:e.options.map(e=>e.hint===void 0?e:{...e,hint:V(e.hint)})}));function kt(e){let t=e?.trim();return t?C(t)===`anthropic`?`anthropic`:`custom`:null}function At(e){return`${C(e)}:manual`}async function jt(e,t){let n=kt(e.provider??`anthropic`);if(n!==`anthropic`)throw Error(`Only --provider anthropic is supported for setup-token.`);if(!process.stdin.isTTY)throw Error(`setup-token requires an interactive TTY.`);if(!e.yes&&!await Et({message:"Have you run `claude setup-token` and copied the token?",initialValue:!0}))return;let r=await Dt({message:`Paste Anthropic setup-token`,validate:e=>Ze(String(e??``))}),i=String(r??``).trim(),a=At(n);f({profileId:a,credential:{type:`token`,provider:n,token:i}}),await q(e=>Xe(e,{profileId:a,provider:n,mode:`token`})),J(t),t.log(`Auth profile: ${a} (${n}/token)`)}async function Mt(e,t){let n=e.provider?.trim();if(!n)throw Error(`Missing --provider.`);let r=C(n),i=e.profileId?.trim()||At(r),a=await Dt({message:`Paste token for ${r}`,validate:e=>e?.trim()?void 0:`Required`}),o=String(a??``).trim(),s=e.expiresIn?.trim()&&e.expiresIn.trim().length>0?Date.now()+b(String(e.expiresIn??``).trim(),{defaultUnit:`d`}):void 0;f({profileId:i,credential:{type:`token`,provider:r,token:o,...s?{expires:s}:{}}}),await q(e=>Xe(e,{profileId:i,provider:r,mode:`token`})),J(t),t.log(`Auth profile: ${i} (${r}/token)`)}async function Nt(e,t){let n=await Ot({message:`Token provider`,options:[{value:`anthropic`,label:`anthropic`},{value:`custom`,label:`custom (type provider id)`}]}),r=n===`custom`?C(String(await Dt({message:`Provider id`,validate:e=>e?.trim()?void 0:`Required`}))):n;if(await Ot({message:`Token method`,options:[...r===`anthropic`?[{value:`setup-token`,label:`setup-token (claude)`,hint:"Paste a setup-token from `claude setup-token`"}]:[],{value:`paste`,label:`paste token`}]})===`setup-token`){await jt({provider:r},t);return}let i=At(r);await Mt({provider:r,profileId:String(await Dt({message:`Profile id`,initialValue:i,validate:e=>e?.trim()?void 0:`Required`})).trim(),expiresIn:await Et({message:`Does this token expire?`,initialValue:!1})?String(await Dt({message:`Expires in (duration)`,initialValue:`365d`,validate:e=>{try{b(String(e??``),{defaultUnit:`d`});return}catch{return`Invalid duration (e.g. 365d, 12h, 30m)`}}})).trim():void 0},t)}function Pt(e,t){let n=t?.trim();if(!n)return null;let r=tt(e,n);if(r)return r;let i=e.map(e=>e.id).filter(Boolean).toSorted((e,t)=>e.localeCompare(t)),a=i.length>0?i.join(`, `):`(none)`;throw Error(`Unknown provider "${n}". Loaded providers: ${a}. Verify plugins via \`${I(`openclaw plugins list --json`)}\`.`)}function Ft(e){return e.type===`api_key`?`api_key`:e.type===`token`?`token`:`oauth`}async function It(e){let t=await $e({prompter:e.prompter,runtime:e.runtime,isRemote:Qe(),openUrl:async e=>{await z(e)},localBrowserMessage:`Complete sign-in in browser…`});if(!t)throw Error(`OpenAI Codex OAuth did not return credentials.`);let n=await Ye(`openai-codex`,t,e.agentDir,{syncSiblingAgents:!0});await q(t=>{let r=Xe(t,{profileId:n,provider:`openai-codex`,mode:`oauth`});return e.opts.setDefault&&(r=He(r).next),r}),J(e.runtime),e.runtime.log(`Auth profile: ${n} (openai-codex/oauth)`),e.opts.setDefault?e.runtime.log(`Default model set to ${qe}`):e.runtime.log(`Default model available: ${qe} (use --set-default to apply)`)}async function Lt(e,t){if(!process.stdin.isTTY)throw Error(`models auth login requires an interactive TTY.`);let n=await Le(),r=N(n),i=be(n,r),a=xe(n,r)??P(),o=C(String(e.provider??``)),s=Ne();if(o===`openai-codex`){await It({opts:e,runtime:t,prompter:s,agentDir:i});return}let c=at({config:n,workspaceDir:a});if(c.length===0)throw Error(`No provider plugins found. Install one via \`${I(`openclaw plugins install`)}\`.`);let l=Pt(c,e.provider)??await s.select({message:`Select a provider`,options:c.map(e=>({value:e.id,label:e.label,hint:e.docsPath?`Docs: ${e.docsPath}`:void 0}))}).then(e=>tt(c,String(e)));if(!l)throw Error(`Unknown provider. Use --provider <id> to pick a provider plugin.`);let u=it(l,e.method)??(l.auth.length===1?l.auth[0]:await s.select({message:`Auth method for ${l.label}`,options:l.auth.map(e=>({value:e.id,label:e.label,hint:e.hint}))}).then(e=>l.auth.find(t=>t.id===String(e))));if(!u)throw Error(`Unknown auth method. Use --method <id> to select one.`);let d=Qe(),p=await u.run({config:n,agentDir:i,workspaceDir:a,prompter:s,runtime:t,isRemote:d,openUrl:async e=>{await z(e)},oauth:{createVpsAwareHandlers:e=>rt(e)}});for(let e of p.profiles)f({profileId:e.profileId,credential:e.credential,agentDir:i});await q(t=>{let n=t;p.configPatch&&(n=nt(n,p.configPatch));for(let e of p.profiles)n=Xe(n,{profileId:e.profileId,provider:e.credential.provider,mode:Ft(e.credential)});return e.setDefault&&p.defaultModel&&(n=ot(n,p.defaultModel)),n}),J(t);for(let e of p.profiles)t.log(`Auth profile: ${e.profileId} (${e.credential.provider}/${Ft(e.credential)})`);p.defaultModel&&t.log(e.setDefault?`Default model set to ${p.defaultModel}`:`Default model available: ${p.defaultModel} (use --set-default to apply)`),p.notes&&p.notes.length>0&&await s.note(p.notes.join(`
1
+ import"./paths-DfDmyG-r.js";import{A as e,O as t,k as n,p as r}from"./subsystem-B35lZH6M.js";import{S as i}from"./utils-eSzw3-BW.js";import{A as a,D as o,Gs as s,Hs as c,M as l,O as u,P as d,Ql as f,Qs as p,Tt as m,Vl as h,Wl as g,Xs as _,Yl as v,Zl as y,_c as b,c as x,cu as S,d as C,du as w,f as T,g as ee,gt as E,h as te,i as D,j as O,jt as ne,r as re,su as ie,tu as ae,v as oe,vu as se,wt as ce,xs as le,yu as k}from"./model-selection-D_WMcs-m.js";import{$r as ue,$t as de,Dt as fe,Mn as pe,Qt as me,Xt as he,a as ge,i as _e,o as ve,r as A}from"./reply-JaJmymld.js";import{F as j,N as M,P as ye,a as be,d as xe,f as N,j as P,l as Se,s as Ce}from"./agent-scope-DauKPN2a.js";import{r as we}from"./string-normalization-BrUPaXaM.js";import"./openclaw-root-D_0Q6--h.js";import{i as F,l as Te}from"./types.secrets-C-5U96pc.js";import"./github-copilot-token-HBWzEstG.js";import{t as I}from"./command-format-BbDT1tlm.js";import"./boolean-Ch3DfXPy.js";import"./env-DEV6pFi3.js";import"./env-overrides-CYDvuetI.js";import"./registry-DwigmP92.js";import"./skills-sxAZFqk6.js";import"./frontmatter-BkZkwkVO.js";import"./plugins-CPVBLi22.js";import"./logger-DMM_uqZu.js";import"./exec-Ble6PWIi.js";import"./windows-spawn-ylt31bST.js";import"./redact-DtCbW9Lh.js";import"./path-alias-guards-mvyLCPlN.js";import"./errors-alPucxwR.js";import"./send-BjtuHdPu.js";import"./send-hasPbLlg.js";import{i as Ee,s as De}from"./paths-wWzafjVT.js";import"./chat-envelope-HVpKusFc.js";import"./audio-transcription-runner-Blz-FPzD.js";import"./image-CX5WRMvG.js";import"./models-config-C5gOZ_nc.js";import"./tool-display-C3cLzGSo.js";import"./fetch-guard-vEM0OBSM.js";import"./api-key-rotation-WckBsEDu.js";import"./local-roots-CFjRwfz-.js";import{n as Oe}from"./model-catalog-CXPniyHC.js";import"./proxy-fetch-C2wlnGrt.js";import"./tokens-DH__4wsg.js";import"./deliver-2PlJp__j.js";import"./commands-DwmEeRNm.js";import"./commands-registry-BU4HdCpx.js";import"./call-bAaUSED1.js";import"./read-only-account-inspect-O_P5quS_.js";import"./send-D7fq-nJ3.js";import{n as ke,t as Ae}from"./pi-model-discovery-a98ybLTx.js";import"./ir-BQmB5KFM.js";import"./render-CtSBbJxV.js";import"./target-errors-CNaozwgN.js";import"./with-timeout-DHfOS7eC.js";import"./diagnostic-J-Dby8Y5.js";import"./exec-approvals-allowlist-DtUEPDK1.js";import"./exec-safe-bin-runtime-policy-CbFmGEO0.js";import"./exec-approvals-CZ6LJByp.js";import"./nodes-screen-Daq3OqWy.js";import"./restart-F8FFXkby.js";import"./system-run-command-zYUx5RNl.js";import"./runtime-web-tools-Cs8NdOZU.js";import"./runtime-n_o60Cbj.js";import"./stagger-Ch71fX1z.js";import"./channel-selection-CVjAE1aK.js";import"./plugin-auto-enable-BACDL0lj.js";import"./send-DIiiAeSV.js";import"./outbound-attachment-BHK3lwtT.js";import"./fetch-D0ctXgLA.js";import"./delivery-queue-BavBjrc5.js";import"./send-Du5iNpc_.js";import"./pairing-store-DYDGw_J1.js";import"./session-cost-usage-C7K68CQv.js";import"./sqlite-DayONBPh.js";import"./channel-activity-BPEitbxC.js";import"./tables-DoACu3IR.js";import"./fetch-MmzBES-O.js";import"./skill-commands-CPsCP-Wn.js";import"./workspace-dirs-BT0ehvIx.js";import"./pairing-token-BNYR9_wD.js";import{i as L,s as R}from"./command-secret-targets-BPZrI3UX.js";import"./connection-auth-BNIAz5tD.js";import{f as z}from"./onboard-helpers-Dn0KiH64.js";import{n as B,r as je,t as V}from"./prompt-style-Ct-2QSEG.js";import"./pairing-labels-D_pIiFsE.js";import"./memory-cli-BohipG7v.js";import"./manager-Dc0951tf.js";import{t as H}from"./links-CmkiG3i0.js";import{n as U,t as W}from"./cli-utils-Cfu5AugP.js";import"./help-format-BY8dc9BS.js";import{r as Me}from"./progress-CDXE9V22.js";import"./provider-env-vars-D8p6Ohpj.js";import"./note-CxxIxPA5.js";import{t as Ne}from"./clack-prompter-BTYj-mu-.js";import"./issue-format-D8eNC7S1.js";import{n as Pe,t as Fe}from"./table-jkvoEPT5.js";import{t as Ie}from"./model-param-b-BqIr5rY5.js";import{n as G}from"./format-Bn1bwJKX.js";import{a as K,c as Le,d as Re,f as ze,i as Be,l as Ve,m as q,n as He,o as Ue,p as We,r as Ge,s as Ke,t as qe,u as Je}from"./openai-codex-model-default-DgsieC4l.js";import{Mt as Ye,h as Xe,n as Ze}from"./auth-token-fqM91VLE.js";import{t as Qe}from"./oauth-env-CxkS-K1N.js";import{n as J}from"./logging-KnZSytkB.js";import{a as $e,c as et,i as tt,n as nt,o as rt,r as it,s as at,t as ot}from"./provider-auth-helpers-PSez6fyE.js";import"./oauth-tls-preflight-CQ38e7su.js";import st from"node:path";import ct from"node:fs/promises";import lt from"node:crypto";import{complete as ut,getEnvApiKey as dt,getModel as ft}from"@mariozechner/pi-ai";import{Type as pt}from"@sinclair/typebox";import{cancel as mt,confirm as ht,isCancel as gt,multiselect as _t,select as vt,text as yt}from"@clack/prompts";async function bt(e){try{let{snapshot:e}=await _();if(e.valid)return e.resolved}catch{}return e}async function xt(e){let t=s(),n=await bt(t),{resolvedConfig:r,diagnostics:i}=await R({config:t,commandName:e.commandName,targetIds:L()});if(e.runtime)for(let t of i)e.runtime.log(`[secrets] ${t}`);return p(r,n),{sourceConfig:n,resolvedConfig:r,diagnostics:i}}async function Y(e){return(await xt(e)).resolvedConfig}async function St(e,t){Be(e);let n=(await Y({commandName:`models aliases list`,runtime:t})).agents?.defaults?.models??{},r=Object.entries(n).reduce((e,[t,n])=>{let r=n?.alias?.trim();return r&&(e[r]=t),e},{});if(e.json){t.log(JSON.stringify({aliases:r},null,2));return}if(e.plain){for(let[e,n]of Object.entries(r))t.log(`${e} ${n}`);return}if(t.log(`Aliases (${Object.keys(r).length}):`),Object.keys(r).length===0){t.log(`- none`);return}for(let[e,n]of Object.entries(r))t.log(`- ${e} -> ${n}`)}async function Ct(e,t,n){let r=Je(e),i=We({raw:t,cfg:await Y({commandName:`models aliases add`,runtime:n})});await q(e=>{let t=`${i.provider}/${i.model}`,n={...e.agents?.defaults?.models};for(let[e,i]of Object.entries(n)){let n=i?.alias?.trim();if(n&&n===r&&e!==t)throw Error(`Alias ${r} already points to ${e}.`)}return n[t]={...n[t]??{},alias:r},{...e,agents:{...e.agents,defaults:{...e.agents?.defaults,models:n}}}}),J(n),n.log(`Alias ${r} -> ${i.provider}/${i.model}`)}async function wt(e,t){let n=Je(e),r=await q(e=>{let t={...e.agents?.defaults?.models},r=!1;for(let[e,i]of Object.entries(t))if(i?.alias?.trim()===n){t[e]={...i,alias:void 0},r=!0;break}if(!r)throw Error(`Alias not found: ${n}`);return{...e,agents:{...e.agents,defaults:{...e.agents?.defaults,models:t}}}});J(t),(!r.agents?.defaults?.models||Object.values(r.agents.defaults.models).every(e=>!e?.alias?.trim()))&&t.log(`No aliases configured.`)}function Tt(e){return(typeof e==`symbol`||gt(e))&&(mt(`Cancelled.`),process.exit(0)),e}const Et=async e=>Tt(await ht({...e,message:B(e.message)})),Dt=async e=>Tt(await yt({...e,message:B(e.message)})),Ot=async e=>Tt(await vt({...e,message:B(e.message),options:e.options.map(e=>e.hint===void 0?e:{...e,hint:V(e.hint)})}));function kt(e){let t=e?.trim();return t?C(t)===`anthropic`?`anthropic`:`custom`:null}function At(e){return`${C(e)}:manual`}async function jt(e,t){let n=kt(e.provider??`anthropic`);if(n!==`anthropic`)throw Error(`Only --provider anthropic is supported for setup-token.`);if(!process.stdin.isTTY)throw Error(`setup-token requires an interactive TTY.`);if(!e.yes&&!await Et({message:"Have you run `claude setup-token` and copied the token?",initialValue:!0}))return;let r=await Dt({message:`Paste Anthropic setup-token`,validate:e=>Ze(String(e??``))}),i=String(r??``).trim(),a=At(n);f({profileId:a,credential:{type:`token`,provider:n,token:i}}),await q(e=>Xe(e,{profileId:a,provider:n,mode:`token`})),J(t),t.log(`Auth profile: ${a} (${n}/token)`)}async function Mt(e,t){let n=e.provider?.trim();if(!n)throw Error(`Missing --provider.`);let r=C(n),i=e.profileId?.trim()||At(r),a=await Dt({message:`Paste token for ${r}`,validate:e=>e?.trim()?void 0:`Required`}),o=String(a??``).trim(),s=e.expiresIn?.trim()&&e.expiresIn.trim().length>0?Date.now()+b(String(e.expiresIn??``).trim(),{defaultUnit:`d`}):void 0;f({profileId:i,credential:{type:`token`,provider:r,token:o,...s?{expires:s}:{}}}),await q(e=>Xe(e,{profileId:i,provider:r,mode:`token`})),J(t),t.log(`Auth profile: ${i} (${r}/token)`)}async function Nt(e,t){let n=await Ot({message:`Token provider`,options:[{value:`anthropic`,label:`anthropic`},{value:`custom`,label:`custom (type provider id)`}]}),r=n===`custom`?C(String(await Dt({message:`Provider id`,validate:e=>e?.trim()?void 0:`Required`}))):n;if(await Ot({message:`Token method`,options:[...r===`anthropic`?[{value:`setup-token`,label:`setup-token (claude)`,hint:"Paste a setup-token from `claude setup-token`"}]:[],{value:`paste`,label:`paste token`}]})===`setup-token`){await jt({provider:r},t);return}let i=At(r);await Mt({provider:r,profileId:String(await Dt({message:`Profile id`,initialValue:i,validate:e=>e?.trim()?void 0:`Required`})).trim(),expiresIn:await Et({message:`Does this token expire?`,initialValue:!1})?String(await Dt({message:`Expires in (duration)`,initialValue:`365d`,validate:e=>{try{b(String(e??``),{defaultUnit:`d`});return}catch{return`Invalid duration (e.g. 365d, 12h, 30m)`}}})).trim():void 0},t)}function Pt(e,t){let n=t?.trim();if(!n)return null;let r=tt(e,n);if(r)return r;let i=e.map(e=>e.id).filter(Boolean).toSorted((e,t)=>e.localeCompare(t)),a=i.length>0?i.join(`, `):`(none)`;throw Error(`Unknown provider "${n}". Loaded providers: ${a}. Verify plugins via \`${I(`openclaw plugins list --json`)}\`.`)}function Ft(e){return e.type===`api_key`?`api_key`:e.type===`token`?`token`:`oauth`}async function It(e){let t=await $e({prompter:e.prompter,runtime:e.runtime,isRemote:Qe(),openUrl:async e=>{await z(e)},localBrowserMessage:`Complete sign-in in browser…`});if(!t)throw Error(`OpenAI Codex OAuth did not return credentials.`);let n=await Ye(`openai-codex`,t,e.agentDir,{syncSiblingAgents:!0});await q(t=>{let r=Xe(t,{profileId:n,provider:`openai-codex`,mode:`oauth`});return e.opts.setDefault&&(r=He(r).next),r}),J(e.runtime),e.runtime.log(`Auth profile: ${n} (openai-codex/oauth)`),e.opts.setDefault?e.runtime.log(`Default model set to ${qe}`):e.runtime.log(`Default model available: ${qe} (use --set-default to apply)`)}async function Lt(e,t){if(!process.stdin.isTTY)throw Error(`models auth login requires an interactive TTY.`);let n=await Le(),r=N(n),i=be(n,r),a=xe(n,r)??P(),o=C(String(e.provider??``)),s=Ne();if(o===`openai-codex`){await It({opts:e,runtime:t,prompter:s,agentDir:i});return}let c=at({config:n,workspaceDir:a});if(c.length===0)throw Error(`No provider plugins found. Install one via \`${I(`openclaw plugins install`)}\`.`);let l=Pt(c,e.provider)??await s.select({message:`Select a provider`,options:c.map(e=>({value:e.id,label:e.label,hint:e.docsPath?`Docs: ${e.docsPath}`:void 0}))}).then(e=>tt(c,String(e)));if(!l)throw Error(`Unknown provider. Use --provider <id> to pick a provider plugin.`);let u=it(l,e.method)??(l.auth.length===1?l.auth[0]:await s.select({message:`Auth method for ${l.label}`,options:l.auth.map(e=>({value:e.id,label:e.label,hint:e.hint}))}).then(e=>l.auth.find(t=>t.id===String(e))));if(!u)throw Error(`Unknown auth method. Use --method <id> to select one.`);let d=Qe(),p=await u.run({config:n,agentDir:i,workspaceDir:a,prompter:s,runtime:t,isRemote:d,openUrl:async e=>{await z(e)},oauth:{createVpsAwareHandlers:e=>rt(e)}});for(let e of p.profiles)f({profileId:e.profileId,credential:e.credential,agentDir:i});await q(t=>{let n=t;p.configPatch&&(n=nt(n,p.configPatch));for(let e of p.profiles)n=Xe(n,{profileId:e.profileId,provider:e.credential.provider,mode:Ft(e.credential)});return e.setDefault&&p.defaultModel&&(n=ot(n,p.defaultModel)),n}),J(t);for(let e of p.profiles)t.log(`Auth profile: ${e.profileId} (${e.credential.provider}/${Ft(e.credential)})`);p.defaultModel&&t.log(e.setDefault?`Default model set to ${p.defaultModel}`:`Default model available: ${p.defaultModel} (use --set-default to apply)`),p.notes&&p.notes.length>0&&await s.note(p.notes.join(`
2
2
  `),`Provider notes`)}function Rt(e,t){let n=Re({cfg:e,rawAgentId:t})??N(e);return{agentId:n,agentDir:be(e,n)}}function zt(e,t){let n=C(t),r=e.order?.[n];return Array.isArray(r)?r:[]}async function Bt(e,t){let n=e.provider?.trim();if(!n)throw Error(`Missing --provider.`);let r=C(n),i=await Y({commandName:`models auth-order`,runtime:t}),{agentId:a,agentDir:o}=Rt(i,e.agent);return{cfg:i,agentId:a,agentDir:o,provider:r}}async function Vt(e,t){let{agentId:n,agentDir:r,provider:a}=await Bt(e,t),o=zt(ae(r,{allowKeychainPrompt:!1}),a);if(e.json){t.log(JSON.stringify({agentId:n,agentDir:r,provider:a,authStorePath:i(`${r}/auth-profiles.json`),order:o.length>0?o:null},null,2));return}t.log(`Agent: ${n}`),t.log(`Provider: ${a}`),t.log(`Auth file: ${i(`${r}/auth-profiles.json`)}`),t.log(o.length>0?`Order override: ${o.join(`, `)}`:`Order override: (none)`)}async function Ht(e,t){let{agentId:n,agentDir:r,provider:i}=await Bt(e,t);if(!await y({agentDir:r,provider:i,order:null}))throw Error(`Failed to update auth-profiles.json (lock busy?).`);t.log(`Agent: ${n}`),t.log(`Provider: ${i}`),t.log(`Cleared per-agent order override.`)}async function Ut(e,t){let{agentId:n,agentDir:r,provider:i}=await Bt(e,t),a=ae(r,{allowKeychainPrompt:!1}),o=i,s=we(e.order??[]);if(s.length===0)throw Error(`Missing profile ids. Provide one or more profile ids.`);for(let e of s){let t=a.profiles[e];if(!t)throw Error(`Auth profile "${e}" not found in ${r}.`);if(C(t.provider)!==o)throw Error(`Auth profile "${e}" is for ${t.provider}, not ${i}.`)}let c=await y({agentDir:r,provider:i,order:s});if(!c)throw Error(`Failed to update auth-profiles.json (lock busy?).`);t.log(`Agent: ${n}`),t.log(`Provider: ${i}`),t.log(`Order override: ${zt(c,i).join(`, `)}`)}function X(e,t){return M(e.agents?.defaults?.[t])}function Wt(e,t){let n=j(e.agents?.defaults?.[t.key]);return{...e,agents:{...e.agents,defaults:{...e.agents?.defaults,[t.key]:Ve(n,{fallbacks:t.fallbacks}),...t.models?{models:t.models}:void 0}}}}async function Gt(e,t,n){Be(t);let r=X(await Y({commandName:`models ${e.key} list`,runtime:n}),e.key);if(t.json){n.log(JSON.stringify({fallbacks:r},null,2));return}if(t.plain){for(let e of r)n.log(e);return}if(n.log(`${e.label} (${r.length}):`),r.length===0){n.log(`- none`);return}for(let e of r)n.log(`- ${e}`)}async function Kt(e,t,n){let r=await q(n=>{let r=We({raw:t,cfg:n}),i=x(r.provider,r.model),a={...n.agents?.defaults?.models};a[i]||(a[i]={});let o=X(n,e.key);return ze({cfg:n,entries:o}).includes(i)?n:Wt(n,{key:e.key,fallbacks:[...o,i],models:a})});J(n),n.log(`${e.logPrefix}: ${X(r,e.key).join(`, `)}`)}async function qt(e,t,n){let r=await q(n=>{let r=We({raw:t,cfg:n}),i=x(r.provider,r.model),a=re({cfg:n,defaultProvider:k}),o=X(n,e.key),s=o.filter(e=>{let t=oe({raw:String(e??``),defaultProvider:k,aliasIndex:a});return t?x(t.ref.provider,t.ref.model)!==i:!0});if(s.length===o.length)throw Error(`${e.notFoundLabel} not found: ${i}`);return Wt(n,{key:e.key,fallbacks:s})});J(n),n.log(`${e.logPrefix}: ${X(r,e.key).join(`, `)}`)}async function Jt(e,t){await q(t=>Wt(t,{key:e.key,fallbacks:[]})),J(t),t.log(e.clearedMessage)}async function Yt(e,t){return await Gt({label:`Fallbacks`,key:`model`},e,t)}async function Xt(e,t){return await Kt({label:`Fallbacks`,key:`model`,logPrefix:`Fallbacks`},e,t)}async function Zt(e,t){return await qt({label:`Fallbacks`,key:`model`,notFoundLabel:`Fallback`,logPrefix:`Fallbacks`},e,t)}async function Qt(e){return await Jt({key:`model`,clearedMessage:`Fallback list cleared.`},e)}async function $t(e,t){return await Gt({label:`Image fallbacks`,key:`imageModel`},e,t)}async function en(e,t){return await Kt({label:`Image fallbacks`,key:`imageModel`,logPrefix:`Image fallbacks`},e,t)}async function tn(e,t){return await qt({label:`Image fallbacks`,key:`imageModel`,notFoundLabel:`Image fallback`,logPrefix:`Image fallbacks`},e,t)}async function nn(e){return await Jt({key:`imageModel`,clearedMessage:`Image fallback list cleared.`},e)}function rn(e){let t=te({cfg:e,defaultProvider:k,defaultModel:se}),n=re({cfg:e,defaultProvider:k}),r=[],i=new Map,a=new Map;for(let[e,t]of n.byKey.entries())a.set(e,t);let o=(e,t)=>{let n=x(e.provider,e.model);i.has(n)||(i.set(n,new Set),r.push(n)),i.get(n)?.add(t)};o(t,`default`);let s=M(e.agents?.defaults?.model),c=M(e.agents?.defaults?.imageModel),l=ye(e.agents?.defaults?.imageModel)??``;if(s.forEach((e,t)=>{let r=oe({raw:String(e??``),defaultProvider:k,aliasIndex:n});r&&o(r.ref,`fallback#${t+1}`)}),l){let e=oe({raw:l,defaultProvider:k,aliasIndex:n});e&&o(e.ref,`image`)}c.forEach((e,t)=>{let r=oe({raw:String(e??``),defaultProvider:k,aliasIndex:n});r&&o(r.ref,`img-fallback#${t+1}`)});for(let t of Object.keys(e.agents?.defaults?.models??{})){let e=T(String(t??``),k);e&&o(e,`configured`)}return{entries:r.map(e=>{let t=e.indexOf(`/`);return{key:e,ref:{provider:t===-1?e:e.slice(0,t),model:t===-1?``:e.slice(t+1)},tags:i.get(e)??new Set,aliases:a.get(e)??[]}})}}const an=`MODEL_AVAILABILITY_UNAVAILABLE`;function on(e){return e instanceof Error?e.stack??`${e.name}: ${e.message}`:String(e)}function sn(e){return e instanceof Error?e.code===an:!1}const cn=(e,t,n)=>!t||!n?!1:!!(v(n,e).length>0||e===`amazon-bedrock`&&O()||l(e)||u(t,e));function ln(e){let t=Error(e);return t.code=an,t}function un(e){return sn(e)&&e instanceof Error?e:ln(`Model availability unavailable: getAvailable() failed.\n${on(e)}`)}function dn(e){if(!Array.isArray(e))throw ln(`Model availability unavailable: getAvailable() returned a non-array value.`);for(let t of e)if(!t||typeof t!=`object`||typeof t.provider!=`string`||typeof t.id!=`string`)throw ln(`Model availability unavailable: getAvailable() returned invalid model entries.`);return e}function fn(e){let t;try{t=e.getAvailable()}catch(e){throw un(e)}try{return dn(t)}catch(e){throw un(e)}}async function pn(e,t){let n=S(),r=ke(Ae(n),n),i=r.getAll(),a,o;try{let e=fn(r);a=new Set(e.map(e=>x(e.provider,e.id)))}catch(e){if(!sn(e))throw e;a=void 0,o||=on(e)}return{registry:r,models:i,availableKeys:a,availabilityErrorMessage:o}}function mn(e){let{model:t,key:n,tags:r,aliases:i=[],availableKeys:a,cfg:o,authStore:s,allowProviderAvailabilityFallback:c=!1}=e;if(!t)return{key:n,name:n,input:`-`,contextWindow:null,local:null,available:null,tags:[...r,`missing`],missing:!0};let l=t.input.join(`+`)||`text`,u=Ke(t.baseUrl),d=a?.has(x(t.provider,t.id))??!1,f=a!==void 0&&!c?d:d||(o&&s?cn(t.provider,o,s):!1),p=i.length>0?[`alias:${i.join(`,`)}`]:[],m=new Set(r);if(p.length>0){for(let e of m)(e===`alias`||e.startsWith(`alias:`))&&m.delete(e);for(let e of p)m.add(e)}return{key:n,name:t.name||t.id,input:l,contextWindow:t.contextWindow??null,local:u,available:f,tags:Array.from(m),missing:!1}}function hn(e,t){return!(e.provider&&t.provider.toLowerCase()!==e.provider||e.local&&!Ke(t.baseUrl??``))}function gn(e){let t=e.context.configuredByKey.get(e.key);return mn({model:e.model,key:e.key,tags:t?Array.from(t.tags):[],aliases:t?.aliases??[],availableKeys:e.context.availableKeys,cfg:e.context.cfg,authStore:e.context.authStore,allowProviderAvailabilityFallback:e.allowProviderAvailabilityFallback??!1})}async function _n(e,t){let n=await pn(e,t);return{...n,discoveredKeys:new Set(n.models.map(e=>x(e.provider,e.id)))}}function vn(e){let t=new Set,n=[...e.models].toSorted((e,t)=>{let n=e.provider.localeCompare(t.provider);return n===0?e.id.localeCompare(t.id):n});for(let r of n){if(!hn(e.context.filter,r))continue;let n=x(r.provider,r.id);e.rows.push(gn({model:r,key:n,context:e.context})),t.add(n)}return t}async function yn(e){let t=await Oe({config:e.context.cfg});for(let n of t){if(e.context.filter.provider&&n.provider.toLowerCase()!==e.context.filter.provider)continue;let t=x(n.provider,n.id);if(e.seenKeys.has(t))continue;let r=ue({provider:n.provider,modelId:n.id,modelRegistry:e.modelRegistry,cfg:e.context.cfg});!r||!hn(e.context.filter,r)||(e.rows.push(gn({model:r,key:t,context:e.context,allowProviderAvailabilityFallback:!e.context.discoveredKeys.has(t)})),e.seenKeys.add(t))}}function bn(e){for(let t of e.entries){if(e.context.filter.provider&&t.ref.provider.toLowerCase()!==e.context.filter.provider)continue;let n=ue({provider:t.ref.provider,modelId:t.ref.model,modelRegistry:e.modelRegistry,cfg:e.context.cfg});e.context.filter.local&&n&&!Ke(n.baseUrl??``)||e.context.filter.local&&!n||e.rows.push(mn({model:n,key:t.key,tags:Array.from(t.tags),aliases:t.aliases,availableKeys:e.context.availableKeys,cfg:e.context.cfg,authStore:e.context.authStore,allowProviderAvailabilityFallback:n?!e.context.discoveredKeys.has(x(n.provider,n.id)):!1}))}}const xn=e=>!!(n()&&!e?.json&&!e?.plain),Z=(e,t)=>e.padEnd(t),Sn=(t,n)=>n?t===`default`?e.success(t):t===`image`?e.accentBright(t):t===`configured`?e.accent(t):t===`missing`?e.error(t):t.startsWith(`fallback#`)||t.startsWith(`img-fallback#`)?e.warn(t):t.startsWith(`alias:`)?e.accentDim(t):e.muted(t):t,Cn=(e,t)=>e.length<=t?e:t<=3?e.slice(0,t):`${e.slice(0,t-3)}...`;function wn(n,r,i={}){if(i.json){r.log(JSON.stringify({count:n.length,models:n},null,2));return}if(i.plain){for(let e of n)r.log(e.key);return}let a=xn(i),o=[Z(`Model`,42),Z(`Input`,10),Z(`Ctx`,8),Z(`Local`,5),Z(`Auth`,5),`Tags`].join(` `);r.log(a?e.heading(o):o);for(let i of n){let n=Z(Cn(i.key,42),42),o=Z(i.input||`-`,10),s=Z(Ue(i.contextWindow),8),c=Z(i.local===null?`-`:i.local?`yes`:`no`,5),l=Z(i.available===null?`-`:i.available?`yes`:`no`,5),u=i.tags.length>0?a?i.tags.map(e=>Sn(e,a)).join(`,`):i.tags.join(`,`):``,d=t(a,i.input.includes(`image`)?e.accentBright:e.info,o),f=t(a,i.local===null?e.muted:i.local?e.success:e.muted,c),p=t(a,i.available===null?e.muted:i.available?e.success:e.error,l),m=[a?e.accent(n):n,d,s,f,p,u].join(` `);r.log(m)}}async function Tn(e,t){Be(e);let{ensureAuthProfileStore:n}=await import(`./model-selection-D_WMcs-m.js`).then(e=>e.Ct),{ensureOpenClawModelsJson:r}=await import(`./models-config-C5gOZ_nc.js`).then(e=>e.n),{sourceConfig:i,resolvedConfig:a}=await xt({commandName:`models list`,runtime:t}),o=n(),s=(()=>{let t=e.provider?.trim();if(t)return T(`${t}/_`,`anthropic`)?.provider??t.toLowerCase()})(),c,l=new Set,u,d;try{await r(i??a);let e=await _n(a,{sourceConfig:i});c=e.registry,l=e.discoveredKeys,u=e.availableKeys,d=e.availabilityErrorMessage}catch(e){t.error(`Model registry unavailable:\n${on(e)}`),process.exitCode=1;return}d!==void 0&&t.error(`Model availability lookup failed; falling back to auth heuristics for discovered models: ${d}`);let{entries:f}=rn(a),p=new Map(f.map(e=>[e.key,e])),m=[],h={cfg:a,authStore:o,availableKeys:u,configuredByKey:p,discoveredKeys:l,filter:{provider:s,local:e.local}};if(e.all){let e=vn({rows:m,models:c?.getAll()??[],context:h});c&&await yn({rows:m,modelRegistry:c,context:h,seenKeys:e})}else{let e=c;if(!e){t.error(`Model registry unavailable.`),process.exitCode=1;return}bn({rows:m,entries:f,modelRegistry:e,context:h})}if(m.length===0){t.log(`No models found.`);return}wn(m,t,e)}function En(e){return E(e,{includeEnvVarName:!1})?`marker(${e.trim()})`:A(e)}function Dn(e){let t=typeof e.value==`string`?e.value.trim():``;if(t){let n=En(t);return e.kind===`token`?`token:${n}`:n}if(e.ref){let t=`ref(${e.ref.source}:${e.ref.id})`;return e.kind===`token`?`token:${t}`:t}return e.kind===`token`?`token:missing`:`missing`}function On(e){let{provider:t,cfg:n,store:r}=e,a=Date.now(),s=v(r,t),c=(e,t)=>{let n=ne(r,t);if(!n||a>=n)return e;let i=r.usageStats?.[t];return`${e} [${typeof i?.disabledUntil==`number`&&a<i.disabledUntil?`disabled${i.disabledReason?`:${i.disabledReason}`:``}`:`cooldown`} ${ve(n-a)}]`},u=s.map(e=>{let t=r.profiles[e];if(!t)return`${e}=missing`;if(t.type===`api_key`)return c(`${e}=${Dn({value:t.key,ref:t.keyRef,kind:`api-key`})}`,e);if(t.type===`token`)return c(`${e}=${Dn({value:t.token,ref:t.tokenRef,kind:`token`})}`,e);let i=w({cfg:n,store:r,profileId:e}),a=i===e?``:i.startsWith(e)?i.slice(e.length).trim():`(${i})`;return c(`${e}=OAuth${a?` ${a}`:``}`,e)}),f=s.filter(e=>r.profiles[e]?.type===`oauth`).length,p=s.filter(e=>r.profiles[e]?.type===`token`).length,m=s.filter(e=>r.profiles[e]?.type===`api_key`).length,h=l(t),g=o(n,t),_=d({cfg:n,provider:t});return{provider:t,effective:s.length>0?{kind:`profiles`,detail:i(ie())}:h?{kind:`env`,detail:h.source.includes(`OAUTH_TOKEN`)||h.source.toLowerCase().includes(`oauth`)?`OAuth (env)`:A(h.apiKey)}:_?{kind:`models.json`,detail:En(_.apiKey)}:{kind:`missing`,detail:`missing`},profiles:{count:s.length,oauth:f,token:p,apiKey:m,labels:u},...h?{env:{value:h.source.includes(`OAUTH_TOKEN`)||h.source.toLowerCase().includes(`oauth`)?`OAuth (env)`:A(h.apiKey),source:h.source}}:{},...g?{modelsJson:{value:En(g),source:`models.json: ${i(e.modelsPath)}`}}:{}}}function kn(e){return e?e===`auth`||e===`auth_permanent`?`auth`:e===`rate_limit`||e===`overloaded`?`rate_limit`:e===`billing`?`billing`:e===`timeout`?`timeout`:e===`format`?`format`:`unknown`:`unknown`}function An(e){let t=new Map;for(let n of e){let e=T(String(n??``),k);if(!e)continue;let r=t.get(e.provider)??[];r.includes(e.model)||r.push(e.model),t.set(e.provider,r)}return t}function jn(e){let{provider:t,candidates:n,catalog:r}=e,i=n.get(t);if(i&&i.length>0)return{provider:t,model:i[0]};let a=r.find(e=>e.provider===t);return a?{provider:a.provider,model:a.id}:null}function Mn(e){return e===`missing_credential`?`missing_credential`:e===`expired`?`expired`:e===`invalid_expires`?`invalid_expires`:e===`unresolved_ref`?`unresolved_ref`:`ineligible_profile`}function Nn(e){let t=`Auth profile credentials are missing or expired.`;return e===`expired`?`${t}\n↳ Auth reason [expired]: token credentials are expired.`:e===`invalid_expires`?`${t}\n↳ Auth reason [invalid_expires]: token expires must be a positive Unix ms timestamp.`:e===`missing_credential`?`${t}\n↳ Auth reason [missing_credential]: no inline credential or SecretRef is configured.`:e===`unresolved_ref`?`${t}\n↳ Auth reason [unresolved_ref]: configured SecretRef could not be resolved.`:`${t}\n↳ Auth reason [ineligible_profile]: profile is incompatible with provider config.`}function Pn(e,t){let n=t.secrets?.defaults;return e.type===`api_key`?Te(e.key)===void 0?F(e.keyRef,n):null:e.type===`token`&&Te(e.token)===void 0?F(e.tokenRef,n):null}function Fn(e){return`Auth profile credentials are missing or expired.\n↳ Auth reason [unresolved_ref]: could not resolve SecretRef "${e}".`}async function In(e){if(!e.profile)return null;let t=Pn(e.profile,e.cfg);if(!t)return null;try{return await le(t,{config:e.cfg,env:process.env,cache:e.cache}),null}catch{return{reasonCode:`unresolved_ref`,error:Fn(`${t.source}:${t.provider}:${t.id}`)}}}async function Ln(e){let{cfg:t,providers:n,modelCandidates:r,options:i}=e,a=ae(),o=i.provider?.trim(),s=o?C(o):null,c=new Set((i.profileIds??[]).map(e=>e.trim()).filter(Boolean)),d={},f=await Oe({config:t}),p=An(r),h=[],g=[];for(let e of n){let n=C(e);if(s&&n!==s)continue;let r=jn({provider:n,candidates:p,catalog:f}),i=v(a,n),o=D(a.order,n)??D(t?.auth?.order,n),_=o&&o.length>0?new Set(m({cfg:t,store:a,provider:n})):null,y=c.size?i.filter(e=>c.has(e)):i;if(y.length>0){for(let e of y){let i=a.profiles[e],s=i?.type,c=w({cfg:t,store:a,profileId:e});if(o&&!o.includes(e)){g.push({provider:n,profileId:e,model:r?`${r.provider}/${r.model}`:void 0,label:c,source:`profile`,mode:s,status:`unknown`,reasonCode:`excluded_by_auth_order`,error:`Excluded by auth.order for this provider.`});continue}if(_&&!_.has(e)){let i=Mn(ce({cfg:t,store:a,provider:n,profileId:e}).reasonCode);g.push({provider:n,model:r?`${r.provider}/${r.model}`:void 0,profileId:e,label:c,source:`profile`,mode:s,status:`unknown`,reasonCode:i,error:Nn(i)});continue}let l=await In({cfg:t,profile:i,cache:d});if(l){g.push({provider:n,model:r?`${r.provider}/${r.model}`:void 0,profileId:e,label:c,source:`profile`,mode:s,status:`unknown`,reasonCode:l.reasonCode,error:l.error});continue}if(!r){g.push({provider:n,model:void 0,profileId:e,label:c,source:`profile`,mode:s,status:`no_model`,reasonCode:`no_model`,error:`No model available for probe`});continue}h.push({provider:n,model:r,profileId:e,label:c,source:`profile`,mode:s})}continue}if(c.size>0)continue;let b=l(n),x=u(t,n);if(!b&&!x)continue;let S=b?`env`:`models.json`,T=b?`env`:`models.json`,ee=b?.source.includes(`OAUTH_TOKEN`)?`oauth`:`api_key`;if(!r){g.push({provider:n,model:void 0,label:S,source:T,mode:ee,status:`no_model`,reasonCode:`no_model`,error:`No model available for probe`});continue}h.push({provider:n,model:r,label:S,source:T,mode:ee})}return{targets:h,results:g}}async function Rn(e){let{cfg:t,agentId:n,agentDir:r,workspaceDir:i,sessionDir:a,target:o,timeoutMs:s,maxTokens:c}=e;if(!o.model)return{provider:o.provider,model:void 0,profileId:o.profileId,label:o.label,source:o.source,mode:o.mode,status:`no_model`,reasonCode:`no_model`,error:`No model available for probe`};let l=`probe-${o.provider}-${lt.randomUUID()}`,u=Ee(l,n);await ct.mkdir(a,{recursive:!0});let d=Date.now();try{return await fe({sessionId:l,sessionFile:u,agentId:n,workspaceDir:i,agentDir:r,config:t,prompt:`Reply with OK. Do not use tools.`,provider:o.model.provider,model:o.model.model,authProfileId:o.profileId,authProfileIdSource:o.profileId?`user`:void 0,timeoutMs:s,runId:`probe-${lt.randomUUID()}`,lane:`auth-probe:${o.provider}:${o.profileId??o.source}`,thinkLevel:`off`,reasoningLevel:`off`,verboseLevel:`off`,streamParams:{maxTokens:c}}),{provider:o.provider,model:`${o.model.provider}/${o.model.model}`,profileId:o.profileId,label:o.label,source:o.source,mode:o.mode,status:`ok`,latencyMs:Date.now()-d}}catch(e){let t=pe(e);return{provider:o.provider,model:`${o.model.provider}/${o.model.model}`,profileId:o.profileId,label:o.label,source:o.source,mode:o.mode,status:kn(t.reason),error:G(t.message),latencyMs:Date.now()-d}}}async function zn(e){let{cfg:t,targets:n,timeoutMs:r,maxTokens:i,onProgress:a}=e,o=Math.max(1,Math.min(n.length||1,e.concurrency)),s=N(t),c=S(),l=xe(t,s)??P(),u=De(s);await ct.mkdir(l,{recursive:!0});let d=0,f=Array.from({length:n.length}),p=0,m=async()=>{for(;;){let e=p;if(p+=1,e>=n.length)return;let o=n[e];a?.({completed:d,total:n.length,label:`Probing ${o.provider}${o.profileId?` (${o.label})`:``}`}),f[e]=await Rn({cfg:t,agentId:s,agentDir:c,workspaceDir:l,sessionDir:u,target:o,timeoutMs:r,maxTokens:i}),d+=1,a?.({completed:d,total:n.length})}};return await Promise.all(Array.from({length:o},()=>m())),f.filter(e=>!!e)}async function Bn(e){let t=Date.now(),n=await Ln({cfg:e.cfg,providers:e.providers,modelCandidates:e.modelCandidates,options:e.options}),r=n.targets.length;e.onProgress?.({completed:0,total:r});let i=r?await zn({cfg:e.cfg,targets:n.targets,timeoutMs:e.options.timeoutMs,maxTokens:e.options.maxTokens,concurrency:e.options.concurrency,onProgress:e.onProgress}):[],a=Date.now();return{startedAt:t,finishedAt:a,durationMs:a-t,totalTargets:r,options:e.options,results:[...n.results,...i]}}function Vn(e){return!e&&e!==0?`-`:K(e)}function Hn(e){return e.slice().toSorted((e,t)=>{let n=e.provider.localeCompare(t.provider);if(n!==0)return n;let r=e.label||e.profileId||``,i=t.label||t.profileId||``;return r.localeCompare(i)})}function Un(e){return e.totalTargets===0?`No probe targets.`:`Probed ${e.totalTargets} target${e.totalTargets===1?``:`s`} in ${K(e.durationMs)}`}async function Wn(n,r){if(Be(n),n.plain&&n.probe)throw Error(`--probe cannot be used with --plain output.`);let a=c().configPath,o=await Y({commandName:`models status`,runtime:r}),s=Re({cfg:o,rawAgentId:n.agent}),u=s?be(o,s):S(),d=s?Ce(o,s):void 0,f=s?Se(o,s):void 0,p=s?ee({cfg:o,agentId:s}):te({cfg:o,defaultProvider:k,defaultModel:se}),m=ye(o.agents?.defaults?.model)??``,_=d??m,v=`${p.provider}/${p.model}`,y=_||v,b=M(o.agents?.defaults?.model),x=f??b,C=ye(o.agents?.defaults?.imageModel)??``,w=M(o.agents?.defaults?.imageModel),E=Object.entries(o.agents?.defaults?.models??{}).reduce((e,[t,n])=>{let r=typeof n?.alias==`string`?n.alias.trim():void 0;return r&&(e[r]=t),e},{}),D=Object.keys(o.agents?.defaults?.models??{}),O=ae(u),ce=st.join(u,`models.json`),le=new Set(Object.values(O.profiles).map(e=>e.provider).filter(e=>!!e)),ue=new Set(Object.keys(o.models?.providers??{}).map(e=>typeof e==`string`?e.trim():``).filter(Boolean)),fe=new Set,pe=new Set;for(let e of[y,...x,C,...w,...D]){let t=T(String(e??``),k);t?.provider&&fe.add(t.provider)}for(let e of[y,...x,C,...w]){let t=T(String(e??``),k);t?.provider&&pe.add(t.provider)}let A=new Set;for(let e of[`anthropic`,`github-copilot`,`google-vertex`,`openai`,`google`,`groq`,`cerebras`,`xai`,`openrouter`,`zai`,`mistral`,`synthetic`])l(e)&&A.add(e);let j=Array.from(new Set([...le,...ue,...fe,...A])).map(e=>typeof e==`string`?e.trim():``).filter(Boolean).toSorted((e,t)=>e.localeCompare(t)),xe=h(),N=g(process.env)||o.env?.shellEnv?.enabled===!0,P=j.map(e=>On({provider:e,cfg:o,store:O,modelsPath:ce})).filter(e=>e.profiles.count>0||!!e.env||!!e.modelsJson),we=new Map(P.map(e=>[e.provider,e])),F=Array.from(pe).filter(e=>!we.has(e)).toSorted((e,t)=>e.localeCompare(t)),Te=n.probeProfile?(Array.isArray(n.probeProfile)?n.probeProfile:[n.probeProfile]).flatMap(e=>String(e??``).split(`,`)).map(e=>e.trim()).filter(Boolean):[],Ee=n.probeTimeout?Number(n.probeTimeout):8e3;if(!Number.isFinite(Ee)||Ee<=0)throw Error(`--probe-timeout must be a positive number (ms).`);let De=n.probeConcurrency?Number(n.probeConcurrency):2;if(!Number.isFinite(De)||De<=0)throw Error(`--probe-concurrency must be > 0.`);let Oe=n.probeMaxTokens?Number(n.probeMaxTokens):8;if(!Number.isFinite(Oe)||Oe<=0)throw Error(`--probe-max-tokens must be > 0.`);let ke=re({cfg:o,defaultProvider:k}),Ae=[_||v,...x,C,...w,...D].filter(Boolean).map(e=>oe({raw:String(e??``),defaultProvider:k,aliasIndex:ke})?.ref).filter(e=>!!e).map(e=>`${e.provider}/${e.model}`),L;n.probe&&(L=await Me({label:`Probing auth profiles…`,total:1},async e=>await Bn({cfg:o,providers:j,modelCandidates:Ae,options:{provider:n.probeProvider,profileIds:Te,timeoutMs:Ee,concurrency:De,maxTokens:Oe},onProgress:e})));let R=P.filter(e=>e.profiles.oauth>0||e.profiles.token>0||e.env?.value===`OAuth (env)`).map(e=>{let t=e.profiles.oauth+e.profiles.token+(e.env?.value===`OAuth (env)`?1:0);return`${e.provider} (${t})`}),z=ge({store:O,cfg:o,warnAfterMs:_e,providers:j}),B=z.profiles.filter(e=>e.type===`oauth`||e.type===`token`),je=(()=>{let e=Date.now(),t=[];for(let n of Object.keys(O.usageStats??{})){let r=ne(O,n);if(!r||e>=r)continue;let i=O.usageStats?.[n],a=typeof i?.disabledUntil==`number`&&e<i.disabledUntil?`disabled`:`cooldown`;t.push({profileId:n,provider:O.profiles[n]?.provider,kind:a,reason:i?.disabledReason,until:r,remainingMs:r-e})}return t.toSorted((e,t)=>e.remainingMs-t.remainingMs)})(),V=(()=>{let e=B.some(e=>[`expired`,`missing`].includes(e.status))||F.length>0,t=B.some(e=>e.status===`expiring`);return e?1:t?2:0})();if(n.json){r.log(JSON.stringify({configPath:a,...s?{agentId:s}:{},agentDir:u,defaultModel:y,resolvedDefault:v,fallbacks:x,imageModel:C||null,imageFallbacks:w,...s?{modelConfig:{defaultSource:d?`agent`:`defaults`,fallbacksSource:f===void 0?`defaults`:`agent`}}:{},aliases:E,allowed:D,auth:{storePath:ie(u),shellEnvFallback:{enabled:N,appliedKeys:xe},providersWithOAuth:R,missingProvidersInUse:F,providers:P,unusableProfiles:je,oauth:{warnAfterMs:z.warnAfterMs,profiles:z.profiles,providers:z.providers},probes:L}},null,2)),n.check&&r.exit(V);return}if(n.plain){r.log(v),n.check&&r.exit(V);return}let H=xn(n),U=n=>t(H,e.accent,n.padEnd(14)),W=(e,t)=>U(t?`${e} (${t})`:e),Ne=_&&_!==v?`${v} (from ${_})`:v;r.log(`${U(`Config`)}${t(H,e.muted,`:`)} ${t(H,e.info,i(a))}`),r.log(`${U(`Agent dir`)}${t(H,e.muted,`:`)} ${t(H,e.info,i(u))}`),r.log(`${W(`Default`,s?d?`agent`:`defaults`:void 0)}${t(H,e.muted,`:`)} ${t(H,e.success,Ne)}`),r.log(`${W(`Fallbacks (${x.length||0})`,s?f===void 0?`defaults`:`agent`:void 0)}${t(H,e.muted,`:`)} ${t(H,x.length?e.warn:e.muted,x.length?x.join(`, `):`-`)}`),r.log(`${W(`Image model`,s?`defaults`:void 0)}${t(H,e.muted,`:`)} ${t(H,C?e.accentBright:e.muted,C||`-`)}`),r.log(`${W(`Image fallbacks (${w.length||0})`,s?`defaults`:void 0)}${t(H,e.muted,`:`)} ${t(H,w.length?e.accentBright:e.muted,w.length?w.join(`, `):`-`)}`),r.log(`${U(`Aliases (${Object.keys(E).length||0})`)}${t(H,e.muted,`:`)} ${t(H,Object.keys(E).length?e.accent:e.muted,Object.keys(E).length?Object.entries(E).map(([t,n])=>H?`${e.accentDim(t)} ${e.muted(`->`)} ${e.info(n)}`:`${t} -> ${n}`).join(`, `):`-`)}`),r.log(`${U(`Configured models (${D.length||0})`)}${t(H,e.muted,`:`)} ${t(H,D.length?e.info:e.muted,D.length?D.join(`, `):`all`)}`),r.log(``),r.log(t(H,e.heading,`Auth overview`)),r.log(`${U(`Auth store`)}${t(H,e.muted,`:`)} ${t(H,e.info,i(ie(u)))}`),r.log(`${U(`Shell env`)}${t(H,e.muted,`:`)} ${t(H,N?e.success:e.muted,N?`on`:`off`)}${xe.length?t(H,e.muted,` (applied: ${xe.join(`, `)})`):``}`),r.log(`${U(`Providers w/ OAuth/tokens (${R.length||0})`)}${t(H,e.muted,`:`)} ${t(H,R.length?e.info:e.muted,R.length?R.join(`, `):`-`)}`);let Ie=n=>t(H,e.warn,n),G=(n,r)=>`${Ie(n)}=${t(H,e.info,r)}`,K=()=>t(H,e.muted,` | `);for(let n of P){let i=K(),a=[];a.push(G(`effective`,`${t(H,e.accentBright,n.effective.kind)}:${t(H,e.muted,n.effective.detail)}`)),n.profiles.count>0&&(a.push(G(`profiles`,`${n.profiles.count} (oauth=${n.profiles.oauth}, token=${n.profiles.token}, api_key=${n.profiles.apiKey})`)),n.profiles.labels.length>0&&a.push(t(H,e.info,n.profiles.labels.join(`, `)))),n.env&&a.push(G(`env`,`${n.env.value}${i}${G(`source`,n.env.source)}`)),n.modelsJson&&a.push(G(`models.json`,`${n.modelsJson.value}${i}${G(`source`,n.modelsJson.source)}`)),r.log(`- ${e.heading(n.provider)} ${a.join(i)}`)}if(F.length>0){r.log(``),r.log(t(H,e.heading,`Missing auth`));for(let t of F){let n=t===`anthropic`?`Run \`claude setup-token\`, then \`${I(`openclaw models auth setup-token`)}\` or \`${I(`openclaw configure`)}\`.`:`Run \`${I(`openclaw configure`)}\` or set an API key env var.`;r.log(`- ${e.heading(t)} ${n}`)}}if(r.log(``),r.log(t(H,e.heading,`OAuth/token status`)),B.length===0)r.log(t(H,e.muted,`- none`));else{let n=new Map,i=Array.from(new Set(B.map(e=>de(e.provider)).filter(e=>!!e)));if(i.length>0)try{let e=await he({providers:i,agentDir:u,timeoutMs:3500});for(let t of e.providers){let e=me(t,{now:Date.now(),maxWindows:2,includeResets:!0});e&&n.set(t.provider,e)}}catch{}let a=n=>n===`ok`?t(H,e.success,`ok`):n===`static`?t(H,e.muted,`static`):n===`expiring`?t(H,e.warn,`expiring`):n===`missing`?t(H,e.warn,`unknown`):t(H,e.error,`expired`),o=new Map;for(let e of B){let t=o.get(e.provider);t?t.push(e):o.set(e.provider,[e])}for(let[i,s]of o){let o=de(i),c=o?n.get(o):void 0,l=c?t(H,e.muted,` usage: ${c}`):``;r.log(`- ${t(H,e.heading,i)}${l}`);for(let n of s){let i=n.label||n.profileId,o=t(H,e.accent,i),s=a(n.status),c=n.status===`static`?``:n.expiresAt?` expires in ${ve(n.remainingMs)}`:` expires unknown`;r.log(` - ${o} ${s}${c}`)}}}if(L)if(r.log(``),r.log(t(H,e.heading,`Auth probes`)),L.results.length===0)r.log(t(H,e.muted,`- none`));else{let n=Fe(),i=Hn(L.results),a=t=>t===`ok`?e.success:t===`rate_limit`||t===`timeout`||t===`billing`?e.warn:t===`auth`||t===`format`?e.error:e.muted,o=i.map(n=>{let r=t(H,a(n.status),n.status),i=Vn(n.latencyMs),o=n.model??`${n.provider}/-`,s=n.mode?` ${t(H,e.muted,`(${n.mode})`)}`:``,c=`${t(H,e.accent,n.label)}${s}`,l=n.error?.trim(),u=l?`\n${t(H,e.muted,`↳ ${l}`)}`:``,d=`${r}${t(H,e.muted,` · ${i}`)}${u}`;return{Model:t(H,e.heading,o),Profile:c,Status:d}});r.log(Pe({width:n,columns:[{key:`Model`,header:`Model`,minWidth:18},{key:`Profile`,header:`Profile`,minWidth:24},{key:`Status`,header:`Status`,minWidth:12}],rows:o}).trimEnd()),r.log(t(H,e.muted,Un(L)))}n.check&&r.exit(V)}const Gn={name:`ping`,description:`Return OK.`,parameters:pt.Object({})};function Kn(e){return typeof e!=`number`||!Number.isFinite(e)||e<=0?null:e>0xe8d4a51000?Math.round(e):Math.round(e*1e3)}function qn(e){return e&&e.toLowerCase().split(/[^a-z]+/).filter(Boolean).includes(`image`)?[`text`,`image`]:[`text`]}function Q(e){if(typeof e==`number`&&Number.isFinite(e))return e;if(typeof e!=`string`)return null;let t=e.trim();if(!t)return null;let n=Number(t);return Number.isFinite(n)?n:null}function Jn(e){if(!e||typeof e!=`object`)return null;let t=e,n=Q(t.prompt),r=Q(t.completion),i=Q(t.request)??0,a=Q(t.image)??0,o=Q(t.web_search)??0,s=Q(t.internal_reasoning)??0;return n===null||r===null?null:{prompt:n,completion:r,request:i,image:a,webSearch:o,internalReasoning:s}}function Yn(e){return e.id.endsWith(`:free`)?!0:e.pricing?e.pricing.prompt===0&&e.pricing.completion===0:!1}async function Xn(e,t){let n=new AbortController,r=setTimeout(n.abort.bind(n),e);try{return await t(n.signal)}finally{clearTimeout(r)}}async function Zn(e){let t=await e(`https://openrouter.ai/api/v1/models`,{headers:{Accept:`application/json`}});if(!t.ok)throw Error(`OpenRouter /models failed: HTTP ${t.status}`);let n=await t.json();return(Array.isArray(n.data)?n.data:[]).map(e=>{if(!e||typeof e!=`object`)return null;let t=e,n=typeof t.id==`string`?t.id.trim():``;if(!n)return null;let r=typeof t.name==`string`&&t.name.trim()?t.name.trim():n,i=typeof t.context_length==`number`&&Number.isFinite(t.context_length)?t.context_length:null,a=typeof t.max_completion_tokens==`number`&&Number.isFinite(t.max_completion_tokens)?t.max_completion_tokens:typeof t.max_output_tokens==`number`&&Number.isFinite(t.max_output_tokens)?t.max_output_tokens:null,o=Array.isArray(t.supported_parameters)?t.supported_parameters.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(Boolean):[];return{id:n,name:r,contextLength:i,maxCompletionTokens:a,supportedParameters:o,supportedParametersCount:o.length,supportsToolsMeta:o.includes(`tools`),modality:typeof t.modality==`string`&&t.modality.trim()?t.modality.trim():null,inferredParamB:Ie(`${n} ${r}`),createdAtMs:Kn(t.created_at),pricing:Jn(t.pricing)}}).filter(e=>!!e)}async function Qn(e,t,n){let r={messages:[{role:`user`,content:`Call the ping tool with {} and nothing else.`,timestamp:Date.now()}],tools:[Gn]},i=Date.now();try{return(await Xn(n,n=>ut(e,r,{apiKey:t,maxTokens:256,temperature:0,toolChoice:`required`,signal:n}))).content.some(e=>e.type===`toolCall`)?{ok:!0,latencyMs:Date.now()-i}:{ok:!1,latencyMs:Date.now()-i,error:`No tool call returned`}}catch(e){return{ok:!1,latencyMs:Date.now()-i,error:e instanceof Error?e.message:String(e)}}}async function $n(e,t,n){let r={messages:[{role:`user`,content:[{type:`text`,text:`Reply with OK.`},{type:`image`,data:`iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+X3mIAAAAASUVORK5CYII=`,mimeType:`image/png`}],timestamp:Date.now()}]},i=Date.now();try{return await Xn(n,n=>ut(e,r,{apiKey:t,maxTokens:16,temperature:0,signal:n})),{ok:!0,latencyMs:Date.now()-i}}catch(e){return{ok:!1,latencyMs:Date.now()-i,error:e instanceof Error?e.message:String(e)}}}function er(e){return e.input?.includes(`image`)?e:{...e,input:Array.from(new Set([...e.input??[],`image`]))}}function tr(e){let{entry:t,isFree:n}=e;return{id:t.id,name:t.name,provider:`openrouter`,modelRef:`openrouter/${t.id}`,contextLength:t.contextLength,maxCompletionTokens:t.maxCompletionTokens,supportedParametersCount:t.supportedParametersCount,supportsToolsMeta:t.supportsToolsMeta,modality:t.modality,inferredParamB:t.inferredParamB,createdAtMs:t.createdAtMs,pricing:t.pricing,isFree:n,tool:e.tool,image:e.image}}async function nr(e,t,n,r){let i=Math.max(1,Math.floor(t)),a=Array.from({length:e.length},()=>void 0),o=0,s=0,c=async()=>{for(;;){let t=o;if(o+=1,t>=e.length)return;a[t]=await n(e[t],t),s+=1,r?.onProgress?.(s,e.length)}};return e.length===0?(r?.onProgress?.(0,0),a):(await Promise.all(Array.from({length:Math.min(i,e.length)},()=>c())),a)}async function rr(e={}){let t=e.fetchImpl??fetch,n=e.probe??!0,r=e.apiKey?.trim()||dt(`openrouter`)||``;if(n&&!r)throw Error(`Missing OpenRouter API key. Set OPENROUTER_API_KEY to run models scan.`);let i=Math.max(1,Math.floor(e.timeoutMs??12e3)),a=Math.max(1,Math.floor(e.concurrency??3)),o=Math.max(0,Math.floor(e.minParamB??0)),s=Math.max(0,Math.floor(e.maxAgeDays??0)),c=e.providerFilter?.trim().toLowerCase()??``,l=await Zn(t),u=Date.now(),d=l.filter(e=>!(!Yn(e)||c&&(e.id.split(`/`)[0]?.toLowerCase()??``)!==c||o>0&&(e.inferredParamB??0)<o||s>0&&e.createdAtMs&&(u-e.createdAtMs)/(1440*60*1e3)>s)),f=ft(`openrouter`,`openrouter/auto`);return e.onProgress?.({phase:`probe`,completed:0,total:d.length}),nr(d,a,async e=>{let t=Yn(e);if(!n)return tr({entry:e,isFree:t,tool:{ok:!1,latencyMs:null,skipped:!0},image:{ok:!1,latencyMs:null,skipped:!0}});let a={...f,id:e.id,name:e.name||e.id,contextWindow:e.contextLength??f.contextWindow,maxTokens:e.maxCompletionTokens??f.maxTokens,input:qn(e.modality),reasoning:f.reasoning};return tr({entry:e,isFree:t,tool:await Qn(a,r,i),image:a.input?.includes(`image`)?await $n(er(a),r,i):{ok:!1,latencyMs:null,skipped:!0}})},{onProgress:(t,n)=>e.onProgress?.({phase:`probe`,completed:t,total:n})})}const ir=e=>_t({...e,message:B(e.message),options:e.options.map(e=>e.hint===void 0?e:{...e,hint:V(e.hint)})});function ar(e,t){if(gt(e))throw mt(je(`Model scan cancelled.`)??`Model scan cancelled.`),t.exit(0),Error(`unreachable`);return e}function or(e){return e.slice().toSorted((e,t)=>{let n=e.image.ok?1:0,r=t.image.ok?1:0;if(n!==r)return r-n;let i=e.tool.latencyMs??1/0,a=t.tool.latencyMs??1/0;return i===a?cr(e,t):i-a})}function sr(e){return e.slice().toSorted((e,t)=>{let n=e.image.latencyMs??1/0,r=t.image.latencyMs??1/0;return n===r?cr(e,t):n-r})}function cr(e,t){let n=e.contextLength??0,r=t.contextLength??0;if(n!==r)return r-n;let i=e.inferredParamB??0,a=t.inferredParamB??0;return i===a?e.modelRef.localeCompare(t.modelRef):a-i}function lr(e){return[e.tool.ok?`tool ${K(e.tool.latencyMs)}`:`tool fail`,e.image.skipped?`img skip`:e.image.ok?`img ${K(e.image.latencyMs)}`:`img fail`,e.contextLength?`ctx ${Ue(e.contextLength)}`:`ctx ?`,e.inferredParamB?`${e.inferredParamB}b`:null].filter(Boolean).join(` | `)}function ur(e,t){let n=e.filter(e=>e.tool.ok),r=e.filter(e=>e.image.ok),i=e.filter(e=>e.tool.ok&&e.image.ok),a=r.filter(e=>!e.tool.ok);t.log(`Scan results: tested ${e.length}, tool ok ${n.length}, image ok ${r.length}, tool+image ok ${i.length}, image only ${a.length}`)}function dr(e,t){let n=[Z(`Model`,42),Z(`Tool`,10),Z(`Image`,10),Z(`Ctx`,8),Z(`Params`,8),`Notes`].join(` `);t.log(n);for(let n of e){let e=Z(Cn(n.modelRef,42),42),r=Z(n.tool.ok?K(n.tool.latencyMs):`fail`,10),i=Z(n.image.ok?K(n.image.latencyMs):n.image.skipped?`skip`:`fail`,10),a=Z(Ue(n.contextLength),8),o=Z(n.inferredParamB?`${n.inferredParamB}b`:`-`,8),s=n.modality?`modality:${n.modality}`:``;t.log([e,r,i,a,o,s].join(` `))}}async function fr(e,t){let n=e.minParams?Number(e.minParams):void 0;if(n!==void 0&&(!Number.isFinite(n)||n<0))throw Error(`--min-params must be >= 0`);let r=e.maxAgeDays?Number(e.maxAgeDays):void 0;if(r!==void 0&&(!Number.isFinite(r)||r<0))throw Error(`--max-age-days must be >= 0`);let i=e.maxCandidates?Number(e.maxCandidates):6;if(!Number.isFinite(i)||i<=0)throw Error(`--max-candidates must be > 0`);let o=e.timeout?Number(e.timeout):void 0;if(o!==void 0&&(!Number.isFinite(o)||o<=0))throw Error(`--timeout must be > 0`);let s=e.concurrency?Number(e.concurrency):void 0;if(s!==void 0&&(!Number.isFinite(s)||s<=0))throw Error(`--concurrency must be > 0`);let c=await Y({commandName:`models scan`,runtime:t}),l=e.probe??!0,u;if(l)try{u=(await a({provider:`openrouter`,cfg:c})).apiKey}catch{u=void 0}let d=await Me({label:`Scanning OpenRouter models...`,indeterminate:!1,enabled:e.json!==!0},async t=>await rr({apiKey:u??void 0,minParamB:n,maxAgeDays:r,providerFilter:e.provider,timeoutMs:o,concurrency:s,probe:l,onProgress:({phase:e,completed:n,total:r})=>{e===`probe`&&t({completed:n,total:r,label:`${l?`Probing models`:`Scanning models`} (${n}/${r})`})}}));if(!l){e.json?t.log(JSON.stringify(d,null,2)):(t.log(`Found ${d.length} OpenRouter free models (metadata only; pass --probe to test tools/images).`),dr(or(d),t));return}let f=d.filter(e=>e.tool.ok);if(f.length===0)throw Error(`No tool-capable OpenRouter free models found.`);let p=or(d),m=or(f),h=sr(d.filter(e=>e.image.ok)),g=m.filter(e=>e.image.ok),_=(g.length>0?g:m).slice(0,Math.floor(i)).map(e=>e.modelRef),v=h.slice(0,Math.floor(i)).map(e=>e.modelRef);e.json||(ur(d,t),dr(p,t));let y=e.input===!1,b=process.stdin.isTTY&&!e.yes&&!y&&!e.json,x=_,S=v;if(b)x=ar(await ir({message:`Select fallback models (ordered)`,options:m.map(e=>({value:e.modelRef,label:e.modelRef,hint:lr(e)})),initialValues:_}),t),h.length>0&&(S=ar(await ir({message:`Select image fallback models (ordered)`,options:h.map(e=>({value:e.modelRef,label:e.modelRef,hint:lr(e)})),initialValues:v}),t));else if(!process.stdin.isTTY&&!e.yes&&!y&&!e.json)throw Error(`Non-interactive scan: pass --yes to apply defaults.`);if(x.length===0)throw Error(`No models selected for fallbacks.`);if(e.setImage&&S.length===0)throw Error(`No image-capable models selected for image model.`);if(await q(t=>{let n={...t.agents?.defaults?.models};for(let e of x)n[e]||(n[e]={});for(let e of S)n[e]||(n[e]={});let r=j(t.agents?.defaults?.imageModel),i=S.length>0?{...r?.primary?{primary:r.primary}:void 0,fallbacks:S,...e.setImage?{primary:S[0]}:{}}:t.agents?.defaults?.imageModel,a=j(t.agents?.defaults?.model),o={...t.agents?.defaults,model:{...a?.primary?{primary:a.primary}:void 0,fallbacks:x,...e.setDefault?{primary:x[0]}:{}},...i?{imageModel:i}:{},models:n};return{...t,agents:{...t.agents,defaults:o}}}),e.json){t.log(JSON.stringify({selected:x,selectedImages:S,setDefault:!!e.setDefault,setImage:!!e.setImage,results:d,warnings:[]},null,2));return}J(t),t.log(`Fallbacks: ${x.join(`, `)}`),S.length>0&&t.log(`Image fallbacks: ${S.join(`, `)}`),e.setDefault&&t.log(`Default model: ${x[0]}`),e.setImage&&S.length>0&&t.log(`Image model: ${S[0]}`)}async function pr(e,t){let n=await q(t=>Ge({cfg:t,modelRaw:e,field:`model`}));J(t),t.log(`Default model: ${ye(n.agents?.defaults?.model)??e}`)}async function mr(e,t){let n=await q(t=>Ge({cfg:t,modelRaw:e,field:`imageModel`}));J(t),t.log(`Image model: ${ye(n.agents?.defaults?.imageModel)??e}`)}function $(e){return U(r,e)}function hr(t){let n=t.command(`models`).description(`Model discovery, scanning, and configuration`).option(`--status-json`,"Output JSON (alias for `models status --json`)",!1).option(`--status-plain`,"Plain output (alias for `models status --plain`)",!1).option(`--agent <id>`,`Agent id to inspect (overrides OPENCLAW_AGENT_DIR/PI_CODING_AGENT_DIR)`).addHelpText(`after`,()=>`\n${e.muted(`Docs:`)} ${H(`/cli/models`,`docs.openclaw.ai/cli/models`)}\n`);n.command(`list`).description(`List models (configured by default)`).option(`--all`,`Show full model catalog`,!1).option(`--local`,`Filter to local models`,!1).option(`--provider <name>`,`Filter by provider`).option(`--json`,`Output JSON`,!1).option(`--plain`,`Plain line output`,!1).action(async e=>{await $(async()=>{await Tn(e,r)})}),n.command(`status`).description(`Show configured model state`).option(`--json`,`Output JSON`,!1).option(`--plain`,`Plain output`,!1).option(`--check`,`Exit non-zero if auth is expiring/expired (1=expired/missing, 2=expiring)`,!1).option(`--probe`,`Probe configured provider auth (live)`,!1).option(`--probe-provider <name>`,`Only probe a single provider`).option(`--probe-profile <id>`,`Only probe specific auth profile ids (repeat or comma-separated)`,(e,t)=>{let n=Array.isArray(t)?t:t?[t]:[];return n.push(e),n}).option(`--probe-timeout <ms>`,`Per-probe timeout in ms`).option(`--probe-concurrency <n>`,`Concurrent probes`).option(`--probe-max-tokens <n>`,`Probe max tokens (best-effort)`).option(`--agent <id>`,`Agent id to inspect (overrides OPENCLAW_AGENT_DIR/PI_CODING_AGENT_DIR)`).action(async(e,t)=>{let n=W(t,`agent`)??e.agent;await $(async()=>{await Wn({json:!!e.json,plain:!!e.plain,check:!!e.check,probe:!!e.probe,probeProvider:e.probeProvider,probeProfile:e.probeProfile,probeTimeout:e.probeTimeout,probeConcurrency:e.probeConcurrency,probeMaxTokens:e.probeMaxTokens,agent:n},r)})}),n.command(`set`).description(`Set the default model`).argument(`<model>`,`Model id or alias`).action(async e=>{await $(async()=>{await pr(e,r)})}),n.command(`set-image`).description(`Set the image model`).argument(`<model>`,`Model id or alias`).action(async e=>{await $(async()=>{await mr(e,r)})});let i=n.command(`aliases`).description(`Manage model aliases`);i.command(`list`).description(`List model aliases`).option(`--json`,`Output JSON`,!1).option(`--plain`,`Plain output`,!1).action(async e=>{await $(async()=>{await St(e,r)})}),i.command(`add`).description(`Add or update a model alias`).argument(`<alias>`,`Alias name`).argument(`<model>`,`Model id or alias`).action(async(e,t)=>{await $(async()=>{await Ct(e,t,r)})}),i.command(`remove`).description(`Remove a model alias`).argument(`<alias>`,`Alias name`).action(async e=>{await $(async()=>{await wt(e,r)})});let a=n.command(`fallbacks`).description(`Manage model fallback list`);a.command(`list`).description(`List fallback models`).option(`--json`,`Output JSON`,!1).option(`--plain`,`Plain output`,!1).action(async e=>{await $(async()=>{await Yt(e,r)})}),a.command(`add`).description(`Add a fallback model`).argument(`<model>`,`Model id or alias`).action(async e=>{await $(async()=>{await Xt(e,r)})}),a.command(`remove`).description(`Remove a fallback model`).argument(`<model>`,`Model id or alias`).action(async e=>{await $(async()=>{await Zt(e,r)})}),a.command(`clear`).description(`Clear all fallback models`).action(async()=>{await $(async()=>{await Qt(r)})});let o=n.command(`image-fallbacks`).description(`Manage image model fallback list`);o.command(`list`).description(`List image fallback models`).option(`--json`,`Output JSON`,!1).option(`--plain`,`Plain output`,!1).action(async e=>{await $(async()=>{await $t(e,r)})}),o.command(`add`).description(`Add an image fallback model`).argument(`<model>`,`Model id or alias`).action(async e=>{await $(async()=>{await en(e,r)})}),o.command(`remove`).description(`Remove an image fallback model`).argument(`<model>`,`Model id or alias`).action(async e=>{await $(async()=>{await tn(e,r)})}),o.command(`clear`).description(`Clear all image fallback models`).action(async()=>{await $(async()=>{await nn(r)})}),n.command(`scan`).description(`Scan OpenRouter free models for tools + images`).option(`--min-params <b>`,`Minimum parameter size (billions)`).option(`--max-age-days <days>`,`Skip models older than N days`).option(`--provider <name>`,`Filter by provider prefix`).option(`--max-candidates <n>`,`Max fallback candidates`,`6`).option(`--timeout <ms>`,`Per-probe timeout in ms`).option(`--concurrency <n>`,`Probe concurrency`).option(`--no-probe`,`Skip live probes; list free candidates only`).option(`--yes`,`Accept defaults without prompting`,!1).option(`--no-input`,`Disable prompts (use defaults)`).option(`--set-default`,`Set agents.defaults.model to the first selection`,!1).option(`--set-image`,`Set agents.defaults.imageModel to the first image selection`,!1).option(`--json`,`Output JSON`,!1).action(async e=>{await $(async()=>{await fr(e,r)})}),n.action(async e=>{await $(async()=>{await Wn({json:!!e?.statusJson,plain:!!e?.statusPlain,agent:e?.agent},r)})});let s=n.command(`auth`).description(`Manage model auth profiles`);s.option(`--agent <id>`,`Agent id for auth order get/set/clear`),s.action(()=>{s.help()}),s.command(`add`).description(`Interactive auth helper (setup-token or paste token)`).action(async()=>{await $(async()=>{await Nt({},r)})}),s.command(`login`).description(`Run a provider plugin auth flow (OAuth/API key)`).option(`--provider <id>`,`Provider id registered by a plugin`).option(`--method <id>`,`Provider auth method id`).option(`--set-default`,`Apply the provider's default model recommendation`,!1).action(async e=>{await $(async()=>{await Lt({provider:e.provider,method:e.method,setDefault:!!e.setDefault},r)})}),s.command(`setup-token`).description(`Run a provider CLI to create/sync a token (TTY required)`).option(`--provider <name>`,`Provider id (default: anthropic)`).option(`--yes`,`Skip confirmation`,!1).action(async e=>{await $(async()=>{await jt({provider:e.provider,yes:!!e.yes},r)})}),s.command(`paste-token`).description(`Paste a token into auth-profiles.json and update config`).requiredOption(`--provider <name>`,`Provider id (e.g. anthropic)`).option(`--profile-id <id>`,`Auth profile id (default: <provider>:manual)`).option(`--expires-in <duration>`,`Optional expiry duration (e.g. 365d, 12h). Stored as absolute expiresAt.`).action(async e=>{await $(async()=>{await Mt({provider:e.provider,profileId:e.profileId,expiresIn:e.expiresIn},r)})}),s.command(`login-github-copilot`).description(`Login to GitHub Copilot via GitHub device flow (TTY required)`).option(`--profile-id <id>`,`Auth profile id (default: github-copilot:github)`).option(`--yes`,`Overwrite existing profile without prompting`,!1).action(async e=>{await $(async()=>{await et({profileId:e.profileId,yes:!!e.yes},r)})});let c=s.command(`order`).description(`Manage per-agent auth profile order overrides`);c.command(`get`).description(`Show per-agent auth order override (from auth-profiles.json)`).requiredOption(`--provider <name>`,`Provider id (e.g. anthropic)`).option(`--agent <id>`,`Agent id (default: configured default agent)`).option(`--json`,`Output JSON`,!1).action(async(e,t)=>{let n=W(t,`agent`)??e.agent;await $(async()=>{await Vt({provider:e.provider,agent:n,json:!!e.json},r)})}),c.command(`set`).description(`Set per-agent auth order override (locks rotation to this list)`).requiredOption(`--provider <name>`,`Provider id (e.g. anthropic)`).option(`--agent <id>`,`Agent id (default: configured default agent)`).argument(`<profileIds...>`,`Auth profile ids (e.g. anthropic:default)`).action(async(e,t,n)=>{let i=W(n,`agent`)??t.agent;await $(async()=>{await Ut({provider:t.provider,agent:i,order:e},r)})}),c.command(`clear`).description(`Clear per-agent auth order override (fall back to config/round-robin)`).requiredOption(`--provider <name>`,`Provider id (e.g. anthropic)`).option(`--agent <id>`,`Agent id (default: configured default agent)`).action(async(e,t)=>{let n=W(t,`agent`)??e.agent;await $(async()=>{await Ht({provider:e.provider,agent:n},r)})})}export{hr as registerModelsCli};
@@ -1 +1 @@
1
- import{A as e,p as t}from"./subsystem-C7tbdlOl.js";import"./paths-BRJCySMM.js";import"./boolean-D15s2V33.js";import"./auth-profiles-BkhVHtgY.js";import"./agent-scope-DjUQMckI.js";import"./utils-bGrn0y-f.js";import"./openclaw-root-CnsBf6ZU.js";import"./github-copilot-token-ByNUYL2n.js";import"./env-overrides-fatFjayp.js";import"./version-q3SkUw2K.js";import"./registry-Bfa_Ykoc.js";import"./skills-DaxiAYb1.js";import"./frontmatter-C7mzDNxd.js";import"./plugins-CAHuRRVU.js";import"./logger-CzE2MhuY.js";import"./exec-CEAb_WUd.js";import"./windows-spawn-BgzBBwXL.js";import"./redact-Dhbd2Ou5.js";import"./path-alias-guards-kY_ZbWs-.js";import"./errors-DrzTb7KS.js";import"./send-CkCusmbI.js";import"./send-BlGs1R4s.js";import"./compact-BfHim3cA.js";import"./paths-Iw1AJLOG.js";import"./chat-envelope-Bznn2SoS.js";import"./models-config-JhtjMTo0.js";import"./tokens-DymrUOGE.js";import"./with-timeout-c1CzdShT.js";import"./deliver-BN5gbKUv.js";import"./diagnostic-ou4gNcG4.js";import"./send-CfpqUapa.js";import"./pi-model-discovery-Cqrh3PhQ.js";import"./exec-approvals-allowlist-DIBvoVsb.js";import"./exec-safe-bin-runtime-policy-y_ErZVFQ.js";import"./model-catalog--OA2KRxM.js";import"./fetch-Br9U2aWg.js";import"./audio-transcription-runner-hG3NgjtU.js";import"./fetch-guard-DOIM5NkG.js";import"./image-B6Fxt2ke.js";import"./tool-display-D4Lgnaij.js";import"./api-key-rotation-DIZSxMN4.js";import"./proxy-fetch-CCr-fxQ0.js";import"./ir-C205jOes.js";import"./render-DrrPmnMI.js";import"./target-errors-Befv_gd6.js";import"./commands-DcqfHXoH.js";import"./commands-registry-D2F_aNf1.js";import"./session-cost-usage-B0e3Qwrd.js";import"./session-utils-DtXFoDhI.js";import"./sqlite-C-YpDuDl.js";import"./call-B4oR7TXC.js";import"./pi-tools.policy-3jwvBbGG.js";import"./fetch-D6B2WSW_.js";import"./pairing-store-BXGybj6M.js";import"./exec-approvals-Dapj8H1y.js";import"./nodes-screen-DX6jz8OP.js";import"./restart-C27sljk1.js";import"./system-run-command-D6cuoREz.js";import"./skill-commands-FzYyVr7Q.js";import"./workspace-dirs-BTT7_AQX.js";import"./pairing-token-ByzqGayx.js";import"./channel-activity-W1yPxWJ3.js";import"./tables-Df7TI1wy.js";import"./runtime-web-tools-CzHbhY0M.js";import"./runtime-CHjN1UTv.js";import"./stagger-BDJo4a4e.js";import"./channel-selection-mEfryJZM.js";import"./plugin-auto-enable-Czb-XnGx.js";import"./send-CeULjLp_.js";import"./outbound-attachment-CxQjEgw4.js";import"./delivery-queue-C3NiY2Ub.js";import"./send-CLQzNoUy.js";import"./fetch-yQOUtDBh.js";import"./command-secret-targets-BzThfkzp.js";import"./connection-auth-C0uJgiku.js";import"./onboard-helpers-bAJ8ELmK.js";import"./prompt-style-LoGJ9Sd_.js";import"./pairing-labels-DdIEj5Sz.js";import"./search-manager-B35sLSi1.js";import"./manager-hztaxN5m.js";import"./memory-cli-Bp_xpCbr.js";import{t as n}from"./links-DRsshHiS.js";import{n as r,t as i}from"./cli-utils-C_maQ2m4.js";import"./help-format-BlhzdN7j.js";import"./progress-CR--5qDW.js";import"./provider-env-vars-Dt0Q29Su.js";import"./note-DwFvlGbe.js";import"./clack-prompter-BMrD-gme.js";import"./issue-format-CH9G9Aj1.js";import"./table-D3aNZFy4.js";import"./openai-codex-model-default-CkTYjzfF.js";import"./auth-token-DaHoE-yo.js";import"./logging-B7juU2TI.js";import{c as a}from"./provider-auth-helpers-DgQEZQZm.js";import"./oauth-tls-preflight-DcSHxlMA.js";import{_ as o,a as s,b as c,c as l,d as u,f as d,g as f,h as p,i as m,l as h,m as g,modelsListCommand as _,modelsStatusCommand as v,n as y,o as b,p as x,r as S,s as C,t as w,u as T,v as E,x as D,y as O}from"./models-CxaUXLzo.js";function k(e){return r(t,e)}function A(r){let A=r.command(`models`).description(`Model discovery, scanning, and configuration`).option(`--status-json`,"Output JSON (alias for `models status --json`)",!1).option(`--status-plain`,"Plain output (alias for `models status --plain`)",!1).option(`--agent <id>`,`Agent id to inspect (overrides OPENCLAW_AGENT_DIR/PI_CODING_AGENT_DIR)`).addHelpText(`after`,()=>`\n${e.muted(`Docs:`)} ${n(`/cli/models`,`docs.openclaw.ai/cli/models`)}\n`);A.command(`list`).description(`List models (configured by default)`).option(`--all`,`Show full model catalog`,!1).option(`--local`,`Filter to local models`,!1).option(`--provider <name>`,`Filter by provider`).option(`--json`,`Output JSON`,!1).option(`--plain`,`Plain line output`,!1).action(async e=>{await k(async()=>{await _(e,t)})}),A.command(`status`).description(`Show configured model state`).option(`--json`,`Output JSON`,!1).option(`--plain`,`Plain output`,!1).option(`--check`,`Exit non-zero if auth is expiring/expired (1=expired/missing, 2=expiring)`,!1).option(`--probe`,`Probe configured provider auth (live)`,!1).option(`--probe-provider <name>`,`Only probe a single provider`).option(`--probe-profile <id>`,`Only probe specific auth profile ids (repeat or comma-separated)`,(e,t)=>{let n=Array.isArray(t)?t:t?[t]:[];return n.push(e),n}).option(`--probe-timeout <ms>`,`Per-probe timeout in ms`).option(`--probe-concurrency <n>`,`Concurrent probes`).option(`--probe-max-tokens <n>`,`Probe max tokens (best-effort)`).option(`--agent <id>`,`Agent id to inspect (overrides OPENCLAW_AGENT_DIR/PI_CODING_AGENT_DIR)`).action(async(e,n)=>{let r=i(n,`agent`)??e.agent;await k(async()=>{await v({json:!!e.json,plain:!!e.plain,check:!!e.check,probe:!!e.probe,probeProvider:e.probeProvider,probeProfile:e.probeProfile,probeTimeout:e.probeTimeout,probeConcurrency:e.probeConcurrency,probeMaxTokens:e.probeMaxTokens,agent:r},t)})}),A.command(`set`).description(`Set the default model`).argument(`<model>`,`Model id or alias`).action(async e=>{await k(async()=>{await y(e,t)})}),A.command(`set-image`).description(`Set the image model`).argument(`<model>`,`Model id or alias`).action(async e=>{await k(async()=>{await w(e,t)})});let j=A.command(`aliases`).description(`Manage model aliases`);j.command(`list`).description(`List model aliases`).option(`--json`,`Output JSON`,!1).option(`--plain`,`Plain output`,!1).action(async e=>{await k(async()=>{await c(e,t)})}),j.command(`add`).description(`Add or update a model alias`).argument(`<alias>`,`Alias name`).argument(`<model>`,`Model id or alias`).action(async(e,n)=>{await k(async()=>{await O(e,n,t)})}),j.command(`remove`).description(`Remove a model alias`).argument(`<alias>`,`Alias name`).action(async e=>{await k(async()=>{await D(e,t)})});let M=A.command(`fallbacks`).description(`Manage model fallback list`);M.command(`list`).description(`List fallback models`).option(`--json`,`Output JSON`,!1).option(`--plain`,`Plain output`,!1).action(async e=>{await k(async()=>{await T(e,t)})}),M.command(`add`).description(`Add a fallback model`).argument(`<model>`,`Model id or alias`).action(async e=>{await k(async()=>{await l(e,t)})}),M.command(`remove`).description(`Remove a fallback model`).argument(`<model>`,`Model id or alias`).action(async e=>{await k(async()=>{await u(e,t)})}),M.command(`clear`).description(`Clear all fallback models`).action(async()=>{await k(async()=>{await h(t)})});let N=A.command(`image-fallbacks`).description(`Manage image model fallback list`);N.command(`list`).description(`List image fallback models`).option(`--json`,`Output JSON`,!1).option(`--plain`,`Plain output`,!1).action(async e=>{await k(async()=>{await b(e,t)})}),N.command(`add`).description(`Add an image fallback model`).argument(`<model>`,`Model id or alias`).action(async e=>{await k(async()=>{await m(e,t)})}),N.command(`remove`).description(`Remove an image fallback model`).argument(`<model>`,`Model id or alias`).action(async e=>{await k(async()=>{await C(e,t)})}),N.command(`clear`).description(`Clear all image fallback models`).action(async()=>{await k(async()=>{await s(t)})}),A.command(`scan`).description(`Scan OpenRouter free models for tools + images`).option(`--min-params <b>`,`Minimum parameter size (billions)`).option(`--max-age-days <days>`,`Skip models older than N days`).option(`--provider <name>`,`Filter by provider prefix`).option(`--max-candidates <n>`,`Max fallback candidates`,`6`).option(`--timeout <ms>`,`Per-probe timeout in ms`).option(`--concurrency <n>`,`Probe concurrency`).option(`--no-probe`,`Skip live probes; list free candidates only`).option(`--yes`,`Accept defaults without prompting`,!1).option(`--no-input`,`Disable prompts (use defaults)`).option(`--set-default`,`Set agents.defaults.model to the first selection`,!1).option(`--set-image`,`Set agents.defaults.imageModel to the first image selection`,!1).option(`--json`,`Output JSON`,!1).action(async e=>{await k(async()=>{await S(e,t)})}),A.action(async e=>{await k(async()=>{await v({json:!!e?.statusJson,plain:!!e?.statusPlain,agent:e?.agent},t)})});let P=A.command(`auth`).description(`Manage model auth profiles`);P.option(`--agent <id>`,`Agent id for auth order get/set/clear`),P.action(()=>{P.help()}),P.command(`add`).description(`Interactive auth helper (setup-token or paste token)`).action(async()=>{await k(async()=>{await p({},t)})}),P.command(`login`).description(`Run a provider plugin auth flow (OAuth/API key)`).option(`--provider <id>`,`Provider id registered by a plugin`).option(`--method <id>`,`Provider auth method id`).option(`--set-default`,`Apply the provider's default model recommendation`,!1).action(async e=>{await k(async()=>{await f({provider:e.provider,method:e.method,setDefault:!!e.setDefault},t)})}),P.command(`setup-token`).description(`Run a provider CLI to create/sync a token (TTY required)`).option(`--provider <name>`,`Provider id (default: anthropic)`).option(`--yes`,`Skip confirmation`,!1).action(async e=>{await k(async()=>{await E({provider:e.provider,yes:!!e.yes},t)})}),P.command(`paste-token`).description(`Paste a token into auth-profiles.json and update config`).requiredOption(`--provider <name>`,`Provider id (e.g. anthropic)`).option(`--profile-id <id>`,`Auth profile id (default: <provider>:manual)`).option(`--expires-in <duration>`,`Optional expiry duration (e.g. 365d, 12h). Stored as absolute expiresAt.`).action(async e=>{await k(async()=>{await o({provider:e.provider,profileId:e.profileId,expiresIn:e.expiresIn},t)})}),P.command(`login-github-copilot`).description(`Login to GitHub Copilot via GitHub device flow (TTY required)`).option(`--profile-id <id>`,`Auth profile id (default: github-copilot:github)`).option(`--yes`,`Overwrite existing profile without prompting`,!1).action(async e=>{await k(async()=>{await a({profileId:e.profileId,yes:!!e.yes},t)})});let F=P.command(`order`).description(`Manage per-agent auth profile order overrides`);F.command(`get`).description(`Show per-agent auth order override (from auth-profiles.json)`).requiredOption(`--provider <name>`,`Provider id (e.g. anthropic)`).option(`--agent <id>`,`Agent id (default: configured default agent)`).option(`--json`,`Output JSON`,!1).action(async(e,n)=>{let r=i(n,`agent`)??e.agent;await k(async()=>{await x({provider:e.provider,agent:r,json:!!e.json},t)})}),F.command(`set`).description(`Set per-agent auth order override (locks rotation to this list)`).requiredOption(`--provider <name>`,`Provider id (e.g. anthropic)`).option(`--agent <id>`,`Agent id (default: configured default agent)`).argument(`<profileIds...>`,`Auth profile ids (e.g. anthropic:default)`).action(async(e,n,r)=>{let a=i(r,`agent`)??n.agent;await k(async()=>{await g({provider:n.provider,agent:a,order:e},t)})}),F.command(`clear`).description(`Clear per-agent auth order override (fall back to config/round-robin)`).requiredOption(`--provider <name>`,`Provider id (e.g. anthropic)`).option(`--agent <id>`,`Agent id (default: configured default agent)`).action(async(e,n)=>{let r=i(n,`agent`)??e.agent;await k(async()=>{await d({provider:e.provider,agent:r},t)})})}export{A as registerModelsCli};
1
+ import{A as e,p as t}from"./subsystem-C7tbdlOl.js";import"./paths-BRJCySMM.js";import"./boolean-D15s2V33.js";import"./auth-profiles-BkhVHtgY.js";import"./agent-scope-DjUQMckI.js";import"./utils-bGrn0y-f.js";import"./openclaw-root-CnsBf6ZU.js";import"./github-copilot-token-ByNUYL2n.js";import"./env-overrides-fatFjayp.js";import"./version-q3SkUw2K.js";import"./registry-Bfa_Ykoc.js";import"./skills-DaxiAYb1.js";import"./frontmatter-C7mzDNxd.js";import"./plugins-CAHuRRVU.js";import"./logger-CzE2MhuY.js";import"./exec-CEAb_WUd.js";import"./windows-spawn-BgzBBwXL.js";import"./redact-Dhbd2Ou5.js";import"./path-alias-guards-kY_ZbWs-.js";import"./errors-DrzTb7KS.js";import"./send-CkCusmbI.js";import"./send-BlGs1R4s.js";import"./compact-DgbuvsDF.js";import"./paths-Iw1AJLOG.js";import"./chat-envelope-Bznn2SoS.js";import"./models-config-JhtjMTo0.js";import"./tokens-DymrUOGE.js";import"./with-timeout-c1CzdShT.js";import"./deliver-BN5gbKUv.js";import"./diagnostic-ou4gNcG4.js";import"./send-CfpqUapa.js";import"./pi-model-discovery-Cqrh3PhQ.js";import"./exec-approvals-allowlist-DIBvoVsb.js";import"./exec-safe-bin-runtime-policy-y_ErZVFQ.js";import"./model-catalog--OA2KRxM.js";import"./fetch-Br9U2aWg.js";import"./audio-transcription-runner-hG3NgjtU.js";import"./fetch-guard-DOIM5NkG.js";import"./image-B6Fxt2ke.js";import"./tool-display-D4Lgnaij.js";import"./api-key-rotation-DIZSxMN4.js";import"./proxy-fetch-CCr-fxQ0.js";import"./ir-C205jOes.js";import"./render-DrrPmnMI.js";import"./target-errors-Befv_gd6.js";import"./commands-DcqfHXoH.js";import"./commands-registry-D2F_aNf1.js";import"./session-cost-usage-B0e3Qwrd.js";import"./session-utils-DtXFoDhI.js";import"./sqlite-C-YpDuDl.js";import"./call-B4oR7TXC.js";import"./pi-tools.policy-3jwvBbGG.js";import"./fetch-D6B2WSW_.js";import"./pairing-store-BXGybj6M.js";import"./exec-approvals-Dapj8H1y.js";import"./nodes-screen-DX6jz8OP.js";import"./restart-C27sljk1.js";import"./system-run-command-D6cuoREz.js";import"./skill-commands-FzYyVr7Q.js";import"./workspace-dirs-BTT7_AQX.js";import"./pairing-token-ByzqGayx.js";import"./channel-activity-W1yPxWJ3.js";import"./tables-Df7TI1wy.js";import"./runtime-web-tools-CzHbhY0M.js";import"./runtime-CHjN1UTv.js";import"./stagger-BDJo4a4e.js";import"./channel-selection-mEfryJZM.js";import"./plugin-auto-enable-Czb-XnGx.js";import"./send-CeULjLp_.js";import"./outbound-attachment-CxQjEgw4.js";import"./delivery-queue-C3NiY2Ub.js";import"./send-CLQzNoUy.js";import"./fetch-yQOUtDBh.js";import"./command-secret-targets-BzThfkzp.js";import"./connection-auth-C0uJgiku.js";import"./onboard-helpers-bAJ8ELmK.js";import"./prompt-style-LoGJ9Sd_.js";import"./pairing-labels-DdIEj5Sz.js";import"./search-manager-B35sLSi1.js";import"./manager-hztaxN5m.js";import"./memory-cli-Bp_xpCbr.js";import{t as n}from"./links-DRsshHiS.js";import{n as r,t as i}from"./cli-utils-C_maQ2m4.js";import"./help-format-BlhzdN7j.js";import"./progress-CR--5qDW.js";import"./provider-env-vars-Dt0Q29Su.js";import"./note-DwFvlGbe.js";import"./clack-prompter-BMrD-gme.js";import"./issue-format-CH9G9Aj1.js";import"./table-D3aNZFy4.js";import"./openai-codex-model-default-CkTYjzfF.js";import"./auth-token-DaHoE-yo.js";import"./logging-B7juU2TI.js";import{c as a}from"./provider-auth-helpers-fIKVMJmj.js";import"./oauth-tls-preflight-DcSHxlMA.js";import{_ as o,a as s,b as c,c as l,d as u,f as d,g as f,h as p,i as m,l as h,m as g,modelsListCommand as _,modelsStatusCommand as v,n as y,o as b,p as x,r as S,s as C,t as w,u as T,v as E,x as D,y as O}from"./models-DhX1F_Pj.js";function k(e){return r(t,e)}function A(r){let A=r.command(`models`).description(`Model discovery, scanning, and configuration`).option(`--status-json`,"Output JSON (alias for `models status --json`)",!1).option(`--status-plain`,"Plain output (alias for `models status --plain`)",!1).option(`--agent <id>`,`Agent id to inspect (overrides OPENCLAW_AGENT_DIR/PI_CODING_AGENT_DIR)`).addHelpText(`after`,()=>`\n${e.muted(`Docs:`)} ${n(`/cli/models`,`docs.openclaw.ai/cli/models`)}\n`);A.command(`list`).description(`List models (configured by default)`).option(`--all`,`Show full model catalog`,!1).option(`--local`,`Filter to local models`,!1).option(`--provider <name>`,`Filter by provider`).option(`--json`,`Output JSON`,!1).option(`--plain`,`Plain line output`,!1).action(async e=>{await k(async()=>{await _(e,t)})}),A.command(`status`).description(`Show configured model state`).option(`--json`,`Output JSON`,!1).option(`--plain`,`Plain output`,!1).option(`--check`,`Exit non-zero if auth is expiring/expired (1=expired/missing, 2=expiring)`,!1).option(`--probe`,`Probe configured provider auth (live)`,!1).option(`--probe-provider <name>`,`Only probe a single provider`).option(`--probe-profile <id>`,`Only probe specific auth profile ids (repeat or comma-separated)`,(e,t)=>{let n=Array.isArray(t)?t:t?[t]:[];return n.push(e),n}).option(`--probe-timeout <ms>`,`Per-probe timeout in ms`).option(`--probe-concurrency <n>`,`Concurrent probes`).option(`--probe-max-tokens <n>`,`Probe max tokens (best-effort)`).option(`--agent <id>`,`Agent id to inspect (overrides OPENCLAW_AGENT_DIR/PI_CODING_AGENT_DIR)`).action(async(e,n)=>{let r=i(n,`agent`)??e.agent;await k(async()=>{await v({json:!!e.json,plain:!!e.plain,check:!!e.check,probe:!!e.probe,probeProvider:e.probeProvider,probeProfile:e.probeProfile,probeTimeout:e.probeTimeout,probeConcurrency:e.probeConcurrency,probeMaxTokens:e.probeMaxTokens,agent:r},t)})}),A.command(`set`).description(`Set the default model`).argument(`<model>`,`Model id or alias`).action(async e=>{await k(async()=>{await y(e,t)})}),A.command(`set-image`).description(`Set the image model`).argument(`<model>`,`Model id or alias`).action(async e=>{await k(async()=>{await w(e,t)})});let j=A.command(`aliases`).description(`Manage model aliases`);j.command(`list`).description(`List model aliases`).option(`--json`,`Output JSON`,!1).option(`--plain`,`Plain output`,!1).action(async e=>{await k(async()=>{await c(e,t)})}),j.command(`add`).description(`Add or update a model alias`).argument(`<alias>`,`Alias name`).argument(`<model>`,`Model id or alias`).action(async(e,n)=>{await k(async()=>{await O(e,n,t)})}),j.command(`remove`).description(`Remove a model alias`).argument(`<alias>`,`Alias name`).action(async e=>{await k(async()=>{await D(e,t)})});let M=A.command(`fallbacks`).description(`Manage model fallback list`);M.command(`list`).description(`List fallback models`).option(`--json`,`Output JSON`,!1).option(`--plain`,`Plain output`,!1).action(async e=>{await k(async()=>{await T(e,t)})}),M.command(`add`).description(`Add a fallback model`).argument(`<model>`,`Model id or alias`).action(async e=>{await k(async()=>{await l(e,t)})}),M.command(`remove`).description(`Remove a fallback model`).argument(`<model>`,`Model id or alias`).action(async e=>{await k(async()=>{await u(e,t)})}),M.command(`clear`).description(`Clear all fallback models`).action(async()=>{await k(async()=>{await h(t)})});let N=A.command(`image-fallbacks`).description(`Manage image model fallback list`);N.command(`list`).description(`List image fallback models`).option(`--json`,`Output JSON`,!1).option(`--plain`,`Plain output`,!1).action(async e=>{await k(async()=>{await b(e,t)})}),N.command(`add`).description(`Add an image fallback model`).argument(`<model>`,`Model id or alias`).action(async e=>{await k(async()=>{await m(e,t)})}),N.command(`remove`).description(`Remove an image fallback model`).argument(`<model>`,`Model id or alias`).action(async e=>{await k(async()=>{await C(e,t)})}),N.command(`clear`).description(`Clear all image fallback models`).action(async()=>{await k(async()=>{await s(t)})}),A.command(`scan`).description(`Scan OpenRouter free models for tools + images`).option(`--min-params <b>`,`Minimum parameter size (billions)`).option(`--max-age-days <days>`,`Skip models older than N days`).option(`--provider <name>`,`Filter by provider prefix`).option(`--max-candidates <n>`,`Max fallback candidates`,`6`).option(`--timeout <ms>`,`Per-probe timeout in ms`).option(`--concurrency <n>`,`Probe concurrency`).option(`--no-probe`,`Skip live probes; list free candidates only`).option(`--yes`,`Accept defaults without prompting`,!1).option(`--no-input`,`Disable prompts (use defaults)`).option(`--set-default`,`Set agents.defaults.model to the first selection`,!1).option(`--set-image`,`Set agents.defaults.imageModel to the first image selection`,!1).option(`--json`,`Output JSON`,!1).action(async e=>{await k(async()=>{await S(e,t)})}),A.action(async e=>{await k(async()=>{await v({json:!!e?.statusJson,plain:!!e?.statusPlain,agent:e?.agent},t)})});let P=A.command(`auth`).description(`Manage model auth profiles`);P.option(`--agent <id>`,`Agent id for auth order get/set/clear`),P.action(()=>{P.help()}),P.command(`add`).description(`Interactive auth helper (setup-token or paste token)`).action(async()=>{await k(async()=>{await p({},t)})}),P.command(`login`).description(`Run a provider plugin auth flow (OAuth/API key)`).option(`--provider <id>`,`Provider id registered by a plugin`).option(`--method <id>`,`Provider auth method id`).option(`--set-default`,`Apply the provider's default model recommendation`,!1).action(async e=>{await k(async()=>{await f({provider:e.provider,method:e.method,setDefault:!!e.setDefault},t)})}),P.command(`setup-token`).description(`Run a provider CLI to create/sync a token (TTY required)`).option(`--provider <name>`,`Provider id (default: anthropic)`).option(`--yes`,`Skip confirmation`,!1).action(async e=>{await k(async()=>{await E({provider:e.provider,yes:!!e.yes},t)})}),P.command(`paste-token`).description(`Paste a token into auth-profiles.json and update config`).requiredOption(`--provider <name>`,`Provider id (e.g. anthropic)`).option(`--profile-id <id>`,`Auth profile id (default: <provider>:manual)`).option(`--expires-in <duration>`,`Optional expiry duration (e.g. 365d, 12h). Stored as absolute expiresAt.`).action(async e=>{await k(async()=>{await o({provider:e.provider,profileId:e.profileId,expiresIn:e.expiresIn},t)})}),P.command(`login-github-copilot`).description(`Login to GitHub Copilot via GitHub device flow (TTY required)`).option(`--profile-id <id>`,`Auth profile id (default: github-copilot:github)`).option(`--yes`,`Overwrite existing profile without prompting`,!1).action(async e=>{await k(async()=>{await a({profileId:e.profileId,yes:!!e.yes},t)})});let F=P.command(`order`).description(`Manage per-agent auth profile order overrides`);F.command(`get`).description(`Show per-agent auth order override (from auth-profiles.json)`).requiredOption(`--provider <name>`,`Provider id (e.g. anthropic)`).option(`--agent <id>`,`Agent id (default: configured default agent)`).option(`--json`,`Output JSON`,!1).action(async(e,n)=>{let r=i(n,`agent`)??e.agent;await k(async()=>{await x({provider:e.provider,agent:r,json:!!e.json},t)})}),F.command(`set`).description(`Set per-agent auth order override (locks rotation to this list)`).requiredOption(`--provider <name>`,`Provider id (e.g. anthropic)`).option(`--agent <id>`,`Agent id (default: configured default agent)`).argument(`<profileIds...>`,`Auth profile ids (e.g. anthropic:default)`).action(async(e,n,r)=>{let a=i(r,`agent`)??n.agent;await k(async()=>{await g({provider:n.provider,agent:a,order:e},t)})}),F.command(`clear`).description(`Clear per-agent auth order override (fall back to config/round-robin)`).requiredOption(`--provider <name>`,`Provider id (e.g. anthropic)`).option(`--agent <id>`,`Agent id (default: configured default agent)`).action(async(e,n)=>{let r=i(n,`agent`)??e.agent;await k(async()=>{await d({provider:e.provider,agent:r},t)})})}export{A as registerModelsCli};
@@ -1 +1 @@
1
- import{t as e}from"./subsystem-B35lZH6M.js";import{Gs as t}from"./model-selection-D_WMcs-m.js";import{S as n,yr as r}from"./reply-Bv0w_dst.js";import{d as i,f as a,j as o}from"./agent-scope-DauKPN2a.js";import{d as s}from"./npm-pack-install-BS2u5bjW.js";import c from"node:path";const l=e(`plugins`);function u(e){let s=e?.config??t(),c=e?.workspaceDir?e.workspaceDir:i(s,a(s))??o();return{workspaceDir:c,...n({config:s,workspaceDir:c,logger:r(l)})}}function d(e,t){return e.startsWith(`.`)||e.startsWith(`~`)||c.isAbsolute(e)||t.some(t=>e.endsWith(t))}function f(e){let t=e.pin&&e.resolvedSpec?e.resolvedSpec:e.rawSpec;return e.pin?e.resolvedSpec?{recordSpec:t,pinNotice:`Pinned npm install record to ${e.resolvedSpec}.`}:{recordSpec:t,pinWarning:`Could not resolve exact npm version for --pin; storing original npm spec.`}:{recordSpec:t}}function p(e){return{source:`npm`,spec:e.spec,installPath:e.installPath,version:e.version,...s(e.resolution)}}function m(e){let t=f({rawSpec:e.rawSpec,pin:e.pin,resolvedSpec:e.resolution?.resolvedSpec});return g(t,e.log,e.warn),p({spec:t.recordSpec,installPath:e.installPath,version:e.version,resolution:e.resolution})}function h(e,t,n,r,i,a,o){return m({rawSpec:e,pin:t,installPath:n,version:r,resolution:i,log:a,warn:e=>a(o(e))})}function g(e,t,n){e.pinWarning&&n(e.pinWarning),e.pinNotice&&t(e.pinNotice)}export{u as i,h as n,d as r,p as t};
1
+ import{t as e}from"./subsystem-B35lZH6M.js";import{Gs as t}from"./model-selection-D_WMcs-m.js";import{S as n,yr as r}from"./reply-JaJmymld.js";import{d as i,f as a,j as o}from"./agent-scope-DauKPN2a.js";import{d as s}from"./npm-pack-install-BS2u5bjW.js";import c from"node:path";const l=e(`plugins`);function u(e){let s=e?.config??t(),c=e?.workspaceDir?e.workspaceDir:i(s,a(s))??o();return{workspaceDir:c,...n({config:s,workspaceDir:c,logger:r(l)})}}function d(e,t){return e.startsWith(`.`)||e.startsWith(`~`)||c.isAbsolute(e)||t.some(t=>e.endsWith(t))}function f(e){let t=e.pin&&e.resolvedSpec?e.resolvedSpec:e.rawSpec;return e.pin?e.resolvedSpec?{recordSpec:t,pinNotice:`Pinned npm install record to ${e.resolvedSpec}.`}:{recordSpec:t,pinWarning:`Could not resolve exact npm version for --pin; storing original npm spec.`}:{recordSpec:t}}function p(e){return{source:`npm`,spec:e.spec,installPath:e.installPath,version:e.version,...s(e.resolution)}}function m(e){let t=f({rawSpec:e.rawSpec,pin:e.pin,resolvedSpec:e.resolution?.resolvedSpec});return g(t,e.log,e.warn),p({spec:t.recordSpec,installPath:e.installPath,version:e.version,resolution:e.resolution})}function h(e,t,n,r,i,a,o){return m({rawSpec:e,pin:t,installPath:n,version:r,resolution:i,log:a,warn:e=>a(o(e))})}function g(e,t,n){e.pinWarning&&n(e.pinWarning),e.pinNotice&&t(e.pinNotice)}export{u as i,h as n,d as r,p as t};
@@ -1 +1 @@
1
- import{t as e}from"./subsystem-C7tbdlOl.js";import{ko as t}from"./auth-profiles-BkhVHtgY.js";import{d as n,f as r,j as i}from"./agent-scope-DjUQMckI.js";import{c as a,l as o}from"./compact-BfHim3cA.js";import{d as s}from"./npm-pack-install-iwQfZww0.js";import c from"node:path";const l=e(`plugins`);function u(e){let s=e?.config??t(),c=e?.workspaceDir?e.workspaceDir:n(s,r(s))??i();return{workspaceDir:c,...o({config:s,workspaceDir:c,logger:a(l)})}}function d(e,t){return e.startsWith(`.`)||e.startsWith(`~`)||c.isAbsolute(e)||t.some(t=>e.endsWith(t))}function f(e){let t=e.pin&&e.resolvedSpec?e.resolvedSpec:e.rawSpec;return e.pin?e.resolvedSpec?{recordSpec:t,pinNotice:`Pinned npm install record to ${e.resolvedSpec}.`}:{recordSpec:t,pinWarning:`Could not resolve exact npm version for --pin; storing original npm spec.`}:{recordSpec:t}}function p(e){return{source:`npm`,spec:e.spec,installPath:e.installPath,version:e.version,...s(e.resolution)}}function m(e){let t=f({rawSpec:e.rawSpec,pin:e.pin,resolvedSpec:e.resolution?.resolvedSpec});return g(t,e.log,e.warn),p({spec:t.recordSpec,installPath:e.installPath,version:e.version,resolution:e.resolution})}function h(e,t,n,r,i,a,o){return m({rawSpec:e,pin:t,installPath:n,version:r,resolution:i,log:a,warn:e=>a(o(e))})}function g(e,t,n){e.pinWarning&&n(e.pinWarning),e.pinNotice&&t(e.pinNotice)}export{u as i,h as n,d as r,p as t};
1
+ import{t as e}from"./subsystem-C7tbdlOl.js";import{ko as t}from"./auth-profiles-BkhVHtgY.js";import{d as n,f as r,j as i}from"./agent-scope-DjUQMckI.js";import{c as a,l as o}from"./compact-DgbuvsDF.js";import{d as s}from"./npm-pack-install-iwQfZww0.js";import c from"node:path";const l=e(`plugins`);function u(e){let s=e?.config??t(),c=e?.workspaceDir?e.workspaceDir:n(s,r(s))??i();return{workspaceDir:c,...o({config:s,workspaceDir:c,logger:a(l)})}}function d(e,t){return e.startsWith(`.`)||e.startsWith(`~`)||c.isAbsolute(e)||t.some(t=>e.endsWith(t))}function f(e){let t=e.pin&&e.resolvedSpec?e.resolvedSpec:e.rawSpec;return e.pin?e.resolvedSpec?{recordSpec:t,pinNotice:`Pinned npm install record to ${e.resolvedSpec}.`}:{recordSpec:t,pinWarning:`Could not resolve exact npm version for --pin; storing original npm spec.`}:{recordSpec:t}}function p(e){return{source:`npm`,spec:e.spec,installPath:e.installPath,version:e.version,...s(e.resolution)}}function m(e){let t=f({rawSpec:e.rawSpec,pin:e.pin,resolvedSpec:e.resolution?.resolvedSpec});return g(t,e.log,e.warn),p({spec:t.recordSpec,installPath:e.installPath,version:e.version,resolution:e.resolution})}function h(e,t,n,r,i,a,o){return m({rawSpec:e,pin:t,installPath:n,version:r,resolution:i,log:a,warn:e=>a(o(e))})}function g(e,t,n){e.pinWarning&&n(e.pinWarning),e.pinNotice&&t(e.pinNotice)}export{u as i,h as n,d as r,p as t};
@@ -1,5 +1,5 @@
1
- import{m as e,p as t}from"./subsystem-C7tbdlOl.js";import{u as n}from"./paths-BRJCySMM.js";import{No as r,Ro as i}from"./auth-profiles-BkhVHtgY.js";import{t as a}from"./command-format-CLxIPuLR.js";import{v as o}from"./utils-bGrn0y-f.js";import{s}from"./types.secrets-D4tbc3Wq.js";import{At as c}from"./plugins-CAHuRRVU.js";import{a as l,b as u,c as d,g as f,h as p,n as m,t as h,u as g}from"./onboard-helpers-bAJ8ELmK.js";import{t as _}from"./prompts-CMzglboN.js";import{t as v}from"./clack-prompter-BMrD-gme.js";import{t as y}from"./runtime-guard-Cpuk3V_0.js";import"./daemon-runtime-VcpeBRJV.js";import{t as b}from"./onboarding-Kz5K9mKB.js";import{n as x}from"./logging-B7juU2TI.js";import{i as S,r as C,t as w}from"./onboard-provider-auth-flags-CqbipO7D.js";import{t as T}from"./onboard-config-B7U20YRw.js";async function E(n,r=t){let i=v(),a=null;try{await b(n,r,i)}catch(e){if(e instanceof _){a=1;return}throw e}finally{e(`onboarding finish`,{resumeStdinIfPaused:!1}),a!==null&&r.exit(a)}}function D(e){return typeof e==`string`?e.trim().length>0:!!e}function O(e){let t=w.filter(({optionKey:t})=>D(e[t])).map(e=>({optionKey:e.optionKey,authChoice:e.authChoice,label:e.cliFlag}));return(D(e.customBaseUrl)||D(e.customModelId)||D(e.customApiKey))&&t.push({optionKey:`customBaseUrl`,authChoice:`custom-api-key`,label:`--custom-base-url/--custom-model-id/--custom-api-key`}),{choice:t[0]?.authChoice,matches:t}}function k(e){let{opts:t,runtime:n}=e,r=t.gatewayPort!==void 0;if(r&&(!Number.isFinite(t.gatewayPort)||(t.gatewayPort??0)<=0))return n.error(`Invalid --gateway-port`),n.exit(1),null;let i=r?t.gatewayPort:e.defaultPort,a=t.gatewayBind??`loopback`,o=t.gatewayAuth??`token`;if(o!==`token`&&o!==`password`)return n.error(`Invalid --gateway-auth (use token|password).`),n.exit(1),null;let l=o,u=t.tailscale??`off`,d=!!t.tailscaleResetOnExit;u!==`off`&&a!==`loopback`&&(a=`loopback`),u===`funnel`&&l!==`password`&&(l=`password`);let f=e.nextConfig,m=g(t.gatewayToken),h=g(process.env.OPENCLAW_GATEWAY_TOKEN),_=m||h||void 0,v=String(t.gatewayTokenRefEnv??``).trim();if(l===`token`)if(v){if(!s(v))return n.error(`Invalid --gateway-token-ref-env (use env var name like OPENCLAW_GATEWAY_TOKEN).`),n.exit(1),null;if(m)return n.error(`Use either --gateway-token or --gateway-token-ref-env, not both.`),n.exit(1),null;let e=process.env[v]?.trim();if(!e)return n.error(`Environment variable "${v}" is missing or empty.`),n.exit(1),null;_=e,f={...f,gateway:{...f.gateway,auth:{...f.gateway?.auth,mode:`token`,token:{source:`env`,provider:c(f,`env`,{preferFirstProviderForSource:!0}),id:v}}}}}else _||=p(),f={...f,gateway:{...f.gateway,auth:{...f.gateway?.auth,mode:`token`,token:_}}};if(l===`password`){let e=t.gatewayPassword?.trim();if(!e)return n.error(`Missing --gateway-password for password auth.`),n.exit(1),null;f={...f,gateway:{...f.gateway,auth:{...f.gateway?.auth,mode:`password`,password:e}}}}return f={...f,gateway:{...f.gateway,port:i,bind:a,tailscale:{...f.gateway?.tailscale,mode:u,resetOnExit:d}}},{nextConfig:f,port:i,bind:a,authMode:l,tailscaleMode:u,tailscaleResetOnExit:d,gatewayToken:_}}function A(e){e.opts.json&&e.runtime.log(JSON.stringify({mode:e.mode,workspace:e.workspaceDir,authChoice:e.authChoice,gateway:e.gateway,installDaemon:!!e.installDaemon,daemonRuntime:e.daemonRuntime,skipSkills:!!e.skipSkills,skipHealth:!!e.skipHealth},null,2))}function j(e){let{nextConfig:t,opts:n,runtime:r}=e;if(n.skipSkills)return t;let i=n.nodeManager??`npm`;return[`npm`,`pnpm`,`bun`].includes(i)?{...t,skills:{...t.skills,install:{...t.skills?.install,nodeManager:i}}}:(r.error(`Invalid --node-manager (use npm, pnpm, or bun)`),r.exit(1),t)}function M(e){return o((e.opts.workspace??e.baseConfig.agents?.defaults?.workspace??e.defaultWorkspaceDir).trim())}async function N(e){let{opts:t,runtime:r,baseConfig:o}=e,s=`local`,c=M({opts:t,baseConfig:o,defaultWorkspaceDir:h}),d=T(o,c),p=O(t);if(!t.authChoice&&p.matches.length>1){r.error([`Multiple API key flags were provided for non-interactive onboarding.`,`Use a single provider flag or pass --auth-choice explicitly.`,`Flags: ${p.matches.map(e=>e.label).join(`, `)}`].join(`
2
- `)),r.exit(1);return}let g=t.authChoice??p.choice??`skip`;if(g!==`skip`){let{applyNonInteractiveAuthChoice:e}=await import(`./auth-choice-k6G2nE28.js`),n=await e({nextConfig:d,authChoice:g,opts:t,runtime:r,baseConfig:o});if(!n)return;d=n}let _=n(o),v=k({nextConfig:d,opts:t,runtime:r,defaultPort:_});if(!v)return;if(d=v.nextConfig,d=j({nextConfig:d,opts:t,runtime:r}),d=m(d,{command:`onboard`,mode:s}),await i(d),x(r),await l(c,r,{skipBootstrap:!!d.agents?.defaults?.skipBootstrap}),t.installDaemon){let{installGatewayDaemonNonInteractive:e}=await import(`./daemon-install-BjSk7NFf.js`);await e({nextConfig:d,opts:t,runtime:r,port:v.port})}let y=t.daemonRuntime??`node`;if(!t.skipHealth){let{healthCommand:e}=await import(`./health-CiTej6rM.js`).then(e=>e.i);await u({url:f({bind:v.bind,port:v.port,customBindHost:d.gateway?.customBindHost,basePath:void 0}).wsUrl,token:v.gatewayToken,deadlineMs:15e3}),await e({json:!1,timeoutMs:1e4},r)}A({opts:t,runtime:r,mode:s,workspaceDir:c,authChoice:g,gateway:{port:v.port,bind:v.bind,authMode:v.authMode,tailscaleMode:v.tailscaleMode},installDaemon:!!t.installDaemon,daemonRuntime:t.installDaemon?y:void 0,skipSkills:!!t.skipSkills,skipHealth:!!t.skipHealth}),t.json||r.log(`Tip: run \`${a(`openclaw configure --section web`)}\` to store your Brave API key for web_search. Docs: https://docs.openclaw.ai/tools/web`)}async function P(e){let{opts:t,runtime:n,baseConfig:r}=e,o=`remote`,s=t.remoteUrl?.trim();if(!s){n.error(`Missing --remote-url for remote mode.`),n.exit(1);return}let c={...r,gateway:{...r.gateway,mode:`remote`,remote:{url:s,token:t.remoteToken?.trim()||void 0}}};c=m(c,{command:`onboard`,mode:o}),await i(c),x(n);let l={mode:o,remoteUrl:s,auth:t.remoteToken?`token`:`none`};t.json?n.log(JSON.stringify(l,null,2)):(n.log(`Remote gateway: ${s}`),n.log(`Auth: ${l.auth}`),n.log(`Tip: run \`${a(`openclaw configure --section web`)}\` to store your Brave API key for web_search. Docs: https://docs.openclaw.ai/tools/web`))}async function F(e,n=t){let i=await r();if(i.exists&&!i.valid){n.error(`Config invalid. Run \`${a(`openclaw doctor`)}\` to repair it, then re-run onboarding.`),n.exit(1);return}let o=i.valid&&i.exists?i.config:{},s=e.mode??`local`;if(s!==`local`&&s!==`remote`){n.error(`Invalid --mode "${String(s)}" (use local|remote).`),n.exit(1);return}if(s===`remote`){await P({opts:e,runtime:n,baseConfig:o});return}await N({opts:e,runtime:n,baseConfig:o})}const I=new Set([`config`,`config+creds+sessions`,`full`]);async function L(e,n=t){y(n);let i=e.authChoice,s=S(i);if(e.nonInteractive&&C(i)){n.error([`Auth choice "${String(i)}" is deprecated.`,`Use "--auth-choice token" (Anthropic setup-token) or "--auth-choice openai-codex".`].join(`
1
+ import{m as e,p as t}from"./subsystem-C7tbdlOl.js";import{u as n}from"./paths-BRJCySMM.js";import{No as r,Ro as i}from"./auth-profiles-BkhVHtgY.js";import{t as a}from"./command-format-CLxIPuLR.js";import{v as o}from"./utils-bGrn0y-f.js";import{s}from"./types.secrets-D4tbc3Wq.js";import{At as c}from"./plugins-CAHuRRVU.js";import{a as l,b as u,c as d,g as f,h as p,n as m,t as h,u as g}from"./onboard-helpers-bAJ8ELmK.js";import{t as _}from"./prompts-CMzglboN.js";import{t as v}from"./clack-prompter-BMrD-gme.js";import{t as y}from"./runtime-guard-Cpuk3V_0.js";import"./daemon-runtime-VcpeBRJV.js";import{t as b}from"./onboarding-CgqsAteJ.js";import{n as x}from"./logging-B7juU2TI.js";import{i as S,r as C,t as w}from"./onboard-provider-auth-flags-CqbipO7D.js";import{t as T}from"./onboard-config-B7U20YRw.js";async function E(n,r=t){let i=v(),a=null;try{await b(n,r,i)}catch(e){if(e instanceof _){a=1;return}throw e}finally{e(`onboarding finish`,{resumeStdinIfPaused:!1}),a!==null&&r.exit(a)}}function D(e){return typeof e==`string`?e.trim().length>0:!!e}function O(e){let t=w.filter(({optionKey:t})=>D(e[t])).map(e=>({optionKey:e.optionKey,authChoice:e.authChoice,label:e.cliFlag}));return(D(e.customBaseUrl)||D(e.customModelId)||D(e.customApiKey))&&t.push({optionKey:`customBaseUrl`,authChoice:`custom-api-key`,label:`--custom-base-url/--custom-model-id/--custom-api-key`}),{choice:t[0]?.authChoice,matches:t}}function k(e){let{opts:t,runtime:n}=e,r=t.gatewayPort!==void 0;if(r&&(!Number.isFinite(t.gatewayPort)||(t.gatewayPort??0)<=0))return n.error(`Invalid --gateway-port`),n.exit(1),null;let i=r?t.gatewayPort:e.defaultPort,a=t.gatewayBind??`loopback`,o=t.gatewayAuth??`token`;if(o!==`token`&&o!==`password`)return n.error(`Invalid --gateway-auth (use token|password).`),n.exit(1),null;let l=o,u=t.tailscale??`off`,d=!!t.tailscaleResetOnExit;u!==`off`&&a!==`loopback`&&(a=`loopback`),u===`funnel`&&l!==`password`&&(l=`password`);let f=e.nextConfig,m=g(t.gatewayToken),h=g(process.env.OPENCLAW_GATEWAY_TOKEN),_=m||h||void 0,v=String(t.gatewayTokenRefEnv??``).trim();if(l===`token`)if(v){if(!s(v))return n.error(`Invalid --gateway-token-ref-env (use env var name like OPENCLAW_GATEWAY_TOKEN).`),n.exit(1),null;if(m)return n.error(`Use either --gateway-token or --gateway-token-ref-env, not both.`),n.exit(1),null;let e=process.env[v]?.trim();if(!e)return n.error(`Environment variable "${v}" is missing or empty.`),n.exit(1),null;_=e,f={...f,gateway:{...f.gateway,auth:{...f.gateway?.auth,mode:`token`,token:{source:`env`,provider:c(f,`env`,{preferFirstProviderForSource:!0}),id:v}}}}}else _||=p(),f={...f,gateway:{...f.gateway,auth:{...f.gateway?.auth,mode:`token`,token:_}}};if(l===`password`){let e=t.gatewayPassword?.trim();if(!e)return n.error(`Missing --gateway-password for password auth.`),n.exit(1),null;f={...f,gateway:{...f.gateway,auth:{...f.gateway?.auth,mode:`password`,password:e}}}}return f={...f,gateway:{...f.gateway,port:i,bind:a,tailscale:{...f.gateway?.tailscale,mode:u,resetOnExit:d}}},{nextConfig:f,port:i,bind:a,authMode:l,tailscaleMode:u,tailscaleResetOnExit:d,gatewayToken:_}}function A(e){e.opts.json&&e.runtime.log(JSON.stringify({mode:e.mode,workspace:e.workspaceDir,authChoice:e.authChoice,gateway:e.gateway,installDaemon:!!e.installDaemon,daemonRuntime:e.daemonRuntime,skipSkills:!!e.skipSkills,skipHealth:!!e.skipHealth},null,2))}function j(e){let{nextConfig:t,opts:n,runtime:r}=e;if(n.skipSkills)return t;let i=n.nodeManager??`npm`;return[`npm`,`pnpm`,`bun`].includes(i)?{...t,skills:{...t.skills,install:{...t.skills?.install,nodeManager:i}}}:(r.error(`Invalid --node-manager (use npm, pnpm, or bun)`),r.exit(1),t)}function M(e){return o((e.opts.workspace??e.baseConfig.agents?.defaults?.workspace??e.defaultWorkspaceDir).trim())}async function N(e){let{opts:t,runtime:r,baseConfig:o}=e,s=`local`,c=M({opts:t,baseConfig:o,defaultWorkspaceDir:h}),d=T(o,c),p=O(t);if(!t.authChoice&&p.matches.length>1){r.error([`Multiple API key flags were provided for non-interactive onboarding.`,`Use a single provider flag or pass --auth-choice explicitly.`,`Flags: ${p.matches.map(e=>e.label).join(`, `)}`].join(`
2
+ `)),r.exit(1);return}let g=t.authChoice??p.choice??`skip`;if(g!==`skip`){let{applyNonInteractiveAuthChoice:e}=await import(`./auth-choice-k6G2nE28.js`),n=await e({nextConfig:d,authChoice:g,opts:t,runtime:r,baseConfig:o});if(!n)return;d=n}let _=n(o),v=k({nextConfig:d,opts:t,runtime:r,defaultPort:_});if(!v)return;if(d=v.nextConfig,d=j({nextConfig:d,opts:t,runtime:r}),d=m(d,{command:`onboard`,mode:s}),await i(d),x(r),await l(c,r,{skipBootstrap:!!d.agents?.defaults?.skipBootstrap}),t.installDaemon){let{installGatewayDaemonNonInteractive:e}=await import(`./daemon-install-BjSk7NFf.js`);await e({nextConfig:d,opts:t,runtime:r,port:v.port})}let y=t.daemonRuntime??`node`;if(!t.skipHealth){let{healthCommand:e}=await import(`./health-BXDoFh4Q.js`).then(e=>e.i);await u({url:f({bind:v.bind,port:v.port,customBindHost:d.gateway?.customBindHost,basePath:void 0}).wsUrl,token:v.gatewayToken,deadlineMs:15e3}),await e({json:!1,timeoutMs:1e4},r)}A({opts:t,runtime:r,mode:s,workspaceDir:c,authChoice:g,gateway:{port:v.port,bind:v.bind,authMode:v.authMode,tailscaleMode:v.tailscaleMode},installDaemon:!!t.installDaemon,daemonRuntime:t.installDaemon?y:void 0,skipSkills:!!t.skipSkills,skipHealth:!!t.skipHealth}),t.json||r.log(`Tip: run \`${a(`openclaw configure --section web`)}\` to store your Brave API key for web_search. Docs: https://docs.openclaw.ai/tools/web`)}async function P(e){let{opts:t,runtime:n,baseConfig:r}=e,o=`remote`,s=t.remoteUrl?.trim();if(!s){n.error(`Missing --remote-url for remote mode.`),n.exit(1);return}let c={...r,gateway:{...r.gateway,mode:`remote`,remote:{url:s,token:t.remoteToken?.trim()||void 0}}};c=m(c,{command:`onboard`,mode:o}),await i(c),x(n);let l={mode:o,remoteUrl:s,auth:t.remoteToken?`token`:`none`};t.json?n.log(JSON.stringify(l,null,2)):(n.log(`Remote gateway: ${s}`),n.log(`Auth: ${l.auth}`),n.log(`Tip: run \`${a(`openclaw configure --section web`)}\` to store your Brave API key for web_search. Docs: https://docs.openclaw.ai/tools/web`))}async function F(e,n=t){let i=await r();if(i.exists&&!i.valid){n.error(`Config invalid. Run \`${a(`openclaw doctor`)}\` to repair it, then re-run onboarding.`),n.exit(1);return}let o=i.valid&&i.exists?i.config:{},s=e.mode??`local`;if(s!==`local`&&s!==`remote`){n.error(`Invalid --mode "${String(s)}" (use local|remote).`),n.exit(1);return}if(s===`remote`){await P({opts:e,runtime:n,baseConfig:o});return}await N({opts:e,runtime:n,baseConfig:o})}const I=new Set([`config`,`config+creds+sessions`,`full`]);async function L(e,n=t){y(n);let i=e.authChoice,s=S(i);if(e.nonInteractive&&C(i)){n.error([`Auth choice "${String(i)}" is deprecated.`,`Use "--auth-choice token" (Anthropic setup-token) or "--auth-choice openai-codex".`].join(`
3
3
  `)),n.exit(1);return}i===`claude-cli`&&n.log(`Auth choice "claude-cli" is deprecated; using setup-token flow instead.`),i===`codex-cli`&&n.log(`Auth choice "codex-cli" is deprecated; using OpenAI Codex OAuth instead.`);let c=e.flow===`manual`?`advanced`:e.flow,l=s===e.authChoice&&c===e.flow?e:{...e,authChoice:s,flow:c};if(l.secretInputMode&&l.secretInputMode!==`plaintext`&&l.secretInputMode!==`ref`){n.error(`Invalid --secret-input-mode. Use "plaintext" or "ref".`),n.exit(1);return}if(l.resetScope&&!I.has(l.resetScope)){n.error(`Invalid --reset-scope. Use "config", "config+creds+sessions", or "full".`),n.exit(1);return}if(l.nonInteractive&&l.acceptRisk!==!0){n.error([`Non-interactive onboarding requires explicit risk acknowledgement.`,`Read: https://docs.openclaw.ai/security`,`Re-run with: ${a(`openclaw onboard --non-interactive --accept-risk ...`)}`].join(`
4
4
  `)),n.exit(1);return}if(l.reset){let e=await r(),t=e.valid?e.config:{},i=l.workspace??t.agents?.defaults?.workspace??h;await d(l.resetScope??`config+creds+sessions`,o(i),n)}if(process.platform===`win32`&&n.log([`Windows detected — OpenClaw runs great on WSL2!`,`Native Windows might be trickier.`,`Quick setup: wsl --install (one command, one reboot)`,`Guide: https://docs.openclaw.ai/windows`].join(`
5
5
  `)),l.nonInteractive){await F(l,n);return}await E(l,n)}export{L as t};
@@ -1,4 +1,4 @@
1
- import{t as e}from"./rolldown-runtime-CNxR59P3.js";import{t}from"./subsystem-C7tbdlOl.js";import{In as n,Ln as r,Rn as i}from"./auth-profiles-BkhVHtgY.js";import{t as a}from"./command-format-CLxIPuLR.js";import{d as o,f as s}from"./agent-scope-DjUQMckI.js";import{_ as c,g as l}from"./session-key-C7F_iqYg.js";import{m as u,p as d,t as f}from"./utils-bGrn0y-f.js";import{a as p}from"./types.secrets-D4tbc3Wq.js";import{i as m,o as h,r as g}from"./registry-Bfa_Ykoc.js";import{g as _}from"./skills-DaxiAYb1.js";import{D as v,E as y,H as b,O as x,T as ee,V as S,W as te,a as ne,at as C,c as w,ft as T,gt as E,ht as D,it as O,l as k,lt as re,n as ie,ot as ae,t as A,u as j,ut as oe}from"./plugins-CAHuRRVU.js";import{t as M}from"./exec-CEAb_WUd.js";import{dt as N}from"./send-BlGs1R4s.js";import{c as se,g as ce,hn as le,l as ue,mn as de,x as fe}from"./compact-BfHim3cA.js";import{a as pe,n as me}from"./plugin-auto-enable-Czb-XnGx.js";import{o as he}from"./send-CLQzNoUy.js";import{r as P}from"./onboard-helpers-bAJ8ELmK.js";import{t as F}from"./links-DRsshHiS.js";import{t as ge}from"./login-DBZS2wqQ.js";import{t as _e}from"./brew-DDPm_HfE.js";import{n as ve,r as ye,t as be}from"./api-BeG0ObSq.js";import{t as I}from"./enable-uPEnjeSA.js";import{s as xe}from"./install-safe-path-CsJz9H0r.js";import{a as Se,i as Ce,n as we,s as Te,t as Ee}from"./installs-dF8HShgp.js";import{n as De}from"./plugin-install-plan-BR9H2a7p.js";import{c as Oe,s as ke}from"./auth-choice.apply-helpers-D9NDHoxl.js";import Ae from"node:os";import L from"node:path";import je,{createWriteStream as Me}from"node:fs";import R from"node:fs/promises";import{pipeline as Ne}from"node:stream/promises";import{request as Pe}from"node:https";function Fe(e){let t=new Set;t.add(L.join(process.cwd(),`.git`)),e&&e!==process.cwd()&&t.add(L.join(e,`.git`));for(let e of t)if(je.existsSync(e))return!0;return!1}function Ie(e,t,n){if(!n)return null;let r=e.install.localPath?.trim();if(!r)return null;let i=new Set;i.add(L.resolve(process.cwd(),r)),t&&t!==process.cwd()&&i.add(L.resolve(t,r));for(let e of i)if(je.existsSync(e))return e;return null}function Le(e,t){let n=e.plugins?.load?.paths??[],r=Array.from(new Set([...n,t]));return{...e,plugins:{...e.plugins,load:{...e.plugins?.load,paths:r}}}}async function Re(e){let{entry:t,localPath:n,prompter:r,defaultChoice:i}=e,a=n?[{value:`local`,label:`Use local plugin path`,hint:n}]:[],o=[{value:`npm`,label:`Download from npm (${t.install.npmSpec})`},...a,{value:`skip`,label:`Skip for now`}],s=i===`local`&&!n?`npm`:i;return await r.select({message:`Install ${t.meta.label} plugin?`,options:o,initialValue:s})}function ze(e){let{cfg:t,entry:n,localPath:r,bundledLocalPath:i}=e;if(i)return`local`;let a=t.update?.channel;if(a===`dev`)return r?`local`:`npm`;if(a===`stable`||a===`beta`)return`npm`;let o=n.install.defaultChoice;return o===`local`?r?`local`:`npm`:o===`npm`?`npm`:r?`local`:`npm`}async function Be(e){let{entry:t,prompter:n,runtime:r,workspaceDir:i}=e,a=e.cfg,o=Fe(i),s=Se({workspaceDir:i}),c=De({pluginId:t.id,npmSpec:t.install.npmSpec,findBundledSource:e=>Ce({bundled:s,lookup:e})})?.bundledSource.localPath??null,l=c??Ie(t,i,o),u=await Re({entry:t,localPath:l,defaultChoice:ze({cfg:a,entry:t,localPath:l,bundledLocalPath:c}),prompter:n});if(u===`skip`)return{cfg:a,installed:!1};if(u===`local`&&l)return a=Le(a,l),a=I(a,t.id).config,{cfg:a,installed:!0};let d=await Te({spec:t.install.npmSpec,logger:{info:e=>r.log?.(e),warn:e=>r.log?.(e)}});return d.ok?(a=I(a,d.pluginId).config,a=we(a,{pluginId:d.pluginId,source:`npm`,spec:t.install.npmSpec,installPath:d.targetDir,version:d.version,...Ee(d.npmResolution)}),{cfg:a,installed:!0}):(await n.note(`Failed to install ${t.install.npmSpec}: ${d.error}`,`Plugin install`),l&&await n.confirm({message:`Use local plugin path instead? (${l})`,initialValue:!0})?(a=Le(a,l),a=I(a,t.id).config,{cfg:a,installed:!0}):(r.error?.(`Plugin install failed: ${d.error}`),{cfg:a,installed:!1}))}function Ve(e){_();let n=e.workspaceDir??o(e.cfg,s(e.cfg)),r=t(`plugins`);ue({config:e.cfg,workspaceDir:n,cache:!1,logger:se(r)})}async function He(e){let t=e.listAccountIds(e.cfg),n=e.currentId?.trim()||e.defaultAccountId||`default`,r=await e.prompter.select({message:`${e.label} account`,options:[...t.map(e=>({value:e,label:e===`default`?`default (primary)`:e})),{value:`__new__`,label:`Add a new account`}],initialValue:n});if(r!==`__new__`)return c(r);let i=await e.prompter.text({message:`New ${e.label} account id`,validate:e=>e?.trim()?void 0:`Required`}),a=c(String(i));return String(i).trim()!==a&&await e.prompter.note(`Normalized account id to "${a}".`,`${e.label} account`),a}const Ue=async e=>await He(e);function We(e){let t=(e??[]).map(e=>String(e).trim()).filter(Boolean);return t.includes(`*`)||t.push(`*`),t}function Ge(e,t){let n=[...e??[],...t].map(e=>String(e).trim()).filter(Boolean);return[...new Set(n)]}function z(e){return e.split(/[\n,;]+/g).map(e=>e.trim()).filter(Boolean)}function Ke(e,t){let n=z(String(e??``)),r=[];for(let e of n){let n=t(e);if(`error`in n)return{entries:[],error:n.error};r.push(n.value)}return{entries:B(r)}}function qe(e,t){return Ke(e,e=>e===`*`?{value:`*`}:t(e))}function Je(e){let t=e.value.trim();if(!t)return null;let n=t.match(e.mentionPattern);if(n?.[1])return e.normalizeId?e.normalizeId(n[1]):n[1];let r=e.prefixPattern?t.replace(e.prefixPattern,``):t;return e.idPattern.test(r)?e.normalizeId?e.normalizeId(r):r:null}function B(e,t){let n=e.map(e=>String(e).trim()).filter(Boolean).map(e=>{if(e===`*`)return`*`;if(!t)return e;let n=t(e);return typeof n==`string`?n.trim():``}).filter(Boolean);return[...new Set(n)]}function V(e){return e.accountId?.trim()?c(e.accountId):e.defaultAccountId}async function H(e){let t=e.accountOverride?.trim(),n=t?c(t):e.defaultAccountId;return e.shouldPromptAccountIds&&!t&&(n=await Ue({cfg:e.cfg,prompter:e.prompter,label:e.label,currentId:n,listAccountIds:e.listAccountIds,defaultAccountId:e.defaultAccountId})),n}function Ye(e){let{cfg:t,channel:n,accountId:r,allowFrom:i}=e;return tt({cfg:t,channel:n,accountId:r,patch:{allowFrom:i},ensureEnabled:!1})}function Xe(e){let{cfg:t,channel:n,dmPolicy:r}=e,i=r===`open`?We(t.channels?.[n]?.allowFrom):void 0;return{...t,channels:{...t.channels,[n]:{...t.channels?.[n],dmPolicy:r,...i?{allowFrom:i}:{}}}}}function Ze(e){let t=e.cfg.channels?.[e.channel]??{allowFrom:void 0,dm:void 0},n=t.allowFrom??t.dm?.allowFrom,r=e.dmPolicy===`open`?We(n):void 0;return et({cfg:e.cfg,channel:e.channel,patch:{dmPolicy:e.dmPolicy,...r?{allowFrom:r}:{}}})}function Qe(e){return et({cfg:e.cfg,channel:e.channel,patch:{allowFrom:e.allowFrom}})}function $e(e){return W({cfg:e.cfg,channel:e.channel,accountId:e.accountId,patch:{groupPolicy:e.groupPolicy}})}function et(e){let{cfg:t,channel:n,patch:r}=e,i=t.channels?.[n]??{},a=i.dm??{};return{...t,channels:{...t.channels,[n]:{...i,...r,dm:{...a,enabled:typeof a.enabled==`boolean`?a.enabled:!0}}}}}function U(e,t,n){let r=e.channels?.[t]??{};return{...e,channels:{...e.channels,[t]:{...r,enabled:n}}}}function tt(e){let{cfg:t,channel:n,accountId:r,patch:i,ensureEnabled:a}=e;return ye({cfg:r===`default`?t:ve({cfg:t,channelKey:n}),channelKey:n,accountId:r,patch:i,ensureChannelEnabled:a,ensureAccountEnabled:a})}function W(e){return tt({...e,ensureEnabled:!0})}function G(e){let t=e.cfg;return e.tokenResult.useEnv&&(t=W({cfg:t,channel:e.channel,accountId:e.accountId,patch:{}})),e.tokenResult.token&&(t=W({cfg:t,channel:e.channel,accountId:e.accountId,patch:{[e.tokenPatchKey]:e.tokenResult.token}})),t}function nt(e){return{accountConfigured:e.accountConfigured,hasConfigToken:e.hasConfigToken,canUseEnv:e.allowEnv&&!!e.envValue?.trim()&&!e.hasConfigToken}}async function rt(e){let t=async()=>String(await e.prompter.text({message:e.inputPrompt,validate:e=>e?.trim()?void 0:`Required`})).trim();return e.canUseEnv?await e.prompter.confirm({message:e.envPrompt,initialValue:!0})?{useEnv:!0,token:null}:{useEnv:!1,token:await t()}:e.hasConfigToken&&e.accountConfigured&&await e.prompter.confirm({message:e.keepPrompt,initialValue:!0})?{useEnv:!1,token:null}:{useEnv:!1,token:await t()}}async function K(e){let t=nt({accountConfigured:e.accountConfigured,hasConfigToken:e.hasConfigToken,allowEnv:e.allowEnv,envValue:e.envValue});!t.accountConfigured&&e.onMissingConfigured&&await e.onMissingConfigured();let n=await it({cfg:e.cfg,prompter:e.prompter,providerHint:e.providerHint,credentialLabel:e.credentialLabel,secretInputMode:e.secretInputMode,accountConfigured:t.accountConfigured,canUseEnv:t.canUseEnv,hasConfigToken:t.hasConfigToken,envPrompt:e.envPrompt,keepPrompt:e.keepPrompt,inputPrompt:e.inputPrompt,preferredEnvVar:e.preferredEnvVar});return n.action===`use-env`?{cfg:e.applyUseEnv?await e.applyUseEnv(e.cfg):e.cfg,action:n.action,resolvedValue:e.envValue?.trim()||void 0}:n.action===`set`?{cfg:e.applySet?await e.applySet(e.cfg,n.value,n.resolvedValue):e.cfg,action:n.action,resolvedValue:n.resolvedValue}:{cfg:e.cfg,action:n.action}}async function it(e){if(await Oe({prompter:e.prompter,explicitMode:e.secretInputMode,copy:{modeMessage:`How do you want to provide this ${e.credentialLabel}?`,plaintextLabel:`Enter ${e.credentialLabel}`,plaintextHint:`Stores the credential directly in OpenClaw config`,refLabel:`Use external secret provider`,refHint:`Stores a reference to env or configured external secret providers`}})===`plaintext`){let t=await rt({prompter:e.prompter,accountConfigured:e.accountConfigured,canUseEnv:e.canUseEnv,hasConfigToken:e.hasConfigToken,envPrompt:e.envPrompt,keepPrompt:e.keepPrompt,inputPrompt:e.inputPrompt});return t.useEnv?{action:`use-env`}:t.token?{action:`set`,value:t.token,resolvedValue:t.token}:{action:`keep`}}if(e.hasConfigToken&&e.accountConfigured&&await e.prompter.confirm({message:e.keepPrompt,initialValue:!0}))return{action:`keep`};let t=await ke({provider:e.providerHint,config:e.cfg,prompter:e.prompter,preferredEnvVar:e.preferredEnvVar,copy:{sourceMessage:`Where is this ${e.credentialLabel} stored?`,envVarPlaceholder:e.preferredEnvVar??`OPENCLAW_SECRET`,envVarFormatError:`Use an env var name like "OPENCLAW_SECRET" (uppercase letters, numbers, underscores).`,noProvidersMessage:`No file/exec secret providers are configured yet. Add one under secrets.providers, or select Environment variable.`}});return{action:`set`,value:t.ref,resolvedValue:t.resolvedValue}}async function at(e){let t=V({accountId:e.accountId,defaultAccountId:e.defaultAccountId}),n=e.getExistingAllowFrom({cfg:e.cfg,accountId:t});await e.prompter.note(e.noteLines.join(`
1
+ import{t as e}from"./rolldown-runtime-CNxR59P3.js";import{t}from"./subsystem-C7tbdlOl.js";import{In as n,Ln as r,Rn as i}from"./auth-profiles-BkhVHtgY.js";import{t as a}from"./command-format-CLxIPuLR.js";import{d as o,f as s}from"./agent-scope-DjUQMckI.js";import{_ as c,g as l}from"./session-key-C7F_iqYg.js";import{m as u,p as d,t as f}from"./utils-bGrn0y-f.js";import{a as p}from"./types.secrets-D4tbc3Wq.js";import{i as m,o as h,r as g}from"./registry-Bfa_Ykoc.js";import{g as _}from"./skills-DaxiAYb1.js";import{D as v,E as y,H as b,O as x,T as ee,V as S,W as te,a as ne,at as C,c as w,ft as T,gt as E,ht as D,it as O,l as k,lt as re,n as ie,ot as ae,t as A,u as j,ut as oe}from"./plugins-CAHuRRVU.js";import{t as M}from"./exec-CEAb_WUd.js";import{dt as N}from"./send-BlGs1R4s.js";import{c as se,g as ce,hn as le,l as ue,mn as de,x as fe}from"./compact-DgbuvsDF.js";import{a as pe,n as me}from"./plugin-auto-enable-Czb-XnGx.js";import{o as he}from"./send-CLQzNoUy.js";import{r as P}from"./onboard-helpers-bAJ8ELmK.js";import{t as F}from"./links-DRsshHiS.js";import{t as ge}from"./login-DBZS2wqQ.js";import{t as _e}from"./brew-DDPm_HfE.js";import{n as ve,r as ye,t as be}from"./api-BeG0ObSq.js";import{t as I}from"./enable-uPEnjeSA.js";import{s as xe}from"./install-safe-path-CsJz9H0r.js";import{a as Se,i as Ce,n as we,s as Te,t as Ee}from"./installs-dF8HShgp.js";import{n as De}from"./plugin-install-plan-BR9H2a7p.js";import{c as Oe,s as ke}from"./auth-choice.apply-helpers-D9NDHoxl.js";import Ae from"node:os";import L from"node:path";import je,{createWriteStream as Me}from"node:fs";import R from"node:fs/promises";import{pipeline as Ne}from"node:stream/promises";import{request as Pe}from"node:https";function Fe(e){let t=new Set;t.add(L.join(process.cwd(),`.git`)),e&&e!==process.cwd()&&t.add(L.join(e,`.git`));for(let e of t)if(je.existsSync(e))return!0;return!1}function Ie(e,t,n){if(!n)return null;let r=e.install.localPath?.trim();if(!r)return null;let i=new Set;i.add(L.resolve(process.cwd(),r)),t&&t!==process.cwd()&&i.add(L.resolve(t,r));for(let e of i)if(je.existsSync(e))return e;return null}function Le(e,t){let n=e.plugins?.load?.paths??[],r=Array.from(new Set([...n,t]));return{...e,plugins:{...e.plugins,load:{...e.plugins?.load,paths:r}}}}async function Re(e){let{entry:t,localPath:n,prompter:r,defaultChoice:i}=e,a=n?[{value:`local`,label:`Use local plugin path`,hint:n}]:[],o=[{value:`npm`,label:`Download from npm (${t.install.npmSpec})`},...a,{value:`skip`,label:`Skip for now`}],s=i===`local`&&!n?`npm`:i;return await r.select({message:`Install ${t.meta.label} plugin?`,options:o,initialValue:s})}function ze(e){let{cfg:t,entry:n,localPath:r,bundledLocalPath:i}=e;if(i)return`local`;let a=t.update?.channel;if(a===`dev`)return r?`local`:`npm`;if(a===`stable`||a===`beta`)return`npm`;let o=n.install.defaultChoice;return o===`local`?r?`local`:`npm`:o===`npm`?`npm`:r?`local`:`npm`}async function Be(e){let{entry:t,prompter:n,runtime:r,workspaceDir:i}=e,a=e.cfg,o=Fe(i),s=Se({workspaceDir:i}),c=De({pluginId:t.id,npmSpec:t.install.npmSpec,findBundledSource:e=>Ce({bundled:s,lookup:e})})?.bundledSource.localPath??null,l=c??Ie(t,i,o),u=await Re({entry:t,localPath:l,defaultChoice:ze({cfg:a,entry:t,localPath:l,bundledLocalPath:c}),prompter:n});if(u===`skip`)return{cfg:a,installed:!1};if(u===`local`&&l)return a=Le(a,l),a=I(a,t.id).config,{cfg:a,installed:!0};let d=await Te({spec:t.install.npmSpec,logger:{info:e=>r.log?.(e),warn:e=>r.log?.(e)}});return d.ok?(a=I(a,d.pluginId).config,a=we(a,{pluginId:d.pluginId,source:`npm`,spec:t.install.npmSpec,installPath:d.targetDir,version:d.version,...Ee(d.npmResolution)}),{cfg:a,installed:!0}):(await n.note(`Failed to install ${t.install.npmSpec}: ${d.error}`,`Plugin install`),l&&await n.confirm({message:`Use local plugin path instead? (${l})`,initialValue:!0})?(a=Le(a,l),a=I(a,t.id).config,{cfg:a,installed:!0}):(r.error?.(`Plugin install failed: ${d.error}`),{cfg:a,installed:!1}))}function Ve(e){_();let n=e.workspaceDir??o(e.cfg,s(e.cfg)),r=t(`plugins`);ue({config:e.cfg,workspaceDir:n,cache:!1,logger:se(r)})}async function He(e){let t=e.listAccountIds(e.cfg),n=e.currentId?.trim()||e.defaultAccountId||`default`,r=await e.prompter.select({message:`${e.label} account`,options:[...t.map(e=>({value:e,label:e===`default`?`default (primary)`:e})),{value:`__new__`,label:`Add a new account`}],initialValue:n});if(r!==`__new__`)return c(r);let i=await e.prompter.text({message:`New ${e.label} account id`,validate:e=>e?.trim()?void 0:`Required`}),a=c(String(i));return String(i).trim()!==a&&await e.prompter.note(`Normalized account id to "${a}".`,`${e.label} account`),a}const Ue=async e=>await He(e);function We(e){let t=(e??[]).map(e=>String(e).trim()).filter(Boolean);return t.includes(`*`)||t.push(`*`),t}function Ge(e,t){let n=[...e??[],...t].map(e=>String(e).trim()).filter(Boolean);return[...new Set(n)]}function z(e){return e.split(/[\n,;]+/g).map(e=>e.trim()).filter(Boolean)}function Ke(e,t){let n=z(String(e??``)),r=[];for(let e of n){let n=t(e);if(`error`in n)return{entries:[],error:n.error};r.push(n.value)}return{entries:B(r)}}function qe(e,t){return Ke(e,e=>e===`*`?{value:`*`}:t(e))}function Je(e){let t=e.value.trim();if(!t)return null;let n=t.match(e.mentionPattern);if(n?.[1])return e.normalizeId?e.normalizeId(n[1]):n[1];let r=e.prefixPattern?t.replace(e.prefixPattern,``):t;return e.idPattern.test(r)?e.normalizeId?e.normalizeId(r):r:null}function B(e,t){let n=e.map(e=>String(e).trim()).filter(Boolean).map(e=>{if(e===`*`)return`*`;if(!t)return e;let n=t(e);return typeof n==`string`?n.trim():``}).filter(Boolean);return[...new Set(n)]}function V(e){return e.accountId?.trim()?c(e.accountId):e.defaultAccountId}async function H(e){let t=e.accountOverride?.trim(),n=t?c(t):e.defaultAccountId;return e.shouldPromptAccountIds&&!t&&(n=await Ue({cfg:e.cfg,prompter:e.prompter,label:e.label,currentId:n,listAccountIds:e.listAccountIds,defaultAccountId:e.defaultAccountId})),n}function Ye(e){let{cfg:t,channel:n,accountId:r,allowFrom:i}=e;return tt({cfg:t,channel:n,accountId:r,patch:{allowFrom:i},ensureEnabled:!1})}function Xe(e){let{cfg:t,channel:n,dmPolicy:r}=e,i=r===`open`?We(t.channels?.[n]?.allowFrom):void 0;return{...t,channels:{...t.channels,[n]:{...t.channels?.[n],dmPolicy:r,...i?{allowFrom:i}:{}}}}}function Ze(e){let t=e.cfg.channels?.[e.channel]??{allowFrom:void 0,dm:void 0},n=t.allowFrom??t.dm?.allowFrom,r=e.dmPolicy===`open`?We(n):void 0;return et({cfg:e.cfg,channel:e.channel,patch:{dmPolicy:e.dmPolicy,...r?{allowFrom:r}:{}}})}function Qe(e){return et({cfg:e.cfg,channel:e.channel,patch:{allowFrom:e.allowFrom}})}function $e(e){return W({cfg:e.cfg,channel:e.channel,accountId:e.accountId,patch:{groupPolicy:e.groupPolicy}})}function et(e){let{cfg:t,channel:n,patch:r}=e,i=t.channels?.[n]??{},a=i.dm??{};return{...t,channels:{...t.channels,[n]:{...i,...r,dm:{...a,enabled:typeof a.enabled==`boolean`?a.enabled:!0}}}}}function U(e,t,n){let r=e.channels?.[t]??{};return{...e,channels:{...e.channels,[t]:{...r,enabled:n}}}}function tt(e){let{cfg:t,channel:n,accountId:r,patch:i,ensureEnabled:a}=e;return ye({cfg:r===`default`?t:ve({cfg:t,channelKey:n}),channelKey:n,accountId:r,patch:i,ensureChannelEnabled:a,ensureAccountEnabled:a})}function W(e){return tt({...e,ensureEnabled:!0})}function G(e){let t=e.cfg;return e.tokenResult.useEnv&&(t=W({cfg:t,channel:e.channel,accountId:e.accountId,patch:{}})),e.tokenResult.token&&(t=W({cfg:t,channel:e.channel,accountId:e.accountId,patch:{[e.tokenPatchKey]:e.tokenResult.token}})),t}function nt(e){return{accountConfigured:e.accountConfigured,hasConfigToken:e.hasConfigToken,canUseEnv:e.allowEnv&&!!e.envValue?.trim()&&!e.hasConfigToken}}async function rt(e){let t=async()=>String(await e.prompter.text({message:e.inputPrompt,validate:e=>e?.trim()?void 0:`Required`})).trim();return e.canUseEnv?await e.prompter.confirm({message:e.envPrompt,initialValue:!0})?{useEnv:!0,token:null}:{useEnv:!1,token:await t()}:e.hasConfigToken&&e.accountConfigured&&await e.prompter.confirm({message:e.keepPrompt,initialValue:!0})?{useEnv:!1,token:null}:{useEnv:!1,token:await t()}}async function K(e){let t=nt({accountConfigured:e.accountConfigured,hasConfigToken:e.hasConfigToken,allowEnv:e.allowEnv,envValue:e.envValue});!t.accountConfigured&&e.onMissingConfigured&&await e.onMissingConfigured();let n=await it({cfg:e.cfg,prompter:e.prompter,providerHint:e.providerHint,credentialLabel:e.credentialLabel,secretInputMode:e.secretInputMode,accountConfigured:t.accountConfigured,canUseEnv:t.canUseEnv,hasConfigToken:t.hasConfigToken,envPrompt:e.envPrompt,keepPrompt:e.keepPrompt,inputPrompt:e.inputPrompt,preferredEnvVar:e.preferredEnvVar});return n.action===`use-env`?{cfg:e.applyUseEnv?await e.applyUseEnv(e.cfg):e.cfg,action:n.action,resolvedValue:e.envValue?.trim()||void 0}:n.action===`set`?{cfg:e.applySet?await e.applySet(e.cfg,n.value,n.resolvedValue):e.cfg,action:n.action,resolvedValue:n.resolvedValue}:{cfg:e.cfg,action:n.action}}async function it(e){if(await Oe({prompter:e.prompter,explicitMode:e.secretInputMode,copy:{modeMessage:`How do you want to provide this ${e.credentialLabel}?`,plaintextLabel:`Enter ${e.credentialLabel}`,plaintextHint:`Stores the credential directly in OpenClaw config`,refLabel:`Use external secret provider`,refHint:`Stores a reference to env or configured external secret providers`}})===`plaintext`){let t=await rt({prompter:e.prompter,accountConfigured:e.accountConfigured,canUseEnv:e.canUseEnv,hasConfigToken:e.hasConfigToken,envPrompt:e.envPrompt,keepPrompt:e.keepPrompt,inputPrompt:e.inputPrompt});return t.useEnv?{action:`use-env`}:t.token?{action:`set`,value:t.token,resolvedValue:t.token}:{action:`keep`}}if(e.hasConfigToken&&e.accountConfigured&&await e.prompter.confirm({message:e.keepPrompt,initialValue:!0}))return{action:`keep`};let t=await ke({provider:e.providerHint,config:e.cfg,prompter:e.prompter,preferredEnvVar:e.preferredEnvVar,copy:{sourceMessage:`Where is this ${e.credentialLabel} stored?`,envVarPlaceholder:e.preferredEnvVar??`OPENCLAW_SECRET`,envVarFormatError:`Use an env var name like "OPENCLAW_SECRET" (uppercase letters, numbers, underscores).`,noProvidersMessage:`No file/exec secret providers are configured yet. Add one under secrets.providers, or select Environment variable.`}});return{action:`set`,value:t.ref,resolvedValue:t.resolvedValue}}async function at(e){let t=V({accountId:e.accountId,defaultAccountId:e.defaultAccountId}),n=e.getExistingAllowFrom({cfg:e.cfg,accountId:t});await e.prompter.note(e.noteLines.join(`
2
2
  `),e.noteTitle);let r=await e.prompter.text({message:e.message,placeholder:e.placeholder,initialValue:n[0]?String(n[0]):void 0,validate:t=>{let n=String(t??``).trim();return n?e.parseEntries(n).error:`Required`}}),i=Ge(void 0,e.parseEntries(String(r)).entries);return Ye({cfg:e.cfg,channel:e.channel,accountId:t,allowFrom:i})}async function ot(e){let t=[];for(let n of e.resolvedSections)n.values.length!==0&&t.push(`${n.title}: ${n.values.join(`, `)}`);e.unresolved&&e.unresolved.length>0&&t.push(`Unresolved (kept as typed): ${e.unresolved.join(`, `)}`),t.length>0&&await e.prompter.note(t.join(`
3
3
  `),e.label)}async function st(e){await e.prompter.note(`Channel lookup failed; keeping entries as typed. ${String(e.error)}`,e.label)}async function ct(e){for(;;){let t=await e.prompter.text({message:e.message,placeholder:e.placeholder,initialValue:e.existing[0]?String(e.existing[0]):void 0,validate:e=>String(e??``).trim()?void 0:`Required`}),n=e.parseInputs(String(t));if(!e.token){let t=n.map(e.parseId).filter(Boolean);if(t.length!==n.length){await e.prompter.note(e.invalidWithoutTokenNote,e.label);continue}return Ge(e.existing,t)}let r=await e.resolveEntries({token:e.token,entries:n}).catch(()=>null);if(!r){await e.prompter.note(`Failed to resolve usernames. Try again.`,e.label);continue}let i=r.filter(e=>!e.resolved||!e.id);if(i.length>0){await e.prompter.note(`Could not resolve: ${i.map(e=>e.input).join(`, `)}`,e.label);continue}let a=r.map(e=>e.id);return Ge(e.existing,a)}}async function lt(e){await e.prompter.note(e.noteLines.join(`
4
4
  `),e.noteTitle);let t=await ct({prompter:e.prompter,existing:e.existing,token:e.token,message:e.message,placeholder:e.placeholder,label:e.noteTitle,parseInputs:z,parseId:e.parseId,invalidWithoutTokenNote:e.invalidWithoutTokenNote,resolveEntries:e.resolveEntries});return Qe({cfg:e.cfg,channel:e.channel,allowFrom:t})}function ut(e){return z(String(e??``))}function dt(e){return e.map(e=>e.trim()).filter(Boolean).join(`, `)}async function ft(e){let t=[{value:`allowlist`,label:`Allowlist (recommended)`}];e.allowOpen!==!1&&t.push({value:`open`,label:`Open (allow all channels)`}),e.allowDisabled!==!1&&t.push({value:`disabled`,label:`Disabled (block all channels)`});let n=e.currentPolicy??`allowlist`;return await e.prompter.select({message:`${e.label} access`,options:t,initialValue:n})}async function pt(e){let t=e.currentEntries&&e.currentEntries.length>0?dt(e.currentEntries):void 0;return ut(await e.prompter.text({message:`${e.label} allowlist (comma-separated)`,placeholder:e.placeholder,initialValue:t}))}async function mt(e){let t=(e.currentEntries??[]).length>0,n=e.defaultPrompt??!t;if(!await e.prompter.confirm({message:e.updatePrompt?`Update ${e.label} access?`:`Configure ${e.label} access?`,initialValue:n}))return null;let r=await ft({prompter:e.prompter,label:e.label,currentPolicy:e.currentPolicy,allowOpen:e.allowOpen,allowDisabled:e.allowDisabled});return r===`allowlist`?{policy:r,entries:await pt({prompter:e.prompter,label:e.label,currentEntries:e.currentEntries,placeholder:e.placeholder})}:{policy:r,entries:[]}}async function ht(e){let t=e.cfg,n=await mt({prompter:e.prompter,label:e.label,currentPolicy:e.currentPolicy,currentEntries:e.currentEntries,placeholder:e.placeholder,updatePrompt:e.updatePrompt});if(!n)return t;if(n.policy!==`allowlist`)return e.setPolicy(t,n.policy);let r=await e.resolveAllowlist({cfg:t,entries:n.entries});return t=e.setPolicy(t,`allowlist`),e.applyAllowlist({cfg:t,resolved:r})}const q=`discord`;async function gt(e){await e.note([`1) Discord Developer Portal → Applications → New Application`,`2) Bot → Add Bot → Reset Token → copy token`,`3) OAuth2 → URL Generator → scope 'bot' → invite to your server`,`Tip: enable Message Content Intent if you need message text. (Bot → Privileged Gateway Intents → Message Content Intent)`,`Docs: ${F(`/discord`,`discord`)}`].join(`
@@ -1,4 +1,4 @@
1
- import{t as e}from"./rolldown-runtime-CNxR59P3.js";import{t}from"./subsystem-B35lZH6M.js";import{h as n,m as r,t as i}from"./utils-eSzw3-BW.js";import{Jr as a,Xr as o,Yr as s}from"./model-selection-D_WMcs-m.js";import{A as c,F as l,I as u,S as d,k as f,yr as p}from"./reply-Bv0w_dst.js";import{d as m,f as h}from"./agent-scope-DauKPN2a.js";import{_ as g,g as _}from"./session-key-D3P0tf5P.js";import{a as v}from"./types.secrets-C-5U96pc.js";import{t as y}from"./command-format-BbDT1tlm.js";import{i as ee,o as te,r as ne}from"./registry-DwigmP92.js";import{g as b}from"./skills-sxAZFqk6.js";import{D as re,E as ie,H as x,O as S,T as C,V as ae,W as w,a as oe,at as T,c as se,ft as E,gt as D,ht as ce,it as O,l as le,lt as ue,n as k,ot as A,t as j,u as de,ut as fe}from"./plugins-CPVBLi22.js";import{t as M}from"./exec-Ble6PWIi.js";import{dt as pe}from"./send-hasPbLlg.js";import{a as me,n as he}from"./plugin-auto-enable-BACDL0lj.js";import{o as ge}from"./send-Du5iNpc_.js";import{r as N}from"./onboard-helpers-Dn0KiH64.js";import{t as P}from"./links-CmkiG3i0.js";import{t as _e}from"./login-cNagWwmy.js";import{t as ve}from"./brew-COcDl8CB.js";import{n as ye,r as be,t as xe}from"./api-Dx8x1KTs.js";import{t as F}from"./enable-CBei81Gs.js";import{s as Se}from"./install-safe-path-lI-ouoTr.js";import{a as Ce,i as we,n as Te,s as Ee,t as De}from"./installs-BC03n26J.js";import{n as Oe}from"./plugin-install-plan-CZV9LpbR.js";import{c as ke,s as Ae}from"./auth-choice.apply-helpers-BG7fgjfg.js";import je,{createWriteStream as Me}from"node:fs";import Ne from"node:os";import I from"node:path";import L from"node:fs/promises";import{pipeline as Pe}from"node:stream/promises";import{request as Fe}from"node:https";function Ie(e){let t=new Set;t.add(I.join(process.cwd(),`.git`)),e&&e!==process.cwd()&&t.add(I.join(e,`.git`));for(let e of t)if(je.existsSync(e))return!0;return!1}function Le(e,t,n){if(!n)return null;let r=e.install.localPath?.trim();if(!r)return null;let i=new Set;i.add(I.resolve(process.cwd(),r)),t&&t!==process.cwd()&&i.add(I.resolve(t,r));for(let e of i)if(je.existsSync(e))return e;return null}function Re(e,t){let n=e.plugins?.load?.paths??[],r=Array.from(new Set([...n,t]));return{...e,plugins:{...e.plugins,load:{...e.plugins?.load,paths:r}}}}async function ze(e){let{entry:t,localPath:n,prompter:r,defaultChoice:i}=e,a=n?[{value:`local`,label:`Use local plugin path`,hint:n}]:[],o=[{value:`npm`,label:`Download from npm (${t.install.npmSpec})`},...a,{value:`skip`,label:`Skip for now`}],s=i===`local`&&!n?`npm`:i;return await r.select({message:`Install ${t.meta.label} plugin?`,options:o,initialValue:s})}function Be(e){let{cfg:t,entry:n,localPath:r,bundledLocalPath:i}=e;if(i)return`local`;let a=t.update?.channel;if(a===`dev`)return r?`local`:`npm`;if(a===`stable`||a===`beta`)return`npm`;let o=n.install.defaultChoice;return o===`local`?r?`local`:`npm`:o===`npm`?`npm`:r?`local`:`npm`}async function Ve(e){let{entry:t,prompter:n,runtime:r,workspaceDir:i}=e,a=e.cfg,o=Ie(i),s=Ce({workspaceDir:i}),c=Oe({pluginId:t.id,npmSpec:t.install.npmSpec,findBundledSource:e=>we({bundled:s,lookup:e})})?.bundledSource.localPath??null,l=c??Le(t,i,o),u=await ze({entry:t,localPath:l,defaultChoice:Be({cfg:a,entry:t,localPath:l,bundledLocalPath:c}),prompter:n});if(u===`skip`)return{cfg:a,installed:!1};if(u===`local`&&l)return a=Re(a,l),a=F(a,t.id).config,{cfg:a,installed:!0};let d=await Ee({spec:t.install.npmSpec,logger:{info:e=>r.log?.(e),warn:e=>r.log?.(e)}});return d.ok?(a=F(a,d.pluginId).config,a=Te(a,{pluginId:d.pluginId,source:`npm`,spec:t.install.npmSpec,installPath:d.targetDir,version:d.version,...De(d.npmResolution)}),{cfg:a,installed:!0}):(await n.note(`Failed to install ${t.install.npmSpec}: ${d.error}`,`Plugin install`),l&&await n.confirm({message:`Use local plugin path instead? (${l})`,initialValue:!0})?(a=Re(a,l),a=F(a,t.id).config,{cfg:a,installed:!0}):(r.error?.(`Plugin install failed: ${d.error}`),{cfg:a,installed:!1}))}function He(e){b();let n=e.workspaceDir??m(e.cfg,h(e.cfg)),r=t(`plugins`);d({config:e.cfg,workspaceDir:n,cache:!1,logger:p(r)})}async function Ue(e){let t=e.listAccountIds(e.cfg),n=e.currentId?.trim()||e.defaultAccountId||`default`,r=await e.prompter.select({message:`${e.label} account`,options:[...t.map(e=>({value:e,label:e===`default`?`default (primary)`:e})),{value:`__new__`,label:`Add a new account`}],initialValue:n});if(r!==`__new__`)return g(r);let i=await e.prompter.text({message:`New ${e.label} account id`,validate:e=>e?.trim()?void 0:`Required`}),a=g(String(i));return String(i).trim()!==a&&await e.prompter.note(`Normalized account id to "${a}".`,`${e.label} account`),a}const We=async e=>await Ue(e);function Ge(e){let t=(e??[]).map(e=>String(e).trim()).filter(Boolean);return t.includes(`*`)||t.push(`*`),t}function Ke(e,t){let n=[...e??[],...t].map(e=>String(e).trim()).filter(Boolean);return[...new Set(n)]}function R(e){return e.split(/[\n,;]+/g).map(e=>e.trim()).filter(Boolean)}function qe(e,t){let n=R(String(e??``)),r=[];for(let e of n){let n=t(e);if(`error`in n)return{entries:[],error:n.error};r.push(n.value)}return{entries:z(r)}}function Je(e,t){return qe(e,e=>e===`*`?{value:`*`}:t(e))}function Ye(e){let t=e.value.trim();if(!t)return null;let n=t.match(e.mentionPattern);if(n?.[1])return e.normalizeId?e.normalizeId(n[1]):n[1];let r=e.prefixPattern?t.replace(e.prefixPattern,``):t;return e.idPattern.test(r)?e.normalizeId?e.normalizeId(r):r:null}function z(e,t){let n=e.map(e=>String(e).trim()).filter(Boolean).map(e=>{if(e===`*`)return`*`;if(!t)return e;let n=t(e);return typeof n==`string`?n.trim():``}).filter(Boolean);return[...new Set(n)]}function B(e){return e.accountId?.trim()?g(e.accountId):e.defaultAccountId}async function V(e){let t=e.accountOverride?.trim(),n=t?g(t):e.defaultAccountId;return e.shouldPromptAccountIds&&!t&&(n=await We({cfg:e.cfg,prompter:e.prompter,label:e.label,currentId:n,listAccountIds:e.listAccountIds,defaultAccountId:e.defaultAccountId})),n}function Xe(e){let{cfg:t,channel:n,accountId:r,allowFrom:i}=e;return nt({cfg:t,channel:n,accountId:r,patch:{allowFrom:i},ensureEnabled:!1})}function Ze(e){let{cfg:t,channel:n,dmPolicy:r}=e,i=r===`open`?Ge(t.channels?.[n]?.allowFrom):void 0;return{...t,channels:{...t.channels,[n]:{...t.channels?.[n],dmPolicy:r,...i?{allowFrom:i}:{}}}}}function Qe(e){let t=e.cfg.channels?.[e.channel]??{allowFrom:void 0,dm:void 0},n=t.allowFrom??t.dm?.allowFrom,r=e.dmPolicy===`open`?Ge(n):void 0;return tt({cfg:e.cfg,channel:e.channel,patch:{dmPolicy:e.dmPolicy,...r?{allowFrom:r}:{}}})}function $e(e){return tt({cfg:e.cfg,channel:e.channel,patch:{allowFrom:e.allowFrom}})}function et(e){return U({cfg:e.cfg,channel:e.channel,accountId:e.accountId,patch:{groupPolicy:e.groupPolicy}})}function tt(e){let{cfg:t,channel:n,patch:r}=e,i=t.channels?.[n]??{},a=i.dm??{};return{...t,channels:{...t.channels,[n]:{...i,...r,dm:{...a,enabled:typeof a.enabled==`boolean`?a.enabled:!0}}}}}function H(e,t,n){let r=e.channels?.[t]??{};return{...e,channels:{...e.channels,[t]:{...r,enabled:n}}}}function nt(e){let{cfg:t,channel:n,accountId:r,patch:i,ensureEnabled:a}=e;return be({cfg:r===`default`?t:ye({cfg:t,channelKey:n}),channelKey:n,accountId:r,patch:i,ensureChannelEnabled:a,ensureAccountEnabled:a})}function U(e){return nt({...e,ensureEnabled:!0})}function W(e){let t=e.cfg;return e.tokenResult.useEnv&&(t=U({cfg:t,channel:e.channel,accountId:e.accountId,patch:{}})),e.tokenResult.token&&(t=U({cfg:t,channel:e.channel,accountId:e.accountId,patch:{[e.tokenPatchKey]:e.tokenResult.token}})),t}function rt(e){return{accountConfigured:e.accountConfigured,hasConfigToken:e.hasConfigToken,canUseEnv:e.allowEnv&&!!e.envValue?.trim()&&!e.hasConfigToken}}async function it(e){let t=async()=>String(await e.prompter.text({message:e.inputPrompt,validate:e=>e?.trim()?void 0:`Required`})).trim();return e.canUseEnv?await e.prompter.confirm({message:e.envPrompt,initialValue:!0})?{useEnv:!0,token:null}:{useEnv:!1,token:await t()}:e.hasConfigToken&&e.accountConfigured&&await e.prompter.confirm({message:e.keepPrompt,initialValue:!0})?{useEnv:!1,token:null}:{useEnv:!1,token:await t()}}async function G(e){let t=rt({accountConfigured:e.accountConfigured,hasConfigToken:e.hasConfigToken,allowEnv:e.allowEnv,envValue:e.envValue});!t.accountConfigured&&e.onMissingConfigured&&await e.onMissingConfigured();let n=await at({cfg:e.cfg,prompter:e.prompter,providerHint:e.providerHint,credentialLabel:e.credentialLabel,secretInputMode:e.secretInputMode,accountConfigured:t.accountConfigured,canUseEnv:t.canUseEnv,hasConfigToken:t.hasConfigToken,envPrompt:e.envPrompt,keepPrompt:e.keepPrompt,inputPrompt:e.inputPrompt,preferredEnvVar:e.preferredEnvVar});return n.action===`use-env`?{cfg:e.applyUseEnv?await e.applyUseEnv(e.cfg):e.cfg,action:n.action,resolvedValue:e.envValue?.trim()||void 0}:n.action===`set`?{cfg:e.applySet?await e.applySet(e.cfg,n.value,n.resolvedValue):e.cfg,action:n.action,resolvedValue:n.resolvedValue}:{cfg:e.cfg,action:n.action}}async function at(e){if(await ke({prompter:e.prompter,explicitMode:e.secretInputMode,copy:{modeMessage:`How do you want to provide this ${e.credentialLabel}?`,plaintextLabel:`Enter ${e.credentialLabel}`,plaintextHint:`Stores the credential directly in OpenClaw config`,refLabel:`Use external secret provider`,refHint:`Stores a reference to env or configured external secret providers`}})===`plaintext`){let t=await it({prompter:e.prompter,accountConfigured:e.accountConfigured,canUseEnv:e.canUseEnv,hasConfigToken:e.hasConfigToken,envPrompt:e.envPrompt,keepPrompt:e.keepPrompt,inputPrompt:e.inputPrompt});return t.useEnv?{action:`use-env`}:t.token?{action:`set`,value:t.token,resolvedValue:t.token}:{action:`keep`}}if(e.hasConfigToken&&e.accountConfigured&&await e.prompter.confirm({message:e.keepPrompt,initialValue:!0}))return{action:`keep`};let t=await Ae({provider:e.providerHint,config:e.cfg,prompter:e.prompter,preferredEnvVar:e.preferredEnvVar,copy:{sourceMessage:`Where is this ${e.credentialLabel} stored?`,envVarPlaceholder:e.preferredEnvVar??`OPENCLAW_SECRET`,envVarFormatError:`Use an env var name like "OPENCLAW_SECRET" (uppercase letters, numbers, underscores).`,noProvidersMessage:`No file/exec secret providers are configured yet. Add one under secrets.providers, or select Environment variable.`}});return{action:`set`,value:t.ref,resolvedValue:t.resolvedValue}}async function ot(e){let t=B({accountId:e.accountId,defaultAccountId:e.defaultAccountId}),n=e.getExistingAllowFrom({cfg:e.cfg,accountId:t});await e.prompter.note(e.noteLines.join(`
1
+ import{t as e}from"./rolldown-runtime-CNxR59P3.js";import{t}from"./subsystem-B35lZH6M.js";import{h as n,m as r,t as i}from"./utils-eSzw3-BW.js";import{Jr as a,Xr as o,Yr as s}from"./model-selection-D_WMcs-m.js";import{A as c,F as l,I as u,S as d,k as f,yr as p}from"./reply-JaJmymld.js";import{d as m,f as h}from"./agent-scope-DauKPN2a.js";import{_ as g,g as _}from"./session-key-D3P0tf5P.js";import{a as v}from"./types.secrets-C-5U96pc.js";import{t as y}from"./command-format-BbDT1tlm.js";import{i as ee,o as te,r as ne}from"./registry-DwigmP92.js";import{g as b}from"./skills-sxAZFqk6.js";import{D as re,E as ie,H as x,O as S,T as C,V as ae,W as w,a as oe,at as T,c as se,ft as E,gt as D,ht as ce,it as O,l as le,lt as ue,n as k,ot as A,t as j,u as de,ut as fe}from"./plugins-CPVBLi22.js";import{t as M}from"./exec-Ble6PWIi.js";import{dt as pe}from"./send-hasPbLlg.js";import{a as me,n as he}from"./plugin-auto-enable-BACDL0lj.js";import{o as ge}from"./send-Du5iNpc_.js";import{r as N}from"./onboard-helpers-Dn0KiH64.js";import{t as P}from"./links-CmkiG3i0.js";import{t as _e}from"./login-cNagWwmy.js";import{t as ve}from"./brew-COcDl8CB.js";import{n as ye,r as be,t as xe}from"./api-Dx8x1KTs.js";import{t as F}from"./enable-CBei81Gs.js";import{s as Se}from"./install-safe-path-lI-ouoTr.js";import{a as Ce,i as we,n as Te,s as Ee,t as De}from"./installs-BC03n26J.js";import{n as Oe}from"./plugin-install-plan-CZV9LpbR.js";import{c as ke,s as Ae}from"./auth-choice.apply-helpers-BG7fgjfg.js";import je,{createWriteStream as Me}from"node:fs";import Ne from"node:os";import I from"node:path";import L from"node:fs/promises";import{pipeline as Pe}from"node:stream/promises";import{request as Fe}from"node:https";function Ie(e){let t=new Set;t.add(I.join(process.cwd(),`.git`)),e&&e!==process.cwd()&&t.add(I.join(e,`.git`));for(let e of t)if(je.existsSync(e))return!0;return!1}function Le(e,t,n){if(!n)return null;let r=e.install.localPath?.trim();if(!r)return null;let i=new Set;i.add(I.resolve(process.cwd(),r)),t&&t!==process.cwd()&&i.add(I.resolve(t,r));for(let e of i)if(je.existsSync(e))return e;return null}function Re(e,t){let n=e.plugins?.load?.paths??[],r=Array.from(new Set([...n,t]));return{...e,plugins:{...e.plugins,load:{...e.plugins?.load,paths:r}}}}async function ze(e){let{entry:t,localPath:n,prompter:r,defaultChoice:i}=e,a=n?[{value:`local`,label:`Use local plugin path`,hint:n}]:[],o=[{value:`npm`,label:`Download from npm (${t.install.npmSpec})`},...a,{value:`skip`,label:`Skip for now`}],s=i===`local`&&!n?`npm`:i;return await r.select({message:`Install ${t.meta.label} plugin?`,options:o,initialValue:s})}function Be(e){let{cfg:t,entry:n,localPath:r,bundledLocalPath:i}=e;if(i)return`local`;let a=t.update?.channel;if(a===`dev`)return r?`local`:`npm`;if(a===`stable`||a===`beta`)return`npm`;let o=n.install.defaultChoice;return o===`local`?r?`local`:`npm`:o===`npm`?`npm`:r?`local`:`npm`}async function Ve(e){let{entry:t,prompter:n,runtime:r,workspaceDir:i}=e,a=e.cfg,o=Ie(i),s=Ce({workspaceDir:i}),c=Oe({pluginId:t.id,npmSpec:t.install.npmSpec,findBundledSource:e=>we({bundled:s,lookup:e})})?.bundledSource.localPath??null,l=c??Le(t,i,o),u=await ze({entry:t,localPath:l,defaultChoice:Be({cfg:a,entry:t,localPath:l,bundledLocalPath:c}),prompter:n});if(u===`skip`)return{cfg:a,installed:!1};if(u===`local`&&l)return a=Re(a,l),a=F(a,t.id).config,{cfg:a,installed:!0};let d=await Ee({spec:t.install.npmSpec,logger:{info:e=>r.log?.(e),warn:e=>r.log?.(e)}});return d.ok?(a=F(a,d.pluginId).config,a=Te(a,{pluginId:d.pluginId,source:`npm`,spec:t.install.npmSpec,installPath:d.targetDir,version:d.version,...De(d.npmResolution)}),{cfg:a,installed:!0}):(await n.note(`Failed to install ${t.install.npmSpec}: ${d.error}`,`Plugin install`),l&&await n.confirm({message:`Use local plugin path instead? (${l})`,initialValue:!0})?(a=Re(a,l),a=F(a,t.id).config,{cfg:a,installed:!0}):(r.error?.(`Plugin install failed: ${d.error}`),{cfg:a,installed:!1}))}function He(e){b();let n=e.workspaceDir??m(e.cfg,h(e.cfg)),r=t(`plugins`);d({config:e.cfg,workspaceDir:n,cache:!1,logger:p(r)})}async function Ue(e){let t=e.listAccountIds(e.cfg),n=e.currentId?.trim()||e.defaultAccountId||`default`,r=await e.prompter.select({message:`${e.label} account`,options:[...t.map(e=>({value:e,label:e===`default`?`default (primary)`:e})),{value:`__new__`,label:`Add a new account`}],initialValue:n});if(r!==`__new__`)return g(r);let i=await e.prompter.text({message:`New ${e.label} account id`,validate:e=>e?.trim()?void 0:`Required`}),a=g(String(i));return String(i).trim()!==a&&await e.prompter.note(`Normalized account id to "${a}".`,`${e.label} account`),a}const We=async e=>await Ue(e);function Ge(e){let t=(e??[]).map(e=>String(e).trim()).filter(Boolean);return t.includes(`*`)||t.push(`*`),t}function Ke(e,t){let n=[...e??[],...t].map(e=>String(e).trim()).filter(Boolean);return[...new Set(n)]}function R(e){return e.split(/[\n,;]+/g).map(e=>e.trim()).filter(Boolean)}function qe(e,t){let n=R(String(e??``)),r=[];for(let e of n){let n=t(e);if(`error`in n)return{entries:[],error:n.error};r.push(n.value)}return{entries:z(r)}}function Je(e,t){return qe(e,e=>e===`*`?{value:`*`}:t(e))}function Ye(e){let t=e.value.trim();if(!t)return null;let n=t.match(e.mentionPattern);if(n?.[1])return e.normalizeId?e.normalizeId(n[1]):n[1];let r=e.prefixPattern?t.replace(e.prefixPattern,``):t;return e.idPattern.test(r)?e.normalizeId?e.normalizeId(r):r:null}function z(e,t){let n=e.map(e=>String(e).trim()).filter(Boolean).map(e=>{if(e===`*`)return`*`;if(!t)return e;let n=t(e);return typeof n==`string`?n.trim():``}).filter(Boolean);return[...new Set(n)]}function B(e){return e.accountId?.trim()?g(e.accountId):e.defaultAccountId}async function V(e){let t=e.accountOverride?.trim(),n=t?g(t):e.defaultAccountId;return e.shouldPromptAccountIds&&!t&&(n=await We({cfg:e.cfg,prompter:e.prompter,label:e.label,currentId:n,listAccountIds:e.listAccountIds,defaultAccountId:e.defaultAccountId})),n}function Xe(e){let{cfg:t,channel:n,accountId:r,allowFrom:i}=e;return nt({cfg:t,channel:n,accountId:r,patch:{allowFrom:i},ensureEnabled:!1})}function Ze(e){let{cfg:t,channel:n,dmPolicy:r}=e,i=r===`open`?Ge(t.channels?.[n]?.allowFrom):void 0;return{...t,channels:{...t.channels,[n]:{...t.channels?.[n],dmPolicy:r,...i?{allowFrom:i}:{}}}}}function Qe(e){let t=e.cfg.channels?.[e.channel]??{allowFrom:void 0,dm:void 0},n=t.allowFrom??t.dm?.allowFrom,r=e.dmPolicy===`open`?Ge(n):void 0;return tt({cfg:e.cfg,channel:e.channel,patch:{dmPolicy:e.dmPolicy,...r?{allowFrom:r}:{}}})}function $e(e){return tt({cfg:e.cfg,channel:e.channel,patch:{allowFrom:e.allowFrom}})}function et(e){return U({cfg:e.cfg,channel:e.channel,accountId:e.accountId,patch:{groupPolicy:e.groupPolicy}})}function tt(e){let{cfg:t,channel:n,patch:r}=e,i=t.channels?.[n]??{},a=i.dm??{};return{...t,channels:{...t.channels,[n]:{...i,...r,dm:{...a,enabled:typeof a.enabled==`boolean`?a.enabled:!0}}}}}function H(e,t,n){let r=e.channels?.[t]??{};return{...e,channels:{...e.channels,[t]:{...r,enabled:n}}}}function nt(e){let{cfg:t,channel:n,accountId:r,patch:i,ensureEnabled:a}=e;return be({cfg:r===`default`?t:ye({cfg:t,channelKey:n}),channelKey:n,accountId:r,patch:i,ensureChannelEnabled:a,ensureAccountEnabled:a})}function U(e){return nt({...e,ensureEnabled:!0})}function W(e){let t=e.cfg;return e.tokenResult.useEnv&&(t=U({cfg:t,channel:e.channel,accountId:e.accountId,patch:{}})),e.tokenResult.token&&(t=U({cfg:t,channel:e.channel,accountId:e.accountId,patch:{[e.tokenPatchKey]:e.tokenResult.token}})),t}function rt(e){return{accountConfigured:e.accountConfigured,hasConfigToken:e.hasConfigToken,canUseEnv:e.allowEnv&&!!e.envValue?.trim()&&!e.hasConfigToken}}async function it(e){let t=async()=>String(await e.prompter.text({message:e.inputPrompt,validate:e=>e?.trim()?void 0:`Required`})).trim();return e.canUseEnv?await e.prompter.confirm({message:e.envPrompt,initialValue:!0})?{useEnv:!0,token:null}:{useEnv:!1,token:await t()}:e.hasConfigToken&&e.accountConfigured&&await e.prompter.confirm({message:e.keepPrompt,initialValue:!0})?{useEnv:!1,token:null}:{useEnv:!1,token:await t()}}async function G(e){let t=rt({accountConfigured:e.accountConfigured,hasConfigToken:e.hasConfigToken,allowEnv:e.allowEnv,envValue:e.envValue});!t.accountConfigured&&e.onMissingConfigured&&await e.onMissingConfigured();let n=await at({cfg:e.cfg,prompter:e.prompter,providerHint:e.providerHint,credentialLabel:e.credentialLabel,secretInputMode:e.secretInputMode,accountConfigured:t.accountConfigured,canUseEnv:t.canUseEnv,hasConfigToken:t.hasConfigToken,envPrompt:e.envPrompt,keepPrompt:e.keepPrompt,inputPrompt:e.inputPrompt,preferredEnvVar:e.preferredEnvVar});return n.action===`use-env`?{cfg:e.applyUseEnv?await e.applyUseEnv(e.cfg):e.cfg,action:n.action,resolvedValue:e.envValue?.trim()||void 0}:n.action===`set`?{cfg:e.applySet?await e.applySet(e.cfg,n.value,n.resolvedValue):e.cfg,action:n.action,resolvedValue:n.resolvedValue}:{cfg:e.cfg,action:n.action}}async function at(e){if(await ke({prompter:e.prompter,explicitMode:e.secretInputMode,copy:{modeMessage:`How do you want to provide this ${e.credentialLabel}?`,plaintextLabel:`Enter ${e.credentialLabel}`,plaintextHint:`Stores the credential directly in OpenClaw config`,refLabel:`Use external secret provider`,refHint:`Stores a reference to env or configured external secret providers`}})===`plaintext`){let t=await it({prompter:e.prompter,accountConfigured:e.accountConfigured,canUseEnv:e.canUseEnv,hasConfigToken:e.hasConfigToken,envPrompt:e.envPrompt,keepPrompt:e.keepPrompt,inputPrompt:e.inputPrompt});return t.useEnv?{action:`use-env`}:t.token?{action:`set`,value:t.token,resolvedValue:t.token}:{action:`keep`}}if(e.hasConfigToken&&e.accountConfigured&&await e.prompter.confirm({message:e.keepPrompt,initialValue:!0}))return{action:`keep`};let t=await Ae({provider:e.providerHint,config:e.cfg,prompter:e.prompter,preferredEnvVar:e.preferredEnvVar,copy:{sourceMessage:`Where is this ${e.credentialLabel} stored?`,envVarPlaceholder:e.preferredEnvVar??`OPENCLAW_SECRET`,envVarFormatError:`Use an env var name like "OPENCLAW_SECRET" (uppercase letters, numbers, underscores).`,noProvidersMessage:`No file/exec secret providers are configured yet. Add one under secrets.providers, or select Environment variable.`}});return{action:`set`,value:t.ref,resolvedValue:t.resolvedValue}}async function ot(e){let t=B({accountId:e.accountId,defaultAccountId:e.defaultAccountId}),n=e.getExistingAllowFrom({cfg:e.cfg,accountId:t});await e.prompter.note(e.noteLines.join(`
2
2
  `),e.noteTitle);let r=await e.prompter.text({message:e.message,placeholder:e.placeholder,initialValue:n[0]?String(n[0]):void 0,validate:t=>{let n=String(t??``).trim();return n?e.parseEntries(n).error:`Required`}}),i=Ke(void 0,e.parseEntries(String(r)).entries);return Xe({cfg:e.cfg,channel:e.channel,accountId:t,allowFrom:i})}async function st(e){let t=[];for(let n of e.resolvedSections)n.values.length!==0&&t.push(`${n.title}: ${n.values.join(`, `)}`);e.unresolved&&e.unresolved.length>0&&t.push(`Unresolved (kept as typed): ${e.unresolved.join(`, `)}`),t.length>0&&await e.prompter.note(t.join(`
3
3
  `),e.label)}async function ct(e){await e.prompter.note(`Channel lookup failed; keeping entries as typed. ${String(e.error)}`,e.label)}async function lt(e){for(;;){let t=await e.prompter.text({message:e.message,placeholder:e.placeholder,initialValue:e.existing[0]?String(e.existing[0]):void 0,validate:e=>String(e??``).trim()?void 0:`Required`}),n=e.parseInputs(String(t));if(!e.token){let t=n.map(e.parseId).filter(Boolean);if(t.length!==n.length){await e.prompter.note(e.invalidWithoutTokenNote,e.label);continue}return Ke(e.existing,t)}let r=await e.resolveEntries({token:e.token,entries:n}).catch(()=>null);if(!r){await e.prompter.note(`Failed to resolve usernames. Try again.`,e.label);continue}let i=r.filter(e=>!e.resolved||!e.id);if(i.length>0){await e.prompter.note(`Could not resolve: ${i.map(e=>e.input).join(`, `)}`,e.label);continue}let a=r.map(e=>e.id);return Ke(e.existing,a)}}async function ut(e){await e.prompter.note(e.noteLines.join(`
4
4
  `),e.noteTitle);let t=await lt({prompter:e.prompter,existing:e.existing,token:e.token,message:e.message,placeholder:e.placeholder,label:e.noteTitle,parseInputs:R,parseId:e.parseId,invalidWithoutTokenNote:e.invalidWithoutTokenNote,resolveEntries:e.resolveEntries});return $e({cfg:e.cfg,channel:e.channel,allowFrom:t})}function dt(e){return R(String(e??``))}function ft(e){return e.map(e=>e.trim()).filter(Boolean).join(`, `)}async function pt(e){let t=[{value:`allowlist`,label:`Allowlist (recommended)`}];e.allowOpen!==!1&&t.push({value:`open`,label:`Open (allow all channels)`}),e.allowDisabled!==!1&&t.push({value:`disabled`,label:`Disabled (block all channels)`});let n=e.currentPolicy??`allowlist`;return await e.prompter.select({message:`${e.label} access`,options:t,initialValue:n})}async function mt(e){let t=e.currentEntries&&e.currentEntries.length>0?ft(e.currentEntries):void 0;return dt(await e.prompter.text({message:`${e.label} allowlist (comma-separated)`,placeholder:e.placeholder,initialValue:t}))}async function ht(e){let t=(e.currentEntries??[]).length>0,n=e.defaultPrompt??!t;if(!await e.prompter.confirm({message:e.updatePrompt?`Update ${e.label} access?`:`Configure ${e.label} access?`,initialValue:n}))return null;let r=await pt({prompter:e.prompter,label:e.label,currentPolicy:e.currentPolicy,allowOpen:e.allowOpen,allowDisabled:e.allowDisabled});return r===`allowlist`?{policy:r,entries:await mt({prompter:e.prompter,label:e.label,currentEntries:e.currentEntries,placeholder:e.placeholder})}:{policy:r,entries:[]}}async function gt(e){let t=e.cfg,n=await ht({prompter:e.prompter,label:e.label,currentPolicy:e.currentPolicy,currentEntries:e.currentEntries,placeholder:e.placeholder,updatePrompt:e.updatePrompt});if(!n)return t;if(n.policy!==`allowlist`)return e.setPolicy(t,n.policy);let r=await e.resolveAllowlist({cfg:t,entries:n.entries});return t=e.setPolicy(t,`allowlist`),e.applyAllowlist({cfg:t,resolved:r})}const K=`discord`;async function _t(e){await e.note([`1) Discord Developer Portal → Applications → New Application`,`2) Bot → Add Bot → Reset Token → copy token`,`3) OAuth2 → URL Generator → scope 'bot' → invite to your server`,`Tip: enable Message Content Intent if you need message text. (Bot → Privileged Gateway Intents → Message Content Intent)`,`Docs: ${P(`/discord`,`discord`)}`].join(`
@@ -1,5 +1,5 @@
1
- import{u as e}from"./paths-DfDmyG-r.js";import{m as t,p as n}from"./subsystem-B35lZH6M.js";import{y as r}from"./utils-eSzw3-BW.js";import{Ys as i,ec as a}from"./model-selection-D_WMcs-m.js";import{s as o}from"./types.secrets-C-5U96pc.js";import{t as s}from"./command-format-BbDT1tlm.js";import{At as c}from"./plugins-CPVBLi22.js";import{a as l,b as u,c as d,g as f,h as p,n as m,t as h,u as g}from"./onboard-helpers-Dn0KiH64.js";import{t as _}from"./runtime-guard-CKqXF6-d.js";import{t as v}from"./prompts-wv-lfVrJ.js";import{t as y}from"./clack-prompter-BTYj-mu-.js";import"./daemon-runtime-DHiDbRuC.js";import{t as b}from"./onboarding-CM_9Fyo2.js";import{n as x}from"./logging-KnZSytkB.js";import{i as S,r as C,t as w}from"./onboard-provider-auth-flags-Dvwzdz37.js";import{t as T}from"./onboard-config-DS9dUv8M.js";async function E(e,r=n){let i=y(),a=null;try{await b(e,r,i)}catch(e){if(e instanceof v){a=1;return}throw e}finally{t(`onboarding finish`,{resumeStdinIfPaused:!1}),a!==null&&r.exit(a)}}function D(e){return typeof e==`string`?e.trim().length>0:!!e}function O(e){let t=w.filter(({optionKey:t})=>D(e[t])).map(e=>({optionKey:e.optionKey,authChoice:e.authChoice,label:e.cliFlag}));return(D(e.customBaseUrl)||D(e.customModelId)||D(e.customApiKey))&&t.push({optionKey:`customBaseUrl`,authChoice:`custom-api-key`,label:`--custom-base-url/--custom-model-id/--custom-api-key`}),{choice:t[0]?.authChoice,matches:t}}function k(e){let{opts:t,runtime:n}=e,r=t.gatewayPort!==void 0;if(r&&(!Number.isFinite(t.gatewayPort)||(t.gatewayPort??0)<=0))return n.error(`Invalid --gateway-port`),n.exit(1),null;let i=r?t.gatewayPort:e.defaultPort,a=t.gatewayBind??`loopback`,s=t.gatewayAuth??`token`;if(s!==`token`&&s!==`password`)return n.error(`Invalid --gateway-auth (use token|password).`),n.exit(1),null;let l=s,u=t.tailscale??`off`,d=!!t.tailscaleResetOnExit;u!==`off`&&a!==`loopback`&&(a=`loopback`),u===`funnel`&&l!==`password`&&(l=`password`);let f=e.nextConfig,m=g(t.gatewayToken),h=g(process.env.OPENCLAW_GATEWAY_TOKEN),_=m||h||void 0,v=String(t.gatewayTokenRefEnv??``).trim();if(l===`token`)if(v){if(!o(v))return n.error(`Invalid --gateway-token-ref-env (use env var name like OPENCLAW_GATEWAY_TOKEN).`),n.exit(1),null;if(m)return n.error(`Use either --gateway-token or --gateway-token-ref-env, not both.`),n.exit(1),null;let e=process.env[v]?.trim();if(!e)return n.error(`Environment variable "${v}" is missing or empty.`),n.exit(1),null;_=e,f={...f,gateway:{...f.gateway,auth:{...f.gateway?.auth,mode:`token`,token:{source:`env`,provider:c(f,`env`,{preferFirstProviderForSource:!0}),id:v}}}}}else _||=p(),f={...f,gateway:{...f.gateway,auth:{...f.gateway?.auth,mode:`token`,token:_}}};if(l===`password`){let e=t.gatewayPassword?.trim();if(!e)return n.error(`Missing --gateway-password for password auth.`),n.exit(1),null;f={...f,gateway:{...f.gateway,auth:{...f.gateway?.auth,mode:`password`,password:e}}}}return f={...f,gateway:{...f.gateway,port:i,bind:a,tailscale:{...f.gateway?.tailscale,mode:u,resetOnExit:d}}},{nextConfig:f,port:i,bind:a,authMode:l,tailscaleMode:u,tailscaleResetOnExit:d,gatewayToken:_}}function A(e){e.opts.json&&e.runtime.log(JSON.stringify({mode:e.mode,workspace:e.workspaceDir,authChoice:e.authChoice,gateway:e.gateway,installDaemon:!!e.installDaemon,daemonRuntime:e.daemonRuntime,skipSkills:!!e.skipSkills,skipHealth:!!e.skipHealth},null,2))}function j(e){let{nextConfig:t,opts:n,runtime:r}=e;if(n.skipSkills)return t;let i=n.nodeManager??`npm`;return[`npm`,`pnpm`,`bun`].includes(i)?{...t,skills:{...t.skills,install:{...t.skills?.install,nodeManager:i}}}:(r.error(`Invalid --node-manager (use npm, pnpm, or bun)`),r.exit(1),t)}function M(e){return r((e.opts.workspace??e.baseConfig.agents?.defaults?.workspace??e.defaultWorkspaceDir).trim())}async function N(t){let{opts:n,runtime:r,baseConfig:i}=t,o=`local`,c=M({opts:n,baseConfig:i,defaultWorkspaceDir:h}),d=T(i,c),p=O(n);if(!n.authChoice&&p.matches.length>1){r.error([`Multiple API key flags were provided for non-interactive onboarding.`,`Use a single provider flag or pass --auth-choice explicitly.`,`Flags: ${p.matches.map(e=>e.label).join(`, `)}`].join(`
2
- `)),r.exit(1);return}let g=n.authChoice??p.choice??`skip`;if(g!==`skip`){let{applyNonInteractiveAuthChoice:e}=await import(`./auth-choice-B5WqAbXR.js`),t=await e({nextConfig:d,authChoice:g,opts:n,runtime:r,baseConfig:i});if(!t)return;d=t}let _=e(i),v=k({nextConfig:d,opts:n,runtime:r,defaultPort:_});if(!v)return;if(d=v.nextConfig,d=j({nextConfig:d,opts:n,runtime:r}),d=m(d,{command:`onboard`,mode:o}),await a(d),x(r),await l(c,r,{skipBootstrap:!!d.agents?.defaults?.skipBootstrap}),n.installDaemon){let{installGatewayDaemonNonInteractive:e}=await import(`./daemon-install-2HRZnoJH.js`);await e({nextConfig:d,opts:n,runtime:r,port:v.port})}let y=n.daemonRuntime??`node`;if(!n.skipHealth){let{healthCommand:e}=await import(`./health-Pqtl8jCk.js`).then(e=>e.i);await u({url:f({bind:v.bind,port:v.port,customBindHost:d.gateway?.customBindHost,basePath:void 0}).wsUrl,token:v.gatewayToken,deadlineMs:15e3}),await e({json:!1,timeoutMs:1e4},r)}A({opts:n,runtime:r,mode:o,workspaceDir:c,authChoice:g,gateway:{port:v.port,bind:v.bind,authMode:v.authMode,tailscaleMode:v.tailscaleMode},installDaemon:!!n.installDaemon,daemonRuntime:n.installDaemon?y:void 0,skipSkills:!!n.skipSkills,skipHealth:!!n.skipHealth}),n.json||r.log(`Tip: run \`${s(`openclaw configure --section web`)}\` to store your Brave API key for web_search. Docs: https://docs.openclaw.ai/tools/web`)}async function P(e){let{opts:t,runtime:n,baseConfig:r}=e,i=`remote`,o=t.remoteUrl?.trim();if(!o){n.error(`Missing --remote-url for remote mode.`),n.exit(1);return}let c={...r,gateway:{...r.gateway,mode:`remote`,remote:{url:o,token:t.remoteToken?.trim()||void 0}}};c=m(c,{command:`onboard`,mode:i}),await a(c),x(n);let l={mode:i,remoteUrl:o,auth:t.remoteToken?`token`:`none`};t.json?n.log(JSON.stringify(l,null,2)):(n.log(`Remote gateway: ${o}`),n.log(`Auth: ${l.auth}`),n.log(`Tip: run \`${s(`openclaw configure --section web`)}\` to store your Brave API key for web_search. Docs: https://docs.openclaw.ai/tools/web`))}async function F(e,t=n){let r=await i();if(r.exists&&!r.valid){t.error(`Config invalid. Run \`${s(`openclaw doctor`)}\` to repair it, then re-run onboarding.`),t.exit(1);return}let a=r.valid&&r.exists?r.config:{},o=e.mode??`local`;if(o!==`local`&&o!==`remote`){t.error(`Invalid --mode "${String(o)}" (use local|remote).`),t.exit(1);return}if(o===`remote`){await P({opts:e,runtime:t,baseConfig:a});return}await N({opts:e,runtime:t,baseConfig:a})}const I=new Set([`config`,`config+creds+sessions`,`full`]);async function L(e,t=n){_(t);let a=e.authChoice,o=S(a);if(e.nonInteractive&&C(a)){t.error([`Auth choice "${String(a)}" is deprecated.`,`Use "--auth-choice token" (Anthropic setup-token) or "--auth-choice openai-codex".`].join(`
1
+ import{u as e}from"./paths-DfDmyG-r.js";import{m as t,p as n}from"./subsystem-B35lZH6M.js";import{y as r}from"./utils-eSzw3-BW.js";import{Ys as i,ec as a}from"./model-selection-D_WMcs-m.js";import{s as o}from"./types.secrets-C-5U96pc.js";import{t as s}from"./command-format-BbDT1tlm.js";import{At as c}from"./plugins-CPVBLi22.js";import{a as l,b as u,c as d,g as f,h as p,n as m,t as h,u as g}from"./onboard-helpers-Dn0KiH64.js";import{t as _}from"./runtime-guard-CKqXF6-d.js";import{t as v}from"./prompts-wv-lfVrJ.js";import{t as y}from"./clack-prompter-BTYj-mu-.js";import"./daemon-runtime-DHiDbRuC.js";import{t as b}from"./onboarding-CddGtlY5.js";import{n as x}from"./logging-KnZSytkB.js";import{i as S,r as C,t as w}from"./onboard-provider-auth-flags-Dvwzdz37.js";import{t as T}from"./onboard-config-DS9dUv8M.js";async function E(e,r=n){let i=y(),a=null;try{await b(e,r,i)}catch(e){if(e instanceof v){a=1;return}throw e}finally{t(`onboarding finish`,{resumeStdinIfPaused:!1}),a!==null&&r.exit(a)}}function D(e){return typeof e==`string`?e.trim().length>0:!!e}function O(e){let t=w.filter(({optionKey:t})=>D(e[t])).map(e=>({optionKey:e.optionKey,authChoice:e.authChoice,label:e.cliFlag}));return(D(e.customBaseUrl)||D(e.customModelId)||D(e.customApiKey))&&t.push({optionKey:`customBaseUrl`,authChoice:`custom-api-key`,label:`--custom-base-url/--custom-model-id/--custom-api-key`}),{choice:t[0]?.authChoice,matches:t}}function k(e){let{opts:t,runtime:n}=e,r=t.gatewayPort!==void 0;if(r&&(!Number.isFinite(t.gatewayPort)||(t.gatewayPort??0)<=0))return n.error(`Invalid --gateway-port`),n.exit(1),null;let i=r?t.gatewayPort:e.defaultPort,a=t.gatewayBind??`loopback`,s=t.gatewayAuth??`token`;if(s!==`token`&&s!==`password`)return n.error(`Invalid --gateway-auth (use token|password).`),n.exit(1),null;let l=s,u=t.tailscale??`off`,d=!!t.tailscaleResetOnExit;u!==`off`&&a!==`loopback`&&(a=`loopback`),u===`funnel`&&l!==`password`&&(l=`password`);let f=e.nextConfig,m=g(t.gatewayToken),h=g(process.env.OPENCLAW_GATEWAY_TOKEN),_=m||h||void 0,v=String(t.gatewayTokenRefEnv??``).trim();if(l===`token`)if(v){if(!o(v))return n.error(`Invalid --gateway-token-ref-env (use env var name like OPENCLAW_GATEWAY_TOKEN).`),n.exit(1),null;if(m)return n.error(`Use either --gateway-token or --gateway-token-ref-env, not both.`),n.exit(1),null;let e=process.env[v]?.trim();if(!e)return n.error(`Environment variable "${v}" is missing or empty.`),n.exit(1),null;_=e,f={...f,gateway:{...f.gateway,auth:{...f.gateway?.auth,mode:`token`,token:{source:`env`,provider:c(f,`env`,{preferFirstProviderForSource:!0}),id:v}}}}}else _||=p(),f={...f,gateway:{...f.gateway,auth:{...f.gateway?.auth,mode:`token`,token:_}}};if(l===`password`){let e=t.gatewayPassword?.trim();if(!e)return n.error(`Missing --gateway-password for password auth.`),n.exit(1),null;f={...f,gateway:{...f.gateway,auth:{...f.gateway?.auth,mode:`password`,password:e}}}}return f={...f,gateway:{...f.gateway,port:i,bind:a,tailscale:{...f.gateway?.tailscale,mode:u,resetOnExit:d}}},{nextConfig:f,port:i,bind:a,authMode:l,tailscaleMode:u,tailscaleResetOnExit:d,gatewayToken:_}}function A(e){e.opts.json&&e.runtime.log(JSON.stringify({mode:e.mode,workspace:e.workspaceDir,authChoice:e.authChoice,gateway:e.gateway,installDaemon:!!e.installDaemon,daemonRuntime:e.daemonRuntime,skipSkills:!!e.skipSkills,skipHealth:!!e.skipHealth},null,2))}function j(e){let{nextConfig:t,opts:n,runtime:r}=e;if(n.skipSkills)return t;let i=n.nodeManager??`npm`;return[`npm`,`pnpm`,`bun`].includes(i)?{...t,skills:{...t.skills,install:{...t.skills?.install,nodeManager:i}}}:(r.error(`Invalid --node-manager (use npm, pnpm, or bun)`),r.exit(1),t)}function M(e){return r((e.opts.workspace??e.baseConfig.agents?.defaults?.workspace??e.defaultWorkspaceDir).trim())}async function N(t){let{opts:n,runtime:r,baseConfig:i}=t,o=`local`,c=M({opts:n,baseConfig:i,defaultWorkspaceDir:h}),d=T(i,c),p=O(n);if(!n.authChoice&&p.matches.length>1){r.error([`Multiple API key flags were provided for non-interactive onboarding.`,`Use a single provider flag or pass --auth-choice explicitly.`,`Flags: ${p.matches.map(e=>e.label).join(`, `)}`].join(`
2
+ `)),r.exit(1);return}let g=n.authChoice??p.choice??`skip`;if(g!==`skip`){let{applyNonInteractiveAuthChoice:e}=await import(`./auth-choice-B5WqAbXR.js`),t=await e({nextConfig:d,authChoice:g,opts:n,runtime:r,baseConfig:i});if(!t)return;d=t}let _=e(i),v=k({nextConfig:d,opts:n,runtime:r,defaultPort:_});if(!v)return;if(d=v.nextConfig,d=j({nextConfig:d,opts:n,runtime:r}),d=m(d,{command:`onboard`,mode:o}),await a(d),x(r),await l(c,r,{skipBootstrap:!!d.agents?.defaults?.skipBootstrap}),n.installDaemon){let{installGatewayDaemonNonInteractive:e}=await import(`./daemon-install-2HRZnoJH.js`);await e({nextConfig:d,opts:n,runtime:r,port:v.port})}let y=n.daemonRuntime??`node`;if(!n.skipHealth){let{healthCommand:e}=await import(`./health-xCl2atiY.js`).then(e=>e.i);await u({url:f({bind:v.bind,port:v.port,customBindHost:d.gateway?.customBindHost,basePath:void 0}).wsUrl,token:v.gatewayToken,deadlineMs:15e3}),await e({json:!1,timeoutMs:1e4},r)}A({opts:n,runtime:r,mode:o,workspaceDir:c,authChoice:g,gateway:{port:v.port,bind:v.bind,authMode:v.authMode,tailscaleMode:v.tailscaleMode},installDaemon:!!n.installDaemon,daemonRuntime:n.installDaemon?y:void 0,skipSkills:!!n.skipSkills,skipHealth:!!n.skipHealth}),n.json||r.log(`Tip: run \`${s(`openclaw configure --section web`)}\` to store your Brave API key for web_search. Docs: https://docs.openclaw.ai/tools/web`)}async function P(e){let{opts:t,runtime:n,baseConfig:r}=e,i=`remote`,o=t.remoteUrl?.trim();if(!o){n.error(`Missing --remote-url for remote mode.`),n.exit(1);return}let c={...r,gateway:{...r.gateway,mode:`remote`,remote:{url:o,token:t.remoteToken?.trim()||void 0}}};c=m(c,{command:`onboard`,mode:i}),await a(c),x(n);let l={mode:i,remoteUrl:o,auth:t.remoteToken?`token`:`none`};t.json?n.log(JSON.stringify(l,null,2)):(n.log(`Remote gateway: ${o}`),n.log(`Auth: ${l.auth}`),n.log(`Tip: run \`${s(`openclaw configure --section web`)}\` to store your Brave API key for web_search. Docs: https://docs.openclaw.ai/tools/web`))}async function F(e,t=n){let r=await i();if(r.exists&&!r.valid){t.error(`Config invalid. Run \`${s(`openclaw doctor`)}\` to repair it, then re-run onboarding.`),t.exit(1);return}let a=r.valid&&r.exists?r.config:{},o=e.mode??`local`;if(o!==`local`&&o!==`remote`){t.error(`Invalid --mode "${String(o)}" (use local|remote).`),t.exit(1);return}if(o===`remote`){await P({opts:e,runtime:t,baseConfig:a});return}await N({opts:e,runtime:t,baseConfig:a})}const I=new Set([`config`,`config+creds+sessions`,`full`]);async function L(e,t=n){_(t);let a=e.authChoice,o=S(a);if(e.nonInteractive&&C(a)){t.error([`Auth choice "${String(a)}" is deprecated.`,`Use "--auth-choice token" (Anthropic setup-token) or "--auth-choice openai-codex".`].join(`
3
3
  `)),t.exit(1);return}a===`claude-cli`&&t.log(`Auth choice "claude-cli" is deprecated; using setup-token flow instead.`),a===`codex-cli`&&t.log(`Auth choice "codex-cli" is deprecated; using OpenAI Codex OAuth instead.`);let c=e.flow===`manual`?`advanced`:e.flow,l=o===e.authChoice&&c===e.flow?e:{...e,authChoice:o,flow:c};if(l.secretInputMode&&l.secretInputMode!==`plaintext`&&l.secretInputMode!==`ref`){t.error(`Invalid --secret-input-mode. Use "plaintext" or "ref".`),t.exit(1);return}if(l.resetScope&&!I.has(l.resetScope)){t.error(`Invalid --reset-scope. Use "config", "config+creds+sessions", or "full".`),t.exit(1);return}if(l.nonInteractive&&l.acceptRisk!==!0){t.error([`Non-interactive onboarding requires explicit risk acknowledgement.`,`Read: https://docs.openclaw.ai/security`,`Re-run with: ${s(`openclaw onboard --non-interactive --accept-risk ...`)}`].join(`
4
4
  `)),t.exit(1);return}if(l.reset){let e=await i(),n=e.valid?e.config:{},a=l.workspace??n.agents?.defaults?.workspace??h;await d(l.resetScope??`config+creds+sessions`,r(a),t)}if(process.platform===`win32`&&t.log([`Windows detected — OpenClaw runs great on WSL2!`,`Native Windows might be trickier.`,`Quick setup: wsl --install (one command, one reboot)`,`Guide: https://docs.openclaw.ai/windows`].join(`
5
5
  `)),l.nonInteractive){await F(l,t);return}await E(l,t)}export{L as t};
@@ -4,4 +4,4 @@ import{n as e,u as t}from"./paths-DfDmyG-r.js";import{p as n}from"./subsystem-B3
4
4
  `),`QuickStart`)}let x=t(h),S=`ws://127.0.0.1:${x}`,C=process.env.OPENCLAW_GATEWAY_TOKEN??process.env.CLAWDBOT_GATEWAY_TOKEN;try{let e=await l({config:h,value:h.gateway?.auth?.token,path:`gateway.auth.token`,env:process.env});e&&(C=e)}catch(e){await f.note([`Could not resolve gateway.auth.token SecretRef for onboarding probe.`,e instanceof Error?e.message:String(e)].join(`
5
5
  `),`Gateway auth`)}let w=process.env.OPENCLAW_GATEWAY_PASSWORD??process.env.CLAWDBOT_GATEWAY_PASSWORD;try{let e=await l({config:h,value:h.gateway?.auth?.password,path:`gateway.auth.password`,env:process.env});e&&(w=e)}catch(e){await f.note([`Could not resolve gateway.auth.password SecretRef for onboarding probe.`,e instanceof Error?e.message:String(e)].join(`
6
6
  `),`Gateway auth`)}let T=await p.probeGatewayReachable({url:S,token:C,password:w}),E=h.gateway?.remote?.url?.trim()??``,D=o(h.gateway?.remote?.token);try{let e=await l({config:h,value:h.gateway?.remote?.token,path:`gateway.remote.token`,env:process.env});e&&(D=e)}catch(e){await f.note([`Could not resolve gateway.remote.token SecretRef for onboarding probe.`,e instanceof Error?e.message:String(e)].join(`
7
- `),`Gateway auth`)}let O=E?await p.probeGatewayReachable({url:E,token:D}):null,k=c.mode??(y===`quickstart`?`local`:await f.select({message:`What do you want to set up?`,options:[{value:`local`,label:`Local gateway (this machine)`,hint:T.ok?`Gateway reachable (${S})`:`No gateway detected (${S})`},{value:`remote`,label:`Remote gateway (info-only)`,hint:E?O?.ok?`Gateway reachable (${E})`:`Configured but unreachable (${E})`:`No remote URL configured yet`}]}));if(k===`remote`){let{promptRemoteGatewayConfig:e}=await import(`./onboard-remote-BOk_7r89.js`).then(e=>e.t),{logConfigUpdated:t}=await import(`./logging-KnZSytkB.js`).then(e=>e.r),n=await e(h,f,{secretInputMode:c.secretInputMode});n=p.applyWizardMetadata(n,{command:`onboard`,mode:k}),await a(n),t(d),await f.outro(`Remote gateway configured.`);return}let A=r((c.workspace??(y===`quickstart`?h.agents?.defaults?.workspace??p.DEFAULT_WORKSPACE:await f.text({message:`Workspace directory`,initialValue:h.agents?.defaults?.workspace??p.DEFAULT_WORKSPACE}))).trim()||p.DEFAULT_WORKSPACE),{applyOnboardingLocalWorkspaceConfig:j}=await import(`./onboard-config-DS9dUv8M.js`).then(e=>e.n),M=j(h,A),{ensureAuthProfileStore:N}=await import(`./model-selection-D_WMcs-m.js`).then(e=>e.Ct),{promptAuthChoiceGrouped:P}=await import(`./auth-choice-prompt-xYj13czb.js`).then(e=>e.t),{promptCustomApiConfig:F}=await import(`./onboard-custom-CWm1kh0e.js`).then(e=>e.r),{applyAuthChoice:I,resolvePreferredProviderForAuthChoice:L,warnIfModelConfigLooksOff:R}=await import(`./auth-choice-COKpi33u.js`).then(e=>e.t),{applyPrimaryModel:z,promptDefaultModel:B}=await import(`./model-picker-BfdYcRr4.js`).then(e=>e.i),V=N(void 0,{allowKeychainPrompt:!1}),H=c.authChoice===void 0,U=c.authChoice??await P({prompter:f,store:V,includeSkip:!0});if(U===`custom-api-key`)M=(await F({prompter:f,runtime:d,config:M,secretInputMode:c.secretInputMode})).config;else{let e=await I({authChoice:U,config:M,prompter:f,runtime:d,setDefaultModel:!(H&&U===`ollama`),opts:{tokenProvider:c.tokenProvider,token:c.authChoice===`apiKey`&&c.token?c.token:void 0}});M=e.config,e.agentModelOverride&&(M=z(M,e.agentModelOverride))}if(H&&U!==`custom-api-key`){let e=await B({config:M,prompter:f,allowKeep:!0,ignoreAllowlist:!0,includeVllm:!0,preferredProvider:L(U)});e.config&&(M=e.config),e.model&&(M=z(M,e.model))}if(U===`ollama`){let{ensureOllamaModelPulled:e}=await import(`./ollama-setup-XGODRdD_.js`).then(e=>e.r);await e({config:M,prompter:f})}await R(M,f);let{configureGatewayForOnboarding:W}=await import(`./onboarding.gateway-config-CQLfEdoa.js`),G=await W({flow:y,baseConfig:h,nextConfig:M,localPort:x,quickstartGateway:b,secretInputMode:c.secretInputMode,prompter:f,runtime:d});M=G.nextConfig;let K=G.settings;if(c.skipChannels??c.skipProviders)await f.note(`Skipping channel setup.`,`Channels`);else{let{listChannelPlugins:e}=await import(`./plugins-CPVBLi22.js`).then(e=>e.i),{setupChannels:t}=await import(`./onboard-channels-BK5KINY9.js`).then(e=>e.n),n=y===`quickstart`?e().filter(e=>e.meta.quickstartAllowFrom).map(e=>e.id):[];M=await t(M,d,f,{allowSignalInstall:!0,forceAllowFromChannels:n,skipDmPolicyPrompt:y===`quickstart`,skipConfirm:y===`quickstart`,quickstartDefaults:y===`quickstart`,secretInputMode:c.secretInputMode})}await a(M);let{logConfigUpdated:q}=await import(`./logging-KnZSytkB.js`).then(e=>e.r);if(q(d),await p.ensureWorkspaceAndSessions(A,d,{skipBootstrap:!!M.agents?.defaults?.skipBootstrap}),c.skipSearch)await f.note(`Skipping search setup.`,`Search`);else{let{setupSearch:e}=await import(`./onboard-search-f2tJD4hg.js`);M=await e(M,d,f,{quickstartDefaults:y===`quickstart`,secretInputMode:c.secretInputMode})}if(c.skipSkills)await f.note(`Skipping skills setup.`,`Skills`);else{let{setupSkills:e}=await import(`./onboard-skills-r3ItnaG8.js`).then(e=>e.t);M=await e(M,A,d,f)}let{setupInternalHooks:J}=await import(`./onboard-hooks-DnvsyHXA.js`);M=await J(M,d,f),M=p.applyWizardMetadata(M,{command:`onboard`,mode:k}),await a(M);let{finalizeOnboardingWizard:Y}=await import(`./onboarding.finalize-DstFPCVD.js`),{launchedTui:X}=await Y({flow:y,opts:c,baseConfig:h,nextConfig:M,workspaceDir:A,settings:K,prompter:f,runtime:d})}export{d as t};
7
+ `),`Gateway auth`)}let O=E?await p.probeGatewayReachable({url:E,token:D}):null,k=c.mode??(y===`quickstart`?`local`:await f.select({message:`What do you want to set up?`,options:[{value:`local`,label:`Local gateway (this machine)`,hint:T.ok?`Gateway reachable (${S})`:`No gateway detected (${S})`},{value:`remote`,label:`Remote gateway (info-only)`,hint:E?O?.ok?`Gateway reachable (${E})`:`Configured but unreachable (${E})`:`No remote URL configured yet`}]}));if(k===`remote`){let{promptRemoteGatewayConfig:e}=await import(`./onboard-remote-BOk_7r89.js`).then(e=>e.t),{logConfigUpdated:t}=await import(`./logging-KnZSytkB.js`).then(e=>e.r),n=await e(h,f,{secretInputMode:c.secretInputMode});n=p.applyWizardMetadata(n,{command:`onboard`,mode:k}),await a(n),t(d),await f.outro(`Remote gateway configured.`);return}let A=r((c.workspace??(y===`quickstart`?h.agents?.defaults?.workspace??p.DEFAULT_WORKSPACE:await f.text({message:`Workspace directory`,initialValue:h.agents?.defaults?.workspace??p.DEFAULT_WORKSPACE}))).trim()||p.DEFAULT_WORKSPACE),{applyOnboardingLocalWorkspaceConfig:j}=await import(`./onboard-config-DS9dUv8M.js`).then(e=>e.n),M=j(h,A),{ensureAuthProfileStore:N}=await import(`./model-selection-D_WMcs-m.js`).then(e=>e.Ct),{promptAuthChoiceGrouped:P}=await import(`./auth-choice-prompt-xYj13czb.js`).then(e=>e.t),{promptCustomApiConfig:F}=await import(`./onboard-custom-CWm1kh0e.js`).then(e=>e.r),{applyAuthChoice:I,resolvePreferredProviderForAuthChoice:L,warnIfModelConfigLooksOff:R}=await import(`./auth-choice-CVvPBerD.js`).then(e=>e.t),{applyPrimaryModel:z,promptDefaultModel:B}=await import(`./model-picker-BfdYcRr4.js`).then(e=>e.i),V=N(void 0,{allowKeychainPrompt:!1}),H=c.authChoice===void 0,U=c.authChoice??await P({prompter:f,store:V,includeSkip:!0});if(U===`custom-api-key`)M=(await F({prompter:f,runtime:d,config:M,secretInputMode:c.secretInputMode})).config;else{let e=await I({authChoice:U,config:M,prompter:f,runtime:d,setDefaultModel:!(H&&U===`ollama`),opts:{tokenProvider:c.tokenProvider,token:c.authChoice===`apiKey`&&c.token?c.token:void 0}});M=e.config,e.agentModelOverride&&(M=z(M,e.agentModelOverride))}if(H&&U!==`custom-api-key`){let e=await B({config:M,prompter:f,allowKeep:!0,ignoreAllowlist:!0,includeVllm:!0,preferredProvider:L(U)});e.config&&(M=e.config),e.model&&(M=z(M,e.model))}if(U===`ollama`){let{ensureOllamaModelPulled:e}=await import(`./ollama-setup-XGODRdD_.js`).then(e=>e.r);await e({config:M,prompter:f})}await R(M,f);let{configureGatewayForOnboarding:W}=await import(`./onboarding.gateway-config-CQLfEdoa.js`),G=await W({flow:y,baseConfig:h,nextConfig:M,localPort:x,quickstartGateway:b,secretInputMode:c.secretInputMode,prompter:f,runtime:d});M=G.nextConfig;let K=G.settings;if(c.skipChannels??c.skipProviders)await f.note(`Skipping channel setup.`,`Channels`);else{let{listChannelPlugins:e}=await import(`./plugins-CPVBLi22.js`).then(e=>e.i),{setupChannels:t}=await import(`./onboard-channels-ByD6UdVu.js`).then(e=>e.n),n=y===`quickstart`?e().filter(e=>e.meta.quickstartAllowFrom).map(e=>e.id):[];M=await t(M,d,f,{allowSignalInstall:!0,forceAllowFromChannels:n,skipDmPolicyPrompt:y===`quickstart`,skipConfirm:y===`quickstart`,quickstartDefaults:y===`quickstart`,secretInputMode:c.secretInputMode})}await a(M);let{logConfigUpdated:q}=await import(`./logging-KnZSytkB.js`).then(e=>e.r);if(q(d),await p.ensureWorkspaceAndSessions(A,d,{skipBootstrap:!!M.agents?.defaults?.skipBootstrap}),c.skipSearch)await f.note(`Skipping search setup.`,`Search`);else{let{setupSearch:e}=await import(`./onboard-search-f2tJD4hg.js`);M=await e(M,d,f,{quickstartDefaults:y===`quickstart`,secretInputMode:c.secretInputMode})}if(c.skipSkills)await f.note(`Skipping skills setup.`,`Skills`);else{let{setupSkills:e}=await import(`./onboard-skills-r3ItnaG8.js`).then(e=>e.t);M=await e(M,A,d,f)}let{setupInternalHooks:J}=await import(`./onboard-hooks-DnvsyHXA.js`);M=await J(M,d,f),M=p.applyWizardMetadata(M,{command:`onboard`,mode:k}),await a(M);let{finalizeOnboardingWizard:Y}=await import(`./onboarding.finalize-BgCWB7kF.js`),{launchedTui:X}=await Y({flow:y,opts:c,baseConfig:h,nextConfig:M,workspaceDir:A,settings:K,prompter:f,runtime:d})}export{d as t};
@@ -4,4 +4,4 @@ import{p as e}from"./subsystem-C7tbdlOl.js";import{n as t,u as n}from"./paths-BR
4
4
  `),`QuickStart`)}let x=n(h),S=`ws://127.0.0.1:${x}`,C=process.env.OPENCLAW_GATEWAY_TOKEN??process.env.CLAWDBOT_GATEWAY_TOKEN;try{let e=await l({config:h,value:h.gateway?.auth?.token,path:`gateway.auth.token`,env:process.env});e&&(C=e)}catch(e){await f.note([`Could not resolve gateway.auth.token SecretRef for onboarding probe.`,e instanceof Error?e.message:String(e)].join(`
5
5
  `),`Gateway auth`)}let w=process.env.OPENCLAW_GATEWAY_PASSWORD??process.env.CLAWDBOT_GATEWAY_PASSWORD;try{let e=await l({config:h,value:h.gateway?.auth?.password,path:`gateway.auth.password`,env:process.env});e&&(w=e)}catch(e){await f.note([`Could not resolve gateway.auth.password SecretRef for onboarding probe.`,e instanceof Error?e.message:String(e)].join(`
6
6
  `),`Gateway auth`)}let T=await p.probeGatewayReachable({url:S,token:C,password:w}),E=h.gateway?.remote?.url?.trim()??``,D=s(h.gateway?.remote?.token);try{let e=await l({config:h,value:h.gateway?.remote?.token,path:`gateway.remote.token`,env:process.env});e&&(D=e)}catch(e){await f.note([`Could not resolve gateway.remote.token SecretRef for onboarding probe.`,e instanceof Error?e.message:String(e)].join(`
7
- `),`Gateway auth`)}let O=E?await p.probeGatewayReachable({url:E,token:D}):null,k=c.mode??(y===`quickstart`?`local`:await f.select({message:`What do you want to set up?`,options:[{value:`local`,label:`Local gateway (this machine)`,hint:T.ok?`Gateway reachable (${S})`:`No gateway detected (${S})`},{value:`remote`,label:`Remote gateway (info-only)`,hint:E?O?.ok?`Gateway reachable (${E})`:`Configured but unreachable (${E})`:`No remote URL configured yet`}]}));if(k===`remote`){let{promptRemoteGatewayConfig:e}=await import(`./onboard-remote-DJk7e8-4.js`).then(e=>e.t),{logConfigUpdated:t}=await import(`./logging-B7juU2TI.js`).then(e=>e.r),n=await e(h,f,{secretInputMode:c.secretInputMode});n=p.applyWizardMetadata(n,{command:`onboard`,mode:k}),await i(n),t(d),await f.outro(`Remote gateway configured.`);return}let A=o((c.workspace??(y===`quickstart`?h.agents?.defaults?.workspace??p.DEFAULT_WORKSPACE:await f.text({message:`Workspace directory`,initialValue:h.agents?.defaults?.workspace??p.DEFAULT_WORKSPACE}))).trim()||p.DEFAULT_WORKSPACE),{applyOnboardingLocalWorkspaceConfig:j}=await import(`./onboard-config-B7U20YRw.js`).then(e=>e.n),M=j(h,A),{ensureAuthProfileStore:N}=await import(`./auth-profiles-BkhVHtgY.js`).then(e=>e.t),{promptAuthChoiceGrouped:P}=await import(`./auth-choice-prompt-uegl56cf.js`).then(e=>e.t),{promptCustomApiConfig:F}=await import(`./onboard-custom-Zd8HYRR8.js`).then(e=>e.r),{applyAuthChoice:I,resolvePreferredProviderForAuthChoice:L,warnIfModelConfigLooksOff:R}=await import(`./auth-choice-K5eGX1sj.js`).then(e=>e.t),{applyPrimaryModel:z,promptDefaultModel:B}=await import(`./model-picker-DKcmC_dE.js`).then(e=>e.i),V=N(void 0,{allowKeychainPrompt:!1}),H=c.authChoice===void 0,U=c.authChoice??await P({prompter:f,store:V,includeSkip:!0});if(U===`custom-api-key`)M=(await F({prompter:f,runtime:d,config:M,secretInputMode:c.secretInputMode})).config;else{let e=await I({authChoice:U,config:M,prompter:f,runtime:d,setDefaultModel:!(H&&U===`ollama`),opts:{tokenProvider:c.tokenProvider,token:c.authChoice===`apiKey`&&c.token?c.token:void 0}});M=e.config,e.agentModelOverride&&(M=z(M,e.agentModelOverride))}if(H&&U!==`custom-api-key`){let e=await B({config:M,prompter:f,allowKeep:!0,ignoreAllowlist:!0,includeVllm:!0,preferredProvider:L(U)});e.config&&(M=e.config),e.model&&(M=z(M,e.model))}if(U===`ollama`){let{ensureOllamaModelPulled:e}=await import(`./ollama-setup-DgqIvy8w.js`).then(e=>e.r);await e({config:M,prompter:f})}await R(M,f);let{configureGatewayForOnboarding:W}=await import(`./onboarding.gateway-config-COoat4uz.js`),G=await W({flow:y,baseConfig:h,nextConfig:M,localPort:x,quickstartGateway:b,secretInputMode:c.secretInputMode,prompter:f,runtime:d});M=G.nextConfig;let K=G.settings;if(c.skipChannels??c.skipProviders)await f.note(`Skipping channel setup.`,`Channels`);else{let{listChannelPlugins:e}=await import(`./plugins-CAHuRRVU.js`).then(e=>e.i),{setupChannels:t}=await import(`./onboard-channels-CsKyM82H.js`).then(e=>e.n),n=y===`quickstart`?e().filter(e=>e.meta.quickstartAllowFrom).map(e=>e.id):[];M=await t(M,d,f,{allowSignalInstall:!0,forceAllowFromChannels:n,skipDmPolicyPrompt:y===`quickstart`,skipConfirm:y===`quickstart`,quickstartDefaults:y===`quickstart`,secretInputMode:c.secretInputMode})}await i(M);let{logConfigUpdated:q}=await import(`./logging-B7juU2TI.js`).then(e=>e.r);if(q(d),await p.ensureWorkspaceAndSessions(A,d,{skipBootstrap:!!M.agents?.defaults?.skipBootstrap}),c.skipSearch)await f.note(`Skipping search setup.`,`Search`);else{let{setupSearch:e}=await import(`./onboard-search-fslKKhyg.js`);M=await e(M,d,f,{quickstartDefaults:y===`quickstart`,secretInputMode:c.secretInputMode})}if(c.skipSkills)await f.note(`Skipping skills setup.`,`Skills`);else{let{setupSkills:e}=await import(`./onboard-skills-B5fy5-Vm.js`).then(e=>e.t);M=await e(M,A,d,f)}let{setupInternalHooks:J}=await import(`./onboard-hooks-CQ4KpKw5.js`);M=await J(M,d,f),M=p.applyWizardMetadata(M,{command:`onboard`,mode:k}),await i(M);let{finalizeOnboardingWizard:Y}=await import(`./onboarding.finalize-C96gv5GP.js`),{launchedTui:X}=await Y({flow:y,opts:c,baseConfig:h,nextConfig:M,workspaceDir:A,settings:K,prompter:f,runtime:d})}export{d as t};
7
+ `),`Gateway auth`)}let O=E?await p.probeGatewayReachable({url:E,token:D}):null,k=c.mode??(y===`quickstart`?`local`:await f.select({message:`What do you want to set up?`,options:[{value:`local`,label:`Local gateway (this machine)`,hint:T.ok?`Gateway reachable (${S})`:`No gateway detected (${S})`},{value:`remote`,label:`Remote gateway (info-only)`,hint:E?O?.ok?`Gateway reachable (${E})`:`Configured but unreachable (${E})`:`No remote URL configured yet`}]}));if(k===`remote`){let{promptRemoteGatewayConfig:e}=await import(`./onboard-remote-DJk7e8-4.js`).then(e=>e.t),{logConfigUpdated:t}=await import(`./logging-B7juU2TI.js`).then(e=>e.r),n=await e(h,f,{secretInputMode:c.secretInputMode});n=p.applyWizardMetadata(n,{command:`onboard`,mode:k}),await i(n),t(d),await f.outro(`Remote gateway configured.`);return}let A=o((c.workspace??(y===`quickstart`?h.agents?.defaults?.workspace??p.DEFAULT_WORKSPACE:await f.text({message:`Workspace directory`,initialValue:h.agents?.defaults?.workspace??p.DEFAULT_WORKSPACE}))).trim()||p.DEFAULT_WORKSPACE),{applyOnboardingLocalWorkspaceConfig:j}=await import(`./onboard-config-B7U20YRw.js`).then(e=>e.n),M=j(h,A),{ensureAuthProfileStore:N}=await import(`./auth-profiles-BkhVHtgY.js`).then(e=>e.t),{promptAuthChoiceGrouped:P}=await import(`./auth-choice-prompt-uegl56cf.js`).then(e=>e.t),{promptCustomApiConfig:F}=await import(`./onboard-custom-Zd8HYRR8.js`).then(e=>e.r),{applyAuthChoice:I,resolvePreferredProviderForAuthChoice:L,warnIfModelConfigLooksOff:R}=await import(`./auth-choice-DSNX3Hdu.js`).then(e=>e.t),{applyPrimaryModel:z,promptDefaultModel:B}=await import(`./model-picker-DKcmC_dE.js`).then(e=>e.i),V=N(void 0,{allowKeychainPrompt:!1}),H=c.authChoice===void 0,U=c.authChoice??await P({prompter:f,store:V,includeSkip:!0});if(U===`custom-api-key`)M=(await F({prompter:f,runtime:d,config:M,secretInputMode:c.secretInputMode})).config;else{let e=await I({authChoice:U,config:M,prompter:f,runtime:d,setDefaultModel:!(H&&U===`ollama`),opts:{tokenProvider:c.tokenProvider,token:c.authChoice===`apiKey`&&c.token?c.token:void 0}});M=e.config,e.agentModelOverride&&(M=z(M,e.agentModelOverride))}if(H&&U!==`custom-api-key`){let e=await B({config:M,prompter:f,allowKeep:!0,ignoreAllowlist:!0,includeVllm:!0,preferredProvider:L(U)});e.config&&(M=e.config),e.model&&(M=z(M,e.model))}if(U===`ollama`){let{ensureOllamaModelPulled:e}=await import(`./ollama-setup-DgqIvy8w.js`).then(e=>e.r);await e({config:M,prompter:f})}await R(M,f);let{configureGatewayForOnboarding:W}=await import(`./onboarding.gateway-config-COoat4uz.js`),G=await W({flow:y,baseConfig:h,nextConfig:M,localPort:x,quickstartGateway:b,secretInputMode:c.secretInputMode,prompter:f,runtime:d});M=G.nextConfig;let K=G.settings;if(c.skipChannels??c.skipProviders)await f.note(`Skipping channel setup.`,`Channels`);else{let{listChannelPlugins:e}=await import(`./plugins-CAHuRRVU.js`).then(e=>e.i),{setupChannels:t}=await import(`./onboard-channels-B8JZHEaQ.js`).then(e=>e.n),n=y===`quickstart`?e().filter(e=>e.meta.quickstartAllowFrom).map(e=>e.id):[];M=await t(M,d,f,{allowSignalInstall:!0,forceAllowFromChannels:n,skipDmPolicyPrompt:y===`quickstart`,skipConfirm:y===`quickstart`,quickstartDefaults:y===`quickstart`,secretInputMode:c.secretInputMode})}await i(M);let{logConfigUpdated:q}=await import(`./logging-B7juU2TI.js`).then(e=>e.r);if(q(d),await p.ensureWorkspaceAndSessions(A,d,{skipBootstrap:!!M.agents?.defaults?.skipBootstrap}),c.skipSearch)await f.note(`Skipping search setup.`,`Search`);else{let{setupSearch:e}=await import(`./onboard-search-fslKKhyg.js`);M=await e(M,d,f,{quickstartDefaults:y===`quickstart`,secretInputMode:c.secretInputMode})}if(c.skipSkills)await f.note(`Skipping skills setup.`,`Skills`);else{let{setupSkills:e}=await import(`./onboard-skills-B5fy5-Vm.js`).then(e=>e.t);M=await e(M,A,d,f)}let{setupInternalHooks:J}=await import(`./onboard-hooks-CQ4KpKw5.js`);M=await J(M,d,f),M=p.applyWizardMetadata(M,{command:`onboard`,mode:k}),await i(M);let{finalizeOnboardingWizard:Y}=await import(`./onboarding.finalize-CkHWKgcF.js`),{launchedTui:X}=await Y({flow:y,opts:c,baseConfig:h,nextConfig:M,workspaceDir:A,settings:K,prompter:f,runtime:d})}export{d as t};