activeclaw 2026.2.11 → 2026.2.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. package/CHANGELOG.md +106 -0
  2. package/dist/{accounts-DbzMEfKN.js → accounts-DCDeFTra.js} +2 -2
  3. package/dist/{accounts-C2elk6PC.js → accounts-DeqIQjo1.js} +2 -2
  4. package/dist/{acp-cli-CVFTdsQY.js → acp-cli-CeYI4XRd.js} +15 -16
  5. package/dist/{acp-cli-BpJwIyLl.js → acp-cli-rNbGXICg.js} +14 -15
  6. package/dist/{agent-Bz1r5O8q.js → agent-BvNJF5QL.js} +19 -15
  7. package/dist/{agent-22-R4bNS.js → agent-CyMxTyrG.js} +20 -16
  8. package/dist/{agent-scope-D8miw9q_.js → agent-scope-BIEhVP4_.js} +172 -4
  9. package/dist/{agent-scope-CGmuusG9.js → agent-scope-CQCus0rI.js} +3 -3
  10. package/dist/{agent-scope-DQuy3dwI.js → agent-scope-CsRbLH4l.js} +4 -4
  11. package/dist/{agent-scope-BEf5crnU.js → agent-scope-DPIFau3f.js} +5 -1
  12. package/dist/audio-preflight-BU8W7uxc.js +60 -0
  13. package/dist/audio-preflight-CGsumMzb.js +60 -0
  14. package/dist/audio-preflight-SLmkJI6-.js +74 -0
  15. package/dist/audio-preflight-jZc5mFCZ.js +71 -0
  16. package/dist/{audit-C4wLaF0D.js → audit-Dmww_503.js} +71 -19
  17. package/dist/{audit-CY-yopxa.js → audit-wPu26VMb.js} +72 -20
  18. package/dist/{tailscale-DU6DgqVy.js → auth-9x3lqfIY.js} +208 -3
  19. package/dist/{tailscale-Cu-2HNvU.js → auth-CQNl_IaI.js} +190 -3
  20. package/dist/{auth-health-BFKUoCwJ.js → auth-health-C4L4FGBA.js} +1 -1
  21. package/dist/{auth-health-d7BMZlWG.js → auth-health-j6epgQbq.js} +1 -1
  22. package/dist/{auth-profiles-Bv1AEm-Y.js → auth-profiles-ByNs3eEm.js} +87 -31
  23. package/dist/build-info.json +3 -3
  24. package/dist/bundled/boot-md/handler.js +28 -22
  25. package/dist/bundled/session-memory/handler.js +33 -22
  26. package/dist/{call-7yrB6v4I.js → call-DVYCIV8m.js} +5 -5
  27. package/dist/{call-Bek1xlgk.js → call-SolyGS1r.js} +6 -6
  28. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  29. package/dist/{channel-options-3mdYN0C_.js → channel-options-BwC2yQcR.js} +4 -4
  30. package/dist/{channel-options-DJ0b1m7B.js → channel-options-Cq9BVDkP.js} +12 -7
  31. package/dist/{channel-selection-RZimme3j.js → channel-selection-D4D6ImhN.js} +2 -2
  32. package/dist/{channel-selection-B9b7Kuit.js → channel-selection-MZAHm4U8.js} +2 -2
  33. package/dist/{channels-cli-CYbK2Dku.js → channels-cli-9Dsk9Qm7.js} +57 -53
  34. package/dist/{channels-cli-BFznbGOs.js → channels-cli-BJUppQll.js} +59 -55
  35. package/dist/{channels-status-issues-B3KkflfR.js → channels-status-issues-D7GSV1GS.js} +1 -1
  36. package/dist/{channels-status-issues-DQkRaZts.js → channels-status-issues-DDAWeT-6.js} +1 -1
  37. package/dist/{chrome-Db7w64LF.js → chrome-BfB6JdKF.js} +4 -4
  38. package/dist/{chrome-Dm-EgOjJ.js → chrome-Cvr-57lg.js} +6 -5
  39. package/dist/{chrome-CF16STk9.js → chrome-DL0avO8n.js} +2 -1
  40. package/dist/{chrome-yIKmOzCO.js → chrome-foEwx3lN.js} +5 -4
  41. package/dist/{clack-prompter-BCiBkJVr.js → clack-prompter-Bz3Mmcl-.js} +5 -5
  42. package/dist/{clack-prompter-DuBVnTKy.js → clack-prompter-ChCGXfyt.js} +4 -4
  43. package/dist/cli/daemon-cli.js +1 -1
  44. package/dist/{cli-Cl3PdJei.js → cli-ZR9ugUBX.js} +42 -38
  45. package/dist/cli-miPe4Ujz.js +93 -0
  46. package/dist/{client-6xKrRC-1.js → client-BrYfyoDK.js} +54 -5
  47. package/dist/{client-DMloFP_O.js → client-CTwXnRl7.js} +54 -5
  48. package/dist/{command-format-ayFsmwwz.js → command-format-Bxe0mWee.js} +1 -1
  49. package/dist/{command-options-BTAzyqqb.js → command-options-BvgxzPbK.js} +9 -4
  50. package/dist/{commands-CjEGXOZ_.js → commands-BX_OIIVR.js} +4 -4
  51. package/dist/{completion-cli-DrJGfJGl.js → completion-cli-CR77-jyv.js} +3 -3
  52. package/dist/{completion-cli-DOec3E2Z.js → completion-cli-DnjpxAag.js} +30 -30
  53. package/dist/{config-B00lvFac.js → config-Bdhomfei.js} +21 -7
  54. package/dist/{config-XBdA0ciN.js → config-BvMsmctM.js} +83 -9
  55. package/dist/{config-BqGVMf1y.js → config-QYrbd7x7.js} +60 -6
  56. package/dist/{config--NUdpACy.js → config-aFQssWKX.js} +21 -7
  57. package/dist/{config-guard-4kCO_rnQ.js → config-guard-CljaSxJd.js} +160 -51
  58. package/dist/{configure-B69emwZv.js → configure-BXLiucXo.js} +28 -25
  59. package/dist/{configure-sMhpLzFf.js → configure-BYPqXzGZ.js} +28 -25
  60. package/dist/control-auth-8Cf4WXpR.js +54 -0
  61. package/dist/control-auth-DBCu3qyv.js +54 -0
  62. package/dist/{control-service-Db_1V-KY.js → control-service-B5KnPqGP.js} +11 -5
  63. package/dist/{control-service-IRAmbcbN.js → control-service-DKnttEus.js} +10 -4
  64. package/dist/control-ui/assets/{index-CnB9IO4a.js → index-B4LPvte9.js} +369 -369
  65. package/dist/control-ui/assets/index-B4LPvte9.js.map +1 -0
  66. package/dist/control-ui/index.html +1 -1
  67. package/dist/{cron-cli-Cum2324v.js → cron-cli-D7BRjDv2.js} +20 -20
  68. package/dist/{cron-cli-DhUWcYdk.js → cron-cli-z1zk_FXQ.js} +19 -19
  69. package/dist/{daemon-cli-q7nkEF5-.js → daemon-cli-BDkU2ocb.js} +60 -21
  70. package/dist/{daemon-cli-CTC2CHci.js → daemon-cli-cNSF93-v.js} +59 -20
  71. package/dist/{daemon-runtime-c0uXH4Dl.js → daemon-runtime-B0tg_LsX.js} +3 -3
  72. package/dist/{daemon-runtime-UsK-tOty.js → daemon-runtime-Bsjeut6m.js} +3 -3
  73. package/dist/{deliver-hf-WKyWd.js → deliver-CIU9Npgs.js} +373 -281
  74. package/dist/{deliver-CT6KiDqO.js → deliver-DYYCo1G7.js} +369 -278
  75. package/dist/{deliver-T9d44OpZ.js → deliver-LsxKETro.js} +371 -279
  76. package/dist/{deliver-CPy8jYj9.js → deliver-xUU3mGHo.js} +369 -277
  77. package/dist/{deps-Bv1kLtwo.js → deps-QSwGcoNZ.js} +2 -2
  78. package/dist/{deps-DFQdAWQc.js → deps-lAAA2zYI.js} +2 -2
  79. package/dist/{devices-cli-Cm7U1py9.js → devices-cli-BG3-2oqt.js} +14 -14
  80. package/dist/{devices-cli-ZpjlfK-e.js → devices-cli-VIQtOvt_.js} +14 -14
  81. package/dist/{directory-cli-B14TUSJA.js → directory-cli-BCJwjVC0.js} +16 -16
  82. package/dist/{directory-cli-67kzd4I5.js → directory-cli-jYzZ02gk.js} +14 -14
  83. package/dist/{dispatcher-3ElQWGVI.js → dispatcher-DY51b-Zc.js} +2 -2
  84. package/dist/{dns-cli-CU-xfhTN.js → dns-cli-DHIiMJjS.js} +12 -12
  85. package/dist/{dns-cli-Dqj7O6Q_.js → dns-cli-pZlv87Ib.js} +11 -11
  86. package/dist/{docs-cli-CamBqzb5.js → docs-cli-2JDiwfzP.js} +8 -8
  87. package/dist/{docs-cli-Cj3L5oqB.js → docs-cli-BhkYqoIQ.js} +7 -7
  88. package/dist/{doctor-BV1kvbMm.js → doctor-Bf8EhNtA.js} +36 -35
  89. package/dist/{doctor-BJirShBi.js → doctor-sYG5V4Co.js} +34 -33
  90. package/dist/entry.js +56 -18
  91. package/dist/{env-BxRc6wWv.js → env-ONzUVAG2.js} +1 -1
  92. package/dist/{exec-CijMSZd9.js → exec-B8lXct-k.js} +503 -14
  93. package/dist/{exec-B8JKbXKW.js → exec-CACT5OAW.js} +1 -1
  94. package/dist/{exec-57A8Rlc8.js → exec-CJFFoM7H.js} +32 -13
  95. package/dist/{exec-Cv_Ofd1m.js → exec-YIosokWE.js} +1 -1
  96. package/dist/{exec-approvals-cli-DEzz9Iai.js → exec-approvals-cli-7LH0lwhO.js} +21 -21
  97. package/dist/{exec-approvals-cli-DhXj3hQX.js → exec-approvals-cli-apGnQbpj.js} +21 -21
  98. package/dist/extensionAPI.js +7733 -8746
  99. package/dist/fetch-DmiOpALK.js +274 -0
  100. package/dist/fetch-timeout-BEtUjM1S.js +274 -0
  101. package/dist/fetch-timeout-DEoXG_SF.js +274 -0
  102. package/dist/fetch-timeout-DTK9vxex.js +274 -0
  103. package/dist/{gateway-cli-D1EdIq8I.js → gateway-cli-DUdYxlZS.js} +491 -136
  104. package/dist/{gateway-cli-B_xDUDy2.js → gateway-cli-DbvWmE-9.js} +495 -140
  105. package/dist/{gateway-rpc-3B5y445n.js → gateway-rpc-BByb2Snz.js} +3 -3
  106. package/dist/{gateway-rpc-BoL2vinh.js → gateway-rpc-wXSCUZXj.js} +3 -3
  107. package/dist/{github-copilot-auth-Omqrto0J.js → github-copilot-auth-D7ewvpMd.js} +205 -17
  108. package/dist/{github-copilot-auth-CZxurvdz.js → github-copilot-auth-DDispnyz.js} +205 -17
  109. package/dist/{github-copilot-token-SLWintYd.js → github-copilot-token-Cfs0Wxr8.js} +1 -1
  110. package/dist/{gmail-setup-utils-BXQKsLtI.js → gmail-setup-utils-Cfns8TQx.js} +3 -3
  111. package/dist/{gmail-setup-utils-CHcssBOA.js → gmail-setup-utils-DJb-_5kO.js} +4 -4
  112. package/dist/{health-format-Dy1caGsq.js → health-format-KGPokKJH.js} +97 -42
  113. package/dist/{health-format-DrGFg8bx.js → health-format-LZDxu3rv.js} +95 -40
  114. package/dist/{help-format-DAj7l5uV.js → help-format-C48TXngO.js} +1 -1
  115. package/dist/{help-format-CUnac_bT.js → help-format-R5fLToDw.js} +1 -1
  116. package/dist/{hooks-cli-ptEf6TIM.js → hooks-cli-CT8JCRkH.js} +51 -46
  117. package/dist/{hooks-cli-Bhf5VRp1.js → hooks-cli-S1MKumJO.js} +49 -44
  118. package/dist/{hooks-status-Br-2bK2G.js → hooks-status-Cw0xD8Lt.js} +3 -3
  119. package/dist/{hooks-status-DNQJSa4B.js → hooks-status-D9MhwHRp.js} +3 -3
  120. package/dist/{image-rOFfK3PJ.js → image-Brk1sJbw.js} +10 -7
  121. package/dist/{image-fUwR7slg.js → image-C4Nn2p3e.js} +10 -7
  122. package/dist/{image-Ds4NLGPR.js → image-DgtfXMcX.js} +9 -6
  123. package/dist/{image-Dnnxt82I.js → image-RKwc3fsL.js} +8 -5
  124. package/dist/index.js +208 -97
  125. package/dist/{installs-CRSjQxbR.js → installs-CrLcWYHe.js} +8 -7
  126. package/dist/{installs-89zeUsVn.js → installs-DscWb9b9.js} +8 -7
  127. package/dist/{links-7M-j83As.js → links-B8LAzWwg.js} +1 -1
  128. package/dist/{links-C591fM9M.js → links-Eax1UO3w.js} +1 -1
  129. package/dist/llm-slug-generator.js +18 -19
  130. package/dist/{loader-wXwp4rZJ.js → loader-KjT074JR.js} +5722 -6888
  131. package/dist/{logging-MMRGFxGI.js → logging-BAyPwvdH.js} +1 -1
  132. package/dist/{logging-DuK6YXuK.js → logging-CRq4h04P.js} +2 -2
  133. package/dist/{login-qr-wM8BnKJh.js → login-qr-B6ZgAuIf.js} +5 -5
  134. package/dist/{login-qr-CPEsT6dN.js → login-qr-Bua-p0nG.js} +3 -4
  135. package/dist/{login-qr-CGEu5TU-.js → login-qr-CuvemJj4.js} +6 -6
  136. package/dist/{login-qr-DH150tTp.js → login-qr-Djr1JfIf.js} +2 -2
  137. package/dist/{logs-cli-ClgkHnfT.js → logs-cli-9IAV7rWY.js} +38 -22
  138. package/dist/{logs-cli-CmfINsOj.js → logs-cli-EiKzUFPa.js} +37 -21
  139. package/dist/{manager-DYo4PlVM.js → manager-BIMh_eSm.js} +7 -8
  140. package/dist/{manager-D6EbxDV4.js → manager-CwinWQoz.js} +5 -5
  141. package/dist/{manager-BbnHek5T.js → manager-DkqF1GiK.js} +9 -9
  142. package/dist/{manager-CcVYv0N5.js → manager-T1XfGchB.js} +8 -8
  143. package/dist/{manifest-registry-3It8Z8yN.js → manifest-registry-CQhdnDBZ.js} +40 -2
  144. package/dist/{manifest-registry-D5SiA3xq.js → manifest-registry-u0okVSkU.js} +40 -2
  145. package/dist/{message-channel-Cu61-7H6.js → message-channel-BLi2a6Yw.js} +1 -1
  146. package/dist/{message-channel-BlgPSDAh.js → message-channel-C_MmebBt.js} +1 -1
  147. package/dist/{model-auth-ioeR_zLX.js → model-auth-CabXIF6O.js} +116 -34
  148. package/dist/{model-selection-BK7DuyH8.js → model-selection-BLuqsGVB.js} +86 -30
  149. package/dist/{model-selection-CezC36lH.js → model-selection-C1GmkTAV.js} +84 -28
  150. package/dist/{models-cli-C3uGdOrd.js → models-cli-9jmDv-h3.js} +52 -48
  151. package/dist/{models-cli-CUIVPgXE.js → models-cli-zS9rtWz8.js} +53 -49
  152. package/dist/{node-cli-BxBGSuPE.js → node-cli-CrpTxTTs.js} +28 -26
  153. package/dist/{node-cli-CdYAsuQQ.js → node-cli-wemUMCg-.js} +28 -26
  154. package/dist/{node-service-u8g85nD3.js → node-service-C8DTHTMg.js} +2 -2
  155. package/dist/{node-service-CM5vkdIo.js → node-service-WQuEKz6W.js} +2 -2
  156. package/dist/{nodes-cli-By6yeCTB.js → nodes-cli-BaU2SIFw.js} +20 -20
  157. package/dist/{nodes-cli-BaVMTAPc.js → nodes-cli-Dx23D72n.js} +20 -20
  158. package/dist/{nodes-screen-Dvl_ohUY.js → nodes-screen-C0IuBqUL.js} +1 -1
  159. package/dist/{note-5WqioBRA.js → note-BhRSeNeu.js} +2 -2
  160. package/dist/{note-Ci08TSbV.js → note-hhtubr2j.js} +1 -1
  161. package/dist/{onboard-channels-DxXvp8og.js → onboard-channels-C501x8GI.js} +8 -8
  162. package/dist/{onboard-channels-CXhnVy4E.js → onboard-channels-Dxzroasd.js} +8 -8
  163. package/dist/{onboard-skills-CBxsRGyf.js → onboard-skills-DV0Qzvjj.js} +440 -136
  164. package/dist/{onboard-skills-DQwOQ6Ry.js → onboard-skills-rlBHcu3Q.js} +439 -135
  165. package/dist/{onboarding-Du_7qEng.js → onboarding-CN-EDLjd.js} +38 -38
  166. package/dist/{openclaw-root-JLDMp6ux.js → openclaw-root-1VeFrph_.js} +4 -0
  167. package/dist/{openclaw-root-Dw6gumSU.js → openclaw-root-BNlEap4i.js} +4 -0
  168. package/dist/{pairing-cli-CRQDpj8f.js → pairing-cli-CDHG4xuI.js} +15 -15
  169. package/dist/{pairing-cli-Cng1KFWw.js → pairing-cli-CQP34Dlx.js} +15 -15
  170. package/dist/{pairing-labels-Ciu3Zoxj.js → pairing-labels-B6CN0SNH.js} +1 -1
  171. package/dist/{pairing-labels-CWFEtSc3.js → pairing-labels-CgNHnjzT.js} +1 -1
  172. package/dist/{pairing-store-c-QQ2u8p.js → pairing-store-CmlRVqOz.js} +2 -2
  173. package/dist/{pairing-store-CgXR3ZWJ.js → pairing-store-Dp5_JGnG.js} +3 -3
  174. package/dist/{path-env-CXWUFfFv.js → path-env-CLvYNwtL.js} +1 -1
  175. package/dist/{path-env-BgLvMbz_.js → path-env-CaYUVIML.js} +2 -2
  176. package/dist/{paths-MnZaxqPw.js → paths-B0a4ywSO.js} +30 -5
  177. package/dist/{paths-Bkhd_qY8.js → paths-B49s6UZQ.js} +30 -5
  178. package/dist/{paths-DL6EIRTw.js → paths-D0O87MfH.js} +30 -5
  179. package/dist/{paths-IivnSNkP.js → paths-DLINmNFQ.js} +31 -6
  180. package/dist/{pi-embedded-CgPTEqlB.js → pi-embedded-Ctrt2kz0.js} +8759 -9600
  181. package/dist/{pi-embedded-helpers-DYH6OWft.js → pi-embedded-helpers-CMKLjW6X.js} +68 -9
  182. package/dist/{pi-embedded-helpers-y1_Se0yq.js → pi-embedded-helpers-CUzTc1v6.js} +241 -24
  183. package/dist/{pi-embedded-helpers-Bkpd4fTr.js → pi-embedded-helpers-DfwkwPYD.js} +67 -8
  184. package/dist/{pi-embedded-helpers-BbWRSUnc.js → pi-embedded-helpers-WDwx99UA.js} +347 -32
  185. package/dist/{pi-tools.policy-akYsGFiA.js → pi-tools.policy-BpsROZbz.js} +4 -4
  186. package/dist/{plugin-auto-enable-lZwe2yX5.js → plugin-auto-enable-Bqhc3w5n.js} +5 -5
  187. package/dist/{plugin-auto-enable-AOSOJ-v1.js → plugin-auto-enable-PW76g_PJ.js} +5 -5
  188. package/dist/plugin-sdk/agents/bash-process-registry.d.ts +1 -0
  189. package/dist/plugin-sdk/agents/models-config.providers.d.ts +10 -0
  190. package/dist/plugin-sdk/agents/pi-embedded-helpers/errors.d.ts +5 -1
  191. package/dist/plugin-sdk/agents/pi-embedded-helpers.d.ts +1 -1
  192. package/dist/plugin-sdk/agents/pi-embedded-runner/google.d.ts +1 -0
  193. package/dist/plugin-sdk/agents/pi-embedded-runner/run/params.d.ts +2 -0
  194. package/dist/plugin-sdk/agents/pi-embedded-runner/run/payloads.d.ts +1 -0
  195. package/dist/plugin-sdk/agents/pi-embedded-runner/run/types.d.ts +2 -0
  196. package/dist/plugin-sdk/agents/pi-embedded-runner/types.d.ts +15 -0
  197. package/dist/plugin-sdk/agents/pi-embedded-subscribe.handlers.tools.d.ts +1 -1
  198. package/dist/plugin-sdk/agents/pi-embedded-subscribe.handlers.types.d.ts +2 -0
  199. package/dist/plugin-sdk/agents/pi-embedded-subscribe.types.d.ts +2 -0
  200. package/dist/plugin-sdk/agents/session-tool-result-guard-wrapper.d.ts +2 -0
  201. package/dist/plugin-sdk/agents/session-tool-result-guard.d.ts +4 -0
  202. package/dist/plugin-sdk/agents/tools/agent-step.d.ts +3 -0
  203. package/dist/plugin-sdk/agents/tools/browser-tool.schema.d.ts +1 -1
  204. package/dist/plugin-sdk/agents/tools/web-search.d.ts +10 -1
  205. package/dist/plugin-sdk/agents/usage.d.ts +1 -0
  206. package/dist/plugin-sdk/auto-reply/heartbeat.d.ts +1 -1
  207. package/dist/plugin-sdk/auto-reply/reply/get-reply-directives.d.ts +1 -0
  208. package/dist/plugin-sdk/auto-reply/reply/mentions.d.ts +1 -0
  209. package/dist/plugin-sdk/auto-reply/reply/model-selection.d.ts +3 -0
  210. package/dist/plugin-sdk/auto-reply/reply/reply-reference.d.ts +1 -1
  211. package/dist/plugin-sdk/auto-reply/reply/session-run-accounting.d.ts +11 -0
  212. package/dist/plugin-sdk/auto-reply/reply/session-usage.d.ts +8 -0
  213. package/dist/plugin-sdk/auto-reply/types.d.ts +2 -0
  214. package/dist/plugin-sdk/browser/control-auth.d.ts +13 -0
  215. package/dist/plugin-sdk/channels/plugins/onboarding/signal.d.ts +1 -0
  216. package/dist/plugin-sdk/cli/prompt.d.ts +1 -0
  217. package/dist/plugin-sdk/commands/agent/types.d.ts +2 -0
  218. package/dist/plugin-sdk/commands/onboard-types.d.ts +7 -1
  219. package/dist/plugin-sdk/config/sessions/paths.d.ts +7 -2
  220. package/dist/plugin-sdk/config/types.agents.d.ts +2 -0
  221. package/dist/plugin-sdk/config/types.discord.d.ts +5 -0
  222. package/dist/plugin-sdk/config/types.gateway.d.ts +15 -0
  223. package/dist/plugin-sdk/config/types.hooks.d.ts +15 -0
  224. package/dist/plugin-sdk/config/types.memory.d.ts +2 -0
  225. package/dist/plugin-sdk/config/zod-schema.agents.d.ts +1 -0
  226. package/dist/plugin-sdk/config/zod-schema.d.ts +13 -1
  227. package/dist/plugin-sdk/config/zod-schema.hooks.d.ts +1 -1
  228. package/dist/plugin-sdk/config/zod-schema.providers-core.d.ts +9 -0
  229. package/dist/plugin-sdk/config/zod-schema.providers.d.ts +4 -0
  230. package/dist/plugin-sdk/cron/service/jobs.d.ts +8 -0
  231. package/dist/plugin-sdk/cron/service/state.d.ts +1 -0
  232. package/dist/plugin-sdk/cron/types.d.ts +2 -0
  233. package/dist/plugin-sdk/discord/monitor/allow-list.d.ts +15 -0
  234. package/dist/plugin-sdk/discord/send.types.d.ts +5 -0
  235. package/dist/plugin-sdk/gateway/auth.d.ts +36 -0
  236. package/dist/plugin-sdk/gateway/protocol/index.d.ts +0 -3
  237. package/dist/plugin-sdk/gateway/protocol/schema/agent.d.ts +7 -1
  238. package/dist/plugin-sdk/gateway/session-utils.fs.d.ts +3 -1
  239. package/dist/plugin-sdk/index.js +935 -660
  240. package/dist/plugin-sdk/infra/binaries.d.ts +3 -0
  241. package/dist/plugin-sdk/infra/heartbeat-active-hours.d.ts +5 -0
  242. package/dist/plugin-sdk/infra/heartbeat-runner.d.ts +1 -0
  243. package/dist/plugin-sdk/infra/net/fetch-guard.d.ts +1 -0
  244. package/dist/plugin-sdk/infra/net/ssrf.d.ts +1 -0
  245. package/dist/plugin-sdk/infra/tailscale.d.ts +34 -0
  246. package/dist/plugin-sdk/infra/tmp-openclaw-dir.d.ts +10 -0
  247. package/dist/plugin-sdk/logging/console.d.ts +1 -0
  248. package/dist/plugin-sdk/logging/logger.d.ts +1 -1
  249. package/dist/plugin-sdk/logging/state.d.ts +1 -0
  250. package/dist/plugin-sdk/markdown/ir.d.ts +1 -1
  251. package/dist/plugin-sdk/markdown/whatsapp.d.ts +14 -0
  252. package/dist/plugin-sdk/media/input-files.d.ts +5 -0
  253. package/dist/plugin-sdk/media-understanding/audio-preflight.d.ts +16 -0
  254. package/dist/plugin-sdk/media-understanding/types.d.ts +1 -0
  255. package/dist/plugin-sdk/memory/backend-config.d.ts +2 -1
  256. package/dist/plugin-sdk/memory/qmd-manager.d.ts +2 -0
  257. package/dist/plugin-sdk/memory/qmd-query-parser.d.ts +8 -0
  258. package/dist/plugin-sdk/process/command-queue.d.ts +16 -0
  259. package/dist/plugin-sdk/routing/resolve-route.d.ts +3 -1
  260. package/dist/plugin-sdk/security/external-content.d.ts +1 -1
  261. package/dist/plugin-sdk/security/secret-equal.d.ts +1 -0
  262. package/dist/plugin-sdk/sessions/input-provenance.d.ts +16 -0
  263. package/dist/plugin-sdk/signal/monitor/event-handler.types.d.ts +8 -0
  264. package/dist/plugin-sdk/signal/monitor/mentions.d.ts +2 -0
  265. package/dist/plugin-sdk/slack/monitor/commands.d.ts +5 -0
  266. package/dist/plugin-sdk/telegram/bot-message-context.d.ts +2 -1
  267. package/dist/plugin-sdk/telegram/send.d.ts +3 -0
  268. package/dist/plugin-sdk/web/media.d.ts +2 -0
  269. package/dist/{plugins-Db5BiELK.js → plugins-4Hqd1WGf.js} +3 -3
  270. package/dist/{plugins-CNaHNND_.js → plugins-X7d_tfTE.js} +4 -4
  271. package/dist/{plugins-cli-8G-hQPCu.js → plugins-cli-Bgku3EGj.js} +253 -44
  272. package/dist/{plugins-cli-CDiocaDE.js → plugins-cli-CVToH3if.js} +257 -48
  273. package/dist/{ports-BeebfNCb.js → ports-qkt29rdC.js} +2 -2
  274. package/dist/{program-0Cj9YxRN.js → program-Cf7lkBur.js} +82 -80
  275. package/dist/{progress-DIQJt9Va.js → progress-C9kngsTD.js} +1 -1
  276. package/dist/{progress-Da1ehW-x.js → progress-DWqhRakV.js} +1 -1
  277. package/dist/{prompt-style-Dc0C5HC9.js → prompt-style-BFH5D5LN.js} +1 -1
  278. package/dist/{prompt-style-CjQRlDx4.js → prompt-style-CIbmaxSa.js} +1 -1
  279. package/dist/{pw-ai-C43wv1ZF.js → pw-ai-8mdv3h-d.js} +7 -6
  280. package/dist/{pw-ai-COWYvUfG.js → pw-ai-CM1IsSgZ.js} +6 -6
  281. package/dist/{pw-ai-BxJ-KCIy.js → pw-ai-FGoRVblI.js} +5 -6
  282. package/dist/{pw-ai-CsvaObGM.js → pw-ai-sS1fRKW_.js} +3 -3
  283. package/dist/{qmd-manager-CpsjQyaZ.js → qmd-manager-C67Fc8aN.js} +79 -26
  284. package/dist/{qmd-manager-C9YWFeG6.js → qmd-manager-CXVbfg99.js} +81 -26
  285. package/dist/{qmd-manager-C02E8ixK.js → qmd-manager-RMRE8Tqt.js} +81 -26
  286. package/dist/{qmd-manager-BzY2LQTT.js → qmd-manager-pyc_MTIe.js} +78 -23
  287. package/dist/{register.subclis-DUkirdHn.js → register.subclis-C02e4zuJ.js} +29 -29
  288. package/dist/{reply--b7BsXGP.js → reply-DICXkh_C.js} +7289 -8455
  289. package/dist/{routes-DUkEKAc1.js → routes-CmOI1hIH.js} +29 -11
  290. package/dist/{routes-B4QQiFju.js → routes-DewK5tq2.js} +29 -12
  291. package/dist/{rpc-CuMtxrRT.js → rpc-DHr30euf.js} +3 -3
  292. package/dist/{rpc-Blt6MJ4F.js → rpc-T300F8zI.js} +3 -3
  293. package/dist/{run-main-XZcPA23b.js → run-main-C5wpthq1.js} +84 -82
  294. package/dist/runner-CY0nmVme.js +1886 -0
  295. package/dist/runner-Cfm5nTMc.js +1785 -0
  296. package/dist/runner-D_dujMod.js +1886 -0
  297. package/dist/runner-DrGYLH5K.js +1785 -0
  298. package/dist/{sandbox-Aks-9EcZ.js → sandbox-BKYnhYQH.js} +24 -17
  299. package/dist/{sandbox-DqUO2K83.js → sandbox-Bhjnh1Xg.js} +23 -16
  300. package/dist/{sandbox-cli-C99Thxi8.js → sandbox-cli-DBsAjZJN.js} +21 -21
  301. package/dist/{sandbox-cli-CJqRM4V6.js → sandbox-cli-rV9LtFeu.js} +21 -21
  302. package/dist/{security-cli-iqYLMOz3.js → security-cli-BIwJM_rs.js} +27 -27
  303. package/dist/{security-cli-DW3lCz-o.js → security-cli-BRjny8Yu.js} +27 -27
  304. package/dist/{server-context-fX4xiYRh.js → server-context-BGpGs3qd.js} +7 -7
  305. package/dist/{server-context-8Qt35QdF.js → server-context-Cl0U0vE3.js} +7 -7
  306. package/dist/{server-node-events-CHWXfb_T.js → server-node-events-CBfTbiTA.js} +48 -44
  307. package/dist/{server-node-events-BzrEnKLX.js → server-node-events-QCvh8EgI.js} +45 -41
  308. package/dist/{service-Cd4BxKuo.js → service--nPk7DvT.js} +8 -4
  309. package/dist/{service-DDPRbf8a.js → service-99RDXwX4.js} +8 -4
  310. package/dist/{service-audit-CCFxuvKs.js → service-audit-DnLmRGQt.js} +4 -4
  311. package/dist/{service-audit-x6jCN-6a.js → service-audit-ckBaRCVC.js} +4 -4
  312. package/dist/{session-cost-usage-CcCEQNuc.js → session-cost-usage-D7HuoSSD.js} +12 -10
  313. package/dist/{session-cost-usage-PvyVZz-g.js → session-cost-usage-D9hHANWI.js} +12 -10
  314. package/dist/{shared-ILguacOr.js → shared-Bs4vduG4.js} +3 -3
  315. package/dist/{shared-CagUDdmp.js → shared-CEY5IkwG.js} +3 -3
  316. package/dist/{shared-gOyV38rM.js → shared-DRohONn_.js} +4 -4
  317. package/dist/{shared-BDk_zC9p.js → shared-ICqOZibV.js} +4 -4
  318. package/dist/{skill-scanner-C_fQzVDu.js → skill-scanner-CucvxYhu.js} +1 -1
  319. package/dist/{skill-scanner-DrVEHfC6.js → skill-scanner-rHMtUHtP.js} +1 -1
  320. package/dist/{skills-D5UZZZSY.js → skills-DRjfSQT3.js} +141 -6
  321. package/dist/{skills-ccAgQ3Ad.js → skills-DprQj9X2.js} +142 -7
  322. package/dist/{skills-cli-DQilTG3n.js → skills-cli-9WO-C55s.js} +12 -12
  323. package/dist/{skills-cli-ggyLBtAY.js → skills-cli-B9eej-EW.js} +13 -13
  324. package/dist/{skills-status-BosMnzIs.js → skills-status-5U3P3YfJ.js} +3 -3
  325. package/dist/{skills-status-DjtPPMnY.js → skills-status-TDIgVd1K.js} +2 -2
  326. package/dist/{sqlite-B7FPASCO.js → sqlite-BINzs1U0.js} +2 -2
  327. package/dist/{sqlite-Btrgi7-j.js → sqlite-D4w5TejA.js} +3 -3
  328. package/dist/{sqlite-BrQ9tw8B.js → sqlite-DRRHmlug.js} +3 -3
  329. package/dist/{sqlite-HepBVDoX.js → sqlite-F6PGkEm1.js} +2 -2
  330. package/dist/{status-BByCntWS.js → status-BKGkKC_v.js} +3 -3
  331. package/dist/{status-Dt7RE_Yy.js → status-CiHtHdaa.js} +4 -4
  332. package/dist/{status-zfL4Yej7.js → status-DDWoOpeB.js} +37 -37
  333. package/dist/{subsystem-Bh1Y_6Uv.js → subsystem-BoExtIHo.js} +52 -17
  334. package/dist/{system-cli-DwuUkdkH.js → system-cli-B6lr60Io.js} +14 -14
  335. package/dist/{system-cli-Clqsx8U5.js → system-cli-CprW9G3h.js} +14 -14
  336. package/dist/{systemd-BEWwfwn0.js → systemd-C0VZriGM.js} +3 -3
  337. package/dist/{systemd-D6wTPnHi.js → systemd-DrmBtJ5T.js} +3 -3
  338. package/dist/{systemd-hints-zi4ohCOY.js → systemd-hints-DZtXiVHa.js} +1 -1
  339. package/dist/{systemd-linger-CDo2UbHM.js → systemd-linger-NC2kl1SC.js} +2 -2
  340. package/dist/{systemd-linger-BxjTrgoH.js → systemd-linger-xdn3BdPh.js} +2 -2
  341. package/dist/{table-DEnmtvl5.js → table-B8dx3v4v.js} +2 -2
  342. package/dist/{table-cCoGqLsk.js → table-CwulTLQp.js} +1 -1
  343. package/dist/{tool-display-DskiU8Kt.js → tool-display-CZRIDMRm.js} +2 -2
  344. package/dist/{tool-display-o-dDAlqF.js → tool-display-ClRud3pg.js} +2 -2
  345. package/dist/{tui-BdJWZdto.js → tui-CVTQn-dC.js} +14 -13
  346. package/dist/{tui-Bc7XUQGP.js → tui-Lu8FdrlK.js} +13 -14
  347. package/dist/{tui-cli-BGYh0UL0.js → tui-cli-BLpTj1X9.js} +27 -27
  348. package/dist/{tui-cli-D3n-O9zB.js → tui-cli-BLx5kL2I.js} +26 -26
  349. package/dist/{tui-formatters-CA85v4U2.js → tui-formatters-CNySEfJN.js} +6 -6
  350. package/dist/{tui-formatters-C3NarH24.js → tui-formatters-DePhZK3J.js} +6 -6
  351. package/dist/{update-JB16aPIY.js → update-DHVxMTpQ.js} +3 -3
  352. package/dist/{update-Ct9sqJC_.js → update-DU1geolI.js} +3 -3
  353. package/dist/{update-cli-wWKDS3cm.js → update-cli-C0hUvJWK.js} +89 -71
  354. package/dist/{update-cli-DDXp_N9B.js → update-cli-Wb1GB3rL.js} +88 -70
  355. package/dist/{update-runner-ChTf6O6p.js → update-runner--ixK4J3W.js} +11 -11
  356. package/dist/{update-runner-CmE6cHdn.js → update-runner-7Qa1T9y6.js} +10 -10
  357. package/dist/{utils-Dk86IbEs.js → utils-BLJAc3ZV.js} +1 -1
  358. package/dist/{utils-es4ygvQ-.js → utils-Cd9QdCHh.js} +1 -1
  359. package/dist/{webhooks-cli-CVIE9TtX.js → webhooks-cli-DgcMy7RG.js} +12 -12
  360. package/dist/{webhooks-cli-BmKSiQQC.js → webhooks-cli-aVzUcJY9.js} +11 -11
  361. package/dist/{widearea-dns-2ah0bkAj.js → widearea-dns-BaIgNEhY.js} +3 -3
  362. package/dist/{widearea-dns-CMIG6-74.js → widearea-dns-DzuRdwk5.js} +3 -3
  363. package/dist/{ws-DtDKpbLR.js → ws-CHCQHs0F.js} +1 -1
  364. package/dist/{ws-log-BP3z_g6Z.js → ws-log-CIXbLCka.js} +1 -1
  365. package/dist/{ws-log-D7MkvKhg.js → ws-log-DcQFZByi.js} +2 -2
  366. package/dist/{wsl-Cwo7X0Un.js → wsl-BUOkxKJu.js} +2 -2
  367. package/docs/assets/install-script.svg +1 -0
  368. package/docs/automation/hooks.md +1 -38
  369. package/docs/automation/webhook.md +43 -2
  370. package/docs/channels/discord.md +389 -381
  371. package/docs/channels/imessage.md +229 -218
  372. package/docs/channels/slack.md +294 -415
  373. package/docs/channels/telegram.md +401 -505
  374. package/docs/channels/whatsapp.md +338 -310
  375. package/docs/ci.md +0 -12
  376. package/docs/cli/hooks.md +1 -14
  377. package/docs/cli/index.md +6 -1
  378. package/docs/cli/logs.md +4 -0
  379. package/docs/cli/onboard.md +30 -0
  380. package/docs/cli/plugins.md +20 -1
  381. package/docs/cli/security.md +1 -0
  382. package/docs/concepts/memory.md +7 -4
  383. package/docs/concepts/session-tool.md +1 -0
  384. package/docs/docs.json +11 -11
  385. package/docs/gateway/configuration-examples.md +9 -2
  386. package/docs/gateway/configuration-reference.md +2329 -0
  387. package/docs/gateway/configuration.md +338 -3304
  388. package/docs/gateway/index.md +162 -238
  389. package/docs/gateway/openresponses-http-api.md +15 -0
  390. package/docs/gateway/security/index.md +3 -0
  391. package/docs/help/faq.md +9 -0
  392. package/docs/install/hetzner.md +21 -0
  393. package/docs/install/installer.md +20 -0
  394. package/docs/nodes/audio.md +19 -0
  395. package/docs/platforms/mac/release.md +7 -7
  396. package/docs/providers/glm.md +3 -3
  397. package/docs/providers/index.md +1 -0
  398. package/docs/providers/litellm.md +153 -0
  399. package/docs/providers/zai.md +2 -2
  400. package/docs/reference/templates/AGENTS.md +26 -26
  401. package/docs/reference/templates/HEARTBEAT.md +31 -2
  402. package/docs/reference/templates/SOUL.md +14 -8
  403. package/docs/reference/transcript-hygiene.md +18 -0
  404. package/docs/start/getting-started.md +5 -0
  405. package/docs/start/wizard-cli-automation.md +17 -0
  406. package/docs/start/wizard-cli-reference.md +12 -0
  407. package/docs/tools/browser.md +6 -0
  408. package/docs/zh-CN/automation/hooks.md +1 -38
  409. package/docs/zh-CN/cli/hooks.md +1 -14
  410. package/extensions/bluebubbles/package.json +1 -1
  411. package/extensions/bluebubbles/src/monitor.test.ts +40 -28
  412. package/extensions/bluebubbles/src/monitor.ts +0 -4
  413. package/extensions/copilot-proxy/package.json +1 -1
  414. package/extensions/diagnostics-otel/package.json +10 -10
  415. package/extensions/discord/package.json +1 -1
  416. package/extensions/feishu/package.json +2 -5
  417. package/extensions/feishu/src/bot.checkBotMentioned.test.ts +64 -0
  418. package/extensions/feishu/src/bot.ts +1 -1
  419. package/extensions/feishu/src/channel.test.ts +48 -0
  420. package/extensions/feishu/src/channel.ts +1 -3
  421. package/extensions/feishu/src/config-schema.ts +6 -0
  422. package/extensions/feishu/src/docx.ts +14 -4
  423. package/extensions/feishu/src/media.test.ts +151 -0
  424. package/extensions/feishu/src/media.ts +27 -13
  425. package/extensions/feishu/src/reply-dispatcher.test.ts +116 -0
  426. package/extensions/feishu/src/reply-dispatcher.ts +124 -67
  427. package/extensions/feishu/src/streaming-card.ts +223 -0
  428. package/extensions/feishu/src/targets.test.ts +16 -0
  429. package/extensions/feishu/src/targets.ts +1 -1
  430. package/extensions/google-antigravity-auth/package.json +1 -1
  431. package/extensions/google-gemini-cli-auth/package.json +1 -1
  432. package/extensions/googlechat/package.json +1 -1
  433. package/extensions/imessage/package.json +1 -1
  434. package/extensions/irc/package.json +1 -1
  435. package/extensions/irc/src/client.ts +1 -1
  436. package/extensions/line/package.json +1 -1
  437. package/extensions/llm-task/package.json +1 -1
  438. package/extensions/lobster/package.json +1 -1
  439. package/extensions/matrix/CHANGELOG.md +6 -0
  440. package/extensions/matrix/package.json +2 -2
  441. package/extensions/mattermost/package.json +1 -1
  442. package/extensions/memory-core/package.json +1 -1
  443. package/extensions/memory-lancedb/index.ts +6 -2
  444. package/extensions/memory-lancedb/package.json +2 -2
  445. package/extensions/minimax-portal-auth/index.ts +7 -5
  446. package/extensions/minimax-portal-auth/package.json +1 -1
  447. package/extensions/msteams/CHANGELOG.md +6 -0
  448. package/extensions/msteams/package.json +1 -1
  449. package/extensions/nextcloud-talk/package.json +1 -1
  450. package/extensions/nostr/CHANGELOG.md +6 -0
  451. package/extensions/nostr/package.json +2 -2
  452. package/extensions/open-prose/package.json +1 -1
  453. package/extensions/signal/package.json +1 -1
  454. package/extensions/slack/package.json +1 -1
  455. package/extensions/telegram/package.json +1 -1
  456. package/extensions/tlon/package.json +1 -1
  457. package/extensions/twitch/CHANGELOG.md +6 -0
  458. package/extensions/twitch/package.json +1 -1
  459. package/extensions/voice-call/CHANGELOG.md +6 -0
  460. package/extensions/voice-call/package.json +1 -1
  461. package/extensions/voice-call/src/media-stream.ts +7 -1
  462. package/extensions/voice-call/src/providers/twilio.test.ts +5 -3
  463. package/extensions/voice-call/src/providers/twilio.ts +12 -1
  464. package/extensions/whatsapp/package.json +1 -1
  465. package/extensions/zalo/CHANGELOG.md +6 -0
  466. package/extensions/zalo/package.json +1 -1
  467. package/extensions/zalouser/CHANGELOG.md +6 -0
  468. package/extensions/zalouser/package.json +1 -1
  469. package/package.json +26 -22
  470. package/dist/auth-BcNHFK-i.js +0 -184
  471. package/dist/auth-BvIPpm7G.js +0 -184
  472. package/dist/boolean-M-esQJt6.js +0 -30
  473. package/dist/bundled/soul-evil/HOOK.md +0 -71
  474. package/dist/bundled/soul-evil/handler.js +0 -194
  475. package/dist/cli-DJbWJ9aB.js +0 -89
  476. package/dist/config-CI7EpvlP.js +0 -15
  477. package/dist/control-ui/assets/index-CnB9IO4a.js.map +0 -1
  478. package/dist/date-time-c6HTX6IW.js +0 -187
  479. package/dist/frontmatter-xwTm0734.js +0 -105
  480. package/dist/parse-duration-De_tAQSe.js +0 -24
  481. package/dist/session-key-nXYQSv-a.js +0 -167
  482. package/dist/utils-dp_OM900.js +0 -476
  483. package/docs/hooks/soul-evil.md +0 -69
  484. package/docs/zh-CN/hooks/soul-evil.md +0 -72
  485. /package/dist/{archive-CXhvR9nU.js → archive-beaSfAzA.js} +0 -0
  486. /package/dist/{brew-BIrWdDps.js → brew-BUIxHEkn.js} +0 -0
  487. /package/dist/{brew-B7YK4ZoL.js → brew-ROHf0-Xp.js} +0 -0
  488. /package/dist/{cli-utils-PlLcDZlM.js → cli-utils-CRhVAaLV.js} +0 -0
  489. /package/dist/{cli-utils-R-ECs5cY.js → cli-utils-LcHOt63h.js} +0 -0
  490. /package/dist/{command-format-BUxhT1xL.js → command-format-qUVxzqYm.js} +0 -0
  491. /package/dist/{constants-CNTiY-ZN.js → constants-BvQ6S8j5.js} +0 -0
  492. /package/dist/{constants-DuoCkWRh.js → constants-JPeoOZnw.js} +0 -0
  493. /package/dist/{errors-D3tYRJWG.js → errors-B91HIDPD.js} +0 -0
  494. /package/dist/{errors-B0eT3jVv.js → errors-Bv81hF2P.js} +0 -0
  495. /package/dist/{errors-x4NYs-1P.js → errors-DjZBTJJ3.js} +0 -0
  496. /package/dist/{exec-approvals-DGPTjO0N.js → exec-approvals-Cb4ZLukq.js} +0 -0
  497. /package/dist/{exec-approvals-DhmKpiIo.js → exec-approvals-DQ8TVVmj.js} +0 -0
  498. /package/dist/{format-CaxeRcue.js → format-CNU-Zkrz.js} +0 -0
  499. /package/dist/{format-DLOJPZmo.js → format-DcfK-dwd.js} +0 -0
  500. /package/dist/{format-duration-Be5Z7JdJ.js → format-duration-84n6_DgO.js} +0 -0
  501. /package/dist/{format-duration-CEmFWLyX.js → format-duration-Bo9zNKwO.js} +0 -0
  502. /package/dist/{format-relative-79_Y1n2Y.js → format-relative-CZOlQ2pA.js} +0 -0
  503. /package/dist/{format-relative-Db7eqEu8.js → format-relative-cegC_FF5.js} +0 -0
  504. /package/dist/{github-copilot-token-C9IJh2Pn.js → github-copilot-token-DkiRbJdR.js} +0 -0
  505. /package/dist/{helpers-CQI-5xS9.js → helpers-8O7IVGO-.js} +0 -0
  506. /package/dist/{helpers-CRzoyyXS.js → helpers-D_jqdWkd.js} +0 -0
  507. /package/dist/{helpers-C89IG08W.js → helpers-HyeZXsnu.js} +0 -0
  508. /package/dist/{is-main-WWuz28Ip.js → is-main-BWoXGz7p.js} +0 -0
  509. /package/dist/{logging-BzvBIA3Y.js → logging-fywhKCmE.js} +0 -0
  510. /package/dist/{nodes-screen-lykd2cny.js → nodes-screen-CdCWeiwy.js} +0 -0
  511. /package/dist/{parse-Cjiudy6x.js → parse-Bw0oH-rT.js} +0 -0
  512. /package/dist/{parse-DqAvJRIf.js → parse-ioZhOtha.js} +0 -0
  513. /package/dist/{parse-log-line-CUrpqe1w.js → parse-log-line-BoDqomM4.js} +0 -0
  514. /package/dist/{parse-log-line-D2UGw0wR.js → parse-log-line-DPxH1XZx.js} +0 -0
  515. /package/dist/{parse-timeout-DFSPLxpY.js → parse-timeout-D1XX_zN_.js} +0 -0
  516. /package/dist/{parse-timeout-DV8NQQWk.js → parse-timeout-DMW-z4Iz.js} +0 -0
  517. /package/dist/{pi-model-discovery-CV2V1HHz.js → pi-model-discovery-DqgqUyAv.js} +0 -0
  518. /package/dist/{pi-model-discovery-DzFOAbQt.js → pi-model-discovery-EwKVHlZB.js} +0 -0
  519. /package/dist/{prompts--d-6l5Ln.js → prompts-Bg96reub.js} +0 -0
  520. /package/dist/{redact-DAKeu7PA.js → redact-BRsnXqwD.js} +0 -0
  521. /package/dist/{redact-DuEEf1p1.js → redact-Br9GfacZ.js} +0 -0
  522. /package/dist/{redact-BOIof271.js → redact-BrXLgslJ.js} +0 -0
  523. /package/dist/{status-Cv36yYdi.js → status-BRZfQbJ2.js} +0 -0
  524. /package/dist/{status-Drziap9H.js → status-CoAy6bEC.js} +0 -0
  525. /package/dist/{systemd-hints-CH4pbCFD.js → systemd-hints-CXNtLw9Q.js} +0 -0
  526. /package/dist/{tailnet-DGRSvYuQ.js → tailnet-DATIFSsY.js} +0 -0
  527. /package/dist/{transcript-events-BlIONGVn.js → transcript-events-BHS7QoRl.js} +0 -0
  528. /package/dist/{transcript-events-C1hdue6u.js → transcript-events-Bp7fGnwv.js} +0 -0
  529. /package/dist/{transcript-events-CZ8CG4ht.js → transcript-events-BtNd-j6q.js} +0 -0
  530. /package/dist/{usage-format-6Uar63S0.js → usage-format-C4JfTbSp.js} +0 -0
  531. /package/dist/{usage-format-hd37en6b.js → usage-format-CpORtVCG.js} +0 -0
