@qqbrowser/openclaw-qbot 0.0.142 → 0.0.143

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 (257) hide show
  1. package/dist/{agents-Bpp_F5In.js → agents-D3Z05GqK.js} +2 -2
  2. package/dist/{agents.config-DfIJAGcd.js → agents.config-BUQjISaN.js} +2 -2
  3. package/dist/{agents.config-B6LRG9eP.js → agents.config-BvxrGqOT.js} +2 -2
  4. package/dist/{auth-choice-DvTApGhx.js → auth-choice-CYGzLW73.js} +2 -2
  5. package/dist/{auth-choice-EQdNd7jO.js → auth-choice-DJn6683d.js} +2 -2
  6. package/dist/{banner-9u45RL26.js → banner-xQa2kS6O.js} +2 -2
  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-D2syI791.js → channel-options-BurUBfoY.js} +2 -2
  12. package/dist/{channel-options-CEIzjOno.js → channel-options-Ce8uNnAp.js} +2 -2
  13. package/dist/{channel-web-BrElpZAc.js → channel-web-D5TgFlMz.js} +2 -2
  14. package/dist/{channel-web-CxHbET4B.js → channel-web-D7FkrASC.js} +2 -2
  15. package/dist/{channels-cli-BmAJuuRs.js → channels-cli-BfzZrnkt.js} +2 -2
  16. package/dist/{channels-cli-Dgosczr6.js → channels-cli-DFI6F6G0.js} +2 -2
  17. package/dist/{cli-D8T2tphD.js → cli-CMLvfh6N.js} +2 -2
  18. package/dist/{cli-BcnoCo4z.js → cli-MTpYYgjl.js} +2 -2
  19. package/dist/{command-registry-CfuXCRwV.js → command-registry-CPthpEk3.js} +2 -2
  20. package/dist/{compact-Dg66DXx_.js → compact-BEeB6bwq.js} +7 -7
  21. package/dist/{compact.runtime-3mTLUPqu.js → compact.runtime-BC7F7HPJ.js} +1 -1
  22. package/dist/{compact.runtime-DcTdUW4o.js → compact.runtime-BTUQRS-2.js} +1 -1
  23. package/dist/{compact.runtime-Bhewj5vA.js → compact.runtime-C0GyLWem.js} +1 -1
  24. package/dist/{compact.runtime-XXtYlNJN.js → compact.runtime-CrOFsO5D.js} +1 -1
  25. package/dist/{completion-cli-C40TWdsv.js → completion-cli-C4_SZmjl.js} +2 -2
  26. package/dist/{completion-cli-BZi4nuQb.js → completion-cli-DeGEpJri.js} +2 -2
  27. package/dist/{config-cli-CBte2b1h.js → config-cli-B9hEiZsw.js} +2 -2
  28. package/dist/{config-cli-1ojSLwAj.js → config-cli-BNTGUqL_.js} +2 -2
  29. package/dist/{configure-kod4tmZa.js → configure-DForkh7R.js} +2 -2
  30. package/dist/{configure-DJrNDEpR.js → configure-DR77VUCy.js} +2 -2
  31. package/dist/{deps-send-whatsapp.runtime-C4O9crnk.js → deps-send-whatsapp.runtime-BuIiTn5n.js} +1 -1
  32. package/dist/{deps-send-whatsapp.runtime-5Lot99zq.js → deps-send-whatsapp.runtime-C4hGmfeP.js} +1 -1
  33. package/dist/{deps-send-whatsapp.runtime-LiNvHd_E.js → deps-send-whatsapp.runtime-CYlLppMS.js} +1 -1
  34. package/dist/{deps-send-whatsapp.runtime-Bg-_kVX6.js → deps-send-whatsapp.runtime-FY-HuZ5S.js} +1 -1
  35. package/dist/{doctor-completion-DMJhfrtC.js → doctor-completion-APZJ17BJ.js} +2 -2
  36. package/dist/{doctor-completion-BJ6steqx.js → doctor-completion-Bad_h3hm.js} +2 -2
  37. package/dist/entry.js +1 -1
  38. package/dist/extensionAPI.js +1 -1
  39. package/dist/{gateway-cli-CKu0FA7D.js → gateway-cli-CbJj0QhL.js} +3 -3
  40. package/dist/{gateway-cli-C_s9eMlC.js → gateway-cli-tXsBFRlk.js} +3 -3
  41. package/dist/{health-PaRHFItm.js → health-DBu0V1Y-.js} +2 -2
  42. package/dist/{health-BgOggK9k.js → health-RQzDNQwf.js} +2 -2
  43. package/dist/{hooks-cli-CsBrScq0.js → hooks-cli-B3eDoEHO.js} +2 -2
  44. package/dist/{hooks-cli-BzyzTNBx.js → hooks-cli-xgORhqZ2.js} +2 -2
  45. package/dist/index.js +2 -2
  46. package/dist/llm-slug-generator.js +1 -1
  47. package/dist/{models-C_Vg3Cty.js → models-BEO5lvkx.js} +2 -2
  48. package/dist/{models-cli-CDZliTXq.js → models-cli-BbcJ6A0F.js} +2 -2
  49. package/dist/{models-cli-bGr8jwAb.js → models-cli-Dacwv6BY.js} +2 -2
  50. package/dist/{npm-resolution-DWPloph4.js → npm-resolution-Bui58Ks1.js} +2 -2
  51. package/dist/{npm-resolution-BnJGLwhi.js → npm-resolution-Ct6MRtq6.js} +2 -2
  52. package/dist/{onboard-B0BNCQaO.js → onboard-7i9A1nNd.js} +3 -3
  53. package/dist/{onboard-CjVhdaiR.js → onboard-DSaXIS5U.js} +3 -3
  54. package/dist/{onboard-channels-CZK_7xMR.js → onboard-channels-BXReNh4B.js} +2 -2
  55. package/dist/{onboard-channels-BMIOddLN.js → onboard-channels-CjXCpXI-.js} +2 -2
  56. package/dist/{onboarding-ouEqUuUr.js → onboarding-BRewu6jg.js} +2 -2
  57. package/dist/{onboarding-B6ixWwgp.js → onboarding-RZTEMxl0.js} +2 -2
  58. package/dist/{onboarding.finalize-DsMVlTcH.js → onboarding.finalize-Bi53z1zE.js} +2 -2
  59. package/dist/{onboarding.finalize-Bgat5Npc.js → onboarding.finalize-Bp8ST2z_.js} +2 -2
  60. package/dist/{pi-embedded-BZSn84Bh.js → pi-embedded-B_6OtP8m.js} +7 -7
  61. package/dist/{pi-embedded-Dsz7p3MF.js → pi-embedded-DjX-gdoY.js} +7 -7
  62. package/dist/{plugin-registry-CIBiHZH1.js → plugin-registry-CI5K3iWc.js} +2 -2
  63. package/dist/{plugin-registry-C6dY-Et7.js → plugin-registry-CYlBYbc8.js} +2 -2
  64. package/dist/plugin-sdk/{channel-web-9zn1Itpg.cjs → channel-web-BSUPSLCU.cjs} +2 -2
  65. package/dist/plugin-sdk/{channel-web-4ZQVqsrt.js → channel-web-CeSPyNTh.js} +2 -2
  66. package/dist/plugin-sdk/{channel-web-BrB00HKH.js → channel-web-Cptth4mc.js} +2 -2
  67. package/dist/plugin-sdk/{channel-web-DN5La-Ol.cjs → channel-web-D4x22KPN.cjs} +2 -2
  68. package/dist/plugin-sdk/{compact.runtime-8oUv1ld1.cjs → compact.runtime-BDgWntMu.cjs} +1 -1
  69. package/dist/plugin-sdk/{compact.runtime-CmJayEYX.js → compact.runtime-BJFMaTF4.js} +1 -1
  70. package/dist/plugin-sdk/{compact.runtime-BjJCBESR.cjs → compact.runtime-BWadwUyE.cjs} +1 -1
  71. package/dist/plugin-sdk/{compact.runtime-ALKRoVEG.js → compact.runtime-Bfu2rMai.js} +1 -1
  72. package/dist/plugin-sdk/{compact.runtime-DBlESOSV.cjs → compact.runtime-Cg47oUHq.cjs} +1 -1
  73. package/dist/plugin-sdk/{compact.runtime-Dmc0G6Yn.js → compact.runtime-CqK86P7R.js} +1 -1
  74. package/dist/plugin-sdk/{compact.runtime-Chumwp0K.cjs → compact.runtime-CqrB25-A.cjs} +1 -1
  75. package/dist/plugin-sdk/{compact.runtime-Ddfxp3fz.js → compact.runtime-DeATtENL.js} +1 -1
  76. package/dist/plugin-sdk/{compact.runtime-C_dc78Lp.cjs → compact.runtime-GMu30Jmw.cjs} +1 -1
  77. package/dist/plugin-sdk/{compact.runtime-ZrApPcrV.js → compact.runtime-YFzugj-k.js} +1 -1
  78. package/dist/plugin-sdk/{compact.runtime-BF4SCZ-5.js → compact.runtime-a8Z4_6wu.js} +1 -1
  79. package/dist/plugin-sdk/{compact.runtime-CbzQiVEW.cjs → compact.runtime-jGNfnpo2.cjs} +1 -1
  80. package/dist/plugin-sdk/compat.cjs +1 -1
  81. package/dist/plugin-sdk/compat.js +1 -1
  82. package/dist/plugin-sdk/{deps-send-whatsapp.runtime-BEDFRjff.js → deps-send-whatsapp.runtime-23E2Ab5R.js} +1 -1
  83. package/dist/plugin-sdk/{deps-send-whatsapp.runtime-QY0XTSgX.cjs → deps-send-whatsapp.runtime-B1oA3XBA.cjs} +1 -1
  84. package/dist/plugin-sdk/{deps-send-whatsapp.runtime-Du_3Rw7K.cjs → deps-send-whatsapp.runtime-C8q_3sOf.cjs} +1 -1
  85. package/dist/plugin-sdk/{deps-send-whatsapp.runtime-DMeaTnvE.cjs → deps-send-whatsapp.runtime-CsebM75z.cjs} +1 -1
  86. package/dist/plugin-sdk/{deps-send-whatsapp.runtime-CrVVnzLl.js → deps-send-whatsapp.runtime-D3mYdwaT.js} +1 -1
  87. package/dist/plugin-sdk/{deps-send-whatsapp.runtime-DR4rvUQL.js → deps-send-whatsapp.runtime-DDwUEbJ8.js} +1 -1
  88. package/dist/plugin-sdk/{deps-send-whatsapp.runtime-BULlOkpi.cjs → deps-send-whatsapp.runtime-Di3p_3Eh.cjs} +1 -1
  89. package/dist/plugin-sdk/{deps-send-whatsapp.runtime--uXLMs1C.js → deps-send-whatsapp.runtime-JzRD4jTI.js} +1 -1
  90. package/dist/plugin-sdk/{deps-send-whatsapp.runtime-BRjb9631.cjs → deps-send-whatsapp.runtime-gEp895yA.cjs} +1 -1
  91. package/dist/plugin-sdk/{deps-send-whatsapp.runtime-VQXeRmRl.js → deps-send-whatsapp.runtime-iV5E6CHf.js} +1 -1
  92. package/dist/plugin-sdk/{deps-send-whatsapp.runtime-2Us9O7dL.cjs → deps-send-whatsapp.runtime-k0yGrhs2.cjs} +1 -1
  93. package/dist/plugin-sdk/{deps-send-whatsapp.runtime-BfV5Q2fx.js → deps-send-whatsapp.runtime-v3sqBoDg.js} +1 -1
  94. package/dist/plugin-sdk/{dispatch-C2YTqGlf.js → dispatch-3PrSaGZi.js} +7 -7
  95. package/dist/plugin-sdk/{dispatch-DHbSBeFJ.js → dispatch-Bcf1uPHo.js} +7 -7
  96. package/dist/plugin-sdk/{dispatch-SWyfAZT0.cjs → dispatch-BgGE9usQ.cjs} +7 -7
  97. package/dist/plugin-sdk/{dispatch-BYlcmJ9u.js → dispatch-BhUN9ZDP.js} +7 -7
  98. package/dist/plugin-sdk/{dispatch-DK5ub8qa.cjs → dispatch-C3k8j6Zb.cjs} +7 -7
  99. package/dist/plugin-sdk/{dispatch-DCSwqteL.js → dispatch-C_gJPvbD.js} +7 -7
  100. package/dist/plugin-sdk/{dispatch-5v3v8zzA.js → dispatch-Df8B7owq.js} +7 -7
  101. package/dist/plugin-sdk/{dispatch-CNy3g9ma.cjs → dispatch-YK0qHNtb.cjs} +7 -7
  102. package/dist/plugin-sdk/{dispatch-B6UbZCpL.cjs → dispatch-_fZDA253.cjs} +7 -7
  103. package/dist/plugin-sdk/{dispatch-mR2vLkGa.cjs → dispatch-wEH2eS4y.cjs} +7 -7
  104. package/dist/plugin-sdk/index.cjs +1 -1
  105. package/dist/plugin-sdk/index.js +1 -1
  106. package/dist/plugin-sdk/irc.cjs +1 -1
  107. package/dist/plugin-sdk/irc.js +1 -1
  108. package/dist/plugin-sdk/matrix.cjs +1 -1
  109. package/dist/plugin-sdk/matrix.js +1 -1
  110. package/dist/plugin-sdk/msteams.cjs +1 -1
  111. package/dist/plugin-sdk/msteams.js +1 -1
  112. package/dist/plugin-sdk/nextcloud-talk.cjs +1 -1
  113. package/dist/plugin-sdk/nextcloud-talk.js +1 -1
  114. package/dist/plugin-sdk/{reply-0zCEbT4w.cjs → reply-BoWg-IXT.cjs} +7 -7
  115. package/dist/plugin-sdk/{reply-D-f2bbXy.js → reply-bS9U9BwG.js} +7 -7
  116. package/dist/plugin-sdk/{slash-dispatch.runtime-CNhhOTEP.js → slash-dispatch.runtime-4y3z-kPo.js} +1 -1
  117. package/dist/plugin-sdk/{slash-dispatch.runtime-B3b2L4iH.js → slash-dispatch.runtime-BRr9YGOs.js} +1 -1
  118. package/dist/plugin-sdk/{slash-dispatch.runtime-CPPp4KKH.cjs → slash-dispatch.runtime-BtdMVJQe.cjs} +1 -1
  119. package/dist/plugin-sdk/{slash-dispatch.runtime-Dw9M-fvv.js → slash-dispatch.runtime-C6iak1_0.js} +1 -1
  120. package/dist/plugin-sdk/{slash-dispatch.runtime-BoTYqNiv.js → slash-dispatch.runtime-CMx727dE.js} +1 -1
  121. package/dist/plugin-sdk/{slash-dispatch.runtime-CaWoVNJu.cjs → slash-dispatch.runtime-CXXaAMYa.cjs} +1 -1
  122. package/dist/plugin-sdk/{slash-dispatch.runtime-DbheDKxM.cjs → slash-dispatch.runtime-Cvom2Onl.cjs} +1 -1
  123. package/dist/plugin-sdk/{slash-dispatch.runtime-DpBWBF7J.js → slash-dispatch.runtime-D00kIROj.js} +1 -1
  124. package/dist/plugin-sdk/{slash-dispatch.runtime-DSQ2U0MM.cjs → slash-dispatch.runtime-DEu-D4XB.cjs} +1 -1
  125. package/dist/plugin-sdk/{slash-dispatch.runtime-Bu6Gwr3m.cjs → slash-dispatch.runtime-DG7_jQXD.cjs} +1 -1
  126. package/dist/plugin-sdk/{slash-dispatch.runtime-CCEMBSm2.cjs → slash-dispatch.runtime-DVP1q-_z.cjs} +1 -1
  127. package/dist/plugin-sdk/{slash-dispatch.runtime-Dm_cVnlq.js → slash-dispatch.runtime-U6qjtCfd.js} +1 -1
  128. package/dist/plugin-sdk/{subagent-registry-runtime-bVH8kl6Y.js → subagent-registry-runtime-BD_DkCmR.js} +1 -1
  129. package/dist/plugin-sdk/{subagent-registry-runtime-Der4fbZK.cjs → subagent-registry-runtime-BWiMCyG_.cjs} +1 -1
  130. package/dist/plugin-sdk/{subagent-registry-runtime-Pp_rfnk0.js → subagent-registry-runtime-C6vGkwe9.js} +1 -1
  131. package/dist/plugin-sdk/{subagent-registry-runtime-B0cZ_eaC.cjs → subagent-registry-runtime-CCcI3vhb.cjs} +1 -1
  132. package/dist/plugin-sdk/{subagent-registry-runtime-B-P4w-z9.js → subagent-registry-runtime-CDCU--WW.js} +1 -1
  133. package/dist/plugin-sdk/{subagent-registry-runtime-Ciev9m2W.cjs → subagent-registry-runtime-D98xiwmA.cjs} +1 -1
  134. package/dist/plugin-sdk/{subagent-registry-runtime-DBPvxiJW.cjs → subagent-registry-runtime-LebBdxD7.cjs} +1 -1
  135. package/dist/plugin-sdk/{subagent-registry-runtime-BfmeSbXD.cjs → subagent-registry-runtime-MfHdezNY.cjs} +1 -1
  136. package/dist/plugin-sdk/{subagent-registry-runtime-CL0sdx5J.cjs → subagent-registry-runtime-bMabqk9V.cjs} +1 -1
  137. package/dist/plugin-sdk/{subagent-registry-runtime-DH_Jx5hU.js → subagent-registry-runtime-h3qrqiJH.js} +1 -1
  138. package/dist/plugin-sdk/{subagent-registry-runtime-CEvE9keW.js → subagent-registry-runtime-tmI7JUke.js} +1 -1
  139. package/dist/plugin-sdk/{subagent-registry-runtime-Du8BhjzJ.js → subagent-registry-runtime-uC8wbfNS.js} +1 -1
  140. package/dist/plugin-sdk/{web-BdnQzLgF.js → web-9Os8v8Cu.js} +2 -2
  141. package/dist/plugin-sdk/{web-pcTha_l7.cjs → web-BQ9hOKe8.cjs} +2 -2
  142. package/dist/plugin-sdk/{web-C9T7tf6w.js → web-Bjk0MWu3.js} +2 -2
  143. package/dist/plugin-sdk/{web-_tj8xNZE.js → web-BsmnVZaX.js} +2 -2
  144. package/dist/plugin-sdk/{web-B2PwjHsu.cjs → web-CUbdclQS.cjs} +2 -2
  145. package/dist/plugin-sdk/{web-CcYBsmAj.cjs → web-C_Vx3mgY.cjs} +1 -1
  146. package/dist/plugin-sdk/{web-BZoOYDwf.js → web-Cdo1e0C7.js} +1 -1
  147. package/dist/plugin-sdk/{web-CODD4ksc.cjs → web-CfTkaUMk.cjs} +2 -2
  148. package/dist/plugin-sdk/{web-24o5tNe3.js → web-DkmdYSZ8.js} +1 -1
  149. package/dist/plugin-sdk/{web-B-QDcVRv.cjs → web-DpGXJ6SQ.cjs} +2 -2
  150. package/dist/plugin-sdk/{web-Czl9vNVv.cjs → web-DuF9udb6.cjs} +1 -1
  151. package/dist/plugin-sdk/{web-CkdCvvR-.js → web-Jr2J55LO.js} +2 -2
  152. package/dist/plugin-sdk/whatsapp.cjs +1 -1
  153. package/dist/plugin-sdk/whatsapp.js +1 -1
  154. package/dist/{plugins-cli-BiVMAr5T.js → plugins-cli-BzJeq-CW.js} +2 -2
  155. package/dist/{plugins-cli-BbjMbzJU.js → plugins-cli-o74CJV4A.js} +2 -2
  156. package/dist/{program-BrAZTwFr.js → program-D9AMAbv6.js} +3 -3
  157. package/dist/{program-context-B9ydtPje.js → program-context-BX9wN65q.js} +2 -2
  158. package/dist/{prompt-select-styled-BeJNbzSa.js → prompt-select-styled-C2c13Ndq.js} +2 -2
  159. package/dist/{prompt-select-styled-DIOWLjl0.js → prompt-select-styled-hxyoyq2i.js} +2 -2
  160. package/dist/{provider-auth-helpers-pBVCjBj9.js → provider-auth-helpers-BzlcSA6U.js} +2 -2
  161. package/dist/{provider-auth-helpers-1lU43eTW.js → provider-auth-helpers-CDIiLD1m.js} +2 -2
  162. package/dist/{push-apns-BGUOmD5M.js → push-apns-CrAWstBo.js} +2 -2
  163. package/dist/{push-apns-B_a2MBJ4.js → push-apns-CrMV74Qs.js} +2 -2
  164. package/dist/{register.agent-CX78s_X9.js → register.agent-CisptTv_.js} +2 -2
  165. package/dist/{register.agent-DLDKQENq.js → register.agent-Dl2Ef-K5.js} +2 -2
  166. package/dist/{register.configure-BA5u9hT3.js → register.configure-CvPihXst.js} +2 -2
  167. package/dist/{register.configure-BhPtf3Qo.js → register.configure-D8bJJ16k.js} +2 -2
  168. package/dist/{register.maintenance-BhsBepKS.js → register.maintenance-AeTvVTtt.js} +2 -2
  169. package/dist/{register.maintenance-r_MzNK3-.js → register.maintenance-BkM8-Ttt.js} +2 -2
  170. package/dist/{register.message-CTF--Z2a.js → register.message-3zVHQZ27.js} +2 -2
  171. package/dist/{register.message-jcZ875be.js → register.message-CM_Qudzn.js} +2 -2
  172. package/dist/{register.onboard-C3yL50_c.js → register.onboard-BY-QLNp9.js} +2 -2
  173. package/dist/{register.onboard-CNwnStUk.js → register.onboard-C-j99DGw.js} +2 -2
  174. package/dist/{register.setup-BRJMzgfU.js → register.setup-DA4HFCro.js} +2 -2
  175. package/dist/{register.setup-BvsS-zgm.js → register.setup-DiAi_1pJ.js} +2 -2
  176. package/dist/{register.status-health-sessions-Dqmkw820.js → register.status-health-sessions-BXiMraHZ.js} +2 -2
  177. package/dist/{register.status-health-sessions-DVc__2pc.js → register.status-health-sessions-Bo9VWxLG.js} +2 -2
  178. package/dist/{register.subclis-D-24j83X.js → register.subclis-smZuHVcv.js} +2 -2
  179. package/dist/{reply-l-Y47HP4.js → reply-CjyZeZ-j.js} +7 -7
  180. package/dist/{run-main-B_YBE_TN.js → run-main-DEZR4lCo.js} +2 -2
  181. package/dist/{server-node-events-CFSY_-4t.js → server-node-events-BWiQg1NL.js} +2 -2
  182. package/dist/{server-node-events-ZFwmPwQ-.js → server-node-events-DicMyck-.js} +2 -2
  183. package/dist/{slash-dispatch.runtime-pdAIQrzR.js → slash-dispatch.runtime-CGgP5dBX.js} +1 -1
  184. package/dist/{slash-dispatch.runtime-CKWXmLO1.js → slash-dispatch.runtime-CknX8Fkv.js} +1 -1
  185. package/dist/{slash-dispatch.runtime-DIR5H2MY.js → slash-dispatch.runtime-CoKGpcpS.js} +1 -1
  186. package/dist/{slash-dispatch.runtime-14ABU-DD.js → slash-dispatch.runtime-pSpPe8qL.js} +1 -1
  187. package/dist/{status-DYqPF0rB.js → status-BoL8-JxA.js} +2 -2
  188. package/dist/{status-JIPeVrsc.js → status-DEAX-TLb.js} +2 -2
  189. package/dist/{subagent-registry-runtime-rPbwTnju.js → subagent-registry-runtime-2Nh6-7ym.js} +1 -1
  190. package/dist/{subagent-registry-runtime-DTVXQJOP.js → subagent-registry-runtime-CG_2Atu3.js} +1 -1
  191. package/dist/{subagent-registry-runtime-Cj4CKKl_.js → subagent-registry-runtime-Cc264UfD.js} +1 -1
  192. package/dist/{subagent-registry-runtime-8_ktZPZB.js → subagent-registry-runtime-CpYm78z3.js} +1 -1
  193. package/dist/{update-cli-BwBMOeP0.js → update-cli-C0qadZEs.js} +2 -2
  194. package/dist/{update-cli-YrBbmw4f.js → update-cli-ISorpxrU.js} +2 -2
  195. package/dist/{update-runner-BvtyRBD2.js → update-runner-CvWH2ZAc.js} +2 -2
  196. package/dist/{update-runner-DYamgo1V.js → update-runner-mMbwEOlU.js} +2 -2
  197. package/dist/{web-DwcxsgH0.js → web-ARUUCMQo.js} +2 -2
  198. package/dist/{web-C15yQ-wI.js → web-C6jRFeYp.js} +1 -1
  199. package/dist/{web-C6So15hm.js → web-CDXYiCsB.js} +1 -1
  200. package/dist/{web-Cq3xWCaD.js → web-CiagxaWr.js} +2 -2
  201. package/node_modules/@aws-sdk/client-bedrock-runtime/package.json +42 -42
  202. package/node_modules/@aws-sdk/core/dist-cjs/index.js +17 -0
  203. package/node_modules/@aws-sdk/core/dist-cjs/submodules/client/index.js +17 -0
  204. package/node_modules/@aws-sdk/core/dist-es/submodules/client/index.js +1 -0
  205. package/node_modules/@aws-sdk/core/dist-es/submodules/client/longPollMiddleware.js +15 -0
  206. package/node_modules/@aws-sdk/core/package.json +11 -11
  207. package/node_modules/@aws-sdk/credential-provider-env/package.json +5 -5
  208. package/node_modules/@aws-sdk/credential-provider-http/package.json +10 -10
  209. package/node_modules/@aws-sdk/credential-provider-ini/package.json +14 -14
  210. package/node_modules/@aws-sdk/credential-provider-login/package.json +8 -8
  211. package/node_modules/@aws-sdk/credential-provider-node/package.json +12 -12
  212. package/node_modules/@aws-sdk/credential-provider-process/package.json +6 -6
  213. package/node_modules/@aws-sdk/credential-provider-sso/package.json +8 -8
  214. package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +7 -7
  215. package/node_modules/@aws-sdk/eventstream-handler-node/package.json +4 -4
  216. package/node_modules/@aws-sdk/middleware-eventstream/package.json +4 -4
  217. package/node_modules/@aws-sdk/middleware-host-header/package.json +4 -4
  218. package/node_modules/@aws-sdk/middleware-logger/package.json +3 -3
  219. package/node_modules/@aws-sdk/middleware-recursion-detection/package.json +4 -4
  220. package/node_modules/@aws-sdk/middleware-user-agent/package.json +8 -8
  221. package/node_modules/@aws-sdk/middleware-websocket/package.json +9 -9
  222. package/node_modules/@aws-sdk/nested-clients/package.json +32 -32
  223. package/node_modules/@aws-sdk/region-config-resolver/package.json +5 -5
  224. package/node_modules/@aws-sdk/token-providers/package.json +7 -7
  225. package/node_modules/@aws-sdk/types/package.json +2 -2
  226. package/node_modules/@aws-sdk/util-endpoints/package.json +5 -5
  227. package/node_modules/@aws-sdk/util-format-url/package.json +4 -4
  228. package/node_modules/@aws-sdk/util-user-agent-browser/package.json +3 -3
  229. package/node_modules/@aws-sdk/util-user-agent-node/package.json +5 -5
  230. package/node_modules/@aws-sdk/xml-builder/package.json +2 -2
  231. package/node_modules/@whiskeysockets/baileys/node_modules/p-queue/dist/index.js +1 -0
  232. package/node_modules/@whiskeysockets/baileys/node_modules/p-queue/package.json +1 -1
  233. package/node_modules/content-disposition/index.js +118 -40
  234. package/node_modules/content-disposition/package.json +8 -11
  235. package/node_modules/path-expression-matcher/lib/pem.cjs +1 -1
  236. package/node_modules/path-expression-matcher/lib/pem.d.cts +18 -0
  237. package/node_modules/path-expression-matcher/lib/pem.min.js +1 -1
  238. package/node_modules/path-expression-matcher/package.json +1 -1
  239. package/node_modules/path-expression-matcher/src/Expression.js +2 -2
  240. package/node_modules/path-expression-matcher/src/ExpressionSet.js +24 -4
  241. package/package.json +1 -1
  242. package/preset-config.json +1 -1
  243. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/LICENSE +0 -201
  244. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/README.md +0 -62
  245. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-cjs/index.js +0 -157
  246. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/constants.js +0 -2
  247. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/fromEnvSigningName.js +0 -16
  248. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/fromSso.js +0 -81
  249. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/fromStatic.js +0 -8
  250. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/getNewSsoOidcToken.js +0 -11
  251. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/getSsoOidcClient.js +0 -10
  252. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/index.js +0 -4
  253. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/nodeProvider.js +0 -5
  254. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/validateTokenExpiry.js +0 -7
  255. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/validateTokenKey.js +0 -7
  256. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/writeSSOTokenToFile.js +0 -8
  257. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/package.json +0 -70
