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
@@ -7,21 +7,32 @@ title: "Discord"
7
7
 
8
8
  # Discord (Bot API)
9
9
 
10
- Status: ready for DM and guild text channels via the official Discord bot gateway.
10
+ Status: ready for DMs and guild channels via the official Discord gateway.
11
11
 
12
- ## Quick setup (beginner)
12
+ <CardGroup cols={3}>
13
+ <Card title="Pairing" icon="link" href="/channels/pairing">
14
+ Discord DMs default to pairing mode.
15
+ </Card>
16
+ <Card title="Slash commands" icon="terminal" href="/tools/slash-commands">
17
+ Native command behavior and command catalog.
18
+ </Card>
19
+ <Card title="Channel troubleshooting" icon="wrench" href="/channels/troubleshooting">
20
+ Cross-channel diagnostics and repair flow.
21
+ </Card>
22
+ </CardGroup>
13
23
 
14
- 1. Create a Discord bot and copy the bot token.
15
- 2. In the Discord app settings, enable **Message Content Intent** (and **Server Members Intent** if you plan to use allowlists or name lookups).
16
- 3. Set the token for OpenClaw:
17
- - Env: `DISCORD_BOT_TOKEN=...`
18
- - Or config: `channels.discord.token: "..."`.
19
- - If both are set, config takes precedence (env fallback is default-account only).
20
- 4. Invite the bot to your server with message permissions (create a private server if you just want DMs).
21
- 5. Start the gateway.
22
- 6. DM access is pairing by default; approve the pairing code on first contact.
24
+ ## Quick setup
23
25
 
24
- Minimal config:
26
+ <Steps>
27
+ <Step title="Create a Discord bot and enable intents">
28
+ Create an application in the Discord Developer Portal, add a bot, then enable:
29
+
30
+ - **Message Content Intent**
31
+ - **Server Members Intent** (required for role allowlists and role-based routing; recommended for name-to-ID allowlist matching)
32
+
33
+ </Step>
34
+
35
+ <Step title="Configure token">
25
36
 
26
37
  ```json5
27
38
  {
@@ -34,342 +45,293 @@ Minimal config:
34
45
  }
35
46
  ```
36
47
 
37
- ## Goals
38
-
39
- - Talk to OpenClaw via Discord DMs or guild channels.
40
- - Direct chats collapse into the agent's main session (default `agent:main:main`); guild channels stay isolated as `agent:<agentId>:discord:channel:<channelId>` (display names use `discord:<guildSlug>#<channelSlug>`).
41
- - Group DMs are ignored by default; enable via `channels.discord.dm.groupEnabled` and optionally restrict by `channels.discord.dm.groupChannels`.
42
- - Keep routing deterministic: replies always go back to the channel they arrived on.
43
-
44
- ## How it works
45
-
46
- 1. Create a Discord application → Bot, enable the intents you need (DMs + guild messages + message content), and grab the bot token.
47
- 2. Invite the bot to your server with the permissions required to read/send messages where you want to use it.
48
- 3. Configure OpenClaw with `channels.discord.token` (or `DISCORD_BOT_TOKEN` as a fallback).
49
- 4. Run the gateway; it auto-starts the Discord channel when a token is available (config first, env fallback) and `channels.discord.enabled` is not `false`.
50
- - If you prefer env vars, set `DISCORD_BOT_TOKEN` (a config block is optional).
51
- 5. Direct chats: use `user:<id>` (or a `<@id>` mention) when delivering; all turns land in the shared `main` session. Bare numeric IDs are ambiguous and rejected.
52
- 6. Guild channels: use `channel:<channelId>` for delivery. Mentions are required by default and can be set per guild or per channel.
53
- 7. Direct chats: secure by default via `channels.discord.dm.policy` (default: `"pairing"`). Unknown senders get a pairing code (expires after 1 hour); approve via `openclaw pairing approve discord <code>`.
54
- - To keep old “open to anyone” behavior: set `channels.discord.dm.policy="open"` and `channels.discord.dm.allowFrom=["*"]`.
55
- - To hard-allowlist: set `channels.discord.dm.policy="allowlist"` and list senders in `channels.discord.dm.allowFrom`.
56
- - To ignore all DMs: set `channels.discord.dm.enabled=false` or `channels.discord.dm.policy="disabled"`.
57
- 8. Group DMs are ignored by default; enable via `channels.discord.dm.groupEnabled` and optionally restrict by `channels.discord.dm.groupChannels`.
58
- 9. Optional guild rules: set `channels.discord.guilds` keyed by guild id (preferred) or slug, with per-channel rules.
59
- 10. Optional native commands: `commands.native` defaults to `"auto"` (on for Discord/Telegram, off for Slack). Override with `channels.discord.commands.native: true|false|"auto"`; `false` clears previously registered commands. Text commands are controlled by `commands.text` and must be sent as standalone `/...` messages. Use `commands.useAccessGroups: false` to bypass access-group checks for commands.
60
- - Full command list + config: [Slash commands](/tools/slash-commands)
61
- 11. Optional guild context history: set `channels.discord.historyLimit` (default 20, falls back to `messages.groupChat.historyLimit`) to include the last N guild messages as context when replying to a mention. Set `0` to disable.
62
- 12. Reactions: the agent can trigger reactions via the `discord` tool (gated by `channels.discord.actions.*`).
63
- - Reaction removal semantics: see [/tools/reactions](/tools/reactions).
64
- - The `discord` tool is only exposed when the current channel is Discord.
65
- 13. Native commands use isolated session keys (`agent:<agentId>:discord:slash:<userId>`) rather than the shared `main` session.
66
-
67
- Note: Name → id resolution uses guild member search and requires Server Members Intent; if the bot can’t search members, use ids or `<@id>` mentions.
68
- Note: Slugs are lowercase with spaces replaced by `-`. Channel names are slugged without the leading `#`.
69
- Note: Guild context `[from:]` lines include `author.tag` + `id` to make ping-ready replies easy.
70
-
71
- ## Config writes
72
-
73
- By default, Discord is allowed to write config updates triggered by `/config set|unset` (requires `commands.config: true`).
74
-
75
- Disable with:
48
+ Env fallback for the default account:
76
49
 
