openclaw-multi-auto 1.0.9 → 1.1.1

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 (490) hide show
  1. package/dist/{accounts-C_lW3Ag9.js → accounts-BOzyfwW4.js} +2 -2
  2. package/dist/{accounts-BVgYdU9W.js → accounts-BtEMxtPK.js} +1 -1
  3. package/dist/{accounts-BU-CeDai.js → accounts-CUYZBSKh.js} +1 -1
  4. package/dist/{accounts-C9HcPI9h.js → accounts-L9ByEpnP.js} +2 -2
  5. package/dist/{accounts-DJaYqD2E.js → accounts-khXX75l1.js} +7 -7
  6. package/dist/{accounts-Tgelvk0C.js → accounts-yfBeCZtS.js} +17 -17
  7. package/dist/{acp-cli-oWFHnS7i.js → acp-cli-CA2oCCEA.js} +8 -8
  8. package/dist/{active-listener-BEdprTkn.js → active-listener-D1yqT1cw.js} +2 -2
  9. package/dist/{agent-scope-BRElciAf.js → agent-scope-NQ9CtXYN.js} +17 -17
  10. package/dist/{agents-CujsWz9d.js → agents-BWVlofyv.js} +14 -14
  11. package/dist/{agents.config-C42STger.js → agents.config-QVfqc4C-.js} +2 -2
  12. package/dist/{api-key-rotation-BJpKWXy0.js → api-key-rotation-DtsNS2Nb.js} +2 -2
  13. package/dist/{api-key-rotation-BbuLHl0_.js → api-key-rotation-Vix80AUw.js} +1 -1
  14. package/dist/{audio-preflight-Yg1vzPE1.js → audio-preflight-DUtdCXjJ.js} +34 -34
  15. package/dist/{audio-preflight-C58LeYZM.js → audio-preflight-DpxQCpsA.js} +32 -32
  16. package/dist/{audio-transcription-runner-B8jbozH5.js → audio-transcription-runner-28fcRNNi.js} +12 -12
  17. package/dist/{audio-transcription-runner-D1cvrZ6s.js → audio-transcription-runner-DYKvqK54.js} +23 -23
  18. package/dist/{audit-membership-runtime-Dntemq07.js → audit-membership-runtime-DWyHWAHM.js} +4 -4
  19. package/dist/{audit-DtlAv66L.js → audit-oC--RZy0.js} +29 -29
  20. package/dist/{auth-Mj21c_GN.js → auth-YB6m93-M.js} +1 -1
  21. package/dist/{auth-choice-CEycltU4.js → auth-choice-CsSQLEkP.js} +13 -13
  22. package/dist/{auth-choice-CGHVedXa.js → auth-choice-gp-h1aBd.js} +11 -11
  23. package/dist/{auth-choice.apply-helpers-D4YQXYfc.js → auth-choice.apply-helpers-CPpuynsT.js} +1 -1
  24. package/dist/{auth-profiles-CdLTlJLc.js → auth-profiles-15pq9j9V.js} +16 -16
  25. package/dist/{auth-token-7kzDLVhb.js → auth-token-Bwn8N6KA.js} +1 -1
  26. package/dist/{banner-CpzKVd4-.js → banner-hcZ0XNXv.js} +2 -2
  27. package/dist/{bonjour-discovery-BuS9wF_p.js → bonjour-discovery-2btw06uD.js} +1 -1
  28. package/dist/{browser-cli-BVtbvQ3Z.js → browser-cli-C4PdLYHy.js} +12 -12
  29. package/dist/build-info.json +3 -3
  30. package/dist/bundled/boot-md/handler.js +51 -51
  31. package/dist/bundled/bootstrap-extra-files/handler.js +6 -6
  32. package/dist/bundled/command-logger/handler.js +2 -2
  33. package/dist/bundled/session-memory/handler.js +51 -51
  34. package/dist/{call-Dp9SDkqK.js → call-CZgRbVYm.js} +10 -10
  35. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  36. package/dist/{channel-account-context-ESLVGdUf.js → channel-account-context-BYiOuxnf.js} +5 -5
  37. package/dist/{channel-activity-LfmEkdDN.js → channel-activity-D9K6yeu8.js} +1 -1
  38. package/dist/{channel-activity-BDnjYF7B.js → channel-activity-xHOMiarp.js} +3 -3
  39. package/dist/{channel-options-CsYaFB_4.js → channel-options-DJkf_8wi.js} +3 -3
  40. package/dist/{channel-selection-DFJsYFPo.js → channel-selection-BpIsCVV5.js} +1 -1
  41. package/dist/{channel-web-DzRsJEE4.js → channel-web-wb1My1Yi.js} +17 -17
  42. package/dist/{channels-cli-CpfeOXtJ.js → channels-cli-DlQONtY9.js} +93 -93
  43. package/dist/{channels-status-issues-6V9ktlZD.js → channels-status-issues-Hj-GOSVm.js} +1 -1
  44. package/dist/{chrome-CRBG2YP_.js → chrome-DwizpzOC.js} +26 -26
  45. package/dist/{chrome-CyM61Cn2.js → chrome-L_icBVLq.js} +4 -4
  46. package/dist/{clawbot-cli-COtnakIJ.js → clawbot-cli-CyTZUVIJ.js} +11 -11
  47. package/dist/cli/daemon-cli.js +1 -1
  48. package/dist/{cli-jnT1hYPO.js → cli-CNTrB-ni.js} +73 -73
  49. package/dist/{client-C-wA75vx.js → client-g0366Z73.js} +2 -2
  50. package/dist/{command-registry-g5tDqdAU.js → command-registry-VOmumlmD.js} +11 -11
  51. package/dist/{command-secret-targets-u3eWn-W3.js → command-secret-targets-CIMuIdbL.js} +4 -4
  52. package/dist/{commands-C8pWcFs_.js → commands-DU7At3rY.js} +1 -1
  53. package/dist/{commands-registry-J6nVL3BQ.js → commands-registry-B_WUa9KB.js} +3 -3
  54. package/dist/{commands-registry-D5qXbFJn.js → commands-registry-V1zZ5pPC.js} +4 -4
  55. package/dist/{completion-cli-DQsyli3B.js → completion-cli-pqdmKVTo.js} +13 -13
  56. package/dist/{config-cli-DUycVHoC.js → config-cli-BqznmzlM.js} +7 -7
  57. package/dist/{config-guard--Obk2MGi.js → config-guard-D8jiLjr7.js} +3 -3
  58. package/dist/{config-validation-iOxszdEd.js → config-validation-BngLiGoq.js} +3 -3
  59. package/dist/{configure-Al_pz_5z.js → configure-B--Umf_O.js} +17 -17
  60. package/dist/{control-ui-assets-DpjfNcTC.js → control-ui-assets-C9ewbI8z.js} +1 -1
  61. package/dist/{cron-cli-CQ5EZw_b.js → cron-cli-DCRPpI1m.js} +11 -11
  62. package/dist/{daemon-cli-Bb80Mzv5.js → daemon-cli-DtBzKM_d.js} +15 -15
  63. package/dist/{daemon-install-B09ifLcJ.js → daemon-install-ckPBUAjJ.js} +4 -4
  64. package/dist/{daemon-install-helpers-CYpECiEx.js → daemon-install-helpers-BWf-PrgA.js} +11 -11
  65. package/dist/{deliver-ChbFOwjw.js → deliver-D4o6VIur.js} +21 -21
  66. package/dist/{deliver-CxF9h9PE.js → deliver-b93aBgie.js} +7 -7
  67. package/dist/deliver-runtime-CdWd-JQI.js +61 -0
  68. package/dist/deliver-runtime-P-G3bPjW.js +36 -0
  69. package/dist/deps-send-discord.runtime-BltWu9GW.js +36 -0
  70. package/dist/deps-send-discord.runtime-DnbhTFX9.js +26 -0
  71. package/dist/deps-send-imessage.runtime-BOiQ6mDx.js +25 -0
  72. package/dist/deps-send-imessage.runtime-CdCif3t7.js +35 -0
  73. package/dist/deps-send-signal.runtime-CTcl388M.js +24 -0
  74. package/dist/deps-send-signal.runtime-fHqkSmMW.js +34 -0
  75. package/dist/deps-send-slack.runtime-CCqBz4Kg.js +22 -0
  76. package/dist/deps-send-slack.runtime-CkyZO7ln.js +32 -0
  77. package/dist/{deps-send-telegram.runtime-B6wp3kx8.js → deps-send-telegram.runtime-C--B69CN.js} +16 -16
  78. package/dist/deps-send-telegram.runtime-DGSKTCpH.js +27 -0
  79. package/dist/deps-send-whatsapp.runtime-BkoMLlCM.js +119 -0
  80. package/dist/deps-send-whatsapp.runtime-CJkTHkah.js +60 -0
  81. package/dist/{devices-cli-C0dUbeL4.js → devices-cli-D6V059Dh.js} +8 -8
  82. package/dist/{diagnostic-Co6Kghr-.js → diagnostic-Bn4PZjMZ.js} +2 -2
  83. package/dist/{diagnostic-BfiudAAN.js → diagnostic-BpP9UBCE.js} +1 -1
  84. package/dist/{diagnostics-DCWM_8Ur.js → diagnostics---0c2_jo.js} +5 -5
  85. package/dist/{directory-cli-Dlws13Di.js → directory-cli-RYC34-EU.js} +7 -7
  86. package/dist/{dns-cli-But7QdAw.js → dns-cli-CElNoV5S.js} +5 -5
  87. package/dist/{dock-BbUkruOF.js → dock-nA2DVPCV.js} +4 -4
  88. package/dist/{docs-cli-Ck2IKAtw.js → docs-cli-Bv7ltPvi.js} +4 -4
  89. package/dist/{doctor-completion-Nat1HXE1.js → doctor-completion-CQIiN7rY.js} +2 -2
  90. package/dist/{doctor-config-flow-WCCoUXeB.js → doctor-config-flow-BOAryh5P.js} +15 -15
  91. package/dist/{enable-C3H8BtN4.js → enable-688HYBNS.js} +1 -1
  92. package/dist/entry.js +2 -2
  93. package/dist/{errors-xt401nuk.js → errors-CCLeFWAg.js} +1 -1
  94. package/dist/{exec-approvals-allowlist-ySf2Yo5n.js → exec-approvals-allowlist-C0Eya3rT.js} +1 -1
  95. package/dist/{exec-approvals-cli-DhLLOys6.js → exec-approvals-cli-BYYerKp8.js} +16 -16
  96. package/dist/{exec-safe-bin-runtime-policy-DnXViOlF.js → exec-safe-bin-runtime-policy-BmJmfDRo.js} +2 -2
  97. package/dist/{fetch-D-SiVqBm.js → fetch-BhAHVdwx.js} +3 -3
  98. package/dist/{fetch-DuraYswo.js → fetch-BlJWzEP6.js} +5 -5
  99. package/dist/{fetch-guard-CKYBfJ66.js → fetch-guard-BbBdhWz_.js} +1 -1
  100. package/dist/{fetch-guard-DWr0d00H.js → fetch-guard-ChYBwfiy.js} +2 -2
  101. package/dist/{frontmatter-BkTfEZ93.js → frontmatter-CvaMP376.js} +3 -3
  102. package/dist/{fs-safe-CTYUrIgQ.js → fs-safe-0jAo_Whb.js} +4 -4
  103. package/dist/{fs-safe-jMDpsYew.js → fs-safe-CFLs-j60.js} +24 -24
  104. package/dist/{gateway-cli--atF6LYo.js → gateway-cli-DOYWSRqa.js} +153 -153
  105. package/dist/{gateway-rpc-DYyQQ1z9.js → gateway-rpc-w6t8Eq_1.js} +1 -1
  106. package/dist/{github-copilot-token-BDioPmd6.js → github-copilot-token-D13V9YBz.js} +7 -7
  107. package/dist/{health-BDJ72U4Z.js → health-C1EstYHd.js} +11 -11
  108. package/dist/{hooks-cli-r0UX8B9a.js → hooks-cli-BFMve5sG.js} +81 -81
  109. package/dist/{hooks-status-CxBdpBry.js → hooks-status-DBnEWOEP.js} +1 -1
  110. package/dist/{image-C7RmnYxa.js → image-Bbn53mzj.js} +6 -6
  111. package/dist/{image-CyHTO86Q.js → image-Bw71y73Q.js} +5 -5
  112. package/dist/{image-ops-pjs5W0CZ.js → image-ops-AJL9tN3_.js} +10 -10
  113. package/dist/{image-ops-BuUnEOE0.js → image-ops-CehkHxmW.js} +2 -2
  114. package/dist/image-runtime-6jhrqcle.js +55 -0
  115. package/dist/image-runtime-CVv2ra9J.js +29 -0
  116. package/dist/{inspect-BeU4yMp2.js → inspect-CUxeDA8c.js} +4 -4
  117. package/dist/{install-safe-path-BiL8OJvK.js → install-safe-path-BX58wFBl.js} +25 -25
  118. package/dist/{installs-BwKmG0Uy.js → installs-B-xr0Fzq.js} +9 -9
  119. package/dist/{ipv4-BoGwfnEw.js → ipv4-C4Yt-xid.js} +1 -1
  120. package/dist/{ir-B83looB-.js → ir-DAP-B-Xw.js} +8 -8
  121. package/dist/{ir-Da7Ahsqc.js → ir-otKVkb4a.js} +8 -8
  122. package/dist/{issue-format-CJ89_-9v.js → issue-format-DSksfKiV.js} +1 -1
  123. package/dist/{json-files-CuJjdF_0.js → json-files-rR19q30D.js} +8 -8
  124. package/dist/{legacy-names-DOC03BkU.js → legacy-names-TyzbVqa_.js} +1 -1
  125. package/dist/{lifecycle-core-BzuWBBm8.js → lifecycle-core-DVwen0ks.js} +5 -5
  126. package/dist/llm-slug-generator.js +51 -51
  127. package/dist/{logger-BfjWMCSD.js → logger-DMZQQtxK.js} +7 -7
  128. package/dist/{login-VkQ9MW3d.js → login-BcRaGQb6.js} +3 -3
  129. package/dist/{login-CrIwcrVI.js → login-DiCctRo1.js} +5 -5
  130. package/dist/{login-qr-BVMQ-xQz.js → login-qr-C9D47WEZ.js} +6 -6
  131. package/dist/{login-qr-BpPDZdl_.js → login-qr-MUbXgjtd.js} +10 -10
  132. package/dist/{logs-cli-DWHhSnWs.js → logs-cli-B3TG2lp8.js} +9 -9
  133. package/dist/{manager-1bvuGrNR.js → manager-BW_NSIMl.js} +13 -13
  134. package/dist/{manager-BUBwl6M6.js → manager-iwcRf3Xc.js} +14 -14
  135. package/dist/manager-runtime-BN6VevdC.js +18 -0
  136. package/dist/{manager-runtime-H9iQnw64.js → manager-runtime-D3KqpRT7.js} +9 -9
  137. package/dist/{manifest-registry-DVviqWVY.js → manifest-registry-CJb8odRF.js} +1 -1
  138. package/dist/{memory-cli-DarWCbU6.js → memory-cli-DGsJx7YM.js} +12 -12
  139. package/dist/{model-BLV8y_N-.js → model-B792l3Cn.js} +2 -2
  140. package/dist/{model-catalog-DTcBkUlX.js → model-catalog-DZ6kl2Ko.js} +3 -3
  141. package/dist/{model-picker-D-fTOOzb.js → model-picker-6fHys0wK.js} +4 -4
  142. package/dist/{model-selection-Dna0Gz1k.js → model-selection-idoqPmw0.js} +43 -43
  143. package/dist/{models-CmjutMmh.js → models-DerrMmwF.js} +17 -17
  144. package/dist/{models-cli-BZFQX22p.js → models-cli-BkTZg_4v.js} +78 -78
  145. package/dist/{models-config-DNcDbV_G.js → models-config-Dabs9Kdv.js} +6 -6
  146. package/dist/{net-D5fSREu4.js → net-BAIqYNz0.js} +2 -2
  147. package/dist/{node-cli-Cnq-PJTp.js → node-cli-DoEq4zeG.js} +33 -33
  148. package/dist/{node-command-policy-B5BMBBJP.js → node-command-policy-DRhSc90G.js} +1 -1
  149. package/dist/{node-service-BpYZAvpl.js → node-service-CcgtNIeT.js} +1 -1
  150. package/dist/{nodes-cli-CkrDOWpv.js → nodes-cli--d9RiCnK.js} +16 -16
  151. package/dist/{nodes-screen-DfsQohWd.js → nodes-screen-BTND5VDq.js} +7 -7
  152. package/dist/{npm-pack-install-E-mkrZ55.js → npm-pack-install-CGUDOSKz.js} +18 -18
  153. package/dist/{npm-resolution-BUUmg5ON.js → npm-resolution-CAoULCWM.js} +4 -4
  154. package/dist/{onboard-DINGSS9R.js → onboard-CMZRkPVc.js} +6 -6
  155. package/dist/{onboard-channels-Di4MjWDY.js → onboard-channels-SlJu6XWJ.js} +21 -21
  156. package/dist/{onboard-custom-DITBQuWQ.js → onboard-custom-EzfL89yz.js} +4 -4
  157. package/dist/{onboard-helpers-DO7u2ZOy.js → onboard-helpers-lGpaVp03.js} +10 -10
  158. package/dist/{onboard-hooks-K02_ZWDq.js → onboard-hooks-B7TMiJoY.js} +4 -4
  159. package/dist/{onboard-remote-5-ugiSN2.js → onboard-remote-nvWS7on7.js} +4 -4
  160. package/dist/{onboard-skills-CSzbC2KZ.js → onboard-skills-hz91W03u.js} +4 -4
  161. package/dist/{onboarding-BM4dvUK6.js → onboarding-CTPuMVQI.js} +14 -14
  162. package/dist/{onboarding.finalize-p_RDh7ET.js → onboarding.finalize-DLzl5ZOg.js} +87 -87
  163. package/dist/{onboarding.gateway-config-DldlRfms.js → onboarding.gateway-config-C4MoTr60.js} +18 -18
  164. package/dist/{onboarding.secret-input-BIRIJiCU.js → onboarding.secret-input-BFD0OW4X.js} +1 -1
  165. package/dist/{openai-model-default-CY2Nk4cn.js → openai-model-default-h4LbSR7f.js} +2 -2
  166. package/dist/{openclaw-root-BFfBQ6FD.js → openclaw-root-BU3lu8pM.js} +8 -8
  167. package/dist/{outbound-ChDjtuD6.js → outbound-C2kanETZ.js} +6 -6
  168. package/dist/{outbound-attachment-DfWsfe2N.js → outbound-attachment-CAJBGcna.js} +2 -2
  169. package/dist/{outbound-attachment-DqHlD21U.js → outbound-attachment-DBrYWX8h.js} +2 -2
  170. package/dist/{outbound-DPdJe7e1.js → outbound-kbHYt1JW.js} +3 -3
  171. package/dist/{pairing-cli-D2VZxWg3.js → pairing-cli-CXbmkz7Z.js} +8 -8
  172. package/dist/{pairing-labels-D4rnJ5pJ.js → pairing-labels-CaPLIhlh.js} +1 -1
  173. package/dist/{pairing-store-BXArq4hn.js → pairing-store-Brs9aNn_.js} +3 -3
  174. package/dist/{path-alias-guards-DbNvNQar.js → path-alias-guards-DhIwq92y.js} +3 -3
  175. package/dist/{path-alias-guards-BzvdLvTI.js → path-alias-guards-DqXRZmsL.js} +1 -1
  176. package/dist/{path-safety-ClQO4BB6.js → path-safety-BjIM4N4t.js} +1 -1
  177. package/dist/{paths-Cvc9EM8Y.js → paths-C6TxBCvO.js} +5 -5
  178. package/dist/{paths-Bkr-BCxW.js → paths-CCxysrzL.js} +4 -4
  179. package/dist/{paths-BB_1ZWOj.js → paths-Cv63xST_.js} +9 -9
  180. package/dist/{pi-embedded-BC_GWGuw.js → pi-embedded-BaGj07T0.js} +167 -167
  181. package/dist/{pi-embedded-helpers-oXDyXTD8.js → pi-embedded-helpers-DC2OtKrl.js} +6 -6
  182. package/dist/{pi-embedded-helpers-CbIShbOM.js → pi-embedded-helpers-wy0DZvx1.js} +52 -52
  183. package/dist/{pi-model-discovery-Dymwdjt0.js → pi-model-discovery-BGgOlX8N.js} +7 -7
  184. package/dist/{pi-model-discovery-CECkJMCt.js → pi-model-discovery-DOb5RTev.js} +1 -1
  185. package/dist/pi-model-discovery-runtime-Bwmi4Ev8.js +11 -0
  186. package/dist/{pi-model-discovery-runtime-g7UP-SFR.js → pi-model-discovery-runtime-DShjmiiF.js} +5 -5
  187. package/dist/{pi-tools.before-tool-call.runtime-Df7B-ggW.js → pi-tools.before-tool-call.runtime-B079pVah.js} +5 -5
  188. package/dist/{pi-tools.before-tool-call.runtime-Cwab_5W1.js → pi-tools.before-tool-call.runtime-BuLxSyx9.js} +9 -9
  189. package/dist/{pi-tools.policy-CydUEzFi.js → pi-tools.policy-DZ-X86Va.js} +5 -5
  190. package/dist/{plugin-auto-enable-BE4ZVjAL.js → plugin-auto-enable-BCMqEDjQ.js} +3 -3
  191. package/dist/{plugin-registry-DXW3eyib.js → plugin-registry-BPlCWMur.js} +3 -3
  192. package/dist/plugin-sdk/discord.js +6 -6
  193. package/dist/{plugins-4Rj4OjLY.js → plugins-CWkRQYDj.js} +11 -11
  194. package/dist/{plugins-VAZrrfgw.js → plugins-DCxT-37x.js} +2 -2
  195. package/dist/{plugins-cli-BQJOOVMx.js → plugins-cli-D9ILEfyb.js} +83 -83
  196. package/dist/{ports-DMkRSlnH.js → ports-BlCLhwbc.js} +1 -1
  197. package/dist/{ports-DogAV7pa.js → ports-CER5YPnN.js} +2 -2
  198. package/dist/{program-BA11qFx1.js → program-CV56xn7w.js} +81 -81
  199. package/dist/{prompt-select-styled-B0GS28ia.js → prompt-select-styled-BOa5I_PU.js} +40 -40
  200. package/dist/{provider-auth-helpers-CrGL-jik.js → provider-auth-helpers-c6mNCUXO.js} +5 -5
  201. package/dist/{proxy-env-wKO3g8Yv.js → proxy-env-BMrSVckF.js} +1 -1
  202. package/dist/{proxy-env-DlmzDx8x.js → proxy-env-Cq5gdrbj.js} +1 -1
  203. package/dist/{proxy-fetch-B2pEfjbR.js → proxy-fetch-CCjEYbFm.js} +1 -1
  204. package/dist/{push-apns-BEwBjZ0a.js → push-apns-FOkPD05E.js} +5 -5
  205. package/dist/{pw-ai-D2wlMJtN.js → pw-ai-Cl1Lc7RC.js} +14 -14
  206. package/dist/{pw-ai-CnbxziFP.js → pw-ai-CxBU3aK5.js} +18 -18
  207. package/dist/{qmd-manager-BtIKUaO9.js → qmd-manager-BsYsO9Ii.js} +10 -10
  208. package/dist/{qmd-manager-Dp6PJ8zQ.js → qmd-manager-DEJMqoGd.js} +20 -20
  209. package/dist/{qr-cli-CFz9kS5X.js → qr-cli-BD2jK4fg.js} +2 -2
  210. package/dist/{query-expansion-BrSWVbaE.js → query-expansion-1UTIWjP6.js} +12 -12
  211. package/dist/{query-expansion-CX-1fS52.js → query-expansion-DtLc3wjL.js} +6 -6
  212. package/dist/{redact-COik8ET1.js → redact-ClbcYG1J.js} +1 -1
  213. package/dist/{redact-snapshot-Bs4goggz.js → redact-snapshot-D_qQD4A-.js} +1 -1
  214. package/dist/{register.agent-D641ju8B.js → register.agent-tbPA5YAy.js} +94 -94
  215. package/dist/register.configure-DuwRrXc2.js +165 -0
  216. package/dist/{register.maintenance-BFkk8MEH.js → register.maintenance-DrqDlV5b.js} +95 -95
  217. package/dist/{register.message-D5uE_Hop.js → register.message-CoKXNaU0.js} +74 -74
  218. package/dist/{register.onboard-zHFvSwFr.js → register.onboard-CSWOSL9O.js} +18 -18
  219. package/dist/{register.setup-uTbv3_P1.js → register.setup-DBx5JX6h.js} +21 -21
  220. package/dist/{register.status-health-sessions-CB7t-JQx.js → register.status-health-sessions-D1bPtfep.js} +88 -88
  221. package/dist/{register.subclis-MEiNmuy5.js → register.subclis-QGJNmjss.js} +31 -31
  222. package/dist/{rpc-DVfuVmy9.js → rpc-DkMrTUww.js} +1 -1
  223. package/dist/{run-main-mrvunzuy.js → run-main-CPftxqTe.js} +92 -92
  224. package/dist/{run-with-concurrency-BgYfgkXT.js → run-with-concurrency-D_ZpbgEG.js} +4 -4
  225. package/dist/{runtime-C87FQrrv.js → runtime-MAH2Oph4.js} +3 -3
  226. package/dist/{runtime-config-collectors-BQaC477D.js → runtime-config-collectors-BJMV6Mt1.js} +1 -1
  227. package/dist/{runtime-whatsapp-login.runtime-DjdgScUI.js → runtime-whatsapp-login.runtime-CGYWl9eB.js} +7 -7
  228. package/dist/runtime-whatsapp-login.runtime-IeylZEl4.js +13 -0
  229. package/dist/runtime-whatsapp-outbound.runtime-ClBRuLsq.js +22 -0
  230. package/dist/{runtime-whatsapp-outbound.runtime-B74K7opl.js → runtime-whatsapp-outbound.runtime-hZEfYaRM.js} +15 -15
  231. package/dist/{sandbox-Ct-_lzi1.js → sandbox-0TbzPJaS.js} +18 -18
  232. package/dist/{sandbox-cli-C3RoXFRE.js → sandbox-cli-NLaxffXl.js} +25 -25
  233. package/dist/{secrets-cli-B3hqCxvs.js → secrets-cli-KLGbYet6.js} +11 -11
  234. package/dist/{security-cli-DcHIyXr7.js → security-cli-EIEkcYVb.js} +42 -42
  235. package/dist/{send-dfu6_rgf.js → send-BQERFNyo.js} +5 -5
  236. package/dist/{send-CnRP4P-G.js → send-BW-ZtYG3.js} +5 -5
  237. package/dist/{send-L7gRiwyd.js → send-Bj776ESJ.js} +7 -7
  238. package/dist/{send-2zKwf9NW.js → send-BtZAqquW.js} +11 -11
  239. package/dist/{send-DAQAKa9Z.js → send-CxgWxXZc.js} +6 -6
  240. package/dist/{send-5o2p_xjn.js → send-DAMtu9kK.js} +4 -4
  241. package/dist/{send-PE6cwoTe.js → send-DcxmcFi_.js} +8 -8
  242. package/dist/{send-6lz6rNVP.js → send-Dx2RkUOZ.js} +6 -6
  243. package/dist/{send-u1Bo4CSn.js → send-sC6ka831.js} +8 -8
  244. package/dist/{send-BHTiZcH3.js → send-vmONuVgL.js} +26 -26
  245. package/dist/{server-context-8pDe2iyd.js → server-context-HJVwPQYn.js} +12 -12
  246. package/dist/{server-Ci4xtuR9.js → server-kUElNhlY.js} +20 -20
  247. package/dist/{server-lifecycle-k5daSrde.js → server-lifecycle-BE32unpZ.js} +2 -2
  248. package/dist/{server-middleware-DMiFT9xU.js → server-middleware-AS2VOYkK.js} +1 -1
  249. package/dist/{server-node-events-BmnPjNXE.js → server-node-events-DkbZzI6P.js} +74 -74
  250. package/dist/{service-BhOFtHSw.js → service-CyStNr3d.js} +15 -15
  251. package/dist/{session-D8ImowSs.js → session-A4QhBRvH.js} +8 -8
  252. package/dist/{session-DkOjpX3_.js → session-CaCx4rPH.js} +1 -1
  253. package/dist/{session-utils-DKRmXD2l.js → session-utils-CGqb1oeq.js} +6 -6
  254. package/dist/{sessions-svLGrv0Z.js → sessions-BV6HNW4h.js} +4 -4
  255. package/dist/{sessions-BOWPuhe5.js → sessions-BmVDW-7q.js} +15 -15
  256. package/dist/{shared-CjuadLFV.js → shared-DUQavBtY.js} +3 -3
  257. package/dist/{shared-CbAkLNrg.js → shared-JW74idb0.js} +1 -1
  258. package/dist/{skill-commands-DNqJ-kwn.js → skill-commands-CMzBZKG2.js} +9 -9
  259. package/dist/{skill-commands-TpUsdjev.js → skill-commands-WtIJG0CI.js} +5 -5
  260. package/dist/{skill-scanner-BZvvItef.js → skill-scanner-DIFsGcqE.js} +6 -6
  261. package/dist/{skills-DR-vacol.js → skills-7T9PwwL6.js} +3 -3
  262. package/dist/{skills-7ODkHQYp.js → skills-CE_iqvM5.js} +22 -22
  263. package/dist/{skills-cli-oay0tY8Z.js → skills-cli-DPavvthL.js} +5 -5
  264. package/dist/{skills-install-Vmi7xYfa.js → skills-install-BoLfaoWv.js} +6 -6
  265. package/dist/{skills-status-BmN697ff.js → skills-status-CK5Gnf6i.js} +1 -1
  266. package/dist/{slash-commands.runtime-BfaheruW.js → slash-commands.runtime-CMGx2xHy.js} +11 -11
  267. package/dist/slash-commands.runtime-Cpn2tYW4.js +16 -0
  268. package/dist/slash-dispatch.runtime-BAeJXa56.js +114 -0
  269. package/dist/slash-dispatch.runtime-DoBAQBU5.js +56 -0
  270. package/dist/{slash-skill-commands.runtime-D34BKAN-.js → slash-skill-commands.runtime-ChU2tck2.js} +15 -15
  271. package/dist/slash-skill-commands.runtime-DKMvvdDW.js +20 -0
  272. package/dist/{status-BcQchPaC.js → status-Bp-K1BEf.js} +27 -27
  273. package/dist/{status.update-B20UBTDq.js → status.update-ZYUSggzS.js} +2 -2
  274. package/dist/{store-D89wDcz9.js → store--eR1R_UX.js} +2 -2
  275. package/dist/{store-DDkqo1sO.js → store-DeASfYEV.js} +5 -5
  276. package/dist/{subagent-registry-CPxHbyN5.js → subagent-registry-8qHIVhRq.js} +149 -149
  277. package/dist/subagent-registry-runtime-DVomlbm6.js +114 -0
  278. package/dist/subagent-registry-runtime-ppWS3tVu.js +56 -0
  279. package/dist/{subsystem-B45WV3qB.js → subsystem-Di1z8l0Z.js} +14 -14
  280. package/dist/{system-cli-D2yIJoKU.js → system-cli-C2xNfuQM.js} +9 -9
  281. package/dist/{system-run-command-BmhbnLTE.js → system-run-command-BPWZk7KI.js} +1 -1
  282. package/dist/{systemd-DjWVSbAG.js → systemd-Cf-0XKYu.js} +9 -9
  283. package/dist/{systemd-hints-Do-aQ9jw.js → systemd-hints-CYllYKO0.js} +6 -6
  284. package/dist/{systemd-linger-DpmnYgKU.js → systemd-linger-zllO90bD.js} +1 -1
  285. package/dist/{tables-BxyIF0w4.js → tables-CV7Afb0h.js} +1 -1
  286. package/dist/{tables-mE4cJBN2.js → tables-d739Y1xW.js} +1 -1
  287. package/dist/{tailnet-0_FsdHP-.js → tailnet-DJFUq7_R.js} +1 -1
  288. package/dist/{target-errors-KOHiT_JA.js → target-errors-CBI2Ga0y.js} +2 -2
  289. package/dist/{target-errors-mnlwhAjP.js → target-errors-iVxliVqA.js} +4 -4
  290. package/dist/{thinking-BeGmb5k6.js → thinking-DXYisHiZ.js} +7 -7
  291. package/dist/{tokens-q32vI39c.js → tokens-DxnY9ui_.js} +1 -1
  292. package/dist/{tool-images-RZdHiZcG.js → tool-images-2cBx1W8h.js} +2 -2
  293. package/dist/{tool-images-CNPfeCmU.js → tool-images-Bn6dB14u.js} +1 -1
  294. package/dist/{tui-DL6NZZEa.js → tui-DTVy-YhN.js} +6 -6
  295. package/dist/{tui-cli-BNAYhvpu.js → tui-cli-CexRLJ3a.js} +32 -32
  296. package/dist/{update-DlS-d52F.js → update-DijPxK0g.js} +3 -3
  297. package/dist/{update-cli-D8-DqIs2.js → update-cli-9NslG4yR.js} +104 -104
  298. package/dist/{update-runner-CzTQ7BJT.js → update-runner-B6_UqreW.js} +16 -16
  299. package/dist/{web-igmw_EhT.js → web-CzWRVmFt.js} +55 -55
  300. package/dist/web-DGoa03ue.js +118 -0
  301. package/dist/{webhooks-cli-QdaQhvbT.js → webhooks-cli-B4ZcXTtw.js} +6 -6
  302. package/dist/{whatsapp-actions-Bp8F0cOF.js → whatsapp-actions-Jm4VW1Ve.js} +17 -17
  303. package/dist/{whatsapp-actions-BHbJJyqw.js → whatsapp-actions-iEArE_Ez.js} +21 -21
  304. package/dist/{with-timeout-BMMWHlH3.js → with-timeout-C8-tY12i.js} +3 -3
  305. package/dist/{workspace-v76gFdZu.js → workspace-CIGzK2_w.js} +1 -1
  306. package/dist/{workspace-U-DyR64O.js → workspace-CUVC6GX1.js} +20 -20
  307. package/dist/{workspace-dirs-Cz_Zgtg2.js → workspace-dirs-D4SMysgC.js} +1 -1
  308. package/dist/{wsl-CvQfS6aU.js → wsl-CsGe5QCP.js} +2 -2
  309. package/package.json +7 -9
  310. package/scripts/auth-monitor.sh +89 -0
  311. package/scripts/bench-cli-startup.ts +200 -0
  312. package/scripts/bench-model.ts +146 -0
  313. package/scripts/build-and-run-mac.sh +18 -0
  314. package/scripts/build-docs-list.mjs +14 -0
  315. package/scripts/build_icon.sh +59 -0
  316. package/scripts/bundle-a2ui.sh +95 -0
  317. package/scripts/canvas-a2ui-copy.ts +40 -0
  318. package/scripts/changelog-to-html.sh +91 -0
  319. package/scripts/check-channel-agnostic-boundaries.mjs +343 -0
  320. package/scripts/check-composite-action-input-interpolation.py +81 -0
  321. package/scripts/check-ingress-agent-owner-context.mjs +45 -0
  322. package/scripts/check-no-monolithic-plugin-sdk-entry-imports.ts +103 -0
  323. package/scripts/check-no-pairing-store-group-auth.mjs +180 -0
  324. package/scripts/check-no-random-messaging-tmp.mjs +89 -0
  325. package/scripts/check-no-raw-channel-fetch.mjs +107 -0
  326. package/scripts/check-no-raw-window-open.mjs +86 -0
  327. package/scripts/check-no-register-http-handler.mjs +38 -0
  328. package/scripts/check-pairing-account-scope.mjs +100 -0
  329. package/scripts/check-plugin-sdk-exports.mjs +157 -0
  330. package/scripts/check-ts-max-loc.ts +80 -0
  331. package/scripts/check-webhook-auth-body-order.mjs +55 -0
  332. package/scripts/ci-changed-scope.d.mts +9 -0
  333. package/scripts/ci-changed-scope.mjs +141 -0
  334. package/scripts/claude-auth-status.sh +280 -0
  335. package/scripts/clawlog.sh +321 -0
  336. package/scripts/clawtributors-map.json +40 -0
  337. package/scripts/codesign-mac-app.sh +289 -0
  338. package/scripts/codespell-dictionary.txt +3 -0
  339. package/scripts/codespell-ignore.txt +9 -0
  340. package/scripts/committer +117 -0
  341. package/scripts/copy-export-html-templates.ts +59 -0
  342. package/scripts/copy-hook-metadata.ts +55 -0
  343. package/scripts/copy-plugin-sdk-root-alias.mjs +10 -0
  344. package/scripts/create-dmg.sh +176 -0
  345. package/scripts/create-instance.sh +4 -1
  346. package/scripts/cron_usage_report.ts +273 -0
  347. package/scripts/debug-claude-usage.ts +391 -0
  348. package/scripts/dev/discord-acp-plain-language-smoke.ts +868 -0
  349. package/scripts/dev/gateway-smoke.ts +75 -0
  350. package/scripts/dev/gateway-ws-client.ts +132 -0
  351. package/scripts/dev/ios-node-e2e.ts +283 -0
  352. package/scripts/dev/ios-pull-gateway-log.sh +17 -0
  353. package/scripts/dev/test-device-pair-telegram.ts +62 -0
  354. package/scripts/docker/cleanup-smoke/Dockerfile +19 -0
  355. package/scripts/docker/cleanup-smoke/run.sh +35 -0
  356. package/scripts/docker/install-sh-common/cli-verify.sh +47 -0
  357. package/scripts/docker/install-sh-e2e/Dockerfile +17 -0
  358. package/scripts/docker/install-sh-e2e/run.sh +535 -0
  359. package/scripts/docker/install-sh-nonroot/Dockerfile +33 -0
  360. package/scripts/docker/install-sh-nonroot/run.sh +36 -0
  361. package/scripts/docker/install-sh-smoke/Dockerfile +25 -0
  362. package/scripts/docker/install-sh-smoke/run.sh +63 -0
  363. package/scripts/docs-i18n/doc_mode.go +272 -0
  364. package/scripts/docs-i18n/glossary.go +29 -0
  365. package/scripts/docs-i18n/go.mod +10 -0
  366. package/scripts/docs-i18n/go.sum +10 -0
  367. package/scripts/docs-i18n/html_translate.go +160 -0
  368. package/scripts/docs-i18n/main.go +273 -0
  369. package/scripts/docs-i18n/markdown_segments.go +131 -0
  370. package/scripts/docs-i18n/masking.go +89 -0
  371. package/scripts/docs-i18n/order.go +37 -0
  372. package/scripts/docs-i18n/placeholders.go +30 -0
  373. package/scripts/docs-i18n/process.go +202 -0
  374. package/scripts/docs-i18n/prompt.go +146 -0
  375. package/scripts/docs-i18n/segment.go +11 -0
  376. package/scripts/docs-i18n/tm.go +132 -0
  377. package/scripts/docs-i18n/translator.go +247 -0
  378. package/scripts/docs-i18n/util.go +81 -0
  379. package/scripts/docs-link-audit.mjs +233 -0
  380. package/scripts/docs-list.js +173 -0
  381. package/scripts/docs-spellcheck.sh +44 -0
  382. package/scripts/e2e/Dockerfile +30 -0
  383. package/scripts/e2e/Dockerfile.qr-import +13 -0
  384. package/scripts/e2e/doctor-install-switch-docker.sh +160 -0
  385. package/scripts/e2e/gateway-network-docker.sh +145 -0
  386. package/scripts/e2e/onboard-docker.sh +570 -0
  387. package/scripts/e2e/plugins-docker.sh +224 -0
  388. package/scripts/e2e/qr-import-docker.sh +11 -0
  389. package/scripts/firecrawl-compare.ts +139 -0
  390. package/scripts/generate-host-env-security-policy-swift.mjs +74 -0
  391. package/scripts/generate-secretref-credential-matrix.ts +14 -0
  392. package/scripts/ghsa-patch.mjs +168 -0
  393. package/scripts/install-maca.sh +173 -0
  394. package/scripts/install.ps1 +329 -0
  395. package/scripts/ios-configure-signing.sh +100 -0
  396. package/scripts/ios-team-id.sh +207 -0
  397. package/scripts/label-open-issues.ts +893 -0
  398. package/scripts/lib/callsite-guard.mjs +45 -0
  399. package/scripts/lib/pairing-guard-context.mjs +13 -0
  400. package/scripts/lib/ts-guard-utils.mjs +157 -0
  401. package/scripts/make_appcast.sh +70 -0
  402. package/scripts/mobile-reauth.sh +84 -0
  403. package/scripts/notarize-mac-artifact.sh +65 -0
  404. package/scripts/npm_publish.sh +48 -0
  405. package/scripts/package-mac-app.sh +280 -0
  406. package/scripts/package-mac-dist.sh +93 -0
  407. package/scripts/podman/openclaw.container.in +28 -0
  408. package/scripts/pr +1708 -0
  409. package/scripts/pr-merge +44 -0
  410. package/scripts/pr-prepare +40 -0
  411. package/scripts/pr-review +13 -0
  412. package/scripts/pre-commit/filter-staged-files.mjs +39 -0
  413. package/scripts/pre-commit/run-node-tool.sh +31 -0
  414. package/scripts/protocol-gen-swift.ts +247 -0
  415. package/scripts/protocol-gen.ts +51 -0
  416. package/scripts/readability-basic-compare.ts +66 -0
  417. package/scripts/recover-orphaned-processes.sh +191 -0
  418. package/scripts/release-check.ts +362 -0
  419. package/scripts/repro/tsx-name-repro.ts +3 -0
  420. package/scripts/restart-mac.sh +269 -0
  421. package/scripts/run-node.d.mts +22 -0
  422. package/scripts/run-node.mjs +263 -0
  423. package/scripts/run-openclaw-podman.sh +213 -0
  424. package/scripts/sandbox-browser-entrypoint.sh +127 -0
  425. package/scripts/sandbox-browser-setup.sh +7 -0
  426. package/scripts/sandbox-common-setup.sh +40 -0
  427. package/scripts/sandbox-setup.sh +7 -0
  428. package/scripts/setup-auth-system.sh +119 -0
  429. package/scripts/shell-helpers/README.md +226 -0
  430. package/scripts/shell-helpers/clawdock-helpers.sh +417 -0
  431. package/scripts/sparkle-build.ts +76 -0
  432. package/scripts/sqlite-vec-smoke.mjs +38 -0
  433. package/scripts/sync-dist.sh +171 -0
  434. package/scripts/sync-labels.ts +100 -0
  435. package/scripts/sync-moonshot-docs.ts +125 -0
  436. package/scripts/sync-plugin-versions.ts +108 -0
  437. package/scripts/systemd/openclaw-auth-monitor.service +14 -0
  438. package/scripts/systemd/openclaw-auth-monitor.timer +10 -0
  439. package/scripts/termux-auth-widget.sh +81 -0
  440. package/scripts/termux-quick-auth.sh +30 -0
  441. package/scripts/termux-sync-widget.sh +25 -0
  442. package/scripts/test-cleanup-docker.sh +14 -0
  443. package/scripts/test-force.ts +59 -0
  444. package/scripts/test-hotspots.mjs +83 -0
  445. package/scripts/test-install-sh-docker.sh +72 -0
  446. package/scripts/test-install-sh-e2e-docker.sh +29 -0
  447. package/scripts/test-live-gateway-models-docker.sh +33 -0
  448. package/scripts/test-live-models-docker.sh +34 -0
  449. package/scripts/test-parallel.mjs +468 -0
  450. package/scripts/test-perf-budget.mjs +127 -0
  451. package/scripts/test-shell-completion.ts +223 -0
  452. package/scripts/ui.js +203 -0
  453. package/scripts/update-clawtributors.ts +573 -0
  454. package/scripts/update-clawtributors.types.ts +36 -0
  455. package/scripts/update-package-with-mirror.sh +67 -0
  456. package/scripts/watch-node.d.mts +14 -0
  457. package/scripts/watch-node.mjs +92 -0
  458. package/scripts/write-build-info.ts +47 -0
  459. package/scripts/write-cli-compat.ts +74 -0
  460. package/scripts/write-cli-startup-metadata.ts +93 -0
  461. package/scripts/write-plugin-sdk-entry-dts.ts +60 -0
  462. package/scripts/zai-fallback-repro.ts +168 -0
  463. package/dist/deliver-runtime-B80mXYrL.js +0 -36
  464. package/dist/deliver-runtime-DixuU_uB.js +0 -61
  465. package/dist/deps-send-discord.runtime-CDcLcDSt.js +0 -36
  466. package/dist/deps-send-discord.runtime-DZUccI6Z.js +0 -26
  467. package/dist/deps-send-imessage.runtime-BGPUVMIE.js +0 -35
  468. package/dist/deps-send-imessage.runtime-CF3OpoqY.js +0 -25
  469. package/dist/deps-send-signal.runtime-Cw4-ozeO.js +0 -24
  470. package/dist/deps-send-signal.runtime-DQDD44_O.js +0 -34
  471. package/dist/deps-send-slack.runtime-BDsDhS1P.js +0 -22
  472. package/dist/deps-send-slack.runtime-Cpy77gBG.js +0 -32
  473. package/dist/deps-send-telegram.runtime-D_4xVasO.js +0 -27
  474. package/dist/deps-send-whatsapp.runtime-D2sVAclS.js +0 -119
  475. package/dist/deps-send-whatsapp.runtime-UBgpoWg9.js +0 -60
  476. package/dist/image-runtime-B2qh5seQ.js +0 -55
  477. package/dist/image-runtime-DtMbm7AR.js +0 -29
  478. package/dist/manager-runtime-FO1Sx3W8.js +0 -18
  479. package/dist/pi-model-discovery-runtime-BeY4EUPp.js +0 -11
  480. package/dist/register.configure-BrDOSLIq.js +0 -165
  481. package/dist/runtime-whatsapp-login.runtime-DUb55byQ.js +0 -13
  482. package/dist/runtime-whatsapp-outbound.runtime-Bii_xSfI.js +0 -22
  483. package/dist/slash-commands.runtime-CVw6566g.js +0 -16
  484. package/dist/slash-dispatch.runtime-CMK_EPYG.js +0 -56
  485. package/dist/slash-dispatch.runtime-D0xInkf3.js +0 -114
  486. package/dist/slash-skill-commands.runtime-DxZ4z5h6.js +0 -20
  487. package/dist/subagent-registry-runtime-DdGrQBnQ.js +0 -56
  488. package/dist/subagent-registry-runtime-SkB2tTaE.js +0 -114
  489. package/dist/web-DWiOofzq.js +0 -118
  490. package/install.sh +0 -293