@@ -1,6 +1,6 @@
1
- require(`./paths-Bcdg3ma0.cjs`);const e=require(`./dispatch-B6UbZCpL.cjs`),t=require(`./paths-Cqca1YmF.cjs`),n=require(`./model-auth-TFUxaK0f.cjs`),r=require(`./logger-DPlqYkRm.cjs`);require(`./proxy-env-a590sPAz.cjs`),require(`./github-copilot-token-CCrgp2py.cjs`),require(`./send-EvcsiFBC.cjs`);const i=require(`./send-Bq6Mqs9G.cjs`),a=require(`./send-CJGLeSJ8.cjs`);require(`./deliver-BrfVwkYz.cjs`),require(`./diagnostic-D7A9cQYf.cjs`),require(`./pi-model-discovery-DGoPUzBj.cjs`);const o=require(`./audio-transcription-runner-CMsp7bhn.cjs`);require(`./image-BxafJgQ6.cjs`),require(`./fetch-guard-DB85MORy.cjs`),require(`./api-key-rotation-wFUVOOfM.cjs`);const s=require(`./local-roots-BmhNPIJm.cjs`);require(`./proxy-fetch-DPOhfrou.cjs`),require(`./tokens-g5KWvWhD.cjs`),require(`./commands-registry-5lStNoKW.cjs`),require(`./fetch-ClKErpni.cjs`);const c=require(`./ir-CveCWs8q.cjs`);require(`./render-DxBO2Blp.cjs`),require(`./target-errors-DeNJ10ks.cjs`);const l=require(`./channel-activity-CVOp-PL4.cjs`),u=require(`./tables-BtVUf77b.cjs`);require(`./send-DZ4szmEa.cjs`),require(`./fetch-BY6lVRlY.cjs`),require(`./skill-commands-B4wI8ETo.cjs`),require(`./outbound-attachment-B8-ZVX2i.cjs`),require(`./send-BAoqP09M.cjs`);const d=require(`./active-listener-BEcmvyxh.cjs`);require(`./query-expansion-DCeqywxh.cjs`),require(`./manager-CmAH_a7A.cjs`);const f=require(`./outbound-QhOJAEO8.cjs`),p=require(`./session-CHu3C2m0.cjs`),m=require(`./login-B5IwNcl4.cjs`);let h=require(`node:crypto`),g=require(`@whiskeysockets/baileys`);const _={initialMs:2e3,maxMs:3e4,factor:1.8,jitter:.25,maxAttempts:12};function v(e,t){let n=t??e.web?.heartbeatSeconds;return typeof n==`number`&&n>0?n:60}function y(e,t){let n=e.web?.reconnect??{},i=t??{},a={..._,...n,...i};return a.initialMs=Math.max(250,a.initialMs),a.maxMs=Math.max(a.initialMs,a.maxMs),a.factor=r.o(a.factor,1.1,10),a.jitter=r.o(a.jitter,0,1),a.maxAttempts=Math.max(0,Math.floor(a.maxAttempts)),a}function b(){return(0,h.randomUUID)()}const x=r.O(`gateway/channels/whatsapp`),S=x.child(`inbound`),C=x.child(`outbound`),ee=x.child(`heartbeat`);function w(){return setInterval(()=>{},1e6).unref(),new Promise(()=>{})}const T=e.R({ttlMs:20*6e4,maxSize:5e3});function E(e){return T.check(e)}const D=new Set([`FN`,`N`,`TEL`]);function O(e){if(!e)return{phones:[]};let t=e.split(/\r?\n/),n,r,i=[];for(let e of t){let t=e.trim();if(!t)continue;let a=t.indexOf(`:`);if(a===-1)continue;let o=t.slice(0,a).toUpperCase(),s=t.slice(a+1).trim();if(!s)continue;let c=k(o);if(!c||!D.has(c))continue;let l=A(s);if(l){if(c===`FN`&&!r){r=j(l);continue}if(c===`N`&&!n){n=j(l);continue}if(c===`TEL`){let e=M(l);e&&i.push(e)}}}return{name:r??n,phones:i}}function k(e){let[t]=e.split(`;`);if(!t)return;let n=t.split(`.`);return n[n.length-1]||void 0}function A(e){return e.replace(/\\n/gi,` `).replace(/\\,/g,`,`).replace(/\\;/g,`;`).trim()}function j(e){return e.replace(/;/g,` `).replace(/\s+/g,` `).trim()}function M(e){let t=e.trim();return t?t.toLowerCase().startsWith(`tel:`)?t.slice(4).trim():t:``}function N(e){return(0,g.normalizeMessageContent)(e)}function P(e){if(!e)return;let t=(0,g.getContentType)(e),n=t?e[t]:void 0,r=n&&typeof n==`object`&&`contextInfo`in n?n.contextInfo:void 0;if(r)return r;let i=e.extendedTextMessage?.contextInfo??e.imageMessage?.contextInfo??e.videoMessage?.contextInfo??e.documentMessage?.contextInfo??e.audioMessage?.contextInfo??e.stickerMessage?.contextInfo??e.buttonsResponseMessage?.contextInfo??e.listResponseMessage?.contextInfo??e.templateButtonReplyMessage?.contextInfo??e.interactiveResponseMessage?.contextInfo??e.buttonsMessage?.contextInfo??e.listMessage?.contextInfo;if(i)return i;for(let t of Object.values(e)){if(!t||typeof t!=`object`||!(`contextInfo`in t))continue;let e=t.contextInfo;if(e)return e}}function F(e){let t=N(e);if(!t)return;let n=[t.extendedTextMessage?.contextInfo?.mentionedJid,t.extendedTextMessage?.contextInfo?.quotedMessage?.extendedTextMessage?.contextInfo?.mentionedJid,t.imageMessage?.contextInfo?.mentionedJid,t.videoMessage?.contextInfo?.mentionedJid,t.documentMessage?.contextInfo?.mentionedJid,t.audioMessage?.contextInfo?.mentionedJid,t.stickerMessage?.contextInfo?.mentionedJid,t.buttonsResponseMessage?.contextInfo?.mentionedJid,t.listResponseMessage?.contextInfo?.mentionedJid].flatMap(e=>e??[]).filter(Boolean);if(n.length!==0)return Array.from(new Set(n))}function I(e){let t=N(e);if(!t)return;let n=(0,g.extractMessageContent)(t),r=[t,n&&n!==t?n:void 0];for(let e of r){if(!e)continue;if(typeof e.conversation==`string`&&e.conversation.trim())return e.conversation.trim();let t=e.extendedTextMessage?.text;if(t?.trim())return t.trim();let n=e.imageMessage?.caption??e.videoMessage?.caption??e.documentMessage?.caption;if(n?.trim())return n.trim()}let i=R(t)??(n&&n!==t?R(n):void 0);if(i)return i}function L(e){let t=N(e);if(t){if(t.imageMessage)return`<media:image>`;if(t.videoMessage)return`<media:video>`;if(t.audioMessage)return`<media:audio>`;if(t.documentMessage)return`<media:document>`;if(t.stickerMessage)return`<media:sticker>`}}function R(e){let t=N(e);if(!t)return;let n=t.contactMessage??void 0;if(n){let{name:e,phones:t}=z({displayName:n.displayName,vcard:n.vcard});return B(e,t)}let r=t.contactsArrayMessage?.contacts??void 0;if(!(!r||r.length===0))return V(r.map(e=>z({displayName:e.displayName,vcard:e.vcard})).map(e=>H(e.name,e.phones)).filter(e=>!!e),r.length)}function z(e){let t=(e.displayName??``).trim(),n=O(e.vcard??void 0);return{name:t||n.name,phones:n.phones}}function B(e,t){let n=H(e,t);return n?`<contact: ${n}>`:`<contact>`}function V(e,t){let n=e.map(e=>e.trim()).filter(Boolean);if(n.length===0)return`<contacts: ${t} ${t===1?`contact`:`contacts`}>`;let r=Math.max(t-n.length,0),i=r>0?` +${r} more`:``;return`<contacts: ${n.join(`, `)}${i}>`}function H(e,t){let n=[e,U(t)].filter(e=>!!e);if(n.length!==0)return n.join(`, `)}function U(e){let t=e?.map(e=>e.trim()).filter(Boolean)??[];if(t.length===0)return;let{shown:n,remaining:r}=te(t,t.length,1),[i]=n;if(i)return r===0?i:`${i} (+${r} more)`}function te(e,t,n){let r=e.slice(0,n);return{shown:r,remaining:Math.max(t-r.length,0)}}function ne(e){let t=N(e);if(!t)return null;let n=t.liveLocationMessage??void 0;if(n){let e=n.degreesLatitude,t=n.degreesLongitude;if(e!=null&&t!=null){let r=Number(e),i=Number(t);if(Number.isFinite(r)&&Number.isFinite(i))return{latitude:r,longitude:i,accuracy:n.accuracyInMeters??void 0,caption:n.caption??void 0,source:`live`,isLive:!0}}}let r=t.locationMessage??void 0;if(r){let e=r.degreesLatitude,t=r.degreesLongitude;if(e!=null&&t!=null){let n=Number(e),i=Number(t);if(Number.isFinite(n)&&Number.isFinite(i)){let e=!!r.isLive;return{latitude:n,longitude:i,accuracy:r.accuracyInMeters??void 0,name:r.name??void 0,address:r.address??void 0,caption:r.comment??void 0,source:e?`live`:r.name||r.address?`place`:`pin`,isLive:e}}}}return null}function W(e){let t=N(e);if(!t)return null;let n=P(t),i=(0,g.normalizeMessageContent)(n?.quotedMessage);if(!i)return null;let o=ne(i),s=o?a.J(o):void 0,c=[I(i),s].filter(Boolean).join(`
1
+ require(`./paths-Bcdg3ma0.cjs`);const e=require(`./dispatch-_fZDA253.cjs`),t=require(`./paths-Cqca1YmF.cjs`),n=require(`./model-auth-TFUxaK0f.cjs`),r=require(`./logger-DPlqYkRm.cjs`);require(`./proxy-env-a590sPAz.cjs`),require(`./github-copilot-token-CCrgp2py.cjs`),require(`./send-EvcsiFBC.cjs`);const i=require(`./send-Bq6Mqs9G.cjs`),a=require(`./send-CJGLeSJ8.cjs`);require(`./deliver-BrfVwkYz.cjs`),require(`./diagnostic-D7A9cQYf.cjs`),require(`./pi-model-discovery-DGoPUzBj.cjs`);const o=require(`./audio-transcription-runner-CMsp7bhn.cjs`);require(`./image-BxafJgQ6.cjs`),require(`./fetch-guard-DB85MORy.cjs`),require(`./api-key-rotation-wFUVOOfM.cjs`);const s=require(`./local-roots-BmhNPIJm.cjs`);require(`./proxy-fetch-DPOhfrou.cjs`),require(`./tokens-g5KWvWhD.cjs`),require(`./commands-registry-5lStNoKW.cjs`),require(`./fetch-ClKErpni.cjs`);const c=require(`./ir-CveCWs8q.cjs`);require(`./render-DxBO2Blp.cjs`),require(`./target-errors-DeNJ10ks.cjs`);const l=require(`./channel-activity-CVOp-PL4.cjs`),u=require(`./tables-BtVUf77b.cjs`);require(`./send-DZ4szmEa.cjs`),require(`./fetch-BY6lVRlY.cjs`),require(`./skill-commands-B4wI8ETo.cjs`),require(`./outbound-attachment-B8-ZVX2i.cjs`),require(`./send-BAoqP09M.cjs`);const d=require(`./active-listener-BEcmvyxh.cjs`);require(`./query-expansion-DCeqywxh.cjs`),require(`./manager-CmAH_a7A.cjs`);const f=require(`./outbound-QhOJAEO8.cjs`),p=require(`./session-CHu3C2m0.cjs`),m=require(`./login-B5IwNcl4.cjs`);let h=require(`node:crypto`),g=require(`@whiskeysockets/baileys`);const _={initialMs:2e3,maxMs:3e4,factor:1.8,jitter:.25,maxAttempts:12};function v(e,t){let n=t??e.web?.heartbeatSeconds;return typeof n==`number`&&n>0?n:60}function y(e,t){let n=e.web?.reconnect??{},i=t??{},a={..._,...n,...i};return a.initialMs=Math.max(250,a.initialMs),a.maxMs=Math.max(a.initialMs,a.maxMs),a.factor=r.o(a.factor,1.1,10),a.jitter=r.o(a.jitter,0,1),a.maxAttempts=Math.max(0,Math.floor(a.maxAttempts)),a}function b(){return(0,h.randomUUID)()}const x=r.O(`gateway/channels/whatsapp`),S=x.child(`inbound`),C=x.child(`outbound`),ee=x.child(`heartbeat`);function w(){return setInterval(()=>{},1e6).unref(),new Promise(()=>{})}const T=e.R({ttlMs:20*6e4,maxSize:5e3});function E(e){return T.check(e)}const D=new Set([`FN`,`N`,`TEL`]);function O(e){if(!e)return{phones:[]};let t=e.split(/\r?\n/),n,r,i=[];for(let e of t){let t=e.trim();if(!t)continue;let a=t.indexOf(`:`);if(a===-1)continue;let o=t.slice(0,a).toUpperCase(),s=t.slice(a+1).trim();if(!s)continue;let c=k(o);if(!c||!D.has(c))continue;let l=A(s);if(l){if(c===`FN`&&!r){r=j(l);continue}if(c===`N`&&!n){n=j(l);continue}if(c===`TEL`){let e=M(l);e&&i.push(e)}}}return{name:r??n,phones:i}}function k(e){let[t]=e.split(`;`);if(!t)return;let n=t.split(`.`);return n[n.length-1]||void 0}function A(e){return e.replace(/\\n/gi,` `).replace(/\\,/g,`,`).replace(/\\;/g,`;`).trim()}function j(e){return e.replace(/;/g,` `).replace(/\s+/g,` `).trim()}function M(e){let t=e.trim();return t?t.toLowerCase().startsWith(`tel:`)?t.slice(4).trim():t:``}function N(e){return(0,g.normalizeMessageContent)(e)}function P(e){if(!e)return;let t=(0,g.getContentType)(e),n=t?e[t]:void 0,r=n&&typeof n==`object`&&`contextInfo`in n?n.contextInfo:void 0;if(r)return r;let i=e.extendedTextMessage?.contextInfo??e.imageMessage?.contextInfo??e.videoMessage?.contextInfo??e.documentMessage?.contextInfo??e.audioMessage?.contextInfo??e.stickerMessage?.contextInfo??e.buttonsResponseMessage?.contextInfo??e.listResponseMessage?.contextInfo??e.templateButtonReplyMessage?.contextInfo??e.interactiveResponseMessage?.contextInfo??e.buttonsMessage?.contextInfo??e.listMessage?.contextInfo;if(i)return i;for(let t of Object.values(e)){if(!t||typeof t!=`object`||!(`contextInfo`in t))continue;let e=t.contextInfo;if(e)return e}}function F(e){let t=N(e);if(!t)return;let n=[t.extendedTextMessage?.contextInfo?.mentionedJid,t.extendedTextMessage?.contextInfo?.quotedMessage?.extendedTextMessage?.contextInfo?.mentionedJid,t.imageMessage?.contextInfo?.mentionedJid,t.videoMessage?.contextInfo?.mentionedJid,t.documentMessage?.contextInfo?.mentionedJid,t.audioMessage?.contextInfo?.mentionedJid,t.stickerMessage?.contextInfo?.mentionedJid,t.buttonsResponseMessage?.contextInfo?.mentionedJid,t.listResponseMessage?.contextInfo?.mentionedJid].flatMap(e=>e??[]).filter(Boolean);if(n.length!==0)return Array.from(new Set(n))}function I(e){let t=N(e);if(!t)return;let n=(0,g.extractMessageContent)(t),r=[t,n&&n!==t?n:void 0];for(let e of r){if(!e)continue;if(typeof e.conversation==`string`&&e.conversation.trim())return e.conversation.trim();let t=e.extendedTextMessage?.text;if(t?.trim())return t.trim();let n=e.imageMessage?.caption??e.videoMessage?.caption??e.documentMessage?.caption;if(n?.trim())return n.trim()}let i=R(t)??(n&&n!==t?R(n):void 0);if(i)return i}function L(e){let t=N(e);if(t){if(t.imageMessage)return`<media:image>`;if(t.videoMessage)return`<media:video>`;if(t.audioMessage)return`<media:audio>`;if(t.documentMessage)return`<media:document>`;if(t.stickerMessage)return`<media:sticker>`}}function R(e){let t=N(e);if(!t)return;let n=t.contactMessage??void 0;if(n){let{name:e,phones:t}=z({displayName:n.displayName,vcard:n.vcard});return B(e,t)}let r=t.contactsArrayMessage?.contacts??void 0;if(!(!r||r.length===0))return V(r.map(e=>z({displayName:e.displayName,vcard:e.vcard})).map(e=>H(e.name,e.phones)).filter(e=>!!e),r.length)}function z(e){let t=(e.displayName??``).trim(),n=O(e.vcard??void 0);return{name:t||n.name,phones:n.phones}}function B(e,t){let n=H(e,t);return n?`<contact: ${n}>`:`<contact>`}function V(e,t){let n=e.map(e=>e.trim()).filter(Boolean);if(n.length===0)return`<contacts: ${t} ${t===1?`contact`:`contacts`}>`;let r=Math.max(t-n.length,0),i=r>0?` +${r} more`:``;return`<contacts: ${n.join(`, `)}${i}>`}function H(e,t){let n=[e,U(t)].filter(e=>!!e);if(n.length!==0)return n.join(`, `)}function U(e){let t=e?.map(e=>e.trim()).filter(Boolean)??[];if(t.length===0)return;let{shown:n,remaining:r}=te(t,t.length,1),[i]=n;if(i)return r===0?i:`${i} (+${r} more)`}function te(e,t,n){let r=e.slice(0,n);return{shown:r,remaining:Math.max(t-r.length,0)}}function ne(e){let t=N(e);if(!t)return null;let n=t.liveLocationMessage??void 0;if(n){let e=n.degreesLatitude,t=n.degreesLongitude;if(e!=null&&t!=null){let r=Number(e),i=Number(t);if(Number.isFinite(r)&&Number.isFinite(i))return{latitude:r,longitude:i,accuracy:n.accuracyInMeters??void 0,caption:n.caption??void 0,source:`live`,isLive:!0}}}let r=t.locationMessage??void 0;if(r){let e=r.degreesLatitude,t=r.degreesLongitude;if(e!=null&&t!=null){let n=Number(e),i=Number(t);if(Number.isFinite(n)&&Number.isFinite(i)){let e=!!r.isLive;return{latitude:n,longitude:i,accuracy:r.accuracyInMeters??void 0,name:r.name??void 0,address:r.address??void 0,caption:r.comment??void 0,source:e?`live`:r.name||r.address?`place`:`pin`,isLive:e}}}}return null}function W(e){let t=N(e);if(!t)return null;let n=P(t),i=(0,g.normalizeMessageContent)(n?.quotedMessage);if(!i)return null;let o=ne(i),s=o?a.J(o):void 0,c=[I(i),s].filter(Boolean).join(`
2
2
  `).trim();if(c||=L(i),!c){let e=i?(0,g.getContentType)(i):void 0;return r.R(`Quoted message missing extractable body${e?` (type ${e})`:``}`),null}let l=n?.participant??void 0,u=l?r.m(l)??l:void 0,d=u??`unknown sender`;return{id:n?.stanzaId?String(n.stanzaId):void 0,body:c,sender:d,senderJid:l,senderE164:u}}function re(e){return i.Mt({providerConfigPresent:e.providerConfigPresent,groupPolicy:e.groupPolicy,defaultGroupPolicy:e.defaultGroupPolicy})}async function ie(t){let o=n.wa(),s=n.Un({cfg:o,accountId:t.accountId}),c=s.dmPolicy??`pairing`,l=s.allowFrom??[],u=await e.H({provider:`whatsapp`,accountId:s.accountId,dmPolicy:c}),d=l.length===0&&t.selfE164?[t.selfE164]:[],f=l.length>0?l:d,p=s.groupAllowFrom??(l.length>0?l:void 0),m=t.from===t.selfE164,h=s.selfChatMode??r.p(t.selfE164,l),g=typeof t.pairingGraceMs==`number`&&t.pairingGraceMs>0?t.pairingGraceMs:3e4,_=typeof t.connectedAtMs==`number`&&typeof t.messageTimestampMs==`number`&&t.messageTimestampMs<t.connectedAtMs-g,v=i.jt(o),{groupPolicy:y,providerMissingFallbackApplied:b}=re({providerConfigPresent:o.channels?.whatsapp!==void 0,groupPolicy:s.groupPolicy,defaultGroupPolicy:v});i.Nt({providerMissingFallbackApplied:b,providerKey:`whatsapp`,accountId:s.accountId,log:e=>r.R(e)});let x=r.h(t.from),S=typeof t.senderE164==`string`?r.h(t.senderE164):null,C=e.W({isGroup:t.group,dmPolicy:c,groupPolicy:y,allowFrom:t.group?l:f,groupAllowFrom:p,storeAllowFrom:u,isSenderAllowed:e=>{if(e.includes(`*`))return!0;let n=new Set(e.map(e=>r.h(String(e))).filter(e=>!!e));return!t.group&&m?!0:t.group?!!(S&&n.has(S)):n.has(x)}});if(t.group&&C.decision!==`allow`)return C.reason===`groupPolicy=disabled`?r.R(`Blocked group message (groupPolicy: disabled)`):C.reason===`groupPolicy=allowlist (empty allowlist)`?r.R(`Blocked group message (groupPolicy: allowlist, no groupAllowFrom)`):r.R(`Blocked group message from ${t.senderE164??`unknown sender`} (groupPolicy: allowlist)`),{allowed:!1,shouldMarkRead:!1,isSelfChat:h,resolvedAccountId:s.accountId};if(!t.group){if(t.isFromMe&&!m)return r.R(`Skipping outbound DM (fromMe); no pairing reply needed.`),{allowed:!1,shouldMarkRead:!1,isSelfChat:h,resolvedAccountId:s.accountId};if(C.decision===`block`&&C.reason===`dmPolicy=disabled`)return r.R(`Blocked dm (dmPolicy: disabled)`),{allowed:!1,shouldMarkRead:!1,isSelfChat:h,resolvedAccountId:s.accountId};if(C.decision===`pairing`&&!m){let n=t.from;return _?r.R(`Skipping pairing reply for historical DM from ${n}.`):await e.B({channel:`whatsapp`,senderId:n,senderIdLine:`Your WhatsApp phone number: ${n}`,meta:{name:(t.pushName??``).trim()||void 0},upsertPairingRequest:async({id:e,meta:t})=>await a.tt({channel:`whatsapp`,id:e,accountId:s.accountId,meta:t}),onCreated:()=>{r.R(`whatsapp pairing request sender=${n} name=${t.pushName??`unknown`}`)},sendPairingReply:async e=>{await t.sock.sendMessage(t.remoteJid,{text:e})},onReplyError:e=>{r.R(`whatsapp pairing reply failed for ${n}: ${String(e)}`)}}),{allowed:!1,shouldMarkRead:!1,isSelfChat:h,resolvedAccountId:s.accountId}}if(C.decision!==`allow`)return r.R(`Blocked unauthorized sender ${t.from} (dmPolicy=${c})`),{allowed:!1,shouldMarkRead:!1,isSelfChat:h,resolvedAccountId:s.accountId}}return{allowed:!0,shouldMarkRead:!0,isSelfChat:h,resolvedAccountId:s.accountId}}function G(e){return(0,g.normalizeMessageContent)(e)}function K(e){let t=e.imageMessage?.mimetype??e.videoMessage?.mimetype??e.documentMessage?.mimetype??e.audioMessage?.mimetype??e.stickerMessage?.mimetype??void 0;if(t)return t;if(e.audioMessage)return`audio/ogg; codecs=opus`;if(e.imageMessage)return`image/jpeg`;if(e.videoMessage)return`video/mp4`;if(e.stickerMessage)return`image/webp`}async function ae(e,t){let n=G(e.message);if(!n)return;let i=K(n),a=n.documentMessage?.fileName??void 0;if(!(!n.imageMessage&&!n.videoMessage&&!n.documentMessage&&!n.audioMessage&&!n.stickerMessage))try{return{buffer:await(0,g.downloadMediaMessage)(e,`buffer`,{},{reuploadRequest:t.updateMediaMessage,logger:t.logger}),mimetype:i,fileName:a}}catch(e){r.R(`downloadMediaMessage failed: ${String(e)}`);return}}function q(e){l.n({channel:`whatsapp`,accountId:e,direction:`outbound`})}function J(e){return typeof e==`object`&&e&&`key`in e?String(e.key?.id??`unknown`):`unknown`}function Y(e){return{sendMessage:async(t,n,i,a,o)=>{let s=r.T(t),c;if(i&&a)if(a.startsWith(`image/`))c={image:i,caption:n||void 0,mimetype:a};else if(a.startsWith(`audio/`))c={audio:i,ptt:!0,mimetype:a};else if(a.startsWith(`video/`)){let e=o?.gifPlayback;c={video:i,caption:n||void 0,mimetype:a,...e?{gifPlayback:!0}:{}}}else c={document:i,fileName:o?.fileName?.trim()||`file`,caption:n||void 0,mimetype:a};else c={text:n};let l=await e.sock.sendMessage(s,c);return q(o?.accountId??e.defaultAccountId),{messageId:J(l)}},sendPoll:async(t,n)=>{let i=r.T(t),a=await e.sock.sendMessage(i,{poll:{name:n.question,values:n.options,selectableCount:n.maxSelections??1}});return q(e.defaultAccountId),{messageId:J(a)}},sendReaction:async(t,n,i,a,o)=>{let s=r.T(t);await e.sock.sendMessage(s,{react:{text:i,key:{remoteJid:s,id:n,fromMe:a,participant:o?r.T(o):void 0}}})},sendComposingTo:async t=>{let n=r.T(t);await e.sock.sendPresenceUpdate(`composing`,n)}}}async function oe(t){let i=r.K({module:`web-inbound`}),o=r.O(`gateway/channels/whatsapp`).child(`inbound`),s=await p.t(!1,t.verbose,{authDir:t.authDir});await p.i(s);let c=Date.now(),u=null,d=new Promise(e=>{u=e}),f=e=>{if(!u)return;let t=u;u=null,t(e)};try{await s.sendPresenceUpdate(`available`),r.B()&&r.R(`Sent global 'available' presence on connect`)}catch(e){r.R(`Failed to send 'available' presence on connect: ${String(e)}`)}let m=s.user?.id,h=m?r.m(m):null,_=e.C({debounceMs:t.debounceMs??0,buildKey:e=>{let t=e.chatType===`group`?e.senderJid??e.senderE164??e.senderName??e.from:e.from;if(!t)return null;let n=e.chatType===`group`?e.chatId:e.from;return`${e.accountId}:${n}:${t}`},shouldDebounce:t.shouldDebounce,onFlush:async e=>{let n=e.at(-1);if(!n)return;if(e.length===1){await t.onMessage(n);return}let r=new Set;for(let t of e)for(let e of t.mentionedJids??[])r.add(e);let i=e.map(e=>e.body).filter(Boolean).join(`
3
3
  `),a={...n,body:i,mentionedJids:r.size>0?Array.from(r):void 0};await t.onMessage(a)},onError:e=>{i.error({error:String(e)},`failed handling inbound web message`),o.error(`Failed handling inbound web message: ${String(e)}`)}}),v=new Map,y=300*1e3,b=s.signalRepository?.lidMapping,x=async e=>r.v(e,{authDir:t.authDir,lidLookup:b}),S=async e=>{let t=v.get(e);if(t&&t.expires>Date.now())return t;try{let t=await s.groupMetadata(e),n=(await Promise.all(t.participants?.map(async e=>await x(e.id)??e.id)??[])).filter(Boolean)??[],r={subject:t.subject,participants:n,expires:Date.now()+y};return v.set(e,r),r}catch(t){return r.R(`Failed to fetch group metadata for ${e}: ${String(t)}`),{expires:Date.now()+y}}},C=async e=>{let n=e.key?.id??void 0,r=e.key?.remoteJid;if(!r||r.endsWith(`@status`)||r.endsWith(`@broadcast`))return null;let i=(0,g.isJidGroup)(r)===!0;if(n&&E(`${t.accountId}:${r}:${n}`))return null;let a=e.key?.participant??void 0,o=i?r:await x(r);if(!o)return null;let l=i?a?await x(a):null:o,u,d;if(i){let e=await S(r);u=e.subject,d=e.participants}let f=e.messageTimestamp?Number(e.messageTimestamp)*1e3:void 0,p=await ie({accountId:t.accountId,from:o,selfE164:h,senderE164:l,group:i,pushName:e.pushName??void 0,isFromMe:!!e.key?.fromMe,messageTimestampMs:f,connectedAtMs:c,sock:{sendMessage:(e,t)=>s.sendMessage(e,t)},remoteJid:r});return p.allowed?{id:n,remoteJid:r,group:i,participantJid:a,from:o,senderE164:l,groupSubject:u,groupParticipants:d,messageTimestampMs:f,access:p}:null},ee=async e=>{let{id:n,remoteJid:i,participantJid:a,access:o}=e;if(n&&!o.isSelfChat&&t.sendReadReceipts!==!1)try{await s.readMessages([{remoteJid:i,id:n,participant:a,fromMe:!1}]),r.B()&&r.R(`Marked message ${n} as read for ${i}${a?` (participant ${a})`:``}`)}catch(e){r.R(`Failed to mark message ${n} read: ${String(e)}`)}else n&&o.isSelfChat&&r.B()&&r.R(`Self-chat mode: skipping read receipt for ${n}`)},w=async e=>{let i=ne(e.message??void 0),o=i?a.J(i):void 0,c=I(e.message??void 0);if(o&&(c=[c,o].filter(Boolean).join(`
4
4
  `).trim()),!c&&(c=L(e.message??void 0),!c))return null;let l=W(e.message),u,d,f;try{let r=await ae(e,s);if(r){let e=(typeof t.mediaMaxMb==`number`&&t.mediaMaxMb>0?t.mediaMaxMb:50)*1024*1024;u=(await n.ai(r.buffer,r.mimetype,`inbound`,e,r.fileName)).path,d=r.mimetype,f=r.fileName}}catch(e){r.R(`Inbound media download failed: ${String(e)}`)}return{body:c,location:i??void 0,replyContext:l,mediaPath:u,mediaType:d,mediaFileName:f}},T=async(e,t,n)=>{let a=t.remoteJid,c=async()=>{try{await s.sendPresenceUpdate(`composing`,a)}catch(e){r.R(`Presence update failed: ${String(e)}`)}},l=async e=>{await s.sendMessage(a,{text:e})},u=async e=>{await s.sendMessage(a,e)},d=t.messageTimestampMs,f=F(e.message),p=e.pushName??void 0;i.info({from:t.from,to:h??`me`,body:n.body,mediaPath:n.mediaPath,mediaType:n.mediaType,mediaFileName:n.mediaFileName,timestamp:d},`inbound message`);let g={id:t.id,from:t.from,conversationId:t.from,to:h??`me`,accountId:t.access.resolvedAccountId,body:n.body,pushName:p,timestamp:d,chatType:t.group?`group`:`direct`,chatId:t.remoteJid,senderJid:t.participantJid,senderE164:t.senderE164??void 0,senderName:p,replyToId:n.replyContext?.id,replyToBody:n.replyContext?.body,replyToSender:n.replyContext?.sender,replyToSenderJid:n.replyContext?.senderJid,replyToSenderE164:n.replyContext?.senderE164,groupSubject:t.groupSubject,groupParticipants:t.groupParticipants,mentionedJids:f??void 0,selfJid:m,selfE164:h,fromMe:!!e.key?.fromMe,location:n.location??void 0,sendComposing:c,reply:l,sendMedia:u,mediaPath:n.mediaPath,mediaType:n.mediaType,mediaFileName:n.mediaFileName};try{Promise.resolve(_.enqueue(g)).catch(e=>{i.error({error:String(e)},`failed handling inbound web message`),o.error(`Failed handling inbound web message: ${String(e)}`)})}catch(e){i.error({error:String(e)},`failed handling inbound web message`),o.error(`Failed handling inbound web message: ${String(e)}`)}},D=async e=>{if(!(e.type!==`notify`&&e.type!==`append`))for(let n of e.messages??[]){l.n({channel:`whatsapp`,accountId:t.accountId,direction:`inbound`});let r=await C(n);if(!r||(await ee(r),e.type===`append`))continue;let i=await w(n);i&&await T(n,r,i)}};s.ev.on(`messages.upsert`,D);let O=e=>{try{if(e.connection===`close`){let t=p.r(e.lastDisconnect?.error);f({status:t,isLoggedOut:t===g.DisconnectReason.loggedOut,error:e.lastDisconnect?.error})}}catch(e){i.error({error:String(e)},`connection.update handler error`),f({status:void 0,isLoggedOut:!1,error:e})}};return s.ev.on(`connection.update`,O),{close:async()=>{try{let e=s.ev,t=D,n=O;typeof e.off==`function`?(e.off(`messages.upsert`,t),e.off(`connection.update`,n)):typeof e.removeListener==`function`&&(e.removeListener(`messages.upsert`,t),e.removeListener(`connection.update`,n)),s.ws?.close()}catch(e){r.R(`Socket close failed: ${String(e)}`)}},onClose:d,signalClose:e=>{f(e??{status:void 0,isLoggedOut:!1,error:`closed`})},...Y({sock:{sendMessage:(e,t)=>s.sendMessage(e,t),sendPresenceUpdate:(e,t)=>s.sendPresenceUpdate(e,t)},defaultAccountId:t.accountId})}}function X(t,n){return{mentionRegexes:e.O(t,n),allowFrom:t.channels?.whatsapp?.allowFrom}}function Z(e,t){let n=t?{authDir:t}:void 0;return{normalizedMentions:e.mentionedJids?.length?e.mentionedJids.map(e=>r.m(e,n)??e).filter(Boolean):[],selfE164:e.selfE164??(e.selfJid?r.m(e.selfJid,n):null),selfJid:e.selfJid?e.selfJid.replace(/:\\d+/,``):null}}function Q(t,n,i){let a=t=>e.k(t),o=r.p(i.selfE164,n.allowFrom);if((t.mentionedJids?.length??0)>0&&!o)return!!(i.selfE164&&i.normalizedMentions.includes(i.selfE164)||i.selfJid&&i.normalizedMentions.includes(i.selfJid));let s=a(t.body);if(n.mentionRegexes.some(e=>e.test(s)))return!0;if(i.selfE164){let e=i.selfE164.replace(/\D/g,``);if(e){if(s.replace(/[^\d]/g,``).includes(e))return!0;let n=t.body.replace(/[\s-]/g,``);if(RegExp(`\\+?${e}`,`i`).test(n))return!0}}return!1}function se(t,n,r){let i=Z(t,r);return{wasMentioned:Q(t,n,i),details:{from:t.from,body:t.body,bodyClean:e.k(t.body),mentionedJids:t.mentionedJids??null,normalizedMentionedJids:i.normalizedMentions.length?i.normalizedMentions:null,selfJid:t.selfJid??null,selfJidBare:i.selfJid,selfE164:t.selfE164??null,resolvedSelfE164:i.selfE164}}}function ce(e,t){let n=e.allowFrom;return(Array.isArray(n)&&n.length>0?n:t?[t]:[]).filter(e=>!!(e&&e!==`*`)).map(e=>r.h(e)).filter(e=>!!e)}function le(e){let t=new Set,n=Math.max(1,e.maxItems??100),r=e=>`combined:${e.sessionKey}:${e.combinedBody}`,i=()=>{for(;t.size>n;){let e=t.values().next().value;if(!e)break;t.delete(e)}};return{rememberText:(n,a)=>{n&&(t.add(n),a.combinedBody&&a.combinedBodySessionKey&&t.add(r({sessionKey:a.combinedBodySessionKey,combinedBody:a.combinedBody})),a.logVerboseMessage&&e.logVerbose?.(`Added to echo detection set (size now: ${t.size}): ${n.substring(0,50)}...`),i())},has:e=>t.has(e),forget:e=>{t.delete(e)},buildCombinedKey:r}}function ue(n){let r=e.m({agentId:n.agentId,channel:`whatsapp`,accountId:n.route.accountId,peer:{kind:n.msg.chatType===`group`?`group`:`direct`,id:n.peerId},dmScope:n.cfg.session?.dmScope,identityLinks:n.cfg.session?.identityLinks}),i=t.Dt({agentId:n.agentId,mainKey:t.Et});return{sessionKey:r,mainSessionKey:i,lastRoutePolicy:e.h({sessionKey:r,mainSessionKey:i})}}async function de(e){let n=e.cfg.broadcast?.[e.peerId];if(!n||!Array.isArray(n)||n.length===0)return!1;let r=e.cfg.broadcast?.strategy||`parallel`;S.info(`Broadcasting message to ${n.length} agents (${r})`);let i=e.cfg.agents?.list?.map(e=>t.Mt(e.id)),a=(i?.length??0)>0,o=e.msg.chatType===`group`?e.groupHistories.get(e.groupHistoryKey)??[]:void 0,s=async n=>{let r=t.Mt(n);if(a&&!i?.includes(r))return S.warn(`Broadcast agent ${n} not found in agents.list; skipping`),!1;let s=ue({cfg:e.cfg,msg:e.msg,route:e.route,peerId:e.peerId,agentId:r}),c={...e.route,agentId:r,...s};try{return await e.processMessage(e.msg,c,e.groupHistoryKey,{groupHistory:o,suppressGroupHistoryClear:!0})}catch(e){return S.error(`Broadcast agent ${n} failed: ${p.n(e)}`),!1}};if(r===`sequential`)for(let e of n)await s(e);else await Promise.allSettled(n.map(s));return e.msg.chatType===`group`&&e.groupHistories.set(e.groupHistoryKey,[]),!0}function fe(e,t,n){let r=e;for(let e of t)r=r.replace(e,` `);if(n){let e=n.replace(/\D/g,``);if(e){let t=RegExp(`\\+?${e}`,`g`);r=r.replace(t,` `)}}return r.replace(/\s+/g,` `).trim()}function pe(e,t){let r=n.br({From:t,ChatType:`group`,Provider:`whatsapp`})?.id,i=e.channels?.whatsapp,a=!!(i?.groupAllowFrom?.length||i?.allowFrom?.length);return n.mr({cfg:e,channel:`whatsapp`,groupId:r??t,hasGroupAllowFrom:a})}function me(e,t){let r=n.br({From:t,ChatType:`group`,Provider:`whatsapp`})?.id;return n.hr({cfg:e,channel:`whatsapp`,groupId:r??t})}function he(r){let i=n.kt(t.s(r.cfg.session?.store,{agentId:r.agentId}))[r.sessionKey],a=me(r.cfg,r.conversationId)?`mention`:`always`;return e.i(i?.groupActivation)??a}function ge(e,t,n){for(let i of e){let e=r.h(i)??i;!e||t.has(e)||(t.add(e),n.push(e))}}function _e(e,t,n,i){if(!n||!i)return;let a=r.h(n)??n;if(!a)return;let o=e.get(t);o||(o=new Map,e.set(t,o)),o.set(a,i)}function ve(e){let{participants:t,roster:n,fallbackE164:i}=e,a=new Set,o=[];if(t?.length&&ge(t,a,o),n&&ge(n.keys(),a,o),o.length===0&&i){let e=r.h(i)??i;e&&o.push(e)}if(o.length!==0)return o.map(e=>{let t=n?.get(e);return t?`${t} (${e})`:e}).join(`, `)}function ye(e,t){let n=r.h(t.senderE164??``);return n?ce(e,t.selfE164??void 0).includes(n):!1}function be(t){let n=t.msg.senderName&&t.msg.senderE164?`${t.msg.senderName} (${t.msg.senderE164})`:t.msg.senderName??t.msg.senderE164??`Unknown`;e.p({historyMap:t.groupHistories,historyKey:t.groupHistoryKey,limit:t.groupHistoryLimit,entry:{sender:n,body:t.msg.body,timestamp:t.msg.timestamp,id:t.msg.id,senderJid:t.msg.senderJid}})}function xe(e,t){return e.logVerbose(t),be({msg:e.msg,groupHistories:e.groupHistories,groupHistoryKey:e.groupHistoryKey,groupHistoryLimit:e.groupHistoryLimit}),{shouldProcess:!1}}function Se(t){let n=pe(t.cfg,t.conversationId);if(n.allowlistEnabled&&!n.allowed)return t.logVerbose(`Skipping group message ${t.conversationId} (not in allowlist)`),{shouldProcess:!1};_e(t.groupMemberNames,t.groupHistoryKey,t.msg.senderE164,t.msg.senderName);let i=X(t.cfg,t.agentId),a=fe(t.msg.body,i.mentionRegexes,t.msg.selfE164),o=e.a(a),s=ye(t.baseMentionConfig,t.msg),c=s&&e.E(a,t.cfg);if(o.hasCommand&&!s)return xe(t,`Ignoring /activation from non-owner in group ${t.conversationId}`);let l=se(t.msg,i,t.authDir);t.replyLogger.debug({conversationId:t.conversationId,wasMentioned:l.wasMentioned,...l.details},`group mention debug`);let u=l.wasMentioned,d=he({cfg:t.cfg,agentId:t.agentId,sessionKey:t.sessionKey,conversationId:t.conversationId})!==`always`,f=t.msg.selfJid?.replace(/:\\d+/,``),p=t.msg.replyToSenderJid?.replace(/:\\d+/,``),m=t.msg.selfE164?r.h(t.msg.selfE164):null,h=t.msg.replyToSenderE164?r.h(t.msg.replyToSenderE164):null,g=e.d({requireMention:d,canDetectMention:!0,wasMentioned:u,implicitMention:!!(f&&p&&f===p||m&&h&&m===h),shouldBypassMention:c});return t.msg.wasMentioned=g.effectiveWasMentioned,!c&&d&&g.shouldSkip?xe(t,`Group message stored for context (no mention detected) in ${t.conversationId}: ${t.msg.body}`):{shouldProcess:!0}}function Ce(e,t){e.add(t),t.finally(()=>{e.delete(t)})}function we(e){let r=t.s(e.cfg.session?.store,{agentId:e.storeAgentId}),i=n.Nt({storePath:r,sessionKey:e.sessionKey,deliveryContext:{channel:e.channel,to:e.to,accountId:e.accountId},ctx:e.ctx}).catch(t=>{e.warn({error:p.n(t),storePath:r,sessionKey:e.sessionKey,to:e.to},`failed updating last route`)});Ce(e.backgroundTasks,i)}function Te(e){return e.chatType===`group`?e.conversationId??e.from:e.senderE164?r.h(e.senderE164)??e.senderE164:e.from.includes(`@`)?r.m(e.from)??e.from:r.h(e.from)??e.from}function $(e,t=400){return!e||e.length<=t?e:`${e.slice(0,t)}… (truncated ${e.length-t} chars)`}function Ee(e){let t=(e instanceof Error?`${e.message}\n${e.stack??``}`:(e=>{if(e==null)return``;if(typeof e==`string`)return e;if(e instanceof Error)return`${e.message}\n${e.stack??``}`;if(typeof e==`object`)try{return JSON.stringify(e)}catch{return Object.prototype.toString.call(e)}return typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`?String(e):typeof e==`symbol`?e.description??e.toString():typeof e==`function`?e.name?`[function ${e.name}]`:`[function]`:Object.prototype.toString.call(e)})(e)).toLowerCase();return t.includes(`unsupported state or unable to authenticate data`)||t.includes(`bad mac`)?t.includes(`@whiskeysockets/baileys`)||t.includes(`baileys`)||t.includes(`noise-handler`)||t.includes(`aesdecryptgcm`):!1}function De(e){if(e.isReasoning===!0)return!0;let t=e.text;return typeof t==`string`?t.trimStart().toLowerCase().startsWith(`reasoning:`):!1}async function Oe(e){let{replyResult:t,msg:n,maxMediaBytes:i,textLimit:a,replyLogger:o,connectionId:s,skipLog:l}=e,d=Date.now();if(De(t)){C.debug(`Suppressed reasoning payload to ${n.from}`);return}let m=e.tableMode??`code`,h=e.chunkMode??`length`,g=c.d(f.i(u.t(t.text||``,m)),a,h),_=t.mediaUrls?.length?t.mediaUrls:t.mediaUrl?[t.mediaUrl]:[],v=async(e,t,i=3)=>{let a;for(let o=1;o<=i;o++)try{return await e()}catch(e){a=e;let s=p.n(e),c=o===i;if(!/closed|reset|timed\s*out|disconnect/i.test(s)||c)throw e;let l=500*o;r.R(`Retrying ${t} to ${n.from} after failure (${o}/${i-1}) in ${l}ms: ${s}`),await r.C(l)}throw a};if(_.length===0&&g.length){let e=g.length;for(let[t,r]of g.entries()){let i=Date.now();if(await v(()=>n.reply(r),`text`),!l){let r=Date.now()-i;C.debug(`Sent chunk ${t+1}/${e} to ${n.from} (${r.toFixed(0)}ms)`)}}o.info({correlationId:n.id??b(),connectionId:s??null,to:n.from,from:n.to,text:$(t.text,240),mediaUrl:null,mediaSizeBytes:null,mediaKind:null,durationMs:Date.now()-d},`auto-reply sent (text)`);return}let y=[...g];for(let[t,a]of _.entries()){let l=t===0&&y.shift()||void 0;try{let t=await c.a(a,{maxBytes:i,localRoots:e.mediaLocalRoots});if(r.B()&&(r.R(`Web auto-reply media size: ${(t.buffer.length/(1024*1024)).toFixed(2)}MB`),r.R(`Web auto-reply media source: ${a} (kind ${t.kind})`)),t.kind===`image`)await v(()=>n.sendMedia({image:t.buffer,caption:l,mimetype:t.contentType}),`media:image`);else if(t.kind===`audio`)await v(()=>n.sendMedia({audio:t.buffer,ptt:!0,mimetype:t.contentType,caption:l}),`media:audio`);else if(t.kind===`video`)await v(()=>n.sendMedia({video:t.buffer,caption:l,mimetype:t.contentType}),`media:video`);else{let e=t.fileName??a.split(`/`).pop()??`file`,r=t.contentType??`application/octet-stream`;await v(()=>n.sendMedia({document:t.buffer,fileName:e,caption:l,mimetype:r}),`media:document`)}C.info(`Sent media reply to ${n.from} (${(t.buffer.length/(1024*1024)).toFixed(2)}MB)`),o.info({correlationId:n.id??b(),connectionId:s??null,to:n.from,from:n.to,text:l??null,mediaUrl:a,mediaSizeBytes:t.buffer.length,mediaKind:t.kind,durationMs:Date.now()-d},`auto-reply sent (media)`)}catch(e){if(C.error(`Failed sending web media to ${n.from}: ${p.n(e)}`),o.warn({err:e,mediaUrl:a},`failed to send web media reply`),t===0){let t=e instanceof Error?`⚠️ Media failed: ${e.message}`:`⚠️ Media failed.`,r=[y.shift()??l??``,t].filter(Boolean).join(`
5
5
  `);r&&(C.warn(`Media skipped; sent text-only to ${n.from}`),await n.reply(r))}}}for(let e of y)await n.reply(e)}function ke(t){if(!t.msg.id)return;let n=t.cfg.channels?.whatsapp?.ackReaction,i=(n?.emoji??``).trim(),a=n?.direct??!0,o=n?.group??`mentions`,s=t.msg.conversationId??t.msg.from,c=t.msg.chatType===`group`?he({cfg:t.cfg,agentId:t.agentId,sessionKey:t.sessionKey,conversationId:s}):null;e.b({emoji:i,isDirect:t.msg.chatType===`direct`,isGroup:t.msg.chatType===`group`,directEnabled:a,groupMode:o,wasMentioned:t.msg.wasMentioned===!0,groupActivated:c===`always`})&&(t.info({chatId:t.msg.chatId,messageId:t.msg.id,emoji:i},`sending ack reaction`),f.r(t.msg.chatId,t.msg.id,i,{verbose:t.verbose,fromMe:!1,participant:t.msg.senderJid,accountId:t.accountId}).catch(e=>{t.warn({error:p.n(e),chatId:t.msg.chatId,messageId:t.msg.id},`failed to send ack reaction`),r.R(`WhatsApp ack reaction failed for chat ${t.msg.chatId}: ${p.n(e)}`)}))}function Ae(e){return e.replyToBody?`[Replying to ${e.replyToSender??`unknown sender`}${e.replyToId?` id:${e.replyToId}`:``}]\n${e.replyToBody}\n[/Replying]`:null}function je(t){let{cfg:n,msg:r,agentId:i,previousTimestamp:a,envelope:o}=t,s=e.X(n,i,{configured:n.channels?.whatsapp?.messagePrefix,hasAllowFrom:(n.channels?.whatsapp?.allowFrom?.length??0)>0}),c=s?`${s} `:``,l=Ae(r),u=`${c}${r.body}${l?`\n\n${l}`:``}`;return e.T({channel:`WhatsApp`,from:r.chatType===`group`?r.from:r.from?.replace(/^whatsapp:/,``),timestamp:r.timestamp,body:u,chatType:r.chatType,sender:{name:r.senderName,e164:r.senderE164,id:r.senderJid},previousTimestamp:a,envelope:o,fromMe:r.fromMe})}async function Me(t){let i=t.cfg.commands?.useAccessGroups!==!1;if(!i)return!0;let a=t.msg.chatType===`group`,o=r.h(a?t.msg.senderE164??``:t.msg.senderE164??t.msg.from??``);if(!o)return!1;let s=n.Un({cfg:t.cfg,accountId:t.msg.accountId}),c=s.dmPolicy??`pairing`,l=s.groupPolicy??`allowlist`,u=s.allowFrom??[],d=s.groupAllowFrom??(u.length>0?u:void 0),f=a?[]:await e.H({provider:`whatsapp`,accountId:t.msg.accountId,dmPolicy:c});return e.U({isGroup:a,dmPolicy:c,groupPolicy:l,allowFrom:u.length>0?u:t.msg.selfE164?[t.msg.selfE164]:[],groupAllowFrom:d,storeAllowFrom:f,isSenderAllowed:e=>e.includes(`*`)?!0:e.map(e=>r.h(String(e))).filter(e=>!!e).includes(o),command:{useAccessGroups:i,allowTextCommands:!0,hasControlCommand:!0}}).commandAuthorized}function Ne(t){let i=n.Un({cfg:t.cfg,accountId:t.msg.accountId});return e.K({dmScope:t.cfg.session?.dmScope,allowFrom:i.allowFrom,normalizeEntry:e=>r.h(e)})}async function Pe(t){let i=t.msg.conversationId??t.msg.from,{storePath:o,envelopeOptions:l,previousTimestamp:u}=e.s({cfg:t.cfg,agentId:t.route.agentId,sessionKey:t.route.sessionKey}),d=je({cfg:t.cfg,msg:t.msg,agentId:t.route.agentId,previousTimestamp:u,envelope:l}),f=!1;if(t.msg.chatType===`group`){let n=t.groupHistory??t.groupHistories.get(t.groupHistoryKey)??[];n.length>0&&(d=e.f({entries:n.map(e=>({sender:e.sender,body:e.body,timestamp:e.timestamp})),currentMessage:d,excludeLast:!1,formatEntry:t=>e.T({channel:`WhatsApp`,from:i,timestamp:t.timestamp,body:t.body,chatType:`group`,senderLabel:t.sender,envelope:l})})),f=!(t.suppressGroupHistoryClear??!1)}let m=t.buildCombinedEchoKey({sessionKey:t.route.sessionKey,combinedBody:d});if(t.echoHas(m))return r.R(`Skipping auto-reply: detected echo for combined message`),t.echoForget(m),!1;ke({cfg:t.cfg,msg:t.msg,agentId:t.route.agentId,sessionKey:t.route.sessionKey,conversationId:i,verbose:t.verbose,accountId:t.route.accountId,info:t.replyLogger.info.bind(t.replyLogger),warn:t.replyLogger.warn.bind(t.replyLogger)});let h=t.msg.id??b();t.replyLogger.info({connectionId:t.connectionId,correlationId:h,from:t.msg.chatType===`group`?i:t.msg.from,to:t.msg.to,body:$(d,240),mediaType:t.msg.mediaType??null,mediaPath:t.msg.mediaPath??null},`inbound web message`);let g=t.msg.chatType===`group`?i:t.msg.from,_=t.msg.mediaType?`, ${t.msg.mediaType}`:``;S.info(`Inbound message ${g} -> ${t.msg.to} (${t.msg.chatType}${_}, ${d.length} chars)`),r.B()&&S.debug(`Inbound body: ${$(d,400)}`);let v=t.msg.chatType===`group`?void 0:t.msg.senderE164?r.h(t.msg.senderE164):t.msg.from.includes(`@`)?r.m(t.msg.from):r.h(t.msg.from),y=t.maxMediaTextChunkLimit??c.h(t.cfg,`whatsapp`),x=c.m(t.cfg,`whatsapp`,t.route.accountId),ee=c.s({cfg:t.cfg,channel:`whatsapp`,accountId:t.route.accountId}),w=s.t(t.cfg,t.route.agentId),T=!1,E=!1,D=e.D(t.msg.body,t.cfg)?await Me({cfg:t.cfg,msg:t.msg}):void 0,O=t.cfg.messages?.responsePrefix,{onModelSelected:k,...A}=e.J({cfg:t.cfg,agentId:t.route.agentId,channel:`whatsapp`,accountId:t.route.accountId}),j=t.msg.chatType!==`group`&&!!t.msg.selfE164&&r.h(t.msg.from)===r.h(t.msg.selfE164??``),M=A.responsePrefix??(O===void 0&&j?e.Y(t.cfg,t.route.agentId):void 0),N=t.msg.chatType===`group`?(t.groupHistory??t.groupHistories.get(t.groupHistoryKey)??[]).map(e=>({sender:e.sender,body:e.body,timestamp:e.timestamp})):void 0,P=e.z({Body:d,BodyForAgent:t.msg.body,InboundHistory:N,RawBody:t.msg.body,CommandBody:t.msg.body,From:t.msg.from,To:t.msg.to,SessionKey:t.route.sessionKey,AccountId:t.route.accountId,MessageSid:t.msg.id,ReplyToId:t.msg.replyToId,ReplyToBody:t.msg.replyToBody,ReplyToSender:t.msg.replyToSender,MediaPath:t.msg.mediaPath,MediaUrl:t.msg.mediaUrl,MediaType:t.msg.mediaType,ChatType:t.msg.chatType,ConversationLabel:t.msg.chatType===`group`?i:t.msg.from,GroupSubject:t.msg.groupSubject,GroupMembers:ve({participants:t.msg.groupParticipants,roster:t.groupMemberNames.get(t.groupHistoryKey),fallbackE164:t.msg.senderE164}),SenderName:t.msg.senderName,SenderId:t.msg.senderJid?.trim()||t.msg.senderE164,SenderE164:t.msg.senderE164,CommandAuthorized:D,WasMentioned:t.msg.wasMentioned,...t.msg.location?a.Y(t.msg.location):{},Provider:`whatsapp`,Surface:`whatsapp`,OriginatingChannel:`whatsapp`,OriginatingTo:t.msg.from}),F=Ne({cfg:t.cfg,msg:t.msg}),I=!F||F===v,L=e._({route:t.route,sessionKey:t.route.sessionKey});v&&L===t.route.mainSessionKey&&I?we({cfg:t.cfg,backgroundTasks:t.backgroundTasks,storeAgentId:t.route.agentId,sessionKey:t.route.mainSessionKey,channel:`whatsapp`,to:v,accountId:t.route.accountId,ctx:P,warn:t.replyLogger.warn.bind(t.replyLogger)}):v&&L===t.route.mainSessionKey&&F&&r.R(`Skipping main-session last route update for ${v} (pinned owner ${F})`);let R=n.jt({storePath:o,sessionKey:t.route.sessionKey,ctx:P}).catch(e=>{t.replyLogger.warn({error:p.n(e),storePath:o,sessionKey:t.route.sessionKey},`failed updating session meta`)});Ce(t.backgroundTasks,R);let{queuedFinal:z}=await e.x({ctx:P,cfg:t.cfg,replyResolver:t.replyResolver,dispatcherOptions:{...A,responsePrefix:M,onHeartbeatStrip:()=>{T||(T=!0,r.R(`Stripped stray HEARTBEAT_OK token from web reply`))},deliver:async(e,n)=>{if(n.kind!==`final`)return;await Oe({replyResult:e,msg:t.msg,mediaLocalRoots:w,maxMediaBytes:t.maxMediaBytes,textLimit:y,chunkMode:x,replyLogger:t.replyLogger,connectionId:t.connectionId,skipLog:!1,tableMode:ee}),E=!0;let a=e.text?!0:void 0;t.rememberSentText(e.text,{combinedBody:d,combinedBodySessionKey:t.route.sessionKey,logVerboseMessage:a});let o=t.msg.chatType===`group`?i:t.msg.from??`unknown`,s=!!(e.mediaUrl||e.mediaUrls?.length);if(C.info(`Auto-replied to ${o}${s?` (media)`:``}`),r.B()){let t=e.text==null?`<media>`:$(e.text,400);C.debug(`Reply body: ${t}${s?` (media)`:``}`)}},onError:(e,n)=>{let r=n.kind===`tool`?`tool update`:n.kind===`block`?`block update`:`auto-reply`;C.error(`Failed sending web ${r} to ${t.msg.from??i}: ${p.n(e)}`)},onReplyStart:t.msg.sendComposing},replyOptions:{disableBlockStreaming:!0,onModelSelected:k}});return z?(f&&t.groupHistories.set(t.groupHistoryKey,[]),E):(f&&t.groupHistories.set(t.groupHistoryKey,[]),r.R(`Skipping auto-reply: silent token or no text/media returned from resolver`),!1)}function Fe(i){let a=async(e,t,n,r)=>Pe({cfg:i.cfg,msg:e,route:t,groupHistoryKey:n,groupHistories:i.groupHistories,groupMemberNames:i.groupMemberNames,connectionId:i.connectionId,verbose:i.verbose,maxMediaBytes:i.maxMediaBytes,replyResolver:i.replyResolver,replyLogger:i.replyLogger,backgroundTasks:i.backgroundTasks,rememberSentText:i.echoTracker.rememberText,echoHas:i.echoTracker.has,echoForget:i.echoTracker.forget,buildCombinedEchoKey:i.echoTracker.buildCombinedKey,groupHistory:r?.groupHistory,suppressGroupHistoryClear:r?.suppressGroupHistoryClear});return async o=>{let s=o.conversationId??o.from,c=Te(o),l=e.g({cfg:n.wa(),channel:`whatsapp`,accountId:o.accountId,peer:{kind:o.chatType===`group`?`group`:`direct`,id:c}}),u=o.chatType===`group`?t.kt({channel:`whatsapp`,accountId:l.accountId,peerKind:`group`,peerId:c}):l.sessionKey;if(o.from===o.to&&r.R(`📱 Same-phone mode detected (from === to: ${o.from})`),i.echoTracker.has(o.body)){r.R(`Skipping auto-reply: detected echo (message matches recently sent text)`),i.echoTracker.forget(o.body);return}if(o.chatType===`group`){let e={From:o.from,To:o.to,SessionKey:l.sessionKey,AccountId:l.accountId,ChatType:o.chatType,ConversationLabel:s,GroupSubject:o.groupSubject,SenderName:o.senderName,SenderId:o.senderJid?.trim()||o.senderE164,SenderE164:o.senderE164,Provider:`whatsapp`,Surface:`whatsapp`,OriginatingChannel:`whatsapp`,OriginatingTo:s};if(we({cfg:i.cfg,backgroundTasks:i.backgroundTasks,storeAgentId:l.agentId,sessionKey:l.sessionKey,channel:`whatsapp`,to:s,accountId:l.accountId,ctx:e,warn:i.replyLogger.warn.bind(i.replyLogger)}),!Se({cfg:i.cfg,msg:o,conversationId:s,groupHistoryKey:u,agentId:l.agentId,sessionKey:l.sessionKey,baseMentionConfig:i.baseMentionConfig,authDir:i.account.authDir,groupHistories:i.groupHistories,groupHistoryLimit:i.groupHistoryLimit,groupMemberNames:i.groupMemberNames,logVerbose:r.R,replyLogger:i.replyLogger}).shouldProcess)return}else !o.senderE164&&c&&c.startsWith(`+`)&&(o.senderE164=r.h(c)??o.senderE164);await de({cfg:i.cfg,msg:o,peerId:c,route:l,groupHistoryKey:u,groupHistories:i.groupHistories,processMessage:a})||await a(o,l,u)}}function Ie(e){return e===440}async function Le(t,i=oe,a=!0,s=e.t,c=r.M,l,u={}){let f=b(),m=r.K({module:`web-auto-reply`,runId:f}),h=r.K({module:`web-heartbeat`,runId:f}),g=r.K({module:`web-reconnect`,runId:f}),_={running:!0,connected:!1,reconnectAttempts:0,lastConnectedAt:null,lastDisconnect:null,lastMessageAt:null,lastEventAt:null,lastError:null},S=()=>{u.statusSink?.({..._,lastDisconnect:_.lastDisconnect?{..._.lastDisconnect}:null})};S();let C=n.wa(),T=n.Un({cfg:C,accountId:u.accountId}),E={...C,channels:{...C.channels,whatsapp:{...C.channels?.whatsapp,ackReaction:T.ackReaction,messagePrefix:T.messagePrefix,allowFrom:T.allowFrom,groupAllowFrom:T.groupAllowFrom,groupPolicy:T.groupPolicy,textChunkLimit:T.textChunkLimit,chunkMode:T.chunkMode,mediaMaxMb:T.mediaMaxMb,blockStreaming:T.blockStreaming,groups:T.groups}}},D=n.Wn(T),O=v(E,u.heartbeatSeconds),k=y(E,u.reconnect),A=X(E),j=E.channels?.whatsapp?.accounts?.[u.accountId??``]?.historyLimit??E.channels?.whatsapp?.historyLimit??E.messages?.groupChat?.historyLimit??50,M=new Map,N=new Map,P=le({maxItems:100,logVerbose:r.R}),F=u.sleep??((t,n)=>e.u(t,n??l)),I=()=>l?.aborted===!0,L=l&&new Promise(e=>l.addEventListener(`abort`,()=>e(`aborted`),{once:!0})),R=process.getMaxListeners?.()??10;process.setMaxListeners&&R<50&&process.setMaxListeners(50);let z=!1,B=()=>{z=!0};process.once(`SIGINT`,B);let V=0;for(;!I();){let f=b(),v=Date.now(),y=null,C=null,R=null,H=0,U=null,te=u.messageTimeoutMs??1800*1e3,ne=u.watchdogCheckMs??60*1e3,W=new Set,re=Fe({cfg:E,verbose:t,connectionId:f,maxMediaBytes:D,groupHistoryLimit:j,groupHistories:M,groupMemberNames:N,echoTracker:P,backgroundTasks:W,replyResolver:s??e.t,replyLogger:m,baseMentionConfig:A,account:T}),ie=e.w({cfg:E,channel:`whatsapp`}),G=await(i??oe)({verbose:t,accountId:T.accountId,authDir:T.authDir,mediaMaxMb:T.mediaMaxMb,sendReadReceipts:T.sendReadReceipts,debounceMs:ie,shouldDebounce:t=>t.mediaPath||t.mediaType||t.location||t.replyToId||t.replyToBody?!1:!e.E(t.body,E),onMessage:async e=>{H+=1,R=Date.now(),_.lastMessageAt=R,_.lastEventAt=R,S(),await re(e)}});Object.assign(_,e.c()),_.lastError=null,S();let{e164:K}=n.Qn(T.authDir),ae=e.g({cfg:E,channel:`whatsapp`,accountId:T.accountId});e.v(`WhatsApp gateway connected${K?` as ${K}`:``}.`,{sessionKey:ae.sessionKey}),d.r(T.accountId,G),U=o.f(e=>{if(!Ee(e))return!1;let t=p.n(e);return g.warn({connectionId:f,error:t},`web reconnect: unhandled rejection from WhatsApp socket; forcing reconnect`),G.signalClose?.({status:499,isLoggedOut:!1,error:e}),!0});let q=async()=>{d.r(T.accountId,null),U&&=(U(),null),y&&clearInterval(y),C&&clearInterval(C),W.size>0&&(await Promise.allSettled(W),W.clear());try{await G.close()}catch(e){r.R(`Socket close failed: ${p.n(e)}`)}};if(a&&(y=setInterval(()=>{let e=n.Kn(T.authDir),t=R?Math.floor((Date.now()-R)/6e4):null,r={connectionId:f,reconnectAttempts:V,messagesHandled:H,lastMessageAt:R,authAgeMs:e,uptimeMs:Date.now()-v,...t!==null&&t>30?{minutesSinceLastMessage:t}:{}};t&&t>30?h.warn(r,`⚠️ web gateway heartbeat - no messages in 30+ minutes`):h.info(r,`web gateway heartbeat`)},O*1e3),C=setInterval(()=>{if(!R)return;let e=Date.now()-R;if(e<=te)return;let t=Math.floor(e/6e4);h.warn({connectionId:f,minutesSinceLastMessage:t,lastMessageAt:new Date(R),messagesHandled:H},`Message timeout detected - forcing reconnect`),ee.warn(`No messages received in ${t}m - restarting connection`),q().catch(e=>{r.R(`Close listener failed: ${p.n(e)}`)}),G.signalClose?.({status:499,isLoggedOut:!1,error:`watchdog-timeout`})},ne)),x.info(`Listening for personal WhatsApp inbound messages.`),(process.stdout.isTTY||process.stderr.isTTY)&&x.raw(`Ctrl+C to stop.`),!a){await q(),process.removeListener(`SIGINT`,B);return}let J=await Promise.race([G.onClose?.catch(e=>(g.error({error:p.n(e)},`listener.onClose rejected`),{status:500,isLoggedOut:!1,error:e}))??w(),L??w()]);if(Date.now()-v>O*1e3&&(V=0),_.reconnectAttempts=V,S(),I()||z||J===`aborted`){await q();break}let Y=(typeof J==`object`&&J&&`status`in J?J.status:void 0)??`unknown`,X=typeof J==`object`&&J&&`isLoggedOut`in J&&J.isLoggedOut,Z=p.n(J);if(_.connected=!1,_.lastEventAt=Date.now(),_.lastDisconnect={at:_.lastEventAt,status:typeof Y==`number`?Y:void 0,error:Z,loggedOut:!!X},_.lastError=Z,_.reconnectAttempts=V,S(),g.info({connectionId:f,status:Y,loggedOut:X,reconnectAttempts:V,error:Z},`web reconnect: connection closed`),e.v(`WhatsApp gateway disconnected (status ${Y??`unknown`})`,{sessionKey:ae.sessionKey}),X){c.error(`WhatsApp session logged out. Run \`${n.ec(`openclaw channels login --channel web`)}\` to relink.`),await q();break}if(Ie(Y)){g.warn({connectionId:f,status:Y,error:Z},`web reconnect: non-retryable close status; stopping monitor`),c.error(`WhatsApp Web connection closed (status ${Y}: session conflict). Resolve conflicting WhatsApp Web sessions, then relink with \`${n.ec(`openclaw channels login --channel web`)}\`. Stopping web monitoring.`),await q();break}if(V+=1,_.reconnectAttempts=V,S(),k.maxAttempts>0&&V>=k.maxAttempts){g.warn({connectionId:f,status:Y,reconnectAttempts:V,maxAttempts:k.maxAttempts},`web reconnect: max attempts reached; continuing in degraded mode`),c.error(`WhatsApp Web reconnect: max attempts reached (${V}/${k.maxAttempts}). Stopping web monitoring.`),await q();break}let Q=e.l(k,V);g.info({connectionId:f,status:Y,reconnectAttempts:V,maxAttempts:k.maxAttempts||`unlimited`,delayMs:Q},`web reconnect: scheduling retry`),c.error(`WhatsApp Web connection closed (status ${Y}). Retry ${V}/${k.maxAttempts||`∞`} in ${e.y(Q)}… (${Z})`),await q();try{await F(Q,l)}catch{break}}_.running=!1,_.connected=!1,_.lastEventAt=Date.now(),S(),process.removeListener(`SIGINT`,B)}exports.WA_WEB_AUTH_DIR=n.Gn,exports.createWaSocket=p.t,exports.logWebSelfId=n.qn,exports.loginWeb=m.t,exports.monitorWebChannel=Le,exports.monitorWebInbox=oe,exports.pickWebChannel=n.Xn,exports.sendMessageWhatsApp=f.t,exports.waitForWaConnection=p.i,exports.webAuthExists=n.nr;
