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.
Files changed (531) hide show
  1. package/CHANGELOG.md +106 -0
  2. package/dist/{accounts-DbzMEfKN.js → accounts-DCDeFTra.js} +2 -2
  3. package/dist/{accounts-C2elk6PC.js → accounts-DeqIQjo1.js} +2 -2
  4. package/dist/{acp-cli-CVFTdsQY.js → acp-cli-CeYI4XRd.js} +15 -16
  5. package/dist/{acp-cli-BpJwIyLl.js → acp-cli-rNbGXICg.js} +14 -15
  6. package/dist/{agent-Bz1r5O8q.js → agent-BvNJF5QL.js} +19 -15
  7. package/dist/{agent-22-R4bNS.js → agent-CyMxTyrG.js} +20 -16
  8. package/dist/{agent-scope-D8miw9q_.js → agent-scope-BIEhVP4_.js} +172 -4
  9. package/dist/{agent-scope-CGmuusG9.js → agent-scope-CQCus0rI.js} +3 -3
  10. package/dist/{agent-scope-DQuy3dwI.js → agent-scope-CsRbLH4l.js} +4 -4
  11. package/dist/{agent-scope-BEf5crnU.js → agent-scope-DPIFau3f.js} +5 -1
  12. package/dist/audio-preflight-BU8W7uxc.js +60 -0
  13. package/dist/audio-preflight-CGsumMzb.js +60 -0
  14. package/dist/audio-preflight-SLmkJI6-.js +74 -0
  15. package/dist/audio-preflight-jZc5mFCZ.js +71 -0
  16. package/dist/{audit-C4wLaF0D.js → audit-Dmww_503.js} +71 -19
  17. package/dist/{audit-CY-yopxa.js → audit-wPu26VMb.js} +72 -20
  18. package/dist/{tailscale-DU6DgqVy.js → auth-9x3lqfIY.js} +208 -3
  19. package/dist/{tailscale-Cu-2HNvU.js → auth-CQNl_IaI.js} +190 -3
  20. package/dist/{auth-health-BFKUoCwJ.js → auth-health-C4L4FGBA.js} +1 -1
  21. package/dist/{auth-health-d7BMZlWG.js → auth-health-j6epgQbq.js} +1 -1
  22. package/dist/{auth-profiles-Bv1AEm-Y.js → auth-profiles-ByNs3eEm.js} +87 -31
  23. package/dist/build-info.json +3 -3
  24. package/dist/bundled/boot-md/handler.js +28 -22
  25. package/dist/bundled/session-memory/handler.js +33 -22
  26. package/dist/{call-7yrB6v4I.js → call-DVYCIV8m.js} +5 -5
  27. package/dist/{call-Bek1xlgk.js → call-SolyGS1r.js} +6 -6
  28. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  29. package/dist/{channel-options-3mdYN0C_.js → channel-options-BwC2yQcR.js} +4 -4
  30. package/dist/{channel-options-DJ0b1m7B.js → channel-options-Cq9BVDkP.js} +12 -7
  31. package/dist/{channel-selection-RZimme3j.js → channel-selection-D4D6ImhN.js} +2 -2
  32. package/dist/{channel-selection-B9b7Kuit.js → channel-selection-MZAHm4U8.js} +2 -2
  33. package/dist/{channels-cli-CYbK2Dku.js → channels-cli-9Dsk9Qm7.js} +57 -53
  34. package/dist/{channels-cli-BFznbGOs.js → channels-cli-BJUppQll.js} +59 -55
  35. package/dist/{channels-status-issues-B3KkflfR.js → channels-status-issues-D7GSV1GS.js} +1 -1
  36. package/dist/{channels-status-issues-DQkRaZts.js → channels-status-issues-DDAWeT-6.js} +1 -1
  37. package/dist/{chrome-Db7w64LF.js → chrome-BfB6JdKF.js} +4 -4
  38. package/dist/{chrome-Dm-EgOjJ.js → chrome-Cvr-57lg.js} +6 -5
  39. package/dist/{chrome-CF16STk9.js → chrome-DL0avO8n.js} +2 -1
  40. package/dist/{chrome-yIKmOzCO.js → chrome-foEwx3lN.js} +5 -4
  41. package/dist/{clack-prompter-BCiBkJVr.js → clack-prompter-Bz3Mmcl-.js} +5 -5
  42. package/dist/{clack-prompter-DuBVnTKy.js → clack-prompter-ChCGXfyt.js} +4 -4
  43. package/dist/cli/daemon-cli.js +1 -1
  44. package/dist/{cli-Cl3PdJei.js → cli-ZR9ugUBX.js} +42 -38
  45. package/dist/cli-miPe4Ujz.js +93 -0
  46. package/dist/{client-6xKrRC-1.js → client-BrYfyoDK.js} +54 -5
  47. package/dist/{client-DMloFP_O.js → client-CTwXnRl7.js} +54 -5
  48. package/dist/{command-format-ayFsmwwz.js → command-format-Bxe0mWee.js} +1 -1
  49. package/dist/{command-options-BTAzyqqb.js → command-options-BvgxzPbK.js} +9 -4
  50. package/dist/{commands-CjEGXOZ_.js → commands-BX_OIIVR.js} +4 -4
  51. package/dist/{completion-cli-DrJGfJGl.js → completion-cli-CR77-jyv.js} +3 -3
  52. package/dist/{completion-cli-DOec3E2Z.js → completion-cli-DnjpxAag.js} +30 -30
  53. package/dist/{config-B00lvFac.js → config-Bdhomfei.js} +21 -7
  54. package/dist/{config-XBdA0ciN.js → config-BvMsmctM.js} +83 -9
  55. package/dist/{config-BqGVMf1y.js → config-QYrbd7x7.js} +60 -6
  56. package/dist/{config--NUdpACy.js → config-aFQssWKX.js} +21 -7
  57. package/dist/{config-guard-4kCO_rnQ.js → config-guard-CljaSxJd.js} +160 -51
  58. package/dist/{configure-B69emwZv.js → configure-BXLiucXo.js} +28 -25
  59. package/dist/{configure-sMhpLzFf.js → configure-BYPqXzGZ.js} +28 -25
  60. package/dist/control-auth-8Cf4WXpR.js +54 -0
  61. package/dist/control-auth-DBCu3qyv.js +54 -0
  62. package/dist/{control-service-Db_1V-KY.js → control-service-B5KnPqGP.js} +11 -5
  63. package/dist/{control-service-IRAmbcbN.js → control-service-DKnttEus.js} +10 -4
  64. package/dist/control-ui/assets/{index-CnB9IO4a.js → index-B4LPvte9.js} +369 -369
  65. package/dist/control-ui/assets/index-B4LPvte9.js.map +1 -0
  66. package/dist/control-ui/index.html +1 -1
  67. package/dist/{cron-cli-Cum2324v.js → cron-cli-D7BRjDv2.js} +20 -20
  68. package/dist/{cron-cli-DhUWcYdk.js → cron-cli-z1zk_FXQ.js} +19 -19
  69. package/dist/{daemon-cli-q7nkEF5-.js → daemon-cli-BDkU2ocb.js} +60 -21
  70. package/dist/{daemon-cli-CTC2CHci.js → daemon-cli-cNSF93-v.js} +59 -20
  71. package/dist/{daemon-runtime-c0uXH4Dl.js → daemon-runtime-B0tg_LsX.js} +3 -3
  72. package/dist/{daemon-runtime-UsK-tOty.js → daemon-runtime-Bsjeut6m.js} +3 -3
  73. package/dist/{deliver-hf-WKyWd.js → deliver-CIU9Npgs.js} +373 -281
  74. package/dist/{deliver-CT6KiDqO.js → deliver-DYYCo1G7.js} +369 -278
  75. package/dist/{deliver-T9d44OpZ.js → deliver-LsxKETro.js} +371 -279
  76. package/dist/{deliver-CPy8jYj9.js → deliver-xUU3mGHo.js} +369 -277
  77. package/dist/{deps-Bv1kLtwo.js → deps-QSwGcoNZ.js} +2 -2
  78. package/dist/{deps-DFQdAWQc.js → deps-lAAA2zYI.js} +2 -2
  79. package/dist/{devices-cli-Cm7U1py9.js → devices-cli-BG3-2oqt.js} +14 -14
  80. package/dist/{devices-cli-ZpjlfK-e.js → devices-cli-VIQtOvt_.js} +14 -14
  81. package/dist/{directory-cli-B14TUSJA.js → directory-cli-BCJwjVC0.js} +16 -16
  82. package/dist/{directory-cli-67kzd4I5.js → directory-cli-jYzZ02gk.js} +14 -14
  83. package/dist/{dispatcher-3ElQWGVI.js → dispatcher-DY51b-Zc.js} +2 -2
  84. package/dist/{dns-cli-CU-xfhTN.js → dns-cli-DHIiMJjS.js} +12 -12
  85. package/dist/{dns-cli-Dqj7O6Q_.js → dns-cli-pZlv87Ib.js} +11 -11
  86. package/dist/{docs-cli-CamBqzb5.js → docs-cli-2JDiwfzP.js} +8 -8
  87. package/dist/{docs-cli-Cj3L5oqB.js → docs-cli-BhkYqoIQ.js} +7 -7
  88. package/dist/{doctor-BV1kvbMm.js → doctor-Bf8EhNtA.js} +36 -35
  89. package/dist/{doctor-BJirShBi.js → doctor-sYG5V4Co.js} +34 -33
  90. package/dist/entry.js +56 -18
  91. package/dist/{env-BxRc6wWv.js → env-ONzUVAG2.js} +1 -1
  92. package/dist/{exec-CijMSZd9.js → exec-B8lXct-k.js} +503 -14
  93. package/dist/{exec-B8JKbXKW.js → exec-CACT5OAW.js} +1 -1
  94. package/dist/{exec-57A8Rlc8.js → exec-CJFFoM7H.js} +32 -13
  95. package/dist/{exec-Cv_Ofd1m.js → exec-YIosokWE.js} +1 -1
  96. package/dist/{exec-approvals-cli-DEzz9Iai.js → exec-approvals-cli-7LH0lwhO.js} +21 -21
  97. package/dist/{exec-approvals-cli-DhXj3hQX.js → exec-approvals-cli-apGnQbpj.js} +21 -21
  98. package/dist/extensionAPI.js +7733 -8746
  99. package/dist/fetch-DmiOpALK.js +274 -0
  100. package/dist/fetch-timeout-BEtUjM1S.js +274 -0
  101. package/dist/fetch-timeout-DEoXG_SF.js +274 -0
  102. package/dist/fetch-timeout-DTK9vxex.js +274 -0
  103. package/dist/{gateway-cli-D1EdIq8I.js → gateway-cli-DUdYxlZS.js} +491 -136
  104. package/dist/{gateway-cli-B_xDUDy2.js → gateway-cli-DbvWmE-9.js} +495 -140
  105. package/dist/{gateway-rpc-3B5y445n.js → gateway-rpc-BByb2Snz.js} +3 -3
  106. package/dist/{gateway-rpc-BoL2vinh.js → gateway-rpc-wXSCUZXj.js} +3 -3
  107. package/dist/{github-copilot-auth-Omqrto0J.js → github-copilot-auth-D7ewvpMd.js} +205 -17
  108. package/dist/{github-copilot-auth-CZxurvdz.js → github-copilot-auth-DDispnyz.js} +205 -17
  109. package/dist/{github-copilot-token-SLWintYd.js → github-copilot-token-Cfs0Wxr8.js} +1 -1
  110. package/dist/{gmail-setup-utils-BXQKsLtI.js → gmail-setup-utils-Cfns8TQx.js} +3 -3
  111. package/dist/{gmail-setup-utils-CHcssBOA.js → gmail-setup-utils-DJb-_5kO.js} +4 -4
  112. package/dist/{health-format-Dy1caGsq.js → health-format-KGPokKJH.js} +97 -42
  113. package/dist/{health-format-DrGFg8bx.js → health-format-LZDxu3rv.js} +95 -40
  114. package/dist/{help-format-DAj7l5uV.js → help-format-C48TXngO.js} +1 -1
  115. package/dist/{help-format-CUnac_bT.js → help-format-R5fLToDw.js} +1 -1
  116. package/dist/{hooks-cli-ptEf6TIM.js → hooks-cli-CT8JCRkH.js} +51 -46
  117. package/dist/{hooks-cli-Bhf5VRp1.js → hooks-cli-S1MKumJO.js} +49 -44
  118. package/dist/{hooks-status-Br-2bK2G.js → hooks-status-Cw0xD8Lt.js} +3 -3
  119. package/dist/{hooks-status-DNQJSa4B.js → hooks-status-D9MhwHRp.js} +3 -3
  120. package/dist/{image-rOFfK3PJ.js → image-Brk1sJbw.js} +10 -7
  121. package/dist/{image-fUwR7slg.js → image-C4Nn2p3e.js} +10 -7
  122. package/dist/{image-Ds4NLGPR.js → image-DgtfXMcX.js} +9 -6
  123. package/dist/{image-Dnnxt82I.js → image-RKwc3fsL.js} +8 -5
  124. package/dist/index.js +208 -97
  125. package/dist/{installs-CRSjQxbR.js → installs-CrLcWYHe.js} +8 -7
  126. package/dist/{installs-89zeUsVn.js → installs-DscWb9b9.js} +8 -7
  127. package/dist/{links-7M-j83As.js → links-B8LAzWwg.js} +1 -1
  128. package/dist/{links-C591fM9M.js → links-Eax1UO3w.js} +1 -1
  129. package/dist/llm-slug-generator.js +18 -19
  130. package/dist/{loader-wXwp4rZJ.js → loader-KjT074JR.js} +5722 -6888
  131. package/dist/{logging-MMRGFxGI.js → logging-BAyPwvdH.js} +1 -1
  132. package/dist/{logging-DuK6YXuK.js → logging-CRq4h04P.js} +2 -2
  133. package/dist/{login-qr-wM8BnKJh.js → login-qr-B6ZgAuIf.js} +5 -5
  134. package/dist/{login-qr-CPEsT6dN.js → login-qr-Bua-p0nG.js} +3 -4
  135. package/dist/{login-qr-CGEu5TU-.js → login-qr-CuvemJj4.js} +6 -6
  136. package/dist/{login-qr-DH150tTp.js → login-qr-Djr1JfIf.js} +2 -2
  137. package/dist/{logs-cli-ClgkHnfT.js → logs-cli-9IAV7rWY.js} +38 -22
  138. package/dist/{logs-cli-CmfINsOj.js → logs-cli-EiKzUFPa.js} +37 -21
  139. package/dist/{manager-DYo4PlVM.js → manager-BIMh_eSm.js} +7 -8
  140. package/dist/{manager-D6EbxDV4.js → manager-CwinWQoz.js} +5 -5
  141. package/dist/{manager-BbnHek5T.js → manager-DkqF1GiK.js} +9 -9
  142. package/dist/{manager-CcVYv0N5.js → manager-T1XfGchB.js} +8 -8
  143. package/dist/{manifest-registry-3It8Z8yN.js → manifest-registry-CQhdnDBZ.js} +40 -2
  144. package/dist/{manifest-registry-D5SiA3xq.js → manifest-registry-u0okVSkU.js} +40 -2
  145. package/dist/{message-channel-Cu61-7H6.js → message-channel-BLi2a6Yw.js} +1 -1
  146. package/dist/{message-channel-BlgPSDAh.js → message-channel-C_MmebBt.js} +1 -1
  147. package/dist/{model-auth-ioeR_zLX.js → model-auth-CabXIF6O.js} +116 -34
  148. package/dist/{model-selection-BK7DuyH8.js → model-selection-BLuqsGVB.js} +86 -30
  149. package/dist/{model-selection-CezC36lH.js → model-selection-C1GmkTAV.js} +84 -28
  150. package/dist/{models-cli-C3uGdOrd.js → models-cli-9jmDv-h3.js} +52 -48
  151. package/dist/{models-cli-CUIVPgXE.js → models-cli-zS9rtWz8.js} +53 -49
  152. package/dist/{node-cli-BxBGSuPE.js → node-cli-CrpTxTTs.js} +28 -26
  153. package/dist/{node-cli-CdYAsuQQ.js → node-cli-wemUMCg-.js} +28 -26
  154. package/dist/{node-service-u8g85nD3.js → node-service-C8DTHTMg.js} +2 -2
  155. package/dist/{node-service-CM5vkdIo.js → node-service-WQuEKz6W.js} +2 -2
  156. package/dist/{nodes-cli-By6yeCTB.js → nodes-cli-BaU2SIFw.js} +20 -20
  157. package/dist/{nodes-cli-BaVMTAPc.js → nodes-cli-Dx23D72n.js} +20 -20
  158. package/dist/{nodes-screen-Dvl_ohUY.js → nodes-screen-C0IuBqUL.js} +1 -1
  159. package/dist/{note-5WqioBRA.js → note-BhRSeNeu.js} +2 -2
  160. package/dist/{note-Ci08TSbV.js → note-hhtubr2j.js} +1 -1
  161. package/dist/{onboard-channels-DxXvp8og.js → onboard-channels-C501x8GI.js} +8 -8
  162. package/dist/{onboard-channels-CXhnVy4E.js → onboard-channels-Dxzroasd.js} +8 -8
  163. package/dist/{onboard-skills-CBxsRGyf.js → onboard-skills-DV0Qzvjj.js} +440 -136
  164. package/dist/{onboard-skills-DQwOQ6Ry.js → onboard-skills-rlBHcu3Q.js} +439 -135
  165. package/dist/{onboarding-Du_7qEng.js → onboarding-CN-EDLjd.js} +38 -38
  166. package/dist/{openclaw-root-JLDMp6ux.js → openclaw-root-1VeFrph_.js} +4 -0
  167. package/dist/{openclaw-root-Dw6gumSU.js → openclaw-root-BNlEap4i.js} +4 -0
  168. package/dist/{pairing-cli-CRQDpj8f.js → pairing-cli-CDHG4xuI.js} +15 -15
  169. package/dist/{pairing-cli-Cng1KFWw.js → pairing-cli-CQP34Dlx.js} +15 -15
  170. package/dist/{pairing-labels-Ciu3Zoxj.js → pairing-labels-B6CN0SNH.js} +1 -1
  171. package/dist/{pairing-labels-CWFEtSc3.js → pairing-labels-CgNHnjzT.js} +1 -1
  172. package/dist/{pairing-store-c-QQ2u8p.js → pairing-store-CmlRVqOz.js} +2 -2
  173. package/dist/{pairing-store-CgXR3ZWJ.js → pairing-store-Dp5_JGnG.js} +3 -3
  174. package/dist/{path-env-CXWUFfFv.js → path-env-CLvYNwtL.js} +1 -1
  175. package/dist/{path-env-BgLvMbz_.js → path-env-CaYUVIML.js} +2 -2
  176. package/dist/{paths-MnZaxqPw.js → paths-B0a4ywSO.js} +30 -5
  177. package/dist/{paths-Bkhd_qY8.js → paths-B49s6UZQ.js} +30 -5
  178. package/dist/{paths-DL6EIRTw.js → paths-D0O87MfH.js} +30 -5
  179. package/dist/{paths-IivnSNkP.js → paths-DLINmNFQ.js} +31 -6
  180. package/dist/{pi-embedded-CgPTEqlB.js → pi-embedded-Ctrt2kz0.js} +8759 -9600
  181. package/dist/{pi-embedded-helpers-DYH6OWft.js → pi-embedded-helpers-CMKLjW6X.js} +68 -9
  182. package/dist/{pi-embedded-helpers-y1_Se0yq.js → pi-embedded-helpers-CUzTc1v6.js} +241 -24
  183. package/dist/{pi-embedded-helpers-Bkpd4fTr.js → pi-embedded-helpers-DfwkwPYD.js} +67 -8
  184. package/dist/{pi-embedded-helpers-BbWRSUnc.js → pi-embedded-helpers-WDwx99UA.js} +347 -32
  185. package/dist/{pi-tools.policy-akYsGFiA.js → pi-tools.policy-BpsROZbz.js} +4 -4
  186. package/dist/{plugin-auto-enable-lZwe2yX5.js → plugin-auto-enable-Bqhc3w5n.js} +5 -5
  187. package/dist/{plugin-auto-enable-AOSOJ-v1.js → plugin-auto-enable-PW76g_PJ.js} +5 -5
  188. package/dist/plugin-sdk/agents/bash-process-registry.d.ts +1 -0
  189. package/dist/plugin-sdk/agents/models-config.providers.d.ts +10 -0
  190. package/dist/plugin-sdk/agents/pi-embedded-helpers/errors.d.ts +5 -1
  191. package/dist/plugin-sdk/agents/pi-embedded-helpers.d.ts +1 -1
  192. package/dist/plugin-sdk/agents/pi-embedded-runner/google.d.ts +1 -0
  193. package/dist/plugin-sdk/agents/pi-embedded-runner/run/params.d.ts +2 -0
  194. package/dist/plugin-sdk/agents/pi-embedded-runner/run/payloads.d.ts +1 -0
  195. package/dist/plugin-sdk/agents/pi-embedded-runner/run/types.d.ts +2 -0
  196. package/dist/plugin-sdk/agents/pi-embedded-runner/types.d.ts +15 -0
  197. package/dist/plugin-sdk/agents/pi-embedded-subscribe.handlers.tools.d.ts +1 -1
  198. package/dist/plugin-sdk/agents/pi-embedded-subscribe.handlers.types.d.ts +2 -0
  199. package/dist/plugin-sdk/agents/pi-embedded-subscribe.types.d.ts +2 -0
  200. package/dist/plugin-sdk/agents/session-tool-result-guard-wrapper.d.ts +2 -0
  201. package/dist/plugin-sdk/agents/session-tool-result-guard.d.ts +4 -0
  202. package/dist/plugin-sdk/agents/tools/agent-step.d.ts +3 -0
  203. package/dist/plugin-sdk/agents/tools/browser-tool.schema.d.ts +1 -1
  204. package/dist/plugin-sdk/agents/tools/web-search.d.ts +10 -1
  205. package/dist/plugin-sdk/agents/usage.d.ts +1 -0
  206. package/dist/plugin-sdk/auto-reply/heartbeat.d.ts +1 -1
  207. package/dist/plugin-sdk/auto-reply/reply/get-reply-directives.d.ts +1 -0
  208. package/dist/plugin-sdk/auto-reply/reply/mentions.d.ts +1 -0
  209. package/dist/plugin-sdk/auto-reply/reply/model-selection.d.ts +3 -0
  210. package/dist/plugin-sdk/auto-reply/reply/reply-reference.d.ts +1 -1
  211. package/dist/plugin-sdk/auto-reply/reply/session-run-accounting.d.ts +11 -0
  212. package/dist/plugin-sdk/auto-reply/reply/session-usage.d.ts +8 -0
  213. package/dist/plugin-sdk/auto-reply/types.d.ts +2 -0
  214. package/dist/plugin-sdk/browser/control-auth.d.ts +13 -0
  215. package/dist/plugin-sdk/channels/plugins/onboarding/signal.d.ts +1 -0
  216. package/dist/plugin-sdk/cli/prompt.d.ts +1 -0
  217. package/dist/plugin-sdk/commands/agent/types.d.ts +2 -0
  218. package/dist/plugin-sdk/commands/onboard-types.d.ts +7 -1
  219. package/dist/plugin-sdk/config/sessions/paths.d.ts +7 -2
  220. package/dist/plugin-sdk/config/types.agents.d.ts +2 -0
  221. package/dist/plugin-sdk/config/types.discord.d.ts +5 -0
  222. package/dist/plugin-sdk/config/types.gateway.d.ts +15 -0
  223. package/dist/plugin-sdk/config/types.hooks.d.ts +15 -0
  224. package/dist/plugin-sdk/config/types.memory.d.ts +2 -0
  225. package/dist/plugin-sdk/config/zod-schema.agents.d.ts +1 -0
  226. package/dist/plugin-sdk/config/zod-schema.d.ts +13 -1
  227. package/dist/plugin-sdk/config/zod-schema.hooks.d.ts +1 -1
  228. package/dist/plugin-sdk/config/zod-schema.providers-core.d.ts +9 -0
  229. package/dist/plugin-sdk/config/zod-schema.providers.d.ts +4 -0
  230. package/dist/plugin-sdk/cron/service/jobs.d.ts +8 -0
  231. package/dist/plugin-sdk/cron/service/state.d.ts +1 -0
  232. package/dist/plugin-sdk/cron/types.d.ts +2 -0
  233. package/dist/plugin-sdk/discord/monitor/allow-list.d.ts +15 -0
  234. package/dist/plugin-sdk/discord/send.types.d.ts +5 -0
  235. package/dist/plugin-sdk/gateway/auth.d.ts +36 -0
  236. package/dist/plugin-sdk/gateway/protocol/index.d.ts +0 -3
  237. package/dist/plugin-sdk/gateway/protocol/schema/agent.d.ts +7 -1
  238. package/dist/plugin-sdk/gateway/session-utils.fs.d.ts +3 -1
  239. package/dist/plugin-sdk/index.js +935 -660
  240. package/dist/plugin-sdk/infra/binaries.d.ts +3 -0
  241. package/dist/plugin-sdk/infra/heartbeat-active-hours.d.ts +5 -0
  242. package/dist/plugin-sdk/infra/heartbeat-runner.d.ts +1 -0
  243. package/dist/plugin-sdk/infra/net/fetch-guard.d.ts +1 -0
  244. package/dist/plugin-sdk/infra/net/ssrf.d.ts +1 -0
  245. package/dist/plugin-sdk/infra/tailscale.d.ts +34 -0
  246. package/dist/plugin-sdk/infra/tmp-openclaw-dir.d.ts +10 -0
  247. package/dist/plugin-sdk/logging/console.d.ts +1 -0
  248. package/dist/plugin-sdk/logging/logger.d.ts +1 -1
  249. package/dist/plugin-sdk/logging/state.d.ts +1 -0
  250. package/dist/plugin-sdk/markdown/ir.d.ts +1 -1
  251. package/dist/plugin-sdk/markdown/whatsapp.d.ts +14 -0
  252. package/dist/plugin-sdk/media/input-files.d.ts +5 -0
  253. package/dist/plugin-sdk/media-understanding/audio-preflight.d.ts +16 -0
  254. package/dist/plugin-sdk/media-understanding/types.d.ts +1 -0
  255. package/dist/plugin-sdk/memory/backend-config.d.ts +2 -1
  256. package/dist/plugin-sdk/memory/qmd-manager.d.ts +2 -0
  257. package/dist/plugin-sdk/memory/qmd-query-parser.d.ts +8 -0
  258. package/dist/plugin-sdk/process/command-queue.d.ts +16 -0
  259. package/dist/plugin-sdk/routing/resolve-route.d.ts +3 -1
  260. package/dist/plugin-sdk/security/external-content.d.ts +1 -1
  261. package/dist/plugin-sdk/security/secret-equal.d.ts +1 -0
  262. package/dist/plugin-sdk/sessions/input-provenance.d.ts +16 -0
  263. package/dist/plugin-sdk/signal/monitor/event-handler.types.d.ts +8 -0
  264. package/dist/plugin-sdk/signal/monitor/mentions.d.ts +2 -0
  265. package/dist/plugin-sdk/slack/monitor/commands.d.ts +5 -0
  266. package/dist/plugin-sdk/telegram/bot-message-context.d.ts +2 -1
  267. package/dist/plugin-sdk/telegram/send.d.ts +3 -0
  268. package/dist/plugin-sdk/web/media.d.ts +2 -0
  269. package/dist/{plugins-Db5BiELK.js → plugins-4Hqd1WGf.js} +3 -3
  270. package/dist/{plugins-CNaHNND_.js → plugins-X7d_tfTE.js} +4 -4
  271. package/dist/{plugins-cli-8G-hQPCu.js → plugins-cli-Bgku3EGj.js} +253 -44
  272. package/dist/{plugins-cli-CDiocaDE.js → plugins-cli-CVToH3if.js} +257 -48
  273. package/dist/{ports-BeebfNCb.js → ports-qkt29rdC.js} +2 -2
  274. package/dist/{program-0Cj9YxRN.js → program-Cf7lkBur.js} +82 -80
  275. package/dist/{progress-DIQJt9Va.js → progress-C9kngsTD.js} +1 -1
  276. package/dist/{progress-Da1ehW-x.js → progress-DWqhRakV.js} +1 -1
  277. package/dist/{prompt-style-Dc0C5HC9.js → prompt-style-BFH5D5LN.js} +1 -1
  278. package/dist/{prompt-style-CjQRlDx4.js → prompt-style-CIbmaxSa.js} +1 -1
  279. package/dist/{pw-ai-C43wv1ZF.js → pw-ai-8mdv3h-d.js} +7 -6
  280. package/dist/{pw-ai-COWYvUfG.js → pw-ai-CM1IsSgZ.js} +6 -6
  281. package/dist/{pw-ai-BxJ-KCIy.js → pw-ai-FGoRVblI.js} +5 -6
  282. package/dist/{pw-ai-CsvaObGM.js → pw-ai-sS1fRKW_.js} +3 -3
  283. package/dist/{qmd-manager-CpsjQyaZ.js → qmd-manager-C67Fc8aN.js} +79 -26
  284. package/dist/{qmd-manager-C9YWFeG6.js → qmd-manager-CXVbfg99.js} +81 -26
  285. package/dist/{qmd-manager-C02E8ixK.js → qmd-manager-RMRE8Tqt.js} +81 -26
  286. package/dist/{qmd-manager-BzY2LQTT.js → qmd-manager-pyc_MTIe.js} +78 -23
  287. package/dist/{register.subclis-DUkirdHn.js → register.subclis-C02e4zuJ.js} +29 -29
  288. package/dist/{reply--b7BsXGP.js → reply-DICXkh_C.js} +7289 -8455
  289. package/dist/{routes-DUkEKAc1.js → routes-CmOI1hIH.js} +29 -11
  290. package/dist/{routes-B4QQiFju.js → routes-DewK5tq2.js} +29 -12
  291. package/dist/{rpc-CuMtxrRT.js → rpc-DHr30euf.js} +3 -3
  292. package/dist/{rpc-Blt6MJ4F.js → rpc-T300F8zI.js} +3 -3
  293. package/dist/{run-main-XZcPA23b.js → run-main-C5wpthq1.js} +84 -82
  294. package/dist/runner-CY0nmVme.js +1886 -0
  295. package/dist/runner-Cfm5nTMc.js +1785 -0
  296. package/dist/runner-D_dujMod.js +1886 -0
  297. package/dist/runner-DrGYLH5K.js +1785 -0
  298. package/dist/{sandbox-Aks-9EcZ.js → sandbox-BKYnhYQH.js} +24 -17
  299. package/dist/{sandbox-DqUO2K83.js → sandbox-Bhjnh1Xg.js} +23 -16
  300. package/dist/{sandbox-cli-C99Thxi8.js → sandbox-cli-DBsAjZJN.js} +21 -21
  301. package/dist/{sandbox-cli-CJqRM4V6.js → sandbox-cli-rV9LtFeu.js} +21 -21
  302. package/dist/{security-cli-iqYLMOz3.js → security-cli-BIwJM_rs.js} +27 -27
  303. package/dist/{security-cli-DW3lCz-o.js → security-cli-BRjny8Yu.js} +27 -27
  304. package/dist/{server-context-fX4xiYRh.js → server-context-BGpGs3qd.js} +7 -7
  305. package/dist/{server-context-8Qt35QdF.js → server-context-Cl0U0vE3.js} +7 -7
  306. package/dist/{server-node-events-CHWXfb_T.js → server-node-events-CBfTbiTA.js} +48 -44
  307. package/dist/{server-node-events-BzrEnKLX.js → server-node-events-QCvh8EgI.js} +45 -41
  308. package/dist/{service-Cd4BxKuo.js → service--nPk7DvT.js} +8 -4
  309. package/dist/{service-DDPRbf8a.js → service-99RDXwX4.js} +8 -4
  310. package/dist/{service-audit-CCFxuvKs.js → service-audit-DnLmRGQt.js} +4 -4
  311. package/dist/{service-audit-x6jCN-6a.js → service-audit-ckBaRCVC.js} +4 -4
  312. package/dist/{session-cost-usage-CcCEQNuc.js → session-cost-usage-D7HuoSSD.js} +12 -10
  313. package/dist/{session-cost-usage-PvyVZz-g.js → session-cost-usage-D9hHANWI.js} +12 -10
  314. package/dist/{shared-ILguacOr.js → shared-Bs4vduG4.js} +3 -3
  315. package/dist/{shared-CagUDdmp.js → shared-CEY5IkwG.js} +3 -3
  316. package/dist/{shared-gOyV38rM.js → shared-DRohONn_.js} +4 -4
  317. package/dist/{shared-BDk_zC9p.js → shared-ICqOZibV.js} +4 -4
  318. package/dist/{skill-scanner-C_fQzVDu.js → skill-scanner-CucvxYhu.js} +1 -1
  319. package/dist/{skill-scanner-DrVEHfC6.js → skill-scanner-rHMtUHtP.js} +1 -1
  320. package/dist/{skills-D5UZZZSY.js → skills-DRjfSQT3.js} +141 -6
  321. package/dist/{skills-ccAgQ3Ad.js → skills-DprQj9X2.js} +142 -7
  322. package/dist/{skills-cli-DQilTG3n.js → skills-cli-9WO-C55s.js} +12 -12
  323. package/dist/{skills-cli-ggyLBtAY.js → skills-cli-B9eej-EW.js} +13 -13
  324. package/dist/{skills-status-BosMnzIs.js → skills-status-5U3P3YfJ.js} +3 -3
  325. package/dist/{skills-status-DjtPPMnY.js → skills-status-TDIgVd1K.js} +2 -2
  326. package/dist/{sqlite-B7FPASCO.js → sqlite-BINzs1U0.js} +2 -2
  327. package/dist/{sqlite-Btrgi7-j.js → sqlite-D4w5TejA.js} +3 -3
  328. package/dist/{sqlite-BrQ9tw8B.js → sqlite-DRRHmlug.js} +3 -3
  329. package/dist/{sqlite-HepBVDoX.js → sqlite-F6PGkEm1.js} +2 -2
  330. package/dist/{status-BByCntWS.js → status-BKGkKC_v.js} +3 -3
  331. package/dist/{status-Dt7RE_Yy.js → status-CiHtHdaa.js} +4 -4
  332. package/dist/{status-zfL4Yej7.js → status-DDWoOpeB.js} +37 -37
  333. package/dist/{subsystem-Bh1Y_6Uv.js → subsystem-BoExtIHo.js} +52 -17
  334. package/dist/{system-cli-DwuUkdkH.js → system-cli-B6lr60Io.js} +14 -14
  335. package/dist/{system-cli-Clqsx8U5.js → system-cli-CprW9G3h.js} +14 -14
  336. package/dist/{systemd-BEWwfwn0.js → systemd-C0VZriGM.js} +3 -3
  337. package/dist/{systemd-D6wTPnHi.js → systemd-DrmBtJ5T.js} +3 -3
  338. package/dist/{systemd-hints-zi4ohCOY.js → systemd-hints-DZtXiVHa.js} +1 -1
  339. package/dist/{systemd-linger-CDo2UbHM.js → systemd-linger-NC2kl1SC.js} +2 -2
  340. package/dist/{systemd-linger-BxjTrgoH.js → systemd-linger-xdn3BdPh.js} +2 -2
  341. package/dist/{table-DEnmtvl5.js → table-B8dx3v4v.js} +2 -2
  342. package/dist/{table-cCoGqLsk.js → table-CwulTLQp.js} +1 -1
  343. package/dist/{tool-display-DskiU8Kt.js → tool-display-CZRIDMRm.js} +2 -2
  344. package/dist/{tool-display-o-dDAlqF.js → tool-display-ClRud3pg.js} +2 -2
  345. package/dist/{tui-BdJWZdto.js → tui-CVTQn-dC.js} +14 -13
  346. package/dist/{tui-Bc7XUQGP.js → tui-Lu8FdrlK.js} +13 -14
  347. package/dist/{tui-cli-BGYh0UL0.js → tui-cli-BLpTj1X9.js} +27 -27
  348. package/dist/{tui-cli-D3n-O9zB.js → tui-cli-BLx5kL2I.js} +26 -26
  349. package/dist/{tui-formatters-CA85v4U2.js → tui-formatters-CNySEfJN.js} +6 -6
  350. package/dist/{tui-formatters-C3NarH24.js → tui-formatters-DePhZK3J.js} +6 -6
  351. package/dist/{update-JB16aPIY.js → update-DHVxMTpQ.js} +3 -3
  352. package/dist/{update-Ct9sqJC_.js → update-DU1geolI.js} +3 -3
  353. package/dist/{update-cli-wWKDS3cm.js → update-cli-C0hUvJWK.js} +89 -71
  354. package/dist/{update-cli-DDXp_N9B.js → update-cli-Wb1GB3rL.js} +88 -70
  355. package/dist/{update-runner-ChTf6O6p.js → update-runner--ixK4J3W.js} +11 -11
  356. package/dist/{update-runner-CmE6cHdn.js → update-runner-7Qa1T9y6.js} +10 -10
  357. package/dist/{utils-Dk86IbEs.js → utils-BLJAc3ZV.js} +1 -1
  358. package/dist/{utils-es4ygvQ-.js → utils-Cd9QdCHh.js} +1 -1
  359. package/dist/{webhooks-cli-CVIE9TtX.js → webhooks-cli-DgcMy7RG.js} +12 -12
  360. package/dist/{webhooks-cli-BmKSiQQC.js → webhooks-cli-aVzUcJY9.js} +11 -11
  361. package/dist/{widearea-dns-2ah0bkAj.js → widearea-dns-BaIgNEhY.js} +3 -3
  362. package/dist/{widearea-dns-CMIG6-74.js → widearea-dns-DzuRdwk5.js} +3 -3
  363. package/dist/{ws-DtDKpbLR.js → ws-CHCQHs0F.js} +1 -1
  364. package/dist/{ws-log-BP3z_g6Z.js → ws-log-CIXbLCka.js} +1 -1
  365. package/dist/{ws-log-D7MkvKhg.js → ws-log-DcQFZByi.js} +2 -2
  366. package/dist/{wsl-Cwo7X0Un.js → wsl-BUOkxKJu.js} +2 -2
  367. package/docs/assets/install-script.svg +1 -0
  368. package/docs/automation/hooks.md +1 -38
  369. package/docs/automation/webhook.md +43 -2
  370. package/docs/channels/discord.md +389 -381
  371. package/docs/channels/imessage.md +229 -218
  372. package/docs/channels/slack.md +294 -415
  373. package/docs/channels/telegram.md +401 -505
  374. package/docs/channels/whatsapp.md +338 -310
  375. package/docs/ci.md +0 -12
  376. package/docs/cli/hooks.md +1 -14
  377. package/docs/cli/index.md +6 -1
  378. package/docs/cli/logs.md +4 -0
  379. package/docs/cli/onboard.md +30 -0
  380. package/docs/cli/plugins.md +20 -1
  381. package/docs/cli/security.md +1 -0
  382. package/docs/concepts/memory.md +7 -4
  383. package/docs/concepts/session-tool.md +1 -0
  384. package/docs/docs.json +11 -11
  385. package/docs/gateway/configuration-examples.md +9 -2
  386. package/docs/gateway/configuration-reference.md +2329 -0
  387. package/docs/gateway/configuration.md +338 -3304
  388. package/docs/gateway/index.md +162 -238
  389. package/docs/gateway/openresponses-http-api.md +15 -0
  390. package/docs/gateway/security/index.md +3 -0
  391. package/docs/help/faq.md +9 -0
  392. package/docs/install/hetzner.md +21 -0
  393. package/docs/install/installer.md +20 -0
  394. package/docs/nodes/audio.md +19 -0
  395. package/docs/platforms/mac/release.md +7 -7
  396. package/docs/providers/glm.md +3 -3
  397. package/docs/providers/index.md +1 -0
  398. package/docs/providers/litellm.md +153 -0
  399. package/docs/providers/zai.md +2 -2
  400. package/docs/reference/templates/AGENTS.md +26 -26
  401. package/docs/reference/templates/HEARTBEAT.md +31 -2
  402. package/docs/reference/templates/SOUL.md +14 -8
  403. package/docs/reference/transcript-hygiene.md +18 -0
  404. package/docs/start/getting-started.md +5 -0
  405. package/docs/start/wizard-cli-automation.md +17 -0
  406. package/docs/start/wizard-cli-reference.md +12 -0
  407. package/docs/tools/browser.md +6 -0
  408. package/docs/zh-CN/automation/hooks.md +1 -38
  409. package/docs/zh-CN/cli/hooks.md +1 -14
  410. package/extensions/bluebubbles/package.json +1 -1
  411. package/extensions/bluebubbles/src/monitor.test.ts +40 -28
  412. package/extensions/bluebubbles/src/monitor.ts +0 -4
  413. package/extensions/copilot-proxy/package.json +1 -1
  414. package/extensions/diagnostics-otel/package.json +10 -10
  415. package/extensions/discord/package.json +1 -1
  416. package/extensions/feishu/package.json +2 -5
  417. package/extensions/feishu/src/bot.checkBotMentioned.test.ts +64 -0
  418. package/extensions/feishu/src/bot.ts +1 -1
  419. package/extensions/feishu/src/channel.test.ts +48 -0
  420. package/extensions/feishu/src/channel.ts +1 -3
  421. package/extensions/feishu/src/config-schema.ts +6 -0
  422. package/extensions/feishu/src/docx.ts +14 -4
  423. package/extensions/feishu/src/media.test.ts +151 -0
  424. package/extensions/feishu/src/media.ts +27 -13
  425. package/extensions/feishu/src/reply-dispatcher.test.ts +116 -0
  426. package/extensions/feishu/src/reply-dispatcher.ts +124 -67
  427. package/extensions/feishu/src/streaming-card.ts +223 -0
  428. package/extensions/feishu/src/targets.test.ts +16 -0
  429. package/extensions/feishu/src/targets.ts +1 -1
  430. package/extensions/google-antigravity-auth/package.json +1 -1
  431. package/extensions/google-gemini-cli-auth/package.json +1 -1
  432. package/extensions/googlechat/package.json +1 -1
  433. package/extensions/imessage/package.json +1 -1
  434. package/extensions/irc/package.json +1 -1
  435. package/extensions/irc/src/client.ts +1 -1
  436. package/extensions/line/package.json +1 -1
  437. package/extensions/llm-task/package.json +1 -1
  438. package/extensions/lobster/package.json +1 -1
  439. package/extensions/matrix/CHANGELOG.md +6 -0
  440. package/extensions/matrix/package.json +2 -2
  441. package/extensions/mattermost/package.json +1 -1
  442. package/extensions/memory-core/package.json +1 -1
  443. package/extensions/memory-lancedb/index.ts +6 -2
  444. package/extensions/memory-lancedb/package.json +2 -2
  445. package/extensions/minimax-portal-auth/index.ts +7 -5
  446. package/extensions/minimax-portal-auth/package.json +1 -1
  447. package/extensions/msteams/CHANGELOG.md +6 -0
  448. package/extensions/msteams/package.json +1 -1
  449. package/extensions/nextcloud-talk/package.json +1 -1
  450. package/extensions/nostr/CHANGELOG.md +6 -0
  451. package/extensions/nostr/package.json +2 -2
  452. package/extensions/open-prose/package.json +1 -1
  453. package/extensions/signal/package.json +1 -1
  454. package/extensions/slack/package.json +1 -1
  455. package/extensions/telegram/package.json +1 -1
  456. package/extensions/tlon/package.json +1 -1
  457. package/extensions/twitch/CHANGELOG.md +6 -0
  458. package/extensions/twitch/package.json +1 -1
  459. package/extensions/voice-call/CHANGELOG.md +6 -0
  460. package/extensions/voice-call/package.json +1 -1
  461. package/extensions/voice-call/src/media-stream.ts +7 -1
  462. package/extensions/voice-call/src/providers/twilio.test.ts +5 -3
  463. package/extensions/voice-call/src/providers/twilio.ts +12 -1
  464. package/extensions/whatsapp/package.json +1 -1
  465. package/extensions/zalo/CHANGELOG.md +6 -0
  466. package/extensions/zalo/package.json +1 -1
  467. package/extensions/zalouser/CHANGELOG.md +6 -0
  468. package/extensions/zalouser/package.json +1 -1
  469. package/package.json +26 -22
  470. package/dist/auth-BcNHFK-i.js +0 -184
  471. package/dist/auth-BvIPpm7G.js +0 -184
  472. package/dist/boolean-M-esQJt6.js +0 -30
  473. package/dist/bundled/soul-evil/HOOK.md +0 -71
  474. package/dist/bundled/soul-evil/handler.js +0 -194
  475. package/dist/cli-DJbWJ9aB.js +0 -89
  476. package/dist/config-CI7EpvlP.js +0 -15
  477. package/dist/control-ui/assets/index-CnB9IO4a.js.map +0 -1
  478. package/dist/date-time-c6HTX6IW.js +0 -187
  479. package/dist/frontmatter-xwTm0734.js +0 -105
  480. package/dist/parse-duration-De_tAQSe.js +0 -24
  481. package/dist/session-key-nXYQSv-a.js +0 -167
  482. package/dist/utils-dp_OM900.js +0 -476
  483. package/docs/hooks/soul-evil.md +0 -69
  484. package/docs/zh-CN/hooks/soul-evil.md +0 -72
  485. /package/dist/{archive-CXhvR9nU.js → archive-beaSfAzA.js} +0 -0
  486. /package/dist/{brew-BIrWdDps.js → brew-BUIxHEkn.js} +0 -0
  487. /package/dist/{brew-B7YK4ZoL.js → brew-ROHf0-Xp.js} +0 -0
  488. /package/dist/{cli-utils-PlLcDZlM.js → cli-utils-CRhVAaLV.js} +0 -0
  489. /package/dist/{cli-utils-R-ECs5cY.js → cli-utils-LcHOt63h.js} +0 -0
  490. /package/dist/{command-format-BUxhT1xL.js → command-format-qUVxzqYm.js} +0 -0
  491. /package/dist/{constants-CNTiY-ZN.js → constants-BvQ6S8j5.js} +0 -0
  492. /package/dist/{constants-DuoCkWRh.js → constants-JPeoOZnw.js} +0 -0
  493. /package/dist/{errors-D3tYRJWG.js → errors-B91HIDPD.js} +0 -0
  494. /package/dist/{errors-B0eT3jVv.js → errors-Bv81hF2P.js} +0 -0
  495. /package/dist/{errors-x4NYs-1P.js → errors-DjZBTJJ3.js} +0 -0
  496. /package/dist/{exec-approvals-DGPTjO0N.js → exec-approvals-Cb4ZLukq.js} +0 -0
  497. /package/dist/{exec-approvals-DhmKpiIo.js → exec-approvals-DQ8TVVmj.js} +0 -0
  498. /package/dist/{format-CaxeRcue.js → format-CNU-Zkrz.js} +0 -0
  499. /package/dist/{format-DLOJPZmo.js → format-DcfK-dwd.js} +0 -0
  500. /package/dist/{format-duration-Be5Z7JdJ.js → format-duration-84n6_DgO.js} +0 -0
  501. /package/dist/{format-duration-CEmFWLyX.js → format-duration-Bo9zNKwO.js} +0 -0
  502. /package/dist/{format-relative-79_Y1n2Y.js → format-relative-CZOlQ2pA.js} +0 -0
  503. /package/dist/{format-relative-Db7eqEu8.js → format-relative-cegC_FF5.js} +0 -0
  504. /package/dist/{github-copilot-token-C9IJh2Pn.js → github-copilot-token-DkiRbJdR.js} +0 -0
  505. /package/dist/{helpers-CQI-5xS9.js → helpers-8O7IVGO-.js} +0 -0
  506. /package/dist/{helpers-CRzoyyXS.js → helpers-D_jqdWkd.js} +0 -0
  507. /package/dist/{helpers-C89IG08W.js → helpers-HyeZXsnu.js} +0 -0
  508. /package/dist/{is-main-WWuz28Ip.js → is-main-BWoXGz7p.js} +0 -0
  509. /package/dist/{logging-BzvBIA3Y.js → logging-fywhKCmE.js} +0 -0
  510. /package/dist/{nodes-screen-lykd2cny.js → nodes-screen-CdCWeiwy.js} +0 -0
  511. /package/dist/{parse-Cjiudy6x.js → parse-Bw0oH-rT.js} +0 -0
  512. /package/dist/{parse-DqAvJRIf.js → parse-ioZhOtha.js} +0 -0
  513. /package/dist/{parse-log-line-CUrpqe1w.js → parse-log-line-BoDqomM4.js} +0 -0
  514. /package/dist/{parse-log-line-D2UGw0wR.js → parse-log-line-DPxH1XZx.js} +0 -0
  515. /package/dist/{parse-timeout-DFSPLxpY.js → parse-timeout-D1XX_zN_.js} +0 -0
  516. /package/dist/{parse-timeout-DV8NQQWk.js → parse-timeout-DMW-z4Iz.js} +0 -0
  517. /package/dist/{pi-model-discovery-CV2V1HHz.js → pi-model-discovery-DqgqUyAv.js} +0 -0
  518. /package/dist/{pi-model-discovery-DzFOAbQt.js → pi-model-discovery-EwKVHlZB.js} +0 -0
  519. /package/dist/{prompts--d-6l5Ln.js → prompts-Bg96reub.js} +0 -0
  520. /package/dist/{redact-DAKeu7PA.js → redact-BRsnXqwD.js} +0 -0
  521. /package/dist/{redact-DuEEf1p1.js → redact-Br9GfacZ.js} +0 -0
  522. /package/dist/{redact-BOIof271.js → redact-BrXLgslJ.js} +0 -0
  523. /package/dist/{status-Cv36yYdi.js → status-BRZfQbJ2.js} +0 -0
  524. /package/dist/{status-Drziap9H.js → status-CoAy6bEC.js} +0 -0
  525. /package/dist/{systemd-hints-CH4pbCFD.js → systemd-hints-CXNtLw9Q.js} +0 -0
  526. /package/dist/{tailnet-DGRSvYuQ.js → tailnet-DATIFSsY.js} +0 -0
  527. /package/dist/{transcript-events-BlIONGVn.js → transcript-events-BHS7QoRl.js} +0 -0
  528. /package/dist/{transcript-events-C1hdue6u.js → transcript-events-Bp7fGnwv.js} +0 -0
  529. /package/dist/{transcript-events-CZ8CG4ht.js → transcript-events-BtNd-j6q.js} +0 -0
  530. /package/dist/{usage-format-6Uar63S0.js → usage-format-C4JfTbSp.js} +0 -0
  531. /package/dist/{usage-format-hd37en6b.js → usage-format-CpORtVCG.js} +0 -0