77
- ```json5
78
- {
79
- channels: { discord: { configWrites: false } },
80
- }
50
+ ```bash
51
+ DISCORD_BOT_TOKEN=...
81
52
  ```
82
53
 
83
- ## How to create your own bot
54
+ </Step>
84
55
 
85
- This is the “Discord Developer Portal” setup for running OpenClaw in a server (guild) channel like `#help`.
56
+ <Step title="Invite the bot and start gateway">
57
+ Invite the bot to your server with message permissions.
86
58
 
87
- ### 1) Create the Discord app + bot user
59
+ ```bash
60
+ openclaw gateway
61
+ ```
88
62
 
89
- 1. Discord Developer Portal → **Applications** → **New Application**
90
- 2. In your app:
91
- - **Bot** → **Add Bot**
92
- - Copy the **Bot Token** (this is what you put in `DISCORD_BOT_TOKEN`)
63
+ </Step>
93
64
 
94
- ### 2) Enable the gateway intents OpenClaw needs
65
+ <Step title="Approve first DM pairing">
95
66
 
96
- Discord blocks “privileged intents” unless you explicitly enable them.
67
+ ```bash
68
+ openclaw pairing list discord
69
+ openclaw pairing approve discord <CODE>
70
+ ```
97
71
 
98
- In **Bot** **Privileged Gateway Intents**, enable:
72
+ Pairing codes expire after 1 hour.
99
73
 
100
- - **Message Content Intent** (required to read message text in most guilds; without it you’ll see “Used disallowed intents” or the bot will connect but not react to messages)
101
- - **Server Members Intent** (recommended; required for some member/user lookups and allowlist matching in guilds)
74
+ </Step>
75
+ </Steps>
102
76
 
103
- You usually do **not** need **Presence Intent**. Setting the bot's own presence (`setPresence` action) uses gateway OP3 and does not require this intent; it is only needed if you want to receive presence updates about other guild members.
77
+ <Note>
78
+ Token resolution is account-aware. Config token values win over env fallback. `DISCORD_BOT_TOKEN` is only used for the default account.
79
+ </Note>
104
80
 
105
- ### 3) Generate an invite URL (OAuth2 URL Generator)
81
+ ## Runtime model
106
82
 
107
- In your app: **OAuth2** **URL Generator**
83
+ - Gateway owns the Discord connection.
84
+ - Reply routing is deterministic: Discord inbound replies back to Discord.
85
+ - By default (`session.dmScope=main`), direct chats share the agent main session (`agent:main:main`).
86
+ - Guild channels are isolated session keys (`agent:<agentId>:discord:channel:<channelId>`).
87
+ - Group DMs are ignored by default (`channels.discord.dm.groupEnabled=false`).
88
+ - Native slash commands run in isolated command sessions (`agent:<agentId>:discord:slash:<userId>`), while still carrying `CommandTargetSessionKey` to the routed conversation session.
108
89
 
109
- **Scopes**
90
+ ## Access control and routing
110
91
 
111
- - ✅ `bot`
112
- - `applications.commands` (required for native commands)
92
+ <Tabs>
93
+ <Tab title="DM policy">
94
+ `channels.discord.dm.policy` controls DM access:
113
95
 
114
- **Bot Permissions** (minimal baseline)
96
+ - `pairing` (default)
97
+ - `allowlist`
98
+ - `open` (requires `channels.discord.dm.allowFrom` to include `"*"`)
99
+ - `disabled`
115
100
 
116
- - View Channels
117
- - ✅ Send Messages
118
- - ✅ Read Message History
119
- - ✅ Embed Links
120
- - ✅ Attach Files
121
- - ✅ Add Reactions (optional but recommended)
122
- - ✅ Use External Emojis / Stickers (optional; only if you want them)
101
+ If DM policy is not open, unknown users are blocked (or prompted for pairing in `pairing` mode).
123
102
 
124
- Avoid **Administrator** unless you’re debugging and fully trust the bot.
103
+ DM target format for delivery:
125
104
 
126
- Copy the generated URL, open it, pick your server, and install the bot.
105
+ - `user:<id>`
106
+ - `<@id>` mention
127
107
 
128
- ### 4) Get the ids (guild/user/channel)
108
+ Bare numeric IDs are ambiguous and rejected unless an explicit user/channel target kind is provided.
129
109
 
130
- Discord uses numeric ids everywhere; OpenClaw config prefers ids.
110
+ </Tab>
131
111
 