6
- //# sourceMappingURL=web-B-QDcVRv.cjs.map
6
+ //# sourceMappingURL=web-DpGXJ6SQ.cjs.map
@@ -1 +1 @@
1
- require(`./paths-BvlJvmRS.cjs`),require(`./paths-BPlgbwrb.cjs`);const e=require(`./config-rBz8C_Hi.cjs`);require(`./dispatch-DK5ub8qa.cjs`),require(`./github-copilot-token-TMkfxxD2.cjs`),require(`./logger-Bm93ZKOk.cjs`),require(`./proxy-env-Bcl14j2_.cjs`),require(`./send-CLl490Gb.cjs`),require(`./fetch-lw-aF17e.cjs`),require(`./channel-activity-BGK-Bj2_.cjs`),require(`./fetch-guard-DY9jpsXo.cjs`),require(`./local-roots-wTkpE7go.cjs`),require(`./ir-DAxY-7c1.cjs`),require(`./render-CzHaQB0d.cjs`),require(`./tables-Bp0a2WRP.cjs`),require(`./send-Bnvt7ZUE.cjs`),require(`./target-errors-Dd6CopYF.cjs`),require(`./send-D_1K0zmx.cjs`),require(`./deliver-DQLekoj2.cjs`),require(`./diagnostic-DXscFT8t.cjs`),require(`./pi-model-discovery-BJ8wTgFH.cjs`),require(`./audio-transcription-runner-QfEC19vE.cjs`),require(`./image-CoksjGBL.cjs`),require(`./api-key-rotation-CFPNzksf.cjs`),require(`./proxy-fetch-DH7VIiBH.cjs`),require(`./tokens-Dq2wDF3_.cjs`),require(`./commands-registry-C8wnXqNa.cjs`),require(`./send-CDwTrbgT.cjs`),require(`./fetch-DpwR_cJU.cjs`),require(`./skill-commands-CKc7JO_c.cjs`),require(`./outbound-attachment-FqWC0WJx.cjs`),require(`./send-D5UwpCoU.cjs`),require(`./query-expansion-DO2CFW4z.cjs`),require(`./manager-DdvFnsT7.cjs`);const t=require(`./channel-web-9zn1Itpg.cjs`),n=require(`./outbound-Bs2rUcWZ.cjs`),r=require(`./session-DzhI0nj-.cjs`),i=require(`./login-D5iTWowo.cjs`);exports.WA_WEB_AUTH_DIR=e.Ga,exports.createWaSocket=r.t,exports.logWebSelfId=e.qa,exports.loginWeb=i.t,exports.monitorWebChannel=t.t,exports.monitorWebInbox=t.n,exports.pickWebChannel=e.Xa,exports.sendMessageWhatsApp=n.t,exports.waitForWaConnection=r.i,exports.webAuthExists=e.no;
1
+ require(`./paths-BvlJvmRS.cjs`),require(`./paths-BPlgbwrb.cjs`);const e=require(`./config-rBz8C_Hi.cjs`);require(`./dispatch-C3k8j6Zb.cjs`),require(`./github-copilot-token-TMkfxxD2.cjs`),require(`./logger-Bm93ZKOk.cjs`),require(`./proxy-env-Bcl14j2_.cjs`),require(`./send-CLl490Gb.cjs`),require(`./fetch-lw-aF17e.cjs`),require(`./channel-activity-BGK-Bj2_.cjs`),require(`./fetch-guard-DY9jpsXo.cjs`),require(`./local-roots-wTkpE7go.cjs`),require(`./ir-DAxY-7c1.cjs`),require(`./render-CzHaQB0d.cjs`),require(`./tables-Bp0a2WRP.cjs`),require(`./send-Bnvt7ZUE.cjs`),require(`./target-errors-Dd6CopYF.cjs`),require(`./send-D_1K0zmx.cjs`),require(`./deliver-DQLekoj2.cjs`),require(`./diagnostic-DXscFT8t.cjs`),require(`./pi-model-discovery-BJ8wTgFH.cjs`),require(`./audio-transcription-runner-QfEC19vE.cjs`),require(`./image-CoksjGBL.cjs`),require(`./api-key-rotation-CFPNzksf.cjs`),require(`./proxy-fetch-DH7VIiBH.cjs`),require(`./tokens-Dq2wDF3_.cjs`),require(`./commands-registry-C8wnXqNa.cjs`),require(`./send-CDwTrbgT.cjs`),require(`./fetch-DpwR_cJU.cjs`),require(`./skill-commands-CKc7JO_c.cjs`),require(`./outbound-attachment-FqWC0WJx.cjs`),require(`./send-D5UwpCoU.cjs`),require(`./query-expansion-DO2CFW4z.cjs`),require(`./manager-DdvFnsT7.cjs`);const t=require(`./channel-web-BSUPSLCU.cjs`),n=require(`./outbound-Bs2rUcWZ.cjs`),r=require(`./session-DzhI0nj-.cjs`),i=require(`./login-D5iTWowo.cjs`);exports.WA_WEB_AUTH_DIR=e.Ga,exports.createWaSocket=r.t,exports.logWebSelfId=e.qa,exports.loginWeb=i.t,exports.monitorWebChannel=t.t,exports.monitorWebInbox=t.n,exports.pickWebChannel=e.Xa,exports.sendMessageWhatsApp=n.t,exports.waitForWaConnection=r.i,exports.webAuthExists=e.no;
@@ -1,6 +1,6 @@
1
- import{C as e,D as t,E as n,H as r,L as i,O as a,Q as o,R as s,S as c,T as l,U as u,V as d,W as f,X as p,Y as m,Z as h,_ as g,a as _,b as v,c as y,d as b,f as x,g as S,h as ee,i as C,l as te,m as ne,p as re,s as ie,t as w,u as T,v as ae,w as oe,y as se,z as E}from"./dispatch-BYlcmJ9u.js";import{Mt as D,Nt as O,jt as k}from"./send-BNBJ4CF8.js";import{Dt as A,Et as j,Mt as M,kt as ce,s as N}from"./paths-D55o_j8-.js";import{$n as le,At as ue,Da as P,Gn as F,Jn as de,Kn as fe,Mt as I,Ot as pe,Sr as me,Wn as L,Zn as R,_r as z,ec as he,gr as B,qn as ge,rr as V,si as H}from"./model-auth-Cc-8H6Cu.js";import{B as U,C as _e,K as ve,M as ye,O as be,R as W,T as G,h as K,m as q,o as xe,p as Se,v as Ce}from"./logger-C210xuWx.js";import"./paths-DhSjTRMz.js";import"./proxy-env-BlrHtJWH.js";import"./github-copilot-token-ylX_gawo.js";import"./send-DeU-T5ps.js";import"./fetch-guard-DE9BslxX.js";import{J as we,Y as Te,tt as Ee}from"./send-D75OGJco.js";import"./deliver-DkfCVM78.js";import"./diagnostic-CLUtpxAp.js";import"./pi-model-discovery-zCuISPPq.js";import{f as De}from"./audio-transcription-runner-BdY-TMcc.js";import"./image-Bte8cr4F.js";import"./api-key-rotation-ClIwV8yq.js";import{t as Oe}from"./local-roots-bWA2msT0.js";import"./proxy-fetch-ClOb2LUH.js";import"./tokens-B20KNIDD.js";import"./commands-registry-D2gv242l.js";import"./fetch-C3LEMysf.js";import{a as ke,d as Ae,h as je,m as Me,s as Ne}from"./ir-hQ6EW92h.js";import"./render-DhTJXP1U.js";import"./target-errors-Buo5pfom.js";import{n as Pe}from"./channel-activity-spvDzlTl.js";import{t as Fe}from"./tables-lbv-0tl3.js";import"./send-CyyzWwDr.js";import"./fetch-BMYDLRWo.js";import"./skill-commands-KzwEqk5p.js";import"./outbound-attachment-BXhbJils.js";import"./send-DPpBLiL4.js";import{r as Ie}from"./active-listener-CvML9qVF.js";import"./query-expansion-DF4LMxRQ.js";import"./manager-932XljTT.js";import{i as Le,r as Re,t as ze}from"./outbound-oHoWYWxf.js";import{i as Be,n as J,r as Ve,t as He}from"./session-C66IXbE-.js";import{t as Ue}from"./login-VviMkBU2.js";import{randomUUID as We}from"node:crypto";import{DisconnectReason as Ge,downloadMediaMessage as Ke,extractMessageContent as qe,getContentType as Je,isJidGroup as Ye,normalizeMessageContent as Xe}from"@whiskeysockets/baileys";const Ze={initialMs:2e3,maxMs:3e4,factor:1.8,jitter:.25,maxAttempts:12};function Qe(e,t){let n=t??e.web?.heartbeatSeconds;return typeof n==`number`&&n>0?n:60}function $e(e,t){let n=e.web?.reconnect??{},r=t??{},i={...Ze,...n,...r};return i.initialMs=Math.max(250,i.initialMs),i.maxMs=Math.max(i.initialMs,i.maxMs),i.factor=xe(i.factor,1.1,10),i.jitter=xe(i.jitter,0,1),i.maxAttempts=Math.max(0,Math.floor(i.maxAttempts)),i}function Y(){return We()}const X=be(`gateway/channels/whatsapp`),Z=X.child(`inbound`),Q=X.child(`outbound`),et=X.child(`heartbeat`);function tt(){return setInterval(()=>{},1e6).unref(),new Promise(()=>{})}const nt=s({ttlMs:20*6e4,maxSize:5e3});function rt(e){return nt.check(e)}const it=new Set([`FN`,`N`,`TEL`]);function at(e){if(!e)return{phones:[]};let t=e.split(/\r?\n/),n,r,i=[];for(let e of t){let t=e.trim();if(!t)continue;let a=t.indexOf(`:`);if(a===-1)continue;let o=t.slice(0,a).toUpperCase(),s=t.slice(a+1).trim();if(!s)continue;let c=ot(o);if(!c||!it.has(c))continue;let l=st(s);if(l){if(c===`FN`&&!r){r=ct(l);continue}if(c===`N`&&!n){n=ct(l);continue}if(c===`TEL`){let e=lt(l);e&&i.push(e)}}}return{name:r??n,phones:i}}function ot(e){let[t]=e.split(`;`);if(!t)return;let n=t.split(`.`);return n[n.length-1]||void 0}function st(e){return e.replace(/\\n/gi,` `).replace(/\\,/g,`,`).replace(/\\;/g,`;`).trim()}function ct(e){return e.replace(/;/g,` `).replace(/\s+/g,` `).trim()}function lt(e){let t=e.trim();return t?t.toLowerCase().startsWith(`tel:`)?t.slice(4).trim():t:``}function $(e){return Xe(e)}function ut(e){if(!e)return;let t=Je(e),n=t?e[t]:void 0,r=n&&typeof n==`object`&&`contextInfo`in n?n.contextInfo:void 0;if(r)return r;let i=e.extendedTextMessage?.contextInfo??e.imageMessage?.contextInfo??e.videoMessage?.contextInfo??e.documentMessage?.contextInfo??e.audioMessage?.contextInfo??e.stickerMessage?.contextInfo??e.buttonsResponseMessage?.contextInfo??e.listResponseMessage?.contextInfo??e.templateButtonReplyMessage?.contextInfo??e.interactiveResponseMessage?.contextInfo??e.buttonsMessage?.contextInfo??e.listMessage?.contextInfo;if(i)return i;for(let t of Object.values(e)){if(!t||typeof t!=`object`||!(`contextInfo`in t))continue;let e=t.contextInfo;if(e)return e}}function dt(e){let t=$(e);if(!t)return;let n=[t.extendedTextMessage?.contextInfo?.mentionedJid,t.extendedTextMessage?.contextInfo?.quotedMessage?.extendedTextMessage?.contextInfo?.mentionedJid,t.imageMessage?.contextInfo?.mentionedJid,t.videoMessage?.contextInfo?.mentionedJid,t.documentMessage?.contextInfo?.mentionedJid,t.audioMessage?.contextInfo?.mentionedJid,t.stickerMessage?.contextInfo?.mentionedJid,t.buttonsResponseMessage?.contextInfo?.mentionedJid,t.listResponseMessage?.contextInfo?.mentionedJid].flatMap(e=>e??[]).filter(Boolean);if(n.length!==0)return Array.from(new Set(n))}function ft(e){let t=$(e);if(!t)return;let n=qe(t),r=[t,n&&n!==t?n:void 0];for(let e of r){if(!e)continue;if(typeof e.conversation==`string`&&e.conversation.trim())return e.conversation.trim();let t=e.extendedTextMessage?.text;if(t?.trim())return t.trim();let n=e.imageMessage?.caption??e.videoMessage?.caption??e.documentMessage?.caption;if(n?.trim())return n.trim()}let i=mt(t)??(n&&n!==t?mt(n):void 0);if(i)return i}function pt(e){let t=$(e);if(t){if(t.imageMessage)return`<media:image>`;if(t.videoMessage)return`<media:video>`;if(t.audioMessage)return`<media:audio>`;if(t.documentMessage)return`<media:document>`;if(t.stickerMessage)return`<media:sticker>`}}function mt(e){let t=$(e);if(!t)return;let n=t.contactMessage??void 0;if(n){let{name:e,phones:t}=ht({displayName:n.displayName,vcard:n.vcard});return gt(e,t)}let r=t.contactsArrayMessage?.contacts??void 0;if(!(!r||r.length===0))return _t(r.map(e=>ht({displayName:e.displayName,vcard:e.vcard})).map(e=>vt(e.name,e.phones)).filter(e=>!!e),r.length)}function ht(e){let t=(e.displayName??``).trim(),n=at(e.vcard??void 0);return{name:t||n.name,phones:n.phones}}function gt(e,t){let n=vt(e,t);return n?`<contact: ${n}>`:`<contact>`}function _t(e,t){let n=e.map(e=>e.trim()).filter(Boolean);if(n.length===0)return`<contacts: ${t} ${t===1?`contact`:`contacts`}>`;let r=Math.max(t-n.length,0),i=r>0?` +${r} more`:``;return`<contacts: ${n.join(`, `)}${i}>`}function vt(e,t){let n=[e,yt(t)].filter(e=>!!e);if(n.length!==0)return n.join(`, `)}function yt(e){let t=e?.map(e=>e.trim()).filter(Boolean)??[];if(t.length===0)return;let{shown:n,remaining:r}=bt(t,t.length,1),[i]=n;if(i)return r===0?i:`${i} (+${r} more)`}function bt(e,t,n){let r=e.slice(0,n);return{shown:r,remaining:Math.max(t-r.length,0)}}function xt(e){let t=$(e);if(!t)return null;let n=t.liveLocationMessage??void 0;if(n){let e=n.degreesLatitude,t=n.degreesLongitude;if(e!=null&&t!=null){let r=Number(e),i=Number(t);if(Number.isFinite(r)&&Number.isFinite(i))return{latitude:r,longitude:i,accuracy:n.accuracyInMeters??void 0,caption:n.caption??void 0,source:`live`,isLive:!0}}}let r=t.locationMessage??void 0;if(r){let e=r.degreesLatitude,t=r.degreesLongitude;if(e!=null&&t!=null){let n=Number(e),i=Number(t);if(Number.isFinite(n)&&Number.isFinite(i)){let e=!!r.isLive;return{latitude:n,longitude:i,accuracy:r.accuracyInMeters??void 0,name:r.name??void 0,address:r.address??void 0,caption:r.comment??void 0,source:e?`live`:r.name||r.address?`place`:`pin`,isLive:e}}}}return null}function St(e){let t=$(e);if(!t)return null;let n=ut(t),r=Xe(n?.quotedMessage);if(!r)return null;let i=xt(r),a=i?we(i):void 0,o=[ft(r),a].filter(Boolean).join(`
1
+ import{C as e,D as t,E as n,H as r,L as i,O as a,Q as o,R as s,S as c,T as l,U as u,V as d,W as f,X as p,Y as m,Z as h,_ as g,a as _,b as v,c as y,d as b,f as x,g as S,h as ee,i as C,l as te,m as ne,p as re,s as ie,t as w,u as T,v as ae,w as oe,y as se,z as E}from"./dispatch-BhUN9ZDP.js";import{Mt as D,Nt as O,jt as k}from"./send-BNBJ4CF8.js";import{Dt as A,Et as j,Mt as M,kt as ce,s as N}from"./paths-D55o_j8-.js";import{$n as le,At as ue,Da as P,Gn as F,Jn as de,Kn as fe,Mt as I,Ot as pe,Sr as me,Wn as L,Zn as R,_r as z,ec as he,gr as B,qn as ge,rr as V,si as H}from"./model-auth-Cc-8H6Cu.js";import{B as U,C as _e,K as ve,M as ye,O as be,R as W,T as G,h as K,m as q,o as xe,p as Se,v as Ce}from"./logger-C210xuWx.js";import"./paths-DhSjTRMz.js";import"./proxy-env-BlrHtJWH.js";import"./github-copilot-token-ylX_gawo.js";import"./send-DeU-T5ps.js";import"./fetch-guard-DE9BslxX.js";import{J as we,Y as Te,tt as Ee}from"./send-D75OGJco.js";import"./deliver-DkfCVM78.js";import"./diagnostic-CLUtpxAp.js";import"./pi-model-discovery-zCuISPPq.js";import{f as De}from"./audio-transcription-runner-BdY-TMcc.js";import"./image-Bte8cr4F.js";import"./api-key-rotation-ClIwV8yq.js";import{t as Oe}from"./local-roots-bWA2msT0.js";import"./proxy-fetch-ClOb2LUH.js";import"./tokens-B20KNIDD.js";import"./commands-registry-D2gv242l.js";import"./fetch-C3LEMysf.js";import{a as ke,d as Ae,h as je,m as Me,s as Ne}from"./ir-hQ6EW92h.js";import"./render-DhTJXP1U.js";import"./target-errors-Buo5pfom.js";import{n as Pe}from"./channel-activity-spvDzlTl.js";import{t as Fe}from"./tables-lbv-0tl3.js";import"./send-CyyzWwDr.js";import"./fetch-BMYDLRWo.js";import"./skill-commands-KzwEqk5p.js";import"./outbound-attachment-BXhbJils.js";import"./send-DPpBLiL4.js";import{r as Ie}from"./active-listener-CvML9qVF.js";import"./query-expansion-DF4LMxRQ.js";import"./manager-932XljTT.js";import{i as Le,r as Re,t as ze}from"./outbound-oHoWYWxf.js";import{i as Be,n as J,r as Ve,t as He}from"./session-C66IXbE-.js";import{t as Ue}from"./login-VviMkBU2.js";import{randomUUID as We}from"node:crypto";import{DisconnectReason as Ge,downloadMediaMessage as Ke,extractMessageContent as qe,getContentType as Je,isJidGroup as Ye,normalizeMessageContent as Xe}from"@whiskeysockets/baileys";const Ze={initialMs:2e3,maxMs:3e4,factor:1.8,jitter:.25,maxAttempts:12};function Qe(e,t){let n=t??e.web?.heartbeatSeconds;return typeof n==`number`&&n>0?n:60}function $e(e,t){let n=e.web?.reconnect??{},r=t??{},i={...Ze,...n,...r};return i.initialMs=Math.max(250,i.initialMs),i.maxMs=Math.max(i.initialMs,i.maxMs),i.factor=xe(i.factor,1.1,10),i.jitter=xe(i.jitter,0,1),i.maxAttempts=Math.max(0,Math.floor(i.maxAttempts)),i}function Y(){return We()}const X=be(`gateway/channels/whatsapp`),Z=X.child(`inbound`),Q=X.child(`outbound`),et=X.child(`heartbeat`);function tt(){return setInterval(()=>{},1e6).unref(),new Promise(()=>{})}const nt=s({ttlMs:20*6e4,maxSize:5e3});function rt(e){return nt.check(e)}const it=new Set([`FN`,`N`,`TEL`]);function at(e){if(!e)return{phones:[]};let t=e.split(/\r?\n/),n,r,i=[];for(let e of t){let t=e.trim();if(!t)continue;let a=t.indexOf(`:`);if(a===-1)continue;let o=t.slice(0,a).toUpperCase(),s=t.slice(a+1).trim();if(!s)continue;let c=ot(o);if(!c||!it.has(c))continue;let l=st(s);if(l){if(c===`FN`&&!r){r=ct(l);continue}if(c===`N`&&!n){n=ct(l);continue}if(c===`TEL`){let e=lt(l);e&&i.push(e)}}}return{name:r??n,phones:i}}function ot(e){let[t]=e.split(`;`);if(!t)return;let n=t.split(`.`);return n[n.length-1]||void 0}function st(e){return e.replace(/\\n/gi,` `).replace(/\\,/g,`,`).replace(/\\;/g,`;`).trim()}function ct(e){return e.replace(/;/g,` `).replace(/\s+/g,` `).trim()}function lt(e){let t=e.trim();return t?t.toLowerCase().startsWith(`tel:`)?t.slice(4).trim():t:``}function $(e){return Xe(e)}function ut(e){if(!e)return;let t=Je(e),n=t?e[t]:void 0,r=n&&typeof n==`object`&&`contextInfo`in n?n.contextInfo:void 0;if(r)return r;let i=e.extendedTextMessage?.contextInfo??e.imageMessage?.contextInfo??e.videoMessage?.contextInfo??e.documentMessage?.contextInfo??e.audioMessage?.contextInfo??e.stickerMessage?.contextInfo??e.buttonsResponseMessage?.contextInfo??e.listResponseMessage?.contextInfo??e.templateButtonReplyMessage?.contextInfo??e.interactiveResponseMessage?.contextInfo??e.buttonsMessage?.contextInfo??e.listMessage?.contextInfo;if(i)return i;for(let t of Object.values(e)){if(!t||typeof t!=`object`||!(`contextInfo`in t))continue;let e=t.contextInfo;if(e)return e}}function dt(e){let t=$(e);if(!t)return;let n=[t.extendedTextMessage?.contextInfo?.mentionedJid,t.extendedTextMessage?.contextInfo?.quotedMessage?.extendedTextMessage?.contextInfo?.mentionedJid,t.imageMessage?.contextInfo?.mentionedJid,t.videoMessage?.contextInfo?.mentionedJid,t.documentMessage?.contextInfo?.mentionedJid,t.audioMessage?.contextInfo?.mentionedJid,t.stickerMessage?.contextInfo?.mentionedJid,t.buttonsResponseMessage?.contextInfo?.mentionedJid,t.listResponseMessage?.contextInfo?.mentionedJid].flatMap(e=>e??[]).filter(Boolean);if(n.length!==0)return Array.from(new Set(n))}function ft(e){let t=$(e);if(!t)return;let n=qe(t),r=[t,n&&n!==t?n:void 0];for(let e of r){if(!e)continue;if(typeof e.conversation==`string`&&e.conversation.trim())return e.conversation.trim();let t=e.extendedTextMessage?.text;if(t?.trim())return t.trim();let n=e.imageMessage?.caption??e.videoMessage?.caption??e.documentMessage?.caption;if(n?.trim())return n.trim()}let i=mt(t)??(n&&n!==t?mt(n):void 0);if(i)return i}function pt(e){let t=$(e);if(t){if(t.imageMessage)return`<media:image>`;if(t.videoMessage)return`<media:video>`;if(t.audioMessage)return`<media:audio>`;if(t.documentMessage)return`<media:document>`;if(t.stickerMessage)return`<media:sticker>`}}function mt(e){let t=$(e);if(!t)return;let n=t.contactMessage??void 0;if(n){let{name:e,phones:t}=ht({displayName:n.displayName,vcard:n.vcard});return gt(e,t)}let r=t.contactsArrayMessage?.contacts??void 0;if(!(!r||r.length===0))return _t(r.map(e=>ht({displayName:e.displayName,vcard:e.vcard})).map(e=>vt(e.name,e.phones)).filter(e=>!!e),r.length)}function ht(e){let t=(e.displayName??``).trim(),n=at(e.vcard??void 0);return{name:t||n.name,phones:n.phones}}function gt(e,t){let n=vt(e,t);return n?`<contact: ${n}>`:`<contact>`}function _t(e,t){let n=e.map(e=>e.trim()).filter(Boolean);if(n.length===0)return`<contacts: ${t} ${t===1?`contact`:`contacts`}>`;let r=Math.max(t-n.length,0),i=r>0?` +${r} more`:``;return`<contacts: ${n.join(`, `)}${i}>`}function vt(e,t){let n=[e,yt(t)].filter(e=>!!e);if(n.length!==0)return n.join(`, `)}function yt(e){let t=e?.map(e=>e.trim()).filter(Boolean)??[];if(t.length===0)return;let{shown:n,remaining:r}=bt(t,t.length,1),[i]=n;if(i)return r===0?i:`${i} (+${r} more)`}function bt(e,t,n){let r=e.slice(0,n);return{shown:r,remaining:Math.max(t-r.length,0)}}function xt(e){let t=$(e);if(!t)return null;let n=t.liveLocationMessage??void 0;if(n){let e=n.degreesLatitude,t=n.degreesLongitude;if(e!=null&&t!=null){let r=Number(e),i=Number(t);if(Number.isFinite(r)&&Number.isFinite(i))return{latitude:r,longitude:i,accuracy:n.accuracyInMeters??void 0,caption:n.caption??void 0,source:`live`,isLive:!0}}}let r=t.locationMessage??void 0;if(r){let e=r.degreesLatitude,t=r.degreesLongitude;if(e!=null&&t!=null){let n=Number(e),i=Number(t);if(Number.isFinite(n)&&Number.isFinite(i)){let e=!!r.isLive;return{latitude:n,longitude:i,accuracy:r.accuracyInMeters??void 0,name:r.name??void 0,address:r.address??void 0,caption:r.comment??void 0,source:e?`live`:r.name||r.address?`place`:`pin`,isLive:e}}}}return null}function St(e){let t=$(e);if(!t)return null;let n=ut(t),r=Xe(n?.quotedMessage);if(!r)return null;let i=xt(r),a=i?we(i):void 0,o=[ft(r),a].filter(Boolean).join(`
2
2
  `).trim();if(o||=pt(r),!o){let e=r?Je(r):void 0;return W(`Quoted message missing extractable body${e?` (type ${e})`:``}`),null}let s=n?.participant??void 0,c=s?q(s)??s:void 0,l=c??`unknown sender`;return{id:n?.stanzaId?String(n.stanzaId):void 0,body:o,sender:l,senderJid:s,senderE164:c}}function Ct(e){return D({providerConfigPresent:e.providerConfigPresent,groupPolicy:e.groupPolicy,defaultGroupPolicy:e.defaultGroupPolicy})}async function wt(e){let t=P(),n=L({cfg:t,accountId:e.accountId}),r=n.dmPolicy??`pairing`,i=n.allowFrom??[],a=await d({provider:`whatsapp`,accountId:n.accountId,dmPolicy:r}),o=i.length===0&&e.selfE164?[e.selfE164]:[],s=i.length>0?i:o,c=n.groupAllowFrom??(i.length>0?i:void 0),l=e.from===e.selfE164,f=n.selfChatMode??Se(e.selfE164,i),p=typeof e.pairingGraceMs==`number`&&e.pairingGraceMs>0?e.pairingGraceMs:3e4,m=typeof e.connectedAtMs==`number`&&typeof e.messageTimestampMs==`number`&&e.messageTimestampMs<e.connectedAtMs-p,h=k(t),{groupPolicy:g,providerMissingFallbackApplied:_}=Ct({providerConfigPresent:t.channels?.whatsapp!==void 0,groupPolicy:n.groupPolicy,defaultGroupPolicy:h});O({providerMissingFallbackApplied:_,providerKey:`whatsapp`,accountId:n.accountId,log:e=>W(e)});let v=K(e.from),y=typeof e.senderE164==`string`?K(e.senderE164):null,b=u({isGroup:e.group,dmPolicy:r,groupPolicy:g,allowFrom:e.group?i:s,groupAllowFrom:c,storeAllowFrom:a,isSenderAllowed:t=>{if(t.includes(`*`))return!0;let n=new Set(t.map(e=>K(String(e))).filter(e=>!!e));return!e.group&&l?!0:e.group?!!(y&&n.has(y)):n.has(v)}});if(e.group&&b.decision!==`allow`)return b.reason===`groupPolicy=disabled`?W(`Blocked group message (groupPolicy: disabled)`):b.reason===`groupPolicy=allowlist (empty allowlist)`?W(`Blocked group message (groupPolicy: allowlist, no groupAllowFrom)`):W(`Blocked group message from ${e.senderE164??`unknown sender`} (groupPolicy: allowlist)`),{allowed:!1,shouldMarkRead:!1,isSelfChat:f,resolvedAccountId:n.accountId};if(!e.group){if(e.isFromMe&&!l)return W(`Skipping outbound DM (fromMe); no pairing reply needed.`),{allowed:!1,shouldMarkRead:!1,isSelfChat:f,resolvedAccountId:n.accountId};if(b.decision===`block`&&b.reason===`dmPolicy=disabled`)return W(`Blocked dm (dmPolicy: disabled)`),{allowed:!1,shouldMarkRead:!1,isSelfChat:f,resolvedAccountId:n.accountId};if(b.decision===`pairing`&&!l){let t=e.from;return m?W(`Skipping pairing reply for historical DM from ${t}.`):await E({channel:`whatsapp`,senderId:t,senderIdLine:`Your WhatsApp phone number: ${t}`,meta:{name:(e.pushName??``).trim()||void 0},upsertPairingRequest:async({id:e,meta:t})=>await Ee({channel:`whatsapp`,id:e,accountId:n.accountId,meta:t}),onCreated:()=>{W(`whatsapp pairing request sender=${t} name=${e.pushName??`unknown`}`)},sendPairingReply:async t=>{await e.sock.sendMessage(e.remoteJid,{text:t})},onReplyError:e=>{W(`whatsapp pairing reply failed for ${t}: ${String(e)}`)}}),{allowed:!1,shouldMarkRead:!1,isSelfChat:f,resolvedAccountId:n.accountId}}if(b.decision!==`allow`)return W(`Blocked unauthorized sender ${e.from} (dmPolicy=${r})`),{allowed:!1,shouldMarkRead:!1,isSelfChat:f,resolvedAccountId:n.accountId}}return{allowed:!0,shouldMarkRead:!0,isSelfChat:f,resolvedAccountId:n.accountId}}function Tt(e){return Xe(e)}function Et(e){let t=e.imageMessage?.mimetype??e.videoMessage?.mimetype??e.documentMessage?.mimetype??e.audioMessage?.mimetype??e.stickerMessage?.mimetype??void 0;if(t)return t;if(e.audioMessage)return`audio/ogg; codecs=opus`;if(e.imageMessage)return`image/jpeg`;if(e.videoMessage)return`video/mp4`;if(e.stickerMessage)return`image/webp`}async function Dt(e,t){let n=Tt(e.message);if(!n)return;let r=Et(n),i=n.documentMessage?.fileName??void 0;if(!(!n.imageMessage&&!n.videoMessage&&!n.documentMessage&&!n.audioMessage&&!n.stickerMessage))try{return{buffer:await Ke(e,`buffer`,{},{reuploadRequest:t.updateMediaMessage,logger:t.logger}),mimetype:r,fileName:i}}catch(e){W(`downloadMediaMessage failed: ${String(e)}`);return}}function Ot(e){Pe({channel:`whatsapp`,accountId:e,direction:`outbound`})}function kt(e){return typeof e==`object`&&e&&`key`in e?String(e.key?.id??`unknown`):`unknown`}function At(e){return{sendMessage:async(t,n,r,i,a)=>{let o=G(t),s;if(r&&i)if(i.startsWith(`image/`))s={image:r,caption:n||void 0,mimetype:i};else if(i.startsWith(`audio/`))s={audio:r,ptt:!0,mimetype:i};else if(i.startsWith(`video/`)){let e=a?.gifPlayback;s={video:r,caption:n||void 0,mimetype:i,...e?{gifPlayback:!0}:{}}}else s={document:r,fileName:a?.fileName?.trim()||`file`,caption:n||void 0,mimetype:i};else s={text:n};let c=await e.sock.sendMessage(o,s);return Ot(a?.accountId??e.defaultAccountId),{messageId:kt(c)}},sendPoll:async(t,n)=>{let r=G(t),i=await e.sock.sendMessage(r,{poll:{name:n.question,values:n.options,selectableCount:n.maxSelections??1}});return Ot(e.defaultAccountId),{messageId:kt(i)}},sendReaction:async(t,n,r,i,a)=>{let o=G(t);await e.sock.sendMessage(o,{react:{text:r,key:{remoteJid:o,id:n,fromMe:i,participant:a?G(a):void 0}}})},sendComposingTo:async t=>{let n=G(t);await e.sock.sendPresenceUpdate(`composing`,n)}}}async function jt(e){let t=ve({module:`web-inbound`}),n=be(`gateway/channels/whatsapp`).child(`inbound`),r=await He(!1,e.verbose,{authDir:e.authDir});await Be(r);let i=Date.now(),a=null,o=new Promise(e=>{a=e}),s=e=>{if(!a)return;let t=a;a=null,t(e)};try{await r.sendPresenceUpdate(`available`),U()&&W(`Sent global 'available' presence on connect`)}catch(e){W(`Failed to send 'available' presence on connect: ${String(e)}`)}let l=r.user?.id,u=l?q(l):null,d=c({debounceMs:e.debounceMs??0,buildKey:e=>{let t=e.chatType===`group`?e.senderJid??e.senderE164??e.senderName??e.from:e.from;if(!t)return null;let n=e.chatType===`group`?e.chatId:e.from;return`${e.accountId}:${n}:${t}`},shouldDebounce:e.shouldDebounce,onFlush:async t=>{let n=t.at(-1);if(!n)return;if(t.length===1){await e.onMessage(n);return}let r=new Set;for(let e of t)for(let t of e.mentionedJids??[])r.add(t);let i=t.map(e=>e.body).filter(Boolean).join(`
3
3
  `),a={...n,body:i,mentionedJids:r.size>0?Array.from(r):void 0};await e.onMessage(a)},onError:e=>{t.error({error:String(e)},`failed handling inbound web message`),n.error(`Failed handling inbound web message: ${String(e)}`)}}),f=new Map,p=300*1e3,m=r.signalRepository?.lidMapping,h=async t=>Ce(t,{authDir:e.authDir,lidLookup:m}),g=async e=>{let t=f.get(e);if(t&&t.expires>Date.now())return t;try{let t=await r.groupMetadata(e),n=(await Promise.all(t.participants?.map(async e=>await h(e.id)??e.id)??[])).filter(Boolean)??[],i={subject:t.subject,participants:n,expires:Date.now()+p};return f.set(e,i),i}catch(t){return W(`Failed to fetch group metadata for ${e}: ${String(t)}`),{expires:Date.now()+p}}},_=async t=>{let n=t.key?.id??void 0,a=t.key?.remoteJid;if(!a||a.endsWith(`@status`)||a.endsWith(`@broadcast`))return null;let o=Ye(a)===!0;if(n&&rt(`${e.accountId}:${a}:${n}`))return null;let s=t.key?.participant??void 0,c=o?a:await h(a);if(!c)return null;let l=o?s?await h(s):null:c,d,f;if(o){let e=await g(a);d=e.subject,f=e.participants}let p=t.messageTimestamp?Number(t.messageTimestamp)*1e3:void 0,m=await wt({accountId:e.accountId,from:c,selfE164:u,senderE164:l,group:o,pushName:t.pushName??void 0,isFromMe:!!t.key?.fromMe,messageTimestampMs:p,connectedAtMs:i,sock:{sendMessage:(e,t)=>r.sendMessage(e,t)},remoteJid:a});return m.allowed?{id:n,remoteJid:a,group:o,participantJid:s,from:c,senderE164:l,groupSubject:d,groupParticipants:f,messageTimestampMs:p,access:m}:null},v=async t=>{let{id:n,remoteJid:i,participantJid:a,access:o}=t;if(n&&!o.isSelfChat&&e.sendReadReceipts!==!1)try{await r.readMessages([{remoteJid:i,id:n,participant:a,fromMe:!1}]),U()&&W(`Marked message ${n} as read for ${i}${a?` (participant ${a})`:``}`)}catch(e){W(`Failed to mark message ${n} read: ${String(e)}`)}else n&&o.isSelfChat&&U()&&W(`Self-chat mode: skipping read receipt for ${n}`)},y=async t=>{let n=xt(t.message??void 0),i=n?we(n):void 0,a=ft(t.message??void 0);if(i&&(a=[a,i].filter(Boolean).join(`
4
4
  `).trim()),!a&&(a=pt(t.message??void 0),!a))return null;let o=St(t.message),s,c,l;try{let n=await Dt(t,r);if(n){let t=(typeof e.mediaMaxMb==`number`&&e.mediaMaxMb>0?e.mediaMaxMb:50)*1024*1024;s=(await H(n.buffer,n.mimetype,`inbound`,t,n.fileName)).path,c=n.mimetype,l=n.fileName}}catch(e){W(`Inbound media download failed: ${String(e)}`)}return{body:a,location:n??void 0,replyContext:o,mediaPath:s,mediaType:c,mediaFileName:l}},b=async(e,i,a)=>{let o=i.remoteJid,s=async()=>{try{await r.sendPresenceUpdate(`composing`,o)}catch(e){W(`Presence update failed: ${String(e)}`)}},c=async e=>{await r.sendMessage(o,{text:e})},f=async e=>{await r.sendMessage(o,e)},p=i.messageTimestampMs,m=dt(e.message),h=e.pushName??void 0;t.info({from:i.from,to:u??`me`,body:a.body,mediaPath:a.mediaPath,mediaType:a.mediaType,mediaFileName:a.mediaFileName,timestamp:p},`inbound message`);let g={id:i.id,from:i.from,conversationId:i.from,to:u??`me`,accountId:i.access.resolvedAccountId,body:a.body,pushName:h,timestamp:p,chatType:i.group?`group`:`direct`,chatId:i.remoteJid,senderJid:i.participantJid,senderE164:i.senderE164??void 0,senderName:h,replyToId:a.replyContext?.id,replyToBody:a.replyContext?.body,replyToSender:a.replyContext?.sender,replyToSenderJid:a.replyContext?.senderJid,replyToSenderE164:a.replyContext?.senderE164,groupSubject:i.groupSubject,groupParticipants:i.groupParticipants,mentionedJids:m??void 0,selfJid:l,selfE164:u,fromMe:!!e.key?.fromMe,location:a.location??void 0,sendComposing:s,reply:c,sendMedia:f,mediaPath:a.mediaPath,mediaType:a.mediaType,mediaFileName:a.mediaFileName};try{Promise.resolve(d.enqueue(g)).catch(e=>{t.error({error:String(e)},`failed handling inbound web message`),n.error(`Failed handling inbound web message: ${String(e)}`)})}catch(e){t.error({error:String(e)},`failed handling inbound web message`),n.error(`Failed handling inbound web message: ${String(e)}`)}},x=async t=>{if(!(t.type!==`notify`&&t.type!==`append`))for(let n of t.messages??[]){Pe({channel:`whatsapp`,accountId:e.accountId,direction:`inbound`});let r=await _(n);if(!r||(await v(r),t.type===`append`))continue;let i=await y(n);i&&await b(n,r,i)}};r.ev.on(`messages.upsert`,x);let S=e=>{try{if(e.connection===`close`){let t=Ve(e.lastDisconnect?.error);s({status:t,isLoggedOut:t===Ge.loggedOut,error:e.lastDisconnect?.error})}}catch(e){t.error({error:String(e)},`connection.update handler error`),s({status:void 0,isLoggedOut:!1,error:e})}};return r.ev.on(`connection.update`,S),{close:async()=>{try{let e=r.ev,t=x,n=S;typeof e.off==`function`?(e.off(`messages.upsert`,t),e.off(`connection.update`,n)):typeof e.removeListener==`function`&&(e.removeListener(`messages.upsert`,t),e.removeListener(`connection.update`,n)),r.ws?.close()}catch(e){W(`Socket close failed: ${String(e)}`)}},onClose:o,signalClose:e=>{s(e??{status:void 0,isLoggedOut:!1,error:`closed`})},...At({sock:{sendMessage:(e,t)=>r.sendMessage(e,t),sendPresenceUpdate:(e,t)=>r.sendPresenceUpdate(e,t)},defaultAccountId:e.accountId})}}function Mt(e,n){return{mentionRegexes:t(e,n),allowFrom:e.channels?.whatsapp?.allowFrom}}function Nt(e,t){let n=t?{authDir:t}:void 0;return{normalizedMentions:e.mentionedJids?.length?e.mentionedJids.map(e=>q(e,n)??e).filter(Boolean):[],selfE164:e.selfE164??(e.selfJid?q(e.selfJid,n):null),selfJid:e.selfJid?e.selfJid.replace(/:\\d+/,``):null}}function Pt(e,t,n){let r=e=>a(e),i=Se(n.selfE164,t.allowFrom);if((e.mentionedJids?.length??0)>0&&!i)return!!(n.selfE164&&n.normalizedMentions.includes(n.selfE164)||n.selfJid&&n.normalizedMentions.includes(n.selfJid));let o=r(e.body);if(t.mentionRegexes.some(e=>e.test(o)))return!0;if(n.selfE164){let t=n.selfE164.replace(/\D/g,``);if(t){if(o.replace(/[^\d]/g,``).includes(t))return!0;let n=e.body.replace(/[\s-]/g,``);if(RegExp(`\\+?${t}`,`i`).test(n))return!0}}return!1}function Ft(e,t,n){let r=Nt(e,n);return{wasMentioned:Pt(e,t,r),details:{from:e.from,body:e.body,bodyClean:a(e.body),mentionedJids:e.mentionedJids??null,normalizedMentionedJids:r.normalizedMentions.length?r.normalizedMentions:null,selfJid:e.selfJid??null,selfJidBare:r.selfJid,selfE164:e.selfE164??null,resolvedSelfE164:r.selfE164}}}function It(e,t){let n=e.allowFrom;return(Array.isArray(n)&&n.length>0?n:t?[t]:[]).filter(e=>!!(e&&e!==`*`)).map(e=>K(e)).filter(e=>!!e)}function Lt(e){let t=new Set,n=Math.max(1,e.maxItems??100),r=e=>`combined:${e.sessionKey}:${e.combinedBody}`,i=()=>{for(;t.size>n;){let e=t.values().next().value;if(!e)break;t.delete(e)}};return{rememberText:(n,a)=>{n&&(t.add(n),a.combinedBody&&a.combinedBodySessionKey&&t.add(r({sessionKey:a.combinedBodySessionKey,combinedBody:a.combinedBody})),a.logVerboseMessage&&e.logVerbose?.(`Added to echo detection set (size now: ${t.size}): ${n.substring(0,50)}...`),i())},has:e=>t.has(e),forget:e=>{t.delete(e)},buildCombinedKey:r}}function Rt(e){let t=re({agentId:e.agentId,channel:`whatsapp`,accountId:e.route.accountId,peer:{kind:e.msg.chatType===`group`?`group`:`direct`,id:e.peerId},dmScope:e.cfg.session?.dmScope,identityLinks:e.cfg.session?.identityLinks}),n=A({agentId:e.agentId,mainKey:j});return{sessionKey:t,mainSessionKey:n,lastRoutePolicy:ne({sessionKey:t,mainSessionKey:n})}}async function zt(e){let t=e.cfg.broadcast?.[e.peerId];if(!t||!Array.isArray(t)||t.length===0)return!1;let n=e.cfg.broadcast?.strategy||`parallel`;Z.info(`Broadcasting message to ${t.length} agents (${n})`);let r=e.cfg.agents?.list?.map(e=>M(e.id)),i=(r?.length??0)>0,a=e.msg.chatType===`group`?e.groupHistories.get(e.groupHistoryKey)??[]:void 0,o=async t=>{let n=M(t);if(i&&!r?.includes(n))return Z.warn(`Broadcast agent ${t} not found in agents.list; skipping`),!1;let o=Rt({cfg:e.cfg,msg:e.msg,route:e.route,peerId:e.peerId,agentId:n}),s={...e.route,agentId:n,...o};try{return await e.processMessage(e.msg,s,e.groupHistoryKey,{groupHistory:a,suppressGroupHistoryClear:!0})}catch(e){return Z.error(`Broadcast agent ${t} failed: ${J(e)}`),!1}};if(n===`sequential`)for(let e of t)await o(e);else await Promise.allSettled(t.map(o));return e.msg.chatType===`group`&&e.groupHistories.set(e.groupHistoryKey,[]),!0}function Bt(e,t,n){let r=e;for(let e of t)r=r.replace(e,` `);if(n){let e=n.replace(/\D/g,``);if(e){let t=RegExp(`\\+?${e}`,`g`);r=r.replace(t,` `)}}return r.replace(/\s+/g,` `).trim()}function Vt(e,t){let n=me({From:t,ChatType:`group`,Provider:`whatsapp`})?.id,r=e.channels?.whatsapp,i=!!(r?.groupAllowFrom?.length||r?.allowFrom?.length);return B({cfg:e,channel:`whatsapp`,groupId:n??t,hasGroupAllowFrom:i})}function Ht(e,t){let n=me({From:t,ChatType:`group`,Provider:`whatsapp`})?.id;return z({cfg:e,channel:`whatsapp`,groupId:n??t})}function Ut(e){let t=pe(N(e.cfg.session?.store,{agentId:e.agentId}))[e.sessionKey],n=Ht(e.cfg,e.conversationId)?`mention`:`always`;return C(t?.groupActivation)??n}function Wt(e,t,n){for(let r of e){let e=K(r)??r;!e||t.has(e)||(t.add(e),n.push(e))}}function Gt(e,t,n,r){if(!n||!r)return;let i=K(n)??n;if(!i)return;let a=e.get(t);a||(a=new Map,e.set(t,a)),a.set(i,r)}function Kt(e){let{participants:t,roster:n,fallbackE164:r}=e,i=new Set,a=[];if(t?.length&&Wt(t,i,a),n&&Wt(n.keys(),i,a),a.length===0&&r){let e=K(r)??r;e&&a.push(e)}if(a.length!==0)return a.map(e=>{let t=n?.get(e);return t?`${t} (${e})`:e}).join(`, `)}function qt(e,t){let n=K(t.senderE164??``);return n?It(e,t.selfE164??void 0).includes(n):!1}function Jt(e){let t=e.msg.senderName&&e.msg.senderE164?`${e.msg.senderName} (${e.msg.senderE164})`:e.msg.senderName??e.msg.senderE164??`Unknown`;x({historyMap:e.groupHistories,historyKey:e.groupHistoryKey,limit:e.groupHistoryLimit,entry:{sender:t,body:e.msg.body,timestamp:e.msg.timestamp,id:e.msg.id,senderJid:e.msg.senderJid}})}function Yt(e,t){return e.logVerbose(t),Jt({msg:e.msg,groupHistories:e.groupHistories,groupHistoryKey:e.groupHistoryKey,groupHistoryLimit:e.groupHistoryLimit}),{shouldProcess:!1}}function Xt(e){let t=Vt(e.cfg,e.conversationId);if(t.allowlistEnabled&&!t.allowed)return e.logVerbose(`Skipping group message ${e.conversationId} (not in allowlist)`),{shouldProcess:!1};Gt(e.groupMemberNames,e.groupHistoryKey,e.msg.senderE164,e.msg.senderName);let n=Mt(e.cfg,e.agentId),r=Bt(e.msg.body,n.mentionRegexes,e.msg.selfE164),i=_(r),a=qt(e.baseMentionConfig,e.msg),s=a&&l(r,e.cfg);if(i.hasCommand&&!a)return Yt(e,`Ignoring /activation from non-owner in group ${e.conversationId}`);let c=Ft(e.msg,n,e.authDir);e.replyLogger.debug({conversationId:e.conversationId,wasMentioned:c.wasMentioned,...c.details},`group mention debug`);let u=c.wasMentioned,d=Ut({cfg:e.cfg,agentId:e.agentId,sessionKey:e.sessionKey,conversationId:e.conversationId})!==`always`,f=e.msg.selfJid?.replace(/:\\d+/,``),p=e.msg.replyToSenderJid?.replace(/:\\d+/,``),m=e.msg.selfE164?K(e.msg.selfE164):null,h=e.msg.replyToSenderE164?K(e.msg.replyToSenderE164):null,g=o({requireMention:d,canDetectMention:!0,wasMentioned:u,implicitMention:!!(f&&p&&f===p||m&&h&&m===h),shouldBypassMention:s});return e.msg.wasMentioned=g.effectiveWasMentioned,!s&&d&&g.shouldSkip?Yt(e,`Group message stored for context (no mention detected) in ${e.conversationId}: ${e.msg.body}`):{shouldProcess:!0}}function Zt(e,t){e.add(t),t.finally(()=>{e.delete(t)})}function Qt(e){let t=N(e.cfg.session?.store,{agentId:e.storeAgentId}),n=I({storePath:t,sessionKey:e.sessionKey,deliveryContext:{channel:e.channel,to:e.to,accountId:e.accountId},ctx:e.ctx}).catch(n=>{e.warn({error:J(n),storePath:t,sessionKey:e.sessionKey,to:e.to},`failed updating last route`)});Zt(e.backgroundTasks,n)}function $t(e){return e.chatType===`group`?e.conversationId??e.from:e.senderE164?K(e.senderE164)??e.senderE164:e.from.includes(`@`)?q(e.from)??e.from:K(e.from)??e.from}function en(e,t=400){return!e||e.length<=t?e:`${e.slice(0,t)}… (truncated ${e.length-t} chars)`}function tn(e){let t=(e instanceof Error?`${e.message}\n${e.stack??``}`:(e=>{if(e==null)return``;if(typeof e==`string`)return e;if(e instanceof Error)return`${e.message}\n${e.stack??``}`;if(typeof e==`object`)try{return JSON.stringify(e)}catch{return Object.prototype.toString.call(e)}return typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`?String(e):typeof e==`symbol`?e.description??e.toString():typeof e==`function`?e.name?`[function ${e.name}]`:`[function]`:Object.prototype.toString.call(e)})(e)).toLowerCase();return t.includes(`unsupported state or unable to authenticate data`)||t.includes(`bad mac`)?t.includes(`@whiskeysockets/baileys`)||t.includes(`baileys`)||t.includes(`noise-handler`)||t.includes(`aesdecryptgcm`):!1}function nn(e){if(e.isReasoning===!0)return!0;let t=e.text;return typeof t==`string`?t.trimStart().toLowerCase().startsWith(`reasoning:`):!1}async function rn(e){let{replyResult:t,msg:n,maxMediaBytes:r,textLimit:i,replyLogger:a,connectionId:o,skipLog:s}=e,c=Date.now();if(nn(t)){Q.debug(`Suppressed reasoning payload to ${n.from}`);return}let l=e.tableMode??`code`,u=e.chunkMode??`length`,d=Ae(Le(Fe(t.text||``,l)),i,u),f=t.mediaUrls?.length?t.mediaUrls:t.mediaUrl?[t.mediaUrl]:[],p=async(e,t,r=3)=>{let i;for(let a=1;a<=r;a++)try{return await e()}catch(e){i=e;let o=J(e),s=a===r;if(!/closed|reset|timed\s*out|disconnect/i.test(o)||s)throw e;let c=500*a;W(`Retrying ${t} to ${n.from} after failure (${a}/${r-1}) in ${c}ms: ${o}`),await _e(c)}throw i};if(f.length===0&&d.length){let e=d.length;for(let[t,r]of d.entries()){let i=Date.now();if(await p(()=>n.reply(r),`text`),!s){let r=Date.now()-i;Q.debug(`Sent chunk ${t+1}/${e} to ${n.from} (${r.toFixed(0)}ms)`)}}a.info({correlationId:n.id??Y(),connectionId:o??null,to:n.from,from:n.to,text:en(t.text,240),mediaUrl:null,mediaSizeBytes:null,mediaKind:null,durationMs:Date.now()-c},`auto-reply sent (text)`);return}let m=[...d];for(let[t,i]of f.entries()){let s=t===0&&m.shift()||void 0;try{let t=await ke(i,{maxBytes:r,localRoots:e.mediaLocalRoots});if(U()&&(W(`Web auto-reply media size: ${(t.buffer.length/(1024*1024)).toFixed(2)}MB`),W(`Web auto-reply media source: ${i} (kind ${t.kind})`)),t.kind===`image`)await p(()=>n.sendMedia({image:t.buffer,caption:s,mimetype:t.contentType}),`media:image`);else if(t.kind===`audio`)await p(()=>n.sendMedia({audio:t.buffer,ptt:!0,mimetype:t.contentType,caption:s}),`media:audio`);else if(t.kind===`video`)await p(()=>n.sendMedia({video:t.buffer,caption:s,mimetype:t.contentType}),`media:video`);else{let e=t.fileName??i.split(`/`).pop()??`file`,r=t.contentType??`application/octet-stream`;await p(()=>n.sendMedia({document:t.buffer,fileName:e,caption:s,mimetype:r}),`media:document`)}Q.info(`Sent media reply to ${n.from} (${(t.buffer.length/(1024*1024)).toFixed(2)}MB)`),a.info({correlationId:n.id??Y(),connectionId:o??null,to:n.from,from:n.to,text:s??null,mediaUrl:i,mediaSizeBytes:t.buffer.length,mediaKind:t.kind,durationMs:Date.now()-c},`auto-reply sent (media)`)}catch(e){if(Q.error(`Failed sending web media to ${n.from}: ${J(e)}`),a.warn({err:e,mediaUrl:i},`failed to send web media reply`),t===0){let t=e instanceof Error?`⚠️ Media failed: ${e.message}`:`⚠️ Media failed.`,r=[m.shift()??s??``,t].filter(Boolean).join(`
5
5
  `);r&&(Q.warn(`Media skipped; sent text-only to ${n.from}`),await n.reply(r))}}}for(let e of m)await n.reply(e)}function an(e){if(!e.msg.id)return;let t=e.cfg.channels?.whatsapp?.ackReaction,n=(t?.emoji??``).trim(),r=t?.direct??!0,i=t?.group??`mentions`,a=e.msg.conversationId??e.msg.from,o=e.msg.chatType===`group`?Ut({cfg:e.cfg,agentId:e.agentId,sessionKey:e.sessionKey,conversationId:a}):null;se({emoji:n,isDirect:e.msg.chatType===`direct`,isGroup:e.msg.chatType===`group`,directEnabled:r,groupMode:i,wasMentioned:e.msg.wasMentioned===!0,groupActivated:o===`always`})&&(e.info({chatId:e.msg.chatId,messageId:e.msg.id,emoji:n},`sending ack reaction`),Re(e.msg.chatId,e.msg.id,n,{verbose:e.verbose,fromMe:!1,participant:e.msg.senderJid,accountId:e.accountId}).catch(t=>{e.warn({error:J(t),chatId:e.msg.chatId,messageId:e.msg.id},`failed to send ack reaction`),W(`WhatsApp ack reaction failed for chat ${e.msg.chatId}: ${J(t)}`)}))}function on(e){return e.replyToBody?`[Replying to ${e.replyToSender??`unknown sender`}${e.replyToId?` id:${e.replyToId}`:``}]\n${e.replyToBody}\n[/Replying]`:null}function sn(e){let{cfg:t,msg:n,agentId:r,previousTimestamp:i,envelope:a}=e,o=h(t,r,{configured:t.channels?.whatsapp?.messagePrefix,hasAllowFrom:(t.channels?.whatsapp?.allowFrom?.length??0)>0}),s=o?`${o} `:``,c=on(n),l=`${s}${n.body}${c?`\n\n${c}`:``}`;return oe({channel:`WhatsApp`,from:n.chatType===`group`?n.from:n.from?.replace(/^whatsapp:/,``),timestamp:n.timestamp,body:l,chatType:n.chatType,sender:{name:n.senderName,e164:n.senderE164,id:n.senderJid},previousTimestamp:i,envelope:a,fromMe:n.fromMe})}async function cn(e){let t=e.cfg.commands?.useAccessGroups!==!1;if(!t)return!0;let n=e.msg.chatType===`group`,i=K(n?e.msg.senderE164??``:e.msg.senderE164??e.msg.from??``);if(!i)return!1;let a=L({cfg:e.cfg,accountId:e.msg.accountId}),o=a.dmPolicy??`pairing`,s=a.groupPolicy??`allowlist`,c=a.allowFrom??[],l=a.groupAllowFrom??(c.length>0?c:void 0),u=n?[]:await d({provider:`whatsapp`,accountId:e.msg.accountId,dmPolicy:o});return r({isGroup:n,dmPolicy:o,groupPolicy:s,allowFrom:c.length>0?c:e.msg.selfE164?[e.msg.selfE164]:[],groupAllowFrom:l,storeAllowFrom:u,isSenderAllowed:e=>e.includes(`*`)?!0:e.map(e=>K(String(e))).filter(e=>!!e).includes(i),command:{useAccessGroups:t,allowTextCommands:!0,hasControlCommand:!0}}).commandAuthorized}function ln(e){let t=L({cfg:e.cfg,accountId:e.msg.accountId});return f({dmScope:e.cfg.session?.dmScope,allowFrom:t.allowFrom,normalizeEntry:e=>K(e)})}async function un(e){let t=e.msg.conversationId??e.msg.from,{storePath:r,envelopeOptions:a,previousTimestamp:o}=ie({cfg:e.cfg,agentId:e.route.agentId,sessionKey:e.route.sessionKey}),s=sn({cfg:e.cfg,msg:e.msg,agentId:e.route.agentId,previousTimestamp:o,envelope:a}),c=!1;if(e.msg.chatType===`group`){let n=e.groupHistory??e.groupHistories.get(e.groupHistoryKey)??[];n.length>0&&(s=b({entries:n.map(e=>({sender:e.sender,body:e.body,timestamp:e.timestamp})),currentMessage:s,excludeLast:!1,formatEntry:e=>oe({channel:`WhatsApp`,from:t,timestamp:e.timestamp,body:e.body,chatType:`group`,senderLabel:e.sender,envelope:a})})),c=!(e.suppressGroupHistoryClear??!1)}let l=e.buildCombinedEchoKey({sessionKey:e.route.sessionKey,combinedBody:s});if(e.echoHas(l))return W(`Skipping auto-reply: detected echo for combined message`),e.echoForget(l),!1;an({cfg:e.cfg,msg:e.msg,agentId:e.route.agentId,sessionKey:e.route.sessionKey,conversationId:t,verbose:e.verbose,accountId:e.route.accountId,info:e.replyLogger.info.bind(e.replyLogger),warn:e.replyLogger.warn.bind(e.replyLogger)});let u=e.msg.id??Y();e.replyLogger.info({connectionId:e.connectionId,correlationId:u,from:e.msg.chatType===`group`?t:e.msg.from,to:e.msg.to,body:en(s,240),mediaType:e.msg.mediaType??null,mediaPath:e.msg.mediaPath??null},`inbound web message`);let d=e.msg.chatType===`group`?t:e.msg.from,f=e.msg.mediaType?`, ${e.msg.mediaType}`:``;Z.info(`Inbound message ${d} -> ${e.msg.to} (${e.msg.chatType}${f}, ${s.length} chars)`),U()&&Z.debug(`Inbound body: ${en(s,400)}`);let h=e.msg.chatType===`group`?void 0:e.msg.senderE164?K(e.msg.senderE164):e.msg.from.includes(`@`)?q(e.msg.from):K(e.msg.from),g=e.maxMediaTextChunkLimit??je(e.cfg,`whatsapp`),_=Me(e.cfg,`whatsapp`,e.route.accountId),y=Ne({cfg:e.cfg,channel:`whatsapp`,accountId:e.route.accountId}),x=Oe(e.cfg,e.route.agentId),ee=!1,C=!1,te=n(e.msg.body,e.cfg)?await cn({cfg:e.cfg,msg:e.msg}):void 0,ne=e.cfg.messages?.responsePrefix,{onModelSelected:re,...w}=m({cfg:e.cfg,agentId:e.route.agentId,channel:`whatsapp`,accountId:e.route.accountId}),T=e.msg.chatType!==`group`&&!!e.msg.selfE164&&K(e.msg.from)===K(e.msg.selfE164??``),ae=w.responsePrefix??(ne===void 0&&T?p(e.cfg,e.route.agentId):void 0),se=e.msg.chatType===`group`?(e.groupHistory??e.groupHistories.get(e.groupHistoryKey)??[]).map(e=>({sender:e.sender,body:e.body,timestamp:e.timestamp})):void 0,E=i({Body:s,BodyForAgent:e.msg.body,InboundHistory:se,RawBody:e.msg.body,CommandBody:e.msg.body,From:e.msg.from,To:e.msg.to,SessionKey:e.route.sessionKey,AccountId:e.route.accountId,MessageSid:e.msg.id,ReplyToId:e.msg.replyToId,ReplyToBody:e.msg.replyToBody,ReplyToSender:e.msg.replyToSender,MediaPath:e.msg.mediaPath,MediaUrl:e.msg.mediaUrl,MediaType:e.msg.mediaType,ChatType:e.msg.chatType,ConversationLabel:e.msg.chatType===`group`?t:e.msg.from,GroupSubject:e.msg.groupSubject,GroupMembers:Kt({participants:e.msg.groupParticipants,roster:e.groupMemberNames.get(e.groupHistoryKey),fallbackE164:e.msg.senderE164}),SenderName:e.msg.senderName,SenderId:e.msg.senderJid?.trim()||e.msg.senderE164,SenderE164:e.msg.senderE164,CommandAuthorized:te,WasMentioned:e.msg.wasMentioned,...e.msg.location?Te(e.msg.location):{},Provider:`whatsapp`,Surface:`whatsapp`,OriginatingChannel:`whatsapp`,OriginatingTo:e.msg.from}),D=ln({cfg:e.cfg,msg:e.msg}),O=!D||D===h,k=S({route:e.route,sessionKey:e.route.sessionKey});h&&k===e.route.mainSessionKey&&O?Qt({cfg:e.cfg,backgroundTasks:e.backgroundTasks,storeAgentId:e.route.agentId,sessionKey:e.route.mainSessionKey,channel:`whatsapp`,to:h,accountId:e.route.accountId,ctx:E,warn:e.replyLogger.warn.bind(e.replyLogger)}):h&&k===e.route.mainSessionKey&&D&&W(`Skipping main-session last route update for ${h} (pinned owner ${D})`);let A=ue({storePath:r,sessionKey:e.route.sessionKey,ctx:E}).catch(t=>{e.replyLogger.warn({error:J(t),storePath:r,sessionKey:e.route.sessionKey},`failed updating session meta`)});Zt(e.backgroundTasks,A);let{queuedFinal:j}=await v({ctx:E,cfg:e.cfg,replyResolver:e.replyResolver,dispatcherOptions:{...w,responsePrefix:ae,onHeartbeatStrip:()=>{ee||(ee=!0,W(`Stripped stray HEARTBEAT_OK token from web reply`))},deliver:async(n,r)=>{if(r.kind!==`final`)return;await rn({replyResult:n,msg:e.msg,mediaLocalRoots:x,maxMediaBytes:e.maxMediaBytes,textLimit:g,chunkMode:_,replyLogger:e.replyLogger,connectionId:e.connectionId,skipLog:!1,tableMode:y}),C=!0;let i=n.text?!0:void 0;e.rememberSentText(n.text,{combinedBody:s,combinedBodySessionKey:e.route.sessionKey,logVerboseMessage:i});let a=e.msg.chatType===`group`?t:e.msg.from??`unknown`,o=!!(n.mediaUrl||n.mediaUrls?.length);if(Q.info(`Auto-replied to ${a}${o?` (media)`:``}`),U()){let e=n.text==null?`<media>`:en(n.text,400);Q.debug(`Reply body: ${e}${o?` (media)`:``}`)}},onError:(n,r)=>{let i=r.kind===`tool`?`tool update`:r.kind===`block`?`block update`:`auto-reply`;Q.error(`Failed sending web ${i} to ${e.msg.from??t}: ${J(n)}`)},onReplyStart:e.msg.sendComposing},replyOptions:{disableBlockStreaming:!0,onModelSelected:re}});return j?(c&&e.groupHistories.set(e.groupHistoryKey,[]),C):(c&&e.groupHistories.set(e.groupHistoryKey,[]),W(`Skipping auto-reply: silent token or no text/media returned from resolver`),!1)}function dn(e){let t=async(t,n,r,i)=>un({cfg:e.cfg,msg:t,route:n,groupHistoryKey:r,groupHistories:e.groupHistories,groupMemberNames:e.groupMemberNames,connectionId:e.connectionId,verbose:e.verbose,maxMediaBytes:e.maxMediaBytes,replyResolver:e.replyResolver,replyLogger:e.replyLogger,backgroundTasks:e.backgroundTasks,rememberSentText:e.echoTracker.rememberText,echoHas:e.echoTracker.has,echoForget:e.echoTracker.forget,buildCombinedEchoKey:e.echoTracker.buildCombinedKey,groupHistory:i?.groupHistory,suppressGroupHistoryClear:i?.suppressGroupHistoryClear});return async n=>{let r=n.conversationId??n.from,i=$t(n),a=ee({cfg:P(),channel:`whatsapp`,accountId:n.accountId,peer:{kind:n.chatType===`group`?`group`:`direct`,id:i}}),o=n.chatType===`group`?ce({channel:`whatsapp`,accountId:a.accountId,peerKind:`group`,peerId:i}):a.sessionKey;if(n.from===n.to&&W(`📱 Same-phone mode detected (from === to: ${n.from})`),e.echoTracker.has(n.body)){W(`Skipping auto-reply: detected echo (message matches recently sent text)`),e.echoTracker.forget(n.body);return}if(n.chatType===`group`){let t={From:n.from,To:n.to,SessionKey:a.sessionKey,AccountId:a.accountId,ChatType:n.chatType,ConversationLabel:r,GroupSubject:n.groupSubject,SenderName:n.senderName,SenderId:n.senderJid?.trim()||n.senderE164,SenderE164:n.senderE164,Provider:`whatsapp`,Surface:`whatsapp`,OriginatingChannel:`whatsapp`,OriginatingTo:r};if(Qt({cfg:e.cfg,backgroundTasks:e.backgroundTasks,storeAgentId:a.agentId,sessionKey:a.sessionKey,channel:`whatsapp`,to:r,accountId:a.accountId,ctx:t,warn:e.replyLogger.warn.bind(e.replyLogger)}),!Xt({cfg:e.cfg,msg:n,conversationId:r,groupHistoryKey:o,agentId:a.agentId,sessionKey:a.sessionKey,baseMentionConfig:e.baseMentionConfig,authDir:e.account.authDir,groupHistories:e.groupHistories,groupHistoryLimit:e.groupHistoryLimit,groupMemberNames:e.groupMemberNames,logVerbose:W,replyLogger:e.replyLogger}).shouldProcess)return}else !n.senderE164&&i&&i.startsWith(`+`)&&(n.senderE164=K(i)??n.senderE164);await zt({cfg:e.cfg,msg:n,peerId:i,route:a,groupHistoryKey:o,groupHistories:e.groupHistories,processMessage:t})||await t(n,a,o)}}function fn(e){return e===440}async function pn(t,n=jt,r=!0,i=w,a=ye,o,s={}){let c=Y(),u=ve({module:`web-auto-reply`,runId:c}),d=ve({module:`web-heartbeat`,runId:c}),f=ve({module:`web-reconnect`,runId:c}),p={running:!0,connected:!1,reconnectAttempts:0,lastConnectedAt:null,lastDisconnect:null,lastMessageAt:null,lastEventAt:null,lastError:null},m=()=>{s.statusSink?.({...p,lastDisconnect:p.lastDisconnect?{...p.lastDisconnect}:null})};m();let h=P(),_=L({cfg:h,accountId:s.accountId}),v={...h,channels:{...h.channels,whatsapp:{...h.channels?.whatsapp,ackReaction:_.ackReaction,messagePrefix:_.messagePrefix,allowFrom:_.allowFrom,groupAllowFrom:_.groupAllowFrom,groupPolicy:_.groupPolicy,textChunkLimit:_.textChunkLimit,chunkMode:_.chunkMode,mediaMaxMb:_.mediaMaxMb,blockStreaming:_.blockStreaming,groups:_.groups}}},b=F(_),x=Qe(v,s.heartbeatSeconds),S=$e(v,s.reconnect),C=Mt(v),ne=v.channels?.whatsapp?.accounts?.[s.accountId??``]?.historyLimit??v.channels?.whatsapp?.historyLimit??v.messages?.groupChat?.historyLimit??50,re=new Map,ie=new Map,oe=Lt({maxItems:100,logVerbose:W}),se=s.sleep??((e,t)=>T(e,t??o)),E=()=>o?.aborted===!0,D=o&&new Promise(e=>o.addEventListener(`abort`,()=>e(`aborted`),{once:!0})),O=process.getMaxListeners?.()??10;process.setMaxListeners&&O<50&&process.setMaxListeners(50);let k=!1,A=()=>{k=!0};process.once(`SIGINT`,A);let j=0;for(;!E();){let c=Y(),h=Date.now(),T=null,O=null,M=null,ce=0,N=null,ue=s.messageTimeoutMs??1800*1e3,P=s.watchdogCheckMs??60*1e3,F=new Set,de=dn({cfg:v,verbose:t,connectionId:c,maxMediaBytes:b,groupHistoryLimit:ne,groupHistories:re,groupMemberNames:ie,echoTracker:oe,backgroundTasks:F,replyResolver:i??w,replyLogger:u,baseMentionConfig:C,account:_}),fe=e({cfg:v,channel:`whatsapp`}),I=await(n??jt)({verbose:t,accountId:_.accountId,authDir:_.authDir,mediaMaxMb:_.mediaMaxMb,sendReadReceipts:_.sendReadReceipts,debounceMs:fe,shouldDebounce:e=>e.mediaPath||e.mediaType||e.location||e.replyToId||e.replyToBody?!1:!l(e.body,v),onMessage:async e=>{ce+=1,M=Date.now(),p.lastMessageAt=M,p.lastEventAt=M,m(),await de(e)}});Object.assign(p,y()),p.lastError=null,m();let{e164:pe}=le(_.authDir),me=ee({cfg:v,channel:`whatsapp`,accountId:_.accountId});g(`WhatsApp gateway connected${pe?` as ${pe}`:``}.`,{sessionKey:me.sessionKey}),Ie(_.accountId,I),N=De(e=>{if(!tn(e))return!1;let t=J(e);return f.warn({connectionId:c,error:t},`web reconnect: unhandled rejection from WhatsApp socket; forcing reconnect`),I.signalClose?.({status:499,isLoggedOut:!1,error:e}),!0});let L=async()=>{Ie(_.accountId,null),N&&=(N(),null),T&&clearInterval(T),O&&clearInterval(O),F.size>0&&(await Promise.allSettled(F),F.clear());try{await I.close()}catch(e){W(`Socket close failed: ${J(e)}`)}};if(r&&(T=setInterval(()=>{let e=ge(_.authDir),t=M?Math.floor((Date.now()-M)/6e4):null,n={connectionId:c,reconnectAttempts:j,messagesHandled:ce,lastMessageAt:M,authAgeMs:e,uptimeMs:Date.now()-h,...t!==null&&t>30?{minutesSinceLastMessage:t}:{}};t&&t>30?d.warn(n,`⚠️ web gateway heartbeat - no messages in 30+ minutes`):d.info(n,`web gateway heartbeat`)},x*1e3),O=setInterval(()=>{if(!M)return;let e=Date.now()-M;if(e<=ue)return;let t=Math.floor(e/6e4);d.warn({connectionId:c,minutesSinceLastMessage:t,lastMessageAt:new Date(M),messagesHandled:ce},`Message timeout detected - forcing reconnect`),et.warn(`No messages received in ${t}m - restarting connection`),L().catch(e=>{W(`Close listener failed: ${J(e)}`)}),I.signalClose?.({status:499,isLoggedOut:!1,error:`watchdog-timeout`})},P)),X.info(`Listening for personal WhatsApp inbound messages.`),(process.stdout.isTTY||process.stderr.isTTY)&&X.raw(`Ctrl+C to stop.`),!r){await L(),process.removeListener(`SIGINT`,A);return}let R=await Promise.race([I.onClose?.catch(e=>(f.error({error:J(e)},`listener.onClose rejected`),{status:500,isLoggedOut:!1,error:e}))??tt(),D??tt()]);if(Date.now()-h>x*1e3&&(j=0),p.reconnectAttempts=j,m(),E()||k||R===`aborted`){await L();break}let z=(typeof R==`object`&&R&&`status`in R?R.status:void 0)??`unknown`,B=typeof R==`object`&&R&&`isLoggedOut`in R&&R.isLoggedOut,V=J(R);if(p.connected=!1,p.lastEventAt=Date.now(),p.lastDisconnect={at:p.lastEventAt,status:typeof z==`number`?z:void 0,error:V,loggedOut:!!B},p.lastError=V,p.reconnectAttempts=j,m(),f.info({connectionId:c,status:z,loggedOut:B,reconnectAttempts:j,error:V},`web reconnect: connection closed`),g(`WhatsApp gateway disconnected (status ${z??`unknown`})`,{sessionKey:me.sessionKey}),B){a.error(`WhatsApp session logged out. Run \`${he(`openclaw channels login --channel web`)}\` to relink.`),await L();break}if(fn(z)){f.warn({connectionId:c,status:z,error:V},`web reconnect: non-retryable close status; stopping monitor`),a.error(`WhatsApp Web connection closed (status ${z}: session conflict). Resolve conflicting WhatsApp Web sessions, then relink with \`${he(`openclaw channels login --channel web`)}\`. Stopping web monitoring.`),await L();break}if(j+=1,p.reconnectAttempts=j,m(),S.maxAttempts>0&&j>=S.maxAttempts){f.warn({connectionId:c,status:z,reconnectAttempts:j,maxAttempts:S.maxAttempts},`web reconnect: max attempts reached; continuing in degraded mode`),a.error(`WhatsApp Web reconnect: max attempts reached (${j}/${S.maxAttempts}). Stopping web monitoring.`),await L();break}let H=te(S,j);f.info({connectionId:c,status:z,reconnectAttempts:j,maxAttempts:S.maxAttempts||`unlimited`,delayMs:H},`web reconnect: scheduling retry`),a.error(`WhatsApp Web connection closed (status ${z}). Retry ${j}/${S.maxAttempts||`∞`} in ${ae(H)}… (${V})`),await L();try{await se(H,o)}catch{break}}p.running=!1,p.connected=!1,p.lastEventAt=Date.now(),m(),process.removeListener(`SIGINT`,A)}export{fe as WA_WEB_AUTH_DIR,He as createWaSocket,de as logWebSelfId,Ue as loginWeb,pn as monitorWebChannel,jt as monitorWebInbox,R as pickWebChannel,ze as sendMessageWhatsApp,Be as waitForWaConnection,V as webAuthExists};