@@ -1,34 +1,26 @@
1
- import { D as info, I as colorize, L as isRich, R as theme, c as defaultRuntime, t as createSubsystemLogger } from "./subsystem-Bh1Y_6Uv.js";
2
- import { A as resolveHeartbeatDeliveryTarget, Dr as peekSystemEvents, Gn as resolveUserTimezone, Wn as resolveEffectiveMessagesConfig, _n as appendCronStyleCurrentTimeLine, _r as isHeartbeatContentEffectivelyEmpty, ct as setHeartbeatWakeHandler, dr as CommandLane, fn as resolveHeartbeatVisibility, gn as resolveIndicatorType, gr as DEFAULT_HEARTBEAT_EVERY, hr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, j as resolveHeartbeatSenderContext, lr as getQueueSize, pn as emitHeartbeatEvent, st as requestHeartbeatNow, t as getReplyFromConfig, vr as resolveHeartbeatPrompt$1, yr as stripHeartbeatToken } from "./reply--b7BsXGP.js";
1
+ import { D as info, I as colorize, L as isRich, R as theme, c as defaultRuntime, t as createSubsystemLogger } from "./subsystem-BoExtIHo.js";
2
+ import { A as resolveHeartbeatDeliveryTarget, Gn as resolveUserTimezone, Wn as resolveEffectiveMessagesConfig, _n as appendCronStyleCurrentTimeLine, _r as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, br as resolveHeartbeatPrompt$1, ct as setHeartbeatWakeHandler, fn as resolveHeartbeatVisibility, gn as resolveIndicatorType, j as resolveHeartbeatSenderContext, kr as peekSystemEvents, pn as emitHeartbeatEvent, pr as CommandLane, st as requestHeartbeatNow, t as getReplyFromConfig, ur as getQueueSize, vr as DEFAULT_HEARTBEAT_EVERY, xr as stripHeartbeatToken, yr as isHeartbeatContentEffectivelyEmpty } from "./reply-DICXkh_C.js";
3
3
  import { d as resolveAgentIdFromSessionKey, h as toAgentStoreSessionKey, l as normalizeAgentId } from "./session-key-BWxPj0z_.js";