132
- 1. Discord (desktop/web) → **User Settings** → **Advanced** → enable **Developer Mode**
133
- 2. Right-click:
134
- - Server name → **Copy Server ID** (guild id)
135
- - Channel (e.g. `#help`) → **Copy Channel ID**
136
- - Your user → **Copy User ID**
112
+ <Tab title="Guild policy">
113
+ Guild handling is controlled by `channels.discord.groupPolicy`:
137
114
 
138
- ### 5) Configure OpenClaw
115
+ - `open`
116
+ - `allowlist`
117
+ - `disabled`
139
118
 
140
- #### Token
119
+ Secure baseline when `channels.discord` exists is `allowlist`.
141
120
 
142
- Set the bot token via env var (recommended on servers):
121
+ `allowlist` behavior:
143
122
 
144
- - `DISCORD_BOT_TOKEN=...`
123
+ - guild must match `channels.discord.guilds` (`id` preferred, slug accepted)
124
+ - optional sender allowlists: `users` (IDs or names) and `roles` (role IDs only); if either is configured, senders are allowed when they match `users` OR `roles`
125
+ - if a guild has `channels` configured, non-listed channels are denied
126
+ - if a guild has no `channels` block, all channels in that allowlisted guild are allowed
145
127
 
146
- Or via config:
128
+ Example:
147
129
 
148
130
  ```json5
149
131
  {
150
132
  channels: {
151
133
  discord: {
152
- enabled: true,
153
- token: "YOUR_BOT_TOKEN",
134
+ groupPolicy: "allowlist",
135
+ guilds: {
136
+ "123456789012345678": {
137
+ requireMention: true,
138
+ users: ["987654321098765432"],
139
+ roles: ["123456789012345678"],
140
+ channels: {
141
+ general: { allow: true },
142
+ help: { allow: true, requireMention: true },
143
+ },
144
+ },
145
+ },
154
146
  },
155
147
  },
156
148
  }
157
149
  ```
158
150
 