6
- //# sourceMappingURL=web-CkdCvvR-.js.map
6
+ //# sourceMappingURL=web-Jr2J55LO.js.map
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./paths-Bcdg3ma0.cjs`),t=require(`./paths-D90l3h_o.cjs`),n=require(`./sessions-Dz5JUL8j.cjs`),r=require(`./logger-DUYnS-W3.cjs`);require(`./proxy-env-DQoJjkWE.cjs`),require(`./send-D3imkSlz.cjs`);const i=require(`./common-B4iFXuoZ.cjs`),a=require(`./resolve-outbound-target-MS6Xpp17.cjs`),o=require(`./send-Co_Wy2kT.cjs`),s=require(`./reply-0zCEbT4w.cjs`);require(`./github-copilot-token-zskwAEpd.cjs`),require(`./send-CFuJjCNB.cjs`);const c=require(`./channel-web-DN5La-Ol.cjs`);require(`./tokens-CXsPDJTr.cjs`),require(`./audio-transcription-runner-CH5CoZrF.cjs`),require(`./image-DegWnAZU.cjs`),require(`./fetch-guard-CIJUkBIL.cjs`),require(`./api-key-rotation-DDCwA0KM.cjs`),require(`./local-roots-Cu7YCpql.cjs`),require(`./proxy-fetch-BzcKzknk.cjs`),require(`./deliver-DCrO9mvv.cjs`),require(`./commands-registry-CtYCWfuM.cjs`),require(`./fetch-ClKErpni.cjs`),require(`./diagnostic-8iX73nz_.cjs`),require(`./pi-model-discovery-D5xlUS2J.cjs`),require(`./ir-C3VNqnc2.cjs`),require(`./render-6fCdtAr6.cjs`),require(`./send-Cox_iyYB.cjs`),require(`./outbound-attachment-Cujprd6T.cjs`),require(`./send-61GHLNYP.cjs`),require(`./channel-activity-CLUi31fX.cjs`),require(`./tables-CnrHab5d.cjs`),require(`./fetch-DQxuOB8o.cjs`),require(`./skill-commands-KyN0FGaC.cjs`),require(`./query-expansion-0zYzKrrd.cjs`),require(`./manager-gE9187gu.cjs`),require(`./outbound-CW3o4Eng.cjs`),require(`./session-WRCBgAzG.cjs`);const l=require(`./login-UrWNtI80.cjs`);let u=require(`zod`),d=require(`node:path`);d=e.p(d);function f(e){return{success:!1,error:{issues:[{path:[],message:e}]}}}function p(){return{safeParse(e){return e===void 0?{success:!0,data:void 0}:!e||typeof e!=`object`||Array.isArray(e)?f(`expected config object`):Object.keys(e).length>0?f(`config must be empty`):{success:!0,data:e}},jsonSchema:{type:`object`,additionalProperties:!1,properties:{}}}}function m(e,t){let n=e.channels?.[t];return!!(n?.accounts&&Object.keys(n.accounts).length>0)}function h(e){return e.alwaysUseAccounts||e.accountId!==`default`?!0:m(e.cfg,e.channelKey)}function g(e){let n=e.name?.trim();if(!n)return e.cfg;let r=t.zt(e.accountId),i=e.cfg.channels?.[e.channelKey],a=typeof i==`object`&&i?i:void 0;if(!h({cfg:e.cfg,channelKey:e.channelKey,accountId:r,alwaysUseAccounts:e.alwaysUseAccounts})&&r===`default`){let t=a??{};return{...e.cfg,channels:{...e.cfg.channels,[e.channelKey]:{...t,name:n}}}}let o=a?.accounts??{},s=o[r]??{},c=r===`default`?(({name:e,...t})=>t)(a??{}):a??{};return{...e.cfg,channels:{...e.cfg.channels,[e.channelKey]:{...c,accounts:{...o,[r]:{...s,name:n}}}}}}function _(e){if(e.alwaysUseAccounts)return e.cfg;let n=e.cfg.channels?.[e.channelKey],r=n?.name?.trim();if(!r)return e.cfg;let i={...n?.accounts},a=i.default??{};a.name||(i[t.Rt]={...a,name:r});let{name:o,...s}=n??{};return{...e.cfg,channels:{...e.cfg.channels,[e.channelKey]:{...s,accounts:i}}}}const v=u.z.union([u.z.string(),u.z.number()]);u.z.array(v).optional();function y(e){let t=e;return typeof t.toJSONSchema==`function`?{schema:t.toJSONSchema({target:`draft-07`,unrepresentable:`any`})}:{schema:{type:`object`,additionalProperties:!0}}}function b(e,t,n={}){let r={...e??void 0};for(let[e,i]of Object.entries(t)){if(i===void 0){n.unsetOnUndefined?.includes(e)&&delete r[e];continue}r[e]=i}return r}function x(e,t,n){return{...e,channels:{...e.channels,whatsapp:b(e.channels?.whatsapp,t,n)}}}const S={openai:[`OPENAI_API_KEY`],anthropic:[`ANTHROPIC_API_KEY`],google:[`GEMINI_API_KEY`],minimax:[`MINIMAX_API_KEY`],"minimax-cn":[`MINIMAX_API_KEY`],moonshot:[`MOONSHOT_API_KEY`],"kimi-coding":[`KIMI_API_KEY`,`KIMICODE_API_KEY`],synthetic:[`SYNTHETIC_API_KEY`],venice:[`VENICE_API_KEY`],zai:[`ZAI_API_KEY`,`Z_AI_API_KEY`],xiaomi:[`XIAOMI_API_KEY`],openrouter:[`OPENROUTER_API_KEY`],"cloudflare-ai-gateway":[`CLOUDFLARE_AI_GATEWAY_API_KEY`],litellm:[`LITELLM_API_KEY`],"vercel-ai-gateway":[`AI_GATEWAY_API_KEY`],opencode:[`OPENCODE_API_KEY`,`OPENCODE_ZEN_API_KEY`],"opencode-go":[`OPENCODE_API_KEY`,`OPENCODE_ZEN_API_KEY`],together:[`TOGETHER_API_KEY`],huggingface:[`HUGGINGFACE_HUB_TOKEN`,`HF_TOKEN`],qianfan:[`QIANFAN_API_KEY`],xai:[`XAI_API_KEY`],mistral:[`MISTRAL_API_KEY`],kilocode:[`KILOCODE_API_KEY`],modelstudio:[`MODELSTUDIO_API_KEY`],volcengine:[`VOLCANO_ENGINE_API_KEY`],byteplus:[`BYTEPLUS_API_KEY`]},C=[`VOYAGE_API_KEY`,`GROQ_API_KEY`,`DEEPGRAM_API_KEY`,`CEREBRAS_API_KEY`,`NVIDIA_API_KEY`,`COPILOT_GITHUB_TOKEN`,`GH_TOKEN`,`GITHUB_TOKEN`,`ANTHROPIC_OAUTH_TOKEN`,`CHUTES_OAUTH_TOKEN`,`CHUTES_API_KEY`,`QWEN_OAUTH_TOKEN`,`QWEN_PORTAL_API_KEY`,`MINIMAX_OAUTH_TOKEN`,`OLLAMA_API_KEY`,`VLLM_API_KEY`],w=[...new Set(Object.values(S).flatMap(e=>e))];[...new Set([...w,...C])];async function T(e){let n=e.listAccountIds(e.cfg),r=e.currentId?.trim()||e.defaultAccountId||`default`,i=await e.prompter.select({message:`${e.label} account`,options:[...n.map(e=>({value:e,label:e===`default`?`default (primary)`:e})),{value:`__new__`,label:`Add a new account`}],initialValue:r});if(i!==`__new__`)return t.zt(i);let a=await e.prompter.text({message:`New ${e.label} account id`,validate:e=>e?.trim()?void 0:`Required`}),o=t.zt(String(a));return String(a).trim()!==o&&await e.prompter.note(`Normalized account id to "${o}".`,`${e.label} account`),o}const E=async e=>await T(e);function D(e){return e.split(/[\n,;]+/g).map(e=>e.trim()).filter(Boolean)}function O(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 k(e){return e.accountId?.trim()?t.zt(e.accountId):e.defaultAccountId}async function A(e){let n=e.accountOverride?.trim(),r=n?t.zt(n):e.defaultAccountId;return e.shouldPromptAccountIds&&!n&&(r=await E({cfg:e.cfg,prompter:e.prompter,label:e.label,currentId:r,listAccountIds:e.listAccountIds,defaultAccountId:e.defaultAccountId})),r}const j=`whatsapp`;function M(e,t){return x(e,{dmPolicy:t})}function N(e,t){return x(e,{allowFrom:t},{unsetOnUndefined:[`allowFrom`]})}function P(e,t){return x(e,{selfChatMode:t})}async function F(e,t){let{authDir:i}=n.ks({cfg:e,accountId:t});return await r.g(d.default.join(i,`creds.json`))}async function I(e){let{prompter:t,existingAllowFrom:n}=e;await t.note(`We need the sender/owner number so OpenClaw can allowlist you.`,`WhatsApp number`);let i=await t.text({message:`Your personal WhatsApp number (the phone you will message from)`,placeholder:`+15555550123`,initialValue:n[0],validate:e=>{let t=String(e??``).trim();if(!t)return`Required`;if(!r.h(t))return`Invalid number: ${t}`}}),a=r.h(String(i).trim());if(!a)throw Error(`Invalid WhatsApp owner number (expected E.164 after validation).`);return{normalized:a,allowFrom:O([...n.filter(e=>e!==`*`),a],r.h)}}async function L(e){let{normalized:t,allowFrom:n}=await I({prompter:e.prompter,existingAllowFrom:e.existingAllowFrom}),r=P(e.cfg,!0);return r=M(r,`allowlist`),r=N(r,n),await e.prompter.note([...e.messageLines,`- allowFrom includes ${t}`].join(`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./paths-Bcdg3ma0.cjs`),t=require(`./paths-D90l3h_o.cjs`),n=require(`./sessions-Dz5JUL8j.cjs`),r=require(`./logger-DUYnS-W3.cjs`);require(`./proxy-env-DQoJjkWE.cjs`),require(`./send-D3imkSlz.cjs`);const i=require(`./common-B4iFXuoZ.cjs`),a=require(`./resolve-outbound-target-MS6Xpp17.cjs`),o=require(`./send-Co_Wy2kT.cjs`),s=require(`./reply-BoWg-IXT.cjs`);require(`./github-copilot-token-zskwAEpd.cjs`),require(`./send-CFuJjCNB.cjs`);const c=require(`./channel-web-D4x22KPN.cjs`);require(`./tokens-CXsPDJTr.cjs`),require(`./audio-transcription-runner-CH5CoZrF.cjs`),require(`./image-DegWnAZU.cjs`),require(`./fetch-guard-CIJUkBIL.cjs`),require(`./api-key-rotation-DDCwA0KM.cjs`),require(`./local-roots-Cu7YCpql.cjs`),require(`./proxy-fetch-BzcKzknk.cjs`),require(`./deliver-DCrO9mvv.cjs`),require(`./commands-registry-CtYCWfuM.cjs`),require(`./fetch-ClKErpni.cjs`),require(`./diagnostic-8iX73nz_.cjs`),require(`./pi-model-discovery-D5xlUS2J.cjs`),require(`./ir-C3VNqnc2.cjs`),require(`./render-6fCdtAr6.cjs`),require(`./send-Cox_iyYB.cjs`),require(`./outbound-attachment-Cujprd6T.cjs`),require(`./send-61GHLNYP.cjs`),require(`./channel-activity-CLUi31fX.cjs`),require(`./tables-CnrHab5d.cjs`),require(`./fetch-DQxuOB8o.cjs`),require(`./skill-commands-KyN0FGaC.cjs`),require(`./query-expansion-0zYzKrrd.cjs`),require(`./manager-gE9187gu.cjs`),require(`./outbound-CW3o4Eng.cjs`),require(`./session-WRCBgAzG.cjs`);const l=require(`./login-UrWNtI80.cjs`);let u=require(`zod`),d=require(`node:path`);d=e.p(d);function f(e){return{success:!1,error:{issues:[{path:[],message:e}]}}}function p(){return{safeParse(e){return e===void 0?{success:!0,data:void 0}:!e||typeof e!=`object`||Array.isArray(e)?f(`expected config object`):Object.keys(e).length>0?f(`config must be empty`):{success:!0,data:e}},jsonSchema:{type:`object`,additionalProperties:!1,properties:{}}}}function m(e,t){let n=e.channels?.[t];return!!(n?.accounts&&Object.keys(n.accounts).length>0)}function h(e){return e.alwaysUseAccounts||e.accountId!==`default`?!0:m(e.cfg,e.channelKey)}function g(e){let n=e.name?.trim();if(!n)return e.cfg;let r=t.zt(e.accountId),i=e.cfg.channels?.[e.channelKey],a=typeof i==`object`&&i?i:void 0;if(!h({cfg:e.cfg,channelKey:e.channelKey,accountId:r,alwaysUseAccounts:e.alwaysUseAccounts})&&r===`default`){let t=a??{};return{...e.cfg,channels:{...e.cfg.channels,[e.channelKey]:{...t,name:n}}}}let o=a?.accounts??{},s=o[r]??{},c=r===`default`?(({name:e,...t})=>t)(a??{}):a??{};return{...e.cfg,channels:{...e.cfg.channels,[e.channelKey]:{...c,accounts:{...o,[r]:{...s,name:n}}}}}}function _(e){if(e.alwaysUseAccounts)return e.cfg;let n=e.cfg.channels?.[e.channelKey],r=n?.name?.trim();if(!r)return e.cfg;let i={...n?.accounts},a=i.default??{};a.name||(i[t.Rt]={...a,name:r});let{name:o,...s}=n??{};return{...e.cfg,channels:{...e.cfg.channels,[e.channelKey]:{...s,accounts:i}}}}const v=u.z.union([u.z.string(),u.z.number()]);u.z.array(v).optional();function y(e){let t=e;return typeof t.toJSONSchema==`function`?{schema:t.toJSONSchema({target:`draft-07`,unrepresentable:`any`})}:{schema:{type:`object`,additionalProperties:!0}}}function b(e,t,n={}){let r={...e??void 0};for(let[e,i]of Object.entries(t)){if(i===void 0){n.unsetOnUndefined?.includes(e)&&delete r[e];continue}r[e]=i}return r}function x(e,t,n){return{...e,channels:{...e.channels,whatsapp:b(e.channels?.whatsapp,t,n)}}}const S={openai:[`OPENAI_API_KEY`],anthropic:[`ANTHROPIC_API_KEY`],google:[`GEMINI_API_KEY`],minimax:[`MINIMAX_API_KEY`],"minimax-cn":[`MINIMAX_API_KEY`],moonshot:[`MOONSHOT_API_KEY`],"kimi-coding":[`KIMI_API_KEY`,`KIMICODE_API_KEY`],synthetic:[`SYNTHETIC_API_KEY`],venice:[`VENICE_API_KEY`],zai:[`ZAI_API_KEY`,`Z_AI_API_KEY`],xiaomi:[`XIAOMI_API_KEY`],openrouter:[`OPENROUTER_API_KEY`],"cloudflare-ai-gateway":[`CLOUDFLARE_AI_GATEWAY_API_KEY`],litellm:[`LITELLM_API_KEY`],"vercel-ai-gateway":[`AI_GATEWAY_API_KEY`],opencode:[`OPENCODE_API_KEY`,`OPENCODE_ZEN_API_KEY`],"opencode-go":[`OPENCODE_API_KEY`,`OPENCODE_ZEN_API_KEY`],together:[`TOGETHER_API_KEY`],huggingface:[`HUGGINGFACE_HUB_TOKEN`,`HF_TOKEN`],qianfan:[`QIANFAN_API_KEY`],xai:[`XAI_API_KEY`],mistral:[`MISTRAL_API_KEY`],kilocode:[`KILOCODE_API_KEY`],modelstudio:[`MODELSTUDIO_API_KEY`],volcengine:[`VOLCANO_ENGINE_API_KEY`],byteplus:[`BYTEPLUS_API_KEY`]},C=[`VOYAGE_API_KEY`,`GROQ_API_KEY`,`DEEPGRAM_API_KEY`,`CEREBRAS_API_KEY`,`NVIDIA_API_KEY`,`COPILOT_GITHUB_TOKEN`,`GH_TOKEN`,`GITHUB_TOKEN`,`ANTHROPIC_OAUTH_TOKEN`,`CHUTES_OAUTH_TOKEN`,`CHUTES_API_KEY`,`QWEN_OAUTH_TOKEN`,`QWEN_PORTAL_API_KEY`,`MINIMAX_OAUTH_TOKEN`,`OLLAMA_API_KEY`,`VLLM_API_KEY`],w=[...new Set(Object.values(S).flatMap(e=>e))];[...new Set([...w,...C])];async function T(e){let n=e.listAccountIds(e.cfg),r=e.currentId?.trim()||e.defaultAccountId||`default`,i=await e.prompter.select({message:`${e.label} account`,options:[...n.map(e=>({value:e,label:e===`default`?`default (primary)`:e})),{value:`__new__`,label:`Add a new account`}],initialValue:r});if(i!==`__new__`)return t.zt(i);let a=await e.prompter.text({message:`New ${e.label} account id`,validate:e=>e?.trim()?void 0:`Required`}),o=t.zt(String(a));return String(a).trim()!==o&&await e.prompter.note(`Normalized account id to "${o}".`,`${e.label} account`),o}const E=async e=>await T(e);function D(e){return e.split(/[\n,;]+/g).map(e=>e.trim()).filter(Boolean)}function O(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 k(e){return e.accountId?.trim()?t.zt(e.accountId):e.defaultAccountId}async function A(e){let n=e.accountOverride?.trim(),r=n?t.zt(n):e.defaultAccountId;return e.shouldPromptAccountIds&&!n&&(r=await E({cfg:e.cfg,prompter:e.prompter,label:e.label,currentId:r,listAccountIds:e.listAccountIds,defaultAccountId:e.defaultAccountId})),r}const j=`whatsapp`;function M(e,t){return x(e,{dmPolicy:t})}function N(e,t){return x(e,{allowFrom:t},{unsetOnUndefined:[`allowFrom`]})}function P(e,t){return x(e,{selfChatMode:t})}async function F(e,t){let{authDir:i}=n.ks({cfg:e,accountId:t});return await r.g(d.default.join(i,`creds.json`))}async function I(e){let{prompter:t,existingAllowFrom:n}=e;await t.note(`We need the sender/owner number so OpenClaw can allowlist you.`,`WhatsApp number`);let i=await t.text({message:`Your personal WhatsApp number (the phone you will message from)`,placeholder:`+15555550123`,initialValue:n[0],validate:e=>{let t=String(e??``).trim();if(!t)return`Required`;if(!r.h(t))return`Invalid number: ${t}`}}),a=r.h(String(i).trim());if(!a)throw Error(`Invalid WhatsApp owner number (expected E.164 after validation).`);return{normalized:a,allowFrom:O([...n.filter(e=>e!==`*`),a],r.h)}}async function L(e){let{normalized:t,allowFrom:n}=await I({prompter:e.prompter,existingAllowFrom:e.existingAllowFrom}),r=P(e.cfg,!0);return r=M(r,`allowlist`),r=N(r,n),await e.prompter.note([...e.messageLines,`- allowFrom includes ${t}`].join(`
2
2
  `),e.title),r}function R(e){let t=D(e);if(t.length===0)return{entries:[]};let n=[];for(let e of t){if(e===`*`){n.push(`*`);continue}let t=r.h(e);if(!t)return{entries:[],invalidEntry:e};n.push(t)}return{entries:O(n,r.h)}}async function z(e,t,n,i){let a=e.channels?.whatsapp?.dmPolicy??`pairing`,o=e.channels?.whatsapp?.allowFrom??[],c=o.length>0?o.join(`, `):`unset`;if(i?.forceAllowlist)return await L({cfg:e,prompter:n,existingAllowFrom:o,title:`WhatsApp allowlist`,messageLines:[`Allowlist mode enabled.`]});if(await n.note(["WhatsApp direct chats are gated by `channels.whatsapp.dmPolicy` + `channels.whatsapp.allowFrom`.",`- pairing (default): unknown senders get a pairing code; owner approves`,`- allowlist: unknown senders are blocked`,`- open: public inbound DMs (requires allowFrom to include "*")`,`- disabled: ignore WhatsApp DMs`,``,`Current: dmPolicy=${a}, allowFrom=${c}`,`Docs: ${s.r(`/whatsapp`,`whatsapp`)}`].join(`