@@ -1,406 +1,434 @@
1
1
  ---
2
- summary: "WhatsApp (web channel) integration: login, inbox, replies, media, and ops"
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 (web channel)
8
+ # WhatsApp (Web channel)
9
9
 
10
- Status: WhatsApp Web via Baileys only. Gateway owns the session(s).
10
+ Status: production-ready via WhatsApp Web (Baileys). Gateway owns linked session(s).
11
11
 
12
- ## Quick setup (beginner)
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
- 1. Use a **separate phone number** if possible (recommended).
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
- Minimal config:
26
+ <Steps>
27
+ <Step title="Configure WhatsApp access policy">
20
28
 
21
29
  ```json5
22
30
  {
23
31
  channels: {
24
32
  whatsapp: {
25
- dmPolicy: "allowlist",
33
+ dmPolicy: "pairing",
26
34
  allowFrom: ["+15551234567"],
35
+ groupPolicy: "allowlist",
36
+ groupAllowFrom: ["+15551234567"],
27
37
  },
28
38
  },
29
39
  }
30
40
  ```
31
41
 
32
- ## Goals
42
+ </Step>
33
43
 
34
- - Multiple WhatsApp accounts (multi-account) in one Gateway process.
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
- ## Config writes
46
+ ```bash
47
+ openclaw channels login --channel whatsapp
48
+ ```
39
49
 