@@ -0,0 +1,226 @@
1
+ # ClawDock <!-- omit in toc -->
2
+
3
+ Stop typing `docker-compose` commands. Just type `clawdock-start`.
4
+
5
+ Inspired by Simon Willison's [Running OpenClaw in Docker](https://til.simonwillison.net/llms/openclaw-docker).
6
+
7
+ - [Quickstart](#quickstart)
8
+ - [Available Commands](#available-commands)
9
+ - [Basic Operations](#basic-operations)
10
+ - [Container Access](#container-access)
11
+ - [Web UI \& Devices](#web-ui--devices)
12
+ - [Setup \& Configuration](#setup--configuration)
13
+ - [Maintenance](#maintenance)
14
+ - [Utilities](#utilities)
15
+ - [Common Workflows](#common-workflows)
16
+ - [Check Status and Logs](#check-status-and-logs)
17
+ - [Set Up WhatsApp Bot](#set-up-whatsapp-bot)
18
+ - [Troubleshooting Device Pairing](#troubleshooting-device-pairing)
19
+ - [Fix Token Mismatch Issues](#fix-token-mismatch-issues)
20
+ - [Permission Denied](#permission-denied)
21
+ - [Requirements](#requirements)
22
+
23
+ ## Quickstart
24
+
25
+ **Install:**
26
+
27
+ ```bash
28
+ mkdir -p ~/.clawdock && curl -sL https://raw.githubusercontent.com/openclaw/openclaw/main/scripts/shell-helpers/clawdock-helpers.sh -o ~/.clawdock/clawdock-helpers.sh
29
+ ```
30
+
31
+ ```bash
32
+ echo 'source ~/.clawdock/clawdock-helpers.sh' >> ~/.zshrc && source ~/.zshrc
33
+ ```
34
+
35
+ **See what you get:**
36
+
37
+ ```bash
38
+ clawdock-help
39
+ ```
40
+
41
+ On first command, ClawDock auto-detects your OpenClaw directory:
42
+
43
+ - Checks common paths (`~/openclaw`, `~/workspace/openclaw`, etc.)
44
+ - If found, asks you to confirm
45
+ - Saves to `~/.clawdock/config`
46
+
47
+ **First time setup:**
48
+
49
+ ```bash
50
+ clawdock-start
51
+ ```
52
+
53
+ ```bash
54
+ clawdock-fix-token
55
+ ```
56
+
57
+ ```bash
58
+ clawdock-dashboard
59
+ ```
60
+
61
+ If you see "pairing required":
62
+
63
+ ```bash
64
+ clawdock-devices
65
+ ```
66
+
67
+ And approve the request for the specific device:
68
+
69
+ ```bash
70
+ clawdock-approve <request-id>
71
+ ```
72
+
73
+ ## Available Commands
74
+
75
+ ### Basic Operations
76
+
77
+ | Command | Description |
78
+ | ------------------ | ------------------------------- |
79
+ | `clawdock-start` | Start the gateway |
80
+ | `clawdock-stop` | Stop the gateway |
81
+ | `clawdock-restart` | Restart the gateway |
82
+ | `clawdock-status` | Check container status |
83
+ | `clawdock-logs` | View live logs (follows output) |
84
+
85
+ ### Container Access
86
+
87
+ | Command | Description |
88
+ | ------------------------- | ---------------------------------------------- |
89
+ | `clawdock-shell` | Interactive shell inside the gateway container |
90
+ | `clawdock-cli <command>` | Run OpenClaw CLI commands |
91
+ | `clawdock-exec <command>` | Execute arbitrary commands in the container |
92
+
93
+ ### Web UI & Devices
94
+
95
+ | Command | Description |
96
+ | ----------------------- | ------------------------------------------ |
97
+ | `clawdock-dashboard` | Open web UI in browser with authentication |
98
+ | `clawdock-devices` | List device pairing requests |
99
+ | `clawdock-approve <id>` | Approve a device pairing request |
100
+
101
+ ### Setup & Configuration
102
+
103
+ | Command | Description |
104
+ | -------------------- | ------------------------------------------------- |
105
+ | `clawdock-fix-token` | Configure gateway authentication token (run once) |
106
+
107
+ ### Maintenance
108
+
109
+ | Command | Description |
110
+ | ------------------ | ------------------------------------------------ |
111
+ | `clawdock-rebuild` | Rebuild the Docker image |
112
+ | `clawdock-clean` | Remove all containers and volumes (destructive!) |
113
+
114
+ ### Utilities
115
+
116
+ | Command | Description |
117
+ | -------------------- | ----------------------------------------- |
118
+ | `clawdock-health` | Run gateway health check |
119
+ | `clawdock-token` | Display the gateway authentication token |
120
+ | `clawdock-cd` | Jump to the OpenClaw project directory |
121
+ | `clawdock-config` | Open the OpenClaw config directory |
122
+ | `clawdock-workspace` | Open the workspace directory |
123
+ | `clawdock-help` | Show all available commands with examples |
124
+
125
+ ## Common Workflows
126
+
127
+ ### Check Status and Logs
128
+
129
+ **Restart the gateway:**
130
+
131
+ ```bash
132
+ clawdock-restart
133
+ ```
134
+
135
+ **Check container status:**
136
+
137
+ ```bash
138
+ clawdock-status
139
+ ```
140
+
141
+ **View live logs:**
142
+
143
+ ```bash
144
+ clawdock-logs
145
+ ```
146
+
147
+ ### Set Up WhatsApp Bot
148
+
149
+ **Shell into the container:**
150
+
151
+ ```bash
152
+ clawdock-shell
153
+ ```
154
+
155
+ **Inside the container, login to WhatsApp:**
156
+
157
+ ```bash
158
+ openclaw channels login --channel whatsapp --verbose
159
+ ```
160
+
161
+ Scan the QR code with WhatsApp on your phone.
162
+
163
+ **Verify connection:**
164
+
165
+ ```bash
166
+ openclaw status
167
+ ```
168
+
169
+ ### Troubleshooting Device Pairing
170
+
171
+ **Check for pending pairing requests:**
172
+
173
+ ```bash
174
+ clawdock-devices
175
+ ```
176
+
177
+ **Copy the Request ID from the "Pending" table, then approve:**
178
+
179
+ ```bash
180
+ clawdock-approve <request-id>
181
+ ```
182
+
183
+ Then refresh your browser.
184
+
185
+ ### Fix Token Mismatch Issues
186
+
187
+ If you see "gateway token mismatch" errors:
188
+
189
+ ```bash
190
+ clawdock-fix-token
191
+ ```
192
+
193
+ This will:
194
+
195
+ 1. Read the token from your `.env` file
196
+ 2. Configure it in the OpenClaw config
197
+ 3. Restart the gateway
198
+ 4. Verify the configuration
199
+
200
+ ### Permission Denied
201
+
202
+ **Ensure Docker is running and you have permission:**
203
+
204
+ ```bash
205
+ docker ps
206
+ ```
207
+
208
+ ## Requirements
209
+
210
+ - Docker and Docker Compose installed
211
+ - Bash or Zsh shell
212
+ - OpenClaw project (from `docker-setup.sh`)
213
+
214
+ ## Development
215
+
216
+ **Test with fresh config (mimics first-time install):**
217
+
218
+ ```bash
219
+ unset CLAWDOCK_DIR && rm -f ~/.clawdock/config && source scripts/shell-helpers/clawdock-helpers.sh
220
+ ```
221
+
222
+ Then run any command to trigger auto-detect:
223
+
224
+ ```bash
225
+ clawdock-start
226
+ ```
@@ -0,0 +1,417 @@
1
+ #!/usr/bin/env bash
2
+ # ClawDock - Docker helpers for OpenClaw
3
+ # Inspired by Simon Willison's "Running OpenClaw in Docker"
4
+ # https://til.simonwillison.net/llms/openclaw-docker
5
+ #
6
+ # Installation:
7
+ # mkdir -p ~/.clawdock && curl -sL https://raw.githubusercontent.com/openclaw/openclaw/main/scripts/shell-helpers/clawdock-helpers.sh -o ~/.clawdock/clawdock-helpers.sh
8
+ # echo 'source ~/.clawdock/clawdock-helpers.sh' >> ~/.zshrc
9
+ #
10
+ # Usage:
11
+ # clawdock-help # Show all available commands
12
+
13
+ # =============================================================================
14
+ # Colors
15
+ # =============================================================================
16
+ _CLR_RESET='\033[0m'
17
+ _CLR_BOLD='\033[1m'
18
+ _CLR_DIM='\033[2m'
19
+ _CLR_GREEN='\033[0;32m'
20
+ _CLR_YELLOW='\033[1;33m'
21
+ _CLR_BLUE='\033[0;34m'
22
+ _CLR_MAGENTA='\033[0;35m'
23
+ _CLR_CYAN='\033[0;36m'
24
+ _CLR_RED='\033[0;31m'
25
+
26
+ # Styled command output (green + bold)
27
+ _clr_cmd() {
28
+ echo -e "${_CLR_GREEN}${_CLR_BOLD}$1${_CLR_RESET}"
29
+ }
30
+
31
+ # Inline command for use in sentences
32
+ _cmd() {
33
+ echo "${_CLR_GREEN}${_CLR_BOLD}$1${_CLR_RESET}"
34
+ }
35
+
36
+ # =============================================================================
37
+ # Config
38
+ # =============================================================================
39
+ CLAWDOCK_CONFIG="${HOME}/.clawdock/config"
40
+
41
+ # Common paths to check for OpenClaw
42
+ CLAWDOCK_COMMON_PATHS=(
43
+ "${HOME}/openclaw"
44
+ "${HOME}/workspace/openclaw"
45
+ "${HOME}/projects/openclaw"
46
+ "${HOME}/dev/openclaw"
47
+ "${HOME}/code/openclaw"
48
+ "${HOME}/src/openclaw"
49
+ )
50
+
51
+ _clawdock_filter_warnings() {
52
+ grep -v "^WARN\|^time="
53
+ }
54
+
55
+ _clawdock_trim_quotes() {
56
+ local value="$1"
57
+ value="${value#\"}"
58
+ value="${value%\"}"
59
+ printf "%s" "$value"
60
+ }
61
+
62
+ _clawdock_read_config_dir() {
63
+ if [[ ! -f "$CLAWDOCK_CONFIG" ]]; then
64
+ return 1
65
+ fi
66
+ local raw
67
+ raw=$(sed -n 's/^CLAWDOCK_DIR=//p' "$CLAWDOCK_CONFIG" | head -n 1)
68
+ if [[ -z "$raw" ]]; then
69
+ return 1
70
+ fi
71
+ _clawdock_trim_quotes "$raw"
72
+ }
73
+
74
+ # Ensure CLAWDOCK_DIR is set and valid
75
+ _clawdock_ensure_dir() {
76
+ # Already set and valid?
77
+ if [[ -n "$CLAWDOCK_DIR" && -f "${CLAWDOCK_DIR}/docker-compose.yml" ]]; then
78
+ return 0
79
+ fi
80
+
81
+ # Try loading from config
82
+ local config_dir
83
+ config_dir=$(_clawdock_read_config_dir)
84
+ if [[ -n "$config_dir" && -f "${config_dir}/docker-compose.yml" ]]; then
85
+ CLAWDOCK_DIR="$config_dir"
86
+ return 0
87
+ fi
88
+
89
+ # Auto-detect from common paths
90
+ local found_path=""
91
+ for path in "${CLAWDOCK_COMMON_PATHS[@]}"; do
92
+ if [[ -f "${path}/docker-compose.yml" ]]; then
93
+ found_path="$path"
94
+ break
95
+ fi
96
+ done
97
+
98
+ if [[ -n "$found_path" ]]; then
99
+ echo ""
100
+ echo "🦞 Found OpenClaw at: $found_path"
101
+ echo -n " Use this location? [Y/n] "
102
+ read -r response
103
+ if [[ "$response" =~ ^[Nn] ]]; then
104
+ echo ""
105
+ echo "Set CLAWDOCK_DIR manually:"
106
+ echo " export CLAWDOCK_DIR=/path/to/openclaw"
107
+ return 1
108
+ fi
109
+ CLAWDOCK_DIR="$found_path"
110
+ else
111
+ echo ""
112
+ echo "❌ OpenClaw not found in common locations."
113
+ echo ""
114
+ echo "Clone it first:"
115
+ echo ""
116
+ echo " git clone https://github.com/openclaw/openclaw.git ~/openclaw"
117
+ echo " cd ~/openclaw && ./docker-setup.sh"
118
+ echo ""
119
+ echo "Or set CLAWDOCK_DIR if it's elsewhere:"
120
+ echo ""
121
+ echo " export CLAWDOCK_DIR=/path/to/openclaw"
122
+ echo ""
123
+ return 1
124
+ fi
125
+
126
+ # Save to config
127
+ if [[ ! -d "${HOME}/.clawdock" ]]; then
128
+ /bin/mkdir -p "${HOME}/.clawdock"
129
+ fi
130
+ echo "CLAWDOCK_DIR=\"$CLAWDOCK_DIR\"" > "$CLAWDOCK_CONFIG"
131
+ echo "✅ Saved to $CLAWDOCK_CONFIG"
132
+ echo ""
133
+ return 0
134
+ }
135
+
136
+ # Wrapper to run docker compose commands
137
+ _clawdock_compose() {
138
+ _clawdock_ensure_dir || return 1
139
+ local compose_args=(-f "${CLAWDOCK_DIR}/docker-compose.yml")
140
+ if [[ -f "${CLAWDOCK_DIR}/docker-compose.extra.yml" ]]; then
141
+ compose_args+=(-f "${CLAWDOCK_DIR}/docker-compose.extra.yml")
142
+ fi
143
+ command docker compose "${compose_args[@]}" "$@"
144
+ }
145
+
146
+ _clawdock_read_env_token() {
147
+ _clawdock_ensure_dir || return 1
148
+ if [[ ! -f "${CLAWDOCK_DIR}/.env" ]]; then
149
+ return 1
150
+ fi
151
+ local raw
152
+ raw=$(sed -n 's/^OPENCLAW_GATEWAY_TOKEN=//p' "${CLAWDOCK_DIR}/.env" | head -n 1)
153
+ if [[ -z "$raw" ]]; then
154
+ return 1
155
+ fi
156
+ _clawdock_trim_quotes "$raw"
157
+ }
158
+
159
+ # Basic Operations
160
+ clawdock-start() {
161
+ _clawdock_compose up -d openclaw-gateway
162
+ }
163
+
164
+ clawdock-stop() {
165
+ _clawdock_compose down
166
+ }
167
+
168
+ clawdock-restart() {
169
+ _clawdock_compose restart openclaw-gateway
170
+ }
171
+
172
+ clawdock-logs() {
173
+ _clawdock_compose logs -f openclaw-gateway
174
+ }
175
+
176
+ clawdock-status() {
177
+ _clawdock_compose ps
178
+ }
179
+
180
+ # Navigation
181
+ clawdock-cd() {
182
+ _clawdock_ensure_dir || return 1
183
+ cd "${CLAWDOCK_DIR}"
184
+ }
185
+
186
+ clawdock-config() {
187
+ cd ~/.openclaw
188
+ }
189
+
190
+ clawdock-workspace() {
191
+ cd ~/.openclaw/workspace
192
+ }
193
+
194
+ # Container Access
195
+ clawdock-shell() {
196
+ _clawdock_compose exec openclaw-gateway \
197
+ bash -c 'echo "alias openclaw=\"./openclaw.mjs\"" > /tmp/.bashrc_openclaw && bash --rcfile /tmp/.bashrc_openclaw'
198
+ }
199
+
200
+ clawdock-exec() {
201
+ _clawdock_compose exec openclaw-gateway "$@"
202
+ }
203
+
204
+ clawdock-cli() {
205
+ _clawdock_compose run --rm openclaw-cli "$@"
206
+ }
207
+
208
+ # Maintenance
209
+ clawdock-rebuild() {
210
+ _clawdock_compose build openclaw-gateway
211
+ }
212
+
213
+ clawdock-clean() {
214
+ _clawdock_compose down -v --remove-orphans
215
+ }
216
+
217
+ # Health check
218
+ clawdock-health() {
219
+ _clawdock_ensure_dir || return 1
220
+ local token
221
+ token=$(_clawdock_read_env_token)
222
+ if [[ -z "$token" ]]; then
223
+ echo "❌ Error: Could not find gateway token"
224
+ echo " Check: ${CLAWDOCK_DIR}/.env"
225
+ return 1
226
+ fi
227
+ _clawdock_compose exec -e "OPENCLAW_GATEWAY_TOKEN=$token" openclaw-gateway \
228
+ node dist/index.js health
229
+ }
230
+
231
+ # Show gateway token
232
+ clawdock-token() {
233
+ _clawdock_read_env_token
234
+ }
235
+
236
+ # Fix token configuration (run this once after setup)
237
+ clawdock-fix-token() {
238
+ _clawdock_ensure_dir || return 1
239
+
240
+ echo "🔧 Configuring gateway token..."
241
+ local token
242
+ token=$(clawdock-token)
243
+ if [[ -z "$token" ]]; then
244
+ echo "❌ Error: Could not find gateway token"
245
+ echo " Check: ${CLAWDOCK_DIR}/.env"
246
+ return 1
247
+ fi
248
+
249
+ echo "📝 Setting token: ${token:0:20}..."
250
+
251
+ _clawdock_compose exec -e "TOKEN=$token" openclaw-gateway \
252
+ bash -c './openclaw.mjs config set gateway.remote.token "$TOKEN" && ./openclaw.mjs config set gateway.auth.token "$TOKEN"' 2>&1 | _clawdock_filter_warnings
253
+
254
+ echo "🔍 Verifying token was saved..."
255
+ local saved_token
256
+ saved_token=$(_clawdock_compose exec openclaw-gateway \
257
+ bash -c "./openclaw.mjs config get gateway.remote.token 2>/dev/null" 2>&1 | _clawdock_filter_warnings | tr -d '\r\n' | head -c 64)
258
+
259
+ if [[ "$saved_token" == "$token" ]]; then
260
+ echo "✅ Token saved correctly!"
261
+ else
262
+ echo "⚠️ Token mismatch detected"
263
+ echo " Expected: ${token:0:20}..."
264
+ echo " Got: ${saved_token:0:20}..."
265
+ fi
266
+
267
+ echo "🔄 Restarting gateway..."
268
+ _clawdock_compose restart openclaw-gateway 2>&1 | _clawdock_filter_warnings
269
+
270
+ echo "⏳ Waiting for gateway to start..."
271
+ sleep 5
272
+
273
+ echo "✅ Configuration complete!"
274
+ echo -e " Try: $(_cmd clawdock-devices)"
275
+ }
276
+
277
+ # Open dashboard in browser
278
+ clawdock-dashboard() {
279
+ _clawdock_ensure_dir || return 1
280
+
281
+ echo "🦞 Getting dashboard URL..."
282
+ local output exit_status url
283
+ output=$(_clawdock_compose run --rm openclaw-cli dashboard --no-open 2>&1)
284
+ exit_status=$?
285
+ url=$(printf "%s\n" "$output" | _clawdock_filter_warnings | grep -o 'http[s]\?://[^[:space:]]*' | head -n 1)
286
+ if [[ $exit_status -ne 0 ]]; then
287
+ echo "❌ Failed to get dashboard URL"
288
+ echo -e " Try restarting: $(_cmd clawdock-restart)"
289
+ return 1
290
+ fi
291
+
292
+ if [[ -n "$url" ]]; then
293
+ echo "✅ Opening: $url"
294
+ open "$url" 2>/dev/null || xdg-open "$url" 2>/dev/null || echo " Please open manually: $url"
295
+ echo ""
296
+ echo -e "${_CLR_CYAN}💡 If you see 'pairing required' error:${_CLR_RESET}"
297
+ echo -e " 1. Run: $(_cmd clawdock-devices)"
298
+ echo " 2. Copy the Request ID from the Pending table"
299
+ echo -e " 3. Run: $(_cmd 'clawdock-approve <request-id>')"
300
+ else
301
+ echo "❌ Failed to get dashboard URL"
302
+ echo -e " Try restarting: $(_cmd clawdock-restart)"
303
+ fi
304
+ }
305
+
306
+ # List device pairings
307
+ clawdock-devices() {
308
+ _clawdock_ensure_dir || return 1
309
+
310
+ echo "🔍 Checking device pairings..."
311
+ local output exit_status
312
+ output=$(_clawdock_compose exec openclaw-gateway node dist/index.js devices list 2>&1)
313
+ exit_status=$?
314
+ printf "%s\n" "$output" | _clawdock_filter_warnings
315
+ if [ $exit_status -ne 0 ]; then
316
+ echo ""
317
+ echo -e "${_CLR_CYAN}💡 If you see token errors above:${_CLR_RESET}"
318
+ echo -e " 1. Verify token is set: $(_cmd clawdock-token)"
319
+ echo " 2. Try manual config inside container:"
320
+ echo -e " $(_cmd clawdock-shell)"
321
+ echo -e " $(_cmd 'openclaw config get gateway.remote.token')"
322
+ return 1
323
+ fi
324
+
325
+ echo ""
326
+ echo -e "${_CLR_CYAN}💡 To approve a pairing request:${_CLR_RESET}"
327
+ echo -e " $(_cmd 'clawdock-approve <request-id>')"
328
+ }
329
+
330
+ # Approve device pairing request
331
+ clawdock-approve() {
332
+ _clawdock_ensure_dir || return 1
333
+
334
+ if [[ -z "$1" ]]; then
335
+ echo -e "❌ Usage: $(_cmd 'clawdock-approve <request-id>')"
336
+ echo ""
337
+ echo -e "${_CLR_CYAN}💡 How to approve a device:${_CLR_RESET}"
338
+ echo -e " 1. Run: $(_cmd clawdock-devices)"
339
+ echo " 2. Find the Request ID in the Pending table (long UUID)"
340
+ echo -e " 3. Run: $(_cmd 'clawdock-approve <that-request-id>')"
341
+ echo ""
342
+ echo "Example:"
343
+ echo -e " $(_cmd 'clawdock-approve 6f9db1bd-a1cc-4d3f-b643-2c195262464e')"
344
+ return 1
345
+ fi
346
+
347
+ echo "✅ Approving device: $1"
348
+ _clawdock_compose exec openclaw-gateway \
349
+ node dist/index.js devices approve "$1" 2>&1 | _clawdock_filter_warnings
350
+
351
+ echo ""
352
+ echo "✅ Device approved! Refresh your browser."
353
+ }
354
+
355
+ # Show all available clawdock helper commands
356
+ clawdock-help() {
357
+ echo -e "\n${_CLR_BOLD}${_CLR_CYAN}🦞 ClawDock - Docker Helpers for OpenClaw${_CLR_RESET}\n"
358
+
359
+ echo -e "${_CLR_BOLD}${_CLR_MAGENTA}⚡ Basic Operations${_CLR_RESET}"
360
+ echo -e " $(_cmd clawdock-start) ${_CLR_DIM}Start the gateway${_CLR_RESET}"
361
+ echo -e " $(_cmd clawdock-stop) ${_CLR_DIM}Stop the gateway${_CLR_RESET}"
362
+ echo -e " $(_cmd clawdock-restart) ${_CLR_DIM}Restart the gateway${_CLR_RESET}"
363
+ echo -e " $(_cmd clawdock-status) ${_CLR_DIM}Check container status${_CLR_RESET}"
364
+ echo -e " $(_cmd clawdock-logs) ${_CLR_DIM}View live logs (follows)${_CLR_RESET}"
365
+ echo ""
366
+
367
+ echo -e "${_CLR_BOLD}${_CLR_MAGENTA}🐚 Container Access${_CLR_RESET}"
368
+ echo -e " $(_cmd clawdock-shell) ${_CLR_DIM}Shell into container (openclaw alias ready)${_CLR_RESET}"
369
+ echo -e " $(_cmd clawdock-cli) ${_CLR_DIM}Run CLI commands (e.g., clawdock-cli status)${_CLR_RESET}"
370
+ echo -e " $(_cmd clawdock-exec) ${_CLR_CYAN}<cmd>${_CLR_RESET} ${_CLR_DIM}Execute command in gateway container${_CLR_RESET}"
371
+ echo ""
372
+
373
+ echo -e "${_CLR_BOLD}${_CLR_MAGENTA}🌐 Web UI & Devices${_CLR_RESET}"
374
+ echo -e " $(_cmd clawdock-dashboard) ${_CLR_DIM}Open web UI in browser ${_CLR_CYAN}(auto-guides you)${_CLR_RESET}"
375
+ echo -e " $(_cmd clawdock-devices) ${_CLR_DIM}List device pairings ${_CLR_CYAN}(auto-guides you)${_CLR_RESET}"
376
+ echo -e " $(_cmd clawdock-approve) ${_CLR_CYAN}<id>${_CLR_RESET} ${_CLR_DIM}Approve device pairing ${_CLR_CYAN}(with examples)${_CLR_RESET}"
377
+ echo ""
378
+
379
+ echo -e "${_CLR_BOLD}${_CLR_MAGENTA}⚙️ Setup & Configuration${_CLR_RESET}"
380
+ echo -e " $(_cmd clawdock-fix-token) ${_CLR_DIM}Configure gateway token ${_CLR_CYAN}(run once)${_CLR_RESET}"
381
+ echo ""
382
+
383
+ echo -e "${_CLR_BOLD}${_CLR_MAGENTA}🔧 Maintenance${_CLR_RESET}"
384
+ echo -e " $(_cmd clawdock-rebuild) ${_CLR_DIM}Rebuild Docker image${_CLR_RESET}"
385
+ echo -e " $(_cmd clawdock-clean) ${_CLR_RED}⚠️ Remove containers & volumes (nuclear)${_CLR_RESET}"
386
+ echo ""
387
+
388
+ echo -e "${_CLR_BOLD}${_CLR_MAGENTA}🛠️ Utilities${_CLR_RESET}"
389
+ echo -e " $(_cmd clawdock-health) ${_CLR_DIM}Run health check${_CLR_RESET}"
390
+ echo -e " $(_cmd clawdock-token) ${_CLR_DIM}Show gateway auth token${_CLR_RESET}"
391
+ echo -e " $(_cmd clawdock-cd) ${_CLR_DIM}Jump to openclaw project directory${_CLR_RESET}"
392
+ echo -e " $(_cmd clawdock-config) ${_CLR_DIM}Open config directory (~/.openclaw)${_CLR_RESET}"
393
+ echo -e " $(_cmd clawdock-workspace) ${_CLR_DIM}Open workspace directory${_CLR_RESET}"
394
+ echo ""
395
+
396
+ echo -e "${_CLR_BOLD}${_CLR_CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${_CLR_RESET}"
397
+ echo -e "${_CLR_BOLD}${_CLR_GREEN}🚀 First Time Setup${_CLR_RESET}"
398
+ echo -e "${_CLR_CYAN} 1.${_CLR_RESET} $(_cmd clawdock-start) ${_CLR_DIM}# Start the gateway${_CLR_RESET}"
399
+ echo -e "${_CLR_CYAN} 2.${_CLR_RESET} $(_cmd clawdock-fix-token) ${_CLR_DIM}# Configure token${_CLR_RESET}"
400
+ echo -e "${_CLR_CYAN} 3.${_CLR_RESET} $(_cmd clawdock-dashboard) ${_CLR_DIM}# Open web UI${_CLR_RESET}"
401
+ echo -e "${_CLR_CYAN} 4.${_CLR_RESET} $(_cmd clawdock-devices) ${_CLR_DIM}# If pairing needed${_CLR_RESET}"
402
+ echo -e "${_CLR_CYAN} 5.${_CLR_RESET} $(_cmd clawdock-approve) ${_CLR_CYAN}<id>${_CLR_RESET} ${_CLR_DIM}# Approve pairing${_CLR_RESET}"
403
+ echo ""
404
+
405
+ echo -e "${_CLR_BOLD}${_CLR_GREEN}💬 WhatsApp Setup${_CLR_RESET}"
406
+ echo -e " $(_cmd clawdock-shell)"
407
+ echo -e " ${_CLR_BLUE}>${_CLR_RESET} $(_cmd 'openclaw channels login --channel whatsapp')"
408
+ echo -e " ${_CLR_BLUE}>${_CLR_RESET} $(_cmd 'openclaw status')"
409
+ echo ""
410
+
411
+ echo -e "${_CLR_BOLD}${_CLR_CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${_CLR_RESET}"
412
+ echo ""
413
+
414
+ echo -e "${_CLR_CYAN}💡 All commands guide you through next steps!${_CLR_RESET}"
415
+ echo -e "${_CLR_BLUE}📚 Docs: ${_CLR_RESET}${_CLR_CYAN}https://docs.openclaw.ai${_CLR_RESET}"
416
+ echo ""
417
+ }