159
- Multi-account support: use `channels.discord.accounts` with per-account tokens and optional `name`. See [`gateway/configuration`](/gateway/configuration#telegramaccounts--discordaccounts--slackaccounts--signalaccounts--imessageaccounts) for the shared pattern.
151
+ If you only set `DISCORD_BOT_TOKEN` and do not create a `channels.discord` block, runtime fallback is `groupPolicy="open"` (with a warning in logs).
152
+
153
+ </Tab>
154
+
155
+ <Tab title="Mentions and group DMs">
156
+ Guild messages are mention-gated by default.
157
+
158
+ Mention detection includes:
159
+
160
+ - explicit bot mention
161
+ - configured mention patterns (`agents.list[].groupChat.mentionPatterns`, fallback `messages.groupChat.mentionPatterns`)
162
+ - implicit reply-to-bot behavior in supported cases
163
+
164
+ `requireMention` is configured per guild/channel (`channels.discord.guilds...`).
165
+
166
+ Group DMs:
167
+
168
+ - default: ignored (`dm.groupEnabled=false`)
169
+ - optional allowlist via `dm.groupChannels` (channel IDs or slugs)
170
+
171
+ </Tab>
172
+ </Tabs>
160
173
 
161
- #### Allowlist + channel routing
174
+ ### Role-based agent routing
162
175
 
163
- Example “single server, only allow me, only allow #help”:
176
+ Use `bindings[].match.roles` to route Discord guild members to different agents by role ID. Role-based bindings accept role IDs only and are evaluated after peer or parent-peer bindings and before guild-only bindings.
164
177
 
165
178
  ```json5
166
179
  {
167
- channels: {
168
- discord: {
169
- enabled: true,
170
- dm: { enabled: false },
171
- guilds: {
172
- YOUR_GUILD_ID: {
173
- users: ["YOUR_USER_ID"],
174
- requireMention: true,
175
- channels: {
176
- help: { allow: true, requireMention: true },
177
- },
178
- },
180
+ bindings: [
181
+ {
182
+ agentId: "opus",
183
+ match: {
184
+ channel: "discord",
185
+ guildId: "123456789012345678",
186
+ roles: ["111111111111111111"],
179
187
  },
180
- retry: {
181
- attempts: 3,
182
- minDelayMs: 500,
183
- maxDelayMs: 30000,
184
- jitter: 0.1,
188
+ },
189
+ {
190
+ agentId: "sonnet",
191
+ match: {
192
+ channel: "discord",
193
+ guildId: "123456789012345678",
185
194
  },
186
195
  },
187
- },
196
+ ],
188
197
  }
189
198
  ```
190
199
 
191
- Notes:
192
-
193
- - `requireMention: true` means the bot only replies when mentioned (recommended for shared channels).
194
- - `agents.list[].groupChat.mentionPatterns` (or `messages.groupChat.mentionPatterns`) also count as mentions for guild messages.
195
- - Multi-agent override: set per-agent patterns on `agents.list[].groupChat.mentionPatterns`.
196
- - If `channels` is present, any channel not listed is denied by default.
197
- - Use a `"*"` channel entry to apply defaults across all channels; explicit channel entries override the wildcard.
198
- - Threads inherit parent channel config (allowlist, `requireMention`, skills, prompts, etc.) unless you add the thread channel id explicitly.
199
- - Owner hint: when a per-guild or per-channel `users` allowlist matches the sender, OpenClaw treats that sender as the owner in the system prompt. For a global owner across channels, set `commands.ownerAllowFrom`.
200
- - Bot-authored messages are ignored by default; set `channels.discord.allowBots=true` to allow them (own messages remain filtered).
201
- - Warning: If you allow replies to other bots (`channels.discord.allowBots=true`), prevent bot-to-bot reply loops with `requireMention`, `channels.discord.guilds.*.channels.<id>.users` allowlists, and/or clear guardrails in `AGENTS.md` and `SOUL.md`.
202
-
203
- ### 6) Verify it works
204
-
205
- 1. Start the gateway.
206
- 2. In your server channel, send: `@Krill hello` (or whatever your bot name is).
207
- 3. If nothing happens: check **Troubleshooting** below.
208
-
209
- ### Troubleshooting
210
-
211
- - First: run `openclaw doctor` and `openclaw channels status --probe` (actionable warnings + quick audits).
212
- - **“Used disallowed intents”**: enable **Message Content Intent** (and likely **Server Members Intent**) in the Developer Portal, then restart the gateway.
213
- - **Bot connects but never replies in a guild channel**:
214
- - Missing **Message Content Intent**, or
215
- - The bot lacks channel permissions (View/Send/Read History), or
216
- - Your config requires mentions and you didn’t mention it, or
217
- - Your guild/channel allowlist denies the channel/user.
218
- - **`requireMention: false` but still no replies**:
219
- - `channels.discord.groupPolicy` defaults to **allowlist**; set it to `"open"` or add a guild entry under `channels.discord.guilds` (optionally list channels under `channels.discord.guilds.<id>.channels` to restrict).
220
- - If you only set `DISCORD_BOT_TOKEN` and never create a `channels.discord` section, the runtime
221
- defaults `groupPolicy` to `open`. Add `channels.discord.groupPolicy`,
222
- `channels.defaults.groupPolicy`, or a guild/channel allowlist to lock it down.
223
- - `requireMention` must live under `channels.discord.guilds` (or a specific channel). `channels.discord.requireMention` at the top level is ignored.
224
- - **Permission audits** (`channels status --probe`) only check numeric channel IDs. If you use slugs/names as `channels.discord.guilds.*.channels` keys, the audit can’t verify permissions.
225
- - **DMs don’t work**: `channels.discord.dm.enabled=false`, `channels.discord.dm.policy="disabled"`, or you haven’t been approved yet (`channels.discord.dm.policy="pairing"`).
226
- - **Exec approvals in Discord**: Discord supports a **button UI** for exec approvals in DMs (Allow once / Always allow / Deny). `/approve <id> ...` is only for forwarded approvals and won’t resolve Discord’s button prompts. If you see `❌ Failed to submit approval: Error: unknown approval id` or the UI never shows up, check:
227
- - `channels.discord.execApprovals.enabled: true` in your config.
228
- - Your Discord user ID is listed in `channels.discord.execApprovals.approvers` (the UI is only sent to approvers).
229
- - Use the buttons in the DM prompt (**Allow once**, **Always allow**, **Deny**).
230
- - See [Exec approvals](/tools/exec-approvals) and [Slash commands](/tools/slash-commands) for the broader approvals and command flow.
231
-
232
- ## Capabilities & limits
233
-
234
- - DMs and guild text channels (threads are treated as separate channels; voice not supported).
235
- - Typing indicators sent best-effort; message chunking uses `channels.discord.textChunkLimit` (default 2000) and splits tall replies by line count (`channels.discord.maxLinesPerMessage`, default 17).
236
- - Optional newline chunking: set `channels.discord.chunkMode="newline"` to split on blank lines (paragraph boundaries) before length chunking.
237
- - File uploads supported up to the configured `channels.discord.mediaMaxMb` (default 8 MB).
238
- - Mention-gated guild replies by default to avoid noisy bots.
239
- - Reply context is injected when a message references another message (quoted content + ids).
240
- - Native reply threading is **off by default**; enable with `channels.discord.replyToMode` and reply tags.
241
-
242
- ## Retry policy
243
-
244
- Outbound Discord API calls retry on rate limits (429) using Discord `retry_after` when available, with exponential backoff and jitter. Configure via `channels.discord.retry`. See [Retry policy](/concepts/retry).
245
-
246
- ## Config
200
+ ## Developer Portal setup
201
+
202
+ <AccordionGroup>
203
+ <Accordion title="Create app and bot">
204
+
205
+ 1. Discord Developer Portal -> **Applications** -> **New Application**
206
+ 2. **Bot** -> **Add Bot**
207
+ 3. Copy bot token
208
+
209
+ </Accordion>
210
+
211
+ <Accordion title="Privileged intents">
212
+ In **Bot -> Privileged Gateway Intents**, enable:
213
+
214
+ - Message Content Intent
215
+ - Server Members Intent (recommended)
216
+
217
+ Presence intent is optional and only required if you want to receive presence updates. Setting bot presence (`setPresence`) does not require enabling presence updates for members.
218
+
219
+ </Accordion>
220
+
221
+ <Accordion title="OAuth scopes and baseline permissions">
222
+ OAuth URL generator:
223
+
224
+ - scopes: `bot`, `applications.commands`
225
+
226
+ Typical baseline permissions:
227
+
228
+ - View Channels
229
+ - Send Messages
230
+ - Read Message History
231
+ - Embed Links
232
+ - Attach Files
233
+ - Add Reactions (optional)
234
+
235
+ Avoid `Administrator` unless explicitly needed.
236
+
237
+ </Accordion>
238
+
239
+ <Accordion title="Copy IDs">
240
+ Enable Discord Developer Mode, then copy:
241
+
242
+ - server ID
243
+ - channel ID
244
+ - user ID
245
+
246
+ Prefer numeric IDs in OpenClaw config for reliable audits and probes.
247
+
248
+ </Accordion>
249
+ </AccordionGroup>
250
+
251
+ ## Native commands and command auth
252
+
253
+ - `commands.native` defaults to `"auto"` and is enabled for Discord.
254
+ - Per-channel override: `channels.discord.commands.native`.
255
+ - `commands.native=false` explicitly clears previously registered Discord native commands.
256
+ - Native command auth uses the same Discord allowlists/policies as normal message handling.
257
+ - Commands may still be visible in Discord UI for users who are not authorized; execution still enforces OpenClaw auth and returns "not authorized".
258
+
259
+ See [Slash commands](/tools/slash-commands) for command catalog and behavior.
260
+
261
+ ## Feature details
262
+
263
+ <AccordionGroup>
264
+ <Accordion title="Reply tags and native replies">
265
+ Discord supports reply tags in agent output:
266
+
267
+ - `[[reply_to_current]]`
268
+ - `[[reply_to:<id>]]`
269
+
270
+ Controlled by `channels.discord.replyToMode`:
271
+
272
+ - `off` (default)
273
+ - `first`
274
+ - `all`
275
+
276
+ Message IDs are surfaced in context/history so agents can target specific messages.
277
+
278
+ </Accordion>
279
+
280
+ <Accordion title="History, context, and thread behavior">
281
+ Guild history context:
282
+
283
+ - `channels.discord.historyLimit` default `20`
284
+ - fallback: `messages.groupChat.historyLimit`
285
+ - `0` disables
286
+
287
+ DM history controls:
288
+
289
+ - `channels.discord.dmHistoryLimit`
290
+ - `channels.discord.dms["<user_id>"].historyLimit`
291
+
292
+ Thread behavior:
293
+
294
+ - Discord threads are routed as channel sessions
295
+ - parent thread metadata can be used for parent-session linkage
296
+ - thread config inherits parent channel config unless a thread-specific entry exists
297
+
298
+ Channel topics are injected as **untrusted** context (not as system prompt).
299
+
300
+ </Accordion>
301
+
302
+ <Accordion title="Reaction notifications">
303
+ Per-guild reaction notification mode:
304
+
305
+ - `off`
306
+ - `own` (default)
307
+ - `all`
308
+ - `allowlist` (uses `guilds.<id>.users`)
309
+
310
+ Reaction events are turned into system events and attached to the routed Discord session.
311
+
312
+ </Accordion>
313
+
314
+ <Accordion title="Config writes">
315
+ Channel-initiated config writes are enabled by default.
316
+
317
+ This affects `/config set|unset` flows (when command features are enabled).
318
+
319
+ Disable:
247
320
 
248
321
  ```json5
249
322
  {
250
323
  channels: {
251
324
  discord: {
252
- enabled: true,
253
- token: "abc.123",
254
- groupPolicy: "allowlist",
255
- guilds: {
256
- "*": {
257
- channels: {
258
- general: { allow: true },
259
- },
260
- },
261
- },
262
- mediaMaxMb: 8,
263
- actions: {
264
- reactions: true,
265
- stickers: true,
266
- emojiUploads: true,
267
- stickerUploads: true,
268
- polls: true,
269
- permissions: true,
270
- messages: true,
271
- threads: true,
272
- pins: true,
273
- search: true,
274
- memberInfo: true,
275
- roleInfo: true,
276
- roles: false,
277
- channelInfo: true,
278
- channels: true,
279
- voiceStatus: true,
280
- events: true,
281
- moderation: false,
282
- presence: false,
283
- },
284
- replyToMode: "off",
285
- dm: {
286
- enabled: true,
287
- policy: "pairing", // pairing | allowlist | open | disabled
288
- allowFrom: ["123456789012345678", "steipete"],
289
- groupEnabled: false,
290
- groupChannels: ["openclaw-dm"],
291
- },
292
- guilds: {
293
- "*": { requireMention: true },
294
- "123456789012345678": {
295
- slug: "friends-of-openclaw",
296
- requireMention: false,
297
- reactionNotifications: "own",
298
- users: ["987654321098765432", "steipete"],
299
- channels: {
300
- general: { allow: true },
301
- help: {
302
- allow: true,
303
- requireMention: true,
304
- users: ["987654321098765432"],
305
- skills: ["search", "docs"],
306
- systemPrompt: "Keep answers short.",
307
- },
308
- },
309
- },
310
- },
325
+ configWrites: false,
311
326
  },
312
327
  },
313
328
  }
314
329
  ```
315
330
 
316
- Ack reactions are controlled globally via `messages.ackReaction` +
317
- `messages.ackReactionScope`. Use `messages.removeAckAfterReply` to clear the
318
- ack reaction after the bot replies.
319
-
320
- - `dm.enabled`: set `false` to ignore all DMs (default `true`).
321
- - `dm.policy`: DM access control (`pairing` recommended). `"open"` requires `dm.allowFrom=["*"]`.
322
- - `dm.allowFrom`: DM allowlist (user ids or names). Used by `dm.policy="allowlist"` and for `dm.policy="open"` validation. The wizard accepts usernames and resolves them to ids when the bot can search members.
323
- - `dm.groupEnabled`: enable group DMs (default `false`).
324
- - `dm.groupChannels`: optional allowlist for group DM channel ids or slugs.
325
- - `groupPolicy`: controls guild channel handling (`open|disabled|allowlist`); `allowlist` requires channel allowlists.
326
- - `guilds`: per-guild rules keyed by guild id (preferred) or slug.
327
- - `guilds."*"`: default per-guild settings applied when no explicit entry exists.
328
- - `guilds.<id>.slug`: optional friendly slug used for display names.
329
- - `guilds.<id>.users`: optional per-guild user allowlist (ids or names).
330
- - `guilds.<id>.tools`: optional per-guild tool policy overrides (`allow`/`deny`/`alsoAllow`) used when the channel override is missing.
331
- - `guilds.<id>.toolsBySender`: optional per-sender tool policy overrides at the guild level (applies when the channel override is missing; `"*"` wildcard supported).
332
- - `guilds.<id>.channels.<channel>.allow`: allow/deny the channel when `groupPolicy="allowlist"`.
333
- - `guilds.<id>.channels.<channel>.requireMention`: mention gating for the channel.
334
- - `guilds.<id>.channels.<channel>.tools`: optional per-channel tool policy overrides (`allow`/`deny`/`alsoAllow`).
335
- - `guilds.<id>.channels.<channel>.toolsBySender`: optional per-sender tool policy overrides within the channel (`"*"` wildcard supported).
336
- - `guilds.<id>.channels.<channel>.users`: optional per-channel user allowlist.
337
- - `guilds.<id>.channels.<channel>.skills`: skill filter (omit = all skills, empty = none).
338
- - `guilds.<id>.channels.<channel>.systemPrompt`: extra system prompt for the channel. Discord channel topics are injected as **untrusted** context (not system prompt).
339
- - `guilds.<id>.channels.<channel>.enabled`: set `false` to disable the channel.
340
- - `guilds.<id>.channels`: channel rules (keys are channel slugs or ids).
341
- - `guilds.<id>.requireMention`: per-guild mention requirement (overridable per channel).
342
- - `guilds.<id>.reactionNotifications`: reaction system event mode (`off`, `own`, `all`, `allowlist`).
343
- - `textChunkLimit`: outbound text chunk size (chars). Default: 2000.
344
- - `chunkMode`: `length` (default) splits only when exceeding `textChunkLimit`; `newline` splits on blank lines (paragraph boundaries) before length chunking.
345
- - `maxLinesPerMessage`: soft max line count per message. Default: 17.
346
- - `mediaMaxMb`: clamp inbound media saved to disk.
347
- - `historyLimit`: number of recent guild messages to include as context when replying to a mention (default 20; falls back to `messages.groupChat.historyLimit`; `0` disables).
348
- - `dmHistoryLimit`: DM history limit in user turns. Per-user overrides: `dms["<user_id>"].historyLimit`.
349
- - `retry`: retry policy for outbound Discord API calls (attempts, minDelayMs, maxDelayMs, jitter).
350
- - `pluralkit`: resolve PluralKit proxied messages so system members appear as distinct senders.
351
- - `actions`: per-action tool gates; omit to allow all (set `false` to disable).
352
- - `reactions` (covers react + read reactions)
353
- - `stickers`, `emojiUploads`, `stickerUploads`, `polls`, `permissions`, `messages`, `threads`, `pins`, `search`
354
- - `memberInfo`, `roleInfo`, `channelInfo`, `voiceStatus`, `events`
355
- - `channels` (create/edit/delete channels + categories + permissions)
356
- - `roles` (role add/remove, default `false`)
357
- - `moderation` (timeout/kick/ban, default `false`)
358
- - `presence` (bot status/activity, default `false`)
359
- - `execApprovals`: Discord-only exec approval DMs (button UI). Supports `enabled`, `approvers`, `agentFilter`, `sessionFilter`, `cleanupAfterResolve`.
360
-
361
- Reaction notifications use `guilds.<id>.reactionNotifications`:
362
-
363
- - `off`: no reaction events.
364
- - `own`: reactions on the bot's own messages (default).
365
- - `all`: all reactions on all messages.
366
- - `allowlist`: reactions from `guilds.<id>.users` on all messages (empty list disables).
367
-
368
- ### PluralKit (PK) support
369
-
370
- Enable PK lookups so proxied messages resolve to the underlying system + member.
371
- When enabled, OpenClaw uses the member identity for allowlists and labels the
372
- sender as `Member (PK:System)` to avoid accidental Discord pings.
331
+ </Accordion>
332
+
333
+ <Accordion title="PluralKit support">
334
+ Enable PluralKit resolution to map proxied messages to system member identity:
373
335
 
374
336
  ```json5
375
337
  {
@@ -377,100 +339,146 @@ sender as `Member (PK:System)` to avoid accidental Discord pings.
377
339
  discord: {
378
340
  pluralkit: {
379
341
  enabled: true,
380
- token: "pk_live_...", // optional; required for private systems
342
+ token: "pk_live_...", // optional; needed for private systems
381
343
  },
382
344
  },
383
345
  },
384
346
  }
385
347
  ```
386
348
 
387
- Allowlist notes (PK-enabled):
388
-
389
- - Use `pk:<memberId>` in `dm.allowFrom`, `guilds.<id>.users`, or per-channel `users`.
390
- - Member display names are also matched by name/slug.
391
- - Lookups use the **original** Discord message ID (the pre-proxy message), so
392
- the PK API only resolves it within its 30-minute window.
393
- - If PK lookups fail (e.g., private system without a token), proxied messages
394
- are treated as bot messages and are dropped unless `channels.discord.allowBots=true`.
395
-
396
- ### Tool action defaults
397
-
398
- | Action group | Default | Notes |
399
- | -------------- | -------- | ---------------------------------- |
400
- | reactions | enabled | React + list reactions + emojiList |
401
- | stickers | enabled | Send stickers |
402
- | emojiUploads | enabled | Upload emojis |
403
- | stickerUploads | enabled | Upload stickers |
404
- | polls | enabled | Create polls |
405
- | permissions | enabled | Channel permission snapshot |
406
- | messages | enabled | Read/send/edit/delete |
407
- | threads | enabled | Create/list/reply |
408
- | pins | enabled | Pin/unpin/list |
409
- | search | enabled | Message search (preview feature) |
410
- | memberInfo | enabled | Member info |
411
- | roleInfo | enabled | Role list |
412
- | channelInfo | enabled | Channel info + list |
413
- | channels | enabled | Channel/category management |
414
- | voiceStatus | enabled | Voice state lookup |
415
- | events | enabled | List/create scheduled events |
416
- | roles | disabled | Role add/remove |
417
- | moderation | disabled | Timeout/kick/ban |
418
- | presence | disabled | Bot status/activity (setPresence) |
419
-
420
- - `replyToMode`: `off` (default), `first`, or `all`. Applies only when the model includes a reply tag.
421
-
422
- ## Reply tags
423
-
424
- To request a threaded reply, the model can include one tag in its output:
425
-
426
- - `[[reply_to_current]]` — reply to the triggering Discord message.
427
- - `[[reply_to:<id>]]` reply to a specific message id from context/history.
428
- Current message ids are appended to prompts as `[message_id: …]`; history entries already include ids.
429
-
430
- Behavior is controlled by `channels.discord.replyToMode`:
431
-
432
- - `off`: ignore tags.
433
- - `first`: only the first outbound chunk/attachment is a reply.
434
- - `all`: every outbound chunk/attachment is a reply.
435
-
436
- Allowlist matching notes:
437
-
438
- - `allowFrom`/`users`/`groupChannels` accept ids, names, tags, or mentions like `<@id>`.
439
- - Prefixes like `discord:`/`user:` (users) and `channel:` (group DMs) are supported.
440
- - Use `*` to allow any sender/channel.
441
- - When `guilds.<id>.channels` is present, channels not listed are denied by default.
442
- - When `guilds.<id>.channels` is omitted, all channels in the allowlisted guild are allowed.
443
- - To allow **no channels**, set `channels.discord.groupPolicy: "disabled"` (or keep an empty allowlist).
444
- - The configure wizard accepts `Guild/Channel` names (public + private) and resolves them to IDs when possible.
445
- - On startup, OpenClaw resolves channel/user names in allowlists to IDs (when the bot can search members)
446
- and logs the mapping; unresolved entries are kept as typed.
447
-
448
- Native command notes:
449
-
450
- - The registered commands mirror OpenClaw’s chat commands.
451
- - Native commands honor the same allowlists as DMs/guild messages (`channels.discord.dm.allowFrom`, `channels.discord.guilds`, per-channel rules).
452
- - Slash commands may still be visible in Discord UI to users who aren’t allowlisted; OpenClaw enforces allowlists on execution and replies “not authorized”.
453
-
454
- ## Tool actions
455
-
456
- The agent can call `discord` with actions like:
457
-
458
- - `react` / `reactions` (add or list reactions)
459
- - `sticker`, `poll`, `permissions`
460
- - `readMessages`, `sendMessage`, `editMessage`, `deleteMessage`
461
- - Read/search/pin tool payloads include normalized `timestampMs` (UTC epoch ms) and `timestampUtc` alongside raw Discord `timestamp`.
462
- - `threadCreate`, `threadList`, `threadReply`
463
- - `pinMessage`, `unpinMessage`, `listPins`
464
- - `searchMessages`, `memberInfo`, `roleInfo`, `roleAdd`, `roleRemove`, `emojiList`
465
- - `channelInfo`, `channelList`, `voiceStatus`, `eventList`, `eventCreate`
466
- - `timeout`, `kick`, `ban`
467
- - `setPresence` (bot activity and online status)
468
-
469
- Discord message ids are surfaced in the injected context (`[discord message id: …]` and history lines) so the agent can target them.
470
- Emoji can be unicode (e.g., `✅`) or custom emoji syntax like `<:party_blob:1234567890>`.
471
-
472
- ## Safety & ops
473
-
474
- - Treat the bot token like a password; prefer the `DISCORD_BOT_TOKEN` env var on supervised hosts or lock down the config file permissions.
475
- - Only grant the bot permissions it needs (typically Read/Send Messages).
476
- - If the bot is stuck or rate limited, restart the gateway (`openclaw gateway --force`) after confirming no other processes own the Discord session.
349
+ Notes:
350
+
351
+ - allowlists can use `pk:<memberId>`
352
+ - member display names are matched by name/slug
353
+ - lookups use original message ID and are time-window constrained
354
+ - if lookup fails, proxied messages are treated as bot messages and dropped unless `allowBots=true`
355
+
356
+ </Accordion>
357
+
358
+ <Accordion title="Exec approvals in Discord">
359
+ Discord supports button-based exec approvals in DMs.
360
+
361
+ Config path:
362
+
363
+ - `channels.discord.execApprovals.enabled`
364
+ - `channels.discord.execApprovals.approvers`
365
+ - `agentFilter`, `sessionFilter`, `cleanupAfterResolve`
366
+
367
+ If approvals fail with unknown approval IDs, verify approver list and feature enablement.
368
+
369
+ Related docs: [Exec approvals](/tools/exec-approvals)
370
+
371
+ </Accordion>
372
+ </AccordionGroup>
373
+
374
+ ## Tools and action gates
375
+
376
+ Discord message actions include messaging, channel admin, moderation, presence, and metadata actions.
377
+
378
+ Core examples:
379
+
380
+ - messaging: `sendMessage`, `readMessages`, `editMessage`, `deleteMessage`, `threadReply`
381
+ - reactions: `react`, `reactions`, `emojiList`
382
+ - moderation: `timeout`, `kick`, `ban`
383
+ - presence: `setPresence`
384
+
385
+ Action gates live under `channels.discord.actions.*`.
386
+
387
+ Default gate behavior:
388
+
389
+ | Action group | Default |
390
+ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- |
391
+ | reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | enabled |
392
+ | roles | disabled |
393
+ | moderation | disabled |
394
+ | presence | disabled |
395
+
396
+ ## Troubleshooting
397
+
398
+ <AccordionGroup>
399
+ <Accordion title="Used disallowed intents or bot sees no guild messages">
400
+
401
+ - enable Message Content Intent
402
+ - enable Server Members Intent when you depend on user/member resolution
403
+ - restart gateway after changing intents
404
+
405
+ </Accordion>
406
+
407
+ <Accordion title="Guild messages blocked unexpectedly">
408
+
409
+ - verify `groupPolicy`
410
+ - verify guild allowlist under `channels.discord.guilds`
411
+ - if guild `channels` map exists, only listed channels are allowed
412
+ - verify `requireMention` behavior and mention patterns
413
+
414
+ Useful checks:
415
+
416
+ ```bash
417
+ openclaw doctor
418
+ openclaw channels status --probe
419
+ openclaw logs --follow
420
+ ```
421
+
422
+ </Accordion>
423
+
424
+ <Accordion title="Require mention false but still blocked">
425
+ Common causes:
426
+
427
+ - `groupPolicy="allowlist"` without matching guild/channel allowlist
428
+ - `requireMention` configured in the wrong place (must be under `channels.discord.guilds` or channel entry)
429
+ - sender blocked by guild/channel `users` allowlist
430
+
431
+ </Accordion>
432
+
433
+ <Accordion title="Permissions audit mismatches">
434
+ `channels status --probe` permission checks only work for numeric channel IDs.
435
+
436
+ If you use slug keys, runtime matching can still work, but probe cannot fully verify permissions.
437
+
438
+ </Accordion>
439
+
440
+ <Accordion title="DM and pairing issues">
441
+
442
+ - DM disabled: `channels.discord.dm.enabled=false`
443
+ - DM policy disabled: `channels.discord.dm.policy="disabled"`
444
+ - awaiting pairing approval in `pairing` mode
445
+
446
+ </Accordion>
447
+
448
+ <Accordion title="Bot to bot loops">
449
+ By default bot-authored messages are ignored.
450
+
451
+ If you set `channels.discord.allowBots=true`, use strict mention and allowlist rules to avoid loop behavior.
452
+
453
+ </Accordion>
454
+ </AccordionGroup>
455
+
456
+ ## Configuration reference pointers
457
+
458
+ Primary reference:
459
+
460
+ - [Configuration reference - Discord](/gateway/configuration-reference#discord)
461
+
462
+ High-signal Discord fields:
463
+
464
+ - startup/auth: `enabled`, `token`, `accounts.*`, `allowBots`
465
+ - policy: `groupPolicy`, `dm.*`, `guilds.*`, `guilds.*.channels.*`
466
+ - command: `commands.native`, `commands.useAccessGroups`, `configWrites`
467
+ - reply/history: `replyToMode`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit`
468
+ - delivery: `textChunkLimit`, `chunkMode`, `maxLinesPerMessage`
469
+ - media/retry: `mediaMaxMb`, `retry`
470
+ - actions: `actions.*`
471
+ - features: `pluralkit`, `execApprovals`, `intents`, `agentComponents`, `heartbeat`, `responsePrefix`
472
+
473
+ ## Safety and operations
474
+
475
+ - Treat bot tokens as secrets (`DISCORD_BOT_TOKEN` preferred in supervised environments).
476
+ - Grant least-privilege Discord permissions.
477
+ - If command deploy/state is stale, restart gateway and re-check with `openclaw channels status --probe`.
478
+
479
+ ## Related
480
+
481
+ - [Pairing](/channels/pairing)
482
+ - [Channel routing](/channels/channel-routing)
483
+ - [Troubleshooting](/channels/troubleshooting)
484
+ - [Slash commands](/tools/slash-commands)