40
- By default, WhatsApp is allowed to write config updates triggered by `/config set|unset` (requires `commands.config: true`).
50
+ For a specific account:
41
51
 
42
- Disable with:
52
+ ```bash
53
+ openclaw channels login --channel whatsapp --account work
54
+ ```
43
55
 
44
- ```json5
45
- {
46
- channels: { whatsapp: { configWrites: false } },
47
- }
56
+ </Step>
57
+
58
+ <Step title="Start the gateway">
59
+
60
+ ```bash
61
+ openclaw gateway
48
62
  ```
49
63
 
50
- ## Architecture (who owns what)
64
+ </Step>
51
65
 
52
- - **Gateway** owns the Baileys socket and inbox loop.
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
- ## Getting a phone number (two modes)
68
+ ```bash
69
+ openclaw pairing list whatsapp
70
+ openclaw pairing approve whatsapp <CODE>
71
+ ```
57
72
 
58
- WhatsApp requires a real mobile number for verification. VoIP and virtual numbers are usually blocked. There are two supported ways to run OpenClaw on WhatsApp:
73
+ Pairing requests expire after 1 hour. Pending requests are capped at 3 per channel.
59
74
 
60
- ### Dedicated number (recommended)
75
+ </Step>
76
+ </Steps>
61
77
 
62
- Use a **separate phone number** for OpenClaw. Best UX, clean routing, no self-chat quirks. Ideal setup: **spare/old Android phone + eSIM**. Leave it on Wi‑Fi and power, and link it via QR.
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
- **WhatsApp Business:** You can use WhatsApp Business on the same device with a different number. Great for keeping your personal WhatsApp separate — install WhatsApp Business and register the OpenClaw number there.
82
+ ## Deployment patterns
65
83
 
66
- **Sample config (dedicated number, single-user allowlist):**
84
+ <AccordionGroup>
85
+ <Accordion title="Dedicated number (recommended)">
86
+ This is the cleanest operational mode:
67
87
 
68
- ```json5
69
- {
70
- channels: {
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
- **Pairing mode (optional):**
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
- ### Personal number (fallback)
94
+ ```json5
95
+ {
96
+ channels: {
97
+ whatsapp: {
98
+ dmPolicy: "allowlist",
99
+ allowFrom: ["+15551234567"],
100
+ },
101
+ },
102
+ }
103
+ ```
84
104
 
85
- Quick fallback: run OpenClaw on **your own number**. Message yourself (WhatsApp “Message yourself”) for testing so you don’t spam contacts. Expect to read verification codes on your main phone during setup and experiments. **Must enable self-chat mode.**
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
- **Sample config (personal number, self-chat):**
107
+ <Accordion title="Personal-number fallback">
108
+ Onboarding supports personal-number mode and writes a self-chat-friendly baseline:
89
109
 
90
- ```json
91
- {
92
- "whatsapp": {
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
- Self-chat replies default to `[{identity.name}]` when set (otherwise `[openclaw]`)
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
- ### Number sourcing tips
116
+ </Accordion>
105
117
 
106
- - **Local eSIM** from your country's mobile carrier (most reliable)
107
- - Austria: [hot.at](https://www.hot.at)
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
- **Avoid:** TextNow, Google Voice, most "free SMS" services WhatsApp blocks these aggressively.
121
+ There is no separate Twilio WhatsApp messaging channel in the built-in chat-channel registry.
112
122
 
113
- **Tip:** The number only needs to receive one verification SMS. After that, WhatsApp Web sessions persist via `creds.json`.
123
+ </Accordion>
124
+ </AccordionGroup>
114
125
 
115
- ## Why Not Twilio?
126
+ ## Runtime model
116
127
 
117
- - Early OpenClaw builds supported Twilio’s WhatsApp Business integration.
118
- - WhatsApp Business numbers are a poor fit for a personal assistant.
119
- - Meta enforces a 24‑hour reply window; if you haven’t responded in the last 24 hours, the business number can’t initiate new messages.
120
- - High-volume or “chatty” usage triggers aggressive blocking, because business accounts aren’t meant to send dozens of personal assistant messages.
121
- - Result: unreliable delivery and frequent blocks, so support was removed.
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
- ## Login + credentials
134
+ ## Access control and activation
124
135
 
125
- - Login command: `openclaw channels login` (QR via Linked Devices).
126
- - Multi-account login: `openclaw channels login --account <id>` (`<id>` = `accountId`).
127
- - Default account (when `--account` is omitted): `default` if present, otherwise the first configured account id (sorted).
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
- ## Inbound flow (DM + group)
140
+ - `pairing` (default)
141
+ - `allowlist`
142
+ - `open` (requires `allowFrom` to include `"*"`)
143
+ - `disabled`
135
144
 
136
- - WhatsApp events come from `messages.upsert` (Baileys).
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
- ### Personal-number mode (fallback)
147
+ Runtime behavior details:
146
148
 
147
- If you run OpenClaw on your **personal WhatsApp number**, enable `channels.whatsapp.selfChatMode` (see sample above).
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
- Behavior:
153
+ </Tab>
150
154
 
151
- - Outbound DMs never trigger pairing replies (prevents spamming contacts).
152
- - Inbound unknown senders still follow `channels.whatsapp.dmPolicy`.
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
- ## Read receipts
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
- By default, the gateway marks inbound WhatsApp messages as read (blue ticks) once they are accepted.
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
- Disable globally:
167
+ Sender allowlist fallback:
161
168
 
162
- ```json5
163
- {
164
- channels: { whatsapp: { sendReadReceipts: false } },
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
- Disable per account:
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
- accounts: {
175
- personal: { sendReadReceipts: false },
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
- Notes:
327
+ Behavior notes:
183
328
 
184
- - Self-chat mode always skips read receipts.
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
- ## WhatsApp FAQ: sending messages + pairing
334
+ ## Multi-account and credentials
187
335
 
188
- **Will OpenClaw message random contacts when I link WhatsApp?**
189
- No. Default DM policy is **pairing**, so unknown senders only get a pairing code and their message is **not processed**. OpenClaw only replies to chats it receives, or to sends you explicitly trigger (agent/CLI).
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
- **How does pairing work on WhatsApp?**
192
- Pairing is a DM gate for unknown senders:
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
- - First DM from a new sender returns a short code (message is not processed).
195
- - Approve with: `openclaw pairing approve whatsapp <code>` (list with `openclaw pairing list whatsapp`).
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
- **Can multiple people use different OpenClaw instances on one WhatsApp number?**
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
- **Why do you ask for my phone number in the wizard?**
202
- The wizard uses it to set your **allowlist/owner** so your own DMs are permitted. It’s not used for auto-sending. If you run on your personal WhatsApp number, use that same number and enable `channels.whatsapp.selfChatMode`.
354
+ </Accordion>
355
+ </AccordionGroup>
203
356
 
204
- ## Message normalization (what the model sees)
357
+ ## Tools, actions, and config writes
205
358
 
206
- - `Body` is the current message body with envelope.
207
- - Quoted reply context is **always appended**:
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
- - Reply metadata also set:
216
- - `ReplyToId` = stanzaId
217
- - `ReplyToBody` = quoted body or media placeholder
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
- ## Groups
371
+ Fix:
223
372
 
224
- - Groups map to `agent:<agentId>:whatsapp:group:<jid>` sessions.
225
- - Group policy: `channels.whatsapp.groupPolicy = open|disabled|allowlist` (default `allowlist`).
226
- - Activation modes:
227
- - `mention` (default): requires @mention or regex match.
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
- ## Reply delivery (threading)
378
+ </Accordion>
240
379
 
241
- - WhatsApp Web sends standard messages (no quoted reply threading in the current gateway).
242
- - Reply tags are ignored on this channel.
380
+ <Accordion title="Linked but disconnected / reconnect loop">
381
+ Symptom: linked account with repeated disconnects or reconnect attempts.
243
382
 
244
- ## Acknowledgment reactions (auto-react on receipt)
383
+ Fix:
245
384
 
246
- WhatsApp can automatically send emoji reactions to incoming messages immediately upon receipt, before the bot generates a reply. This provides instant feedback to users that their message was received.
385
+ ```bash
386
+ openclaw doctor
387
+ openclaw logs --follow
388
+ ```
247
389
 
248
- **Configuration:**
390
+ If needed, re-link with `channels login`.
249
391
 
250
- ```json
251
- {
252
- "whatsapp": {
253
- "ackReaction": {
254
- "emoji": "👀",
255
- "direct": true,
256
- "group": "mentions"
257
- }
258
- }
259
- }
260
- ```
392
+ </Accordion>
261
393
 
262
- **Options:**
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
- - `emoji` (string): Emoji to use for acknowledgment (e.g., "👀", "✅", "📨"). Empty or omitted = feature disabled.
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
- **Per-account override:**
399
+ </Accordion>
272
400
 
273
- ```json
274
- {
275
- "whatsapp": {
276
- "accounts": {
277
- "work": {
278
- "ackReaction": {
279
- "emoji": "✅",
280
- "direct": false,
281
- "group": "always"
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
- **Behavior notes:**
290
-
291
- - Reactions are sent **immediately** upon message receipt, before typing indicators or bot replies.
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)