activeclaw 2026.2.11 → 2026.2.13
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/CHANGELOG.md +106 -0
- package/dist/{accounts-DbzMEfKN.js → accounts-DCDeFTra.js} +2 -2
- package/dist/{accounts-C2elk6PC.js → accounts-DeqIQjo1.js} +2 -2
- package/dist/{acp-cli-CVFTdsQY.js → acp-cli-CeYI4XRd.js} +15 -16
- package/dist/{acp-cli-BpJwIyLl.js → acp-cli-rNbGXICg.js} +14 -15
- package/dist/{agent-Bz1r5O8q.js → agent-BvNJF5QL.js} +19 -15
- package/dist/{agent-22-R4bNS.js → agent-CyMxTyrG.js} +20 -16
- package/dist/{agent-scope-D8miw9q_.js → agent-scope-BIEhVP4_.js} +172 -4
- package/dist/{agent-scope-CGmuusG9.js → agent-scope-CQCus0rI.js} +3 -3
- package/dist/{agent-scope-DQuy3dwI.js → agent-scope-CsRbLH4l.js} +4 -4
- package/dist/{agent-scope-BEf5crnU.js → agent-scope-DPIFau3f.js} +5 -1
- package/dist/audio-preflight-BU8W7uxc.js +60 -0
- package/dist/audio-preflight-CGsumMzb.js +60 -0
- package/dist/audio-preflight-SLmkJI6-.js +74 -0
- package/dist/audio-preflight-jZc5mFCZ.js +71 -0
- package/dist/{audit-C4wLaF0D.js → audit-Dmww_503.js} +71 -19
- package/dist/{audit-CY-yopxa.js → audit-wPu26VMb.js} +72 -20
- package/dist/{tailscale-DU6DgqVy.js → auth-9x3lqfIY.js} +208 -3
- package/dist/{tailscale-Cu-2HNvU.js → auth-CQNl_IaI.js} +190 -3
- package/dist/{auth-health-BFKUoCwJ.js → auth-health-C4L4FGBA.js} +1 -1
- package/dist/{auth-health-d7BMZlWG.js → auth-health-j6epgQbq.js} +1 -1
- package/dist/{auth-profiles-Bv1AEm-Y.js → auth-profiles-ByNs3eEm.js} +87 -31
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +28 -22
- package/dist/bundled/session-memory/handler.js +33 -22
- package/dist/{call-7yrB6v4I.js → call-DVYCIV8m.js} +5 -5
- package/dist/{call-Bek1xlgk.js → call-SolyGS1r.js} +6 -6
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{channel-options-3mdYN0C_.js → channel-options-BwC2yQcR.js} +4 -4
- package/dist/{channel-options-DJ0b1m7B.js → channel-options-Cq9BVDkP.js} +12 -7
- package/dist/{channel-selection-RZimme3j.js → channel-selection-D4D6ImhN.js} +2 -2
- package/dist/{channel-selection-B9b7Kuit.js → channel-selection-MZAHm4U8.js} +2 -2
- package/dist/{channels-cli-CYbK2Dku.js → channels-cli-9Dsk9Qm7.js} +57 -53
- package/dist/{channels-cli-BFznbGOs.js → channels-cli-BJUppQll.js} +59 -55
- package/dist/{channels-status-issues-B3KkflfR.js → channels-status-issues-D7GSV1GS.js} +1 -1
- package/dist/{channels-status-issues-DQkRaZts.js → channels-status-issues-DDAWeT-6.js} +1 -1
- package/dist/{chrome-Db7w64LF.js → chrome-BfB6JdKF.js} +4 -4
- package/dist/{chrome-Dm-EgOjJ.js → chrome-Cvr-57lg.js} +6 -5
- package/dist/{chrome-CF16STk9.js → chrome-DL0avO8n.js} +2 -1
- package/dist/{chrome-yIKmOzCO.js → chrome-foEwx3lN.js} +5 -4
- package/dist/{clack-prompter-BCiBkJVr.js → clack-prompter-Bz3Mmcl-.js} +5 -5
- package/dist/{clack-prompter-DuBVnTKy.js → clack-prompter-ChCGXfyt.js} +4 -4
- package/dist/cli/daemon-cli.js +1 -1
- package/dist/{cli-Cl3PdJei.js → cli-ZR9ugUBX.js} +42 -38
- package/dist/cli-miPe4Ujz.js +93 -0
- package/dist/{client-6xKrRC-1.js → client-BrYfyoDK.js} +54 -5
- package/dist/{client-DMloFP_O.js → client-CTwXnRl7.js} +54 -5
- package/dist/{command-format-ayFsmwwz.js → command-format-Bxe0mWee.js} +1 -1
- package/dist/{command-options-BTAzyqqb.js → command-options-BvgxzPbK.js} +9 -4
- package/dist/{commands-CjEGXOZ_.js → commands-BX_OIIVR.js} +4 -4
- package/dist/{completion-cli-DrJGfJGl.js → completion-cli-CR77-jyv.js} +3 -3
- package/dist/{completion-cli-DOec3E2Z.js → completion-cli-DnjpxAag.js} +30 -30
- package/dist/{config-B00lvFac.js → config-Bdhomfei.js} +21 -7
- package/dist/{config-XBdA0ciN.js → config-BvMsmctM.js} +83 -9
- package/dist/{config-BqGVMf1y.js → config-QYrbd7x7.js} +60 -6
- package/dist/{config--NUdpACy.js → config-aFQssWKX.js} +21 -7
- package/dist/{config-guard-4kCO_rnQ.js → config-guard-CljaSxJd.js} +160 -51
- package/dist/{configure-B69emwZv.js → configure-BXLiucXo.js} +28 -25
- package/dist/{configure-sMhpLzFf.js → configure-BYPqXzGZ.js} +28 -25
- package/dist/control-auth-8Cf4WXpR.js +54 -0
- package/dist/control-auth-DBCu3qyv.js +54 -0
- package/dist/{control-service-Db_1V-KY.js → control-service-B5KnPqGP.js} +11 -5
- package/dist/{control-service-IRAmbcbN.js → control-service-DKnttEus.js} +10 -4
- package/dist/control-ui/assets/{index-CnB9IO4a.js → index-B4LPvte9.js} +369 -369
- package/dist/control-ui/assets/index-B4LPvte9.js.map +1 -0
- package/dist/control-ui/index.html +1 -1
- package/dist/{cron-cli-Cum2324v.js → cron-cli-D7BRjDv2.js} +20 -20
- package/dist/{cron-cli-DhUWcYdk.js → cron-cli-z1zk_FXQ.js} +19 -19
- package/dist/{daemon-cli-q7nkEF5-.js → daemon-cli-BDkU2ocb.js} +60 -21
- package/dist/{daemon-cli-CTC2CHci.js → daemon-cli-cNSF93-v.js} +59 -20
- package/dist/{daemon-runtime-c0uXH4Dl.js → daemon-runtime-B0tg_LsX.js} +3 -3
- package/dist/{daemon-runtime-UsK-tOty.js → daemon-runtime-Bsjeut6m.js} +3 -3
- package/dist/{deliver-hf-WKyWd.js → deliver-CIU9Npgs.js} +373 -281
- package/dist/{deliver-CT6KiDqO.js → deliver-DYYCo1G7.js} +369 -278
- package/dist/{deliver-T9d44OpZ.js → deliver-LsxKETro.js} +371 -279
- package/dist/{deliver-CPy8jYj9.js → deliver-xUU3mGHo.js} +369 -277
- package/dist/{deps-Bv1kLtwo.js → deps-QSwGcoNZ.js} +2 -2
- package/dist/{deps-DFQdAWQc.js → deps-lAAA2zYI.js} +2 -2
- package/dist/{devices-cli-Cm7U1py9.js → devices-cli-BG3-2oqt.js} +14 -14
- package/dist/{devices-cli-ZpjlfK-e.js → devices-cli-VIQtOvt_.js} +14 -14
- package/dist/{directory-cli-B14TUSJA.js → directory-cli-BCJwjVC0.js} +16 -16
- package/dist/{directory-cli-67kzd4I5.js → directory-cli-jYzZ02gk.js} +14 -14
- package/dist/{dispatcher-3ElQWGVI.js → dispatcher-DY51b-Zc.js} +2 -2
- package/dist/{dns-cli-CU-xfhTN.js → dns-cli-DHIiMJjS.js} +12 -12
- package/dist/{dns-cli-Dqj7O6Q_.js → dns-cli-pZlv87Ib.js} +11 -11
- package/dist/{docs-cli-CamBqzb5.js → docs-cli-2JDiwfzP.js} +8 -8
- package/dist/{docs-cli-Cj3L5oqB.js → docs-cli-BhkYqoIQ.js} +7 -7
- package/dist/{doctor-BV1kvbMm.js → doctor-Bf8EhNtA.js} +36 -35
- package/dist/{doctor-BJirShBi.js → doctor-sYG5V4Co.js} +34 -33
- package/dist/entry.js +56 -18
- package/dist/{env-BxRc6wWv.js → env-ONzUVAG2.js} +1 -1
- package/dist/{exec-CijMSZd9.js → exec-B8lXct-k.js} +503 -14
- package/dist/{exec-B8JKbXKW.js → exec-CACT5OAW.js} +1 -1
- package/dist/{exec-57A8Rlc8.js → exec-CJFFoM7H.js} +32 -13
- package/dist/{exec-Cv_Ofd1m.js → exec-YIosokWE.js} +1 -1
- package/dist/{exec-approvals-cli-DEzz9Iai.js → exec-approvals-cli-7LH0lwhO.js} +21 -21
- package/dist/{exec-approvals-cli-DhXj3hQX.js → exec-approvals-cli-apGnQbpj.js} +21 -21
- package/dist/extensionAPI.js +7733 -8746
- package/dist/fetch-DmiOpALK.js +274 -0
- package/dist/fetch-timeout-BEtUjM1S.js +274 -0
- package/dist/fetch-timeout-DEoXG_SF.js +274 -0
- package/dist/fetch-timeout-DTK9vxex.js +274 -0
- package/dist/{gateway-cli-D1EdIq8I.js → gateway-cli-DUdYxlZS.js} +491 -136
- package/dist/{gateway-cli-B_xDUDy2.js → gateway-cli-DbvWmE-9.js} +495 -140
- package/dist/{gateway-rpc-3B5y445n.js → gateway-rpc-BByb2Snz.js} +3 -3
- package/dist/{gateway-rpc-BoL2vinh.js → gateway-rpc-wXSCUZXj.js} +3 -3
- package/dist/{github-copilot-auth-Omqrto0J.js → github-copilot-auth-D7ewvpMd.js} +205 -17
- package/dist/{github-copilot-auth-CZxurvdz.js → github-copilot-auth-DDispnyz.js} +205 -17
- package/dist/{github-copilot-token-SLWintYd.js → github-copilot-token-Cfs0Wxr8.js} +1 -1
- package/dist/{gmail-setup-utils-BXQKsLtI.js → gmail-setup-utils-Cfns8TQx.js} +3 -3
- package/dist/{gmail-setup-utils-CHcssBOA.js → gmail-setup-utils-DJb-_5kO.js} +4 -4
- package/dist/{health-format-Dy1caGsq.js → health-format-KGPokKJH.js} +97 -42
- package/dist/{health-format-DrGFg8bx.js → health-format-LZDxu3rv.js} +95 -40
- package/dist/{help-format-DAj7l5uV.js → help-format-C48TXngO.js} +1 -1
- package/dist/{help-format-CUnac_bT.js → help-format-R5fLToDw.js} +1 -1
- package/dist/{hooks-cli-ptEf6TIM.js → hooks-cli-CT8JCRkH.js} +51 -46
- package/dist/{hooks-cli-Bhf5VRp1.js → hooks-cli-S1MKumJO.js} +49 -44
- package/dist/{hooks-status-Br-2bK2G.js → hooks-status-Cw0xD8Lt.js} +3 -3
- package/dist/{hooks-status-DNQJSa4B.js → hooks-status-D9MhwHRp.js} +3 -3
- package/dist/{image-rOFfK3PJ.js → image-Brk1sJbw.js} +10 -7
- package/dist/{image-fUwR7slg.js → image-C4Nn2p3e.js} +10 -7
- package/dist/{image-Ds4NLGPR.js → image-DgtfXMcX.js} +9 -6
- package/dist/{image-Dnnxt82I.js → image-RKwc3fsL.js} +8 -5
- package/dist/index.js +208 -97
- package/dist/{installs-CRSjQxbR.js → installs-CrLcWYHe.js} +8 -7
- package/dist/{installs-89zeUsVn.js → installs-DscWb9b9.js} +8 -7
- package/dist/{links-7M-j83As.js → links-B8LAzWwg.js} +1 -1
- package/dist/{links-C591fM9M.js → links-Eax1UO3w.js} +1 -1
- package/dist/llm-slug-generator.js +18 -19
- package/dist/{loader-wXwp4rZJ.js → loader-KjT074JR.js} +5722 -6888
- package/dist/{logging-MMRGFxGI.js → logging-BAyPwvdH.js} +1 -1
- package/dist/{logging-DuK6YXuK.js → logging-CRq4h04P.js} +2 -2
- package/dist/{login-qr-wM8BnKJh.js → login-qr-B6ZgAuIf.js} +5 -5
- package/dist/{login-qr-CPEsT6dN.js → login-qr-Bua-p0nG.js} +3 -4
- package/dist/{login-qr-CGEu5TU-.js → login-qr-CuvemJj4.js} +6 -6
- package/dist/{login-qr-DH150tTp.js → login-qr-Djr1JfIf.js} +2 -2
- package/dist/{logs-cli-ClgkHnfT.js → logs-cli-9IAV7rWY.js} +38 -22
- package/dist/{logs-cli-CmfINsOj.js → logs-cli-EiKzUFPa.js} +37 -21
- package/dist/{manager-DYo4PlVM.js → manager-BIMh_eSm.js} +7 -8
- package/dist/{manager-D6EbxDV4.js → manager-CwinWQoz.js} +5 -5
- package/dist/{manager-BbnHek5T.js → manager-DkqF1GiK.js} +9 -9
- package/dist/{manager-CcVYv0N5.js → manager-T1XfGchB.js} +8 -8
- package/dist/{manifest-registry-3It8Z8yN.js → manifest-registry-CQhdnDBZ.js} +40 -2
- package/dist/{manifest-registry-D5SiA3xq.js → manifest-registry-u0okVSkU.js} +40 -2
- package/dist/{message-channel-Cu61-7H6.js → message-channel-BLi2a6Yw.js} +1 -1
- package/dist/{message-channel-BlgPSDAh.js → message-channel-C_MmebBt.js} +1 -1
- package/dist/{model-auth-ioeR_zLX.js → model-auth-CabXIF6O.js} +116 -34
- package/dist/{model-selection-BK7DuyH8.js → model-selection-BLuqsGVB.js} +86 -30
- package/dist/{model-selection-CezC36lH.js → model-selection-C1GmkTAV.js} +84 -28
- package/dist/{models-cli-C3uGdOrd.js → models-cli-9jmDv-h3.js} +52 -48
- package/dist/{models-cli-CUIVPgXE.js → models-cli-zS9rtWz8.js} +53 -49
- package/dist/{node-cli-BxBGSuPE.js → node-cli-CrpTxTTs.js} +28 -26
- package/dist/{node-cli-CdYAsuQQ.js → node-cli-wemUMCg-.js} +28 -26
- package/dist/{node-service-u8g85nD3.js → node-service-C8DTHTMg.js} +2 -2
- package/dist/{node-service-CM5vkdIo.js → node-service-WQuEKz6W.js} +2 -2
- package/dist/{nodes-cli-By6yeCTB.js → nodes-cli-BaU2SIFw.js} +20 -20
- package/dist/{nodes-cli-BaVMTAPc.js → nodes-cli-Dx23D72n.js} +20 -20
- package/dist/{nodes-screen-Dvl_ohUY.js → nodes-screen-C0IuBqUL.js} +1 -1
- package/dist/{note-5WqioBRA.js → note-BhRSeNeu.js} +2 -2
- package/dist/{note-Ci08TSbV.js → note-hhtubr2j.js} +1 -1
- package/dist/{onboard-channels-DxXvp8og.js → onboard-channels-C501x8GI.js} +8 -8
- package/dist/{onboard-channels-CXhnVy4E.js → onboard-channels-Dxzroasd.js} +8 -8
- package/dist/{onboard-skills-CBxsRGyf.js → onboard-skills-DV0Qzvjj.js} +440 -136
- package/dist/{onboard-skills-DQwOQ6Ry.js → onboard-skills-rlBHcu3Q.js} +439 -135
- package/dist/{onboarding-Du_7qEng.js → onboarding-CN-EDLjd.js} +38 -38
- package/dist/{openclaw-root-JLDMp6ux.js → openclaw-root-1VeFrph_.js} +4 -0
- package/dist/{openclaw-root-Dw6gumSU.js → openclaw-root-BNlEap4i.js} +4 -0
- package/dist/{pairing-cli-CRQDpj8f.js → pairing-cli-CDHG4xuI.js} +15 -15
- package/dist/{pairing-cli-Cng1KFWw.js → pairing-cli-CQP34Dlx.js} +15 -15
- package/dist/{pairing-labels-Ciu3Zoxj.js → pairing-labels-B6CN0SNH.js} +1 -1
- package/dist/{pairing-labels-CWFEtSc3.js → pairing-labels-CgNHnjzT.js} +1 -1
- package/dist/{pairing-store-c-QQ2u8p.js → pairing-store-CmlRVqOz.js} +2 -2
- package/dist/{pairing-store-CgXR3ZWJ.js → pairing-store-Dp5_JGnG.js} +3 -3
- package/dist/{path-env-CXWUFfFv.js → path-env-CLvYNwtL.js} +1 -1
- package/dist/{path-env-BgLvMbz_.js → path-env-CaYUVIML.js} +2 -2
- package/dist/{paths-MnZaxqPw.js → paths-B0a4ywSO.js} +30 -5
- package/dist/{paths-Bkhd_qY8.js → paths-B49s6UZQ.js} +30 -5
- package/dist/{paths-DL6EIRTw.js → paths-D0O87MfH.js} +30 -5
- package/dist/{paths-IivnSNkP.js → paths-DLINmNFQ.js} +31 -6
- package/dist/{pi-embedded-CgPTEqlB.js → pi-embedded-Ctrt2kz0.js} +8759 -9600
- package/dist/{pi-embedded-helpers-DYH6OWft.js → pi-embedded-helpers-CMKLjW6X.js} +68 -9
- package/dist/{pi-embedded-helpers-y1_Se0yq.js → pi-embedded-helpers-CUzTc1v6.js} +241 -24
- package/dist/{pi-embedded-helpers-Bkpd4fTr.js → pi-embedded-helpers-DfwkwPYD.js} +67 -8
- package/dist/{pi-embedded-helpers-BbWRSUnc.js → pi-embedded-helpers-WDwx99UA.js} +347 -32
- package/dist/{pi-tools.policy-akYsGFiA.js → pi-tools.policy-BpsROZbz.js} +4 -4
- package/dist/{plugin-auto-enable-lZwe2yX5.js → plugin-auto-enable-Bqhc3w5n.js} +5 -5
- package/dist/{plugin-auto-enable-AOSOJ-v1.js → plugin-auto-enable-PW76g_PJ.js} +5 -5
- package/dist/plugin-sdk/agents/bash-process-registry.d.ts +1 -0
- package/dist/plugin-sdk/agents/models-config.providers.d.ts +10 -0
- package/dist/plugin-sdk/agents/pi-embedded-helpers/errors.d.ts +5 -1
- package/dist/plugin-sdk/agents/pi-embedded-helpers.d.ts +1 -1
- package/dist/plugin-sdk/agents/pi-embedded-runner/google.d.ts +1 -0
- package/dist/plugin-sdk/agents/pi-embedded-runner/run/params.d.ts +2 -0
- package/dist/plugin-sdk/agents/pi-embedded-runner/run/payloads.d.ts +1 -0
- package/dist/plugin-sdk/agents/pi-embedded-runner/run/types.d.ts +2 -0
- package/dist/plugin-sdk/agents/pi-embedded-runner/types.d.ts +15 -0
- package/dist/plugin-sdk/agents/pi-embedded-subscribe.handlers.tools.d.ts +1 -1
- package/dist/plugin-sdk/agents/pi-embedded-subscribe.handlers.types.d.ts +2 -0
- package/dist/plugin-sdk/agents/pi-embedded-subscribe.types.d.ts +2 -0
- package/dist/plugin-sdk/agents/session-tool-result-guard-wrapper.d.ts +2 -0
- package/dist/plugin-sdk/agents/session-tool-result-guard.d.ts +4 -0
- package/dist/plugin-sdk/agents/tools/agent-step.d.ts +3 -0
- package/dist/plugin-sdk/agents/tools/browser-tool.schema.d.ts +1 -1
- package/dist/plugin-sdk/agents/tools/web-search.d.ts +10 -1
- package/dist/plugin-sdk/agents/usage.d.ts +1 -0
- package/dist/plugin-sdk/auto-reply/heartbeat.d.ts +1 -1
- package/dist/plugin-sdk/auto-reply/reply/get-reply-directives.d.ts +1 -0
- package/dist/plugin-sdk/auto-reply/reply/mentions.d.ts +1 -0
- package/dist/plugin-sdk/auto-reply/reply/model-selection.d.ts +3 -0
- package/dist/plugin-sdk/auto-reply/reply/reply-reference.d.ts +1 -1
- package/dist/plugin-sdk/auto-reply/reply/session-run-accounting.d.ts +11 -0
- package/dist/plugin-sdk/auto-reply/reply/session-usage.d.ts +8 -0
- package/dist/plugin-sdk/auto-reply/types.d.ts +2 -0
- package/dist/plugin-sdk/browser/control-auth.d.ts +13 -0
- package/dist/plugin-sdk/channels/plugins/onboarding/signal.d.ts +1 -0
- package/dist/plugin-sdk/cli/prompt.d.ts +1 -0
- package/dist/plugin-sdk/commands/agent/types.d.ts +2 -0
- package/dist/plugin-sdk/commands/onboard-types.d.ts +7 -1
- package/dist/plugin-sdk/config/sessions/paths.d.ts +7 -2
- package/dist/plugin-sdk/config/types.agents.d.ts +2 -0
- package/dist/plugin-sdk/config/types.discord.d.ts +5 -0
- package/dist/plugin-sdk/config/types.gateway.d.ts +15 -0
- package/dist/plugin-sdk/config/types.hooks.d.ts +15 -0
- package/dist/plugin-sdk/config/types.memory.d.ts +2 -0
- package/dist/plugin-sdk/config/zod-schema.agents.d.ts +1 -0
- package/dist/plugin-sdk/config/zod-schema.d.ts +13 -1
- package/dist/plugin-sdk/config/zod-schema.hooks.d.ts +1 -1
- package/dist/plugin-sdk/config/zod-schema.providers-core.d.ts +9 -0
- package/dist/plugin-sdk/config/zod-schema.providers.d.ts +4 -0
- package/dist/plugin-sdk/cron/service/jobs.d.ts +8 -0
- package/dist/plugin-sdk/cron/service/state.d.ts +1 -0
- package/dist/plugin-sdk/cron/types.d.ts +2 -0
- package/dist/plugin-sdk/discord/monitor/allow-list.d.ts +15 -0
- package/dist/plugin-sdk/discord/send.types.d.ts +5 -0
- package/dist/plugin-sdk/gateway/auth.d.ts +36 -0
- package/dist/plugin-sdk/gateway/protocol/index.d.ts +0 -3
- package/dist/plugin-sdk/gateway/protocol/schema/agent.d.ts +7 -1
- package/dist/plugin-sdk/gateway/session-utils.fs.d.ts +3 -1
- package/dist/plugin-sdk/index.js +935 -660
- package/dist/plugin-sdk/infra/binaries.d.ts +3 -0
- package/dist/plugin-sdk/infra/heartbeat-active-hours.d.ts +5 -0
- package/dist/plugin-sdk/infra/heartbeat-runner.d.ts +1 -0
- package/dist/plugin-sdk/infra/net/fetch-guard.d.ts +1 -0
- package/dist/plugin-sdk/infra/net/ssrf.d.ts +1 -0
- package/dist/plugin-sdk/infra/tailscale.d.ts +34 -0
- package/dist/plugin-sdk/infra/tmp-openclaw-dir.d.ts +10 -0
- package/dist/plugin-sdk/logging/console.d.ts +1 -0
- package/dist/plugin-sdk/logging/logger.d.ts +1 -1
- package/dist/plugin-sdk/logging/state.d.ts +1 -0
- package/dist/plugin-sdk/markdown/ir.d.ts +1 -1
- package/dist/plugin-sdk/markdown/whatsapp.d.ts +14 -0
- package/dist/plugin-sdk/media/input-files.d.ts +5 -0
- package/dist/plugin-sdk/media-understanding/audio-preflight.d.ts +16 -0
- package/dist/plugin-sdk/media-understanding/types.d.ts +1 -0
- package/dist/plugin-sdk/memory/backend-config.d.ts +2 -1
- package/dist/plugin-sdk/memory/qmd-manager.d.ts +2 -0
- package/dist/plugin-sdk/memory/qmd-query-parser.d.ts +8 -0
- package/dist/plugin-sdk/process/command-queue.d.ts +16 -0
- package/dist/plugin-sdk/routing/resolve-route.d.ts +3 -1
- package/dist/plugin-sdk/security/external-content.d.ts +1 -1
- package/dist/plugin-sdk/security/secret-equal.d.ts +1 -0
- package/dist/plugin-sdk/sessions/input-provenance.d.ts +16 -0
- package/dist/plugin-sdk/signal/monitor/event-handler.types.d.ts +8 -0
- package/dist/plugin-sdk/signal/monitor/mentions.d.ts +2 -0
- package/dist/plugin-sdk/slack/monitor/commands.d.ts +5 -0
- package/dist/plugin-sdk/telegram/bot-message-context.d.ts +2 -1
- package/dist/plugin-sdk/telegram/send.d.ts +3 -0
- package/dist/plugin-sdk/web/media.d.ts +2 -0
- package/dist/{plugins-Db5BiELK.js → plugins-4Hqd1WGf.js} +3 -3
- package/dist/{plugins-CNaHNND_.js → plugins-X7d_tfTE.js} +4 -4
- package/dist/{plugins-cli-8G-hQPCu.js → plugins-cli-Bgku3EGj.js} +253 -44
- package/dist/{plugins-cli-CDiocaDE.js → plugins-cli-CVToH3if.js} +257 -48
- package/dist/{ports-BeebfNCb.js → ports-qkt29rdC.js} +2 -2
- package/dist/{program-0Cj9YxRN.js → program-Cf7lkBur.js} +82 -80
- package/dist/{progress-DIQJt9Va.js → progress-C9kngsTD.js} +1 -1
- package/dist/{progress-Da1ehW-x.js → progress-DWqhRakV.js} +1 -1
- package/dist/{prompt-style-Dc0C5HC9.js → prompt-style-BFH5D5LN.js} +1 -1
- package/dist/{prompt-style-CjQRlDx4.js → prompt-style-CIbmaxSa.js} +1 -1
- package/dist/{pw-ai-C43wv1ZF.js → pw-ai-8mdv3h-d.js} +7 -6
- package/dist/{pw-ai-COWYvUfG.js → pw-ai-CM1IsSgZ.js} +6 -6
- package/dist/{pw-ai-BxJ-KCIy.js → pw-ai-FGoRVblI.js} +5 -6
- package/dist/{pw-ai-CsvaObGM.js → pw-ai-sS1fRKW_.js} +3 -3
- package/dist/{qmd-manager-CpsjQyaZ.js → qmd-manager-C67Fc8aN.js} +79 -26
- package/dist/{qmd-manager-C9YWFeG6.js → qmd-manager-CXVbfg99.js} +81 -26
- package/dist/{qmd-manager-C02E8ixK.js → qmd-manager-RMRE8Tqt.js} +81 -26
- package/dist/{qmd-manager-BzY2LQTT.js → qmd-manager-pyc_MTIe.js} +78 -23
- package/dist/{register.subclis-DUkirdHn.js → register.subclis-C02e4zuJ.js} +29 -29
- package/dist/{reply--b7BsXGP.js → reply-DICXkh_C.js} +7289 -8455
- package/dist/{routes-DUkEKAc1.js → routes-CmOI1hIH.js} +29 -11
- package/dist/{routes-B4QQiFju.js → routes-DewK5tq2.js} +29 -12
- package/dist/{rpc-CuMtxrRT.js → rpc-DHr30euf.js} +3 -3
- package/dist/{rpc-Blt6MJ4F.js → rpc-T300F8zI.js} +3 -3
- package/dist/{run-main-XZcPA23b.js → run-main-C5wpthq1.js} +84 -82
- package/dist/runner-CY0nmVme.js +1886 -0
- package/dist/runner-Cfm5nTMc.js +1785 -0
- package/dist/runner-D_dujMod.js +1886 -0
- package/dist/runner-DrGYLH5K.js +1785 -0
- package/dist/{sandbox-Aks-9EcZ.js → sandbox-BKYnhYQH.js} +24 -17
- package/dist/{sandbox-DqUO2K83.js → sandbox-Bhjnh1Xg.js} +23 -16
- package/dist/{sandbox-cli-C99Thxi8.js → sandbox-cli-DBsAjZJN.js} +21 -21
- package/dist/{sandbox-cli-CJqRM4V6.js → sandbox-cli-rV9LtFeu.js} +21 -21
- package/dist/{security-cli-iqYLMOz3.js → security-cli-BIwJM_rs.js} +27 -27
- package/dist/{security-cli-DW3lCz-o.js → security-cli-BRjny8Yu.js} +27 -27
- package/dist/{server-context-fX4xiYRh.js → server-context-BGpGs3qd.js} +7 -7
- package/dist/{server-context-8Qt35QdF.js → server-context-Cl0U0vE3.js} +7 -7
- package/dist/{server-node-events-CHWXfb_T.js → server-node-events-CBfTbiTA.js} +48 -44
- package/dist/{server-node-events-BzrEnKLX.js → server-node-events-QCvh8EgI.js} +45 -41
- package/dist/{service-Cd4BxKuo.js → service--nPk7DvT.js} +8 -4
- package/dist/{service-DDPRbf8a.js → service-99RDXwX4.js} +8 -4
- package/dist/{service-audit-CCFxuvKs.js → service-audit-DnLmRGQt.js} +4 -4
- package/dist/{service-audit-x6jCN-6a.js → service-audit-ckBaRCVC.js} +4 -4
- package/dist/{session-cost-usage-CcCEQNuc.js → session-cost-usage-D7HuoSSD.js} +12 -10
- package/dist/{session-cost-usage-PvyVZz-g.js → session-cost-usage-D9hHANWI.js} +12 -10
- package/dist/{shared-ILguacOr.js → shared-Bs4vduG4.js} +3 -3
- package/dist/{shared-CagUDdmp.js → shared-CEY5IkwG.js} +3 -3
- package/dist/{shared-gOyV38rM.js → shared-DRohONn_.js} +4 -4
- package/dist/{shared-BDk_zC9p.js → shared-ICqOZibV.js} +4 -4
- package/dist/{skill-scanner-C_fQzVDu.js → skill-scanner-CucvxYhu.js} +1 -1
- package/dist/{skill-scanner-DrVEHfC6.js → skill-scanner-rHMtUHtP.js} +1 -1
- package/dist/{skills-D5UZZZSY.js → skills-DRjfSQT3.js} +141 -6
- package/dist/{skills-ccAgQ3Ad.js → skills-DprQj9X2.js} +142 -7
- package/dist/{skills-cli-DQilTG3n.js → skills-cli-9WO-C55s.js} +12 -12
- package/dist/{skills-cli-ggyLBtAY.js → skills-cli-B9eej-EW.js} +13 -13
- package/dist/{skills-status-BosMnzIs.js → skills-status-5U3P3YfJ.js} +3 -3
- package/dist/{skills-status-DjtPPMnY.js → skills-status-TDIgVd1K.js} +2 -2
- package/dist/{sqlite-B7FPASCO.js → sqlite-BINzs1U0.js} +2 -2
- package/dist/{sqlite-Btrgi7-j.js → sqlite-D4w5TejA.js} +3 -3
- package/dist/{sqlite-BrQ9tw8B.js → sqlite-DRRHmlug.js} +3 -3
- package/dist/{sqlite-HepBVDoX.js → sqlite-F6PGkEm1.js} +2 -2
- package/dist/{status-BByCntWS.js → status-BKGkKC_v.js} +3 -3
- package/dist/{status-Dt7RE_Yy.js → status-CiHtHdaa.js} +4 -4
- package/dist/{status-zfL4Yej7.js → status-DDWoOpeB.js} +37 -37
- package/dist/{subsystem-Bh1Y_6Uv.js → subsystem-BoExtIHo.js} +52 -17
- package/dist/{system-cli-DwuUkdkH.js → system-cli-B6lr60Io.js} +14 -14
- package/dist/{system-cli-Clqsx8U5.js → system-cli-CprW9G3h.js} +14 -14
- package/dist/{systemd-BEWwfwn0.js → systemd-C0VZriGM.js} +3 -3
- package/dist/{systemd-D6wTPnHi.js → systemd-DrmBtJ5T.js} +3 -3
- package/dist/{systemd-hints-zi4ohCOY.js → systemd-hints-DZtXiVHa.js} +1 -1
- package/dist/{systemd-linger-CDo2UbHM.js → systemd-linger-NC2kl1SC.js} +2 -2
- package/dist/{systemd-linger-BxjTrgoH.js → systemd-linger-xdn3BdPh.js} +2 -2
- package/dist/{table-DEnmtvl5.js → table-B8dx3v4v.js} +2 -2
- package/dist/{table-cCoGqLsk.js → table-CwulTLQp.js} +1 -1
- package/dist/{tool-display-DskiU8Kt.js → tool-display-CZRIDMRm.js} +2 -2
- package/dist/{tool-display-o-dDAlqF.js → tool-display-ClRud3pg.js} +2 -2
- package/dist/{tui-BdJWZdto.js → tui-CVTQn-dC.js} +14 -13
- package/dist/{tui-Bc7XUQGP.js → tui-Lu8FdrlK.js} +13 -14
- package/dist/{tui-cli-BGYh0UL0.js → tui-cli-BLpTj1X9.js} +27 -27
- package/dist/{tui-cli-D3n-O9zB.js → tui-cli-BLx5kL2I.js} +26 -26
- package/dist/{tui-formatters-CA85v4U2.js → tui-formatters-CNySEfJN.js} +6 -6
- package/dist/{tui-formatters-C3NarH24.js → tui-formatters-DePhZK3J.js} +6 -6
- package/dist/{update-JB16aPIY.js → update-DHVxMTpQ.js} +3 -3
- package/dist/{update-Ct9sqJC_.js → update-DU1geolI.js} +3 -3
- package/dist/{update-cli-wWKDS3cm.js → update-cli-C0hUvJWK.js} +89 -71
- package/dist/{update-cli-DDXp_N9B.js → update-cli-Wb1GB3rL.js} +88 -70
- package/dist/{update-runner-ChTf6O6p.js → update-runner--ixK4J3W.js} +11 -11
- package/dist/{update-runner-CmE6cHdn.js → update-runner-7Qa1T9y6.js} +10 -10
- package/dist/{utils-Dk86IbEs.js → utils-BLJAc3ZV.js} +1 -1
- package/dist/{utils-es4ygvQ-.js → utils-Cd9QdCHh.js} +1 -1
- package/dist/{webhooks-cli-CVIE9TtX.js → webhooks-cli-DgcMy7RG.js} +12 -12
- package/dist/{webhooks-cli-BmKSiQQC.js → webhooks-cli-aVzUcJY9.js} +11 -11
- package/dist/{widearea-dns-2ah0bkAj.js → widearea-dns-BaIgNEhY.js} +3 -3
- package/dist/{widearea-dns-CMIG6-74.js → widearea-dns-DzuRdwk5.js} +3 -3
- package/dist/{ws-DtDKpbLR.js → ws-CHCQHs0F.js} +1 -1
- package/dist/{ws-log-BP3z_g6Z.js → ws-log-CIXbLCka.js} +1 -1
- package/dist/{ws-log-D7MkvKhg.js → ws-log-DcQFZByi.js} +2 -2
- package/dist/{wsl-Cwo7X0Un.js → wsl-BUOkxKJu.js} +2 -2
- package/docs/assets/install-script.svg +1 -0
- package/docs/automation/hooks.md +1 -38
- package/docs/automation/webhook.md +43 -2
- package/docs/channels/discord.md +389 -381
- package/docs/channels/imessage.md +229 -218
- package/docs/channels/slack.md +294 -415
- package/docs/channels/telegram.md +401 -505
- package/docs/channels/whatsapp.md +338 -310
- package/docs/ci.md +0 -12
- package/docs/cli/hooks.md +1 -14
- package/docs/cli/index.md +6 -1
- package/docs/cli/logs.md +4 -0
- package/docs/cli/onboard.md +30 -0
- package/docs/cli/plugins.md +20 -1
- package/docs/cli/security.md +1 -0
- package/docs/concepts/memory.md +7 -4
- package/docs/concepts/session-tool.md +1 -0
- package/docs/docs.json +11 -11
- package/docs/gateway/configuration-examples.md +9 -2
- package/docs/gateway/configuration-reference.md +2329 -0
- package/docs/gateway/configuration.md +338 -3304
- package/docs/gateway/index.md +162 -238
- package/docs/gateway/openresponses-http-api.md +15 -0
- package/docs/gateway/security/index.md +3 -0
- package/docs/help/faq.md +9 -0
- package/docs/install/hetzner.md +21 -0
- package/docs/install/installer.md +20 -0
- package/docs/nodes/audio.md +19 -0
- package/docs/platforms/mac/release.md +7 -7
- package/docs/providers/glm.md +3 -3
- package/docs/providers/index.md +1 -0
- package/docs/providers/litellm.md +153 -0
- package/docs/providers/zai.md +2 -2
- package/docs/reference/templates/AGENTS.md +26 -26
- package/docs/reference/templates/HEARTBEAT.md +31 -2
- package/docs/reference/templates/SOUL.md +14 -8
- package/docs/reference/transcript-hygiene.md +18 -0
- package/docs/start/getting-started.md +5 -0
- package/docs/start/wizard-cli-automation.md +17 -0
- package/docs/start/wizard-cli-reference.md +12 -0
- package/docs/tools/browser.md +6 -0
- package/docs/zh-CN/automation/hooks.md +1 -38
- package/docs/zh-CN/cli/hooks.md +1 -14
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/bluebubbles/src/monitor.test.ts +40 -28
- package/extensions/bluebubbles/src/monitor.ts +0 -4
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/diagnostics-otel/package.json +10 -10
- package/extensions/discord/package.json +1 -1
- package/extensions/feishu/package.json +2 -5
- package/extensions/feishu/src/bot.checkBotMentioned.test.ts +64 -0
- package/extensions/feishu/src/bot.ts +1 -1
- package/extensions/feishu/src/channel.test.ts +48 -0
- package/extensions/feishu/src/channel.ts +1 -3
- package/extensions/feishu/src/config-schema.ts +6 -0
- package/extensions/feishu/src/docx.ts +14 -4
- package/extensions/feishu/src/media.test.ts +151 -0
- package/extensions/feishu/src/media.ts +27 -13
- package/extensions/feishu/src/reply-dispatcher.test.ts +116 -0
- package/extensions/feishu/src/reply-dispatcher.ts +124 -67
- package/extensions/feishu/src/streaming-card.ts +223 -0
- package/extensions/feishu/src/targets.test.ts +16 -0
- package/extensions/feishu/src/targets.ts +1 -1
- package/extensions/google-antigravity-auth/package.json +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/googlechat/package.json +1 -1
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/package.json +1 -1
- package/extensions/irc/src/client.ts +1 -1
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/lobster/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +6 -0
- package/extensions/matrix/package.json +2 -2
- package/extensions/mattermost/package.json +1 -1
- package/extensions/memory-core/package.json +1 -1
- package/extensions/memory-lancedb/index.ts +6 -2
- package/extensions/memory-lancedb/package.json +2 -2
- package/extensions/minimax-portal-auth/index.ts +7 -5
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +6 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +6 -0
- package/extensions/nostr/package.json +2 -2
- package/extensions/open-prose/package.json +1 -1
- package/extensions/signal/package.json +1 -1
- package/extensions/slack/package.json +1 -1
- package/extensions/telegram/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +6 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +6 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/voice-call/src/media-stream.ts +7 -1
- package/extensions/voice-call/src/providers/twilio.test.ts +5 -3
- package/extensions/voice-call/src/providers/twilio.ts +12 -1
- package/extensions/whatsapp/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +6 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +6 -0
- package/extensions/zalouser/package.json +1 -1
- package/package.json +26 -22
- package/dist/auth-BcNHFK-i.js +0 -184
- package/dist/auth-BvIPpm7G.js +0 -184
- package/dist/boolean-M-esQJt6.js +0 -30
- package/dist/bundled/soul-evil/HOOK.md +0 -71
- package/dist/bundled/soul-evil/handler.js +0 -194
- package/dist/cli-DJbWJ9aB.js +0 -89
- package/dist/config-CI7EpvlP.js +0 -15
- package/dist/control-ui/assets/index-CnB9IO4a.js.map +0 -1
- package/dist/date-time-c6HTX6IW.js +0 -187
- package/dist/frontmatter-xwTm0734.js +0 -105
- package/dist/parse-duration-De_tAQSe.js +0 -24
- package/dist/session-key-nXYQSv-a.js +0 -167
- package/dist/utils-dp_OM900.js +0 -476
- package/docs/hooks/soul-evil.md +0 -69
- package/docs/zh-CN/hooks/soul-evil.md +0 -72
- /package/dist/{archive-CXhvR9nU.js → archive-beaSfAzA.js} +0 -0
- /package/dist/{brew-BIrWdDps.js → brew-BUIxHEkn.js} +0 -0
- /package/dist/{brew-B7YK4ZoL.js → brew-ROHf0-Xp.js} +0 -0
- /package/dist/{cli-utils-PlLcDZlM.js → cli-utils-CRhVAaLV.js} +0 -0
- /package/dist/{cli-utils-R-ECs5cY.js → cli-utils-LcHOt63h.js} +0 -0
- /package/dist/{command-format-BUxhT1xL.js → command-format-qUVxzqYm.js} +0 -0
- /package/dist/{constants-CNTiY-ZN.js → constants-BvQ6S8j5.js} +0 -0
- /package/dist/{constants-DuoCkWRh.js → constants-JPeoOZnw.js} +0 -0
- /package/dist/{errors-D3tYRJWG.js → errors-B91HIDPD.js} +0 -0
- /package/dist/{errors-B0eT3jVv.js → errors-Bv81hF2P.js} +0 -0
- /package/dist/{errors-x4NYs-1P.js → errors-DjZBTJJ3.js} +0 -0
- /package/dist/{exec-approvals-DGPTjO0N.js → exec-approvals-Cb4ZLukq.js} +0 -0
- /package/dist/{exec-approvals-DhmKpiIo.js → exec-approvals-DQ8TVVmj.js} +0 -0
- /package/dist/{format-CaxeRcue.js → format-CNU-Zkrz.js} +0 -0
- /package/dist/{format-DLOJPZmo.js → format-DcfK-dwd.js} +0 -0
- /package/dist/{format-duration-Be5Z7JdJ.js → format-duration-84n6_DgO.js} +0 -0
- /package/dist/{format-duration-CEmFWLyX.js → format-duration-Bo9zNKwO.js} +0 -0
- /package/dist/{format-relative-79_Y1n2Y.js → format-relative-CZOlQ2pA.js} +0 -0
- /package/dist/{format-relative-Db7eqEu8.js → format-relative-cegC_FF5.js} +0 -0
- /package/dist/{github-copilot-token-C9IJh2Pn.js → github-copilot-token-DkiRbJdR.js} +0 -0
- /package/dist/{helpers-CQI-5xS9.js → helpers-8O7IVGO-.js} +0 -0
- /package/dist/{helpers-CRzoyyXS.js → helpers-D_jqdWkd.js} +0 -0
- /package/dist/{helpers-C89IG08W.js → helpers-HyeZXsnu.js} +0 -0
- /package/dist/{is-main-WWuz28Ip.js → is-main-BWoXGz7p.js} +0 -0
- /package/dist/{logging-BzvBIA3Y.js → logging-fywhKCmE.js} +0 -0
- /package/dist/{nodes-screen-lykd2cny.js → nodes-screen-CdCWeiwy.js} +0 -0
- /package/dist/{parse-Cjiudy6x.js → parse-Bw0oH-rT.js} +0 -0
- /package/dist/{parse-DqAvJRIf.js → parse-ioZhOtha.js} +0 -0
- /package/dist/{parse-log-line-CUrpqe1w.js → parse-log-line-BoDqomM4.js} +0 -0
- /package/dist/{parse-log-line-D2UGw0wR.js → parse-log-line-DPxH1XZx.js} +0 -0
- /package/dist/{parse-timeout-DFSPLxpY.js → parse-timeout-D1XX_zN_.js} +0 -0
- /package/dist/{parse-timeout-DV8NQQWk.js → parse-timeout-DMW-z4Iz.js} +0 -0
- /package/dist/{pi-model-discovery-CV2V1HHz.js → pi-model-discovery-DqgqUyAv.js} +0 -0
- /package/dist/{pi-model-discovery-DzFOAbQt.js → pi-model-discovery-EwKVHlZB.js} +0 -0
- /package/dist/{prompts--d-6l5Ln.js → prompts-Bg96reub.js} +0 -0
- /package/dist/{redact-DAKeu7PA.js → redact-BRsnXqwD.js} +0 -0
- /package/dist/{redact-DuEEf1p1.js → redact-Br9GfacZ.js} +0 -0
- /package/dist/{redact-BOIof271.js → redact-BrXLgslJ.js} +0 -0
- /package/dist/{status-Cv36yYdi.js → status-BRZfQbJ2.js} +0 -0
- /package/dist/{status-Drziap9H.js → status-CoAy6bEC.js} +0 -0
- /package/dist/{systemd-hints-CH4pbCFD.js → systemd-hints-CXNtLw9Q.js} +0 -0
- /package/dist/{tailnet-DGRSvYuQ.js → tailnet-DATIFSsY.js} +0 -0
- /package/dist/{transcript-events-BlIONGVn.js → transcript-events-BHS7QoRl.js} +0 -0
- /package/dist/{transcript-events-C1hdue6u.js → transcript-events-Bp7fGnwv.js} +0 -0
- /package/dist/{transcript-events-CZ8CG4ht.js → transcript-events-BtNd-j6q.js} +0 -0
- /package/dist/{usage-format-6Uar63S0.js → usage-format-C4JfTbSp.js} +0 -0
- /package/dist/{usage-format-hd37en6b.js → usage-format-CpORtVCG.js} +0 -0
|
@@ -1,406 +1,434 @@
|
|
|
1
1
|
---
|
|
2
|
-
summary: "WhatsApp
|
|
2
|
+
summary: "WhatsApp channel support, access controls, delivery behavior, and operations"
|
|
3
3
|
read_when:
|
|
4
4
|
- Working on WhatsApp/web channel behavior or inbox routing
|
|
5
5
|
title: "WhatsApp"
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# WhatsApp (
|
|
8
|
+
# WhatsApp (Web channel)
|
|
9
9
|
|
|
10
|
-
Status: WhatsApp Web
|
|
10
|
+
Status: production-ready via WhatsApp Web (Baileys). Gateway owns linked session(s).
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
<CardGroup cols={3}>
|
|
13
|
+
<Card title="Pairing" icon="link" href="/channels/pairing">
|
|
14
|
+
Default DM policy is pairing for unknown senders.
|
|
15
|
+
</Card>
|
|
16
|
+
<Card title="Channel troubleshooting" icon="wrench" href="/channels/troubleshooting">
|
|
17
|
+
Cross-channel diagnostics and repair playbooks.
|
|
18
|
+
</Card>
|
|
19
|
+
<Card title="Gateway configuration" icon="settings" href="/gateway/configuration">
|
|
20
|
+
Full channel config patterns and examples.
|
|
21
|
+
</Card>
|
|
22
|
+
</CardGroup>
|
|
13
23
|
|
|
14
|
-
|
|
15
|
-
2. Configure WhatsApp in `~/.openclaw/openclaw.json`.
|
|
16
|
-
3. Run `openclaw channels login` to scan the QR code (Linked Devices).
|
|
17
|
-
4. Start the gateway.
|
|
24
|
+
## Quick setup
|
|
18
25
|
|
|
19
|
-
|
|
26
|
+
<Steps>
|
|
27
|
+
<Step title="Configure WhatsApp access policy">
|
|
20
28
|
|
|
21
29
|
```json5
|
|
22
30
|
{
|
|
23
31
|
channels: {
|
|
24
32
|
whatsapp: {
|
|
25
|
-
dmPolicy: "
|
|
33
|
+
dmPolicy: "pairing",
|
|
26
34
|
allowFrom: ["+15551234567"],
|
|
35
|
+
groupPolicy: "allowlist",
|
|
36
|
+
groupAllowFrom: ["+15551234567"],
|
|
27
37
|
},
|
|
28
38
|
},
|
|
29
39
|
}
|
|
30
40
|
```
|
|
31
41
|
|
|
32
|
-
|
|
42
|
+
</Step>
|
|
33
43
|
|
|
34
|
-
|
|
35
|
-
- Deterministic routing: replies return to WhatsApp, no model routing.
|
|
36
|
-
- Model sees enough context to understand quoted replies.
|
|
44
|
+
<Step title="Link WhatsApp (QR)">
|
|
37
45
|
|
|
38
|
-
|
|
46
|
+
```bash
|
|
47
|
+
openclaw channels login --channel whatsapp
|
|
48
|
+
```
|
|
39
49
|
|
|
40
|
-
|
|
50
|
+
For a specific account:
|
|
41
51
|
|
|
42
|
-
|
|
52
|
+
```bash
|
|
53
|
+
openclaw channels login --channel whatsapp --account work
|
|
54
|
+
```
|
|
43
55
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
56
|
+
</Step>
|
|
57
|
+
|
|
58
|
+
<Step title="Start the gateway">
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
openclaw gateway
|
|
48
62
|
```
|
|
49
63
|
|
|
50
|
-
|
|
64
|
+
</Step>
|
|
51
65
|
|
|
52
|
-
|
|
53
|
-
- **CLI / macOS app** talk to the gateway; no direct Baileys use.
|
|
54
|
-
- **Active listener** is required for outbound sends; otherwise send fails fast.
|
|
66
|
+
<Step title="Approve first pairing request (if using pairing mode)">
|
|
55
67
|
|
|
56
|
-
|
|
68
|
+
```bash
|
|
69
|
+
openclaw pairing list whatsapp
|
|
70
|
+
openclaw pairing approve whatsapp <CODE>
|
|
71
|
+
```
|
|
57
72
|
|
|
58
|
-
|
|
73
|
+
Pairing requests expire after 1 hour. Pending requests are capped at 3 per channel.
|
|
59
74
|
|
|
60
|
-
|
|
75
|
+
</Step>
|
|
76
|
+
</Steps>
|
|
61
77
|
|
|
62
|
-
|
|
78
|
+
<Note>
|
|
79
|
+
OpenClaw recommends running WhatsApp on a separate number when possible. (The channel metadata and onboarding flow are optimized for that setup, but personal-number setups are also supported.)
|
|
80
|
+
</Note>
|
|
63
81
|
|
|
64
|
-
|
|
82
|
+
## Deployment patterns
|
|
65
83
|
|
|
66
|
-
|
|
84
|
+
<AccordionGroup>
|
|
85
|
+
<Accordion title="Dedicated number (recommended)">
|
|
86
|
+
This is the cleanest operational mode:
|
|
67
87
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
whatsapp: {
|
|
72
|
-
dmPolicy: "allowlist",
|
|
73
|
-
allowFrom: ["+15551234567"],
|
|
74
|
-
},
|
|
75
|
-
},
|
|
76
|
-
}
|
|
77
|
-
```
|
|
88
|
+
- separate WhatsApp identity for OpenClaw
|
|
89
|
+
- clearer DM allowlists and routing boundaries
|
|
90
|
+
- lower chance of self-chat confusion
|
|
78
91
|
|
|
79
|
-
|
|
80
|
-
If you want pairing instead of allowlist, set `channels.whatsapp.dmPolicy` to `pairing`. Unknown senders get a pairing code; approve with:
|
|
81
|
-
`openclaw pairing approve whatsapp <code>`
|
|
92
|
+
Minimal policy pattern:
|
|
82
93
|
|
|
83
|
-
|
|
94
|
+
```json5
|
|
95
|
+
{
|
|
96
|
+
channels: {
|
|
97
|
+
whatsapp: {
|
|
98
|
+
dmPolicy: "allowlist",
|
|
99
|
+
allowFrom: ["+15551234567"],
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
}
|
|
103
|
+
```
|
|
84
104
|
|
|
85
|
-
|
|
86
|
-
When the wizard asks for your personal WhatsApp number, enter the phone you will message from (the owner/sender), not the assistant number.
|
|
105
|
+
</Accordion>
|
|
87
106
|
|
|
88
|
-
|
|
107
|
+
<Accordion title="Personal-number fallback">
|
|
108
|
+
Onboarding supports personal-number mode and writes a self-chat-friendly baseline:
|
|
89
109
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
"selfChatMode": true,
|
|
94
|
-
"dmPolicy": "allowlist",
|
|
95
|
-
"allowFrom": ["+15551234567"]
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
```
|
|
110
|
+
- `dmPolicy: "allowlist"`
|
|
111
|
+
- `allowFrom` includes your personal number
|
|
112
|
+
- `selfChatMode: true`
|
|
99
113
|
|
|
100
|
-
|
|
101
|
-
if `messages.responsePrefix` is unset. Set it explicitly to customize or disable
|
|
102
|
-
the prefix (use `""` to remove it).
|
|
114
|
+
In runtime, self-chat protections key off the linked self number and `allowFrom`.
|
|
103
115
|
|
|
104
|
-
|
|
116
|
+
</Accordion>
|
|
105
117
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
- UK: [giffgaff](https://www.giffgaff.com) — free SIM, no contract
|
|
109
|
-
- **Prepaid SIM** — cheap, just needs to receive one SMS for verification
|
|
118
|
+
<Accordion title="WhatsApp Web-only channel scope">
|
|
119
|
+
The messaging platform channel is WhatsApp Web-based (`Baileys`) in current OpenClaw channel architecture.
|
|
110
120
|
|
|
111
|
-
|
|
121
|
+
There is no separate Twilio WhatsApp messaging channel in the built-in chat-channel registry.
|
|
112
122
|
|
|
113
|
-
|
|
123
|
+
</Accordion>
|
|
124
|
+
</AccordionGroup>
|
|
114
125
|
|
|
115
|
-
##
|
|
126
|
+
## Runtime model
|
|
116
127
|
|
|
117
|
-
-
|
|
118
|
-
-
|
|
119
|
-
-
|
|
120
|
-
-
|
|
121
|
-
-
|
|
128
|
+
- Gateway owns the WhatsApp socket and reconnect loop.
|
|
129
|
+
- Outbound sends require an active WhatsApp listener for the target account.
|
|
130
|
+
- Status and broadcast chats are ignored (`@status`, `@broadcast`).
|
|
131
|
+
- Direct chats use DM session rules (`session.dmScope`; default `main` collapses DMs to the agent main session).
|
|
132
|
+
- Group sessions are isolated (`agent:<agentId>:whatsapp:group:<jid>`).
|
|
122
133
|
|
|
123
|
-
##
|
|
134
|
+
## Access control and activation
|
|
124
135
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
- Credentials stored in `~/.openclaw/credentials/whatsapp/<accountId>/creds.json`.
|
|
129
|
-
- Backup copy at `creds.json.bak` (restored on corruption).
|
|
130
|
-
- Legacy compatibility: older installs stored Baileys files directly in `~/.openclaw/credentials/`.
|
|
131
|
-
- Logout: `openclaw channels logout` (or `--account <id>`) deletes WhatsApp auth state (but keeps shared `oauth.json`).
|
|
132
|
-
- Logged-out socket => error instructs re-link.
|
|
136
|
+
<Tabs>
|
|
137
|
+
<Tab title="DM policy">
|
|
138
|
+
`channels.whatsapp.dmPolicy` controls direct chat access:
|
|
133
139
|
|
|
134
|
-
|
|
140
|
+
- `pairing` (default)
|
|
141
|
+
- `allowlist`
|
|
142
|
+
- `open` (requires `allowFrom` to include `"*"`)
|
|
143
|
+
- `disabled`
|
|
135
144
|
|
|
136
|
-
|
|
137
|
-
- Inbox listeners are detached on shutdown to avoid accumulating event handlers in tests/restarts.
|
|
138
|
-
- Status/broadcast chats are ignored.
|
|
139
|
-
- Direct chats use E.164; groups use group JID.
|
|
140
|
-
- **DM policy**: `channels.whatsapp.dmPolicy` controls direct chat access (default: `pairing`).
|
|
141
|
-
- Pairing: unknown senders get a pairing code (approve via `openclaw pairing approve whatsapp <code>`; codes expire after 1 hour).
|
|
142
|
-
- Open: requires `channels.whatsapp.allowFrom` to include `"*"`.
|
|
143
|
-
- Your linked WhatsApp number is implicitly trusted, so self messages skip `channels.whatsapp.dmPolicy` and `channels.whatsapp.allowFrom` checks.
|
|
145
|
+
`allowFrom` accepts E.164-style numbers (normalized internally).
|
|
144
146
|
|
|
145
|
-
|
|
147
|
+
Runtime behavior details:
|
|
146
148
|
|
|
147
|
-
|
|
149
|
+
- pairings are persisted in channel allow-store and merged with configured `allowFrom`
|
|
150
|
+
- if no allowlist is configured, the linked self number is allowed by default
|
|
151
|
+
- outbound `fromMe` DMs are never auto-paired
|
|
148
152
|
|
|
149
|
-
|
|
153
|
+
</Tab>
|
|
150
154
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
- Self-chat mode (allowFrom includes your number) avoids auto read receipts and ignores mention JIDs.
|
|
154
|
-
- Read receipts sent for non-self-chat DMs.
|
|
155
|
+
<Tab title="Group policy + allowlists">
|
|
156
|
+
Group access has two layers:
|
|
155
157
|
|
|
156
|
-
|
|
158
|
+
1. **Group membership allowlist** (`channels.whatsapp.groups`)
|
|
159
|
+
- if `groups` is omitted, all groups are eligible
|
|
160
|
+
- if `groups` is present, it acts as a group allowlist (`"*"` allowed)
|
|
157
161
|
|
|
158
|
-
|
|
162
|
+
2. **Group sender policy** (`channels.whatsapp.groupPolicy` + `groupAllowFrom`)
|
|
163
|
+
- `open`: sender allowlist bypassed
|
|
164
|
+
- `allowlist`: sender must match `groupAllowFrom` (or `*`)
|
|
165
|
+
- `disabled`: block all group inbound
|
|
159
166
|
|
|
160
|
-
|
|
167
|
+
Sender allowlist fallback:
|
|
161
168
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
169
|
+
- if `groupAllowFrom` is unset, runtime falls back to `allowFrom` when available
|
|
170
|
+
|
|
171
|
+
Note: if no `channels.whatsapp` block exists at all, runtime group-policy fallback is effectively `open`.
|
|
172
|
+
|
|
173
|
+
</Tab>
|
|
174
|
+
|
|
175
|
+
<Tab title="Mentions + /activation">
|
|
176
|
+
Group replies require mention by default.
|
|
177
|
+
|
|
178
|
+
Mention detection includes:
|
|
179
|
+
|
|
180
|
+
- explicit WhatsApp mentions of the bot identity
|
|
181
|
+
- configured mention regex patterns (`agents.list[].groupChat.mentionPatterns`, fallback `messages.groupChat.mentionPatterns`)
|
|
182
|
+
- implicit reply-to-bot detection (reply sender matches bot identity)
|
|
183
|
+
|
|
184
|
+
Session-level activation command:
|
|
185
|
+
|
|
186
|
+
- `/activation mention`
|
|
187
|
+
- `/activation always`
|
|
188
|
+
|
|
189
|
+
`activation` updates session state (not global config). It is owner-gated.
|
|
190
|
+
|
|
191
|
+
</Tab>
|
|
192
|
+
</Tabs>
|
|
193
|
+
|
|
194
|
+
## Personal-number and self-chat behavior
|
|
195
|
+
|
|
196
|
+
When the linked self number is also present in `allowFrom`, WhatsApp self-chat safeguards activate:
|
|
197
|
+
|
|
198
|
+
- skip read receipts for self-chat turns
|
|
199
|
+
- ignore mention-JID auto-trigger behavior that would otherwise ping yourself
|
|
200
|
+
- if `messages.responsePrefix` is unset, self-chat replies default to `[{identity.name}]` or `[openclaw]`
|
|
201
|
+
|
|
202
|
+
## Message normalization and context
|
|
203
|
+
|
|
204
|
+
<AccordionGroup>
|
|
205
|
+
<Accordion title="Inbound envelope + reply context">
|
|
206
|
+
Incoming WhatsApp messages are wrapped in the shared inbound envelope.
|
|
207
|
+
|
|
208
|
+
If a quoted reply exists, context is appended in this form:
|
|
209
|
+
|
|
210
|
+
```text
|
|
211
|
+
[Replying to <sender> id:<stanzaId>]
|
|
212
|
+
<quoted body or media placeholder>
|
|
213
|
+
[/Replying]
|
|
214
|
+
```
|
|
167
215
|
|
|
168
|
-
|
|
216
|
+
Reply metadata fields are also populated when available (`ReplyToId`, `ReplyToBody`, `ReplyToSender`, sender JID/E.164).
|
|
217
|
+
|
|
218
|
+
</Accordion>
|
|
219
|
+
|
|
220
|
+
<Accordion title="Media placeholders and location/contact extraction">
|
|
221
|
+
Media-only inbound messages are normalized with placeholders such as:
|
|
222
|
+
|
|
223
|
+
- `<media:image>`
|
|
224
|
+
- `<media:video>`
|
|
225
|
+
- `<media:audio>`
|
|
226
|
+
- `<media:document>`
|
|
227
|
+
- `<media:sticker>`
|
|
228
|
+
|
|
229
|
+
Location and contact payloads are normalized into textual context before routing.
|
|
230
|
+
|
|
231
|
+
</Accordion>
|
|
232
|
+
|
|
233
|
+
<Accordion title="Pending group history injection">
|
|
234
|
+
For groups, unprocessed messages can be buffered and injected as context when the bot is finally triggered.
|
|
235
|
+
|
|
236
|
+
- default limit: `50`
|
|
237
|
+
- config: `channels.whatsapp.historyLimit`
|
|
238
|
+
- fallback: `messages.groupChat.historyLimit`
|
|
239
|
+
- `0` disables
|
|
240
|
+
|
|
241
|
+
Injection markers:
|
|
242
|
+
|
|
243
|
+
- `[Chat messages since your last reply - for context]`
|
|
244
|
+
- `[Current message - respond to this]`
|
|
245
|
+
|
|
246
|
+
</Accordion>
|
|
247
|
+
|
|
248
|
+
<Accordion title="Read receipts">
|
|
249
|
+
Read receipts are enabled by default for accepted inbound WhatsApp messages.
|
|
250
|
+
|
|
251
|
+
Disable globally:
|
|
252
|
+
|
|
253
|
+
```json5
|
|
254
|
+
{
|
|
255
|
+
channels: {
|
|
256
|
+
whatsapp: {
|
|
257
|
+
sendReadReceipts: false,
|
|
258
|
+
},
|
|
259
|
+
},
|
|
260
|
+
}
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
Per-account override:
|
|
264
|
+
|
|
265
|
+
```json5
|
|
266
|
+
{
|
|
267
|
+
channels: {
|
|
268
|
+
whatsapp: {
|
|
269
|
+
accounts: {
|
|
270
|
+
work: {
|
|
271
|
+
sendReadReceipts: false,
|
|
272
|
+
},
|
|
273
|
+
},
|
|
274
|
+
},
|
|
275
|
+
},
|
|
276
|
+
}
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
Self-chat turns skip read receipts even when globally enabled.
|
|
280
|
+
|
|
281
|
+
</Accordion>
|
|
282
|
+
</AccordionGroup>
|
|
283
|
+
|
|
284
|
+
## Delivery, chunking, and media
|
|
285
|
+
|
|
286
|
+
<AccordionGroup>
|
|
287
|
+
<Accordion title="Text chunking">
|
|
288
|
+
- default chunk limit: `channels.whatsapp.textChunkLimit = 4000`
|
|
289
|
+
- `channels.whatsapp.chunkMode = "length" | "newline"`
|
|
290
|
+
- `newline` mode prefers paragraph boundaries (blank lines), then falls back to length-safe chunking
|
|
291
|
+
</Accordion>
|
|
292
|
+
|
|
293
|
+
<Accordion title="Outbound media behavior">
|
|
294
|
+
- supports image, video, audio (PTT voice-note), and document payloads
|
|
295
|
+
- `audio/ogg` is rewritten to `audio/ogg; codecs=opus` for voice-note compatibility
|
|
296
|
+
- animated GIF playback is supported via `gifPlayback: true` on video sends
|
|
297
|
+
- captions are applied to the first media item when sending multi-media reply payloads
|
|
298
|
+
- media source can be HTTP(S), `file://`, or local paths
|
|
299
|
+
</Accordion>
|
|
300
|
+
|
|
301
|
+
<Accordion title="Media size limits and fallback behavior">
|
|
302
|
+
- inbound media save cap: `channels.whatsapp.mediaMaxMb` (default `50`)
|
|
303
|
+
- outbound media cap for auto-replies: `agents.defaults.mediaMaxMb` (default `5MB`)
|
|
304
|
+
- images are auto-optimized (resize/quality sweep) to fit limits
|
|
305
|
+
- on media send failure, first-item fallback sends text warning instead of dropping the response silently
|
|
306
|
+
</Accordion>
|
|
307
|
+
</AccordionGroup>
|
|
308
|
+
|
|
309
|
+
## Acknowledgment reactions
|
|
310
|
+
|
|
311
|
+
WhatsApp supports immediate ack reactions on inbound receipt via `channels.whatsapp.ackReaction`.
|
|
169
312
|
|
|
170
313
|
```json5
|
|
171
314
|
{
|
|
172
315
|
channels: {
|
|
173
316
|
whatsapp: {
|
|
174
|
-
|
|
175
|
-
|
|
317
|
+
ackReaction: {
|
|
318
|
+
emoji: "👀",
|
|
319
|
+
direct: true,
|
|
320
|
+
group: "mentions", // always | mentions | never
|
|
176
321
|
},
|
|
177
322
|
},
|
|
178
323
|
},
|
|
179
324
|
}
|
|
180
325
|
```
|
|
181
326
|
|
|
182
|
-
|
|
327
|
+
Behavior notes:
|
|
183
328
|
|
|
184
|
-
-
|
|
329
|
+
- sent immediately after inbound is accepted (pre-reply)
|
|
330
|
+
- failures are logged but do not block normal reply delivery
|
|
331
|
+
- group mode `mentions` reacts on mention-triggered turns; group activation `always` acts as bypass for this check
|
|
332
|
+
- WhatsApp uses `channels.whatsapp.ackReaction` (legacy `messages.ackReaction` is not used here)
|
|
185
333
|
|
|
186
|
-
##
|
|
334
|
+
## Multi-account and credentials
|
|
187
335
|
|
|
188
|
-
|
|
189
|
-
|
|
336
|
+
<AccordionGroup>
|
|
337
|
+
<Accordion title="Account selection and defaults">
|
|
338
|
+
- account ids come from `channels.whatsapp.accounts`
|
|
339
|
+
- default account selection: `default` if present, otherwise first configured account id (sorted)
|
|
340
|
+
- account ids are normalized internally for lookup
|
|
341
|
+
</Accordion>
|
|
190
342
|
|
|
191
|
-
|
|
192
|
-
|
|
343
|
+
<Accordion title="Credential paths and legacy compatibility">
|
|
344
|
+
- current auth path: `~/.openclaw/credentials/whatsapp/<accountId>/creds.json`
|
|
345
|
+
- backup file: `creds.json.bak`
|
|
346
|
+
- legacy default auth in `~/.openclaw/credentials/` is still recognized/migrated for default-account flows
|
|
347
|
+
</Accordion>
|
|
193
348
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
- Codes expire after 1 hour; pending requests are capped at 3 per channel.
|
|
349
|
+
<Accordion title="Logout behavior">
|
|
350
|
+
`openclaw channels logout --channel whatsapp [--account <id>]` clears WhatsApp auth state for that account.
|
|
197
351
|
|
|
198
|
-
|
|
199
|
-
Yes, by routing each sender to a different agent via `bindings` (peer `kind: "direct"`, sender E.164 like `+15551234567`). Replies still come from the **same WhatsApp account**, and direct chats collapse to each agent's main session, so use **one agent per person**. DM access control (`dmPolicy`/`allowFrom`) is global per WhatsApp account. See [Multi-Agent Routing](/concepts/multi-agent).
|
|
352
|
+
In legacy auth directories, `oauth.json` is preserved while Baileys auth files are removed.
|
|
200
353
|
|
|
201
|
-
|
|
202
|
-
|
|
354
|
+
</Accordion>
|
|
355
|
+
</AccordionGroup>
|
|
203
356
|
|
|
204
|
-
##
|
|
357
|
+
## Tools, actions, and config writes
|
|
205
358
|
|
|
206
|
-
-
|
|
207
|
-
-
|
|
359
|
+
- Agent tool support includes WhatsApp reaction action (`react`).
|
|
360
|
+
- Action gates:
|
|
361
|
+
- `channels.whatsapp.actions.reactions`
|
|
362
|
+
- `channels.whatsapp.actions.polls`
|
|
363
|
+
- Channel-initiated config writes are enabled by default (disable via `channels.whatsapp.configWrites=false`).
|
|
208
364
|
|
|
209
|
-
|
|
210
|
-
[Replying to +1555 id:ABC123]
|
|
211
|
-
<quoted text or <media:...>>
|
|
212
|
-
[/Replying]
|
|
213
|
-
```
|
|
365
|
+
## Troubleshooting
|
|
214
366
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
- `ReplyToSender` = E.164 when known
|
|
219
|
-
- Media-only inbound messages use placeholders:
|
|
220
|
-
- `<media:image|video|audio|document|sticker>`
|
|
367
|
+
<AccordionGroup>
|
|
368
|
+
<Accordion title="Not linked (QR required)">
|
|
369
|
+
Symptom: channel status reports not linked.
|
|
221
370
|
|
|
222
|
-
|
|
371
|
+
Fix:
|
|
223
372
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
- `always`: always triggers.
|
|
229
|
-
- `/activation mention|always` is owner-only and must be sent as a standalone message.
|
|
230
|
-
- Owner = `channels.whatsapp.allowFrom` (or self E.164 if unset).
|
|
231
|
-
- **History injection** (pending-only):
|
|
232
|
-
- Recent _unprocessed_ messages (default 50) inserted under:
|
|
233
|
-
`[Chat messages since your last reply - for context]` (messages already in the session are not re-injected)
|
|
234
|
-
- Current message under:
|
|
235
|
-
`[Current message - respond to this]`
|
|
236
|
-
- Sender suffix appended: `[from: Name (+E164)]`
|
|
237
|
-
- Group metadata cached 5 min (subject + participants).
|
|
373
|
+
```bash
|
|
374
|
+
openclaw channels login --channel whatsapp
|
|
375
|
+
openclaw channels status
|
|
376
|
+
```
|
|
238
377
|
|
|
239
|
-
|
|
378
|
+
</Accordion>
|
|
240
379
|
|
|
241
|
-
|
|
242
|
-
|
|
380
|
+
<Accordion title="Linked but disconnected / reconnect loop">
|
|
381
|
+
Symptom: linked account with repeated disconnects or reconnect attempts.
|
|
243
382
|
|
|
244
|
-
|
|
383
|
+
Fix:
|
|
245
384
|
|
|
246
|
-
|
|
385
|
+
```bash
|
|
386
|
+
openclaw doctor
|
|
387
|
+
openclaw logs --follow
|
|
388
|
+
```
|
|
247
389
|
|
|
248
|
-
|
|
390
|
+
If needed, re-link with `channels login`.
|
|
249
391
|
|
|
250
|
-
|
|
251
|
-
{
|
|
252
|
-
"whatsapp": {
|
|
253
|
-
"ackReaction": {
|
|
254
|
-
"emoji": "👀",
|
|
255
|
-
"direct": true,
|
|
256
|
-
"group": "mentions"
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
```
|
|
392
|
+
</Accordion>
|
|
261
393
|
|
|
262
|
-
|
|
394
|
+
<Accordion title="No active listener when sending">
|
|
395
|
+
Outbound sends fail fast when no active gateway listener exists for the target account.
|
|
263
396
|
|
|
264
|
-
|
|
265
|
-
- `direct` (boolean, default: `true`): Send reactions in direct/DM chats.
|
|
266
|
-
- `group` (string, default: `"mentions"`): Group chat behavior:
|
|
267
|
-
- `"always"`: React to all group messages (even without @mention)
|
|
268
|
-
- `"mentions"`: React only when bot is @mentioned
|
|
269
|
-
- `"never"`: Never react in groups
|
|
397
|
+
Make sure gateway is running and the account is linked.
|
|
270
398
|
|
|
271
|
-
|
|
399
|
+
</Accordion>
|
|
272
400
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
401
|
+
<Accordion title="Group messages unexpectedly ignored">
|
|
402
|
+
Check in this order:
|
|
403
|
+
|
|
404
|
+
- `groupPolicy`
|
|
405
|
+
- `groupAllowFrom` / `allowFrom`
|
|
406
|
+
- `groups` allowlist entries
|
|
407
|
+
- mention gating (`requireMention` + mention patterns)
|
|
408
|
+
|
|
409
|
+
</Accordion>
|
|
410
|
+
|
|
411
|
+
<Accordion title="Bun runtime warning">
|
|
412
|
+
WhatsApp gateway runtime should use Node. Bun is flagged as incompatible for stable WhatsApp/Telegram gateway operation.
|
|
413
|
+
</Accordion>
|
|
414
|
+
</AccordionGroup>
|
|
415
|
+
|
|
416
|
+
## Configuration reference pointers
|
|
417
|
+
|
|
418
|
+
Primary reference:
|
|
419
|
+
|
|
420
|
+
- [Configuration reference - WhatsApp](/gateway/configuration-reference#whatsapp)
|
|
421
|
+
|
|
422
|
+
High-signal WhatsApp fields:
|
|
423
|
+
|
|
424
|
+
- access: `dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`, `groups`
|
|
425
|
+
- delivery: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `sendReadReceipts`, `ackReaction`
|
|
426
|
+
- multi-account: `accounts.<id>.enabled`, `accounts.<id>.authDir`, account-level overrides
|
|
427
|
+
- operations: `configWrites`, `debounceMs`, `web.enabled`, `web.heartbeatSeconds`, `web.reconnect.*`
|
|
428
|
+
- session behavior: `session.dmScope`, `historyLimit`, `dmHistoryLimit`, `dms.<id>.historyLimit`
|
|
429
|
+
|
|
430
|
+
## Related
|
|
288
431
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
-
|
|
292
|
-
- In groups with `requireMention: false` (activation: always), `group: "mentions"` will react to all messages (not just @mentions).
|
|
293
|
-
- Fire-and-forget: reaction failures are logged but don't prevent the bot from replying.
|
|
294
|
-
- Participant JID is automatically included for group reactions.
|
|
295
|
-
- WhatsApp ignores `messages.ackReaction`; use `channels.whatsapp.ackReaction` instead.
|
|
296
|
-
|
|
297
|
-
## Agent tool (reactions)
|
|
298
|
-
|
|
299
|
-
- Tool: `whatsapp` with `react` action (`chatJid`, `messageId`, `emoji`, optional `remove`).
|
|
300
|
-
- Optional: `participant` (group sender), `fromMe` (reacting to your own message), `accountId` (multi-account).
|
|
301
|
-
- Reaction removal semantics: see [/tools/reactions](/tools/reactions).
|
|
302
|
-
- Tool gating: `channels.whatsapp.actions.reactions` (default: enabled).
|
|
303
|
-
|
|
304
|
-
## Limits
|
|
305
|
-
|
|
306
|
-
- Outbound text is chunked to `channels.whatsapp.textChunkLimit` (default 4000).
|
|
307
|
-
- Optional newline chunking: set `channels.whatsapp.chunkMode="newline"` to split on blank lines (paragraph boundaries) before length chunking.
|
|
308
|
-
- Inbound media saves are capped by `channels.whatsapp.mediaMaxMb` (default 50 MB).
|
|
309
|
-
- Outbound media items are capped by `agents.defaults.mediaMaxMb` (default 5 MB).
|
|
310
|
-
|
|
311
|
-
## Outbound send (text + media)
|
|
312
|
-
|
|
313
|
-
- Uses active web listener; error if gateway not running.
|
|
314
|
-
- Text chunking: 4k max per message (configurable via `channels.whatsapp.textChunkLimit`, optional `channels.whatsapp.chunkMode`).
|
|
315
|
-
- Media:
|
|
316
|
-
- Image/video/audio/document supported.
|
|
317
|
-
- Audio sent as PTT; `audio/ogg` => `audio/ogg; codecs=opus`.
|
|
318
|
-
- Caption only on first media item.
|
|
319
|
-
- Media fetch supports HTTP(S) and local paths.
|
|
320
|
-
- Animated GIFs: WhatsApp expects MP4 with `gifPlayback: true` for inline looping.
|
|
321
|
-
- CLI: `openclaw message send --media <mp4> --gif-playback`
|
|
322
|
-
- Gateway: `send` params include `gifPlayback: true`
|
|
323
|
-
|
|
324
|
-
## Voice notes (PTT audio)
|
|
325
|
-
|
|
326
|
-
WhatsApp sends audio as **voice notes** (PTT bubble).
|
|
327
|
-
|
|
328
|
-
- Best results: OGG/Opus. OpenClaw rewrites `audio/ogg` to `audio/ogg; codecs=opus`.
|
|
329
|
-
- `[[audio_as_voice]]` is ignored for WhatsApp (audio already ships as voice note).
|
|
330
|
-
|
|
331
|
-
## Media limits + optimization
|
|
332
|
-
|
|
333
|
-
- Default outbound cap: 5 MB (per media item).
|
|
334
|
-
- Override: `agents.defaults.mediaMaxMb`.
|
|
335
|
-
- Images are auto-optimized to JPEG under cap (resize + quality sweep).
|
|
336
|
-
- Oversize media => error; media reply falls back to text warning.
|
|
337
|
-
|
|
338
|
-
## Heartbeats
|
|
339
|
-
|
|
340
|
-
- **Gateway heartbeat** logs connection health (`web.heartbeatSeconds`, default 60s).
|
|
341
|
-
- **Agent heartbeat** can be configured per agent (`agents.list[].heartbeat`) or globally
|
|
342
|
-
via `agents.defaults.heartbeat` (fallback when no per-agent entries are set).
|
|
343
|
-
- Uses the configured heartbeat prompt (default: `Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.`) + `HEARTBEAT_OK` skip behavior.
|
|
344
|
-
- Delivery defaults to the last used channel (or configured target).
|
|
345
|
-
|
|
346
|
-
## Reconnect behavior
|
|
347
|
-
|
|
348
|
-
- Backoff policy: `web.reconnect`:
|
|
349
|
-
- `initialMs`, `maxMs`, `factor`, `jitter`, `maxAttempts`.
|
|
350
|
-
- If maxAttempts reached, web monitoring stops (degraded).
|
|
351
|
-
- Logged-out => stop and require re-link.
|
|
352
|
-
|
|
353
|
-
## Config quick map
|
|
354
|
-
|
|
355
|
-
- `channels.whatsapp.dmPolicy` (DM policy: pairing/allowlist/open/disabled).
|
|
356
|
-
- `channels.whatsapp.selfChatMode` (same-phone setup; bot uses your personal WhatsApp number).
|
|
357
|
-
- `channels.whatsapp.allowFrom` (DM allowlist). WhatsApp uses E.164 phone numbers (no usernames).
|
|
358
|
-
- `channels.whatsapp.mediaMaxMb` (inbound media save cap).
|
|
359
|
-
- `channels.whatsapp.ackReaction` (auto-reaction on message receipt: `{emoji, direct, group}`).
|
|
360
|
-
- `channels.whatsapp.accounts.<accountId>.*` (per-account settings + optional `authDir`).
|
|
361
|
-
- `channels.whatsapp.accounts.<accountId>.mediaMaxMb` (per-account inbound media cap).
|
|
362
|
-
- `channels.whatsapp.accounts.<accountId>.ackReaction` (per-account ack reaction override).
|
|
363
|
-
- `channels.whatsapp.groupAllowFrom` (group sender allowlist).
|
|
364
|
-
- `channels.whatsapp.groupPolicy` (group policy).
|
|
365
|
-
- `channels.whatsapp.historyLimit` / `channels.whatsapp.accounts.<accountId>.historyLimit` (group history context; `0` disables).
|
|
366
|
-
- `channels.whatsapp.dmHistoryLimit` (DM history limit in user turns). Per-user overrides: `channels.whatsapp.dms["<phone>"].historyLimit`.
|
|
367
|
-
- `channels.whatsapp.groups` (group allowlist + mention gating defaults; use `"*"` to allow all)
|
|
368
|
-
- `channels.whatsapp.actions.reactions` (gate WhatsApp tool reactions).
|
|
369
|
-
- `agents.list[].groupChat.mentionPatterns` (or `messages.groupChat.mentionPatterns`)
|
|
370
|
-
- `messages.groupChat.historyLimit`
|
|
371
|
-
- `channels.whatsapp.messagePrefix` (inbound prefix; per-account: `channels.whatsapp.accounts.<accountId>.messagePrefix`; deprecated: `messages.messagePrefix`)
|
|
372
|
-
- `messages.responsePrefix` (outbound prefix)
|
|
373
|
-
- `agents.defaults.mediaMaxMb`
|
|
374
|
-
- `agents.defaults.heartbeat.every`
|
|
375
|
-
- `agents.defaults.heartbeat.model` (optional override)
|
|
376
|
-
- `agents.defaults.heartbeat.target`
|
|
377
|
-
- `agents.defaults.heartbeat.to`
|
|
378
|
-
- `agents.defaults.heartbeat.session`
|
|
379
|
-
- `agents.list[].heartbeat.*` (per-agent overrides)
|
|
380
|
-
- `session.*` (scope, idle, store, mainKey)
|
|
381
|
-
- `web.enabled` (disable channel startup when false)
|
|
382
|
-
- `web.heartbeatSeconds`
|
|
383
|
-
- `web.reconnect.*`
|
|
384
|
-
|
|
385
|
-
## Logs + troubleshooting
|
|
386
|
-
|
|
387
|
-
- Subsystems: `whatsapp/inbound`, `whatsapp/outbound`, `web-heartbeat`, `web-reconnect`.
|
|
388
|
-
- Log file: `/tmp/openclaw/openclaw-YYYY-MM-DD.log` (configurable).
|
|
389
|
-
- Troubleshooting guide: [Gateway troubleshooting](/gateway/troubleshooting).
|
|
390
|
-
|
|
391
|
-
## Troubleshooting (quick)
|
|
392
|
-
|
|
393
|
-
**Not linked / QR login required**
|
|
394
|
-
|
|
395
|
-
- Symptom: `channels status` shows `linked: false` or warns “Not linked”.
|
|
396
|
-
- Fix: run `openclaw channels login` on the gateway host and scan the QR (WhatsApp → Settings → Linked Devices).
|
|
397
|
-
|
|
398
|
-
**Linked but disconnected / reconnect loop**
|
|
399
|
-
|
|
400
|
-
- Symptom: `channels status` shows `running, disconnected` or warns “Linked but disconnected”.
|
|
401
|
-
- Fix: `openclaw doctor` (or restart the gateway). If it persists, relink via `channels login` and inspect `openclaw logs --follow`.
|
|
402
|
-
|
|
403
|
-
**Bun runtime**
|
|
404
|
-
|
|
405
|
-
- Bun is **not recommended**. WhatsApp (Baileys) and Telegram are unreliable on Bun.
|
|
406
|
-
Run the gateway with **Node**. (See Getting Started runtime note.)
|
|
432
|
+
- [Pairing](/channels/pairing)
|
|
433
|
+
- [Channel routing](/channels/channel-routing)
|
|
434
|
+
- [Troubleshooting](/channels/troubleshooting)
|