4
- import { t as runCommandWithTimeout } from "./exec-Cv_Ofd1m.js";
5
- import { n as resolveOpenClawPackageRootSync, t as resolveOpenClawPackageRoot } from "./openclaw-root-JLDMp6ux.js";
6
- import { c as resolveDefaultAgentId, m as DEFAULT_HEARTBEAT_FILENAME, n as resolveAgentConfig, s as resolveAgentWorkspaceDir } from "./agent-scope-CGmuusG9.js";
7
- import { t as isTruthyEnvValue } from "./env-BxRc6wWv.js";
8
- import { g as parseDurationMs, i as loadConfig } from "./config--NUdpACy.js";
9
- import { f as resolvePreferredAccountId, n as listChannelPlugins, t as getChannelPlugin, u as buildChannelAccountBindings } from "./plugins-CNaHNND_.js";
10
- import { F as resolveAgentMainSessionKey, P as canonicalizeMainSessionAlias, d as loadSessionStore, g as updateSessionStore, m as saveSessionStore } from "./sandbox-DqUO2K83.js";
11
- import { n as formatErrorMessage } from "./errors-B0eT3jVv.js";
12
- import { o as resolveStorePath } from "./paths-Bkhd_qY8.js";
13
- import { G as HEARTBEAT_TOKEN, t as deliverOutboundPayloads } from "./deliver-T9d44OpZ.js";
14
- import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-Bek1xlgk.js";
15
- import { n as withProgress } from "./progress-DIQJt9Va.js";
16
- import { t as resolveChannelDefaultAccountId } from "./helpers-C89IG08W.js";
4
+ import { t as runCommandWithTimeout } from "./exec-YIosokWE.js";
5
+ import { n as resolveOpenClawPackageRootSync, t as resolveOpenClawPackageRoot } from "./openclaw-root-1VeFrph_.js";
6
+ import { c as resolveDefaultAgentId, m as DEFAULT_HEARTBEAT_FILENAME, n as resolveAgentConfig, s as resolveAgentWorkspaceDir } from "./agent-scope-CQCus0rI.js";
7
+ import { t as isTruthyEnvValue } from "./env-ONzUVAG2.js";
8
+ import { g as parseDurationMs, i as loadConfig } from "./config-aFQssWKX.js";
9
+ import { f as resolvePreferredAccountId, n as listChannelPlugins, t as getChannelPlugin, u as buildChannelAccountBindings } from "./plugins-X7d_tfTE.js";
10
+ import { F as resolveAgentMainSessionKey, P as canonicalizeMainSessionAlias, d as loadSessionStore, g as updateSessionStore, m as saveSessionStore } from "./sandbox-Bhjnh1Xg.js";
11
+ import { n as formatErrorMessage } from "./errors-Bv81hF2P.js";
12
+ import { s as resolveStorePath } from "./paths-B49s6UZQ.js";
13
+ import { q as HEARTBEAT_TOKEN, t as deliverOutboundPayloads } from "./deliver-LsxKETro.js";
14
+ import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-SolyGS1r.js";
15
+ import { n as withProgress } from "./progress-C9kngsTD.js";
16
+ import { t as resolveChannelDefaultAccountId } from "./helpers-HyeZXsnu.js";
17
17
  import { fileURLToPath } from "node:url";
