@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.
- package/dist/{agents-Bpp_F5In.js → agents-D3Z05GqK.js} +2 -2
- package/dist/{agents.config-DfIJAGcd.js → agents.config-BUQjISaN.js} +2 -2
- package/dist/{agents.config-B6LRG9eP.js → agents.config-BvxrGqOT.js} +2 -2
- package/dist/{auth-choice-DvTApGhx.js → auth-choice-CYGzLW73.js} +2 -2
- package/dist/{auth-choice-EQdNd7jO.js → auth-choice-DJn6683d.js} +2 -2
- package/dist/{banner-9u45RL26.js → banner-xQa2kS6O.js} +2 -2
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +1 -1
- package/dist/bundled/session-memory/handler.js +1 -1
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{channel-options-D2syI791.js → channel-options-BurUBfoY.js} +2 -2
- package/dist/{channel-options-CEIzjOno.js → channel-options-Ce8uNnAp.js} +2 -2
- package/dist/{channel-web-BrElpZAc.js → channel-web-D5TgFlMz.js} +2 -2
- package/dist/{channel-web-CxHbET4B.js → channel-web-D7FkrASC.js} +2 -2
- package/dist/{channels-cli-BmAJuuRs.js → channels-cli-BfzZrnkt.js} +2 -2
- package/dist/{channels-cli-Dgosczr6.js → channels-cli-DFI6F6G0.js} +2 -2
- package/dist/{cli-D8T2tphD.js → cli-CMLvfh6N.js} +2 -2
- package/dist/{cli-BcnoCo4z.js → cli-MTpYYgjl.js} +2 -2
- package/dist/{command-registry-CfuXCRwV.js → command-registry-CPthpEk3.js} +2 -2
- package/dist/{compact-Dg66DXx_.js → compact-BEeB6bwq.js} +7 -7
- package/dist/{compact.runtime-3mTLUPqu.js → compact.runtime-BC7F7HPJ.js} +1 -1
- package/dist/{compact.runtime-DcTdUW4o.js → compact.runtime-BTUQRS-2.js} +1 -1
- package/dist/{compact.runtime-Bhewj5vA.js → compact.runtime-C0GyLWem.js} +1 -1
- package/dist/{compact.runtime-XXtYlNJN.js → compact.runtime-CrOFsO5D.js} +1 -1
- package/dist/{completion-cli-C40TWdsv.js → completion-cli-C4_SZmjl.js} +2 -2
- package/dist/{completion-cli-BZi4nuQb.js → completion-cli-DeGEpJri.js} +2 -2
- package/dist/{config-cli-CBte2b1h.js → config-cli-B9hEiZsw.js} +2 -2
- package/dist/{config-cli-1ojSLwAj.js → config-cli-BNTGUqL_.js} +2 -2
- package/dist/{configure-kod4tmZa.js → configure-DForkh7R.js} +2 -2
- package/dist/{configure-DJrNDEpR.js → configure-DR77VUCy.js} +2 -2
- package/dist/{deps-send-whatsapp.runtime-C4O9crnk.js → deps-send-whatsapp.runtime-BuIiTn5n.js} +1 -1
- package/dist/{deps-send-whatsapp.runtime-5Lot99zq.js → deps-send-whatsapp.runtime-C4hGmfeP.js} +1 -1
- package/dist/{deps-send-whatsapp.runtime-LiNvHd_E.js → deps-send-whatsapp.runtime-CYlLppMS.js} +1 -1
- package/dist/{deps-send-whatsapp.runtime-Bg-_kVX6.js → deps-send-whatsapp.runtime-FY-HuZ5S.js} +1 -1
- package/dist/{doctor-completion-DMJhfrtC.js → doctor-completion-APZJ17BJ.js} +2 -2
- package/dist/{doctor-completion-BJ6steqx.js → doctor-completion-Bad_h3hm.js} +2 -2
- package/dist/entry.js +1 -1
- package/dist/extensionAPI.js +1 -1
- package/dist/{gateway-cli-CKu0FA7D.js → gateway-cli-CbJj0QhL.js} +3 -3
- package/dist/{gateway-cli-C_s9eMlC.js → gateway-cli-tXsBFRlk.js} +3 -3
- package/dist/{health-PaRHFItm.js → health-DBu0V1Y-.js} +2 -2
- package/dist/{health-BgOggK9k.js → health-RQzDNQwf.js} +2 -2
- package/dist/{hooks-cli-CsBrScq0.js → hooks-cli-B3eDoEHO.js} +2 -2
- package/dist/{hooks-cli-BzyzTNBx.js → hooks-cli-xgORhqZ2.js} +2 -2
- package/dist/index.js +2 -2
- package/dist/llm-slug-generator.js +1 -1
- package/dist/{models-C_Vg3Cty.js → models-BEO5lvkx.js} +2 -2
- package/dist/{models-cli-CDZliTXq.js → models-cli-BbcJ6A0F.js} +2 -2
- package/dist/{models-cli-bGr8jwAb.js → models-cli-Dacwv6BY.js} +2 -2
- package/dist/{npm-resolution-DWPloph4.js → npm-resolution-Bui58Ks1.js} +2 -2
- package/dist/{npm-resolution-BnJGLwhi.js → npm-resolution-Ct6MRtq6.js} +2 -2
- package/dist/{onboard-B0BNCQaO.js → onboard-7i9A1nNd.js} +3 -3
- package/dist/{onboard-CjVhdaiR.js → onboard-DSaXIS5U.js} +3 -3
- package/dist/{onboard-channels-CZK_7xMR.js → onboard-channels-BXReNh4B.js} +2 -2
- package/dist/{onboard-channels-BMIOddLN.js → onboard-channels-CjXCpXI-.js} +2 -2
- package/dist/{onboarding-ouEqUuUr.js → onboarding-BRewu6jg.js} +2 -2
- package/dist/{onboarding-B6ixWwgp.js → onboarding-RZTEMxl0.js} +2 -2
- package/dist/{onboarding.finalize-DsMVlTcH.js → onboarding.finalize-Bi53z1zE.js} +2 -2
- package/dist/{onboarding.finalize-Bgat5Npc.js → onboarding.finalize-Bp8ST2z_.js} +2 -2
- package/dist/{pi-embedded-BZSn84Bh.js → pi-embedded-B_6OtP8m.js} +7 -7
- package/dist/{pi-embedded-Dsz7p3MF.js → pi-embedded-DjX-gdoY.js} +7 -7
- package/dist/{plugin-registry-CIBiHZH1.js → plugin-registry-CI5K3iWc.js} +2 -2
- package/dist/{plugin-registry-C6dY-Et7.js → plugin-registry-CYlBYbc8.js} +2 -2
- package/dist/plugin-sdk/{channel-web-9zn1Itpg.cjs → channel-web-BSUPSLCU.cjs} +2 -2
- package/dist/plugin-sdk/{channel-web-4ZQVqsrt.js → channel-web-CeSPyNTh.js} +2 -2
- package/dist/plugin-sdk/{channel-web-BrB00HKH.js → channel-web-Cptth4mc.js} +2 -2
- package/dist/plugin-sdk/{channel-web-DN5La-Ol.cjs → channel-web-D4x22KPN.cjs} +2 -2
- package/dist/plugin-sdk/{compact.runtime-8oUv1ld1.cjs → compact.runtime-BDgWntMu.cjs} +1 -1
- package/dist/plugin-sdk/{compact.runtime-CmJayEYX.js → compact.runtime-BJFMaTF4.js} +1 -1
- package/dist/plugin-sdk/{compact.runtime-BjJCBESR.cjs → compact.runtime-BWadwUyE.cjs} +1 -1
- package/dist/plugin-sdk/{compact.runtime-ALKRoVEG.js → compact.runtime-Bfu2rMai.js} +1 -1
- package/dist/plugin-sdk/{compact.runtime-DBlESOSV.cjs → compact.runtime-Cg47oUHq.cjs} +1 -1
- package/dist/plugin-sdk/{compact.runtime-Dmc0G6Yn.js → compact.runtime-CqK86P7R.js} +1 -1
- package/dist/plugin-sdk/{compact.runtime-Chumwp0K.cjs → compact.runtime-CqrB25-A.cjs} +1 -1
- package/dist/plugin-sdk/{compact.runtime-Ddfxp3fz.js → compact.runtime-DeATtENL.js} +1 -1
- package/dist/plugin-sdk/{compact.runtime-C_dc78Lp.cjs → compact.runtime-GMu30Jmw.cjs} +1 -1
- package/dist/plugin-sdk/{compact.runtime-ZrApPcrV.js → compact.runtime-YFzugj-k.js} +1 -1
- package/dist/plugin-sdk/{compact.runtime-BF4SCZ-5.js → compact.runtime-a8Z4_6wu.js} +1 -1
- package/dist/plugin-sdk/{compact.runtime-CbzQiVEW.cjs → compact.runtime-jGNfnpo2.cjs} +1 -1
- package/dist/plugin-sdk/compat.cjs +1 -1
- package/dist/plugin-sdk/compat.js +1 -1
- package/dist/plugin-sdk/{deps-send-whatsapp.runtime-BEDFRjff.js → deps-send-whatsapp.runtime-23E2Ab5R.js} +1 -1
- package/dist/plugin-sdk/{deps-send-whatsapp.runtime-QY0XTSgX.cjs → deps-send-whatsapp.runtime-B1oA3XBA.cjs} +1 -1
- package/dist/plugin-sdk/{deps-send-whatsapp.runtime-Du_3Rw7K.cjs → deps-send-whatsapp.runtime-C8q_3sOf.cjs} +1 -1
- package/dist/plugin-sdk/{deps-send-whatsapp.runtime-DMeaTnvE.cjs → deps-send-whatsapp.runtime-CsebM75z.cjs} +1 -1
- package/dist/plugin-sdk/{deps-send-whatsapp.runtime-CrVVnzLl.js → deps-send-whatsapp.runtime-D3mYdwaT.js} +1 -1
- package/dist/plugin-sdk/{deps-send-whatsapp.runtime-DR4rvUQL.js → deps-send-whatsapp.runtime-DDwUEbJ8.js} +1 -1
- package/dist/plugin-sdk/{deps-send-whatsapp.runtime-BULlOkpi.cjs → deps-send-whatsapp.runtime-Di3p_3Eh.cjs} +1 -1
- package/dist/plugin-sdk/{deps-send-whatsapp.runtime--uXLMs1C.js → deps-send-whatsapp.runtime-JzRD4jTI.js} +1 -1
- package/dist/plugin-sdk/{deps-send-whatsapp.runtime-BRjb9631.cjs → deps-send-whatsapp.runtime-gEp895yA.cjs} +1 -1
- package/dist/plugin-sdk/{deps-send-whatsapp.runtime-VQXeRmRl.js → deps-send-whatsapp.runtime-iV5E6CHf.js} +1 -1
- package/dist/plugin-sdk/{deps-send-whatsapp.runtime-2Us9O7dL.cjs → deps-send-whatsapp.runtime-k0yGrhs2.cjs} +1 -1
- package/dist/plugin-sdk/{deps-send-whatsapp.runtime-BfV5Q2fx.js → deps-send-whatsapp.runtime-v3sqBoDg.js} +1 -1
- package/dist/plugin-sdk/{dispatch-C2YTqGlf.js → dispatch-3PrSaGZi.js} +7 -7
- package/dist/plugin-sdk/{dispatch-DHbSBeFJ.js → dispatch-Bcf1uPHo.js} +7 -7
- package/dist/plugin-sdk/{dispatch-SWyfAZT0.cjs → dispatch-BgGE9usQ.cjs} +7 -7
- package/dist/plugin-sdk/{dispatch-BYlcmJ9u.js → dispatch-BhUN9ZDP.js} +7 -7
- package/dist/plugin-sdk/{dispatch-DK5ub8qa.cjs → dispatch-C3k8j6Zb.cjs} +7 -7
- package/dist/plugin-sdk/{dispatch-DCSwqteL.js → dispatch-C_gJPvbD.js} +7 -7
- package/dist/plugin-sdk/{dispatch-5v3v8zzA.js → dispatch-Df8B7owq.js} +7 -7
- package/dist/plugin-sdk/{dispatch-CNy3g9ma.cjs → dispatch-YK0qHNtb.cjs} +7 -7
- package/dist/plugin-sdk/{dispatch-B6UbZCpL.cjs → dispatch-_fZDA253.cjs} +7 -7
- package/dist/plugin-sdk/{dispatch-mR2vLkGa.cjs → dispatch-wEH2eS4y.cjs} +7 -7
- package/dist/plugin-sdk/index.cjs +1 -1
- package/dist/plugin-sdk/index.js +1 -1
- package/dist/plugin-sdk/irc.cjs +1 -1
- package/dist/plugin-sdk/irc.js +1 -1
- package/dist/plugin-sdk/matrix.cjs +1 -1
- package/dist/plugin-sdk/matrix.js +1 -1
- package/dist/plugin-sdk/msteams.cjs +1 -1
- package/dist/plugin-sdk/msteams.js +1 -1
- package/dist/plugin-sdk/nextcloud-talk.cjs +1 -1
- package/dist/plugin-sdk/nextcloud-talk.js +1 -1
- package/dist/plugin-sdk/{reply-0zCEbT4w.cjs → reply-BoWg-IXT.cjs} +7 -7
- package/dist/plugin-sdk/{reply-D-f2bbXy.js → reply-bS9U9BwG.js} +7 -7
- package/dist/plugin-sdk/{slash-dispatch.runtime-CNhhOTEP.js → slash-dispatch.runtime-4y3z-kPo.js} +1 -1
- package/dist/plugin-sdk/{slash-dispatch.runtime-B3b2L4iH.js → slash-dispatch.runtime-BRr9YGOs.js} +1 -1
- package/dist/plugin-sdk/{slash-dispatch.runtime-CPPp4KKH.cjs → slash-dispatch.runtime-BtdMVJQe.cjs} +1 -1
- package/dist/plugin-sdk/{slash-dispatch.runtime-Dw9M-fvv.js → slash-dispatch.runtime-C6iak1_0.js} +1 -1
- package/dist/plugin-sdk/{slash-dispatch.runtime-BoTYqNiv.js → slash-dispatch.runtime-CMx727dE.js} +1 -1
- package/dist/plugin-sdk/{slash-dispatch.runtime-CaWoVNJu.cjs → slash-dispatch.runtime-CXXaAMYa.cjs} +1 -1
- package/dist/plugin-sdk/{slash-dispatch.runtime-DbheDKxM.cjs → slash-dispatch.runtime-Cvom2Onl.cjs} +1 -1
- package/dist/plugin-sdk/{slash-dispatch.runtime-DpBWBF7J.js → slash-dispatch.runtime-D00kIROj.js} +1 -1
- package/dist/plugin-sdk/{slash-dispatch.runtime-DSQ2U0MM.cjs → slash-dispatch.runtime-DEu-D4XB.cjs} +1 -1
- package/dist/plugin-sdk/{slash-dispatch.runtime-Bu6Gwr3m.cjs → slash-dispatch.runtime-DG7_jQXD.cjs} +1 -1
- package/dist/plugin-sdk/{slash-dispatch.runtime-CCEMBSm2.cjs → slash-dispatch.runtime-DVP1q-_z.cjs} +1 -1
- package/dist/plugin-sdk/{slash-dispatch.runtime-Dm_cVnlq.js → slash-dispatch.runtime-U6qjtCfd.js} +1 -1
- package/dist/plugin-sdk/{subagent-registry-runtime-bVH8kl6Y.js → subagent-registry-runtime-BD_DkCmR.js} +1 -1
- package/dist/plugin-sdk/{subagent-registry-runtime-Der4fbZK.cjs → subagent-registry-runtime-BWiMCyG_.cjs} +1 -1
- package/dist/plugin-sdk/{subagent-registry-runtime-Pp_rfnk0.js → subagent-registry-runtime-C6vGkwe9.js} +1 -1
- package/dist/plugin-sdk/{subagent-registry-runtime-B0cZ_eaC.cjs → subagent-registry-runtime-CCcI3vhb.cjs} +1 -1
- package/dist/plugin-sdk/{subagent-registry-runtime-B-P4w-z9.js → subagent-registry-runtime-CDCU--WW.js} +1 -1
- package/dist/plugin-sdk/{subagent-registry-runtime-Ciev9m2W.cjs → subagent-registry-runtime-D98xiwmA.cjs} +1 -1
- package/dist/plugin-sdk/{subagent-registry-runtime-DBPvxiJW.cjs → subagent-registry-runtime-LebBdxD7.cjs} +1 -1
- package/dist/plugin-sdk/{subagent-registry-runtime-BfmeSbXD.cjs → subagent-registry-runtime-MfHdezNY.cjs} +1 -1
- package/dist/plugin-sdk/{subagent-registry-runtime-CL0sdx5J.cjs → subagent-registry-runtime-bMabqk9V.cjs} +1 -1
- package/dist/plugin-sdk/{subagent-registry-runtime-DH_Jx5hU.js → subagent-registry-runtime-h3qrqiJH.js} +1 -1
- package/dist/plugin-sdk/{subagent-registry-runtime-CEvE9keW.js → subagent-registry-runtime-tmI7JUke.js} +1 -1
- package/dist/plugin-sdk/{subagent-registry-runtime-Du8BhjzJ.js → subagent-registry-runtime-uC8wbfNS.js} +1 -1
- package/dist/plugin-sdk/{web-BdnQzLgF.js → web-9Os8v8Cu.js} +2 -2
- package/dist/plugin-sdk/{web-pcTha_l7.cjs → web-BQ9hOKe8.cjs} +2 -2
- package/dist/plugin-sdk/{web-C9T7tf6w.js → web-Bjk0MWu3.js} +2 -2
- package/dist/plugin-sdk/{web-_tj8xNZE.js → web-BsmnVZaX.js} +2 -2
- package/dist/plugin-sdk/{web-B2PwjHsu.cjs → web-CUbdclQS.cjs} +2 -2
- package/dist/plugin-sdk/{web-CcYBsmAj.cjs → web-C_Vx3mgY.cjs} +1 -1
- package/dist/plugin-sdk/{web-BZoOYDwf.js → web-Cdo1e0C7.js} +1 -1
- package/dist/plugin-sdk/{web-CODD4ksc.cjs → web-CfTkaUMk.cjs} +2 -2
- package/dist/plugin-sdk/{web-24o5tNe3.js → web-DkmdYSZ8.js} +1 -1
- package/dist/plugin-sdk/{web-B-QDcVRv.cjs → web-DpGXJ6SQ.cjs} +2 -2
- package/dist/plugin-sdk/{web-Czl9vNVv.cjs → web-DuF9udb6.cjs} +1 -1
- package/dist/plugin-sdk/{web-CkdCvvR-.js → web-Jr2J55LO.js} +2 -2
- package/dist/plugin-sdk/whatsapp.cjs +1 -1
- package/dist/plugin-sdk/whatsapp.js +1 -1
- package/dist/{plugins-cli-BiVMAr5T.js → plugins-cli-BzJeq-CW.js} +2 -2
- package/dist/{plugins-cli-BbjMbzJU.js → plugins-cli-o74CJV4A.js} +2 -2
- package/dist/{program-BrAZTwFr.js → program-D9AMAbv6.js} +3 -3
- package/dist/{program-context-B9ydtPje.js → program-context-BX9wN65q.js} +2 -2
- package/dist/{prompt-select-styled-BeJNbzSa.js → prompt-select-styled-C2c13Ndq.js} +2 -2
- package/dist/{prompt-select-styled-DIOWLjl0.js → prompt-select-styled-hxyoyq2i.js} +2 -2
- package/dist/{provider-auth-helpers-pBVCjBj9.js → provider-auth-helpers-BzlcSA6U.js} +2 -2
- package/dist/{provider-auth-helpers-1lU43eTW.js → provider-auth-helpers-CDIiLD1m.js} +2 -2
- package/dist/{push-apns-BGUOmD5M.js → push-apns-CrAWstBo.js} +2 -2
- package/dist/{push-apns-B_a2MBJ4.js → push-apns-CrMV74Qs.js} +2 -2
- package/dist/{register.agent-CX78s_X9.js → register.agent-CisptTv_.js} +2 -2
- package/dist/{register.agent-DLDKQENq.js → register.agent-Dl2Ef-K5.js} +2 -2
- package/dist/{register.configure-BA5u9hT3.js → register.configure-CvPihXst.js} +2 -2
- package/dist/{register.configure-BhPtf3Qo.js → register.configure-D8bJJ16k.js} +2 -2
- package/dist/{register.maintenance-BhsBepKS.js → register.maintenance-AeTvVTtt.js} +2 -2
- package/dist/{register.maintenance-r_MzNK3-.js → register.maintenance-BkM8-Ttt.js} +2 -2
- package/dist/{register.message-CTF--Z2a.js → register.message-3zVHQZ27.js} +2 -2
- package/dist/{register.message-jcZ875be.js → register.message-CM_Qudzn.js} +2 -2
- package/dist/{register.onboard-C3yL50_c.js → register.onboard-BY-QLNp9.js} +2 -2
- package/dist/{register.onboard-CNwnStUk.js → register.onboard-C-j99DGw.js} +2 -2
- package/dist/{register.setup-BRJMzgfU.js → register.setup-DA4HFCro.js} +2 -2
- package/dist/{register.setup-BvsS-zgm.js → register.setup-DiAi_1pJ.js} +2 -2
- package/dist/{register.status-health-sessions-Dqmkw820.js → register.status-health-sessions-BXiMraHZ.js} +2 -2
- package/dist/{register.status-health-sessions-DVc__2pc.js → register.status-health-sessions-Bo9VWxLG.js} +2 -2
- package/dist/{register.subclis-D-24j83X.js → register.subclis-smZuHVcv.js} +2 -2
- package/dist/{reply-l-Y47HP4.js → reply-CjyZeZ-j.js} +7 -7
- package/dist/{run-main-B_YBE_TN.js → run-main-DEZR4lCo.js} +2 -2
- package/dist/{server-node-events-CFSY_-4t.js → server-node-events-BWiQg1NL.js} +2 -2
- package/dist/{server-node-events-ZFwmPwQ-.js → server-node-events-DicMyck-.js} +2 -2
- package/dist/{slash-dispatch.runtime-pdAIQrzR.js → slash-dispatch.runtime-CGgP5dBX.js} +1 -1
- package/dist/{slash-dispatch.runtime-CKWXmLO1.js → slash-dispatch.runtime-CknX8Fkv.js} +1 -1
- package/dist/{slash-dispatch.runtime-DIR5H2MY.js → slash-dispatch.runtime-CoKGpcpS.js} +1 -1
- package/dist/{slash-dispatch.runtime-14ABU-DD.js → slash-dispatch.runtime-pSpPe8qL.js} +1 -1
- package/dist/{status-DYqPF0rB.js → status-BoL8-JxA.js} +2 -2
- package/dist/{status-JIPeVrsc.js → status-DEAX-TLb.js} +2 -2
- package/dist/{subagent-registry-runtime-rPbwTnju.js → subagent-registry-runtime-2Nh6-7ym.js} +1 -1
- package/dist/{subagent-registry-runtime-DTVXQJOP.js → subagent-registry-runtime-CG_2Atu3.js} +1 -1
- package/dist/{subagent-registry-runtime-Cj4CKKl_.js → subagent-registry-runtime-Cc264UfD.js} +1 -1
- package/dist/{subagent-registry-runtime-8_ktZPZB.js → subagent-registry-runtime-CpYm78z3.js} +1 -1
- package/dist/{update-cli-BwBMOeP0.js → update-cli-C0qadZEs.js} +2 -2
- package/dist/{update-cli-YrBbmw4f.js → update-cli-ISorpxrU.js} +2 -2
- package/dist/{update-runner-BvtyRBD2.js → update-runner-CvWH2ZAc.js} +2 -2
- package/dist/{update-runner-DYamgo1V.js → update-runner-mMbwEOlU.js} +2 -2
- package/dist/{web-DwcxsgH0.js → web-ARUUCMQo.js} +2 -2
- package/dist/{web-C15yQ-wI.js → web-C6jRFeYp.js} +1 -1
- package/dist/{web-C6So15hm.js → web-CDXYiCsB.js} +1 -1
- package/dist/{web-Cq3xWCaD.js → web-CiagxaWr.js} +2 -2
- package/node_modules/@aws-sdk/client-bedrock-runtime/package.json +42 -42
- package/node_modules/@aws-sdk/core/dist-cjs/index.js +17 -0
- package/node_modules/@aws-sdk/core/dist-cjs/submodules/client/index.js +17 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/client/index.js +1 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/client/longPollMiddleware.js +15 -0
- package/node_modules/@aws-sdk/core/package.json +11 -11
- package/node_modules/@aws-sdk/credential-provider-env/package.json +5 -5
- package/node_modules/@aws-sdk/credential-provider-http/package.json +10 -10
- package/node_modules/@aws-sdk/credential-provider-ini/package.json +14 -14
- package/node_modules/@aws-sdk/credential-provider-login/package.json +8 -8
- package/node_modules/@aws-sdk/credential-provider-node/package.json +12 -12
- package/node_modules/@aws-sdk/credential-provider-process/package.json +6 -6
- package/node_modules/@aws-sdk/credential-provider-sso/package.json +8 -8
- package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +7 -7
- package/node_modules/@aws-sdk/eventstream-handler-node/package.json +4 -4
- package/node_modules/@aws-sdk/middleware-eventstream/package.json +4 -4
- package/node_modules/@aws-sdk/middleware-host-header/package.json +4 -4
- package/node_modules/@aws-sdk/middleware-logger/package.json +3 -3
- package/node_modules/@aws-sdk/middleware-recursion-detection/package.json +4 -4
- package/node_modules/@aws-sdk/middleware-user-agent/package.json +8 -8
- package/node_modules/@aws-sdk/middleware-websocket/package.json +9 -9
- package/node_modules/@aws-sdk/nested-clients/package.json +32 -32
- package/node_modules/@aws-sdk/region-config-resolver/package.json +5 -5
- package/node_modules/@aws-sdk/token-providers/package.json +7 -7
- package/node_modules/@aws-sdk/types/package.json +2 -2
- package/node_modules/@aws-sdk/util-endpoints/package.json +5 -5
- package/node_modules/@aws-sdk/util-format-url/package.json +4 -4
- package/node_modules/@aws-sdk/util-user-agent-browser/package.json +3 -3
- package/node_modules/@aws-sdk/util-user-agent-node/package.json +5 -5
- package/node_modules/@aws-sdk/xml-builder/package.json +2 -2
- package/node_modules/@whiskeysockets/baileys/node_modules/p-queue/dist/index.js +1 -0
- package/node_modules/@whiskeysockets/baileys/node_modules/p-queue/package.json +1 -1
- package/node_modules/content-disposition/index.js +118 -40
- package/node_modules/content-disposition/package.json +8 -11
- package/node_modules/path-expression-matcher/lib/pem.cjs +1 -1
- package/node_modules/path-expression-matcher/lib/pem.d.cts +18 -0
- package/node_modules/path-expression-matcher/lib/pem.min.js +1 -1
- package/node_modules/path-expression-matcher/package.json +1 -1
- package/node_modules/path-expression-matcher/src/Expression.js +2 -2
- package/node_modules/path-expression-matcher/src/ExpressionSet.js +24 -4
- package/package.json +1 -1
- package/preset-config.json +1 -1
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/LICENSE +0 -201
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/README.md +0 -62
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-cjs/index.js +0 -157
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/constants.js +0 -2
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/fromEnvSigningName.js +0 -16
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/fromSso.js +0 -81
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/fromStatic.js +0 -8
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/getNewSsoOidcToken.js +0 -11
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/getSsoOidcClient.js +0 -10
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/index.js +0 -4
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/nodeProvider.js +0 -5
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/validateTokenExpiry.js +0 -7
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/validateTokenKey.js +0 -7
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/writeSSOTokenToFile.js +0 -8
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/package.json +0 -70
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{S as e,T as t,j as n,p as r,t as i}from"./subsystem-C5XF2Fy5.js";import{C as a,T as o,f as s,m as c,p as l,r as u,v as d}from"./utils-UGOV_184.js";import{Hn as f,Wn as p,ba as m,ei as h,qn as g,qs as _,si as v,ti as y}from"./model-selection-BlC_rXAN.js";import{$n as b,$t as x,An as S,Ar as ee,Bn as C,Dn as w,En as T,Hn as E,Sn as D,Vn as O,_n as te,bi as ne,cn as re,dt as ie,er as ae,in as k,ir as A,jn as j,jr as M,kn as N,rn as P,rr as F,sn as I,t as oe,ut as se,vn as L,vr as ce,wt as le,yn as R,zn as z}from"./reply-
|
|
1
|
+
import{S as e,T as t,j as n,p as r,t as i}from"./subsystem-C5XF2Fy5.js";import{C as a,T as o,f as s,m as c,p as l,r as u,v as d}from"./utils-UGOV_184.js";import{Hn as f,Wn as p,ba as m,ei as h,qn as g,qs as _,si as v,ti as y}from"./model-selection-BlC_rXAN.js";import{$n as b,$t as x,An as S,Ar as ee,Bn as C,Dn as w,En as T,Hn as E,Sn as D,Vn as O,_n as te,bi as ne,cn as re,dt as ie,er as ae,in as k,ir as A,jn as j,jr as M,kn as N,rn as P,rr as F,sn as I,t as oe,ut as se,vn as L,vr as ce,wt as le,yn as R,zn as z}from"./reply-CjyZeZ-j.js";import{a as B,c as V,n as H,r as U}from"./session-key-D3P0tf5P.js";import{t as ue}from"./command-format-BbDT1tlm.js";import{$ as de,G as W,U as G,q as fe}from"./plugins-CYLrFT4h.js";import{c as K}from"./paths-yLEk_25I.js";import{u as pe}from"./audio-transcription-runner-D4Bp6MM7.js";import{t as me}from"./local-roots-6waH0SZ0.js";import{c as he}from"./pairing-store-Cg2UxreQ.js";import{a as ge,o as _e,s as ve}from"./group-access-D2DOYMfr.js";import{X as ye,Z as be}from"./send-B7sHR38c2.js";import{a as xe,d as Se,h as Ce,m as we,s as Te}from"./ir-Dk7OQ4bA.js";import{_ as Ee,h as De,v as Oe,y as ke}from"./read-only-account-inspect-DBwAwB3_.js";import{n as Ae}from"./channel-activity-YjYNzCpJ.js";import{t as je}from"./tables-Oieq7UbT.js";import{r as Me}from"./format-duration-D5AMtmHa.js";import{r as Ne}from"./active-listener-DeKRt_UV.js";import{i as Pe,r as Fe}from"./outbound-Bz8bbrMI.js";import{i as Ie,n as q,r as Le,t as Re}from"./session-CUUGjiV3.js";import{randomUUID as ze}from"node:crypto";import{DisconnectReason as Be,downloadMediaMessage as Ve,extractMessageContent as He,getContentType as Ue,isJidGroup as We,normalizeMessageContent as Ge}from"@whiskeysockets/baileys";const Ke={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 Je(e,t){let n=e.web?.reconnect??{},r=t??{},i={...Ke,...n,...r};return i.initialMs=Math.max(250,i.initialMs),i.maxMs=Math.max(i.initialMs,i.maxMs),i.factor=u(i.factor,1.1,10),i.jitter=u(i.jitter,0,1),i.maxAttempts=Math.max(0,Math.floor(i.maxAttempts)),i}function J(){return ze()}const Y=i(`gateway/channels/whatsapp`),X=Y.child(`inbound`),Z=Y.child(`outbound`),Ye=Y.child(`heartbeat`);function Xe(){return setInterval(()=>{},1e6).unref(),new Promise(()=>{})}const Ze=ce({ttlMs:20*6e4,maxSize:5e3});function Qe(e){return Ze.check(e)}const $e=new Set([`FN`,`N`,`TEL`]);function et(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=tt(o);if(!c||!$e.has(c))continue;let l=nt(s);if(l){if(c===`FN`&&!r){r=rt(l);continue}if(c===`N`&&!n){n=rt(l);continue}if(c===`TEL`){let e=it(l);e&&i.push(e)}}}return{name:r??n,phones:i}}function tt(e){let[t]=e.split(`;`);if(!t)return;let n=t.split(`.`);return n[n.length-1]||void 0}function nt(e){return e.replace(/\\n/gi,` `).replace(/\\,/g,`,`).replace(/\\;/g,`;`).trim()}function rt(e){return e.replace(/;/g,` `).replace(/\s+/g,` `).trim()}function it(e){let t=e.trim();return t?t.toLowerCase().startsWith(`tel:`)?t.slice(4).trim():t:``}function Q(e){return Ge(e)}function at(e){if(!e)return;let t=Ue(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 ot(e){let t=Q(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 st(e){let t=Q(e);if(!t)return;let n=He(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=lt(t)??(n&&n!==t?lt(n):void 0);if(i)return i}function ct(e){let t=Q(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 lt(e){let t=Q(e);if(!t)return;let n=t.contactMessage??void 0;if(n){let{name:e,phones:t}=ut({displayName:n.displayName,vcard:n.vcard});return dt(e,t)}let r=t.contactsArrayMessage?.contacts??void 0;if(!(!r||r.length===0))return ft(r.map(e=>ut({displayName:e.displayName,vcard:e.vcard})).map(e=>pt(e.name,e.phones)).filter(e=>!!e),r.length)}function ut(e){let t=(e.displayName??``).trim(),n=et(e.vcard??void 0);return{name:t||n.name,phones:n.phones}}function dt(e,t){let n=pt(e,t);return n?`<contact: ${n}>`:`<contact>`}function ft(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 pt(e,t){let n=[e,mt(t)].filter(e=>!!e);if(n.length!==0)return n.join(`, `)}function mt(e){let t=e?.map(e=>e.trim()).filter(Boolean)??[];if(t.length===0)return;let{shown:n,remaining:r}=ht(t,t.length,1),[i]=n;if(i)return r===0?i:`${i} (+${r} more)`}function ht(e,t,n){let r=e.slice(0,n);return{shown:r,remaining:Math.max(t-r.length,0)}}function gt(e){let t=Q(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 _t(t){let n=Q(t);if(!n)return null;let r=at(n),i=Ge(r?.quotedMessage);if(!i)return null;let a=gt(i),o=a?ye(a):void 0,s=[st(i),o].filter(Boolean).join(`
|
|
2
2
|
`).trim();if(s||=ct(i),!s){let t=i?Ue(i):void 0;return e(`Quoted message missing extractable body${t?` (type ${t})`:``}`),null}let c=r?.participant??void 0,u=c?l(c)??c:void 0,d=u??`unknown sender`;return{id:r?.stanzaId?String(r.stanzaId):void 0,body:s,sender:d,senderJid:c,senderE164:u}}function vt(e){return _e({providerConfigPresent:e.providerConfigPresent,groupPolicy:e.groupPolicy,defaultGroupPolicy:e.defaultGroupPolicy})}async function yt(t){let n=_(),r=G({cfg:n,accountId:t.accountId}),i=r.dmPolicy??`pairing`,a=r.allowFrom??[],o=await De({provider:`whatsapp`,accountId:r.accountId,dmPolicy:i}),l=a.length===0&&t.selfE164?[t.selfE164]:[],u=a.length>0?a:l,d=r.groupAllowFrom??(a.length>0?a:void 0),f=t.from===t.selfE164,p=r.selfChatMode??s(t.selfE164,a),m=typeof t.pairingGraceMs==`number`&&t.pairingGraceMs>0?t.pairingGraceMs:3e4,h=typeof t.connectedAtMs==`number`&&typeof t.messageTimestampMs==`number`&&t.messageTimestampMs<t.connectedAtMs-m,g=ge(n),{groupPolicy:v,providerMissingFallbackApplied:y}=vt({providerConfigPresent:n.channels?.whatsapp!==void 0,groupPolicy:r.groupPolicy,defaultGroupPolicy:g});ve({providerMissingFallbackApplied:y,providerKey:`whatsapp`,accountId:r.accountId,log:t=>e(t)});let b=c(t.from),x=typeof t.senderE164==`string`?c(t.senderE164):null,S=Oe({isGroup:t.group,dmPolicy:i,groupPolicy:v,allowFrom:t.group?a:u,groupAllowFrom:d,storeAllowFrom:o,isSenderAllowed:e=>{if(e.includes(`*`))return!0;let n=new Set(e.map(e=>c(String(e))).filter(e=>!!e));return!t.group&&f?!0:t.group?!!(x&&n.has(x)):n.has(b)}});if(t.group&&S.decision!==`allow`)return S.reason===`groupPolicy=disabled`?e(`Blocked group message (groupPolicy: disabled)`):S.reason===`groupPolicy=allowlist (empty allowlist)`?e(`Blocked group message (groupPolicy: allowlist, no groupAllowFrom)`):e(`Blocked group message from ${t.senderE164??`unknown sender`} (groupPolicy: allowlist)`),{allowed:!1,shouldMarkRead:!1,isSelfChat:p,resolvedAccountId:r.accountId};if(!t.group){if(t.isFromMe&&!f)return e(`Skipping outbound DM (fromMe); no pairing reply needed.`),{allowed:!1,shouldMarkRead:!1,isSelfChat:p,resolvedAccountId:r.accountId};if(S.decision===`block`&&S.reason===`dmPolicy=disabled`)return e(`Blocked dm (dmPolicy: disabled)`),{allowed:!1,shouldMarkRead:!1,isSelfChat:p,resolvedAccountId:r.accountId};if(S.decision===`pairing`&&!f){let n=t.from;return h?e(`Skipping pairing reply for historical DM from ${n}.`):await I({channel:`whatsapp`,senderId:n,senderIdLine:`Your WhatsApp phone number: ${n}`,meta:{name:(t.pushName??``).trim()||void 0},upsertPairingRequest:async({id:e,meta:t})=>await he({channel:`whatsapp`,id:e,accountId:r.accountId,meta:t}),onCreated:()=>{e(`whatsapp pairing request sender=${n} name=${t.pushName??`unknown`}`)},sendPairingReply:async e=>{await t.sock.sendMessage(t.remoteJid,{text:e})},onReplyError:t=>{e(`whatsapp pairing reply failed for ${n}: ${String(t)}`)}}),{allowed:!1,shouldMarkRead:!1,isSelfChat:p,resolvedAccountId:r.accountId}}if(S.decision!==`allow`)return e(`Blocked unauthorized sender ${t.from} (dmPolicy=${i})`),{allowed:!1,shouldMarkRead:!1,isSelfChat:p,resolvedAccountId:r.accountId}}return{allowed:!0,shouldMarkRead:!0,isSelfChat:p,resolvedAccountId:r.accountId}}function bt(e){return Ge(e)}function xt(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 St(t,n){let r=bt(t.message);if(!r)return;let i=xt(r),a=r.documentMessage?.fileName??void 0;if(!(!r.imageMessage&&!r.videoMessage&&!r.documentMessage&&!r.audioMessage&&!r.stickerMessage))try{return{buffer:await Ve(t,`buffer`,{},{reuploadRequest:n.updateMediaMessage,logger:n.logger}),mimetype:i,fileName:a}}catch(t){e(`downloadMediaMessage failed: ${String(t)}`);return}}function Ct(e){Ae({channel:`whatsapp`,accountId:e,direction:`outbound`})}function wt(e){return typeof e==`object`&&e&&`key`in e?String(e.key?.id??`unknown`):`unknown`}function Tt(e){return{sendMessage:async(t,n,r,i,a)=>{let s=o(t),c;if(r&&i)if(i.startsWith(`image/`))c={image:r,caption:n||void 0,mimetype:i};else if(i.startsWith(`audio/`))c={audio:r,ptt:!0,mimetype:i};else if(i.startsWith(`video/`)){let e=a?.gifPlayback;c={video:r,caption:n||void 0,mimetype:i,...e?{gifPlayback:!0}:{}}}else c={document:r,fileName:a?.fileName?.trim()||`file`,caption:n||void 0,mimetype:i};else c={text:n};let l=await e.sock.sendMessage(s,c);return Ct(a?.accountId??e.defaultAccountId),{messageId:wt(l)}},sendPoll:async(t,n)=>{let r=o(t),i=await e.sock.sendMessage(r,{poll:{name:n.question,values:n.options,selectableCount:n.maxSelections??1}});return Ct(e.defaultAccountId),{messageId:wt(i)}},sendReaction:async(t,n,r,i,a)=>{let s=o(t);await e.sock.sendMessage(s,{react:{text:r,key:{remoteJid:s,id:n,fromMe:i,participant:a?o(a):void 0}}})},sendComposingTo:async t=>{let n=o(t);await e.sock.sendPresenceUpdate(`composing`,n)}}}async function Et(r){let a=n({module:`web-inbound`}),o=i(`gateway/channels/whatsapp`).child(`inbound`),s=await Re(!1,r.verbose,{authDir:r.authDir});await Ie(s);let c=Date.now(),u=null,f=new Promise(e=>{u=e}),p=e=>{if(!u)return;let t=u;u=null,t(e)};try{await s.sendPresenceUpdate(`available`),t()&&e(`Sent global 'available' presence on connect`)}catch(t){e(`Failed to send 'available' presence on connect: ${String(t)}`)}let h=s.user?.id,g=h?l(h):null,_=N({debounceMs:r.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:r.shouldDebounce,onFlush:async e=>{let t=e.at(-1);if(!t)return;if(e.length===1){await r.onMessage(t);return}let n=new Set;for(let t of e)for(let e of t.mentionedJids??[])n.add(e);let i=e.map(e=>e.body).filter(Boolean).join(`
|
|
3
3
|
`),a={...t,body:i,mentionedJids:n.size>0?Array.from(n):void 0};await r.onMessage(a)},onError:e=>{a.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=>d(e,{authDir:r.authDir,lidLookup:b}),S=async t=>{let n=v.get(t);if(n&&n.expires>Date.now())return n;try{let e=await s.groupMetadata(t),n=(await Promise.all(e.participants?.map(async e=>await x(e.id)??e.id)??[])).filter(Boolean)??[],r={subject:e.subject,participants:n,expires:Date.now()+y};return v.set(t,r),r}catch(n){return e(`Failed to fetch group metadata for ${t}: ${String(n)}`),{expires:Date.now()+y}}},ee=async e=>{let t=e.key?.id??void 0,n=e.key?.remoteJid;if(!n||n.endsWith(`@status`)||n.endsWith(`@broadcast`))return null;let i=We(n)===!0;if(t&&Qe(`${r.accountId}:${n}:${t}`))return null;let a=e.key?.participant??void 0,o=i?n:await x(n);if(!o)return null;let l=i?a?await x(a):null:o,u,d;if(i){let e=await S(n);u=e.subject,d=e.participants}let f=e.messageTimestamp?Number(e.messageTimestamp)*1e3:void 0,p=await yt({accountId:r.accountId,from:o,selfE164:g,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:n});return p.allowed?{id:t,remoteJid:n,group:i,participantJid:a,from:o,senderE164:l,groupSubject:u,groupParticipants:d,messageTimestampMs:f,access:p}:null},C=async n=>{let{id:i,remoteJid:a,participantJid:o,access:c}=n;if(i&&!c.isSelfChat&&r.sendReadReceipts!==!1)try{await s.readMessages([{remoteJid:a,id:i,participant:o,fromMe:!1}]),t()&&e(`Marked message ${i} as read for ${a}${o?` (participant ${o})`:``}`)}catch(t){e(`Failed to mark message ${i} read: ${String(t)}`)}else i&&c.isSelfChat&&t()&&e(`Self-chat mode: skipping read receipt for ${i}`)},w=async t=>{let n=gt(t.message??void 0),i=n?ye(n):void 0,a=st(t.message??void 0);if(i&&(a=[a,i].filter(Boolean).join(`
|
|
4
4
|
`).trim()),!a&&(a=ct(t.message??void 0),!a))return null;let o=_t(t.message),c,l,u;try{let e=await St(t,s);if(e){let t=(typeof r.mediaMaxMb==`number`&&r.mediaMaxMb>0?r.mediaMaxMb:50)*1024*1024;c=(await m(e.buffer,e.mimetype,`inbound`,t,e.fileName)).path,l=e.mimetype,u=e.fileName}}catch(t){e(`Inbound media download failed: ${String(t)}`)}return{body:a,location:n??void 0,replyContext:o,mediaPath:c,mediaType:l,mediaFileName:u}},T=async(t,n,r)=>{let i=n.remoteJid,c=async()=>{try{await s.sendPresenceUpdate(`composing`,i)}catch(t){e(`Presence update failed: ${String(t)}`)}},l=async e=>{await s.sendMessage(i,{text:e})},u=async e=>{await s.sendMessage(i,e)},d=n.messageTimestampMs,f=ot(t.message),p=t.pushName??void 0;a.info({from:n.from,to:g??`me`,body:r.body,mediaPath:r.mediaPath,mediaType:r.mediaType,mediaFileName:r.mediaFileName,timestamp:d},`inbound message`);let m={id:n.id,from:n.from,conversationId:n.from,to:g??`me`,accountId:n.access.resolvedAccountId,body:r.body,pushName:p,timestamp:d,chatType:n.group?`group`:`direct`,chatId:n.remoteJid,senderJid:n.participantJid,senderE164:n.senderE164??void 0,senderName:p,replyToId:r.replyContext?.id,replyToBody:r.replyContext?.body,replyToSender:r.replyContext?.sender,replyToSenderJid:r.replyContext?.senderJid,replyToSenderE164:r.replyContext?.senderE164,groupSubject:n.groupSubject,groupParticipants:n.groupParticipants,mentionedJids:f??void 0,selfJid:h,selfE164:g,fromMe:!!t.key?.fromMe,location:r.location??void 0,sendComposing:c,reply:l,sendMedia:u,mediaPath:r.mediaPath,mediaType:r.mediaType,mediaFileName:r.mediaFileName};try{Promise.resolve(_.enqueue(m)).catch(e=>{a.error({error:String(e)},`failed handling inbound web message`),o.error(`Failed handling inbound web message: ${String(e)}`)})}catch(e){a.error({error:String(e)},`failed handling inbound web message`),o.error(`Failed handling inbound web message: ${String(e)}`)}},E=async e=>{if(!(e.type!==`notify`&&e.type!==`append`))for(let t of e.messages??[]){Ae({channel:`whatsapp`,accountId:r.accountId,direction:`inbound`});let n=await ee(t);if(!n||(await C(n),e.type===`append`))continue;let i=await w(t);i&&await T(t,n,i)}};s.ev.on(`messages.upsert`,E);let D=e=>{try{if(e.connection===`close`){let t=Le(e.lastDisconnect?.error);p({status:t,isLoggedOut:t===Be.loggedOut,error:e.lastDisconnect?.error})}}catch(e){a.error({error:String(e)},`connection.update handler error`),p({status:void 0,isLoggedOut:!1,error:e})}};return s.ev.on(`connection.update`,D),{close:async()=>{try{let e=s.ev,t=E,n=D;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(t){e(`Socket close failed: ${String(t)}`)}},onClose:f,signalClose:e=>{p(e??{status:void 0,isLoggedOut:!1,error:`closed`})},...Tt({sock:{sendMessage:(e,t)=>s.sendMessage(e,t),sendPresenceUpdate:(e,t)=>s.sendPresenceUpdate(e,t)},defaultAccountId:r.accountId})}}function Dt(e,t){return{mentionRegexes:F(e,t),allowFrom:e.channels?.whatsapp?.allowFrom}}function Ot(e,t){let n=t?{authDir:t}:void 0;return{normalizedMentions:e.mentionedJids?.length?e.mentionedJids.map(e=>l(e,n)??e).filter(Boolean):[],selfE164:e.selfE164??(e.selfJid?l(e.selfJid,n):null),selfJid:e.selfJid?e.selfJid.replace(/:\\d+/,``):null}}function kt(e,t,n){let r=e=>A(e),i=s(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 a=r(e.body);if(t.mentionRegexes.some(e=>e.test(a)))return!0;if(n.selfE164){let t=n.selfE164.replace(/\D/g,``);if(t){if(a.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 At(e,t,n){let r=Ot(e,n);return{wasMentioned:kt(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 jt(e,t){let n=e.allowFrom;return(Array.isArray(n)&&n.length>0?n:t?[t]:[]).filter(e=>!!(e&&e!==`*`)).map(e=>c(e)).filter(e=>!!e)}function Mt(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 Nt(e){let t=z({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=U({agentId:e.agentId,mainKey:H});return{sessionKey:t,mainSessionKey:n,lastRoutePolicy:C({sessionKey:t,mainSessionKey:n})}}async function Pt(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`;X.info(`Broadcasting message to ${t.length} agents (${n})`);let r=e.cfg.agents?.list?.map(e=>V(e.id)),i=(r?.length??0)>0,a=e.msg.chatType===`group`?e.groupHistories.get(e.groupHistoryKey)??[]:void 0,o=async t=>{let n=V(t);if(i&&!r?.includes(n))return X.warn(`Broadcast agent ${t} not found in agents.list; skipping`),!1;let o=Nt({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 X.error(`Broadcast agent ${t} failed: ${q(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 Ft(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 It(e,t){let n=v({From:t,ChatType:`group`,Provider:`whatsapp`})?.id,r=e.channels?.whatsapp,i=!!(r?.groupAllowFrom?.length||r?.allowFrom?.length);return h({cfg:e,channel:`whatsapp`,groupId:n??t,hasGroupAllowFrom:i})}function Lt(e,t){let n=v({From:t,ChatType:`group`,Provider:`whatsapp`})?.id;return y({cfg:e,channel:`whatsapp`,groupId:n??t})}function Rt(e){let t=f(K(e.cfg.session?.store,{agentId:e.agentId}))[e.sessionKey],n=Lt(e.cfg,e.conversationId)?`mention`:`always`;return se(t?.groupActivation)??n}function zt(e,t,n){for(let r of e){let e=c(r)??r;!e||t.has(e)||(t.add(e),n.push(e))}}function Bt(e,t,n,r){if(!n||!r)return;let i=c(n)??n;if(!i)return;let a=e.get(t);a||(a=new Map,e.set(t,a)),a.set(i,r)}function Vt(e){let{participants:t,roster:n,fallbackE164:r}=e,i=new Set,a=[];if(t?.length&&zt(t,i,a),n&&zt(n.keys(),i,a),a.length===0&&r){let e=c(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 Ht(e,t){let n=c(t.senderE164??``);return n?jt(e,t.selfE164??void 0).includes(n):!1}function Ut(e){let t=e.msg.senderName&&e.msg.senderE164?`${e.msg.senderName} (${e.msg.senderE164})`:e.msg.senderName??e.msg.senderE164??`Unknown`;R({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 Wt(e,t){return e.logVerbose(t),Ut({msg:e.msg,groupHistories:e.groupHistories,groupHistoryKey:e.groupHistoryKey,groupHistoryLimit:e.groupHistoryLimit}),{shouldProcess:!1}}function Gt(e){let t=It(e.cfg,e.conversationId);if(t.allowlistEnabled&&!t.allowed)return e.logVerbose(`Skipping group message ${e.conversationId} (not in allowlist)`),{shouldProcess:!1};Bt(e.groupMemberNames,e.groupHistoryKey,e.msg.senderE164,e.msg.senderName);let n=Dt(e.cfg,e.agentId),r=Ft(e.msg.body,n.mentionRegexes,e.msg.selfE164),i=ie(r),a=Ht(e.baseMentionConfig,e.msg),o=a&&b(r,e.cfg);if(i.hasCommand&&!a)return Wt(e,`Ignoring /activation from non-owner in group ${e.conversationId}`);let s=At(e.msg,n,e.authDir);e.replyLogger.debug({conversationId:e.conversationId,wasMentioned:s.wasMentioned,...s.details},`group mention debug`);let l=s.wasMentioned,u=Rt({cfg:e.cfg,agentId:e.agentId,sessionKey:e.sessionKey,conversationId:e.conversationId})!==`always`,d=e.msg.selfJid?.replace(/:\\d+/,``),f=e.msg.replyToSenderJid?.replace(/:\\d+/,``),p=e.msg.selfE164?c(e.msg.selfE164):null,m=e.msg.replyToSenderE164?c(e.msg.replyToSenderE164):null,h=re({requireMention:u,canDetectMention:!0,wasMentioned:l,implicitMention:!!(d&&f&&d===f||p&&m&&p===m),shouldBypassMention:o});return e.msg.wasMentioned=h.effectiveWasMentioned,!o&&u&&h.shouldSkip?Wt(e,`Group message stored for context (no mention detected) in ${e.conversationId}: ${e.msg.body}`):{shouldProcess:!0}}function Kt(e,t){e.add(t),t.finally(()=>{e.delete(t)})}function qt(e){let t=K(e.cfg.session?.store,{agentId:e.storeAgentId}),n=g({storePath:t,sessionKey:e.sessionKey,deliveryContext:{channel:e.channel,to:e.to,accountId:e.accountId},ctx:e.ctx}).catch(n=>{e.warn({error:q(n),storePath:t,sessionKey:e.sessionKey,to:e.to},`failed updating last route`)});Kt(e.backgroundTasks,n)}function Jt(e){return e.chatType===`group`?e.conversationId??e.from:e.senderE164?c(e.senderE164)??e.senderE164:e.from.includes(`@`)?l(e.from)??e.from:c(e.from)??e.from}function $(e,t=400){return!e||e.length<=t?e:`${e.slice(0,t)}… (truncated ${e.length-t} chars)`}function Yt(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 Xt(e){if(e.isReasoning===!0)return!0;let t=e.text;return typeof t==`string`?t.trimStart().toLowerCase().startsWith(`reasoning:`):!1}async function Zt(n){let{replyResult:r,msg:i,maxMediaBytes:o,textLimit:s,replyLogger:c,connectionId:l,skipLog:u}=n,d=Date.now();if(Xt(r)){Z.debug(`Suppressed reasoning payload to ${i.from}`);return}let f=n.tableMode??`code`,p=n.chunkMode??`length`,m=Se(Pe(je(r.text||``,f)),s,p),h=r.mediaUrls?.length?r.mediaUrls:r.mediaUrl?[r.mediaUrl]:[],g=async(t,n,r=3)=>{let o;for(let s=1;s<=r;s++)try{return await t()}catch(t){o=t;let c=q(t),l=s===r;if(!/closed|reset|timed\s*out|disconnect/i.test(c)||l)throw t;let u=500*s;e(`Retrying ${n} to ${i.from} after failure (${s}/${r-1}) in ${u}ms: ${c}`),await a(u)}throw o};if(h.length===0&&m.length){let e=m.length;for(let[t,n]of m.entries()){let r=Date.now();if(await g(()=>i.reply(n),`text`),!u){let n=Date.now()-r;Z.debug(`Sent chunk ${t+1}/${e} to ${i.from} (${n.toFixed(0)}ms)`)}}c.info({correlationId:i.id??J(),connectionId:l??null,to:i.from,from:i.to,text:$(r.text,240),mediaUrl:null,mediaSizeBytes:null,mediaKind:null,durationMs:Date.now()-d},`auto-reply sent (text)`);return}let _=[...m];for(let[r,a]of h.entries()){let s=r===0&&_.shift()||void 0;try{let r=await xe(a,{maxBytes:o,localRoots:n.mediaLocalRoots});if(t()&&(e(`Web auto-reply media size: ${(r.buffer.length/(1024*1024)).toFixed(2)}MB`),e(`Web auto-reply media source: ${a} (kind ${r.kind})`)),r.kind===`image`)await g(()=>i.sendMedia({image:r.buffer,caption:s,mimetype:r.contentType}),`media:image`);else if(r.kind===`audio`)await g(()=>i.sendMedia({audio:r.buffer,ptt:!0,mimetype:r.contentType,caption:s}),`media:audio`);else if(r.kind===`video`)await g(()=>i.sendMedia({video:r.buffer,caption:s,mimetype:r.contentType}),`media:video`);else{let e=r.fileName??a.split(`/`).pop()??`file`,t=r.contentType??`application/octet-stream`;await g(()=>i.sendMedia({document:r.buffer,fileName:e,caption:s,mimetype:t}),`media:document`)}Z.info(`Sent media reply to ${i.from} (${(r.buffer.length/(1024*1024)).toFixed(2)}MB)`),c.info({correlationId:i.id??J(),connectionId:l??null,to:i.from,from:i.to,text:s??null,mediaUrl:a,mediaSizeBytes:r.buffer.length,mediaKind:r.kind,durationMs:Date.now()-d},`auto-reply sent (media)`)}catch(e){if(Z.error(`Failed sending web media to ${i.from}: ${q(e)}`),c.warn({err:e,mediaUrl:a},`failed to send web media reply`),r===0){let t=e instanceof Error?`⚠️ Media failed: ${e.message}`:`⚠️ Media failed.`,n=[_.shift()??s??``,t].filter(Boolean).join(`
|
|
5
5
|
`);n&&(Z.warn(`Media skipped; sent text-only to ${i.from}`),await i.reply(n))}}}for(let e of _)await i.reply(e)}function Qt(t){if(!t.msg.id)return;let n=t.cfg.channels?.whatsapp?.ackReaction,r=(n?.emoji??``).trim(),i=n?.direct??!0,a=n?.group??`mentions`,o=t.msg.conversationId??t.msg.from,s=t.msg.chatType===`group`?Rt({cfg:t.cfg,agentId:t.agentId,sessionKey:t.sessionKey,conversationId:o}):null;T({emoji:r,isDirect:t.msg.chatType===`direct`,isGroup:t.msg.chatType===`group`,directEnabled:i,groupMode:a,wasMentioned:t.msg.wasMentioned===!0,groupActivated:s===`always`})&&(t.info({chatId:t.msg.chatId,messageId:t.msg.id,emoji:r},`sending ack reaction`),Fe(t.msg.chatId,t.msg.id,r,{verbose:t.verbose,fromMe:!1,participant:t.msg.senderJid,accountId:t.accountId}).catch(n=>{t.warn({error:q(n),chatId:t.msg.chatId,messageId:t.msg.id},`failed to send ack reaction`),e(`WhatsApp ack reaction failed for chat ${t.msg.chatId}: ${q(n)}`)}))}function $t(e){return e.replyToBody?`[Replying to ${e.replyToSender??`unknown sender`}${e.replyToId?` id:${e.replyToId}`:``}]\n${e.replyToBody}\n[/Replying]`:null}function en(e){let{cfg:t,msg:n,agentId:r,previousTimestamp:i,envelope:a}=e,o=M(t,r,{configured:t.channels?.whatsapp?.messagePrefix,hasAllowFrom:(t.channels?.whatsapp?.allowFrom?.length??0)>0}),s=o?`${o} `:``,c=$t(n),l=`${s}${n.body}${c?`\n\n${c}`:``}`;return j({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 tn(e){let t=e.cfg.commands?.useAccessGroups!==!1;if(!t)return!0;let n=e.msg.chatType===`group`,r=c(n?e.msg.senderE164??``:e.msg.senderE164??e.msg.from??``);if(!r)return!1;let i=G({cfg:e.cfg,accountId:e.msg.accountId}),a=i.dmPolicy??`pairing`,o=i.groupPolicy??`allowlist`,s=i.allowFrom??[],l=i.groupAllowFrom??(s.length>0?s:void 0),u=n?[]:await De({provider:`whatsapp`,accountId:e.msg.accountId,dmPolicy:a});return Ee({isGroup:n,dmPolicy:a,groupPolicy:o,allowFrom:s.length>0?s:e.msg.selfE164?[e.msg.selfE164]:[],groupAllowFrom:l,storeAllowFrom:u,isSenderAllowed:e=>e.includes(`*`)?!0:e.map(e=>c(String(e))).filter(e=>!!e).includes(r),command:{useAccessGroups:t,allowTextCommands:!0,hasControlCommand:!0}}).commandAuthorized}function nn(e){let t=G({cfg:e.cfg,accountId:e.msg.accountId});return ke({dmScope:e.cfg.session?.dmScope,allowFrom:t.allowFrom,normalizeEntry:e=>c(e)})}async function rn(n){let r=n.msg.conversationId??n.msg.from,{storePath:i,envelopeOptions:a,previousTimestamp:o}=le({cfg:n.cfg,agentId:n.route.agentId,sessionKey:n.route.sessionKey}),s=en({cfg:n.cfg,msg:n.msg,agentId:n.route.agentId,previousTimestamp:o,envelope:a}),u=!1;if(n.msg.chatType===`group`){let e=n.groupHistory??n.groupHistories.get(n.groupHistoryKey)??[];e.length>0&&(s=L({entries:e.map(e=>({sender:e.sender,body:e.body,timestamp:e.timestamp})),currentMessage:s,excludeLast:!1,formatEntry:e=>j({channel:`WhatsApp`,from:r,timestamp:e.timestamp,body:e.body,chatType:`group`,senderLabel:e.sender,envelope:a})})),u=!(n.suppressGroupHistoryClear??!1)}let d=n.buildCombinedEchoKey({sessionKey:n.route.sessionKey,combinedBody:s});if(n.echoHas(d))return e(`Skipping auto-reply: detected echo for combined message`),n.echoForget(d),!1;Qt({cfg:n.cfg,msg:n.msg,agentId:n.route.agentId,sessionKey:n.route.sessionKey,conversationId:r,verbose:n.verbose,accountId:n.route.accountId,info:n.replyLogger.info.bind(n.replyLogger),warn:n.replyLogger.warn.bind(n.replyLogger)});let f=n.msg.id??J();n.replyLogger.info({connectionId:n.connectionId,correlationId:f,from:n.msg.chatType===`group`?r:n.msg.from,to:n.msg.to,body:$(s,240),mediaType:n.msg.mediaType??null,mediaPath:n.msg.mediaPath??null},`inbound web message`);let m=n.msg.chatType===`group`?r:n.msg.from,h=n.msg.mediaType?`, ${n.msg.mediaType}`:``;X.info(`Inbound message ${m} -> ${n.msg.to} (${n.msg.chatType}${h}, ${s.length} chars)`),t()&&X.debug(`Inbound body: ${$(s,400)}`);let g=n.msg.chatType===`group`?void 0:n.msg.senderE164?c(n.msg.senderE164):n.msg.from.includes(`@`)?l(n.msg.from):c(n.msg.from),_=n.maxMediaTextChunkLimit??Ce(n.cfg,`whatsapp`),v=we(n.cfg,`whatsapp`,n.route.accountId),y=Te({cfg:n.cfg,channel:`whatsapp`,accountId:n.route.accountId}),b=me(n.cfg,n.route.agentId),x=!1,S=!1,C=ae(n.msg.body,n.cfg)?await tn({cfg:n.cfg,msg:n.msg}):void 0,T=n.cfg.messages?.responsePrefix,{onModelSelected:D,...O}=te({cfg:n.cfg,agentId:n.route.agentId,channel:`whatsapp`,accountId:n.route.accountId}),re=n.msg.chatType!==`group`&&!!n.msg.selfE164&&c(n.msg.from)===c(n.msg.selfE164??``),ie=O.responsePrefix??(T===void 0&&re?ee(n.cfg,n.route.agentId):void 0),k=n.msg.chatType===`group`?(n.groupHistory??n.groupHistories.get(n.groupHistoryKey)??[]).map(e=>({sender:e.sender,body:e.body,timestamp:e.timestamp})):void 0,A=ne({Body:s,BodyForAgent:n.msg.body,InboundHistory:k,RawBody:n.msg.body,CommandBody:n.msg.body,From:n.msg.from,To:n.msg.to,SessionKey:n.route.sessionKey,AccountId:n.route.accountId,MessageSid:n.msg.id,ReplyToId:n.msg.replyToId,ReplyToBody:n.msg.replyToBody,ReplyToSender:n.msg.replyToSender,MediaPath:n.msg.mediaPath,MediaUrl:n.msg.mediaUrl,MediaType:n.msg.mediaType,ChatType:n.msg.chatType,ConversationLabel:n.msg.chatType===`group`?r:n.msg.from,GroupSubject:n.msg.groupSubject,GroupMembers:Vt({participants:n.msg.groupParticipants,roster:n.groupMemberNames.get(n.groupHistoryKey),fallbackE164:n.msg.senderE164}),SenderName:n.msg.senderName,SenderId:n.msg.senderJid?.trim()||n.msg.senderE164,SenderE164:n.msg.senderE164,CommandAuthorized:C,WasMentioned:n.msg.wasMentioned,...n.msg.location?be(n.msg.location):{},Provider:`whatsapp`,Surface:`whatsapp`,OriginatingChannel:`whatsapp`,OriginatingTo:n.msg.from}),M=nn({cfg:n.cfg,msg:n.msg}),N=!M||M===g,P=E({route:n.route,sessionKey:n.route.sessionKey});g&&P===n.route.mainSessionKey&&N?qt({cfg:n.cfg,backgroundTasks:n.backgroundTasks,storeAgentId:n.route.agentId,sessionKey:n.route.mainSessionKey,channel:`whatsapp`,to:g,accountId:n.route.accountId,ctx:A,warn:n.replyLogger.warn.bind(n.replyLogger)}):g&&P===n.route.mainSessionKey&&M&&e(`Skipping main-session last route update for ${g} (pinned owner ${M})`);let F=p({storePath:i,sessionKey:n.route.sessionKey,ctx:A}).catch(e=>{n.replyLogger.warn({error:q(e),storePath:i,sessionKey:n.route.sessionKey},`failed updating session meta`)});Kt(n.backgroundTasks,F);let{queuedFinal:I}=await w({ctx:A,cfg:n.cfg,replyResolver:n.replyResolver,dispatcherOptions:{...O,responsePrefix:ie,onHeartbeatStrip:()=>{x||(x=!0,e(`Stripped stray HEARTBEAT_OK token from web reply`))},deliver:async(e,i)=>{if(i.kind!==`final`)return;await Zt({replyResult:e,msg:n.msg,mediaLocalRoots:b,maxMediaBytes:n.maxMediaBytes,textLimit:_,chunkMode:v,replyLogger:n.replyLogger,connectionId:n.connectionId,skipLog:!1,tableMode:y}),S=!0;let a=e.text?!0:void 0;n.rememberSentText(e.text,{combinedBody:s,combinedBodySessionKey:n.route.sessionKey,logVerboseMessage:a});let o=n.msg.chatType===`group`?r:n.msg.from??`unknown`,c=!!(e.mediaUrl||e.mediaUrls?.length);if(Z.info(`Auto-replied to ${o}${c?` (media)`:``}`),t()){let t=e.text==null?`<media>`:$(e.text,400);Z.debug(`Reply body: ${t}${c?` (media)`:``}`)}},onError:(e,t)=>{let i=t.kind===`tool`?`tool update`:t.kind===`block`?`block update`:`auto-reply`;Z.error(`Failed sending web ${i} to ${n.msg.from??r}: ${q(e)}`)},onReplyStart:n.msg.sendComposing},replyOptions:{disableBlockStreaming:!0,onModelSelected:D}});return I?(u&&n.groupHistories.set(n.groupHistoryKey,[]),S):(u&&n.groupHistories.set(n.groupHistoryKey,[]),e(`Skipping auto-reply: silent token or no text/media returned from resolver`),!1)}function an(t){let n=async(e,n,r,i)=>rn({cfg:t.cfg,msg:e,route:n,groupHistoryKey:r,groupHistories:t.groupHistories,groupMemberNames:t.groupMemberNames,connectionId:t.connectionId,verbose:t.verbose,maxMediaBytes:t.maxMediaBytes,replyResolver:t.replyResolver,replyLogger:t.replyLogger,backgroundTasks:t.backgroundTasks,rememberSentText:t.echoTracker.rememberText,echoHas:t.echoTracker.has,echoForget:t.echoTracker.forget,buildCombinedEchoKey:t.echoTracker.buildCombinedKey,groupHistory:i?.groupHistory,suppressGroupHistoryClear:i?.suppressGroupHistoryClear});return async r=>{let i=r.conversationId??r.from,a=Jt(r),o=O({cfg:_(),channel:`whatsapp`,accountId:r.accountId,peer:{kind:r.chatType===`group`?`group`:`direct`,id:a}}),s=r.chatType===`group`?B({channel:`whatsapp`,accountId:o.accountId,peerKind:`group`,peerId:a}):o.sessionKey;if(r.from===r.to&&e(`📱 Same-phone mode detected (from === to: ${r.from})`),t.echoTracker.has(r.body)){e(`Skipping auto-reply: detected echo (message matches recently sent text)`),t.echoTracker.forget(r.body);return}if(r.chatType===`group`){let n={From:r.from,To:r.to,SessionKey:o.sessionKey,AccountId:o.accountId,ChatType:r.chatType,ConversationLabel:i,GroupSubject:r.groupSubject,SenderName:r.senderName,SenderId:r.senderJid?.trim()||r.senderE164,SenderE164:r.senderE164,Provider:`whatsapp`,Surface:`whatsapp`,OriginatingChannel:`whatsapp`,OriginatingTo:i};if(qt({cfg:t.cfg,backgroundTasks:t.backgroundTasks,storeAgentId:o.agentId,sessionKey:o.sessionKey,channel:`whatsapp`,to:i,accountId:o.accountId,ctx:n,warn:t.replyLogger.warn.bind(t.replyLogger)}),!Gt({cfg:t.cfg,msg:r,conversationId:i,groupHistoryKey:s,agentId:o.agentId,sessionKey:o.sessionKey,baseMentionConfig:t.baseMentionConfig,authDir:t.account.authDir,groupHistories:t.groupHistories,groupHistoryLimit:t.groupHistoryLimit,groupMemberNames:t.groupMemberNames,logVerbose:e,replyLogger:t.replyLogger}).shouldProcess)return}else !r.senderE164&&a&&a.startsWith(`+`)&&(r.senderE164=c(a)??r.senderE164);await Pt({cfg:t.cfg,msg:r,peerId:a,route:o,groupHistoryKey:s,groupHistories:t.groupHistories,processMessage:n})||await n(r,o,s)}}function on(e){return e===440}async function sn(t,i=Et,a=!0,o=oe,s=r,c,l={}){let u=J(),d=n({module:`web-auto-reply`,runId:u}),f=n({module:`web-heartbeat`,runId:u}),p=n({module:`web-reconnect`,runId:u}),m={running:!0,connected:!1,reconnectAttempts:0,lastConnectedAt:null,lastDisconnect:null,lastMessageAt:null,lastEventAt:null,lastError:null},h=()=>{l.statusSink?.({...m,lastDisconnect:m.lastDisconnect?{...m.lastDisconnect}:null})};h();let g=_(),v=G({cfg:g,accountId:l.accountId}),y={...g,channels:{...g.channels,whatsapp:{...g.channels?.whatsapp,ackReaction:v.ackReaction,messagePrefix:v.messagePrefix,allowFrom:v.allowFrom,groupAllowFrom:v.groupAllowFrom,groupPolicy:v.groupPolicy,textChunkLimit:v.textChunkLimit,chunkMode:v.chunkMode,mediaMaxMb:v.mediaMaxMb,blockStreaming:v.blockStreaming,groups:v.groups}}},ee=W(v),C=qe(y,l.heartbeatSeconds),w=Je(y,l.reconnect),T=Dt(y),E=y.channels?.whatsapp?.accounts?.[l.accountId??``]?.historyLimit??y.channels?.whatsapp?.historyLimit??y.messages?.groupChat?.historyLimit??50,te=new Map,ne=new Map,re=Mt({maxItems:100,logVerbose:e}),ie=l.sleep??((e,t)=>k(e,t??c)),ae=()=>c?.aborted===!0,A=c&&new Promise(e=>c.addEventListener(`abort`,()=>e(`aborted`),{once:!0})),j=process.getMaxListeners?.()??10;process.setMaxListeners&&j<50&&process.setMaxListeners(50);let M=!1,N=()=>{M=!0};process.once(`SIGINT`,N);let F=0;for(;!ae();){let n=J(),r=Date.now(),u=null,g=null,_=null,k=0,j=null,I=l.messageTimeoutMs??1800*1e3,se=l.watchdogCheckMs??60*1e3,L=new Set,ce=an({cfg:y,verbose:t,connectionId:n,maxMediaBytes:ee,groupHistoryLimit:E,groupHistories:te,groupMemberNames:ne,echoTracker:re,backgroundTasks:L,replyResolver:o??oe,replyLogger:d,baseMentionConfig:T,account:v}),le=S({cfg:y,channel:`whatsapp`}),R=await(i??Et)({verbose:t,accountId:v.accountId,authDir:v.authDir,mediaMaxMb:v.mediaMaxMb,sendReadReceipts:v.sendReadReceipts,debounceMs:le,shouldDebounce:e=>e.mediaPath||e.mediaType||e.location||e.replyToId||e.replyToBody?!1:!b(e.body,y),onMessage:async e=>{k+=1,_=Date.now(),m.lastMessageAt=_,m.lastEventAt=_,h(),await ce(e)}});Object.assign(m,x()),m.lastError=null,h();let{e164:z}=de(v.authDir),B=O({cfg:y,channel:`whatsapp`,accountId:v.accountId});D(`WhatsApp gateway connected${z?` as ${z}`:``}.`,{sessionKey:B.sessionKey}),Ne(v.accountId,R),j=pe(e=>{if(!Yt(e))return!1;let t=q(e);return p.warn({connectionId:n,error:t},`web reconnect: unhandled rejection from WhatsApp socket; forcing reconnect`),R.signalClose?.({status:499,isLoggedOut:!1,error:e}),!0});let V=async()=>{Ne(v.accountId,null),j&&=(j(),null),u&&clearInterval(u),g&&clearInterval(g),L.size>0&&(await Promise.allSettled(L),L.clear());try{await R.close()}catch(t){e(`Socket close failed: ${q(t)}`)}};if(a&&(u=setInterval(()=>{let e=fe(v.authDir),t=_?Math.floor((Date.now()-_)/6e4):null,i={connectionId:n,reconnectAttempts:F,messagesHandled:k,lastMessageAt:_,authAgeMs:e,uptimeMs:Date.now()-r,...t!==null&&t>30?{minutesSinceLastMessage:t}:{}};t&&t>30?f.warn(i,`⚠️ web gateway heartbeat - no messages in 30+ minutes`):f.info(i,`web gateway heartbeat`)},C*1e3),g=setInterval(()=>{if(!_)return;let t=Date.now()-_;if(t<=I)return;let r=Math.floor(t/6e4);f.warn({connectionId:n,minutesSinceLastMessage:r,lastMessageAt:new Date(_),messagesHandled:k},`Message timeout detected - forcing reconnect`),Ye.warn(`No messages received in ${r}m - restarting connection`),V().catch(t=>{e(`Close listener failed: ${q(t)}`)}),R.signalClose?.({status:499,isLoggedOut:!1,error:`watchdog-timeout`})},se)),Y.info(`Listening for personal WhatsApp inbound messages.`),(process.stdout.isTTY||process.stderr.isTTY)&&Y.raw(`Ctrl+C to stop.`),!a){await V(),process.removeListener(`SIGINT`,N);return}let H=await Promise.race([R.onClose?.catch(e=>(p.error({error:q(e)},`listener.onClose rejected`),{status:500,isLoggedOut:!1,error:e}))??Xe(),A??Xe()]);if(Date.now()-r>C*1e3&&(F=0),m.reconnectAttempts=F,h(),ae()||M||H===`aborted`){await V();break}let U=(typeof H==`object`&&H&&`status`in H?H.status:void 0)??`unknown`,W=typeof H==`object`&&H&&`isLoggedOut`in H&&H.isLoggedOut,G=q(H);if(m.connected=!1,m.lastEventAt=Date.now(),m.lastDisconnect={at:m.lastEventAt,status:typeof U==`number`?U:void 0,error:G,loggedOut:!!W},m.lastError=G,m.reconnectAttempts=F,h(),p.info({connectionId:n,status:U,loggedOut:W,reconnectAttempts:F,error:G},`web reconnect: connection closed`),D(`WhatsApp gateway disconnected (status ${U??`unknown`})`,{sessionKey:B.sessionKey}),W){s.error(`WhatsApp session logged out. Run \`${ue(`openclaw channels login --channel web`)}\` to relink.`),await V();break}if(on(U)){p.warn({connectionId:n,status:U,error:G},`web reconnect: non-retryable close status; stopping monitor`),s.error(`WhatsApp Web connection closed (status ${U}: session conflict). Resolve conflicting WhatsApp Web sessions, then relink with \`${ue(`openclaw channels login --channel web`)}\`. Stopping web monitoring.`),await V();break}if(F+=1,m.reconnectAttempts=F,h(),w.maxAttempts>0&&F>=w.maxAttempts){p.warn({connectionId:n,status:U,reconnectAttempts:F,maxAttempts:w.maxAttempts},`web reconnect: max attempts reached; continuing in degraded mode`),s.error(`WhatsApp Web reconnect: max attempts reached (${F}/${w.maxAttempts}). Stopping web monitoring.`),await V();break}let K=P(w,F);p.info({connectionId:n,status:U,reconnectAttempts:F,maxAttempts:w.maxAttempts||`unlimited`,delayMs:K},`web reconnect: scheduling retry`),s.error(`WhatsApp Web connection closed (status ${U}). Retry ${F}/${w.maxAttempts||`∞`} in ${Me(K)}… (${G})`),await V();try{await ie(K,c)}catch{break}}m.running=!1,m.connected=!1,m.lastEventAt=Date.now(),h(),process.removeListener(`SIGINT`,N)}export{Et as n,Xe as r,sn as t};
|
|
6
|
-
//# sourceMappingURL=channel-web-
|
|
6
|
+
//# sourceMappingURL=channel-web-D7FkrASC.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{A as e,N as t,p as n,v as r,w as i}from"./subsystem-BLbY429l.js";import"./paths-BjD3T_xq.js";import"./boolean-D15s2V33.js";import{Bo as a,Ec as o,Fo as s,jo as c,lr as l,ur as u}from"./auth-profiles-T8DuH3ax.js";import{t as d}from"./command-format-CLxIPuLR.js";import{d as f,f as p}from"./agent-scope-DAWJwFfl.js";import{_ as m}from"./session-key-C7F_iqYg.js";import{u as h}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"./registry-BptzrW8D.js";import"./skills-CKTicUKS.js";import"./frontmatter-C7mzDNxd.js";import{lt as g,n as _,r as v,t as y,u as b}from"./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{i as x}from"./send-CW81y5Wz.js";import{at as S,et as C}from"./send-DavpkzhH.js";import{d as w,fn as T,pn as ee}from"./compact-
|
|
1
|
+
import{A as e,N as t,p as n,v as r,w as i}from"./subsystem-BLbY429l.js";import"./paths-BjD3T_xq.js";import"./boolean-D15s2V33.js";import{Bo as a,Ec as o,Fo as s,jo as c,lr as l,ur as u}from"./auth-profiles-T8DuH3ax.js";import{t as d}from"./command-format-CLxIPuLR.js";import{d as f,f as p}from"./agent-scope-DAWJwFfl.js";import{_ as m}from"./session-key-C7F_iqYg.js";import{u as h}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"./registry-BptzrW8D.js";import"./skills-CKTicUKS.js";import"./frontmatter-C7mzDNxd.js";import{lt as g,n as _,r as v,t as y,u as b}from"./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{i as x}from"./send-CW81y5Wz.js";import{at as S,et as C}from"./send-DavpkzhH.js";import{d as w,fn as T,pn as ee}from"./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{n as E}from"./call-B8Fb4_oh.js";import{b as te,y as D}from"./pi-tools.policy-D40r0HmD.js";import"./pairing-store-BH-FTYkn.js";import"./fetch-Dh-apy46.js";import{n as O}from"./format-relative-DkMjYy7z.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{n as k}from"./channel-selection-BBeE1TmB.js";import{a as ne}from"./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{n as A,s as j}from"./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{n as N}from"./cli-utils-BleB1eys.js";import{t as re}from"./help-format-B4aEI7V9.js";import{n as P}from"./progress-d1m2sqR1.js";import"./exec-approvals-BXO9Cezj.js";import"./outbound-BtUeDLjU.js";import"./channel-web-D5TgFlMz.js";import"./session-bk3gFwO4.js";import"./login-Do_NA1Je.js";import"./provider-env-vars-Dt0Q29Su.js";import{t as F}from"./command-options-BpOUDl2S.js";import{n as ie}from"./api-BeG0ObSq.js";import"./note-Dp-d_utk.js";import{t as I}from"./clack-prompter-DBPdGdqp.js";import{i as L,n as ae,t as R}from"./config-validation-C1La_IZU.js";import{n as oe}from"./agents.config-BUQjISaN.js";import"./enable-BhD84GhD.js";import"./install-safe-path-C6kc_8NW.js";import"./npm-pack-install-C0te3Oap.js";import"./skill-scanner-CkxXNioD.js";import"./installs-C1xQLuby.js";import"./plugin-install-plan-NvDGp0d8.js";import{a as se,i as ce,r as le}from"./onboard-channels-BXReNh4B.js";import"./auth-choice.apply-helpers-B7S-PcH_.js";import"./issue-format-C_lNzrKa.js";import{n as ue,t as z}from"./status-CeBGmSAz.js";import{t as de}from"./parse-log-line-CsYLg7Qu.js";import{t as fe}from"./channels-status-issues-8eFrGKyf.js";import"./plugin-registry-CYlBYbc8.js";import{t as B}from"./channel-options-BurUBfoY.js";import V from"node:fs/promises";function pe(e){let t=m(e.accountId),n=y(e.channel)?.setup?.applyAccountName;return n?n({cfg:e.cfg,accountId:t,name:e.name}):e.cfg}function me(e){let t=m(e.accountId),n=y(e.channel)?.setup?.applyAccountConfig;return n?n({cfg:e.cfg,accountId:t,input:e.input}):e.cfg}async function H(e=n,t){let r=await R(e);if(!r)return null;let{resolvedConfig:i,diagnostics:a}=await j({config:r,commandName:t?.commandName??`channels`,targetIds:A(),mode:t?.mode});for(let t of a)e.log(`[secrets] ${t}`);return i}function he(e){let t=e.accountId||`default`;return e.name?.trim()?`${t} (${e.name.trim()})`:t}const U=e=>y(e)?.meta.label??e;function W(e){let t=U(e.channel),n=he({accountId:e.accountId,name:e.name});return`${e.channelStyle?e.channelStyle(t):t} ${e.accountStyle?e.accountStyle(n):n}`}function G(e){return e?.hasFlags===!1}function K(e){if(!e?.trim())return;let t=e.split(/[\n,;]+/g).map(e=>e.trim()).filter(Boolean);return t.length>0?t:void 0}function ge(e,t){let n=e.trim().toLowerCase();if(n)return ne({workspaceDir:t?f(t,p(t)):void 0}).find(e=>e.id.toLowerCase()===n?!0:(e.meta.aliases??[]).some(e=>e.trim().toLowerCase()===n))}async function _e(e,t=n,r){let i=await H(t);if(!i)return;let o=i;if(G(r)){let e=I(),n=[],r={};await e.intro(`Channel setup`);let o=await le(i,t,e,{allowDisable:!1,allowSignalInstall:!0,promptAccountIds:!0,onSelection:e=>{n=e},onAccountId:(e,t)=>{r[e]=t}});if(n.length===0){await e.outro(`No channels selected.`);return}if(await e.confirm({message:`Add display names for these accounts? (optional)`,initialValue:!1}))for(let t of n){let n=r[t]??`default`,i=y(t),a=i?.config.resolveAccount(o,n),s=i?.config.describeAccount?.(a,o)?.name??a?.name,c=await e.text({message:`${t} account name (${n})`,initialValue:s});c?.trim()&&(o=pe({cfg:o,channel:t,accountId:n,name:c}))}let s=n.map(e=>({channel:e,accountId:r[e]?.trim()})).filter(e=>!!e.accountId);if(s.length>0&&await e.confirm({message:`Bind configured channel accounts to agents now?`,initialValue:!0})){let t=oe(o),n=p(o);for(let r of s){let i=await e.select({message:`Route ${r.channel} account "${r.accountId}" to agent`,options:t.map(e=>({value:e.id,label:e.isDefault?`${e.id} (default)`:e.id})),initialValue:n}),a=ae(o,[{agentId:i,match:{channel:r.channel,accountId:r.accountId}}]);o=a.config,(a.added.length>0||a.updated.length>0)&&await e.note([...a.added.map(e=>`Added: ${L(e)}`),...a.updated.map(e=>`Updated: ${L(e)}`)].join(`
|
|
2
2
|
`),`Routing bindings`),a.conflicts.length>0&&await e.note([`Skipped bindings already claimed by another agent:`,...a.conflicts.map(e=>`- ${L(e.binding)} (agent=${e.existingAgentId})`)].join(`
|
|
3
3
|
`),`Routing bindings`)}}await a(o),await e.outro(`Channels updated.`);return}let s=String(e.channel??``),c=v(s),l=c?void 0:ge(s,o);if(!c&&l){let e=I(),n=f(o,p(o)),r=await ce({cfg:o,entry:l,prompter:e,runtime:t,workspaceDir:n});if(o=r.cfg,!r.installed)return;se({cfg:o,runtime:t,workspaceDir:n}),c=v(l.id)??l.id}if(!c){let n=l?`Plugin ${l.meta.label} could not be loaded after install.`:`Unknown channel: ${String(e.channel??``)}`;t.error(n),t.exit(1);return}let u=y(c);if(!u?.setup?.applyAccountConfig){t.error(`Channel ${c} does not support add.`),t.exit(1);return}let d=e.useEnv===!0,h=typeof e.initialSyncLimit==`number`?e.initialSyncLimit:typeof e.initialSyncLimit==`string`&&e.initialSyncLimit.trim()?Number.parseInt(e.initialSyncLimit,10):void 0,g=K(e.groupChannels),_=K(e.dmAllowlist),x={name:e.name,token:e.token,tokenFile:e.tokenFile,botToken:e.botToken,appToken:e.appToken,signalNumber:e.signalNumber,cliPath:e.cliPath,dbPath:e.dbPath,service:e.service,region:e.region,authDir:e.authDir,httpUrl:e.httpUrl,httpHost:e.httpHost,httpPort:e.httpPort,webhookPath:e.webhookPath,webhookUrl:e.webhookUrl,audienceType:e.audienceType,audience:e.audience,homeserver:e.homeserver,userId:e.userId,accessToken:e.accessToken,password:e.password,deviceName:e.deviceName,initialSyncLimit:h,useEnv:d,ship:e.ship,url:e.url,code:e.code,groupChannels:g,dmAllowlist:_,autoDiscoverChannels:e.autoDiscoverChannels},S=u.setup.resolveAccountId?.({cfg:o,accountId:e.account,input:x})??m(e.account),C=u.setup.validateInput?.({cfg:o,accountId:S,input:x});if(C){t.error(C),t.exit(1);return}let T=c===`telegram`?b({cfg:o,accountId:S}).token.trim():``;S!==`default`&&(o=ie({cfg:o,channelKey:c})),o=me({cfg:o,channel:c,accountId:S,input:x}),c===`telegram`&&T!==b({cfg:o,accountId:S}).token.trim()&&await w({accountId:S}),await a(o),t.log(`Added ${U(c)} account "${S}".`)}function q(e,t){if(e){if(Array.isArray(e)){for(let n of e)typeof n==`string`&&n.trim()&&t.push(n.trim());return}if(typeof e==`string`){let n=e.trim();if(!n)return;let r=n.split(/[,\s]+/).map(e=>e.trim());for(let e of r)e&&t.push(e);return}if(h(e))for(let n of Object.values(e))(Array.isArray(n)||typeof n==`string`)&&q(n,t)}}function ve(e){return Array.from(new Set(e.map(e=>e.trim()).filter(Boolean))).toSorted()}function ye(e){if(!h(e))return[];let t=[];return q(e.scopes,t),q(e.scope,t),h(e.info)&&(q(e.info.scopes,t),q(e.info.scope,t),q(e.info.user_scopes,t),q(e.info.bot_scopes,t)),ve(t)}function be(e){if(!h(e))return;let t=e.error;return typeof t==`string`&&t.trim()?t.trim():void 0}async function xe(e,t){try{let n=await e.apiCall(t);return h(n)?n:null}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}}async function J(e,t){let n=x(e,{timeout:t}),r=[`auth.scopes`,`apps.permissions.info`],i=[];for(let e of r){let t=await xe(n,e),r=ye(t);if(r.length>0)return{ok:!0,scopes:r,source:e};let a=be(t);a&&i.push(`${e}: ${a}`)}return{ok:!1,error:i.length>0?i.join(` | `):`no scopes returned`}}const Se=[`ViewChannel`,`SendMessages`],Ce={"ChannelMessage.Read.All":`channel history`,"Chat.Read.All":`chat history`,"Channel.ReadBasic.All":`channel list`,"Team.ReadBasic.All":`team list`,"TeamsActivity.Read.All":`teams activity`,"Sites.Read.All":`files (SharePoint)`,"Files.Read.All":`files (OneDrive)`};function we(e,t=1e4){let n=Number(e);return!Number.isFinite(n)||n<=0?t:n}function Te(e){if(!e)return`unknown`;let t=[];return e.chatTypes?.length&&t.push(`chatTypes=${e.chatTypes.join(`,`)}`),e.polls&&t.push(`polls`),e.reactions&&t.push(`reactions`),e.edit&&t.push(`edit`),e.unsend&&t.push(`unsend`),e.reply&&t.push(`reply`),e.effects&&t.push(`effects`),e.groupManagement&&t.push(`groupManagement`),e.threads&&t.push(`threads`),e.media&&t.push(`media`),e.nativeCommands&&t.push(`nativeCommands`),e.blockStreaming&&t.push(`blockStreaming`),t.length?t.join(` `):`none`}function Ee(e){if(!e)return;let t=S(e,{defaultKind:`channel`});return t?t.kind===`channel`?{raw:e,normalized:t.normalized,kind:`channel`,channelId:t.id}:t.kind===`user`?{raw:e,normalized:t.normalized,kind:`user`}:{raw:e,normalized:t.normalized}:{raw:e}}function De(e){return e?[`messageContent=${e.messageContent??`unknown`}`,`guildMembers=${e.guildMembers??`unknown`}`,`presence=${e.presence??`unknown`}`].join(` `):`unknown`}function Oe(t,n){let r=[];if(!n||typeof n!=`object`)return r;let i=n;if(t===`discord`){let t=i.bot;if(t?.username){let n=t.id?` (${t.id})`:``;r.push(`Bot: ${e.accent(`@${t.username}`)}${n}`)}let n=i.application;n?.intents&&r.push(`Intents: ${De(n.intents)}`)}if(t===`telegram`){let t=i.bot;if(t?.username){let n=t.id?` (${t.id})`:``;r.push(`Bot: ${e.accent(`@${t.username}`)}${n}`)}let n=[],a=t?.canJoinGroups,o=t?.canReadAllGroupMessages,s=t?.supportsInlineQueries;typeof a==`boolean`&&n.push(`joinGroups=${a}`),typeof o==`boolean`&&n.push(`readAllGroupMessages=${o}`),typeof s==`boolean`&&n.push(`inlineQueries=${s}`),n.length>0&&r.push(`Flags: ${n.join(` `)}`);let c=i.webhook;c?.url!==void 0&&r.push(`Webhook: ${c.url||`none`}`)}if(t===`slack`){let t=i.bot,n=i.team;if(t?.name&&r.push(`Bot: ${e.accent(`@${t.name}`)}`),n?.name||n?.id){let e=n?.id?` (${n.id})`:``;r.push(`Team: ${n?.name??`unknown`}${e}`)}}if(t===`signal`){let e=i.version;e&&r.push(`Signal daemon: ${e}`)}if(t===`msteams`){let t=typeof i.appId==`string`?i.appId.trim():``;t&&r.push(`App: ${e.accent(t)}`);let n=i.graph;if(n){let t=Array.isArray(n.roles)?n.roles.map(e=>String(e).trim()).filter(Boolean):[],i=typeof n.scopes==`string`?n.scopes.split(/\s+/).map(e=>e.trim()).filter(Boolean):Array.isArray(n.scopes)?n.scopes.map(e=>String(e).trim()).filter(Boolean):[];if(n.ok===!1)r.push(`Graph: ${e.error(n.error??`failed`)}`);else if(t.length>0||i.length>0){let e=e=>{let t=Ce[e];return t?`${e} (${t})`:e};t.length>0&&r.push(`Graph roles: ${t.map(e).join(`, `)}`),i.length>0&&r.push(`Graph scopes: ${i.map(e).join(`, `)}`)}else n.ok===!0&&r.push(`Graph: ok`)}}let a=typeof i.ok==`boolean`?i.ok:void 0;if(a===!0&&r.length===0&&r.push(`Probe: ok`),a===!1){let t=typeof i.error==`string`&&i.error?` (${i.error})`:``;r.push(`Probe: ${e.error(`failed${t}`)}`)}return r}async function ke(e){let t=Ee(e.target?.trim());if(!t)return{};if(t.kind!==`channel`||!t.channelId)return{target:t,report:{error:`Target looks like a DM user; pass channel:<id> to audit channel permissions.`}};let n=e.account.token?.trim();if(!n)return{target:t,report:{channelId:t.channelId,error:`Discord bot token missing for permission audit.`}};try{let r=await C(t.channelId,{token:n,accountId:e.account.accountId??void 0}),i=Se.filter(e=>!r.permissions.includes(e));return{target:t,report:{channelId:r.channelId,guildId:r.guildId,isDm:r.isDm,channelType:r.channelType,permissions:r.permissions,missingRequired:i.length?i:[],raw:r.raw}}}catch(e){return{target:t,report:{channelId:t.channelId,error:e instanceof Error?e.message:String(e)}}}}async function Ae(e){let{plugin:t,cfg:n,timeoutMs:r}=e,i=e.accountOverride?[e.accountOverride]:(()=>{let e=t.config.listAccountIds(n);return e.length>0?e:[g({plugin:t,cfg:n,accountIds:e})]})(),a=[],o=t.actions?.listActions?.({cfg:n})??[],s=Array.from(new Set([`send`,`broadcast`,...o.map(e=>String(e))]));for(let o of i){let i=t.config.resolveAccount(n,o),c=t.config.isConfigured?await t.config.isConfigured(i,n):!!i,l=t.config.isEnabled?t.config.isEnabled(i,n):i.enabled!==!1,u;if(c&&l&&t.status?.probeAccount)try{u=await t.status.probeAccount({account:i,timeoutMs:r,cfg:n})}catch(e){u={ok:!1,error:e instanceof Error?e.message:String(e)}}let d;if(t.id===`slack`&&c&&l){let e=i.botToken?.trim(),t=i.userToken?.trim(),n=[];e?n.push({tokenType:`bot`,result:await J(e,r)}):n.push({tokenType:`bot`,result:{ok:!1,error:`Slack bot token missing.`}}),t&&n.push({tokenType:`user`,result:await J(t,r)}),d=n}let f,p;if(t.id===`discord`&&e.target){let t=await ke({account:i,target:e.target});f=t.target,p=t.report}a.push({channel:t.id,accountId:o,accountName:typeof i.name==`string`&&i.name?.trim()||void 0,configured:c,enabled:l,support:t.capabilities,probe:u,target:f,channelPermissions:p,actions:s,slackScopes:d})}return a}async function je(t,i=n){let a=await H(i);if(!a)return;let o=we(t.timeout,1e4),s=typeof t.channel==`string`?t.channel.trim().toLowerCase():``,c=typeof t.target==`string`?t.target.trim():``;if(t.account&&(!s||s===`all`)){i.error(r(`--account requires a specific --channel.`)),i.exit(1);return}if(c&&s!==`discord`){i.error(r(`--target requires --channel discord.`)),i.exit(1);return}let l=_(),u=!s||s===`all`?l:(()=>{let e=y(s);return e?[e]:null})();if(!u||u.length===0){i.error(r(`Unknown channel "${s}".`)),i.exit(1);return}let d=[];for(let e of u){let n=t.account?.trim()||void 0;d.push(...await Ae({plugin:e,cfg:a,timeoutMs:o,accountOverride:n,target:c&&e.id===`discord`?c:void 0}))}if(t.json){i.log(JSON.stringify({channels:d},null,2));return}let f=[];for(let t of d){let n=W({channel:t.channel,accountId:t.accountId,name:t.accountName,channelStyle:e.accent,accountStyle:e.heading});if(f.push(e.heading(n)),f.push(`Support: ${Te(t.support)}`),t.actions&&t.actions.length>0&&f.push(`Actions: ${t.actions.join(`, `)}`),t.configured===!1||t.enabled===!1){let e=t.configured===!1?`not configured`:`configured`,n=t.enabled===!1?`disabled`:`enabled`;f.push(`Status: ${e}, ${n}`)}let r=Oe(t.channel,t.probe);if(r.length>0?f.push(...r):t.configured&&t.enabled&&f.push(e.muted(`Probe: unavailable`)),t.channel===`slack`&&t.slackScopes)for(let n of t.slackScopes){let t=n.result.source?` (${n.result.source})`:``,r=n.tokenType===`user`?`User scopes`:`Bot scopes`;n.result.ok&&n.result.scopes?.length?f.push(`${r}${t}: ${n.result.scopes.join(`, `)}`):n.result.error&&f.push(`${r}: ${e.error(n.result.error)}`)}if(t.channel===`discord`&&t.channelPermissions){let n=t.channelPermissions;if(n.error)f.push(`Permissions: ${e.error(n.error)}`);else{let t=n.permissions?.length?n.permissions.join(`, `):`none`,r=n.channelId?` (${n.channelId})`:``;f.push(`Permissions${r}: ${t}`),n.missingRequired&&n.missingRequired.length>0?f.push(`${e.warn(`Missing required:`)} ${n.missingRequired.join(`, `)}`):f.push(e.success(`Missing required: none`))}}else t.channel===`discord`&&c&&!t.channelPermissions&&f.push(e.muted(`Permissions: skipped (no target).`));f.push(``)}i.log(f.join(`
|
|
4
4
|
`).trimEnd())}const Y=t=>t===`none`?e.error(t):t===`env`?e.accent(t):e.success(t);function Me(t){return t===!1?e.error(`disabled`):e.success(`enabled`)}function Ne(t){return t?e.success(`configured`):e.warn(`not configured`)}function Pe(e){return`token=${Y(e||`none`)}`}function X(e,t){return`${e}=${Y(t||`none`)}`}function Fe(t){return t?e.success(`linked`):e.warn(`not linked`)}function Ie(e){return e.meta.showConfigured!==!1}function Le(t){let{channel:n,snapshot:r}=t,i=W({channel:n.id,accountId:r.accountId,name:r.name,channelStyle:e.accent,accountStyle:e.heading}),a=[];return r.linked!==void 0&&a.push(Fe(r.linked)),Ie(n)&&typeof r.configured==`boolean`&&a.push(Ne(r.configured)),r.tokenSource&&a.push(Pe(r.tokenSource)),r.botTokenSource&&a.push(X(`bot`,r.botTokenSource)),r.appTokenSource&&a.push(X(`app`,r.appTokenSource)),r.baseUrl&&a.push(`base=${e.muted(r.baseUrl)}`),typeof r.enabled==`boolean`&&a.push(Me(r.enabled)),`- ${i}: ${a.join(`, `)}`}async function Re(e){try{return await P({label:`Fetching usage snapshot…`,indeterminate:!0,enabled:!0},async()=>await T())}catch(t){return e.error(String(t)),null}}async function ze(t,r=n){let i=await H(r);if(!i)return;let a=t.usage!==!1,s=_(),c=o(),l=Object.entries(c.profiles).map(([e,t])=>({id:e,provider:t.provider,type:t.type,isExternal:!1}));if(t.json){let e=a?await T():void 0,t={};for(let e of s)t[e.id]=e.config.listAccountIds(i);let n={chat:t,auth:l,...e?{usage:e}:{}};r.log(JSON.stringify(n,null,2));return}let u=[];u.push(e.heading(`Chat channels:`));for(let e of s){let t=e.config.listAccountIds(i);if(!(!t||t.length===0))for(let n of t){let t=await z({plugin:e,cfg:i,accountId:n});u.push(Le({channel:e,snapshot:t}))}}if(u.push(``),u.push(e.heading(`Auth providers (OAuth + API keys):`)),l.length===0)u.push(e.muted(`- none`));else for(let t of l){let n=t.isExternal?e.muted(` (synced)`):``;u.push(`- ${e.accent(t.id)} (${e.success(t.type)}${n})`)}if(r.log(u.join(`
|
|
@@ -7,4 +7,4 @@ import{A as e,N as t,p as n,v as r,w as i}from"./subsystem-BLbY429l.js";import".
|
|
|
7
7
|
`);return i>0&&(s=s.slice(1)),s.length&&s[s.length-1]===``&&(s=s.slice(0,-1)),s.length>t&&(s=s.slice(s.length-t)),s}finally{await a.close()}}async function We(r,i=n){let a=Ve(r.channel),o=typeof r.lines==`string`?Number(r.lines):r.lines,s=typeof o==`number`&&Number.isFinite(o)&&o>0?Math.floor(o):200,c=t().file,l=(await Ue(c,s*4)).map(de).filter(e=>!!e).filter(e=>He(e,a)),u=l.slice(Math.max(0,l.length-s));if(r.json){i.log(JSON.stringify({file:c,channel:a,lines:u},null,2));return}if(i.log(e.info(`Log file: ${c}`)),a!==`all`&&i.log(e.info(`Channel: ${a}`)),u.length===0){i.log(e.muted(`No matching log lines.`));return}for(let e of u){let t=e.time?`${e.time} `:``,n=e.level?`${e.level.toLowerCase()} `:``;i.log(`${t}${n}${e.message}`.trim())}}function Ge(e,t){let n=y(t);return n?n.config.listAccountIds(e):[]}async function Ke(e,t=n,r){let i=await H(t);if(!i)return;let o=G(r),s=o?I():null,c=v(e.channel),l=m(e.account),u=!!e.delete;if(o&&s){await s.intro(`Remove channel account`);let e=await s.select({message:`Channel`,options:_().map(e=>({value:e.id,label:e.meta.label}))});if(c=e,l=await(async()=>{let t=Ge(i,e);return m(await s.select({message:`Account`,options:t.map(e=>({value:e,label:e===`default`?`default (primary)`:e})),initialValue:t[0]??`default`}))})(),!await s.confirm({message:`Disable ${U(e)} account "${l}"? (keeps config)`,initialValue:!0})){await s.outro(`Cancelled.`);return}}else{if(!c){t.error(`Channel is required. Use --channel <name>.`),t.exit(1);return}if(!u&&!await I().confirm({message:`Disable ${U(c)} account "${l}"? (keeps config)`,initialValue:!0}))return}let d=y(c);if(!d){t.error(`Unknown channel: ${c}`),t.exit(1);return}let f=m(l)??g({plugin:d,cfg:i}),p=f||`default`,h={...i};if(u){if(!d.config.deleteAccount){t.error(`Channel ${c} does not support delete.`),t.exit(1);return}h=d.config.deleteAccount({cfg:h,accountId:f}),c===`telegram`&&await w({accountId:f})}else{if(!d.config.setAccountEnabled){t.error(`Channel ${c} does not support disable.`),t.exit(1);return}h=d.config.setAccountEnabled({cfg:h,accountId:f,enabled:!1})}await a(h),o&&s?await s.outro(u?`Deleted ${U(c)} account "${p}".`:`Disabled ${U(c)} account "${p}".`):t.log(u?`Deleted ${U(c)} account "${p}".`:`Disabled ${U(c)} account "${p}".`)}function qe(e){if(!(!e||e===`auto`))return e===`user`?`user`:`group`}function Je(e){let t=e.trim();return t&&(t.startsWith(`@`)||/^<@!?/.test(t)||/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)||/^(user|discord|slack|matrix|msteams|teams|zalo|zalouser|googlechat|google-chat|gchat):/i.test(t))?`user`:`group`}function Ye(e){if(!e.resolved||!e.id)return`${e.input} -> unresolved`;let t=e.name?` (${e.name})`:``,n=e.note?` [${e.note}]`:``;return`${e.input} -> ${e.id}${t}${n}`}async function Xe(e,t){let{resolvedConfig:n,diagnostics:i}=await j({config:c(),commandName:`channels resolve`,targetIds:A(),mode:`operational_readonly`});for(let e of i)t.log(`[secrets] ${e}`);let a=(e.entries??[]).map(e=>e.trim()).filter(Boolean);if(a.length===0)throw Error(`At least one entry is required.`);let o=await k({cfg:n,channel:e.channel??null}),s=y(o.channel);if(!s?.resolver?.resolveTargets)throw Error(`Channel ${o.channel} does not support resolve.`);let l=qe(e.kind),u=[];if(l)u=(await s.resolver.resolveTargets({cfg:n,accountId:e.account??null,inputs:a,kind:l,runtime:t})).map(e=>({input:e.input,resolved:e.resolved,id:e.id,name:e.name,note:e.note}));else{let r=new Map;for(let e of a){let t=Je(e);r.set(t,[...r.get(t)??[],e])}let i=[];for(let[a,o]of r.entries()){let r=await s.resolver.resolveTargets({cfg:n,accountId:e.account??null,inputs:o,kind:a,runtime:t});i.push(...r)}let o=new Map(i.map(e=>[e.input,e]));u=a.map(e=>{let t=o.get(e);return{input:e,resolved:t?.resolved??!1,id:t?.id,name:t?.name,note:t?.note}})}if(e.json){t.log(JSON.stringify(u,null,2));return}for(let e of u)e.resolved&&e.id?t.log(Ye(e)):t.error(r(`${e.input} -> unresolved${e.error?` (${e.error})`:e.note?` (${e.note})`:``}`))}function Z(e,t){typeof t.enabled==`boolean`&&e.push(t.enabled?`enabled`:`disabled`),typeof t.configured==`boolean`&&(t.configured?(e.push(`configured`),D(t)&&e.push(`secret unavailable in this command path`)):e.push(`not configured`)),typeof t.linked==`boolean`&&e.push(t.linked?`linked`:`not linked`)}function Ze(e,t){typeof t.mode==`string`&&t.mode.length>0&&e.push(`mode:${t.mode}`)}function Qe(e,t){let n=(n,r,i)=>{let a=t[r];if(typeof a!=`string`||!a||a===`none`)return;let o=t[i]===`configured_unavailable`?` (unavailable)`:``;e.push(`${n}:${a}${o}`)};n(`token`,`tokenSource`,`tokenStatus`),n(`bot`,`botTokenSource`,`botTokenStatus`),n(`app`,`appTokenSource`,`appTokenStatus`),n(`signing`,`signingSecretSource`,`signingSecretStatus`)}function $e(e,t){typeof t.baseUrl==`string`&&t.baseUrl&&e.push(`url:${t.baseUrl}`)}function et(e,t,n){return`- ${W({channel:e,accountId:typeof t.accountId==`string`?t.accountId:`default`,name:(typeof t.name==`string`?t.name.trim():``)||void 0})}: ${n.join(`, `)}`}function tt(t){let n=[];n.push(e.success(`Gateway reachable.`));let r=(e,t)=>t.map(t=>{let n=[];Z(n,t),typeof t.running==`boolean`&&n.push(t.running?`running`:`stopped`),typeof t.connected==`boolean`&&n.push(t.connected?`connected`:`disconnected`);let r=typeof t.lastInboundAt==`number`&&Number.isFinite(t.lastInboundAt)?t.lastInboundAt:null,i=typeof t.lastOutboundAt==`number`&&Number.isFinite(t.lastOutboundAt)?t.lastOutboundAt:null;r&&n.push(`in:${O(Date.now()-r)}`),i&&n.push(`out:${O(Date.now()-i)}`),Ze(n,t);let a=(()=>{let e=t.bot,n=t.probe?.bot,r=e?.username??n?.username??``;if(typeof r!=`string`)return``;let i=r.trim();return i?i.startsWith(`@`)?i:`@${i}`:``})();a&&n.push(`bot:${a}`),typeof t.dmPolicy==`string`&&t.dmPolicy.length>0&&n.push(`dm:${t.dmPolicy}`),Array.isArray(t.allowFrom)&&t.allowFrom.length>0&&n.push(`allow:${t.allowFrom.slice(0,2).join(`,`)}`),Qe(n,t);let o=t.application?.intents?.messageContent;typeof o==`string`&&o.length>0&&o!==`enabled`&&n.push(`intents:content=${o}`),t.allowUnmentionedGroups===!0&&n.push(`groups:unmentioned`),$e(n,t);let s=t.probe;s&&typeof s.ok==`boolean`&&n.push(s.ok?`works`:`probe failed`);let c=t.audit;return c&&typeof c.ok==`boolean`&&n.push(c.ok?`audit ok`:`audit failed`),typeof t.lastError==`string`&&t.lastError&&n.push(`error:${t.lastError}`),et(e,t,n)}),i=_(),a=t.channelAccounts,o={};for(let e of i){let t=a?.[e.id];Array.isArray(t)&&(o[e.id]=t)}for(let e of i){let t=o[e.id];t&&t.length>0&&n.push(...r(e.id,t))}n.push(``);let s=fe(t);if(s.length>0){n.push(e.warn(`Warnings:`));for(let e of s)n.push(`- ${e.channel} ${e.accountId}: ${e.message}${e.fix?` (${e.fix})`:``}`);n.push(`- Run: ${d(`openclaw doctor`)}`),n.push(``)}return n.push(`Tip: ${M(`/cli#status`,`status --deep`)} adds gateway health probes to status output (requires a reachable gateway).`),n}async function nt(t,n,r){let i=[];i.push(e.warn(`Gateway not reachable; showing config-only status.`)),n.path&&i.push(`Config: ${n.path}`),n.mode&&i.push(`Mode: ${n.mode}`),(n.path||n.mode)&&i.push(``);let a=(e,t)=>t.map(t=>{let n=[];return Z(n,t),Ze(n,t),Qe(n,t),$e(n,t),et(e,t,n)}),o=_(),s=r?.sourceConfig??t;for(let e of o){let n=e.config.listAccountIds(t);if(!n.length)continue;let r=[];for(let i of n){let n=await ue({plugin:e,cfg:s,accountId:i}),a=await z({plugin:e,cfg:t,accountId:i});r.push(n&&D(n)&&(!te(a)||n.configured===!0&&a.configured===!1)?n:a)}r.length>0&&i.push(...a(e.id,r))}return i.push(``),i.push(`Tip: ${M(`/cli#status`,`status --deep`)} adds gateway health probes to status output (requires a reachable gateway).`),i}async function rt(e,t=n){let r=Number(e.timeout??1e4),i=e.probe?`Checking channel status (probe)…`:`Checking channel status…`;e.json!==!0&&!process.stderr.isTTY&&t.log(i);try{let n=await P({label:i,indeterminate:!0,enabled:e.json!==!0},async()=>await E({method:`channels.status`,params:{probe:!!e.probe,timeoutMs:r},timeoutMs:r}));if(e.json){t.log(JSON.stringify(n,null,2));return}t.log(tt(n).join(`
|
|
8
8
|
`))}catch(e){t.error(`Gateway not reachable: ${String(e)}`);let n=await R(t);if(!n)return;let{resolvedConfig:r,diagnostics:i}=await j({config:n,commandName:`channels status`,targetIds:A(),mode:`summary`});for(let e of i)t.log(`[secrets] ${e}`);let a=await s(),o=n.gateway?.mode===`remote`?`remote`:`local`;t.log((await nt(r,{path:a.path,mode:o},{sourceConfig:n})).join(`
|
|
9
9
|
`))}}async function it(e,t,n){let r=e.channel?.trim()||(await k({cfg:n})).channel,i=v(r);if(!i)throw Error(`Unsupported channel: ${r}`);let a=y(i);if(!(t===`login`?a?.auth?.login:a?.gateway?.logoutAccount))throw Error(`Channel ${i} does not support ${t}`);return{channelInput:r,channelId:i,plugin:a}}function at(e,t,n){return{accountId:t.account?.trim()||g({plugin:e,cfg:n})}}async function ot(e,t=n){let r=c(),{channelInput:a,plugin:o}=await it(e,`login`,r),s=o.auth?.login;if(!s)throw Error(`Channel ${a} does not support login`);i(!!e.verbose);let{accountId:l}=at(o,e,r);await s({cfg:r,accountId:l,runtime:t,verbose:!!e.verbose,channelInput:a})}async function st(e,t=n){let r=c(),{channelInput:i,channelId:a,plugin:o}=await it(e,`logout`,r),s=o.gateway?.logoutAccount;if(!s)throw Error(`Channel ${i} does not support logout`);let{accountId:d}=at(o,e,r);try{await E({method:`channels.logout`,params:{channel:a,accountId:d},timeoutMs:15e3,clientName:u.CLI,mode:l.CLI});return}catch{}await s({cfg:r,accountId:d,account:o.config.resolveAccount(r,d),runtime:t})}const ct=`channel.account.name.token.tokenFile.botToken.appToken.signalNumber.cliPath.dbPath.service.region.authDir.httpUrl.httpHost.httpPort.webhookPath.webhookUrl.audienceType.audience.useEnv.homeserver.userId.accessToken.password.deviceName.initialSyncLimit.ship.url.code.groupChannels.dmAllowlist.autoDiscoverChannels`.split(`.`),lt=[`channel`,`account`,`delete`];function Q(e){return N(n,e)}function $(e,t){return N(n,e,e=>{n.error(r(`${t}: ${String(e)}`)),n.exit(1)})}function ut(t){let r=B(),i=t.command(`channels`).description(`Manage connected chat channels and accounts`).addHelpText(`after`,()=>`\n${e.heading(`Examples:`)}\n${re([[`openclaw channels list`,`List configured channels and auth profiles.`],[`openclaw channels status --probe`,`Run channel status checks and probes.`],[`openclaw channels add --channel telegram --token <token>`,`Add or update a channel account non-interactively.`],[`openclaw channels login --channel whatsapp`,`Link a WhatsApp Web account.`]])}\n\n${e.muted(`Docs:`)} ${M(`/cli/channels`,`docs.openclaw.ai/cli/channels`)}\n`);i.command(`list`).description(`List configured channels + auth profiles`).option(`--no-usage`,`Skip model provider usage/quota snapshots`).option(`--json`,`Output JSON`,!1).action(async e=>{await Q(async()=>{await ze(e,n)})}),i.command(`status`).description(`Show gateway channel status (use status --deep for local)`).option(`--probe`,`Probe channel credentials`,!1).option(`--timeout <ms>`,`Timeout in ms`,`10000`).option(`--json`,`Output JSON`,!1).action(async e=>{await Q(async()=>{await rt(e,n)})}),i.command(`capabilities`).description(`Show provider capabilities (intents/scopes + supported features)`).option(`--channel <name>`,`Channel (${B([`all`])})`).option(`--account <id>`,`Account id (only with --channel)`).option(`--target <dest>`,`Channel target for permission audit (Discord channel:<id>)`).option(`--timeout <ms>`,`Timeout in ms`,`10000`).option(`--json`,`Output JSON`,!1).action(async e=>{await Q(async()=>{await je(e,n)})}),i.command(`resolve`).description(`Resolve channel/user names to IDs`).argument(`<entries...>`,`Entries to resolve (names or ids)`).option(`--channel <name>`,`Channel (${r})`).option(`--account <id>`,`Account id (accountId)`).option(`--kind <kind>`,`Target kind (auto|user|group)`,`auto`).option(`--json`,`Output JSON`,!1).action(async(e,t)=>{await Q(async()=>{await Xe({channel:t.channel,account:t.account,kind:t.kind,json:!!t.json,entries:Array.isArray(e)?e:[String(e)]},n)})}),i.command(`logs`).description(`Show recent channel logs from the gateway log file`).option(`--channel <name>`,`Channel (${B([`all`])})`,`all`).option(`--lines <n>`,`Number of lines (default: 200)`,`200`).option(`--json`,`Output JSON`,!1).action(async e=>{await Q(async()=>{await We(e,n)})}),i.command(`add`).description(`Add or update a channel account`).option(`--channel <name>`,`Channel (${r})`).option(`--account <id>`,`Account id (default when omitted)`).option(`--name <name>`,`Display name for this account`).option(`--token <token>`,`Bot token (Telegram/Discord)`).option(`--token-file <path>`,`Bot token file (Telegram)`).option(`--bot-token <token>`,`Slack bot token (xoxb-...)`).option(`--app-token <token>`,`Slack app token (xapp-...)`).option(`--signal-number <e164>`,`Signal account number (E.164)`).option(`--cli-path <path>`,`CLI path (signal-cli or imsg)`).option(`--db-path <path>`,`iMessage database path`).option(`--service <service>`,`iMessage service (imessage|sms|auto)`).option(`--region <region>`,`iMessage region (for SMS)`).option(`--auth-dir <path>`,`WhatsApp auth directory override`).option(`--http-url <url>`,`Signal HTTP daemon base URL`).option(`--http-host <host>`,`Signal HTTP host`).option(`--http-port <port>`,`Signal HTTP port`).option(`--webhook-path <path>`,`Webhook path (Google Chat/BlueBubbles)`).option(`--webhook-url <url>`,`Google Chat webhook URL`).option(`--audience-type <type>`,`Google Chat audience type (app-url|project-number)`).option(`--audience <value>`,`Google Chat audience value (app URL or project number)`).option(`--homeserver <url>`,`Matrix homeserver URL`).option(`--user-id <id>`,`Matrix user ID`).option(`--access-token <token>`,`Matrix access token`).option(`--password <password>`,`Matrix password`).option(`--device-name <name>`,`Matrix device name`).option(`--initial-sync-limit <n>`,`Matrix initial sync limit`).option(`--ship <ship>`,`Tlon ship name (~sampel-palnet)`).option(`--url <url>`,`Tlon ship URL`).option(`--code <code>`,`Tlon login code`).option(`--group-channels <list>`,`Tlon group channels (comma-separated)`).option(`--dm-allowlist <list>`,`Tlon DM allowlist (comma-separated ships)`).option(`--auto-discover-channels`,`Tlon auto-discover group channels`).option(`--no-auto-discover-channels`,`Disable Tlon auto-discovery`).option(`--use-env`,`Use env token (default account only)`,!1).action(async(e,t)=>{await Q(async()=>{await _e(e,n,{hasFlags:F(t,ct)})})}),i.command(`remove`).description(`Disable or delete a channel account`).option(`--channel <name>`,`Channel (${r})`).option(`--account <id>`,`Account id (default when omitted)`).option(`--delete`,`Delete config entries (no prompt)`,!1).action(async(e,t)=>{await Q(async()=>{await Ke(e,n,{hasFlags:F(t,lt)})})}),i.command(`login`).description(`Link a channel account (if supported)`).option(`--channel <channel>`,`Channel alias (auto when only one is configured)`).option(`--account <id>`,`Account id (accountId)`).option(`--verbose`,`Verbose connection logs`,!1).action(async e=>{await $(async()=>{await ot({channel:e.channel,account:e.account,verbose:!!e.verbose},n)},`Channel login failed`)}),i.command(`logout`).description(`Log out of a channel session (if supported)`).option(`--channel <channel>`,`Channel alias (auto when only one is configured)`).option(`--account <id>`,`Account id (accountId)`).action(async e=>{await $(async()=>{await st({channel:e.channel,account:e.account},n)},`Channel logout failed`)})}export{ut as registerChannelsCli};
|
|
10
|
-
//# sourceMappingURL=channels-cli-
|
|
10
|
+
//# sourceMappingURL=channels-cli-BfzZrnkt.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import"./paths-B4IRk3wi.js";import{A as e,N as t,p as n,v as r,w as i}from"./subsystem-C5XF2Fy5.js";import{d as a}from"./utils-UGOV_184.js";import{Si as o,Xl as s,Zs as c,nc as l,qs as u,xi as d}from"./model-selection-BlC_rXAN.js";import{ct as f,ft as p,pt as m}from"./reply-
|
|
1
|
+
import"./paths-B4IRk3wi.js";import{A as e,N as t,p as n,v as r,w as i}from"./subsystem-C5XF2Fy5.js";import{d as a}from"./utils-UGOV_184.js";import{Si as o,Xl as s,Zs as c,nc as l,qs as u,xi as d}from"./model-selection-BlC_rXAN.js";import{ct as f,ft as p,pt as m}from"./reply-CjyZeZ-j.js";import{d as h,f as g}from"./agent-scope-DXZc3eNT.js";import{_}from"./session-key-D3P0tf5P.js";import"./openclaw-root-D_0Q6--h.js";import"./github-copilot-token-DGYAlOmV.js";import{t as ee}from"./command-format-BbDT1tlm.js";import"./boolean-Ch3DfXPy.js";import"./env-D7wNuBx1.js";import"./env-overrides-DXJbFrwI.js";import"./registry-hFAtCSWG.js";import"./skills-DHbOKEGc.js";import"./frontmatter-BkZkwkVO.js";import{lt as v,n as y,r as b,t as x,u as S}from"./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{s as C}from"./send-Cgd_VJHR.js";import{at as te,et as ne}from"./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{n as w}from"./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{n as T,r as re}from"./read-only-account-inspect-DBwAwB3_.js";import{n as E}from"./channel-selection-CbNtbAEf.js";import{a as ie}from"./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{n as D}from"./format-relative-B9pSIdGe.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{n as O,s as k}from"./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 A}from"./links-CySwdMcF.js";import{n as j}from"./cli-utils-BY7dLMFy.js";import{t as ae}from"./help-format-BRbF_INg.js";import{n as M}from"./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"./channel-web-D7FkrASC.js";import"./outbound-Bz8bbrMI.js";import"./session-CUUGjiV3.js";import"./login-CkWesqf_.js";import"./plugin-registry-CI5K3iWc.js";import{t as N}from"./channel-options-Ce8uNnAp.js";import"./provider-env-vars-D8p6Ohpj.js";import{t as P}from"./command-options-Bq5nQxz6.js";import{n as oe}from"./api-Dx8x1KTs.js";import"./note-D4GAwgha.js";import{t as F}from"./clack-prompter-Dq0aY6iM.js";import{i as I,n as se,t as L}from"./config-validation-DviYxW8Y.js";import{n as ce}from"./agents.config-BvxrGqOT.js";import"./enable-Ccf9wSM8.js";import"./install-safe-path-iesxijn2.js";import"./npm-pack-install-B23L-AtF.js";import"./skill-scanner-CUUF3Fvo.js";import"./installs-BNeI_oML.js";import"./plugin-install-plan-BobX0y9S.js";import{a as le,i as ue,r as de}from"./onboard-channels-CjXCpXI-.js";import"./auth-choice.apply-helpers-gaL-oSft.js";import"./issue-format-BT7cQEt3.js";import{n as fe,t as R}from"./status-C-9fSiMn.js";import{t as pe}from"./parse-log-line-NV-cipB_.js";import{t as me}from"./channels-status-issues-PRgOT90w.js";import z from"node:fs/promises";function he(e){let t=_(e.accountId),n=x(e.channel)?.setup?.applyAccountName;return n?n({cfg:e.cfg,accountId:t,name:e.name}):e.cfg}function ge(e){let t=_(e.accountId),n=x(e.channel)?.setup?.applyAccountConfig;return n?n({cfg:e.cfg,accountId:t,input:e.input}):e.cfg}async function B(e=n,t){let r=await L(e);if(!r)return null;let{resolvedConfig:i,diagnostics:a}=await k({config:r,commandName:t?.commandName??`channels`,targetIds:O(),mode:t?.mode});for(let t of a)e.log(`[secrets] ${t}`);return i}function _e(e){let t=e.accountId||`default`;return e.name?.trim()?`${t} (${e.name.trim()})`:t}const V=e=>x(e)?.meta.label??e;function H(e){let t=V(e.channel),n=_e({accountId:e.accountId,name:e.name});return`${e.channelStyle?e.channelStyle(t):t} ${e.accountStyle?e.accountStyle(n):n}`}function U(e){return e?.hasFlags===!1}function W(e){if(!e?.trim())return;let t=e.split(/[\n,;]+/g).map(e=>e.trim()).filter(Boolean);return t.length>0?t:void 0}function ve(e,t){let n=e.trim().toLowerCase();if(n)return ie({workspaceDir:t?h(t,g(t)):void 0}).find(e=>e.id.toLowerCase()===n?!0:(e.meta.aliases??[]).some(e=>e.trim().toLowerCase()===n))}async function ye(e,t=n,r){let i=await B(t);if(!i)return;let a=i;if(U(r)){let e=F(),n=[],r={};await e.intro(`Channel setup`);let a=await de(i,t,e,{allowDisable:!1,allowSignalInstall:!0,promptAccountIds:!0,onSelection:e=>{n=e},onAccountId:(e,t)=>{r[e]=t}});if(n.length===0){await e.outro(`No channels selected.`);return}if(await e.confirm({message:`Add display names for these accounts? (optional)`,initialValue:!1}))for(let t of n){let n=r[t]??`default`,i=x(t),o=i?.config.resolveAccount(a,n),s=i?.config.describeAccount?.(o,a)?.name??o?.name,c=await e.text({message:`${t} account name (${n})`,initialValue:s});c?.trim()&&(a=he({cfg:a,channel:t,accountId:n,name:c}))}let o=n.map(e=>({channel:e,accountId:r[e]?.trim()})).filter(e=>!!e.accountId);if(o.length>0&&await e.confirm({message:`Bind configured channel accounts to agents now?`,initialValue:!0})){let t=ce(a),n=g(a);for(let r of o){let i=await e.select({message:`Route ${r.channel} account "${r.accountId}" to agent`,options:t.map(e=>({value:e.id,label:e.isDefault?`${e.id} (default)`:e.id})),initialValue:n}),o=se(a,[{agentId:i,match:{channel:r.channel,accountId:r.accountId}}]);a=o.config,(o.added.length>0||o.updated.length>0)&&await e.note([...o.added.map(e=>`Added: ${I(e)}`),...o.updated.map(e=>`Updated: ${I(e)}`)].join(`
|
|
2
2
|
`),`Routing bindings`),o.conflicts.length>0&&await e.note([`Skipped bindings already claimed by another agent:`,...o.conflicts.map(e=>`- ${I(e.binding)} (agent=${e.existingAgentId})`)].join(`
|
|
3
3
|
`),`Routing bindings`)}}await l(a),await e.outro(`Channels updated.`);return}let o=String(e.channel??``),s=b(o),c=s?void 0:ve(o,a);if(!s&&c){let e=F(),n=h(a,g(a)),r=await ue({cfg:a,entry:c,prompter:e,runtime:t,workspaceDir:n});if(a=r.cfg,!r.installed)return;le({cfg:a,runtime:t,workspaceDir:n}),s=b(c.id)??c.id}if(!s){let n=c?`Plugin ${c.meta.label} could not be loaded after install.`:`Unknown channel: ${String(e.channel??``)}`;t.error(n),t.exit(1);return}let u=x(s);if(!u?.setup?.applyAccountConfig){t.error(`Channel ${s} does not support add.`),t.exit(1);return}let d=e.useEnv===!0,p=typeof e.initialSyncLimit==`number`?e.initialSyncLimit:typeof e.initialSyncLimit==`string`&&e.initialSyncLimit.trim()?Number.parseInt(e.initialSyncLimit,10):void 0,m=W(e.groupChannels),ee=W(e.dmAllowlist),v={name:e.name,token:e.token,tokenFile:e.tokenFile,botToken:e.botToken,appToken:e.appToken,signalNumber:e.signalNumber,cliPath:e.cliPath,dbPath:e.dbPath,service:e.service,region:e.region,authDir:e.authDir,httpUrl:e.httpUrl,httpHost:e.httpHost,httpPort:e.httpPort,webhookPath:e.webhookPath,webhookUrl:e.webhookUrl,audienceType:e.audienceType,audience:e.audience,homeserver:e.homeserver,userId:e.userId,accessToken:e.accessToken,password:e.password,deviceName:e.deviceName,initialSyncLimit:p,useEnv:d,ship:e.ship,url:e.url,code:e.code,groupChannels:m,dmAllowlist:ee,autoDiscoverChannels:e.autoDiscoverChannels},y=u.setup.resolveAccountId?.({cfg:a,accountId:e.account,input:v})??_(e.account),C=u.setup.validateInput?.({cfg:a,accountId:y,input:v});if(C){t.error(C),t.exit(1);return}let te=s===`telegram`?S({cfg:a,accountId:y}).token.trim():``;y!==`default`&&(a=oe({cfg:a,channelKey:s})),a=ge({cfg:a,channel:s,accountId:y,input:v}),s===`telegram`&&te!==S({cfg:a,accountId:y}).token.trim()&&await f({accountId:y}),await l(a),t.log(`Added ${V(s)} account "${y}".`)}function G(e,t){if(e){if(Array.isArray(e)){for(let n of e)typeof n==`string`&&n.trim()&&t.push(n.trim());return}if(typeof e==`string`){let n=e.trim();if(!n)return;let r=n.split(/[,\s]+/).map(e=>e.trim());for(let e of r)e&&t.push(e);return}if(a(e))for(let n of Object.values(e))(Array.isArray(n)||typeof n==`string`)&&G(n,t)}}function be(e){return Array.from(new Set(e.map(e=>e.trim()).filter(Boolean))).toSorted()}function xe(e){if(!a(e))return[];let t=[];return G(e.scopes,t),G(e.scope,t),a(e.info)&&(G(e.info.scopes,t),G(e.info.scope,t),G(e.info.user_scopes,t),G(e.info.bot_scopes,t)),be(t)}function Se(e){if(!a(e))return;let t=e.error;return typeof t==`string`&&t.trim()?t.trim():void 0}async function Ce(e,t){try{let n=await e.apiCall(t);return a(n)?n:null}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}}async function K(e,t){let n=C(e,{timeout:t}),r=[`auth.scopes`,`apps.permissions.info`],i=[];for(let e of r){let t=await Ce(n,e),r=xe(t);if(r.length>0)return{ok:!0,scopes:r,source:e};let a=Se(t);a&&i.push(`${e}: ${a}`)}return{ok:!1,error:i.length>0?i.join(` | `):`no scopes returned`}}const we=[`ViewChannel`,`SendMessages`],Te={"ChannelMessage.Read.All":`channel history`,"Chat.Read.All":`chat history`,"Channel.ReadBasic.All":`channel list`,"Team.ReadBasic.All":`team list`,"TeamsActivity.Read.All":`teams activity`,"Sites.Read.All":`files (SharePoint)`,"Files.Read.All":`files (OneDrive)`};function Ee(e,t=1e4){let n=Number(e);return!Number.isFinite(n)||n<=0?t:n}function De(e){if(!e)return`unknown`;let t=[];return e.chatTypes?.length&&t.push(`chatTypes=${e.chatTypes.join(`,`)}`),e.polls&&t.push(`polls`),e.reactions&&t.push(`reactions`),e.edit&&t.push(`edit`),e.unsend&&t.push(`unsend`),e.reply&&t.push(`reply`),e.effects&&t.push(`effects`),e.groupManagement&&t.push(`groupManagement`),e.threads&&t.push(`threads`),e.media&&t.push(`media`),e.nativeCommands&&t.push(`nativeCommands`),e.blockStreaming&&t.push(`blockStreaming`),t.length?t.join(` `):`none`}function Oe(e){if(!e)return;let t=te(e,{defaultKind:`channel`});return t?t.kind===`channel`?{raw:e,normalized:t.normalized,kind:`channel`,channelId:t.id}:t.kind===`user`?{raw:e,normalized:t.normalized,kind:`user`}:{raw:e,normalized:t.normalized}:{raw:e}}function ke(e){return e?[`messageContent=${e.messageContent??`unknown`}`,`guildMembers=${e.guildMembers??`unknown`}`,`presence=${e.presence??`unknown`}`].join(` `):`unknown`}function Ae(t,n){let r=[];if(!n||typeof n!=`object`)return r;let i=n;if(t===`discord`){let t=i.bot;if(t?.username){let n=t.id?` (${t.id})`:``;r.push(`Bot: ${e.accent(`@${t.username}`)}${n}`)}let n=i.application;n?.intents&&r.push(`Intents: ${ke(n.intents)}`)}if(t===`telegram`){let t=i.bot;if(t?.username){let n=t.id?` (${t.id})`:``;r.push(`Bot: ${e.accent(`@${t.username}`)}${n}`)}let n=[],a=t?.canJoinGroups,o=t?.canReadAllGroupMessages,s=t?.supportsInlineQueries;typeof a==`boolean`&&n.push(`joinGroups=${a}`),typeof o==`boolean`&&n.push(`readAllGroupMessages=${o}`),typeof s==`boolean`&&n.push(`inlineQueries=${s}`),n.length>0&&r.push(`Flags: ${n.join(` `)}`);let c=i.webhook;c?.url!==void 0&&r.push(`Webhook: ${c.url||`none`}`)}if(t===`slack`){let t=i.bot,n=i.team;if(t?.name&&r.push(`Bot: ${e.accent(`@${t.name}`)}`),n?.name||n?.id){let e=n?.id?` (${n.id})`:``;r.push(`Team: ${n?.name??`unknown`}${e}`)}}if(t===`signal`){let e=i.version;e&&r.push(`Signal daemon: ${e}`)}if(t===`msteams`){let t=typeof i.appId==`string`?i.appId.trim():``;t&&r.push(`App: ${e.accent(t)}`);let n=i.graph;if(n){let t=Array.isArray(n.roles)?n.roles.map(e=>String(e).trim()).filter(Boolean):[],i=typeof n.scopes==`string`?n.scopes.split(/\s+/).map(e=>e.trim()).filter(Boolean):Array.isArray(n.scopes)?n.scopes.map(e=>String(e).trim()).filter(Boolean):[];if(n.ok===!1)r.push(`Graph: ${e.error(n.error??`failed`)}`);else if(t.length>0||i.length>0){let e=e=>{let t=Te[e];return t?`${e} (${t})`:e};t.length>0&&r.push(`Graph roles: ${t.map(e).join(`, `)}`),i.length>0&&r.push(`Graph scopes: ${i.map(e).join(`, `)}`)}else n.ok===!0&&r.push(`Graph: ok`)}}let a=typeof i.ok==`boolean`?i.ok:void 0;if(a===!0&&r.length===0&&r.push(`Probe: ok`),a===!1){let t=typeof i.error==`string`&&i.error?` (${i.error})`:``;r.push(`Probe: ${e.error(`failed${t}`)}`)}return r}async function je(e){let t=Oe(e.target?.trim());if(!t)return{};if(t.kind!==`channel`||!t.channelId)return{target:t,report:{error:`Target looks like a DM user; pass channel:<id> to audit channel permissions.`}};let n=e.account.token?.trim();if(!n)return{target:t,report:{channelId:t.channelId,error:`Discord bot token missing for permission audit.`}};try{let r=await ne(t.channelId,{token:n,accountId:e.account.accountId??void 0}),i=we.filter(e=>!r.permissions.includes(e));return{target:t,report:{channelId:r.channelId,guildId:r.guildId,isDm:r.isDm,channelType:r.channelType,permissions:r.permissions,missingRequired:i.length?i:[],raw:r.raw}}}catch(e){return{target:t,report:{channelId:t.channelId,error:e instanceof Error?e.message:String(e)}}}}async function Me(e){let{plugin:t,cfg:n,timeoutMs:r}=e,i=e.accountOverride?[e.accountOverride]:(()=>{let e=t.config.listAccountIds(n);return e.length>0?e:[v({plugin:t,cfg:n,accountIds:e})]})(),a=[],o=t.actions?.listActions?.({cfg:n})??[],s=Array.from(new Set([`send`,`broadcast`,...o.map(e=>String(e))]));for(let o of i){let i=t.config.resolveAccount(n,o),c=t.config.isConfigured?await t.config.isConfigured(i,n):!!i,l=t.config.isEnabled?t.config.isEnabled(i,n):i.enabled!==!1,u;if(c&&l&&t.status?.probeAccount)try{u=await t.status.probeAccount({account:i,timeoutMs:r,cfg:n})}catch(e){u={ok:!1,error:e instanceof Error?e.message:String(e)}}let d;if(t.id===`slack`&&c&&l){let e=i.botToken?.trim(),t=i.userToken?.trim(),n=[];e?n.push({tokenType:`bot`,result:await K(e,r)}):n.push({tokenType:`bot`,result:{ok:!1,error:`Slack bot token missing.`}}),t&&n.push({tokenType:`user`,result:await K(t,r)}),d=n}let f,p;if(t.id===`discord`&&e.target){let t=await je({account:i,target:e.target});f=t.target,p=t.report}a.push({channel:t.id,accountId:o,accountName:typeof i.name==`string`&&i.name?.trim()||void 0,configured:c,enabled:l,support:t.capabilities,probe:u,target:f,channelPermissions:p,actions:s,slackScopes:d})}return a}async function Ne(t,i=n){let a=await B(i);if(!a)return;let o=Ee(t.timeout,1e4),s=typeof t.channel==`string`?t.channel.trim().toLowerCase():``,c=typeof t.target==`string`?t.target.trim():``;if(t.account&&(!s||s===`all`)){i.error(r(`--account requires a specific --channel.`)),i.exit(1);return}if(c&&s!==`discord`){i.error(r(`--target requires --channel discord.`)),i.exit(1);return}let l=y(),u=!s||s===`all`?l:(()=>{let e=x(s);return e?[e]:null})();if(!u||u.length===0){i.error(r(`Unknown channel "${s}".`)),i.exit(1);return}let d=[];for(let e of u){let n=t.account?.trim()||void 0;d.push(...await Me({plugin:e,cfg:a,timeoutMs:o,accountOverride:n,target:c&&e.id===`discord`?c:void 0}))}if(t.json){i.log(JSON.stringify({channels:d},null,2));return}let f=[];for(let t of d){let n=H({channel:t.channel,accountId:t.accountId,name:t.accountName,channelStyle:e.accent,accountStyle:e.heading});if(f.push(e.heading(n)),f.push(`Support: ${De(t.support)}`),t.actions&&t.actions.length>0&&f.push(`Actions: ${t.actions.join(`, `)}`),t.configured===!1||t.enabled===!1){let e=t.configured===!1?`not configured`:`configured`,n=t.enabled===!1?`disabled`:`enabled`;f.push(`Status: ${e}, ${n}`)}let r=Ae(t.channel,t.probe);if(r.length>0?f.push(...r):t.configured&&t.enabled&&f.push(e.muted(`Probe: unavailable`)),t.channel===`slack`&&t.slackScopes)for(let n of t.slackScopes){let t=n.result.source?` (${n.result.source})`:``,r=n.tokenType===`user`?`User scopes`:`Bot scopes`;n.result.ok&&n.result.scopes?.length?f.push(`${r}${t}: ${n.result.scopes.join(`, `)}`):n.result.error&&f.push(`${r}: ${e.error(n.result.error)}`)}if(t.channel===`discord`&&t.channelPermissions){let n=t.channelPermissions;if(n.error)f.push(`Permissions: ${e.error(n.error)}`);else{let t=n.permissions?.length?n.permissions.join(`, `):`none`,r=n.channelId?` (${n.channelId})`:``;f.push(`Permissions${r}: ${t}`),n.missingRequired&&n.missingRequired.length>0?f.push(`${e.warn(`Missing required:`)} ${n.missingRequired.join(`, `)}`):f.push(e.success(`Missing required: none`))}}else t.channel===`discord`&&c&&!t.channelPermissions&&f.push(e.muted(`Permissions: skipped (no target).`));f.push(``)}i.log(f.join(`
|
|
4
4
|
`).trimEnd())}const q=t=>t===`none`?e.error(t):t===`env`?e.accent(t):e.success(t);function Pe(t){return t===!1?e.error(`disabled`):e.success(`enabled`)}function Fe(t){return t?e.success(`configured`):e.warn(`not configured`)}function Ie(e){return`token=${q(e||`none`)}`}function J(e,t){return`${e}=${q(t||`none`)}`}function Le(t){return t?e.success(`linked`):e.warn(`not linked`)}function Re(e){return e.meta.showConfigured!==!1}function ze(t){let{channel:n,snapshot:r}=t,i=H({channel:n.id,accountId:r.accountId,name:r.name,channelStyle:e.accent,accountStyle:e.heading}),a=[];return r.linked!==void 0&&a.push(Le(r.linked)),Re(n)&&typeof r.configured==`boolean`&&a.push(Fe(r.configured)),r.tokenSource&&a.push(Ie(r.tokenSource)),r.botTokenSource&&a.push(J(`bot`,r.botTokenSource)),r.appTokenSource&&a.push(J(`app`,r.appTokenSource)),r.baseUrl&&a.push(`base=${e.muted(r.baseUrl)}`),typeof r.enabled==`boolean`&&a.push(Pe(r.enabled)),`- ${i}: ${a.join(`, `)}`}async function Be(e){try{return await M({label:`Fetching usage snapshot…`,indeterminate:!0,enabled:!0},async()=>await p())}catch(t){return e.error(String(t)),null}}async function Ve(t,r=n){let i=await B(r);if(!i)return;let a=t.usage!==!1,o=y(),c=s(),l=Object.entries(c.profiles).map(([e,t])=>({id:e,provider:t.provider,type:t.type,isExternal:!1}));if(t.json){let e=a?await p():void 0,t={};for(let e of o)t[e.id]=e.config.listAccountIds(i);let n={chat:t,auth:l,...e?{usage:e}:{}};r.log(JSON.stringify(n,null,2));return}let u=[];u.push(e.heading(`Chat channels:`));for(let e of o){let t=e.config.listAccountIds(i);if(!(!t||t.length===0))for(let n of t){let t=await R({plugin:e,cfg:i,accountId:n});u.push(ze({channel:e,snapshot:t}))}}if(u.push(``),u.push(e.heading(`Auth providers (OAuth + API keys):`)),l.length===0)u.push(e.muted(`- none`));else for(let t of l){let n=t.isExternal?e.muted(` (synced)`):``;u.push(`- ${e.accent(t.id)} (${e.success(t.type)}${n})`)}if(r.log(u.join(`
|
|
@@ -7,4 +7,4 @@ import"./paths-B4IRk3wi.js";import{A as e,N as t,p as n,v as r,w as i}from"./sub
|
|
|
7
7
|
`);return i>0&&(s=s.slice(1)),s.length&&s[s.length-1]===``&&(s=s.slice(0,-1)),s.length>t&&(s=s.slice(s.length-t)),s}finally{await a.close()}}async function Ke(r,i=n){let a=Ue(r.channel),o=typeof r.lines==`string`?Number(r.lines):r.lines,s=typeof o==`number`&&Number.isFinite(o)&&o>0?Math.floor(o):200,c=t().file,l=(await Ge(c,s*4)).map(pe).filter(e=>!!e).filter(e=>We(e,a)),u=l.slice(Math.max(0,l.length-s));if(r.json){i.log(JSON.stringify({file:c,channel:a,lines:u},null,2));return}if(i.log(e.info(`Log file: ${c}`)),a!==`all`&&i.log(e.info(`Channel: ${a}`)),u.length===0){i.log(e.muted(`No matching log lines.`));return}for(let e of u){let t=e.time?`${e.time} `:``,n=e.level?`${e.level.toLowerCase()} `:``;i.log(`${t}${n}${e.message}`.trim())}}function qe(e,t){let n=x(t);return n?n.config.listAccountIds(e):[]}async function Je(e,t=n,r){let i=await B(t);if(!i)return;let a=U(r),o=a?F():null,s=b(e.channel),c=_(e.account),u=!!e.delete;if(a&&o){await o.intro(`Remove channel account`);let e=await o.select({message:`Channel`,options:y().map(e=>({value:e.id,label:e.meta.label}))});if(s=e,c=await(async()=>{let t=qe(i,e);return _(await o.select({message:`Account`,options:t.map(e=>({value:e,label:e===`default`?`default (primary)`:e})),initialValue:t[0]??`default`}))})(),!await o.confirm({message:`Disable ${V(e)} account "${c}"? (keeps config)`,initialValue:!0})){await o.outro(`Cancelled.`);return}}else{if(!s){t.error(`Channel is required. Use --channel <name>.`),t.exit(1);return}if(!u&&!await F().confirm({message:`Disable ${V(s)} account "${c}"? (keeps config)`,initialValue:!0}))return}let d=x(s);if(!d){t.error(`Unknown channel: ${s}`),t.exit(1);return}let p=_(c)??v({plugin:d,cfg:i}),m=p||`default`,h={...i};if(u){if(!d.config.deleteAccount){t.error(`Channel ${s} does not support delete.`),t.exit(1);return}h=d.config.deleteAccount({cfg:h,accountId:p}),s===`telegram`&&await f({accountId:p})}else{if(!d.config.setAccountEnabled){t.error(`Channel ${s} does not support disable.`),t.exit(1);return}h=d.config.setAccountEnabled({cfg:h,accountId:p,enabled:!1})}await l(h),a&&o?await o.outro(u?`Deleted ${V(s)} account "${m}".`:`Disabled ${V(s)} account "${m}".`):t.log(u?`Deleted ${V(s)} account "${m}".`:`Disabled ${V(s)} account "${m}".`)}function Ye(e){if(!(!e||e===`auto`))return e===`user`?`user`:`group`}function Xe(e){let t=e.trim();return t&&(t.startsWith(`@`)||/^<@!?/.test(t)||/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)||/^(user|discord|slack|matrix|msteams|teams|zalo|zalouser|googlechat|google-chat|gchat):/i.test(t))?`user`:`group`}function Ze(e){if(!e.resolved||!e.id)return`${e.input} -> unresolved`;let t=e.name?` (${e.name})`:``,n=e.note?` [${e.note}]`:``;return`${e.input} -> ${e.id}${t}${n}`}async function Qe(e,t){let{resolvedConfig:n,diagnostics:i}=await k({config:u(),commandName:`channels resolve`,targetIds:O(),mode:`operational_readonly`});for(let e of i)t.log(`[secrets] ${e}`);let a=(e.entries??[]).map(e=>e.trim()).filter(Boolean);if(a.length===0)throw Error(`At least one entry is required.`);let o=await E({cfg:n,channel:e.channel??null}),s=x(o.channel);if(!s?.resolver?.resolveTargets)throw Error(`Channel ${o.channel} does not support resolve.`);let c=Ye(e.kind),l=[];if(c)l=(await s.resolver.resolveTargets({cfg:n,accountId:e.account??null,inputs:a,kind:c,runtime:t})).map(e=>({input:e.input,resolved:e.resolved,id:e.id,name:e.name,note:e.note}));else{let r=new Map;for(let e of a){let t=Xe(e);r.set(t,[...r.get(t)??[],e])}let i=[];for(let[a,o]of r.entries()){let r=await s.resolver.resolveTargets({cfg:n,accountId:e.account??null,inputs:o,kind:a,runtime:t});i.push(...r)}let o=new Map(i.map(e=>[e.input,e]));l=a.map(e=>{let t=o.get(e);return{input:e,resolved:t?.resolved??!1,id:t?.id,name:t?.name,note:t?.note}})}if(e.json){t.log(JSON.stringify(l,null,2));return}for(let e of l)e.resolved&&e.id?t.log(Ze(e)):t.error(r(`${e.input} -> unresolved${e.error?` (${e.error})`:e.note?` (${e.note})`:``}`))}function Y(e,t){typeof t.enabled==`boolean`&&e.push(t.enabled?`enabled`:`disabled`),typeof t.configured==`boolean`&&(t.configured?(e.push(`configured`),T(t)&&e.push(`secret unavailable in this command path`)):e.push(`not configured`)),typeof t.linked==`boolean`&&e.push(t.linked?`linked`:`not linked`)}function X(e,t){typeof t.mode==`string`&&t.mode.length>0&&e.push(`mode:${t.mode}`)}function Z(e,t){let n=(n,r,i)=>{let a=t[r];if(typeof a!=`string`||!a||a===`none`)return;let o=t[i]===`configured_unavailable`?` (unavailable)`:``;e.push(`${n}:${a}${o}`)};n(`token`,`tokenSource`,`tokenStatus`),n(`bot`,`botTokenSource`,`botTokenStatus`),n(`app`,`appTokenSource`,`appTokenStatus`),n(`signing`,`signingSecretSource`,`signingSecretStatus`)}function Q(e,t){typeof t.baseUrl==`string`&&t.baseUrl&&e.push(`url:${t.baseUrl}`)}function $e(e,t,n){return`- ${H({channel:e,accountId:typeof t.accountId==`string`?t.accountId:`default`,name:(typeof t.name==`string`?t.name.trim():``)||void 0})}: ${n.join(`, `)}`}function et(t){let n=[];n.push(e.success(`Gateway reachable.`));let r=(e,t)=>t.map(t=>{let n=[];Y(n,t),typeof t.running==`boolean`&&n.push(t.running?`running`:`stopped`),typeof t.connected==`boolean`&&n.push(t.connected?`connected`:`disconnected`);let r=typeof t.lastInboundAt==`number`&&Number.isFinite(t.lastInboundAt)?t.lastInboundAt:null,i=typeof t.lastOutboundAt==`number`&&Number.isFinite(t.lastOutboundAt)?t.lastOutboundAt:null;r&&n.push(`in:${D(Date.now()-r)}`),i&&n.push(`out:${D(Date.now()-i)}`),X(n,t);let a=(()=>{let e=t.bot,n=t.probe?.bot,r=e?.username??n?.username??``;if(typeof r!=`string`)return``;let i=r.trim();return i?i.startsWith(`@`)?i:`@${i}`:``})();a&&n.push(`bot:${a}`),typeof t.dmPolicy==`string`&&t.dmPolicy.length>0&&n.push(`dm:${t.dmPolicy}`),Array.isArray(t.allowFrom)&&t.allowFrom.length>0&&n.push(`allow:${t.allowFrom.slice(0,2).join(`,`)}`),Z(n,t);let o=t.application?.intents?.messageContent;typeof o==`string`&&o.length>0&&o!==`enabled`&&n.push(`intents:content=${o}`),t.allowUnmentionedGroups===!0&&n.push(`groups:unmentioned`),Q(n,t);let s=t.probe;s&&typeof s.ok==`boolean`&&n.push(s.ok?`works`:`probe failed`);let c=t.audit;return c&&typeof c.ok==`boolean`&&n.push(c.ok?`audit ok`:`audit failed`),typeof t.lastError==`string`&&t.lastError&&n.push(`error:${t.lastError}`),$e(e,t,n)}),i=y(),a=t.channelAccounts,o={};for(let e of i){let t=a?.[e.id];Array.isArray(t)&&(o[e.id]=t)}for(let e of i){let t=o[e.id];t&&t.length>0&&n.push(...r(e.id,t))}n.push(``);let s=me(t);if(s.length>0){n.push(e.warn(`Warnings:`));for(let e of s)n.push(`- ${e.channel} ${e.accountId}: ${e.message}${e.fix?` (${e.fix})`:``}`);n.push(`- Run: ${ee(`openclaw doctor`)}`),n.push(``)}return n.push(`Tip: ${A(`/cli#status`,`status --deep`)} adds gateway health probes to status output (requires a reachable gateway).`),n}async function tt(t,n,r){let i=[];i.push(e.warn(`Gateway not reachable; showing config-only status.`)),n.path&&i.push(`Config: ${n.path}`),n.mode&&i.push(`Mode: ${n.mode}`),(n.path||n.mode)&&i.push(``);let a=(e,t)=>t.map(t=>{let n=[];return Y(n,t),X(n,t),Z(n,t),Q(n,t),$e(e,t,n)}),o=y(),s=r?.sourceConfig??t;for(let e of o){let n=e.config.listAccountIds(t);if(!n.length)continue;let r=[];for(let i of n){let n=await fe({plugin:e,cfg:s,accountId:i}),a=await R({plugin:e,cfg:t,accountId:i});r.push(n&&T(n)&&(!re(a)||n.configured===!0&&a.configured===!1)?n:a)}r.length>0&&i.push(...a(e.id,r))}return i.push(``),i.push(`Tip: ${A(`/cli#status`,`status --deep`)} adds gateway health probes to status output (requires a reachable gateway).`),i}async function nt(e,t=n){let r=Number(e.timeout??1e4),i=e.probe?`Checking channel status (probe)…`:`Checking channel status…`;e.json!==!0&&!process.stderr.isTTY&&t.log(i);try{let n=await M({label:i,indeterminate:!0,enabled:e.json!==!0},async()=>await w({method:`channels.status`,params:{probe:!!e.probe,timeoutMs:r},timeoutMs:r}));if(e.json){t.log(JSON.stringify(n,null,2));return}t.log(et(n).join(`
|
|
8
8
|
`))}catch(e){t.error(`Gateway not reachable: ${String(e)}`);let n=await L(t);if(!n)return;let{resolvedConfig:r,diagnostics:i}=await k({config:n,commandName:`channels status`,targetIds:O(),mode:`summary`});for(let e of i)t.log(`[secrets] ${e}`);let a=await c(),o=n.gateway?.mode===`remote`?`remote`:`local`;t.log((await tt(r,{path:a.path,mode:o},{sourceConfig:n})).join(`
|
|
9
9
|
`))}}async function rt(e,t,n){let r=e.channel?.trim()||(await E({cfg:n})).channel,i=b(r);if(!i)throw Error(`Unsupported channel: ${r}`);let a=x(i);if(!(t===`login`?a?.auth?.login:a?.gateway?.logoutAccount))throw Error(`Channel ${i} does not support ${t}`);return{channelInput:r,channelId:i,plugin:a}}function it(e,t,n){return{accountId:t.account?.trim()||v({plugin:e,cfg:n})}}async function at(e,t=n){let r=u(),{channelInput:a,plugin:o}=await rt(e,`login`,r),s=o.auth?.login;if(!s)throw Error(`Channel ${a} does not support login`);i(!!e.verbose);let{accountId:c}=it(o,e,r);await s({cfg:r,accountId:c,runtime:t,verbose:!!e.verbose,channelInput:a})}async function ot(e,t=n){let r=u(),{channelInput:i,channelId:a,plugin:s}=await rt(e,`logout`,r),c=s.gateway?.logoutAccount;if(!c)throw Error(`Channel ${i} does not support logout`);let{accountId:l}=it(s,e,r);try{await w({method:`channels.logout`,params:{channel:a,accountId:l},timeoutMs:15e3,clientName:o.CLI,mode:d.CLI});return}catch{}await c({cfg:r,accountId:l,account:s.config.resolveAccount(r,l),runtime:t})}const st=`channel.account.name.token.tokenFile.botToken.appToken.signalNumber.cliPath.dbPath.service.region.authDir.httpUrl.httpHost.httpPort.webhookPath.webhookUrl.audienceType.audience.useEnv.homeserver.userId.accessToken.password.deviceName.initialSyncLimit.ship.url.code.groupChannels.dmAllowlist.autoDiscoverChannels`.split(`.`),ct=[`channel`,`account`,`delete`];function $(e){return j(n,e)}function lt(e,t){return j(n,e,e=>{n.error(r(`${t}: ${String(e)}`)),n.exit(1)})}function ut(t){let r=N(),i=t.command(`channels`).description(`Manage connected chat channels and accounts`).addHelpText(`after`,()=>`\n${e.heading(`Examples:`)}\n${ae([[`openclaw channels list`,`List configured channels and auth profiles.`],[`openclaw channels status --probe`,`Run channel status checks and probes.`],[`openclaw channels add --channel telegram --token <token>`,`Add or update a channel account non-interactively.`],[`openclaw channels login --channel whatsapp`,`Link a WhatsApp Web account.`]])}\n\n${e.muted(`Docs:`)} ${A(`/cli/channels`,`docs.openclaw.ai/cli/channels`)}\n`);i.command(`list`).description(`List configured channels + auth profiles`).option(`--no-usage`,`Skip model provider usage/quota snapshots`).option(`--json`,`Output JSON`,!1).action(async e=>{await $(async()=>{await Ve(e,n)})}),i.command(`status`).description(`Show gateway channel status (use status --deep for local)`).option(`--probe`,`Probe channel credentials`,!1).option(`--timeout <ms>`,`Timeout in ms`,`10000`).option(`--json`,`Output JSON`,!1).action(async e=>{await $(async()=>{await nt(e,n)})}),i.command(`capabilities`).description(`Show provider capabilities (intents/scopes + supported features)`).option(`--channel <name>`,`Channel (${N([`all`])})`).option(`--account <id>`,`Account id (only with --channel)`).option(`--target <dest>`,`Channel target for permission audit (Discord channel:<id>)`).option(`--timeout <ms>`,`Timeout in ms`,`10000`).option(`--json`,`Output JSON`,!1).action(async e=>{await $(async()=>{await Ne(e,n)})}),i.command(`resolve`).description(`Resolve channel/user names to IDs`).argument(`<entries...>`,`Entries to resolve (names or ids)`).option(`--channel <name>`,`Channel (${r})`).option(`--account <id>`,`Account id (accountId)`).option(`--kind <kind>`,`Target kind (auto|user|group)`,`auto`).option(`--json`,`Output JSON`,!1).action(async(e,t)=>{await $(async()=>{await Qe({channel:t.channel,account:t.account,kind:t.kind,json:!!t.json,entries:Array.isArray(e)?e:[String(e)]},n)})}),i.command(`logs`).description(`Show recent channel logs from the gateway log file`).option(`--channel <name>`,`Channel (${N([`all`])})`,`all`).option(`--lines <n>`,`Number of lines (default: 200)`,`200`).option(`--json`,`Output JSON`,!1).action(async e=>{await $(async()=>{await Ke(e,n)})}),i.command(`add`).description(`Add or update a channel account`).option(`--channel <name>`,`Channel (${r})`).option(`--account <id>`,`Account id (default when omitted)`).option(`--name <name>`,`Display name for this account`).option(`--token <token>`,`Bot token (Telegram/Discord)`).option(`--token-file <path>`,`Bot token file (Telegram)`).option(`--bot-token <token>`,`Slack bot token (xoxb-...)`).option(`--app-token <token>`,`Slack app token (xapp-...)`).option(`--signal-number <e164>`,`Signal account number (E.164)`).option(`--cli-path <path>`,`CLI path (signal-cli or imsg)`).option(`--db-path <path>`,`iMessage database path`).option(`--service <service>`,`iMessage service (imessage|sms|auto)`).option(`--region <region>`,`iMessage region (for SMS)`).option(`--auth-dir <path>`,`WhatsApp auth directory override`).option(`--http-url <url>`,`Signal HTTP daemon base URL`).option(`--http-host <host>`,`Signal HTTP host`).option(`--http-port <port>`,`Signal HTTP port`).option(`--webhook-path <path>`,`Webhook path (Google Chat/BlueBubbles)`).option(`--webhook-url <url>`,`Google Chat webhook URL`).option(`--audience-type <type>`,`Google Chat audience type (app-url|project-number)`).option(`--audience <value>`,`Google Chat audience value (app URL or project number)`).option(`--homeserver <url>`,`Matrix homeserver URL`).option(`--user-id <id>`,`Matrix user ID`).option(`--access-token <token>`,`Matrix access token`).option(`--password <password>`,`Matrix password`).option(`--device-name <name>`,`Matrix device name`).option(`--initial-sync-limit <n>`,`Matrix initial sync limit`).option(`--ship <ship>`,`Tlon ship name (~sampel-palnet)`).option(`--url <url>`,`Tlon ship URL`).option(`--code <code>`,`Tlon login code`).option(`--group-channels <list>`,`Tlon group channels (comma-separated)`).option(`--dm-allowlist <list>`,`Tlon DM allowlist (comma-separated ships)`).option(`--auto-discover-channels`,`Tlon auto-discover group channels`).option(`--no-auto-discover-channels`,`Disable Tlon auto-discovery`).option(`--use-env`,`Use env token (default account only)`,!1).action(async(e,t)=>{await $(async()=>{await ye(e,n,{hasFlags:P(t,st)})})}),i.command(`remove`).description(`Disable or delete a channel account`).option(`--channel <name>`,`Channel (${r})`).option(`--account <id>`,`Account id (default when omitted)`).option(`--delete`,`Delete config entries (no prompt)`,!1).action(async(e,t)=>{await $(async()=>{await Je(e,n,{hasFlags:P(t,ct)})})}),i.command(`login`).description(`Link a channel account (if supported)`).option(`--channel <channel>`,`Channel alias (auto when only one is configured)`).option(`--account <id>`,`Account id (accountId)`).option(`--verbose`,`Verbose connection logs`,!1).action(async e=>{await lt(async()=>{await at({channel:e.channel,account:e.account,verbose:!!e.verbose},n)},`Channel login failed`)}),i.command(`logout`).description(`Log out of a channel session (if supported)`).option(`--channel <channel>`,`Channel alias (auto when only one is configured)`).option(`--account <id>`,`Account id (accountId)`).action(async e=>{await lt(async()=>{await ot({channel:e.channel,account:e.account},n)},`Channel logout failed`)})}export{ut as registerChannelsCli};
|
|
10
|
-
//# sourceMappingURL=channels-cli-
|
|
10
|
+
//# sourceMappingURL=channels-cli-DFI6F6G0.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./subsystem-BLbY429l.js";import"./paths-BjD3T_xq.js";import"./boolean-D15s2V33.js";import{jo as t}from"./auth-profiles-T8DuH3ax.js";import{d as n,f as r}from"./agent-scope-DAWJwFfl.js";import"./utils-CGdo13HV.js";import"./openclaw-root-CnsBf6ZU.js";import"./github-copilot-token-C79yeDKS.js";import"./env-overrides-DHtB4kK3.js";import"./version-q3SkUw2K.js";import"./registry-BptzrW8D.js";import"./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{l as i}from"./compact-
|
|
2
|
-
//# sourceMappingURL=cli-
|
|
1
|
+
import{t as e}from"./subsystem-BLbY429l.js";import"./paths-BjD3T_xq.js";import"./boolean-D15s2V33.js";import{jo as t}from"./auth-profiles-T8DuH3ax.js";import{d as n,f as r}from"./agent-scope-DAWJwFfl.js";import"./utils-CGdo13HV.js";import"./openclaw-root-CnsBf6ZU.js";import"./github-copilot-token-C79yeDKS.js";import"./env-overrides-DHtB4kK3.js";import"./version-q3SkUw2K.js";import"./registry-BptzrW8D.js";import"./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{l as i}from"./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"./links-CBnmRP9D.js";import"./cli-utils-BleB1eys.js";import"./help-format-B4aEI7V9.js";import"./progress-d1m2sqR1.js";import"./exec-approvals-BXO9Cezj.js";const a=e(`plugins`);function o(e,o){let s=o??t(),c=n(s,r(s)),l={info:e=>a.info(e),warn:e=>a.warn(e),error:e=>a.error(e),debug:e=>a.debug(e)},u=i({config:s,workspaceDir:c,logger:l}),d=new Set(e.commands.map(e=>e.name()));for(let t of u.cliRegistrars){if(t.commands.length>0){let e=t.commands.filter(e=>d.has(e));if(e.length>0){a.debug(`plugin CLI register skipped (${t.pluginId}): command already registered (${e.join(`, `)})`);continue}}try{let n=t.register({program:e,config:s,workspaceDir:c,logger:l});n&&typeof n.then==`function`&&n.catch(e=>{a.warn(`plugin CLI register failed (${t.pluginId}): ${String(e)}`)});for(let e of t.commands)d.add(e)}catch(e){a.warn(`plugin CLI register failed (${t.pluginId}): ${String(e)}`)}}}export{o as registerPluginCliCommands};
|
|
2
|
+
//# sourceMappingURL=cli-CMLvfh6N.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"./paths-B4IRk3wi.js";import{t as e}from"./subsystem-C5XF2Fy5.js";import"./utils-UGOV_184.js";import{qs as t}from"./model-selection-BlC_rXAN.js";import{ot as n}from"./reply-
|
|
2
|
-
//# sourceMappingURL=cli-
|
|
1
|
+
import"./paths-B4IRk3wi.js";import{t as e}from"./subsystem-C5XF2Fy5.js";import"./utils-UGOV_184.js";import{qs as t}from"./model-selection-BlC_rXAN.js";import{ot as n}from"./reply-CjyZeZ-j.js";import{d as r,f as i}from"./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"./registry-hFAtCSWG.js";import"./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"./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";const a=e(`plugins`);function o(e,o){let s=o??t(),c=r(s,i(s)),l={info:e=>a.info(e),warn:e=>a.warn(e),error:e=>a.error(e),debug:e=>a.debug(e)},u=n({config:s,workspaceDir:c,logger:l}),d=new Set(e.commands.map(e=>e.name()));for(let t of u.cliRegistrars){if(t.commands.length>0){let e=t.commands.filter(e=>d.has(e));if(e.length>0){a.debug(`plugin CLI register skipped (${t.pluginId}): command already registered (${e.join(`, `)})`);continue}}try{let n=t.register({program:e,config:s,workspaceDir:c,logger:l});n&&typeof n.then==`function`&&n.catch(e=>{a.warn(`plugin CLI register failed (${t.pluginId}): ${String(e)}`)});for(let e of t.commands)d.add(e)}catch(e){a.warn(`plugin CLI register failed (${t.pluginId}): ${String(e)}`)}}}export{o as registerPluginCliCommands};
|
|
2
|
+
//# sourceMappingURL=cli-MTpYYgjl.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./rolldown-runtime-CNxR59P3.js";import{J as t,Z as n}from"./subsystem-BLbY429l.js";import{i as r,o as i,s as a}from"./register.subclis-
|
|
2
|
-
//# sourceMappingURL=command-registry-
|
|
1
|
+
import{t as e}from"./rolldown-runtime-CNxR59P3.js";import{J as t,Z as n}from"./subsystem-BLbY429l.js";import{i as r,o as i,s as a}from"./register.subclis-smZuHVcv.js";var o=e({getCoreCliCommandNames:()=>u,getCoreCliCommandsWithSubcommands:()=>d,registerCoreCliByName:()=>m,registerCoreCliCommands:()=>h,registerProgramCommands:()=>g});const s=e=>!n(e),c=[{commands:[{name:`setup`,description:`Initialize local config and agent workspace`,hasSubcommands:!1}],register:async({program:e})=>{(await import(`./register.setup-DiAi_1pJ.js`)).registerSetupCommand(e)}},{commands:[{name:`onboard`,description:`Interactive onboarding wizard for gateway, workspace, and skills`,hasSubcommands:!1}],register:async({program:e})=>{(await import(`./register.onboard-BY-QLNp9.js`)).registerOnboardCommand(e)}},{commands:[{name:`configure`,description:`Interactive setup wizard for credentials, channels, gateway, and agent defaults`,hasSubcommands:!1}],register:async({program:e})=>{(await import(`./register.configure-CvPihXst.js`)).registerConfigureCommand(e)}},{commands:[{name:`config`,description:`Non-interactive config helpers (get/set/unset/file/validate). Default: starts setup wizard.`,hasSubcommands:!0}],register:async({program:e})=>{(await import(`./config-cli-B9hEiZsw.js`)).registerConfigCli(e)}},{commands:[{name:`backup`,description:`Create and verify local backup archives for OpenClaw state`,hasSubcommands:!0}],register:async({program:e})=>{(await import(`./register.backup-PzF5rmeU.js`)).registerBackupCommand(e)}},{commands:[{name:`doctor`,description:`Health checks + quick fixes for the gateway and channels`,hasSubcommands:!1},{name:`dashboard`,description:`Open the Control UI with your current token`,hasSubcommands:!1},{name:`reset`,description:`Reset local config/state (keeps the CLI installed)`,hasSubcommands:!1},{name:`uninstall`,description:`Uninstall the gateway service + local data (CLI remains)`,hasSubcommands:!1}],register:async({program:e})=>{(await import(`./register.maintenance-BkM8-Ttt.js`)).registerMaintenanceCommands(e)}},{commands:[{name:`message`,description:`Send, read, and manage messages`,hasSubcommands:!0}],register:async({program:e,ctx:t})=>{(await import(`./register.message-CM_Qudzn.js`)).registerMessageCommands(e,t)}},{commands:[{name:`memory`,description:`Search and reindex memory files`,hasSubcommands:!0}],register:async({program:e})=>{(await import(`./memory-cli-XaxtBQm1.js`).then(e=>e.t)).registerMemoryCli(e)}},{commands:[{name:`agent`,description:`Run one agent turn via the Gateway`,hasSubcommands:!1},{name:`agents`,description:`Manage isolated agents (workspaces, auth, routing)`,hasSubcommands:!0}],register:async({program:e,ctx:t})=>{(await import(`./register.agent-CisptTv_.js`)).registerAgentCommands(e,{agentChannelOptions:t.agentChannelOptions})}},{commands:[{name:`status`,description:`Show channel health and recent session recipients`,hasSubcommands:!1},{name:`health`,description:`Fetch health from the running gateway`,hasSubcommands:!1},{name:`sessions`,description:`List stored conversation sessions`,hasSubcommands:!0}],register:async({program:e})=>{(await import(`./register.status-health-sessions-BXiMraHZ.js`)).registerStatusHealthSessionsCommands(e)}},{commands:[{name:`browser`,description:`Manage OpenClaw's dedicated browser (Chrome/Chromium)`,hasSubcommands:!0}],register:async({program:e})=>{(await import(`./browser-cli-Dt0ds-an.js`)).registerBrowserCli(e)}}];function l(e){let t=new Set,n=[];for(let r of c)for(let i of r.commands)e&&!e(i)||t.has(i.name)||(t.add(i.name),n.push(i.name));return n}function u(){return l()}function d(){return l(e=>e.hasSubcommands)}function f(e,t){for(let n of t.commands)i(e,n.name)}function p(e,t,n,r){let i=e.command(r.name).description(r.description);i.allowUnknownOption(!0),i.allowExcessArguments(!0),i.action(async(...r)=>{f(e,n),await n.register({program:e,ctx:t,argv:process.argv}),await a(e,r)})}async function m(e,t,n,r=process.argv){let i=c.find(e=>e.commands.some(e=>e.name===n));return i?(f(e,i),await i.register({program:e,ctx:t,argv:r}),!0):!1}function h(e,n,r){let i=t(r);if(i&&s(r)){let t=c.find(e=>e.commands.some(e=>e.name===i));if(t){let r=t.commands.find(e=>e.name===i);r&&p(e,n,t,r);return}}for(let t of c)for(let r of t.commands)p(e,n,t,r)}function g(e,t,n=process.argv){h(e,t,n),r(e,n)}export{g as a,m as i,u as n,d as r,o as t};
|
|
2
|
+
//# sourceMappingURL=command-registry-CPthpEk3.js.map
|