3
3
  `),`WhatsApp DM access`),await n.select({message:`WhatsApp phone setup`,options:[{value:`personal`,label:`This is my personal phone number`},{value:`separate`,label:`Separate phone just for OpenClaw`}]})===`personal`)return await L({cfg:e,prompter:n,existingAllowFrom:o,title:`WhatsApp personal phone`,messageLines:[`Personal phone mode enabled.`,`- dmPolicy set to allowlist (pairing skipped)`]});let l=await n.select({message:`WhatsApp DM policy`,options:[{value:`pairing`,label:`Pairing (recommended)`},{value:`allowlist`,label:`Allowlist only (block unknown senders)`},{value:`open`,label:`Open (public inbound DMs)`},{value:`disabled`,label:`Disabled (ignore WhatsApp DMs)`}]}),u=P(e,!1);if(u=M(u,l),l===`open`){let e=O([`*`,...o],r.h);return u=N(u,e.length>0?e:[`*`]),u}if(l===`disabled`)return u;let d=o.length>0?[{value:`keep`,label:`Keep current allowFrom`},{value:`unset`,label:`Unset allowFrom (use pairing approvals only)`},{value:`list`,label:`Set allowFrom to specific numbers`}]:[{value:`unset`,label:`Unset allowFrom (default)`},{value:`list`,label:`Set allowFrom to specific numbers`}],f=await n.select({message:`WhatsApp allowFrom (optional pre-allowlist)`,options:d.map(e=>({value:e.value,label:e.label}))});if(f!==`keep`)if(f===`unset`)u=N(u,void 0);else{let e=await n.text({message:`Allowed sender numbers (comma-separated, E.164)`,placeholder:`+15555550123, +447700900123`,validate:e=>{let t=String(e??``).trim();if(!t)return`Required`;let n=R(t);if(n.entries.length===0&&!n.invalidEntry)return`Required`;if(n.invalidEntry)return`Invalid number: ${n.invalidEntry}`}}),t=R(String(e));u=N(u,t.entries)}return u}const B={channel:j,getStatus:async({cfg:e,accountOverrides:t})=>{let r=n.Ds(e),i=k({accountId:t.whatsapp,defaultAccountId:r}),a=await F(e,i);return{channel:j,configured:a,statusLines:[`WhatsApp (${i===`default`?`default`:i}): ${a?`linked`:`not linked`}`],selectionHint:a?`linked`:`not linked`,quickstartScore:a?5:4}},configure:async({cfg:e,runtime:t,prompter:r,options:i,accountOverrides:a,shouldPromptAccountIds:o,forceAllowFrom:c})=>{let u=await A({cfg:e,prompter:r,label:`WhatsApp`,accountOverride:a.whatsapp,shouldPromptAccountIds:!!(o||i?.promptWhatsAppAccountId),listAccountIds:n.Es,defaultAccountId:n.Ds(e)}),d=e;u!==`default`&&(d={...d,channels:{...d.channels,whatsapp:{...d.channels?.whatsapp,accounts:{...d.channels?.whatsapp?.accounts,[u]:{...d.channels?.whatsapp?.accounts?.[u],enabled:d.channels?.whatsapp?.accounts?.[u]?.enabled??!0}}}}});let f=await F(d,u),{authDir:p}=n.ks({cfg:d,accountId:u});if(f||await r.note([`Scan the QR with WhatsApp on your phone.`,`Credentials are stored under ${p}/ for future runs.`,`Docs: ${s.r(`/whatsapp`,`whatsapp`)}`].join(`