18
18
  import fs from "node:fs";
19
19
  import path from "node:path";
20
20
  import fs$1 from "node:fs/promises";
21
21
 
22
- //#region src/infra/heartbeat-runner.ts
23
- const log = createSubsystemLogger("gateway/heartbeat");
24
- let heartbeatsEnabled = true;
25
- function setHeartbeatsEnabled(enabled) {
26
- heartbeatsEnabled = enabled;
27
- }
28
- const DEFAULT_HEARTBEAT_TARGET = "last";
22
+ //#region src/infra/heartbeat-active-hours.ts
29
23
  const ACTIVE_HOURS_TIME_PATTERN = /^([01]\d|2[0-3]|24):([0-5]\d)$/;
30
- const EXEC_EVENT_PROMPT = "An async command you ran earlier has completed. The result is shown in the system messages above. Please relay the command output to the user in a helpful way. If the command succeeded, share the relevant output. If it failed, explain what went wrong.";
31
- const CRON_EVENT_PROMPT = "A scheduled reminder has been triggered. The reminder message is shown in the system messages above. Please relay this reminder to the user in a helpful and friendly way.";
32
24
  function resolveActiveHoursTimezone(cfg, raw) {
33
25
  const trimmed = raw?.trim();
34
26
  if (!trimmed || trimmed === "user") return resolveUserTimezone(cfg.agents?.defaults?.userTimezone);
@@ -83,6 +75,43 @@ function isWithinActiveHours(cfg, heartbeat, nowMs) {
83
75
  if (endMin > startMin) return currentMin >= startMin && currentMin < endMin;
84
76
  return currentMin >= startMin || currentMin < endMin;
85
77
  }
78
+
79
+ //#endregion
80
+ //#region src/infra/heartbeat-runner.ts
81
+ const log = createSubsystemLogger("gateway/heartbeat");
82
+ let heartbeatsEnabled = true;
83
+ function setHeartbeatsEnabled(enabled) {
84
+ heartbeatsEnabled = enabled;
85
+ }
86
+ const DEFAULT_HEARTBEAT_TARGET = "last";
87
+ const EXEC_EVENT_PROMPT = "An async command you ran earlier has completed. The result is shown in the system messages above. Please relay the command output to the user in a helpful way. If the command succeeded, share the relevant output. If it failed, explain what went wrong.";
88
+ function buildCronEventPrompt(pendingEvents) {
89
+ const eventText = pendingEvents.join("\n").trim();
90
+ if (!eventText) return "A scheduled cron event was triggered, but no event content was found. Reply HEARTBEAT_OK.";
91
+ return "A scheduled reminder has been triggered. The reminder content is:\n\n" + eventText + "\n\nPlease relay this reminder to the user in a helpful and friendly way.";
92
+ }
93
+ const HEARTBEAT_OK_PREFIX = HEARTBEAT_TOKEN.toLowerCase();
94
+ function isHeartbeatAckEvent(evt) {
95
+ const trimmed = evt.trim();
96
+ if (!trimmed) return false;
97
+ const lower = trimmed.toLowerCase();
98
+ if (!lower.startsWith(HEARTBEAT_OK_PREFIX)) return false;
99
+ const suffix = lower.slice(HEARTBEAT_OK_PREFIX.length);
100
+ if (suffix.length === 0) return true;
101
+ return !/[a-z0-9_]/.test(suffix[0]);
102
+ }
103
+ function isHeartbeatNoiseEvent(evt) {
104
+ const lower = evt.trim().toLowerCase();
105
+ if (!lower) return false;
106
+ return isHeartbeatAckEvent(lower) || lower.includes("heartbeat poll") || lower.includes("heartbeat wake");
107
+ }
108
+ function isExecCompletionEvent(evt) {
109
+ return evt.toLowerCase().includes("exec finished");
110
+ }
111
+ function isCronSystemEvent(evt) {
112
+ if (!evt.trim()) return false;
113
+ return !isHeartbeatNoiseEvent(evt) && !isExecCompletionEvent(evt);
114
+ }
86
115
  function hasExplicitHeartbeatAgents(cfg) {
87
116
  return (cfg.agents?.list ?? []).some((entry) => Boolean(entry?.heartbeat));
88
117
  }
@@ -350,10 +379,11 @@ async function runHeartbeatOnce(opts) {
350
379
  const isExecEvent = opts.reason === "exec-event";
351
380
  const isCronEvent = Boolean(opts.reason?.startsWith("cron:"));
352
381
  const pendingEvents = isExecEvent || isCronEvent ? peekSystemEvents(sessionKey) : [];
353
- const hasExecCompletion = pendingEvents.some((evt) => evt.includes("Exec finished"));
354
- const hasCronEvents = isCronEvent && pendingEvents.length > 0;
382
+ const cronEvents = pendingEvents.filter((evt) => isCronSystemEvent(evt));
383
+ const hasExecCompletion = pendingEvents.some(isExecCompletionEvent);
384
+ const hasCronEvents = isCronEvent && cronEvents.length > 0;
355
385
  const ctx = {
356
- Body: appendCronStyleCurrentTimeLine(hasExecCompletion ? EXEC_EVENT_PROMPT : hasCronEvents ? CRON_EVENT_PROMPT : resolveHeartbeatPrompt(cfg, heartbeat), cfg, startedAt),
386
+ Body: appendCronStyleCurrentTimeLine(hasExecCompletion ? EXEC_EVENT_PROMPT : hasCronEvents ? buildCronEventPrompt(cronEvents) : resolveHeartbeatPrompt(cfg, heartbeat), cfg, startedAt),
357
387
  From: sender,
358
388
  To: sender,
359
389
  Provider: hasExecCompletion ? "exec-event" : hasCronEvents ? "cron-event" : "heartbeat",
@@ -395,7 +425,11 @@ async function runHeartbeatOnce(opts) {
395
425
  return true;
396
426
  };
397
427
  try {
398
- const replyResult = await getReplyFromConfig(ctx, { isHeartbeat: true }, cfg);
428
+ const heartbeatModelOverride = heartbeat?.model?.trim() || void 0;
429
+ const replyResult = await getReplyFromConfig(ctx, heartbeatModelOverride ? {
430
+ isHeartbeat: true,
431
+ heartbeatModelOverride
432
+ } : { isHeartbeat: true }, cfg);
399
433
  const replyPayload = resolveHeartbeatReplyPayload(replyResult);
400
434
  const reasoningPayloads = heartbeat?.includeReasoning === true ? resolveHeartbeatReasoningPayloads(replyResult).filter((payload) => payload !== replyPayload) : [];
401
435
  if (!replyPayload || !replyPayload.text && !replyPayload.mediaUrl && !replyPayload.mediaUrls?.length) {
@@ -604,6 +638,10 @@ function startHeartbeatRunner(opts) {
604
638
  if (prevState && prevState.intervalMs === intervalMs && prevState.nextDueMs > now) return prevState.nextDueMs;
605
639
  return now + intervalMs;
606
640
  };
641
+ const advanceAgentSchedule = (agent, now) => {
642
+ agent.lastRunMs = now;
643
+ agent.nextDueMs = now + agent.intervalMs;
644
+ };
607
645
  const scheduleNext = () => {
608
646
  if (state.stopped) return;
609
647
  if (state.timer) {
@@ -672,18 +710,27 @@ function startHeartbeatRunner(opts) {
672
710
  let ran = false;
673
711
  for (const agent of state.agents.values()) {
674
712
  if (isInterval && now < agent.nextDueMs) continue;
675
- const res = await runOnce({
676
- cfg: state.cfg,
677
- agentId: agent.agentId,
678
- heartbeat: agent.heartbeat,
679
- reason,
680
- deps: { runtime: state.runtime }
681
- });
682
- if (res.status === "skipped" && res.reason === "requests-in-flight") return res;
683
- if (res.status !== "skipped" || res.reason !== "disabled") {
684
- agent.lastRunMs = now;
685
- agent.nextDueMs = now + agent.intervalMs;
713
+ let res;
714
+ try {
715
+ res = await runOnce({
716
+ cfg: state.cfg,
717
+ agentId: agent.agentId,
718
+ heartbeat: agent.heartbeat,
719
+ reason,
720
+ deps: { runtime: state.runtime }
721
+ });
722
+ } catch (err) {
723
+ const errMsg = formatErrorMessage(err);
724
+ log.error(`heartbeat runner: runOnce threw unexpectedly: ${errMsg}`, { error: errMsg });
725
+ advanceAgentSchedule(agent, now);
726
+ continue;
727
+ }
728
+ if (res.status === "skipped" && res.reason === "requests-in-flight") {
729
+ advanceAgentSchedule(agent, now);
730
+ scheduleNext();
731
+ return res;
686
732
  }
733
+ if (res.status !== "skipped" || res.reason !== "disabled") advanceAgentSchedule(agent, now);
687
734
  if (res.status === "ran") ran = true;
688
735
  }
689
736
  scheduleNext();
@@ -1204,7 +1251,10 @@ function resolveControlUiDistIndexPathForRoot(root) {
1204
1251
  return path.join(root, ...CONTROL_UI_DIST_PATH_SEGMENTS);
1205
1252
  }
1206
1253
  async function resolveControlUiDistIndexHealth(opts = {}) {
1207
- const indexPath = opts.root ? resolveControlUiDistIndexPathForRoot(opts.root) : await resolveControlUiDistIndexPath(opts.argv1 ?? process.argv[1]);
1254
+ const indexPath = opts.root ? resolveControlUiDistIndexPathForRoot(opts.root) : await resolveControlUiDistIndexPath({
1255
+ argv1: opts.argv1 ?? process.argv[1],
1256
+ moduleUrl: opts.moduleUrl
1257
+ });
1208
1258
  return {
1209
1259
  indexPath,
1210
1260
  exists: Boolean(indexPath && fs.existsSync(indexPath))
@@ -1228,12 +1278,17 @@ function resolveControlUiRepoRoot(argv1 = process.argv[1]) {
1228
1278
  }
1229
1279
  return null;
1230
1280
  }
1231
- async function resolveControlUiDistIndexPath(argv1 = process.argv[1]) {
1281
+ async function resolveControlUiDistIndexPath(argv1OrOpts) {
1282
+ const argv1 = typeof argv1OrOpts === "string" ? argv1OrOpts : argv1OrOpts?.argv1 ?? process.argv[1];
1283
+ const moduleUrl = typeof argv1OrOpts === "object" ? argv1OrOpts?.moduleUrl : void 0;
1232
1284
  if (!argv1) return null;
1233
1285
  const normalized = path.resolve(argv1);
1234
1286
  const distDir = path.dirname(normalized);
1235
1287
  if (path.basename(distDir) === "dist") return path.join(distDir, "control-ui", "index.html");
1236
- const packageRoot = await resolveOpenClawPackageRoot({ argv1: normalized });
1288
+ const packageRoot = await resolveOpenClawPackageRoot({
1289
+ argv1: normalized,
1290
+ moduleUrl
1291
+ });
1237
1292
  if (packageRoot) return path.join(packageRoot, "dist", "control-ui", "index.html");
1238
1293
  let dir = path.dirname(normalized);
1239
1294
  for (let i = 0; i < 8; i++) {
@@ -1,33 +1,25 @@
1
- import { D as colorize, O as isRich, k as theme, n as isTruthyEnvValue, o as createSubsystemLogger, p as defaultRuntime, y as info } from "./entry.js";
1
+ import { A as theme, O as colorize, k as isRich, n as isTruthyEnvValue, o as createSubsystemLogger, p as defaultRuntime, y as info } from "./entry.js";
2
2
  import { d as resolveAgentIdFromSessionKey, h as toAgentStoreSessionKey, l as normalizeAgentId } from "./session-key-DVvxnFKg.js";
3
- import { t as runCommandWithTimeout } from "./exec-B8JKbXKW.js";
4
- import { n as resolveOpenClawPackageRootSync, t as resolveOpenClawPackageRoot } from "./openclaw-root-Dw6gumSU.js";
5
- import { c as resolveDefaultAgentId, m as DEFAULT_HEARTBEAT_FILENAME, n as resolveAgentConfig, s as resolveAgentWorkspaceDir } from "./agent-scope-DQuy3dwI.js";
6
- import { g as parseDurationMs, i as loadConfig } from "./config-B00lvFac.js";
7
- import { n as formatErrorMessage } from "./errors-x4NYs-1P.js";
8
- import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-7yrB6v4I.js";
9
- import { f as resolvePreferredAccountId, n as listChannelPlugins, t as getChannelPlugin, u as buildChannelAccountBindings } from "./plugins-Db5BiELK.js";
10
- import { A as resolveHeartbeatVisibility, Cn as resolveHeartbeatDeliveryTarget, Dr as isHeartbeatContentEffectivelyEmpty, Er as DEFAULT_HEARTBEAT_EVERY, F as appendCronStyleCurrentTimeLine, Mr as resolveUserTimezone, Or as resolveHeartbeatPrompt$1, P as resolveIndicatorType, Rr as resolveEffectiveMessagesConfig, Tr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, U as getReplyFromConfig, ir as setHeartbeatWakeHandler, j as emitHeartbeatEvent, kr as stripHeartbeatToken, nr as peekSystemEvents, rr as requestHeartbeatNow, wn as resolveHeartbeatSenderContext, xr as CommandLane, yr as getQueueSize } from "./loader-wXwp4rZJ.js";
11
- import { n as withProgress } from "./progress-Da1ehW-x.js";
3
+ import { t as runCommandWithTimeout } from "./exec-CACT5OAW.js";
4
+ import { n as resolveOpenClawPackageRootSync, t as resolveOpenClawPackageRoot } from "./openclaw-root-BNlEap4i.js";
5
+ import { c as resolveDefaultAgentId, m as DEFAULT_HEARTBEAT_FILENAME, n as resolveAgentConfig, s as resolveAgentWorkspaceDir } from "./agent-scope-CsRbLH4l.js";
6
+ import { g as parseDurationMs, i as loadConfig } from "./config-Bdhomfei.js";
7
+ import { n as formatErrorMessage } from "./errors-DjZBTJJ3.js";
8
+ import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-DVYCIV8m.js";
9
+ import { f as resolvePreferredAccountId, n as listChannelPlugins, t as getChannelPlugin, u as buildChannelAccountBindings } from "./plugins-4Hqd1WGf.js";
10
+ import { $n as peekSystemEvents, A as resolveHeartbeatVisibility, Dr as resolveHeartbeatPrompt$1, Er as isHeartbeatContentEffectivelyEmpty, F as appendCronStyleCurrentTimeLine, Lr as resolveEffectiveMessagesConfig, Or as stripHeartbeatToken, P as resolveIndicatorType, Tr as DEFAULT_HEARTBEAT_EVERY, U as getReplyFromConfig, _n as resolveHeartbeatSenderContext, _r as getQueueSize, br as CommandLane, er as requestHeartbeatNow, gn as resolveHeartbeatDeliveryTarget, j as emitHeartbeatEvent, jr as resolveUserTimezone, tr as setHeartbeatWakeHandler, wr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS } from "./loader-KjT074JR.js";
11
+ import { n as withProgress } from "./progress-DWqhRakV.js";
12
12
  import { t as resolveChannelDefaultAccountId } from "./helpers-DdwqKAAS.js";
13
- import { o as resolveStorePath } from "./paths-IivnSNkP.js";
14
- import { A as HEARTBEAT_TOKEN, t as deliverOutboundPayloads } from "./deliver-hf-WKyWd.js";
15
- import { N as canonicalizeMainSessionAlias, P as resolveAgentMainSessionKey, d as loadSessionStore, g as updateSessionStore, m as saveSessionStore } from "./sandbox-Aks-9EcZ.js";
13
+ import { k as HEARTBEAT_TOKEN, t as deliverOutboundPayloads } from "./deliver-CIU9Npgs.js";
14
+ import { s as resolveStorePath } from "./paths-DLINmNFQ.js";
15
+ import { N as canonicalizeMainSessionAlias, P as resolveAgentMainSessionKey, d as loadSessionStore, g as updateSessionStore, m as saveSessionStore } from "./sandbox-BKYnhYQH.js";
16
16
  import path from "node:path";
17
17
  import fs from "node:fs";
18
18
  import fs$1 from "node:fs/promises";
19
19
  import { fileURLToPath } from "node:url";
20
20
 
21
- //#region src/infra/heartbeat-runner.ts
22
- const log = createSubsystemLogger("gateway/heartbeat");
23
- let heartbeatsEnabled = true;
24
- function setHeartbeatsEnabled(enabled) {
25
- heartbeatsEnabled = enabled;
26
- }
27
- const DEFAULT_HEARTBEAT_TARGET = "last";
21
+ //#region src/infra/heartbeat-active-hours.ts
28
22
  const ACTIVE_HOURS_TIME_PATTERN = /^([01]\d|2[0-3]|24):([0-5]\d)$/;
29
- const EXEC_EVENT_PROMPT = "An async command you ran earlier has completed. The result is shown in the system messages above. Please relay the command output to the user in a helpful way. If the command succeeded, share the relevant output. If it failed, explain what went wrong.";
30
- const CRON_EVENT_PROMPT = "A scheduled reminder has been triggered. The reminder message is shown in the system messages above. Please relay this reminder to the user in a helpful and friendly way.";
31
23
  function resolveActiveHoursTimezone(cfg, raw) {
32
24
  const trimmed = raw?.trim();
33
25
  if (!trimmed || trimmed === "user") return resolveUserTimezone(cfg.agents?.defaults?.userTimezone);
@@ -82,6 +74,43 @@ function isWithinActiveHours(cfg, heartbeat, nowMs) {
82
74
  if (endMin > startMin) return currentMin >= startMin && currentMin < endMin;
83
75
  return currentMin >= startMin || currentMin < endMin;
84
76
  }
77
+
78
+ //#endregion
79
+ //#region src/infra/heartbeat-runner.ts
80
+ const log = createSubsystemLogger("gateway/heartbeat");
81
+ let heartbeatsEnabled = true;
82
+ function setHeartbeatsEnabled(enabled) {
83
+ heartbeatsEnabled = enabled;
84
+ }
85
+ const DEFAULT_HEARTBEAT_TARGET = "last";
86
+ const EXEC_EVENT_PROMPT = "An async command you ran earlier has completed. The result is shown in the system messages above. Please relay the command output to the user in a helpful way. If the command succeeded, share the relevant output. If it failed, explain what went wrong.";
87
+ function buildCronEventPrompt(pendingEvents) {
88
+ const eventText = pendingEvents.join("\n").trim();
89
+ if (!eventText) return "A scheduled cron event was triggered, but no event content was found. Reply HEARTBEAT_OK.";
90
+ return "A scheduled reminder has been triggered. The reminder content is:\n\n" + eventText + "\n\nPlease relay this reminder to the user in a helpful and friendly way.";
91
+ }
92
+ const HEARTBEAT_OK_PREFIX = HEARTBEAT_TOKEN.toLowerCase();
93
+ function isHeartbeatAckEvent(evt) {
94
+ const trimmed = evt.trim();
95
+ if (!trimmed) return false;
96
+ const lower = trimmed.toLowerCase();
97
+ if (!lower.startsWith(HEARTBEAT_OK_PREFIX)) return false;
98
+ const suffix = lower.slice(HEARTBEAT_OK_PREFIX.length);
99
+ if (suffix.length === 0) return true;
100
+ return !/[a-z0-9_]/.test(suffix[0]);
101
+ }
102
+ function isHeartbeatNoiseEvent(evt) {
103
+ const lower = evt.trim().toLowerCase();
104
+ if (!lower) return false;
105
+ return isHeartbeatAckEvent(lower) || lower.includes("heartbeat poll") || lower.includes("heartbeat wake");
106
+ }
107
+ function isExecCompletionEvent(evt) {
108
+ return evt.toLowerCase().includes("exec finished");
109
+ }
110
+ function isCronSystemEvent(evt) {
111
+ if (!evt.trim()) return false;
112
+ return !isHeartbeatNoiseEvent(evt) && !isExecCompletionEvent(evt);
113
+ }
85
114
  function hasExplicitHeartbeatAgents(cfg) {
86
115
  return (cfg.agents?.list ?? []).some((entry) => Boolean(entry?.heartbeat));
87
116
  }
@@ -349,10 +378,11 @@ async function runHeartbeatOnce(opts) {
349
378
  const isExecEvent = opts.reason === "exec-event";
350
379
  const isCronEvent = Boolean(opts.reason?.startsWith("cron:"));
351
380
  const pendingEvents = isExecEvent || isCronEvent ? peekSystemEvents(sessionKey) : [];
352
- const hasExecCompletion = pendingEvents.some((evt) => evt.includes("Exec finished"));
353
- const hasCronEvents = isCronEvent && pendingEvents.length > 0;
381
+ const cronEvents = pendingEvents.filter((evt) => isCronSystemEvent(evt));
382
+ const hasExecCompletion = pendingEvents.some(isExecCompletionEvent);
383
+ const hasCronEvents = isCronEvent && cronEvents.length > 0;
354
384
  const ctx = {
355
- Body: appendCronStyleCurrentTimeLine(hasExecCompletion ? EXEC_EVENT_PROMPT : hasCronEvents ? CRON_EVENT_PROMPT : resolveHeartbeatPrompt(cfg, heartbeat), cfg, startedAt),
385
+ Body: appendCronStyleCurrentTimeLine(hasExecCompletion ? EXEC_EVENT_PROMPT : hasCronEvents ? buildCronEventPrompt(cronEvents) : resolveHeartbeatPrompt(cfg, heartbeat), cfg, startedAt),
356
386
  From: sender,
357
387
  To: sender,
358
388
  Provider: hasExecCompletion ? "exec-event" : hasCronEvents ? "cron-event" : "heartbeat",
@@ -394,7 +424,11 @@ async function runHeartbeatOnce(opts) {
394
424
  return true;
395
425
  };
396
426
  try {
397
- const replyResult = await getReplyFromConfig(ctx, { isHeartbeat: true }, cfg);
427
+ const heartbeatModelOverride = heartbeat?.model?.trim() || void 0;
428
+ const replyResult = await getReplyFromConfig(ctx, heartbeatModelOverride ? {
429
+ isHeartbeat: true,
430
+ heartbeatModelOverride
431
+ } : { isHeartbeat: true }, cfg);
398
432
  const replyPayload = resolveHeartbeatReplyPayload(replyResult);
399
433
  const reasoningPayloads = heartbeat?.includeReasoning === true ? resolveHeartbeatReasoningPayloads(replyResult).filter((payload) => payload !== replyPayload) : [];
400
434
  if (!replyPayload || !replyPayload.text && !replyPayload.mediaUrl && !replyPayload.mediaUrls?.length) {
@@ -603,6 +637,10 @@ function startHeartbeatRunner(opts) {
603
637
  if (prevState && prevState.intervalMs === intervalMs && prevState.nextDueMs > now) return prevState.nextDueMs;
604
638
  return now + intervalMs;
605
639
  };
640
+ const advanceAgentSchedule = (agent, now) => {
641
+ agent.lastRunMs = now;
642
+ agent.nextDueMs = now + agent.intervalMs;
643
+ };
606
644
  const scheduleNext = () => {
607
645
  if (state.stopped) return;
608
646
  if (state.timer) {
@@ -671,18 +709,27 @@ function startHeartbeatRunner(opts) {
671
709
  let ran = false;
672
710
  for (const agent of state.agents.values()) {
673
711
  if (isInterval && now < agent.nextDueMs) continue;
674
- const res = await runOnce({
675
- cfg: state.cfg,
676
- agentId: agent.agentId,
677
- heartbeat: agent.heartbeat,
678
- reason,
679
- deps: { runtime: state.runtime }
680
- });
681
- if (res.status === "skipped" && res.reason === "requests-in-flight") return res;
682
- if (res.status !== "skipped" || res.reason !== "disabled") {
683
- agent.lastRunMs = now;
684
- agent.nextDueMs = now + agent.intervalMs;
712
+ let res;
713
+ try {
714
+ res = await runOnce({
715
+ cfg: state.cfg,
716
+ agentId: agent.agentId,
717
+ heartbeat: agent.heartbeat,
718
+ reason,
719
+ deps: { runtime: state.runtime }
720
+ });
721
+ } catch (err) {
722
+ const errMsg = formatErrorMessage(err);
723
+ log.error(`heartbeat runner: runOnce threw unexpectedly: ${errMsg}`, { error: errMsg });
724
+ advanceAgentSchedule(agent, now);
725
+ continue;
726
+ }
727
+ if (res.status === "skipped" && res.reason === "requests-in-flight") {
728
+ advanceAgentSchedule(agent, now);
729
+ scheduleNext();
730
+ return res;
685
731
  }
732
+ if (res.status !== "skipped" || res.reason !== "disabled") advanceAgentSchedule(agent, now);
686
733
  if (res.status === "ran") ran = true;
687
734
  }
688
735
  scheduleNext();
@@ -1203,7 +1250,10 @@ function resolveControlUiDistIndexPathForRoot(root) {
1203
1250
  return path.join(root, ...CONTROL_UI_DIST_PATH_SEGMENTS);
1204
1251
  }
1205
1252
  async function resolveControlUiDistIndexHealth(opts = {}) {
1206
- const indexPath = opts.root ? resolveControlUiDistIndexPathForRoot(opts.root) : await resolveControlUiDistIndexPath(opts.argv1 ?? process.argv[1]);
1253
+ const indexPath = opts.root ? resolveControlUiDistIndexPathForRoot(opts.root) : await resolveControlUiDistIndexPath({
1254
+ argv1: opts.argv1 ?? process.argv[1],
1255
+ moduleUrl: opts.moduleUrl
1256
+ });
1207
1257
  return {
1208
1258
  indexPath,
1209
1259
  exists: Boolean(indexPath && fs.existsSync(indexPath))
@@ -1227,12 +1277,17 @@ function resolveControlUiRepoRoot(argv1 = process.argv[1]) {
1227
1277
  }
1228
1278
  return null;
1229
1279
  }
1230
- async function resolveControlUiDistIndexPath(argv1 = process.argv[1]) {
1280
+ async function resolveControlUiDistIndexPath(argv1OrOpts) {
1281
+ const argv1 = typeof argv1OrOpts === "string" ? argv1OrOpts : argv1OrOpts?.argv1 ?? process.argv[1];
1282
+ const moduleUrl = typeof argv1OrOpts === "object" ? argv1OrOpts?.moduleUrl : void 0;
1231
1283
  if (!argv1) return null;
1232
1284
  const normalized = path.resolve(argv1);
1233
1285
  const distDir = path.dirname(normalized);
1234
1286
  if (path.basename(distDir) === "dist") return path.join(distDir, "control-ui", "index.html");
1235
- const packageRoot = await resolveOpenClawPackageRoot({ argv1: normalized });
1287
+ const packageRoot = await resolveOpenClawPackageRoot({
1288
+ argv1: normalized,
1289
+ moduleUrl
1290
+ });
1236
1291
  if (packageRoot) return path.join(packageRoot, "dist", "control-ui", "index.html");
1237
1292
  let dir = path.dirname(normalized);
1238
1293
  for (let i = 0; i < 8; i++) {
@@ -1,4 +1,4 @@
1
- import { R as theme } from "./subsystem-Bh1Y_6Uv.js";
1
+ import { R as theme } from "./subsystem-BoExtIHo.js";
2
2
 
3
3
  //#region src/cli/help-format.ts
4
4
  function formatHelpExample(command, description) {
@@ -1,4 +1,4 @@
1
- import { k as theme } from "./entry.js";
1
+ import { A as theme } from "./entry.js";
2
2
 
3
3
  //#region src/cli/help-format.ts
4
4
  function formatHelpExample(command, description) {
@@ -1,52 +1,56 @@
1
1
  import "./paths-DVBShlw6.js";
2
- import { R as theme, c as defaultRuntime } from "./subsystem-Bh1Y_6Uv.js";
3
- import { C as shortenHomePath, b as resolveUserPath, t as CONFIG_DIR } from "./utils-es4ygvQ-.js";
4
- import "./pi-embedded-helpers-DYH6OWft.js";
5
- import "./reply--b7BsXGP.js";
6
- import { t as runCommandWithTimeout } from "./exec-Cv_Ofd1m.js";
7
- import { c as resolveDefaultAgentId, s as resolveAgentWorkspaceDir } from "./agent-scope-CGmuusG9.js";
8
- import "./model-selection-BK7DuyH8.js";
2
+ import { R as theme, c as defaultRuntime } from "./subsystem-BoExtIHo.js";
3
+ import { C as shortenHomePath, b as resolveUserPath, t as CONFIG_DIR } from "./utils-Cd9QdCHh.js";
4
+ import "./pi-embedded-helpers-CMKLjW6X.js";
5
+ import "./reply-DICXkh_C.js";
6
+ import { t as runCommandWithTimeout } from "./exec-YIosokWE.js";
7
+ import { c as resolveDefaultAgentId, s as resolveAgentWorkspaceDir } from "./agent-scope-CQCus0rI.js";
8
+ import "./model-selection-BLuqsGVB.js";
9
9
  import "./github-copilot-token-BW-SEg7E.js";
10
10
  import { t as formatCliCommand } from "./command-format-ChfKqObn.js";
11
11
  import "./boolean-BgXe2hyu.js";
12
- import "./env-BxRc6wWv.js";
13
- import { c as writeConfigFile, i as loadConfig } from "./config--NUdpACy.js";
14
- import { a as MANIFEST_KEY } from "./manifest-registry-3It8Z8yN.js";
15
- import "./plugins-CNaHNND_.js";
16
- import "./sandbox-DqUO2K83.js";
17
- import "./image-fUwR7slg.js";
18
- import "./pi-model-discovery-CV2V1HHz.js";
19
- import "./chrome-Dm-EgOjJ.js";
20
- import "./skills-ccAgQ3Ad.js";
21
- import "./routes-DUkEKAc1.js";
22
- import "./server-context-8Qt35QdF.js";
23
- import "./message-channel-Cu61-7H6.js";
24
- import "./logging-BzvBIA3Y.js";
25
- import "./accounts-C2elk6PC.js";
26
- import "./paths-Bkhd_qY8.js";
27
- import "./redact-DAKeu7PA.js";
28
- import "./tool-display-DskiU8Kt.js";
29
- import "./deliver-T9d44OpZ.js";
30
- import "./dispatcher-3ElQWGVI.js";
31
- import "./manager-BbnHek5T.js";
32
- import "./sqlite-Btrgi7-j.js";
33
- import "./tui-formatters-CA85v4U2.js";
34
- import "./client-6xKrRC-1.js";
35
- import "./call-Bek1xlgk.js";
36
- import "./login-qr-wM8BnKJh.js";
37
- import "./pairing-store-c-QQ2u8p.js";
38
- import { t as formatDocsLink } from "./links-C591fM9M.js";
39
- import "./progress-DIQJt9Va.js";
40
- import "./pi-tools.policy-akYsGFiA.js";
41
- import "./prompt-style-CjQRlDx4.js";
42
- import "./pairing-labels-Ciu3Zoxj.js";
43
- import "./session-cost-usage-PvyVZz-g.js";
44
- import "./control-service-Db_1V-KY.js";
45
- import "./channel-selection-B9b7Kuit.js";
46
- import { a as resolvePackedRootDir, i as resolveArchiveKind, n as fileExists, r as readJsonFile, t as extractArchive } from "./archive-CXhvR9nU.js";
47
- import { t as renderTable } from "./table-DEnmtvl5.js";
48
- import { a as parseFrontmatter, n as loadWorkspaceHookEntries, t as buildWorkspaceHookStatus } from "./hooks-status-DNQJSa4B.js";
49
- import { t as buildPluginStatusReport } from "./status-Dt7RE_Yy.js";
12
+ import "./env-ONzUVAG2.js";
13
+ import { c as writeConfigFile, i as loadConfig } from "./config-aFQssWKX.js";
14
+ import { a as MANIFEST_KEY } from "./manifest-registry-CQhdnDBZ.js";
15
+ import "./plugins-X7d_tfTE.js";
16
+ import "./sandbox-Bhjnh1Xg.js";
17
+ import "./runner-D_dujMod.js";
18
+ import "./image-C4Nn2p3e.js";
19
+ import "./pi-model-discovery-EwKVHlZB.js";
20
+ import "./chrome-Cvr-57lg.js";
21
+ import "./skills-DprQj9X2.js";
22
+ import "./routes-CmOI1hIH.js";
23
+ import "./server-context-Cl0U0vE3.js";
24
+ import "./message-channel-BLi2a6Yw.js";
25
+ import "./logging-fywhKCmE.js";
26
+ import "./accounts-DeqIQjo1.js";
27
+ import "./paths-B49s6UZQ.js";
28
+ import "./redact-BRsnXqwD.js";
29
+ import "./tool-display-CZRIDMRm.js";
30
+ import "./fetch-DmiOpALK.js";
31
+ import "./deliver-LsxKETro.js";
32
+ import "./dispatcher-DY51b-Zc.js";
33
+ import "./manager-DkqF1GiK.js";
34
+ import "./sqlite-D4w5TejA.js";
35
+ import "./tui-formatters-CNySEfJN.js";
36
+ import "./client-BrYfyoDK.js";
37
+ import "./call-SolyGS1r.js";
38
+ import "./login-qr-B6ZgAuIf.js";
39
+ import "./pairing-store-CmlRVqOz.js";
40
+ import { t as formatDocsLink } from "./links-Eax1UO3w.js";
41
+ import "./progress-C9kngsTD.js";
42
+ import "./pi-tools.policy-BpsROZbz.js";
43
+ import "./prompt-style-CIbmaxSa.js";
44
+ import "./pairing-labels-B6CN0SNH.js";
45
+ import "./session-cost-usage-D7HuoSSD.js";
46
+ import "./auth-CQNl_IaI.js";
47
+ import "./control-auth-DBCu3qyv.js";
48
+ import "./control-service-B5KnPqGP.js";
49
+ import "./channel-selection-MZAHm4U8.js";
50
+ import { a as resolvePackedRootDir, i as resolveArchiveKind, n as fileExists, r as readJsonFile, t as extractArchive } from "./archive-beaSfAzA.js";
51
+ import { t as renderTable } from "./table-B8dx3v4v.js";
52
+ import { a as parseFrontmatter, n as loadWorkspaceHookEntries, t as buildWorkspaceHookStatus } from "./hooks-status-D9MhwHRp.js";
53
+ import { t as buildPluginStatusReport } from "./status-CiHtHdaa.js";
50
54
  import fs from "node:fs";
51
55
  import os from "node:os";
52
56
  import path from "node:path";
@@ -206,7 +210,8 @@ async function installHookPackageFromDir(params) {
206
210
  "npm",
207
211
  "install",
208
212
  "--omit=dev",
209
- "--silent"
213
+ "--silent",
214
+ "--ignore-scripts"
210
215
  ], {
211
216
  timeoutMs: Math.max(timeoutMs, 3e5),
212
217
  cwd: targetDir