4
4
  `),`WhatsApp linking`),await r.confirm({message:f?`WhatsApp already linked. Re-link now?`:`Link WhatsApp now (QR)?`,initialValue:!f}))try{await l.t(!1,void 0,t,u)}catch(e){t.error(`WhatsApp login failed: ${String(e)}`),await r.note(`Docs: ${s.r(`/whatsapp`,`whatsapp`)}`,`WhatsApp help`)}else f||await r.note(`Run \`${n.mc(`openclaw channels login`)}\` later to link WhatsApp.`,`WhatsApp`);return d=await z(d,t,r,{forceAllowlist:c}),{cfg:d,accountId:u}},onAccountRecorded:(e,t)=>{t?.onWhatsAppAccountId?.(e)}};function V(e){return typeof e==`string`&&e.trim().length>0?e.trim():void 0}function H(e){let t=[];for(let n of e.accounts){let r=e.readAccount(n);if(!r||r.enabled===!1)continue;let i=V(r.accountId)??`default`;e.collectIssues({account:r,accountId:i,issues:t})}return t}function U(e){return r.f(e)?{accountId:e.accountId,enabled:e.enabled,linked:e.linked,connected:e.connected,running:e.running,reconnectAttempts:e.reconnectAttempts,lastError:e.lastError}:null}function W(e){return H({accounts:e,readAccount:U,collectIssues:({account:e,accountId:t,issues:r})=>{let i=e.linked===!0,a=e.running===!0,o=e.connected===!0,s=typeof e.reconnectAttempts==`number`?e.reconnectAttempts:null,c=V(e.lastError);if(!i){r.push({channel:`whatsapp`,accountId:t,kind:`auth`,message:`Not linked (no WhatsApp Web session).`,fix:`Run: ${n.mc(`openclaw channels login`)} (scan QR on the gateway host).`});return}a&&!o&&r.push({channel:`whatsapp`,accountId:t,kind:`runtime`,message:`Linked but disconnected${s==null?``:` (reconnectAttempts=${s})`}${c?`: ${c}`:`.`}`,fix:`Run: ${n.mc(`openclaw doctor`)} (or restart the gateway). If it persists, relink via channels login and check logs.`})}})}exports.DEFAULT_ACCOUNT_ID=t.Rt,exports.WhatsAppConfigSchema=n.rt,exports.applyAccountNameToChannelSection=g,exports.buildChannelConfigSchema=y,exports.collectWhatsAppStatusIssues=W,exports.createActionGate=i.r,exports.emptyPluginConfigSchema=p,exports.formatPairingApproveHint=n.pc,exports.formatWhatsAppConfigAllowFromEntries=n.gs,exports.getChatChannelMeta=n.Gs,exports.listWhatsAppAccountIds=n.Es,exports.listWhatsAppDirectoryGroupsFromConfig=n.Wo,exports.listWhatsAppDirectoryPeersFromConfig=n.Go,exports.looksLikeWhatsAppTargetId=n.xs,exports.migrateBaseNameToDefaultAccount=_,exports.normalizeAccountId=t.zt,exports.normalizeE164=r.h,exports.normalizeWhatsAppMessagingTarget=n.Ss,exports.readStringParam=i.f,exports.resolveAllowlistProviderRuntimeGroupPolicy=o.Pt,exports.resolveDefaultGroupPolicy=o.Ft,exports.resolveDefaultWhatsAppAccountId=n.Ds,exports.resolveWhatsAppAccount=n.Os,exports.resolveWhatsAppConfigAllowFrom=n.vs,exports.resolveWhatsAppConfigDefaultTo=n.ys,exports.resolveWhatsAppGroupIntroHint=n.Fo,exports.resolveWhatsAppGroupRequireMention=n.Lo,exports.resolveWhatsAppGroupToolPolicy=n.Ro,exports.resolveWhatsAppHeartbeatRecipients=c.r,exports.resolveWhatsAppMentionStripPatterns=n.Io,exports.resolveWhatsAppOutboundTarget=a.t,exports.whatsappOnboardingAdapter=B;
@@ -1,4 +1,4 @@
1
- import{Rt as e,zt as t}from"./paths-cBAF6Bj0.js";import{Bo as n,Cs as r,Mo as i,No as a,Po as o,Ss as s,Ts as c,Vo as l,Vs as u,_s as d,fs as f,hs as p,jo as m,lc as ee,ms as h,rt as g,uc as _,vs as te,ws as ne}from"./sessions-DxXXAfdI.js";import{f as v,g as y,h as b}from"./logger-vBDTZWl3.js";import"./paths-CnHSNSeR.js";import"./proxy-env-B765haXA.js";import"./send-D-qD7BCb.js";import{f as x,r as S}from"./common-B6fDMl_i.js";import{t as C}from"./resolve-outbound-target-H7Q9HcfW.js";import{Ft as re,Pt as ie}from"./send-C4ZFbUux.js";import{r as w}from"./reply-D-f2bbXy.js";import"./github-copilot-token-N8vnLZPw.js";import"./send-BTE2rI1E.js";import{r as ae}from"./channel-web-4ZQVqsrt.js";import"./tokens-B8ys7Q2e.js";import"./audio-transcription-runner-BIqM5H5q.js";import"./image-CWnsS03L.js";import"./fetch-guard-CY03i4gu.js";import"./api-key-rotation-DcREl_0x.js";import"./local-roots-tee85Q-1.js";import"./proxy-fetch-CYVChsKE.js";import"./deliver-vYe_sYOL.js";import"./commands-registry-MCsWR5Vf.js";import"./fetch-CCLWsYaQ.js";import"./diagnostic-CkePwN5F.js";import"./pi-model-discovery-BuEMyAsU.js";import"./ir-OBi5zaEW.js";import"./render-CBsnn-2A.js";import"./send-CEfs0Fsr.js";import"./outbound-attachment-DQYtdTUw.js";import"./send-B2qa7CSk.js";import"./channel-activity-D7tpmatp.js";import"./tables-BIDWwpX8.js";import"./fetch-C-HRWp5R.js";import"./skill-commands-Hmuw0PPK.js";import"./query-expansion-C_DnhmUy.js";import"./manager-MR9stU_p.js";import"./outbound-C18nEOFP.js";import"./session-BJhNqIOi.js";import{t as T}from"./login-DtDOozuU.js";import{z as E}from"zod";import D from"node:path";function O(e){return{success:!1,error:{issues:[{path:[],message:e}]}}}function k(){return{safeParse(e){return e===void 0?{success:!0,data:void 0}:!e||typeof e!=`object`||Array.isArray(e)?O(`expected config object`):Object.keys(e).length>0?O(`config must be empty`):{success:!0,data:e}},jsonSchema:{type:`object`,additionalProperties:!1,properties:{}}}}function A(e,t){let n=e.channels?.[t];return!!(n?.accounts&&Object.keys(n.accounts).length>0)}function j(e){return e.alwaysUseAccounts||e.accountId!==`default`?!0:A(e.cfg,e.channelKey)}function M(e){let n=e.name?.trim();if(!n)return e.cfg;let r=t(e.accountId),i=e.cfg.channels?.[e.channelKey],a=typeof i==`object`&&i?i:void 0;if(!j({cfg:e.cfg,channelKey:e.channelKey,accountId:r,alwaysUseAccounts:e.alwaysUseAccounts})&&r===`default`){let t=a??{};return{...e.cfg,channels:{...e.cfg.channels,[e.channelKey]:{...t,name:n}}}}let o=a?.accounts??{},s=o[r]??{},c=r===`default`?(({name:e,...t})=>t)(a??{}):a??{};return{...e.cfg,channels:{...e.cfg.channels,[e.channelKey]:{...c,accounts:{...o,[r]:{...s,name:n}}}}}}function N(t){if(t.alwaysUseAccounts)return t.cfg;let n=t.cfg.channels?.[t.channelKey],r=n?.name?.trim();if(!r)return t.cfg;let i={...n?.accounts},a=i.default??{};a.name||(i[e]={...a,name:r});let{name:o,...s}=n??{};return{...t.cfg,channels:{...t.cfg.channels,[t.channelKey]:{...s,accounts:i}}}}const P=E.union([E.string(),E.number()]);E.array(P).optional();function F(e){let t=e;return typeof t.toJSONSchema==`function`?{schema:t.toJSONSchema({target:`draft-07`,unrepresentable:`any`})}:{schema:{type:`object`,additionalProperties:!0}}}function I(e,t,n={}){let r={...e??void 0};for(let[e,i]of Object.entries(t)){if(i===void 0){n.unsetOnUndefined?.includes(e)&&delete r[e];continue}r[e]=i}return r}function L(e,t,n){return{...e,channels:{...e.channels,whatsapp:I(e.channels?.whatsapp,t,n)}}}const R={openai:[`OPENAI_API_KEY`],anthropic:[`ANTHROPIC_API_KEY`],google:[`GEMINI_API_KEY`],minimax:[`MINIMAX_API_KEY`],"minimax-cn":[`MINIMAX_API_KEY`],moonshot:[`MOONSHOT_API_KEY`],"kimi-coding":[`KIMI_API_KEY`,`KIMICODE_API_KEY`],synthetic:[`SYNTHETIC_API_KEY`],venice:[`VENICE_API_KEY`],zai:[`ZAI_API_KEY`,`Z_AI_API_KEY`],xiaomi:[`XIAOMI_API_KEY`],openrouter:[`OPENROUTER_API_KEY`],"cloudflare-ai-gateway":[`CLOUDFLARE_AI_GATEWAY_API_KEY`],litellm:[`LITELLM_API_KEY`],"vercel-ai-gateway":[`AI_GATEWAY_API_KEY`],opencode:[`OPENCODE_API_KEY`,`OPENCODE_ZEN_API_KEY`],"opencode-go":[`OPENCODE_API_KEY`,`OPENCODE_ZEN_API_KEY`],together:[`TOGETHER_API_KEY`],huggingface:[`HUGGINGFACE_HUB_TOKEN`,`HF_TOKEN`],qianfan:[`QIANFAN_API_KEY`],xai:[`XAI_API_KEY`],mistral:[`MISTRAL_API_KEY`],kilocode:[`KILOCODE_API_KEY`],modelstudio:[`MODELSTUDIO_API_KEY`],volcengine:[`VOLCANO_ENGINE_API_KEY`],byteplus:[`BYTEPLUS_API_KEY`]},z=[`VOYAGE_API_KEY`,`GROQ_API_KEY`,`DEEPGRAM_API_KEY`,`CEREBRAS_API_KEY`,`NVIDIA_API_KEY`,`COPILOT_GITHUB_TOKEN`,`GH_TOKEN`,`GITHUB_TOKEN`,`ANTHROPIC_OAUTH_TOKEN`,`CHUTES_OAUTH_TOKEN`,`CHUTES_API_KEY`,`QWEN_OAUTH_TOKEN`,`QWEN_PORTAL_API_KEY`,`MINIMAX_OAUTH_TOKEN`,`OLLAMA_API_KEY`,`VLLM_API_KEY`],oe=[...new Set(Object.values(R).flatMap(e=>e))];[...new Set([...oe,...z])];async function B(e){let n=e.listAccountIds(e.cfg),r=e.currentId?.trim()||e.defaultAccountId||`default`,i=await e.prompter.select({message:`${e.label} account`,options:[...n.map(e=>({value:e,label:e===`default`?`default (primary)`:e})),{value:`__new__`,label:`Add a new account`}],initialValue:r});if(i!==`__new__`)return t(i);let a=await e.prompter.text({message:`New ${e.label} account id`,validate:e=>e?.trim()?void 0:`Required`}),o=t(String(a));return String(a).trim()!==o&&await e.prompter.note(`Normalized account id to "${o}".`,`${e.label} account`),o}const V=async e=>await B(e);function H(e){return e.split(/[\n,;]+/g).map(e=>e.trim()).filter(Boolean)}function U(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 W(e){return e.accountId?.trim()?t(e.accountId):e.defaultAccountId}async function G(e){let n=e.accountOverride?.trim(),r=n?t(n):e.defaultAccountId;return e.shouldPromptAccountIds&&!n&&(r=await V({cfg:e.cfg,prompter:e.prompter,label:e.label,currentId:r,listAccountIds:e.listAccountIds,defaultAccountId:e.defaultAccountId})),r}const K=`whatsapp`;function q(e,t){return L(e,{dmPolicy:t})}function J(e,t){return L(e,{allowFrom:t},{unsetOnUndefined:[`allowFrom`]})}function Y(e,t){return L(e,{selfChatMode:t})}async function X(e,t){let{authDir:n}=c({cfg:e,accountId:t});return await y(D.join(n,`creds.json`))}async function se(e){let{prompter:t,existingAllowFrom:n}=e;await t.note(`We need the sender/owner number so OpenClaw can allowlist you.`,`WhatsApp number`);let r=await t.text({message:`Your personal WhatsApp number (the phone you will message from)`,placeholder:`+15555550123`,initialValue:n[0],validate:e=>{let t=String(e??``).trim();if(!t)return`Required`;if(!b(t))return`Invalid number: ${t}`}}),i=b(String(r).trim());if(!i)throw Error(`Invalid WhatsApp owner number (expected E.164 after validation).`);return{normalized:i,allowFrom:U([...n.filter(e=>e!==`*`),i],b)}}async function Z(e){let{normalized:t,allowFrom:n}=await se({prompter:e.prompter,existingAllowFrom:e.existingAllowFrom}),r=Y(e.cfg,!0);return r=q(r,`allowlist`),r=J(r,n),await e.prompter.note([...e.messageLines,`- allowFrom includes ${t}`].join(`
1
+ import{Rt as e,zt as t}from"./paths-cBAF6Bj0.js";import{Bo as n,Cs as r,Mo as i,No as a,Po as o,Ss as s,Ts as c,Vo as l,Vs as u,_s as d,fs as f,hs as p,jo as m,lc as ee,ms as h,rt as g,uc as _,vs as te,ws as ne}from"./sessions-DxXXAfdI.js";import{f as v,g as y,h as b}from"./logger-vBDTZWl3.js";import"./paths-CnHSNSeR.js";import"./proxy-env-B765haXA.js";import"./send-D-qD7BCb.js";import{f as x,r as S}from"./common-B6fDMl_i.js";import{t as C}from"./resolve-outbound-target-H7Q9HcfW.js";import{Ft as re,Pt as ie}from"./send-C4ZFbUux.js";import{r as w}from"./reply-bS9U9BwG.js";import"./github-copilot-token-N8vnLZPw.js";import"./send-BTE2rI1E.js";import{r as ae}from"./channel-web-CeSPyNTh.js";import"./tokens-B8ys7Q2e.js";import"./audio-transcription-runner-BIqM5H5q.js";import"./image-CWnsS03L.js";import"./fetch-guard-CY03i4gu.js";import"./api-key-rotation-DcREl_0x.js";import"./local-roots-tee85Q-1.js";import"./proxy-fetch-CYVChsKE.js";import"./deliver-vYe_sYOL.js";import"./commands-registry-MCsWR5Vf.js";import"./fetch-CCLWsYaQ.js";import"./diagnostic-CkePwN5F.js";import"./pi-model-discovery-BuEMyAsU.js";import"./ir-OBi5zaEW.js";import"./render-CBsnn-2A.js";import"./send-CEfs0Fsr.js";import"./outbound-attachment-DQYtdTUw.js";import"./send-B2qa7CSk.js";import"./channel-activity-D7tpmatp.js";import"./tables-BIDWwpX8.js";import"./fetch-C-HRWp5R.js";import"./skill-commands-Hmuw0PPK.js";import"./query-expansion-C_DnhmUy.js";import"./manager-MR9stU_p.js";import"./outbound-C18nEOFP.js";import"./session-BJhNqIOi.js";import{t as T}from"./login-DtDOozuU.js";import{z as E}from"zod";import D from"node:path";function O(e){return{success:!1,error:{issues:[{path:[],message:e}]}}}function k(){return{safeParse(e){return e===void 0?{success:!0,data:void 0}:!e||typeof e!=`object`||Array.isArray(e)?O(`expected config object`):Object.keys(e).length>0?O(`config must be empty`):{success:!0,data:e}},jsonSchema:{type:`object`,additionalProperties:!1,properties:{}}}}function A(e,t){let n=e.channels?.[t];return!!(n?.accounts&&Object.keys(n.accounts).length>0)}function j(e){return e.alwaysUseAccounts||e.accountId!==`default`?!0:A(e.cfg,e.channelKey)}function M(e){let n=e.name?.trim();if(!n)return e.cfg;let r=t(e.accountId),i=e.cfg.channels?.[e.channelKey],a=typeof i==`object`&&i?i:void 0;if(!j({cfg:e.cfg,channelKey:e.channelKey,accountId:r,alwaysUseAccounts:e.alwaysUseAccounts})&&r===`default`){let t=a??{};return{...e.cfg,channels:{...e.cfg.channels,[e.channelKey]:{...t,name:n}}}}let o=a?.accounts??{},s=o[r]??{},c=r===`default`?(({name:e,...t})=>t)(a??{}):a??{};return{...e.cfg,channels:{...e.cfg.channels,[e.channelKey]:{...c,accounts:{...o,[r]:{...s,name:n}}}}}}function N(t){if(t.alwaysUseAccounts)return t.cfg;let n=t.cfg.channels?.[t.channelKey],r=n?.name?.trim();if(!r)return t.cfg;let i={...n?.accounts},a=i.default??{};a.name||(i[e]={...a,name:r});let{name:o,...s}=n??{};return{...t.cfg,channels:{...t.cfg.channels,[t.channelKey]:{...s,accounts:i}}}}const P=E.union([E.string(),E.number()]);E.array(P).optional();function F(e){let t=e;return typeof t.toJSONSchema==`function`?{schema:t.toJSONSchema({target:`draft-07`,unrepresentable:`any`})}:{schema:{type:`object`,additionalProperties:!0}}}function I(e,t,n={}){let r={...e??void 0};for(let[e,i]of Object.entries(t)){if(i===void 0){n.unsetOnUndefined?.includes(e)&&delete r[e];continue}r[e]=i}return r}function L(e,t,n){return{...e,channels:{...e.channels,whatsapp:I(e.channels?.whatsapp,t,n)}}}const R={openai:[`OPENAI_API_KEY`],anthropic:[`ANTHROPIC_API_KEY`],google:[`GEMINI_API_KEY`],minimax:[`MINIMAX_API_KEY`],"minimax-cn":[`MINIMAX_API_KEY`],moonshot:[`MOONSHOT_API_KEY`],"kimi-coding":[`KIMI_API_KEY`,`KIMICODE_API_KEY`],synthetic:[`SYNTHETIC_API_KEY`],venice:[`VENICE_API_KEY`],zai:[`ZAI_API_KEY`,`Z_AI_API_KEY`],xiaomi:[`XIAOMI_API_KEY`],openrouter:[`OPENROUTER_API_KEY`],"cloudflare-ai-gateway":[`CLOUDFLARE_AI_GATEWAY_API_KEY`],litellm:[`LITELLM_API_KEY`],"vercel-ai-gateway":[`AI_GATEWAY_API_KEY`],opencode:[`OPENCODE_API_KEY`,`OPENCODE_ZEN_API_KEY`],"opencode-go":[`OPENCODE_API_KEY`,`OPENCODE_ZEN_API_KEY`],together:[`TOGETHER_API_KEY`],huggingface:[`HUGGINGFACE_HUB_TOKEN`,`HF_TOKEN`],qianfan:[`QIANFAN_API_KEY`],xai:[`XAI_API_KEY`],mistral:[`MISTRAL_API_KEY`],kilocode:[`KILOCODE_API_KEY`],modelstudio:[`MODELSTUDIO_API_KEY`],volcengine:[`VOLCANO_ENGINE_API_KEY`],byteplus:[`BYTEPLUS_API_KEY`]},z=[`VOYAGE_API_KEY`,`GROQ_API_KEY`,`DEEPGRAM_API_KEY`,`CEREBRAS_API_KEY`,`NVIDIA_API_KEY`,`COPILOT_GITHUB_TOKEN`,`GH_TOKEN`,`GITHUB_TOKEN`,`ANTHROPIC_OAUTH_TOKEN`,`CHUTES_OAUTH_TOKEN`,`CHUTES_API_KEY`,`QWEN_OAUTH_TOKEN`,`QWEN_PORTAL_API_KEY`,`MINIMAX_OAUTH_TOKEN`,`OLLAMA_API_KEY`,`VLLM_API_KEY`],oe=[...new Set(Object.values(R).flatMap(e=>e))];[...new Set([...oe,...z])];async function B(e){let n=e.listAccountIds(e.cfg),r=e.currentId?.trim()||e.defaultAccountId||`default`,i=await e.prompter.select({message:`${e.label} account`,options:[...n.map(e=>({value:e,label:e===`default`?`default (primary)`:e})),{value:`__new__`,label:`Add a new account`}],initialValue:r});if(i!==`__new__`)return t(i);let a=await e.prompter.text({message:`New ${e.label} account id`,validate:e=>e?.trim()?void 0:`Required`}),o=t(String(a));return String(a).trim()!==o&&await e.prompter.note(`Normalized account id to "${o}".`,`${e.label} account`),o}const V=async e=>await B(e);function H(e){return e.split(/[\n,;]+/g).map(e=>e.trim()).filter(Boolean)}function U(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 W(e){return e.accountId?.trim()?t(e.accountId):e.defaultAccountId}async function G(e){let n=e.accountOverride?.trim(),r=n?t(n):e.defaultAccountId;return e.shouldPromptAccountIds&&!n&&(r=await V({cfg:e.cfg,prompter:e.prompter,label:e.label,currentId:r,listAccountIds:e.listAccountIds,defaultAccountId:e.defaultAccountId})),r}const K=`whatsapp`;function q(e,t){return L(e,{dmPolicy:t})}function J(e,t){return L(e,{allowFrom:t},{unsetOnUndefined:[`allowFrom`]})}function Y(e,t){return L(e,{selfChatMode:t})}async function X(e,t){let{authDir:n}=c({cfg:e,accountId:t});return await y(D.join(n,`creds.json`))}async function se(e){let{prompter:t,existingAllowFrom:n}=e;await t.note(`We need the sender/owner number so OpenClaw can allowlist you.`,`WhatsApp number`);let r=await t.text({message:`Your personal WhatsApp number (the phone you will message from)`,placeholder:`+15555550123`,initialValue:n[0],validate:e=>{let t=String(e??``).trim();if(!t)return`Required`;if(!b(t))return`Invalid number: ${t}`}}),i=b(String(r).trim());if(!i)throw Error(`Invalid WhatsApp owner number (expected E.164 after validation).`);return{normalized:i,allowFrom:U([...n.filter(e=>e!==`*`),i],b)}}async function Z(e){let{normalized:t,allowFrom:n}=await se({prompter:e.prompter,existingAllowFrom:e.existingAllowFrom}),r=Y(e.cfg,!0);return r=q(r,`allowlist`),r=J(r,n),await e.prompter.note([...e.messageLines,`- allowFrom includes ${t}`].join(`
2
2
  `),e.title),r}function Q(e){let t=H(e);if(t.length===0)return{entries:[]};let n=[];for(let e of t){if(e===`*`){n.push(`*`);continue}let t=b(e);if(!t)return{entries:[],invalidEntry:e};n.push(t)}return{entries:U(n,b)}}async function ce(e,t,n,r){let i=e.channels?.whatsapp?.dmPolicy??`pairing`,a=e.channels?.whatsapp?.allowFrom??[],o=a.length>0?a.join(`, `):`unset`;if(r?.forceAllowlist)return await Z({cfg:e,prompter:n,existingAllowFrom:a,title:`WhatsApp allowlist`,messageLines:[`Allowlist mode enabled.`]});if(await n.note(["WhatsApp direct chats are gated by `channels.whatsapp.dmPolicy` + `channels.whatsapp.allowFrom`.",`- pairing (default): unknown senders get a pairing code; owner approves`,`- allowlist: unknown senders are blocked`,`- open: public inbound DMs (requires allowFrom to include "*")`,`- disabled: ignore WhatsApp DMs`,``,`Current: dmPolicy=${i}, allowFrom=${o}`,`Docs: ${w(`/whatsapp`,`whatsapp`)}`].join(`
3
3
  `),`WhatsApp DM access`),await n.select({message:`WhatsApp phone setup`,options:[{value:`personal`,label:`This is my personal phone number`},{value:`separate`,label:`Separate phone just for OpenClaw`}]})===`personal`)return await Z({cfg:e,prompter:n,existingAllowFrom:a,title:`WhatsApp personal phone`,messageLines:[`Personal phone mode enabled.`,`- dmPolicy set to allowlist (pairing skipped)`]});let s=await n.select({message:`WhatsApp DM policy`,options:[{value:`pairing`,label:`Pairing (recommended)`},{value:`allowlist`,label:`Allowlist only (block unknown senders)`},{value:`open`,label:`Open (public inbound DMs)`},{value:`disabled`,label:`Disabled (ignore WhatsApp DMs)`}]}),c=Y(e,!1);if(c=q(c,s),s===`open`){let e=U([`*`,...a],b);return c=J(c,e.length>0?e:[`*`]),c}if(s===`disabled`)return c;let l=a.length>0?[{value:`keep`,label:`Keep current allowFrom`},{value:`unset`,label:`Unset allowFrom (use pairing approvals only)`},{value:`list`,label:`Set allowFrom to specific numbers`}]:[{value:`unset`,label:`Unset allowFrom (default)`},{value:`list`,label:`Set allowFrom to specific numbers`}],u=await n.select({message:`WhatsApp allowFrom (optional pre-allowlist)`,options:l.map(e=>({value:e.value,label:e.label}))});if(u!==`keep`)if(u===`unset`)c=J(c,void 0);else{let e=await n.text({message:`Allowed sender numbers (comma-separated, E.164)`,placeholder:`+15555550123, +447700900123`,validate:e=>{let t=String(e??``).trim();if(!t)return`Required`;let n=Q(t);if(n.entries.length===0&&!n.invalidEntry)return`Required`;if(n.invalidEntry)return`Invalid number: ${n.invalidEntry}`}}),t=Q(String(e));c=J(c,t.entries)}return c}const le={channel:K,getStatus:async({cfg:e,accountOverrides:t})=>{let n=r(e),i=W({accountId:t.whatsapp,defaultAccountId:n}),a=await X(e,i);return{channel:K,configured:a,statusLines:[`WhatsApp (${i===`default`?`default`:i}): ${a?`linked`:`not linked`}`],selectionHint:a?`linked`:`not linked`,quickstartScore:a?5:4}},configure:async({cfg:e,runtime:t,prompter:n,options:i,accountOverrides:a,shouldPromptAccountIds:o,forceAllowFrom:l})=>{let u=await G({cfg:e,prompter:n,label:`WhatsApp`,accountOverride:a.whatsapp,shouldPromptAccountIds:!!(o||i?.promptWhatsAppAccountId),listAccountIds:s,defaultAccountId:r(e)}),d=e;u!==`default`&&(d={...d,channels:{...d.channels,whatsapp:{...d.channels?.whatsapp,accounts:{...d.channels?.whatsapp?.accounts,[u]:{...d.channels?.whatsapp?.accounts?.[u],enabled:d.channels?.whatsapp?.accounts?.[u]?.enabled??!0}}}}});let f=await X(d,u),{authDir:p}=c({cfg:d,accountId:u});if(f||await n.note([`Scan the QR with WhatsApp on your phone.`,`Credentials are stored under ${p}/ for future runs.`,`Docs: ${w(`/whatsapp`,`whatsapp`)}`].join(`
4
4
  `),`WhatsApp linking`),await n.confirm({message:f?`WhatsApp already linked. Re-link now?`:`Link WhatsApp now (QR)?`,initialValue:!f}))try{await T(!1,void 0,t,u)}catch(e){t.error(`WhatsApp login failed: ${String(e)}`),await n.note(`Docs: ${w(`/whatsapp`,`whatsapp`)}`,`WhatsApp help`)}else f||await n.note(`Run \`${_(`openclaw channels login`)}\` later to link WhatsApp.`,`WhatsApp`);return d=await ce(d,t,n,{forceAllowlist:l}),{cfg:d,accountId:u}},onAccountRecorded:(e,t)=>{t?.onWhatsAppAccountId?.(e)}};function $(e){return typeof e==`string`&&e.trim().length>0?e.trim():void 0}function ue(e){let t=[];for(let n of e.accounts){let r=e.readAccount(n);if(!r||r.enabled===!1)continue;let i=$(r.accountId)??`default`;e.collectIssues({account:r,accountId:i,issues:t})}return t}function de(e){return v(e)?{accountId:e.accountId,enabled:e.enabled,linked:e.linked,connected:e.connected,running:e.running,reconnectAttempts:e.reconnectAttempts,lastError:e.lastError}:null}function fe(e){return ue({accounts:e,readAccount:de,collectIssues:({account:e,accountId:t,issues:n})=>{let r=e.linked===!0,i=e.running===!0,a=e.connected===!0,o=typeof e.reconnectAttempts==`number`?e.reconnectAttempts:null,s=$(e.lastError);if(!r){n.push({channel:`whatsapp`,accountId:t,kind:`auth`,message:`Not linked (no WhatsApp Web session).`,fix:`Run: ${_(`openclaw channels login`)} (scan QR on the gateway host).`});return}i&&!a&&n.push({channel:`whatsapp`,accountId:t,kind:`runtime`,message:`Linked but disconnected${o==null?``:` (reconnectAttempts=${o})`}${s?`: ${s}`:`.`}`,fix:`Run: ${_(`openclaw doctor`)} (or restart the gateway). If it persists, relink via channels login and check logs.`})}})}export{e as DEFAULT_ACCOUNT_ID,g as WhatsAppConfigSchema,M as applyAccountNameToChannelSection,F as buildChannelConfigSchema,fe as collectWhatsAppStatusIssues,S as createActionGate,k as emptyPluginConfigSchema,ee as formatPairingApproveHint,f as formatWhatsAppConfigAllowFromEntries,u as getChatChannelMeta,s as listWhatsAppAccountIds,n as listWhatsAppDirectoryGroupsFromConfig,l as listWhatsAppDirectoryPeersFromConfig,d as looksLikeWhatsAppTargetId,N as migrateBaseNameToDefaultAccount,t as normalizeAccountId,b as normalizeE164,te as normalizeWhatsAppMessagingTarget,x as readStringParam,ie as resolveAllowlistProviderRuntimeGroupPolicy,re as resolveDefaultGroupPolicy,r as resolveDefaultWhatsAppAccountId,ne as resolveWhatsAppAccount,h as resolveWhatsAppConfigAllowFrom,p as resolveWhatsAppConfigDefaultTo,m as resolveWhatsAppGroupIntroHint,a as resolveWhatsAppGroupRequireMention,o as resolveWhatsAppGroupToolPolicy,ae as resolveWhatsAppHeartbeatRecipients,i as resolveWhatsAppMentionStripPatterns,C as resolveWhatsAppOutboundTarget,le as whatsappOnboardingAdapter};
@@ -1,6 +1,6 @@
1
- import{g as e}from"./paths-B4IRk3wi.js";import{A as t,p as n}from"./subsystem-C5XF2Fy5.js";import{S as r,g as i,x as a,y as o}from"./utils-UGOV_184.js";import{Lo as s,nc as c,qs as l}from"./model-selection-BlC_rXAN.js";import"./reply-l-Y47HP4.js";import"./agent-scope-DXZc3eNT.js";import"./openclaw-root-D_0Q6--h.js";import"./github-copilot-token-DGYAlOmV.js";import"./boolean-Ch3DfXPy.js";import"./env-D7wNuBx1.js";import"./env-overrides-DXJbFrwI.js";import{N as u,P as d}from"./registry-hFAtCSWG.js";import{S as f,m as p}from"./skills-DHbOKEGc.js";import"./frontmatter-BkZkwkVO.js";import"./plugins-CYLrFT4h.js";import"./logger-Bl8URnrW.js";import"./exec-DHqLtFYt.js";import"./windows-spawn-AB7ItGAE.js";import"./redact-3_CiXMY6.js";import"./path-alias-guards-mvyLCPlN.js";import"./errors-Bunti32V.js";import"./send-Cgd_VJHR.js";import"./send-hZFDcGLM.js";import"./paths-yLEk_25I.js";import"./chat-envelope-HVpKusFc.js";import"./audio-transcription-runner-D4Bp6MM7.js";import"./image-DsoO5VP5.js";import"./models-config-CdMhNxKV.js";import"./tool-display-DjuSUUbH.js";import"./fetch-guard-DPdY0NXR.js";import"./api-key-rotation-BRt-vnRV.js";import"./local-roots-6waH0SZ0.js";import"./model-catalog-C1kpjR75.js";import"./proxy-fetch-BADsUK4d.js";import"./tokens-XGbQGn67.js";import"./deliver-ClBkV2eD.js";import"./commands-CGpM84iR.js";import"./commands-registry-B1x54ukc.js";import"./pairing-store-Cg2UxreQ.js";import"./fetch-Dikjvc5M.js";import"./call-CqoMqP5b.js";import"./with-timeout-WveKxvFV.js";import"./diagnostic-DOzHPnht.js";import"./send-B7sHR38c2.js";import"./pi-model-discovery-Dps1PPWz.js";import"./exec-approvals-allowlist-CE3nYh0K.js";import"./exec-safe-bin-runtime-policy-Dt0GchLp.js";import"./ir-Dk7OQ4bA.js";import"./render-D8OWO2hT.js";import"./target-errors-a35Md15n.js";import"./read-only-account-inspect-DBwAwB3_.js";import"./channel-selection-CbNtbAEf.js";import"./plugin-auto-enable-DpVL6-ES.js";import"./send-C-AP01PR.js";import"./outbound-attachment-B7wMxwj6.js";import"./delivery-queue-CKbauSFq.js";import"./send-DbeEC2a3.js";import"./channel-activity-YjYNzCpJ.js";import"./tables-Oieq7UbT.js";import"./fetch-Bn0mWg6a.js";import"./skill-commands-HJHHZqt6.js";import"./workspace-dirs-BhF1Dzxt.js";import"./pairing-token-BjYBuREl.js";import"./restart-CHXEHdSC.js";import"./runtime-web-tools-bz76ZaRc.js";import"./command-secret-targets-BVN3kiT9.js";import"./session-cost-usage-BgqKixv0.js";import"./connection-auth-C8iru0UB.js";import"./onboard-helpers-zwybUJWu.js";import"./prompt-style-CXKekIBY.js";import"./pairing-labels-BUU_-70B.js";import"./memory-cli-jhzJ3as7.js";import"./query-expansion-0OxEb1Io.js";import"./manager-M1GKhLUC.js";import{t as m}from"./links-CySwdMcF.js";import"./cli-utils-BY7dLMFy.js";import"./help-format-BRbF_INg.js";import"./progress-LNttnI-y.js";import"./exec-approvals-BpBNEy6i.js";import"./nodes-screen-DECgxo6A.js";import"./system-run-command-DEWnZE0r.js";import"./runtime-BC5Ep2pJ.js";import"./stagger-DmFYysrJ.js";import{n as h,t as g}from"./enable-Ccf9wSM8.js";import{u as _}from"./install-safe-path-iesxijn2.js";import"./npm-pack-install-B23L-AtF.js";import"./skill-scanner-CUUF3Fvo.js";import{c as v,l as y,n as b,r as x,s as S}from"./installs-BNeI_oML.js";import{r as C,t as w}from"./plugin-install-plan-BobX0y9S.js";import{n as T,t as E}from"./table-CY440fI1.js";import{i as D,n as O,r as k}from"./npm-resolution-DWPloph4.js";import{n as A}from"./update-BGrxUIyz.js";import j from"node:fs";import M from"node:os";import N from"node:path";import P from"node:fs/promises";function F(e,t){let n=N.relative(e,t);return!n||n===`.`||n===`..`||n.startsWith(`..${N.sep}`)||n.startsWith(`../`)||n.startsWith(`..\\`)||N.isAbsolute(n)?null:n.replaceAll(`\\`,`/`)}function I(e){return{stock:f(),global:N.join(i(),`extensions`),workspace:e.workspaceDir?N.join(e.workspaceDir,`.openclaw`,`extensions`):void 0}}function L(e,t){let n=e.source;if(e.origin===`bundled`&&t.stock){let e=F(t.stock,n);if(e)return{value:`stock:${e}`,rootKey:`stock`}}if(e.origin===`workspace`&&t.workspace){let e=F(t.workspace,n);if(e)return{value:`workspace:${e}`,rootKey:`workspace`}}if(e.origin===`global`&&t.global){let e=F(t.global,n);if(e)return{value:`global:${e}`,rootKey:`global`}}return{value:a(n)}}function R(e){if(!e.hasInstall||e.installRecord?.source===`path`)return null;let t;try{t=y(e.pluginId,e.extensionsDir)}catch{return null}let n=e.installRecord?.installPath;return n&&N.resolve(n)===N.resolve(t)?n:t}function z(e,t){let n={entry:!1,install:!1,allowlist:!1,loadPath:!1,memorySlot:!1},r=e.plugins??{},i=r.entries;if(i&&t in i){let{[t]:e,...r}=i;i=Object.keys(r).length>0?r:void 0,n.entry=!0}let a=r.installs,o=a?.[t];if(a&&t in a){let{[t]:e,...r}=a;a=Object.keys(r).length>0?r:void 0,n.install=!0}let s=r.allow;Array.isArray(s)&&s.includes(t)&&(s=s.filter(e=>e!==t),s.length===0&&(s=void 0),n.allowlist=!0);let c=r.load;if(o?.source===`path`&&o.sourcePath){let e=o.sourcePath,t=c?.paths;if(Array.isArray(t)&&t.includes(e)){let r=t.filter(t=>t!==e);c=r.length>0?{...c,paths:r}:void 0,n.loadPath=!0}}let l=r.slots;l?.memory===t&&(l={...l,memory:d(`memory`)},n.memorySlot=!0),l&&Object.keys(l).length===0&&(l=void 0);let u={...r,entries:i,installs:a,allow:s,load:c,slots:l};return u.entries===void 0&&delete u.entries,u.installs===void 0&&delete u.installs,u.allow===void 0&&delete u.allow,u.load===void 0&&delete u.load,u.slots===void 0&&delete u.slots,{config:{...e,plugins:Object.keys(u).length>0?u:void 0},actions:n}}async function B(e){let{config:t,pluginId:n,deleteFiles:r=!0,extensionsDir:i}=e,a=n in(t.plugins?.entries??{}),o=n in(t.plugins?.installs??{});if(!a&&!o)return{ok:!1,error:`Plugin not found: ${n}`};let s=t.plugins?.installs?.[n],c=s?.source===`path`,{config:l,actions:u}=z(t,n),d={...u,directory:!1},f=[],p=r&&!c?R({pluginId:n,hasInstall:o,installRecord:s,extensionsDir:i}):null;if(p){let e=await P.access(p).then(()=>!0).catch(()=>!1)??!1;try{await P.rm(p,{recursive:!0,force:!0}),d.directory=e}catch(e){f.push(`Failed to remove plugin directory ${p}: ${e instanceof Error?e.message:String(e)}`)}}return{ok:!0,config:l,pluginId:n,actions:d,warnings:f}}function V(e){let t=e.trim();if(!t.toLowerCase().startsWith(`file:`))return null;let n=t.slice(5);return n?n.startsWith(`///`)?{ok:!0,path:n.slice(2)}:n.startsWith(`//localhost/`)?{ok:!0,path:n.slice(11)}:n.startsWith(`//`)?{ok:!1,error:`unsupported file: URL host (expected "file:<path>" or "file:///abs/path")`}:{ok:!0,path:n}:{ok:!1,error:`unsupported file: spec: missing path`}}function H(e,n=!1){let r=e.status===`loaded`?t.success(`loaded`):e.status===`disabled`?t.warn(`disabled`):t.error(`error`),i=t.command(e.name||e.id),o=e.name&&e.name!==e.id?t.muted(` (${e.id})`):``,s=e.description?t.muted(e.description.length>60?`${e.description.slice(0,57)}...`:e.description):t.muted(`(no description)`);if(!n)return`${i}${o} ${r} - ${s}`;let c=[`${i}${o} ${r}`,` source: ${t.muted(a(e.source))}`,` origin: ${e.origin}`];return e.version&&c.push(` version: ${e.version}`),e.providerIds.length>0&&c.push(` providers: ${e.providerIds.join(`, `)}`),e.error&&c.push(t.error(` error: ${e.error}`)),c.join(`
1
+ import{g as e}from"./paths-B4IRk3wi.js";import{A as t,p as n}from"./subsystem-C5XF2Fy5.js";import{S as r,g as i,x as a,y as o}from"./utils-UGOV_184.js";import{Lo as s,nc as c,qs as l}from"./model-selection-BlC_rXAN.js";import"./reply-CjyZeZ-j.js";import"./agent-scope-DXZc3eNT.js";import"./openclaw-root-D_0Q6--h.js";import"./github-copilot-token-DGYAlOmV.js";import"./boolean-Ch3DfXPy.js";import"./env-D7wNuBx1.js";import"./env-overrides-DXJbFrwI.js";import{N as u,P as d}from"./registry-hFAtCSWG.js";import{S as f,m as p}from"./skills-DHbOKEGc.js";import"./frontmatter-BkZkwkVO.js";import"./plugins-CYLrFT4h.js";import"./logger-Bl8URnrW.js";import"./exec-DHqLtFYt.js";import"./windows-spawn-AB7ItGAE.js";import"./redact-3_CiXMY6.js";import"./path-alias-guards-mvyLCPlN.js";import"./errors-Bunti32V.js";import"./send-Cgd_VJHR.js";import"./send-hZFDcGLM.js";import"./paths-yLEk_25I.js";import"./chat-envelope-HVpKusFc.js";import"./audio-transcription-runner-D4Bp6MM7.js";import"./image-DsoO5VP5.js";import"./models-config-CdMhNxKV.js";import"./tool-display-DjuSUUbH.js";import"./fetch-guard-DPdY0NXR.js";import"./api-key-rotation-BRt-vnRV.js";import"./local-roots-6waH0SZ0.js";import"./model-catalog-C1kpjR75.js";import"./proxy-fetch-BADsUK4d.js";import"./tokens-XGbQGn67.js";import"./deliver-ClBkV2eD.js";import"./commands-CGpM84iR.js";import"./commands-registry-B1x54ukc.js";import"./pairing-store-Cg2UxreQ.js";import"./fetch-Dikjvc5M.js";import"./call-CqoMqP5b.js";import"./with-timeout-WveKxvFV.js";import"./diagnostic-DOzHPnht.js";import"./send-B7sHR38c2.js";import"./pi-model-discovery-Dps1PPWz.js";import"./exec-approvals-allowlist-CE3nYh0K.js";import"./exec-safe-bin-runtime-policy-Dt0GchLp.js";import"./ir-Dk7OQ4bA.js";import"./render-D8OWO2hT.js";import"./target-errors-a35Md15n.js";import"./read-only-account-inspect-DBwAwB3_.js";import"./channel-selection-CbNtbAEf.js";import"./plugin-auto-enable-DpVL6-ES.js";import"./send-C-AP01PR.js";import"./outbound-attachment-B7wMxwj6.js";import"./delivery-queue-CKbauSFq.js";import"./send-DbeEC2a3.js";import"./channel-activity-YjYNzCpJ.js";import"./tables-Oieq7UbT.js";import"./fetch-Bn0mWg6a.js";import"./skill-commands-HJHHZqt6.js";import"./workspace-dirs-BhF1Dzxt.js";import"./pairing-token-BjYBuREl.js";import"./restart-CHXEHdSC.js";import"./runtime-web-tools-bz76ZaRc.js";import"./command-secret-targets-BVN3kiT9.js";import"./session-cost-usage-BgqKixv0.js";import"./connection-auth-C8iru0UB.js";import"./onboard-helpers-zwybUJWu.js";import"./prompt-style-CXKekIBY.js";import"./pairing-labels-BUU_-70B.js";import"./memory-cli-jhzJ3as7.js";import"./query-expansion-0OxEb1Io.js";import"./manager-M1GKhLUC.js";import{t as m}from"./links-CySwdMcF.js";import"./cli-utils-BY7dLMFy.js";import"./help-format-BRbF_INg.js";import"./progress-LNttnI-y.js";import"./exec-approvals-BpBNEy6i.js";import"./nodes-screen-DECgxo6A.js";import"./system-run-command-DEWnZE0r.js";import"./runtime-BC5Ep2pJ.js";import"./stagger-DmFYysrJ.js";import{n as h,t as g}from"./enable-Ccf9wSM8.js";import{u as _}from"./install-safe-path-iesxijn2.js";import"./npm-pack-install-B23L-AtF.js";import"./skill-scanner-CUUF3Fvo.js";import{c as v,l as y,n as b,r as x,s as S}from"./installs-BNeI_oML.js";import{r as C,t as w}from"./plugin-install-plan-BobX0y9S.js";import{n as T,t as E}from"./table-CY440fI1.js";import{i as D,n as O,r as k}from"./npm-resolution-Bui58Ks1.js";import{n as A}from"./update-BGrxUIyz.js";import j from"node:fs";import M from"node:os";import N from"node:path";import P from"node:fs/promises";function F(e,t){let n=N.relative(e,t);return!n||n===`.`||n===`..`||n.startsWith(`..${N.sep}`)||n.startsWith(`../`)||n.startsWith(`..\\`)||N.isAbsolute(n)?null:n.replaceAll(`\\`,`/`)}function I(e){return{stock:f(),global:N.join(i(),`extensions`),workspace:e.workspaceDir?N.join(e.workspaceDir,`.openclaw`,`extensions`):void 0}}function L(e,t){let n=e.source;if(e.origin===`bundled`&&t.stock){let e=F(t.stock,n);if(e)return{value:`stock:${e}`,rootKey:`stock`}}if(e.origin===`workspace`&&t.workspace){let e=F(t.workspace,n);if(e)return{value:`workspace:${e}`,rootKey:`workspace`}}if(e.origin===`global`&&t.global){let e=F(t.global,n);if(e)return{value:`global:${e}`,rootKey:`global`}}return{value:a(n)}}function R(e){if(!e.hasInstall||e.installRecord?.source===`path`)return null;let t;try{t=y(e.pluginId,e.extensionsDir)}catch{return null}let n=e.installRecord?.installPath;return n&&N.resolve(n)===N.resolve(t)?n:t}function z(e,t){let n={entry:!1,install:!1,allowlist:!1,loadPath:!1,memorySlot:!1},r=e.plugins??{},i=r.entries;if(i&&t in i){let{[t]:e,...r}=i;i=Object.keys(r).length>0?r:void 0,n.entry=!0}let a=r.installs,o=a?.[t];if(a&&t in a){let{[t]:e,...r}=a;a=Object.keys(r).length>0?r:void 0,n.install=!0}let s=r.allow;Array.isArray(s)&&s.includes(t)&&(s=s.filter(e=>e!==t),s.length===0&&(s=void 0),n.allowlist=!0);let c=r.load;if(o?.source===`path`&&o.sourcePath){let e=o.sourcePath,t=c?.paths;if(Array.isArray(t)&&t.includes(e)){let r=t.filter(t=>t!==e);c=r.length>0?{...c,paths:r}:void 0,n.loadPath=!0}}let l=r.slots;l?.memory===t&&(l={...l,memory:d(`memory`)},n.memorySlot=!0),l&&Object.keys(l).length===0&&(l=void 0);let u={...r,entries:i,installs:a,allow:s,load:c,slots:l};return u.entries===void 0&&delete u.entries,u.installs===void 0&&delete u.installs,u.allow===void 0&&delete u.allow,u.load===void 0&&delete u.load,u.slots===void 0&&delete u.slots,{config:{...e,plugins:Object.keys(u).length>0?u:void 0},actions:n}}async function B(e){let{config:t,pluginId:n,deleteFiles:r=!0,extensionsDir:i}=e,a=n in(t.plugins?.entries??{}),o=n in(t.plugins?.installs??{});if(!a&&!o)return{ok:!1,error:`Plugin not found: ${n}`};let s=t.plugins?.installs?.[n],c=s?.source===`path`,{config:l,actions:u}=z(t,n),d={...u,directory:!1},f=[],p=r&&!c?R({pluginId:n,hasInstall:o,installRecord:s,extensionsDir:i}):null;if(p){let e=await P.access(p).then(()=>!0).catch(()=>!1)??!1;try{await P.rm(p,{recursive:!0,force:!0}),d.directory=e}catch(e){f.push(`Failed to remove plugin directory ${p}: ${e instanceof Error?e.message:String(e)}`)}}return{ok:!0,config:l,pluginId:n,actions:d,warnings:f}}function V(e){let t=e.trim();if(!t.toLowerCase().startsWith(`file:`))return null;let n=t.slice(5);return n?n.startsWith(`///`)?{ok:!0,path:n.slice(2)}:n.startsWith(`//localhost/`)?{ok:!0,path:n.slice(11)}:n.startsWith(`//`)?{ok:!1,error:`unsupported file: URL host (expected "file:<path>" or "file:///abs/path")`}:{ok:!0,path:n}:{ok:!1,error:`unsupported file: spec: missing path`}}function H(e,n=!1){let r=e.status===`loaded`?t.success(`loaded`):e.status===`disabled`?t.warn(`disabled`):t.error(`error`),i=t.command(e.name||e.id),o=e.name&&e.name!==e.id?t.muted(` (${e.id})`):``,s=e.description?t.muted(e.description.length>60?`${e.description.slice(0,57)}...`:e.description):t.muted(`(no description)`);if(!n)return`${i}${o} ${r} - ${s}`;let c=[`${i}${o} ${r}`,` source: ${t.muted(a(e.source))}`,` origin: ${e.origin}`];return e.version&&c.push(` version: ${e.version}`),e.providerIds.length>0&&c.push(` providers: ${e.providerIds.join(`, `)}`),e.error&&c.push(t.error(` error: ${e.error}`)),c.join(`
2
2
  `)}function U(e,t){let n=D({config:e}),r=n.plugins.find(e=>e.id===t);if(!r)return{config:e,warnings:[]};let i=u({config:e,selectedId:r.id,selectedKind:r.kind,registry:n});return{config:i.config,warnings:i.warnings}}function W(){return{info:e=>n.log(e),warn:e=>n.log(t.warn(e))}}function G(e){if(e.length!==0)for(let r of e)n.log(t.warn(r))}async function K(e){let r=e.config.plugins?.load?.paths??[],i=Array.from(new Set([...r,e.bundledSource.localPath])),a={...e.config,plugins:{...e.config.plugins,load:{...e.config.plugins?.load,paths:i},entries:{...e.config.plugins?.entries,[e.bundledSource.pluginId]:{...e.config.plugins?.entries?.[e.bundledSource.pluginId],enabled:!0}}}};a=b(a,{pluginId:e.bundledSource.pluginId,source:`path`,spec:e.rawSpec,sourcePath:e.bundledSource.localPath,installPath:e.bundledSource.localPath});let o=U(a,e.bundledSource.pluginId);a=o.config,await c(a),G(o.warnings),n.log(t.warn(e.warning)),n.log(`Installed plugin: ${e.bundledSource.pluginId}`),n.log(`Restart the gateway to load plugins.`)}async function q(e){let{raw:i,opts:a}=e,s=V(i);s&&!s.ok&&(n.error(s.error),process.exit(1));let u=o(s&&s.ok?s.path:i),d=l();if(j.existsSync(u)){if(a.link){let e=d.plugins?.load?.paths??[],t=Array.from(new Set([...e,u])),i=await v({path:u,dryRun:!0});i.ok||(n.error(i.error),process.exit(1));let a=g({...d,plugins:{...d.plugins,load:{...d.plugins?.load,paths:t}}},i.pluginId).config;a=b(a,{pluginId:i.pluginId,source:`path`,sourcePath:u,installPath:u,version:i.version});let o=U(a,i.pluginId);a=o.config,await c(a),G(o.warnings),n.log(`Linked plugin path: ${r(u)}`),n.log(`Restart the gateway to load plugins.`);return}let e=await v({path:u,logger:W()});e.ok||(n.error(e.error),process.exit(1)),p();let t=g(d,e.pluginId).config,i=_(u)?`archive`:`path`;t=b(t,{pluginId:e.pluginId,source:i,sourcePath:u,installPath:e.targetDir,version:e.version});let o=U(t,e.pluginId);t=o.config,await c(t),G(o.warnings),n.log(`Installed plugin: ${e.pluginId}`),n.log(`Restart the gateway to load plugins.`);return}a.link&&(n.error("`--link` requires a local path."),process.exit(1)),k(i,[`.ts`,`.js`,`.mjs`,`.cjs`,`.tgz`,`.tar.gz`,`.tar`,`.zip`])&&(n.error(`Path not found: ${u}`),process.exit(1));let f=w({rawSpec:i,findBundledSource:e=>x({lookup:e})});if(f){await K({config:d,rawSpec:i,bundledSource:f.bundledSource,warning:f.warning});return}let m=await S({spec:i,logger:W()});if(!m.ok){let e=C({rawSpec:i,code:m.code,findBundledSource:e=>x({lookup:e})});e||(n.error(m.error),process.exit(1)),await K({config:d,rawSpec:i,bundledSource:e.bundledSource,warning:e.warning});return}p();let h=g(d,m.pluginId).config,y=O(i,!!a.pin,m.targetDir,m.version,m.npmResolution,n.log,t.warn);h=b(h,{pluginId:m.pluginId,...y});let T=U(h,m.pluginId);h=T.config,await c(h),G(T.warnings),n.log(`Installed plugin: ${m.pluginId}`),n.log(`Restart the gateway to load plugins.`)}function J(i){let o=i.command(`plugins`).description(`Manage OpenClaw plugins and extensions`).addHelpText(`after`,()=>`\n${t.muted(`Docs:`)} ${m(`/cli/plugins`,`docs.openclaw.ai/cli/plugins`)}\n`);o.command(`list`).description(`List discovered plugins`).option(`--json`,`Print JSON`).option(`--enabled`,`Only show enabled plugins`,!1).option(`--verbose`,`Show detailed entries`,!1).action(e=>{let r=D(),i=e.enabled?r.plugins.filter(e=>e.status===`loaded`):r.plugins;if(e.json){let e={workspaceDir:r.workspaceDir,plugins:i,diagnostics:r.diagnostics};n.log(JSON.stringify(e,null,2));return}if(i.length===0){n.log(t.muted(`No plugins found.`));return}let a=i.filter(e=>e.status===`loaded`).length;if(n.log(`${t.heading(`Plugins`)} ${t.muted(`(${a}/${i.length} loaded)`)}`),!e.verbose){let e=E(),a=I({workspaceDir:r.workspaceDir}),o=new Set,s=i.map(e=>{let n=e.description?t.muted(e.description):``,r=L(e,a);r.rootKey&&o.add(r.rootKey);let i=n?`${r.value}\n${n}`:r.value;return{Name:e.name||e.id,ID:e.name&&e.name!==e.id?e.id:``,Status:e.status===`loaded`?t.success(`loaded`):e.status===`disabled`?t.warn(`disabled`):t.error(`error`),Source:i,Version:e.version??``}});if(o.size>0){n.log(t.muted(`Source roots:`));for(let e of[`stock`,`workspace`,`global`]){if(!o.has(e))continue;let r=a[e];r&&n.log(` ${t.command(`${e}:`)} ${t.muted(r)}`)}n.log(``)}n.log(T({width:e,columns:[{key:`Name`,header:`Name`,minWidth:14,flex:!0},{key:`ID`,header:`ID`,minWidth:10,flex:!0},{key:`Status`,header:`Status`,minWidth:10},{key:`Source`,header:`Source`,minWidth:26,flex:!0},{key:`Version`,header:`Version`,minWidth:8}],rows:s}).trimEnd());return}let o=[];for(let e of i)o.push(H(e,!0)),o.push(``);n.log(o.join(`
3
3
  `).trim())}),o.command(`info`).description(`Show plugin details`).argument(`<id>`,`Plugin id`).option(`--json`,`Print JSON`).action((e,i)=>{let o=D().plugins.find(t=>t.id===e||t.name===e);o||(n.error(`Plugin not found: ${e}`),process.exit(1));let s=l().plugins?.installs?.[o.id];if(i.json){n.log(JSON.stringify(o,null,2));return}let c=[];c.push(t.heading(o.name||o.id)),o.name&&o.name!==o.id&&c.push(t.muted(`id: ${o.id}`)),o.description&&c.push(o.description),c.push(``),c.push(`${t.muted(`Status:`)} ${o.status}`),c.push(`${t.muted(`Source:`)} ${a(o.source)}`),c.push(`${t.muted(`Origin:`)} ${o.origin}`),o.version&&c.push(`${t.muted(`Version:`)} ${o.version}`),o.toolNames.length>0&&c.push(`${t.muted(`Tools:`)} ${o.toolNames.join(`, `)}`),o.hookNames.length>0&&c.push(`${t.muted(`Hooks:`)} ${o.hookNames.join(`, `)}`),o.gatewayMethods.length>0&&c.push(`${t.muted(`Gateway methods:`)} ${o.gatewayMethods.join(`, `)}`),o.providerIds.length>0&&c.push(`${t.muted(`Providers:`)} ${o.providerIds.join(`, `)}`),o.cliCommands.length>0&&c.push(`${t.muted(`CLI commands:`)} ${o.cliCommands.join(`, `)}`),o.services.length>0&&c.push(`${t.muted(`Services:`)} ${o.services.join(`, `)}`),o.error&&c.push(`${t.error(`Error:`)} ${o.error}`),s&&(c.push(``),c.push(`${t.muted(`Install:`)} ${s.source}`),s.spec&&c.push(`${t.muted(`Spec:`)} ${s.spec}`),s.sourcePath&&c.push(`${t.muted(`Source path:`)} ${r(s.sourcePath)}`),s.installPath&&c.push(`${t.muted(`Install path:`)} ${r(s.installPath)}`),s.version&&c.push(`${t.muted(`Recorded version:`)} ${s.version}`),s.installedAt&&c.push(`${t.muted(`Installed at:`)} ${s.installedAt}`)),n.log(c.join(`
4
4
  `))}),o.command(`enable`).description(`Enable a plugin in config`).argument(`<id>`,`Plugin id`).action(async e=>{let r=g(l(),e),i=r.config,a=U(i,e);if(i=a.config,await c(i),G(a.warnings),r.enabled){n.log(`Enabled plugin "${e}". Restart the gateway to apply.`);return}n.log(t.warn(`Plugin "${e}" could not be enabled (${r.reason??`unknown reason`}).`))}),o.command(`disable`).description(`Disable a plugin in config`).argument(`<id>`,`Plugin id`).action(async e=>{await c(h(l(),e,!1)),n.log(`Disabled plugin "${e}". Restart the gateway to apply.`)}),o.command(`uninstall`).description(`Uninstall a plugin`).argument(`<id>`,`Plugin id`).option(`--keep-files`,`Keep installed files on disk`,!1).option(`--keep-config`,`Deprecated alias for --keep-files`,!1).option(`--force`,`Skip confirmation prompt`,!1).option(`--dry-run`,`Show what would be removed without making changes`,!1).action(async(i,a)=>{let o=l(),u=D({config:o}),d=N.join(e(process.env,M.homedir),`extensions`),f=!!(a.keepFiles||a.keepConfig);a.keepConfig&&n.log(t.warn("`--keep-config` is deprecated, use `--keep-files`."));let p=u.plugins.find(e=>e.id===i||e.name===i),m=p?.id??i,h=m in(o.plugins?.entries??{}),g=m in(o.plugins?.installs??{});!h&&!g&&(p?n.error(`Plugin "${m}" is not managed by plugins config/install records and cannot be uninstalled.`):n.error(`Plugin not found: ${i}`),process.exit(1));let _=o.plugins?.installs?.[m],v=_?.source===`path`,y=[];h&&y.push(`config entry`),g&&y.push(`install record`),o.plugins?.allow?.includes(m)&&y.push(`allowlist entry`),v&&_?.sourcePath&&o.plugins?.load?.paths?.includes(_.sourcePath)&&y.push(`load path`),o.plugins?.slots?.memory===m&&y.push(`memory slot (will reset to "memory-core")`);let b=f?null:R({pluginId:m,hasInstall:g,installRecord:_,extensionsDir:d});b&&y.push(`directory: ${r(b)}`);let x=p?.name||m;if(n.log(`Plugin: ${t.command(x)}${x===m?``:t.muted(` (${m})`)}`),n.log(`Will remove: ${y.length>0?y.join(`, `):`(nothing)`}`),a.dryRun){n.log(t.muted(`Dry run, no changes made.`));return}if(!a.force&&!await s(`Uninstall plugin "${m}"?`)){n.log(`Cancelled.`);return}let S=await B({config:o,pluginId:m,deleteFiles:!f,extensionsDir:d});S.ok||(n.error(S.error),process.exit(1));for(let e of S.warnings)n.log(t.warn(e));await c(S.config);let C=[];S.actions.entry&&C.push(`config entry`),S.actions.install&&C.push(`install record`),S.actions.allowlist&&C.push(`allowlist`),S.actions.loadPath&&C.push(`load path`),S.actions.memorySlot&&C.push(`memory slot`),S.actions.directory&&C.push(`directory`),n.log(`Uninstalled plugin "${m}". Removed: ${C.length>0?C.join(`, `):`nothing`}.`),n.log(`Restart the gateway to apply changes.`)}),o.command(`install`).description(`Install a plugin (path, archive, or npm spec)`).argument(`<path-or-spec>`,`Path (.ts/.js/.zip/.tgz/.tar.gz) or an npm package spec`).option(`-l, --link`,`Link a local path instead of copying`,!1).option(`--pin`,`Record npm installs as exact resolved <name>@<version>`,!1).action(async(e,t)=>{await q({raw:e,opts:t})}),o.command(`update`).description(`Update installed plugins (npm installs only)`).argument(`[id]`,`Plugin id (omit with --all)`).option(`--all`,`Update all tracked plugins`,!1).option(`--dry-run`,`Show what would change without writing`,!1).action(async(e,r)=>{let i=l(),a=i.plugins?.installs??{},o=r.all?Object.keys(a):e?[e]:[];if(o.length===0){if(r.all){n.log(`No npm-installed plugins to update.`);return}n.error(`Provide a plugin id or use --all.`),process.exit(1)}let u=await A({config:i,pluginIds:o,dryRun:r.dryRun,logger:{info:e=>n.log(e),warn:e=>n.log(t.warn(e))},onIntegrityDrift:async e=>{let r=e.resolvedSpec??e.spec;return n.log(t.warn(`Integrity drift detected for "${e.pluginId}" (${r})\nExpected: ${e.expectedIntegrity}\nActual: ${e.actualIntegrity}`)),e.dryRun?!0:await s(`Continue updating "${e.pluginId}" with this artifact?`)}});for(let e of u.outcomes){if(e.status===`error`){n.log(t.error(e.message));continue}if(e.status===`skipped`){n.log(t.warn(e.message));continue}n.log(e.message)}!r.dryRun&&u.changed&&(await c(u.config),n.log(`Restart the gateway to load plugins.`))}),o.command(`doctor`).description(`Report plugin load issues`).action(()=>{let e=D(),r=e.plugins.filter(e=>e.status===`error`),i=e.diagnostics.filter(e=>e.level===`error`);if(r.length===0&&i.length===0){n.log(`No plugin issues detected.`);return}let a=[];if(r.length>0){a.push(t.error(`Plugin errors:`));for(let e of r)a.push(`- ${e.id}: ${e.error??`failed to load`} (${e.source})`)}if(i.length>0){a.length>0&&a.push(``),a.push(t.warn(`Diagnostics:`));for(let e of i){let t=e.pluginId?`${e.pluginId}: `:``;a.push(`- ${t}${e.message}`)}}let o=m(`/plugin`,`docs.openclaw.ai/plugin`);a.push(``),a.push(`${t.muted(`Docs:`)} ${o}`),n.log(a.join(`
5
5
  `))})}export{J as registerPluginsCli};
6
- //# sourceMappingURL=plugins-cli-BiVMAr5T.js.map
6
+ //# sourceMappingURL=plugins-cli-BzJeq-CW.js.map
@@ -1,6 +1,6 @@
1
- import{A as e,p as t}from"./subsystem-BLbY429l.js";import{g as n}from"./paths-BjD3T_xq.js";import"./boolean-D15s2V33.js";import{Bo as r,jo as i,xa as a}from"./auth-profiles-T8DuH3ax.js";import"./agent-scope-DAWJwFfl.js";import{b as o,h as s,v as c,x as l}from"./utils-CGdo13HV.js";import"./openclaw-root-CnsBf6ZU.js";import"./github-copilot-token-C79yeDKS.js";import"./env-overrides-DHtB4kK3.js";import"./version-q3SkUw2K.js";import{N as u,P as d}from"./registry-BptzrW8D.js";import{S as f,m as p}from"./skills-CKTicUKS.js";import"./frontmatter-C7mzDNxd.js";import"./plugins-DNlgeTTc.js";import"./logger-kQAOe3qp.js";import"./exec-B3eleY5O.js";import"./windows-spawn-7oINn5ao.js";import"./redact-CnRxK70G.js";import"./path-alias-guards-kY_ZbWs-.js";import"./errors-6SQWM9dj.js";import"./send-CW81y5Wz.js";import"./send-DavpkzhH.js";import"./compact-Dg66DXx_.js";import"./paths-BfjJY2VL.js";import"./chat-envelope-Bznn2SoS.js";import"./models-config-_htt7eY5.js";import"./tokens-DRM8vzJx.js";import"./with-timeout-c1CzdShT.js";import"./deliver-BHuhHfkH.js";import"./diagnostic-DQq4Bwrs.js";import"./send-DkiKKUkt.js";import"./pi-model-discovery-CpjYoBQf.js";import"./exec-approvals-allowlist-D8mN7nxV.js";import"./exec-safe-bin-runtime-policy-dcCS_Adf.js";import"./model-catalog-COVzoZD9.js";import"./fetch-CQaNr5J1.js";import"./audio-transcription-runner-Bd1OZC6K.js";import"./fetch-guard-BrTtJw7h.js";import"./image-BkWwI54C.js";import"./tool-display-DJDtttQg.js";import"./api-key-rotation-D0QU-kQ9.js";import"./proxy-fetch-gWETR3cl.js";import"./ir-D8Hh84ab.js";import"./render-DrrPmnMI.js";import"./target-errors-CgWAJOam.js";import"./commands-Dy7duWlt.js";import"./commands-registry-Cpl4QnG4.js";import"./session-cost-usage-CHtVgnE8.js";import"./session-utils-8acNlxwP.js";import"./sqlite-CILF3z9U.js";import"./call-B8Fb4_oh.js";import"./pi-tools.policy-D40r0HmD.js";import"./pairing-store-BH-FTYkn.js";import"./fetch-Dh-apy46.js";import"./skill-commands-CSF6wVPU.js";import"./workspace-dirs-A8Vib9_B.js";import"./pairing-token-DAR7V7FJ.js";import"./channel-activity-BBrgoad1.js";import"./tables-Brc2lNcB.js";import"./kill-tree-B3g7HrAO.js";import"./runtime-web-tools-D8fms06-.js";import"./runtime-Dlg2-Omq.js";import"./node-shell-DyOfwHrh.js";import"./stagger-DxzgG2jd.js";import"./channel-selection-BBeE1TmB.js";import"./plugin-auto-enable-NzmNh4oU.js";import"./send-CVplsJpw.js";import"./outbound-attachment-BgAe99RM.js";import"./delivery-queue-nkPJu0fY.js";import"./send-C48Y9SAq.js";import"./system-run-command-BKfMiqQM.js";import"./fetch-Ce-scEU-.js";import"./command-secret-targets-BlN-J_fA.js";import"./connection-auth-B_Uk6Vk8.js";import"./onboard-helpers-PGl5bVPE.js";import"./prompt-style-BThRSQJR.js";import"./pairing-labels-D-kzQEL2.js";import"./search-manager-Bp9x20r6.js";import"./manager-C2YW7Hkq.js";import"./memory-cli-XaxtBQm1.js";import{t as m}from"./links-CBnmRP9D.js";import"./cli-utils-BleB1eys.js";import"./help-format-B4aEI7V9.js";import"./progress-d1m2sqR1.js";import"./exec-approvals-BXO9Cezj.js";import{n as h,t as g}from"./enable-BhD84GhD.js";import{u as _}from"./install-safe-path-C6kc_8NW.js";import"./npm-pack-install-C0te3Oap.js";import"./skill-scanner-CkxXNioD.js";import{c as v,l as y,n as b,r as x,s as S}from"./installs-C1xQLuby.js";import{r as C,t as w}from"./plugin-install-plan-NvDGp0d8.js";import{n as T,t as E}from"./table-CR7TFMew.js";import{i as D,n as O,r as k}from"./npm-resolution-BnJGLwhi.js";import{n as A}from"./update-CwTy5DPl.js";import j from"node:os";import M from"node:path";import N from"node:fs";import P from"node:fs/promises";function F(e,t){let n=M.relative(e,t);return!n||n===`.`||n===`..`||n.startsWith(`..${M.sep}`)||n.startsWith(`../`)||n.startsWith(`..\\`)||M.isAbsolute(n)?null:n.replaceAll(`\\`,`/`)}function I(e){return{stock:f(),global:M.join(s(),`extensions`),workspace:e.workspaceDir?M.join(e.workspaceDir,`.openclaw`,`extensions`):void 0}}function L(e,t){let n=e.source;if(e.origin===`bundled`&&t.stock){let e=F(t.stock,n);if(e)return{value:`stock:${e}`,rootKey:`stock`}}if(e.origin===`workspace`&&t.workspace){let e=F(t.workspace,n);if(e)return{value:`workspace:${e}`,rootKey:`workspace`}}if(e.origin===`global`&&t.global){let e=F(t.global,n);if(e)return{value:`global:${e}`,rootKey:`global`}}return{value:o(n)}}function R(e){if(!e.hasInstall||e.installRecord?.source===`path`)return null;let t;try{t=y(e.pluginId,e.extensionsDir)}catch{return null}let n=e.installRecord?.installPath;return n&&M.resolve(n)===M.resolve(t)?n:t}function z(e,t){let n={entry:!1,install:!1,allowlist:!1,loadPath:!1,memorySlot:!1},r=e.plugins??{},i=r.entries;if(i&&t in i){let{[t]:e,...r}=i;i=Object.keys(r).length>0?r:void 0,n.entry=!0}let a=r.installs,o=a?.[t];if(a&&t in a){let{[t]:e,...r}=a;a=Object.keys(r).length>0?r:void 0,n.install=!0}let s=r.allow;Array.isArray(s)&&s.includes(t)&&(s=s.filter(e=>e!==t),s.length===0&&(s=void 0),n.allowlist=!0);let c=r.load;if(o?.source===`path`&&o.sourcePath){let e=o.sourcePath,t=c?.paths;if(Array.isArray(t)&&t.includes(e)){let r=t.filter(t=>t!==e);c=r.length>0?{...c,paths:r}:void 0,n.loadPath=!0}}let l=r.slots;l?.memory===t&&(l={...l,memory:d(`memory`)},n.memorySlot=!0),l&&Object.keys(l).length===0&&(l=void 0);let u={...r,entries:i,installs:a,allow:s,load:c,slots:l};return u.entries===void 0&&delete u.entries,u.installs===void 0&&delete u.installs,u.allow===void 0&&delete u.allow,u.load===void 0&&delete u.load,u.slots===void 0&&delete u.slots,{config:{...e,plugins:Object.keys(u).length>0?u:void 0},actions:n}}async function B(e){let{config:t,pluginId:n,deleteFiles:r=!0,extensionsDir:i}=e,a=n in(t.plugins?.entries??{}),o=n in(t.plugins?.installs??{});if(!a&&!o)return{ok:!1,error:`Plugin not found: ${n}`};let s=t.plugins?.installs?.[n],c=s?.source===`path`,{config:l,actions:u}=z(t,n),d={...u,directory:!1},f=[],p=r&&!c?R({pluginId:n,hasInstall:o,installRecord:s,extensionsDir:i}):null;if(p){let e=await P.access(p).then(()=>!0).catch(()=>!1)??!1;try{await P.rm(p,{recursive:!0,force:!0}),d.directory=e}catch(e){f.push(`Failed to remove plugin directory ${p}: ${e instanceof Error?e.message:String(e)}`)}}return{ok:!0,config:l,pluginId:n,actions:d,warnings:f}}function V(e){let t=e.trim();if(!t.toLowerCase().startsWith(`file:`))return null;let n=t.slice(5);return n?n.startsWith(`///`)?{ok:!0,path:n.slice(2)}:n.startsWith(`//localhost/`)?{ok:!0,path:n.slice(11)}:n.startsWith(`//`)?{ok:!1,error:`unsupported file: URL host (expected "file:<path>" or "file:///abs/path")`}:{ok:!0,path:n}:{ok:!1,error:`unsupported file: spec: missing path`}}function H(t,n=!1){let r=t.status===`loaded`?e.success(`loaded`):t.status===`disabled`?e.warn(`disabled`):e.error(`error`),i=e.command(t.name||t.id),a=t.name&&t.name!==t.id?e.muted(` (${t.id})`):``,s=t.description?e.muted(t.description.length>60?`${t.description.slice(0,57)}...`:t.description):e.muted(`(no description)`);if(!n)return`${i}${a} ${r} - ${s}`;let c=[`${i}${a} ${r}`,` source: ${e.muted(o(t.source))}`,` origin: ${t.origin}`];return t.version&&c.push(` version: ${t.version}`),t.providerIds.length>0&&c.push(` providers: ${t.providerIds.join(`, `)}`),t.error&&c.push(e.error(` error: ${t.error}`)),c.join(`
1
+ import{A as e,p as t}from"./subsystem-BLbY429l.js";import{g as n}from"./paths-BjD3T_xq.js";import"./boolean-D15s2V33.js";import{Bo as r,jo as i,xa as a}from"./auth-profiles-T8DuH3ax.js";import"./agent-scope-DAWJwFfl.js";import{b as o,h as s,v as c,x as l}from"./utils-CGdo13HV.js";import"./openclaw-root-CnsBf6ZU.js";import"./github-copilot-token-C79yeDKS.js";import"./env-overrides-DHtB4kK3.js";import"./version-q3SkUw2K.js";import{N as u,P as d}from"./registry-BptzrW8D.js";import{S as f,m as p}from"./skills-CKTicUKS.js";import"./frontmatter-C7mzDNxd.js";import"./plugins-DNlgeTTc.js";import"./logger-kQAOe3qp.js";import"./exec-B3eleY5O.js";import"./windows-spawn-7oINn5ao.js";import"./redact-CnRxK70G.js";import"./path-alias-guards-kY_ZbWs-.js";import"./errors-6SQWM9dj.js";import"./send-CW81y5Wz.js";import"./send-DavpkzhH.js";import"./compact-BEeB6bwq.js";import"./paths-BfjJY2VL.js";import"./chat-envelope-Bznn2SoS.js";import"./models-config-_htt7eY5.js";import"./tokens-DRM8vzJx.js";import"./with-timeout-c1CzdShT.js";import"./deliver-BHuhHfkH.js";import"./diagnostic-DQq4Bwrs.js";import"./send-DkiKKUkt.js";import"./pi-model-discovery-CpjYoBQf.js";import"./exec-approvals-allowlist-D8mN7nxV.js";import"./exec-safe-bin-runtime-policy-dcCS_Adf.js";import"./model-catalog-COVzoZD9.js";import"./fetch-CQaNr5J1.js";import"./audio-transcription-runner-Bd1OZC6K.js";import"./fetch-guard-BrTtJw7h.js";import"./image-BkWwI54C.js";import"./tool-display-DJDtttQg.js";import"./api-key-rotation-D0QU-kQ9.js";import"./proxy-fetch-gWETR3cl.js";import"./ir-D8Hh84ab.js";import"./render-DrrPmnMI.js";import"./target-errors-CgWAJOam.js";import"./commands-Dy7duWlt.js";import"./commands-registry-Cpl4QnG4.js";import"./session-cost-usage-CHtVgnE8.js";import"./session-utils-8acNlxwP.js";import"./sqlite-CILF3z9U.js";import"./call-B8Fb4_oh.js";import"./pi-tools.policy-D40r0HmD.js";import"./pairing-store-BH-FTYkn.js";import"./fetch-Dh-apy46.js";import"./skill-commands-CSF6wVPU.js";import"./workspace-dirs-A8Vib9_B.js";import"./pairing-token-DAR7V7FJ.js";import"./channel-activity-BBrgoad1.js";import"./tables-Brc2lNcB.js";import"./kill-tree-B3g7HrAO.js";import"./runtime-web-tools-D8fms06-.js";import"./runtime-Dlg2-Omq.js";import"./node-shell-DyOfwHrh.js";import"./stagger-DxzgG2jd.js";import"./channel-selection-BBeE1TmB.js";import"./plugin-auto-enable-NzmNh4oU.js";import"./send-CVplsJpw.js";import"./outbound-attachment-BgAe99RM.js";import"./delivery-queue-nkPJu0fY.js";import"./send-C48Y9SAq.js";import"./system-run-command-BKfMiqQM.js";import"./fetch-Ce-scEU-.js";import"./command-secret-targets-BlN-J_fA.js";import"./connection-auth-B_Uk6Vk8.js";import"./onboard-helpers-PGl5bVPE.js";import"./prompt-style-BThRSQJR.js";import"./pairing-labels-D-kzQEL2.js";import"./search-manager-Bp9x20r6.js";import"./manager-C2YW7Hkq.js";import"./memory-cli-XaxtBQm1.js";import{t as m}from"./links-CBnmRP9D.js";import"./cli-utils-BleB1eys.js";import"./help-format-B4aEI7V9.js";import"./progress-d1m2sqR1.js";import"./exec-approvals-BXO9Cezj.js";import{n as h,t as g}from"./enable-BhD84GhD.js";import{u as _}from"./install-safe-path-C6kc_8NW.js";import"./npm-pack-install-C0te3Oap.js";import"./skill-scanner-CkxXNioD.js";import{c as v,l as y,n as b,r as x,s as S}from"./installs-C1xQLuby.js";import{r as C,t as w}from"./plugin-install-plan-NvDGp0d8.js";import{n as T,t as E}from"./table-CR7TFMew.js";import{i as D,n as O,r as k}from"./npm-resolution-Ct6MRtq6.js";import{n as A}from"./update-CwTy5DPl.js";import j from"node:os";import M from"node:path";import N from"node:fs";import P from"node:fs/promises";function F(e,t){let n=M.relative(e,t);return!n||n===`.`||n===`..`||n.startsWith(`..${M.sep}`)||n.startsWith(`../`)||n.startsWith(`..\\`)||M.isAbsolute(n)?null:n.replaceAll(`\\`,`/`)}function I(e){return{stock:f(),global:M.join(s(),`extensions`),workspace:e.workspaceDir?M.join(e.workspaceDir,`.openclaw`,`extensions`):void 0}}function L(e,t){let n=e.source;if(e.origin===`bundled`&&t.stock){let e=F(t.stock,n);if(e)return{value:`stock:${e}`,rootKey:`stock`}}if(e.origin===`workspace`&&t.workspace){let e=F(t.workspace,n);if(e)return{value:`workspace:${e}`,rootKey:`workspace`}}if(e.origin===`global`&&t.global){let e=F(t.global,n);if(e)return{value:`global:${e}`,rootKey:`global`}}return{value:o(n)}}function R(e){if(!e.hasInstall||e.installRecord?.source===`path`)return null;let t;try{t=y(e.pluginId,e.extensionsDir)}catch{return null}let n=e.installRecord?.installPath;return n&&M.resolve(n)===M.resolve(t)?n:t}function z(e,t){let n={entry:!1,install:!1,allowlist:!1,loadPath:!1,memorySlot:!1},r=e.plugins??{},i=r.entries;if(i&&t in i){let{[t]:e,...r}=i;i=Object.keys(r).length>0?r:void 0,n.entry=!0}let a=r.installs,o=a?.[t];if(a&&t in a){let{[t]:e,...r}=a;a=Object.keys(r).length>0?r:void 0,n.install=!0}let s=r.allow;Array.isArray(s)&&s.includes(t)&&(s=s.filter(e=>e!==t),s.length===0&&(s=void 0),n.allowlist=!0);let c=r.load;if(o?.source===`path`&&o.sourcePath){let e=o.sourcePath,t=c?.paths;if(Array.isArray(t)&&t.includes(e)){let r=t.filter(t=>t!==e);c=r.length>0?{...c,paths:r}:void 0,n.loadPath=!0}}let l=r.slots;l?.memory===t&&(l={...l,memory:d(`memory`)},n.memorySlot=!0),l&&Object.keys(l).length===0&&(l=void 0);let u={...r,entries:i,installs:a,allow:s,load:c,slots:l};return u.entries===void 0&&delete u.entries,u.installs===void 0&&delete u.installs,u.allow===void 0&&delete u.allow,u.load===void 0&&delete u.load,u.slots===void 0&&delete u.slots,{config:{...e,plugins:Object.keys(u).length>0?u:void 0},actions:n}}async function B(e){let{config:t,pluginId:n,deleteFiles:r=!0,extensionsDir:i}=e,a=n in(t.plugins?.entries??{}),o=n in(t.plugins?.installs??{});if(!a&&!o)return{ok:!1,error:`Plugin not found: ${n}`};let s=t.plugins?.installs?.[n],c=s?.source===`path`,{config:l,actions:u}=z(t,n),d={...u,directory:!1},f=[],p=r&&!c?R({pluginId:n,hasInstall:o,installRecord:s,extensionsDir:i}):null;if(p){let e=await P.access(p).then(()=>!0).catch(()=>!1)??!1;try{await P.rm(p,{recursive:!0,force:!0}),d.directory=e}catch(e){f.push(`Failed to remove plugin directory ${p}: ${e instanceof Error?e.message:String(e)}`)}}return{ok:!0,config:l,pluginId:n,actions:d,warnings:f}}function V(e){let t=e.trim();if(!t.toLowerCase().startsWith(`file:`))return null;let n=t.slice(5);return n?n.startsWith(`///`)?{ok:!0,path:n.slice(2)}:n.startsWith(`//localhost/`)?{ok:!0,path:n.slice(11)}:n.startsWith(`//`)?{ok:!1,error:`unsupported file: URL host (expected "file:<path>" or "file:///abs/path")`}:{ok:!0,path:n}:{ok:!1,error:`unsupported file: spec: missing path`}}function H(t,n=!1){let r=t.status===`loaded`?e.success(`loaded`):t.status===`disabled`?e.warn(`disabled`):e.error(`error`),i=e.command(t.name||t.id),a=t.name&&t.name!==t.id?e.muted(` (${t.id})`):``,s=t.description?e.muted(t.description.length>60?`${t.description.slice(0,57)}...`:t.description):e.muted(`(no description)`);if(!n)return`${i}${a} ${r} - ${s}`;let c=[`${i}${a} ${r}`,` source: ${e.muted(o(t.source))}`,` origin: ${t.origin}`];return t.version&&c.push(` version: ${t.version}`),t.providerIds.length>0&&c.push(` providers: ${t.providerIds.join(`, `)}`),t.error&&c.push(e.error(` error: ${t.error}`)),c.join(`
2
2
  `)}function U(e,t){let n=D({config:e}),r=n.plugins.find(e=>e.id===t);if(!r)return{config:e,warnings:[]};let i=u({config:e,selectedId:r.id,selectedKind:r.kind,registry:n});return{config:i.config,warnings:i.warnings}}function W(){return{info:e=>t.log(e),warn:n=>t.log(e.warn(n))}}function G(n){if(n.length!==0)for(let r of n)t.log(e.warn(r))}async function K(n){let i=n.config.plugins?.load?.paths??[],a=Array.from(new Set([...i,n.bundledSource.localPath])),o={...n.config,plugins:{...n.config.plugins,load:{...n.config.plugins?.load,paths:a},entries:{...n.config.plugins?.entries,[n.bundledSource.pluginId]:{...n.config.plugins?.entries?.[n.bundledSource.pluginId],enabled:!0}}}};o=b(o,{pluginId:n.bundledSource.pluginId,source:`path`,spec:n.rawSpec,sourcePath:n.bundledSource.localPath,installPath:n.bundledSource.localPath});let s=U(o,n.bundledSource.pluginId);o=s.config,await r(o),G(s.warnings),t.log(e.warn(n.warning)),t.log(`Installed plugin: ${n.bundledSource.pluginId}`),t.log(`Restart the gateway to load plugins.`)}async function q(n){let{raw:a,opts:o}=n,s=V(a);s&&!s.ok&&(t.error(s.error),process.exit(1));let u=c(s&&s.ok?s.path:a),d=i();if(N.existsSync(u)){if(o.link){let e=d.plugins?.load?.paths??[],n=Array.from(new Set([...e,u])),i=await v({path:u,dryRun:!0});i.ok||(t.error(i.error),process.exit(1));let a=g({...d,plugins:{...d.plugins,load:{...d.plugins?.load,paths:n}}},i.pluginId).config;a=b(a,{pluginId:i.pluginId,source:`path`,sourcePath:u,installPath:u,version:i.version});let o=U(a,i.pluginId);a=o.config,await r(a),G(o.warnings),t.log(`Linked plugin path: ${l(u)}`),t.log(`Restart the gateway to load plugins.`);return}let e=await v({path:u,logger:W()});e.ok||(t.error(e.error),process.exit(1)),p();let n=g(d,e.pluginId).config,i=_(u)?`archive`:`path`;n=b(n,{pluginId:e.pluginId,source:i,sourcePath:u,installPath:e.targetDir,version:e.version});let a=U(n,e.pluginId);n=a.config,await r(n),G(a.warnings),t.log(`Installed plugin: ${e.pluginId}`),t.log(`Restart the gateway to load plugins.`);return}o.link&&(t.error("`--link` requires a local path."),process.exit(1)),k(a,[`.ts`,`.js`,`.mjs`,`.cjs`,`.tgz`,`.tar.gz`,`.tar`,`.zip`])&&(t.error(`Path not found: ${u}`),process.exit(1));let f=w({rawSpec:a,findBundledSource:e=>x({lookup:e})});if(f){await K({config:d,rawSpec:a,bundledSource:f.bundledSource,warning:f.warning});return}let m=await S({spec:a,logger:W()});if(!m.ok){let e=C({rawSpec:a,code:m.code,findBundledSource:e=>x({lookup:e})});e||(t.error(m.error),process.exit(1)),await K({config:d,rawSpec:a,bundledSource:e.bundledSource,warning:e.warning});return}p();let h=g(d,m.pluginId).config,y=O(a,!!o.pin,m.targetDir,m.version,m.npmResolution,t.log,e.warn);h=b(h,{pluginId:m.pluginId,...y});let T=U(h,m.pluginId);h=T.config,await r(h),G(T.warnings),t.log(`Installed plugin: ${m.pluginId}`),t.log(`Restart the gateway to load plugins.`)}function J(s){let c=s.command(`plugins`).description(`Manage OpenClaw plugins and extensions`).addHelpText(`after`,()=>`\n${e.muted(`Docs:`)} ${m(`/cli/plugins`,`docs.openclaw.ai/cli/plugins`)}\n`);c.command(`list`).description(`List discovered plugins`).option(`--json`,`Print JSON`).option(`--enabled`,`Only show enabled plugins`,!1).option(`--verbose`,`Show detailed entries`,!1).action(n=>{let r=D(),i=n.enabled?r.plugins.filter(e=>e.status===`loaded`):r.plugins;if(n.json){let e={workspaceDir:r.workspaceDir,plugins:i,diagnostics:r.diagnostics};t.log(JSON.stringify(e,null,2));return}if(i.length===0){t.log(e.muted(`No plugins found.`));return}let a=i.filter(e=>e.status===`loaded`).length;if(t.log(`${e.heading(`Plugins`)} ${e.muted(`(${a}/${i.length} loaded)`)}`),!n.verbose){let n=E(),a=I({workspaceDir:r.workspaceDir}),o=new Set,s=i.map(t=>{let n=t.description?e.muted(t.description):``,r=L(t,a);r.rootKey&&o.add(r.rootKey);let i=n?`${r.value}\n${n}`:r.value;return{Name:t.name||t.id,ID:t.name&&t.name!==t.id?t.id:``,Status:t.status===`loaded`?e.success(`loaded`):t.status===`disabled`?e.warn(`disabled`):e.error(`error`),Source:i,Version:t.version??``}});if(o.size>0){t.log(e.muted(`Source roots:`));for(let n of[`stock`,`workspace`,`global`]){if(!o.has(n))continue;let r=a[n];r&&t.log(` ${e.command(`${n}:`)} ${e.muted(r)}`)}t.log(``)}t.log(T({width:n,columns:[{key:`Name`,header:`Name`,minWidth:14,flex:!0},{key:`ID`,header:`ID`,minWidth:10,flex:!0},{key:`Status`,header:`Status`,minWidth:10},{key:`Source`,header:`Source`,minWidth:26,flex:!0},{key:`Version`,header:`Version`,minWidth:8}],rows:s}).trimEnd());return}let o=[];for(let e of i)o.push(H(e,!0)),o.push(``);t.log(o.join(`
3
3
  `).trim())}),c.command(`info`).description(`Show plugin details`).argument(`<id>`,`Plugin id`).option(`--json`,`Print JSON`).action((n,r)=>{let a=D().plugins.find(e=>e.id===n||e.name===n);a||(t.error(`Plugin not found: ${n}`),process.exit(1));let s=i().plugins?.installs?.[a.id];if(r.json){t.log(JSON.stringify(a,null,2));return}let c=[];c.push(e.heading(a.name||a.id)),a.name&&a.name!==a.id&&c.push(e.muted(`id: ${a.id}`)),a.description&&c.push(a.description),c.push(``),c.push(`${e.muted(`Status:`)} ${a.status}`),c.push(`${e.muted(`Source:`)} ${o(a.source)}`),c.push(`${e.muted(`Origin:`)} ${a.origin}`),a.version&&c.push(`${e.muted(`Version:`)} ${a.version}`),a.toolNames.length>0&&c.push(`${e.muted(`Tools:`)} ${a.toolNames.join(`, `)}`),a.hookNames.length>0&&c.push(`${e.muted(`Hooks:`)} ${a.hookNames.join(`, `)}`),a.gatewayMethods.length>0&&c.push(`${e.muted(`Gateway methods:`)} ${a.gatewayMethods.join(`, `)}`),a.providerIds.length>0&&c.push(`${e.muted(`Providers:`)} ${a.providerIds.join(`, `)}`),a.cliCommands.length>0&&c.push(`${e.muted(`CLI commands:`)} ${a.cliCommands.join(`, `)}`),a.services.length>0&&c.push(`${e.muted(`Services:`)} ${a.services.join(`, `)}`),a.error&&c.push(`${e.error(`Error:`)} ${a.error}`),s&&(c.push(``),c.push(`${e.muted(`Install:`)} ${s.source}`),s.spec&&c.push(`${e.muted(`Spec:`)} ${s.spec}`),s.sourcePath&&c.push(`${e.muted(`Source path:`)} ${l(s.sourcePath)}`),s.installPath&&c.push(`${e.muted(`Install path:`)} ${l(s.installPath)}`),s.version&&c.push(`${e.muted(`Recorded version:`)} ${s.version}`),s.installedAt&&c.push(`${e.muted(`Installed at:`)} ${s.installedAt}`)),t.log(c.join(`
4
4
  `))}),c.command(`enable`).description(`Enable a plugin in config`).argument(`<id>`,`Plugin id`).action(async n=>{let a=g(i(),n),o=a.config,s=U(o,n);if(o=s.config,await r(o),G(s.warnings),a.enabled){t.log(`Enabled plugin "${n}". Restart the gateway to apply.`);return}t.log(e.warn(`Plugin "${n}" could not be enabled (${a.reason??`unknown reason`}).`))}),c.command(`disable`).description(`Disable a plugin in config`).argument(`<id>`,`Plugin id`).action(async e=>{await r(h(i(),e,!1)),t.log(`Disabled plugin "${e}". Restart the gateway to apply.`)}),c.command(`uninstall`).description(`Uninstall a plugin`).argument(`<id>`,`Plugin id`).option(`--keep-files`,`Keep installed files on disk`,!1).option(`--keep-config`,`Deprecated alias for --keep-files`,!1).option(`--force`,`Skip confirmation prompt`,!1).option(`--dry-run`,`Show what would be removed without making changes`,!1).action(async(o,s)=>{let c=i(),u=D({config:c}),d=M.join(n(process.env,j.homedir),`extensions`),f=!!(s.keepFiles||s.keepConfig);s.keepConfig&&t.log(e.warn("`--keep-config` is deprecated, use `--keep-files`."));let p=u.plugins.find(e=>e.id===o||e.name===o),m=p?.id??o,h=m in(c.plugins?.entries??{}),g=m in(c.plugins?.installs??{});!h&&!g&&(p?t.error(`Plugin "${m}" is not managed by plugins config/install records and cannot be uninstalled.`):t.error(`Plugin not found: ${o}`),process.exit(1));let _=c.plugins?.installs?.[m],v=_?.source===`path`,y=[];h&&y.push(`config entry`),g&&y.push(`install record`),c.plugins?.allow?.includes(m)&&y.push(`allowlist entry`),v&&_?.sourcePath&&c.plugins?.load?.paths?.includes(_.sourcePath)&&y.push(`load path`),c.plugins?.slots?.memory===m&&y.push(`memory slot (will reset to "memory-core")`);let b=f?null:R({pluginId:m,hasInstall:g,installRecord:_,extensionsDir:d});b&&y.push(`directory: ${l(b)}`);let x=p?.name||m;if(t.log(`Plugin: ${e.command(x)}${x===m?``:e.muted(` (${m})`)}`),t.log(`Will remove: ${y.length>0?y.join(`, `):`(nothing)`}`),s.dryRun){t.log(e.muted(`Dry run, no changes made.`));return}if(!s.force&&!await a(`Uninstall plugin "${m}"?`)){t.log(`Cancelled.`);return}let S=await B({config:c,pluginId:m,deleteFiles:!f,extensionsDir:d});S.ok||(t.error(S.error),process.exit(1));for(let n of S.warnings)t.log(e.warn(n));await r(S.config);let C=[];S.actions.entry&&C.push(`config entry`),S.actions.install&&C.push(`install record`),S.actions.allowlist&&C.push(`allowlist`),S.actions.loadPath&&C.push(`load path`),S.actions.memorySlot&&C.push(`memory slot`),S.actions.directory&&C.push(`directory`),t.log(`Uninstalled plugin "${m}". Removed: ${C.length>0?C.join(`, `):`nothing`}.`),t.log(`Restart the gateway to apply changes.`)}),c.command(`install`).description(`Install a plugin (path, archive, or npm spec)`).argument(`<path-or-spec>`,`Path (.ts/.js/.zip/.tgz/.tar.gz) or an npm package spec`).option(`-l, --link`,`Link a local path instead of copying`,!1).option(`--pin`,`Record npm installs as exact resolved <name>@<version>`,!1).action(async(e,t)=>{await q({raw:e,opts:t})}),c.command(`update`).description(`Update installed plugins (npm installs only)`).argument(`[id]`,`Plugin id (omit with --all)`).option(`--all`,`Update all tracked plugins`,!1).option(`--dry-run`,`Show what would change without writing`,!1).action(async(n,o)=>{let s=i(),c=s.plugins?.installs??{},l=o.all?Object.keys(c):n?[n]:[];if(l.length===0){if(o.all){t.log(`No npm-installed plugins to update.`);return}t.error(`Provide a plugin id or use --all.`),process.exit(1)}let u=await A({config:s,pluginIds:l,dryRun:o.dryRun,logger:{info:e=>t.log(e),warn:n=>t.log(e.warn(n))},onIntegrityDrift:async n=>{let r=n.resolvedSpec??n.spec;return t.log(e.warn(`Integrity drift detected for "${n.pluginId}" (${r})\nExpected: ${n.expectedIntegrity}\nActual: ${n.actualIntegrity}`)),n.dryRun?!0:await a(`Continue updating "${n.pluginId}" with this artifact?`)}});for(let n of u.outcomes){if(n.status===`error`){t.log(e.error(n.message));continue}if(n.status===`skipped`){t.log(e.warn(n.message));continue}t.log(n.message)}!o.dryRun&&u.changed&&(await r(u.config),t.log(`Restart the gateway to load plugins.`))}),c.command(`doctor`).description(`Report plugin load issues`).action(()=>{let n=D(),r=n.plugins.filter(e=>e.status===`error`),i=n.diagnostics.filter(e=>e.level===`error`);if(r.length===0&&i.length===0){t.log(`No plugin issues detected.`);return}let a=[];if(r.length>0){a.push(e.error(`Plugin errors:`));for(let e of r)a.push(`- ${e.id}: ${e.error??`failed to load`} (${e.source})`)}if(i.length>0){a.length>0&&a.push(``),a.push(e.warn(`Diagnostics:`));for(let e of i){let t=e.pluginId?`${e.pluginId}: `:``;a.push(`- ${t}${e.message}`)}}let o=m(`/plugin`,`docs.openclaw.ai/plugin`);a.push(``),a.push(`${e.muted(`Docs:`)} ${o}`),t.log(a.join(`
5
5
  `))})}export{J as registerPluginsCli};
6
- //# sourceMappingURL=plugins-cli-BbjMbzJU.js.map
6
+ //# sourceMappingURL=plugins-cli-o74CJV4A.js.map