@gguf/claw 2026.2.9 → 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 (715) hide show
  1. package/CHANGELOG.md +159 -0
  2. package/LICENSE +1 -1
  3. package/dist/{accounts-MyAvfCVH.js → accounts-54zZMYCo.js} +5 -2
  4. package/dist/{accounts-DbzMEfKN.js → accounts-Bvh0DFxS.js} +5 -2
  5. package/dist/{acp-cli-MZ3h1E1n.js → acp-cli-BslcOPdx.js} +146 -25
  6. package/dist/{acp-cli-DKJRTfwB.js → acp-cli-D6rk5cOh.js} +145 -24
  7. package/dist/{agent-whSJT2Lk.js → agent-C0yL70cy.js} +26 -20
  8. package/dist/{agent-c1QNeDmV.js → agent-DjZxytiC.js} +26 -20
  9. package/dist/{agent-scope-D3me2AZa.js → agent-scope-Bkr9fZtl.js} +31 -14
  10. package/dist/{agent-scope-Dp8sREli.js → agent-scope-DASgjz2_.js} +199 -14
  11. package/dist/{agent-scope-DnyDZ5RH.js → agent-scope-GYIs5dyU.js} +30 -13
  12. package/dist/{agent-scope-Dpav7C-i.js → agent-scope-okUOVjE5.js} +32 -11
  13. package/dist/audio-preflight-B0kLz-Ma.js +60 -0
  14. package/dist/audio-preflight-BCs_J33s.js +60 -0
  15. package/dist/audio-preflight-CTl2RCyF.js +71 -0
  16. package/dist/audio-preflight-MhF6YlAY.js +74 -0
  17. package/dist/{audit-BFYy1qSw.js → audit-BYfhZ7LA.js} +454 -31
  18. package/dist/{audit-Dn2cBl2x.js → audit-CfPZ_5Id.js} +452 -29
  19. package/dist/auth-9nTeB2Je.js +602 -0
  20. package/dist/auth-CLhyWwAU.js +593 -0
  21. package/dist/{auth-health-Cx5exPMV.js → auth-health-CWiLyzSr.js} +1 -1
  22. package/dist/{auth-health-DjT4fUpw.js → auth-health-qD4RND47.js} +1 -1
  23. package/dist/{auth-profiles-FJ3VY25a.js → auth-profiles-Cp9MtUdM.js} +353 -33
  24. package/dist/build-info.json +2 -2
  25. package/dist/bundled/boot-md/handler.js +33 -25
  26. package/dist/bundled/session-memory/handler.js +33 -22
  27. package/dist/{call-CD2IZCHT.js → call-CjEdFGAf.js} +7 -7
  28. package/dist/{call-CM25qgxz.js → call-DAfkvtVq.js} +6 -6
  29. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  30. package/dist/canvas-host/a2ui/a2ui.bundle.js +7 -1
  31. package/dist/{channel-options-CremuJyh.js → channel-options-B8dPzlyO.js} +4 -4
  32. package/dist/{channel-options-D-JnJ4Ft.js → channel-options-Bq5IC5Tv.js} +12 -7
  33. package/dist/{channel-selection-DAHCVAX4.js → channel-selection-BaW1xXEa.js} +2 -2
  34. package/dist/{channel-selection-DPV9hvY8.js → channel-selection-dR0jCgTn.js} +2 -2
  35. package/dist/{channels-cli-6deHFr9t.js → channels-cli-hPo28hWS.js} +61 -56
  36. package/dist/{channels-cli-D3tKmhlt.js → channels-cli-zi3rO0jq.js} +62 -57
  37. package/dist/{channels-status-issues-BN1ICfdy.js → channels-status-issues-kb-M2Fi0.js} +1 -1
  38. package/dist/{channels-status-issues-DFhI_u0p.js → channels-status-issues-ketdwZun.js} +1 -1
  39. package/dist/{chrome-B2UjqY-9.js → chrome--Fe8F5Kf.js} +24 -12
  40. package/dist/{chrome-COabMr6f.js → chrome-BWeMtFGf.js} +24 -12
  41. package/dist/{chrome-CQd_MVOA.js → chrome-Bx24uq7B.js} +27 -15
  42. package/dist/{chrome-CxRJz4ZD.js → chrome-n_3rtK2c.js} +22 -11
  43. package/dist/{clack-prompter-BkNZ4Xdw.js → clack-prompter-B-tJmODa.js} +5 -5
  44. package/dist/{clack-prompter-DuBVnTKy.js → clack-prompter-DpuKn_Uy.js} +5 -5
  45. package/dist/cli/daemon-cli.js +8 -1
  46. package/dist/cli-9lwO6Ttx.js +94 -0
  47. package/dist/cli-CNNdyxPO.js +91 -0
  48. package/dist/{client-DMloFP_O.js → client-BhZjzrH2.js} +73 -9
  49. package/dist/{client-C0gQ7hrj.js → client-DyAxKXKY.js} +73 -9
  50. package/dist/{command-format-ayFsmwwz.js → command-format-Bxe0mWee.js} +1 -1
  51. package/dist/{command-options-BQdH6qnK.js → command-options-BDV7Xgs-.js} +9 -4
  52. package/dist/{commands-BWHYcc83.js → commands-gOiRcfoU.js} +4 -4
  53. package/dist/{tui-formatters-BDP_71Xt.js → commands-registry-6NUFrejL.js} +6 -114
  54. package/dist/{tui-formatters-CIx4sCQO.js → commands-registry-DGgkLQ7A.js} +6 -114
  55. package/dist/{completion-cli-DEJia0V1.js → completion-cli-B1kHKJZX.js} +30 -30
  56. package/dist/{completion-cli-D_0fx2O6.js → completion-cli-Drks7xRK.js} +3 -3
  57. package/dist/{config-CQt4vGxI.js → config-7NCznPmF.js} +336 -97
  58. package/dist/{config-fCnPoWjU.js → config-B8v0zg48.js} +295 -99
  59. package/dist/{config-Bj2eDa02.js → config-CeWMHOiQ.js} +295 -99
  60. package/dist/{config-ethqi73X.js → config-D8pgDSNo.js} +358 -99
  61. package/dist/{config-guard-BJuqQvng.js → config-guard-RbHxYc9j.js} +212 -63
  62. package/dist/{configure-skrLiSwW.js → configure-DLp2Xz7L.js} +59 -40
  63. package/dist/{configure-C-pYuYg_.js → configure-Su1S0gi-.js} +58 -39
  64. package/dist/control-auth-BlWU-jBl.js +54 -0
  65. package/dist/control-auth-C8rIqEdA.js +54 -0
  66. package/dist/{control-service-BDgF-FZ0.js → control-service-BNDthc1N.js} +11 -5
  67. package/dist/{control-service-Djd_WI3_.js → control-service-COF59GQe.js} +10 -4
  68. package/dist/control-ui/assets/{index-CnB9IO4a.js → index-BECn2L1T.js} +369 -368
  69. package/dist/control-ui/assets/index-BECn2L1T.js.map +1 -0
  70. package/dist/control-ui/assets/index-DRPcd1Z4.css +1 -0
  71. package/dist/control-ui/index.html +2 -2
  72. package/dist/{cron-cli-CB6CufAb.js → cron-cli-CSy4-JGS.js} +20 -20
  73. package/dist/{cron-cli-Db6fardJ.js → cron-cli-Db3uCDIT.js} +21 -21
  74. package/dist/{daemon-cli-Xe22v7lZ.js → daemon-cli-BLbzcTuD.js} +61 -22
  75. package/dist/{daemon-cli-BlHK0ly2.js → daemon-cli-DR0D35MO.js} +60 -21
  76. package/dist/{daemon-runtime-CMqH8BUE.js → daemon-runtime-ZWXvLDxx.js} +3 -3
  77. package/dist/{daemon-runtime-DwQFvDXZ.js → daemon-runtime-pVcZ2KDE.js} +3 -3
  78. package/dist/{deliver-CD7-BhYD.js → deliver-BHNoC9Yk.js} +396 -290
  79. package/dist/{deliver-BdGjIcTC.js → deliver-C_5eGQrX.js} +392 -286
  80. package/dist/{deliver-nTKaXF--.js → deliver-DPHZlWgr.js} +392 -287
  81. package/dist/{deliver-CDMGxRoW.js → deliver-geVWJ52I.js} +394 -288
  82. package/dist/{deps-BDQ_K8zf.js → deps-CP0dcOgD.js} +2 -2
  83. package/dist/{deps-D60FbgTP.js → deps-DW5r2IEk.js} +2 -2
  84. package/dist/{devices-cli-N559801X.js → devices-cli-BViqX5pl.js} +15 -15
  85. package/dist/{devices-cli-IxmPLIk8.js → devices-cli-DpYaY-iM.js} +14 -14
  86. package/dist/{directory-cli-Caq-OYk8.js → directory-cli-BWD1DdKf.js} +16 -16
  87. package/dist/{directory-cli-ClrdmQL-.js → directory-cli-BcvZfkfo.js} +17 -17
  88. package/dist/{dispatcher-BfXtm4Dl.js → dispatcher-4Qn951N3.js} +5 -3
  89. package/dist/{dns-cli-DgVO0Pkw.js → dns-cli-_Ych2tu9.js} +12 -12
  90. package/dist/{dns-cli-BTNZkWHs.js → dns-cli-gQCxUXgU.js} +13 -13
  91. package/dist/{docs-cli-9Xan7C6D.js → docs-cli-Bseiau7J.js} +7 -7
  92. package/dist/{docs-cli-DZULc91f.js → docs-cli-DzBTlWQE.js} +8 -8
  93. package/dist/{doctor-D39rZvNH.js → doctor-BNkYYahD.js} +37 -36
  94. package/dist/{doctor-Dq1YeYdH.js → doctor-DzIgdPx1.js} +37 -36
  95. package/dist/entry.js +77 -21
  96. package/dist/{env-B5YXooWp.js → env-BUuSkE19.js} +1 -1
  97. package/dist/{exec-DFOtZbI0.js → exec-BPQSKwGa.js} +5 -3
  98. package/dist/{exec-B8JKbXKW.js → exec-DqZFMawz.js} +5 -3
  99. package/dist/{exec-Bas1hoSJ.js → exec-EKUaAU91.js} +57 -18
  100. package/dist/{exec-CiH_vkWn.js → exec-_PSUrMP8.js} +528 -19
  101. package/dist/{exec-approvals-DGPTjO0N.js → exec-approvals-Bqk-tIxY.js} +134 -51
  102. package/dist/{exec-approvals-C9InMoAB.js → exec-approvals-C67V-ljH.js} +134 -51
  103. package/dist/{exec-approvals-cli-EASbqFd-.js → exec-approvals-cli-D6vfSqQu.js} +22 -22
  104. package/dist/{exec-approvals-cli-DPHItoxG.js → exec-approvals-cli-DAdoki_R.js} +21 -21
  105. package/dist/extensionAPI.js +8518 -9140
  106. package/dist/fetch-Bz1WxfzV.js +285 -0
  107. package/dist/fetch-D2O8s8I1.js +285 -0
  108. package/dist/fetch-Dm-nCwa_.js +285 -0
  109. package/dist/fetch-wuOZDzdT.js +285 -0
  110. package/dist/{gateway-cli-BFqUIif8.js → gateway-cli-C-k7JPlr.js} +1868 -1072
  111. package/dist/{gateway-cli-v4kSPsLE.js → gateway-cli-DIIJ9Z0Y.js} +1870 -1074
  112. package/dist/{gateway-rpc-D6LrkcSA.js → gateway-rpc-D6jLh81b.js} +3 -3
  113. package/dist/{gateway-rpc-dHFK02Kk.js → gateway-rpc-aqysUyf5.js} +3 -3
  114. package/dist/{github-copilot-auth-CQIWc0hC.js → github-copilot-auth-BUqfX7hG.js} +316 -52
  115. package/dist/{github-copilot-auth-D2jfnapd.js → github-copilot-auth-By-nyRb6.js} +316 -52
  116. package/dist/{github-copilot-token-SLWintYd.js → github-copilot-token-C9W4SY9o.js} +7 -4
  117. package/dist/{github-copilot-token-BW-SEg7E.js → github-copilot-token-CiF5Iyi2.js} +6 -3
  118. package/dist/{github-copilot-token-C9IJh2Pn.js → github-copilot-token-DatTe1w-.js} +6 -3
  119. package/dist/{github-copilot-token-wCk9Fg_E.js → github-copilot-token-c9Igt3ZH.js} +6 -3
  120. package/dist/{gmail-setup-utils-CVNgLkXL.js → gmail-setup-utils-HvKMdooP.js} +4 -4
  121. package/dist/{gmail-setup-utils-CAM1vbUS.js → gmail-setup-utils-c-iF00aL.js} +3 -3
  122. package/dist/{health-format-C77hrjEQ.js → health-format-BORnJOeS.js} +106 -44
  123. package/dist/{health-format-DDYtlkB9.js → health-format-Nd0jcoqM.js} +105 -43
  124. package/dist/{help-format-CUnac_bT.js → help-format-Cd5PLwXe.js} +1 -1
  125. package/dist/{help-format-aiW76js8.js → help-format-DYBEvMOX.js} +1 -1
  126. package/dist/{hooks-cli-DsflBRxX.js → hooks-cli-3KdsbdRi.js} +53 -47
  127. package/dist/{hooks-cli-C7kctMuZ.js → hooks-cli-BThja6wK.js} +53 -47
  128. package/dist/{hooks-status-DRAVHSPg.js → hooks-status-BbIz0zmm.js} +6 -5
  129. package/dist/{hooks-status-lHWrY64E.js → hooks-status-DPJORMB6.js} +6 -5
  130. package/dist/{image--gbzucyh.js → image-BaJKrmCs.js} +12 -8
  131. package/dist/{image-ORs4LLwg.js → image-D-5pUELC.js} +13 -9
  132. package/dist/{image-DMnjYGdA.js → image-TvL5YI_W.js} +13 -9
  133. package/dist/{image-BVNytEIn.js → image-bodq5cUH.js} +13 -9
  134. package/dist/index.js +261 -109
  135. package/dist/{installs-CXGV291R.js → installs-BrOMqREO.js} +7 -6
  136. package/dist/{installs-89zeUsVn.js → installs-z69au9Te.js} +7 -6
  137. package/dist/{links-Dg90NTyF.js → links-AVB88xxH.js} +1 -1
  138. package/dist/{links-7M-j83As.js → links-DpxpaKe1.js} +1 -1
  139. package/dist/llm-slug-generator.js +18 -19
  140. package/dist/{loader-BnzQyT31.js → loader-CS-5lMQa.js} +3694 -4531
  141. package/dist/{logging-DuK6YXuK.js → logging-B3KnAryz.js} +2 -2
  142. package/dist/{logging-CNq0UUgf.js → logging-DEPo2hji.js} +1 -1
  143. package/dist/{login-qr-CJ__cE3-.js → login-qr--28WL1TN.js} +11 -5
  144. package/dist/{login-qr-BVeOFfNW.js → login-qr-4o2aC2UE.js} +9 -4
  145. package/dist/{login-qr-BJChByHH.js → login-qr-BUdeu1Sl.js} +8 -2
  146. package/dist/{login-qr-KUOtNJaQ.js → login-qr-BsYM2E1y.js} +12 -6
  147. package/dist/{logs-cli-Cm7AiarR.js → logs-cli-DDMD5w5_.js} +38 -22
  148. package/dist/{logs-cli-BWmtAsjp.js → logs-cli-DvPoVKCN.js} +38 -22
  149. package/dist/{manager-C-jXr9ks.js → manager-CXo1uqmO.js} +102 -86
  150. package/dist/{manager-CMFBuvVd.js → manager-ChW0jk7T.js} +101 -85
  151. package/dist/{manager-D2Ndphg3.js → manager-DUOe7ud6.js} +100 -85
  152. package/dist/{manager-BsdlwsL5.js → manager-PoxUqdN_.js} +98 -82
  153. package/dist/{manifest-registry-D5SiA3xq.js → manifest-registry-CVsqjgX0.js} +40 -2
  154. package/dist/{manifest-registry-DyMRD3rY.js → manifest-registry-jeAPx6AW.js} +40 -2
  155. package/dist/{message-channel-CHRYQtAM.js → message-channel-CTtrEkmW.js} +1 -1
  156. package/dist/{message-channel-BlgPSDAh.js → message-channel-DWcu72r7.js} +1 -1
  157. package/dist/{model-auth-BqjMkNFs.js → model-auth-BvODRbV0.js} +362 -35
  158. package/dist/{model-selection-DbsbOAoh.js → model-selection-B53OvWCf.js} +353 -33
  159. package/dist/{model-selection-DlV6wnTr.js → model-selection-vC82fEiP.js} +331 -30
  160. package/dist/{models-cli-DIFBrK4W.js → models-cli-DqsKsOgd.js} +66 -55
  161. package/dist/{models-cli-0XhQQbMW.js → models-cli-NV0bnh8l.js} +66 -55
  162. package/dist/{node-cli-BMUfVCSq.js → node-cli-C7YleuBk.js} +54 -44
  163. package/dist/{node-cli-DY4lzhDA.js → node-cli-CxwoHnZ6.js} +54 -44
  164. package/dist/{node-service-DQ-tiSie.js → node-service-C7f_uvx9.js} +2 -2
  165. package/dist/{node-service-u8g85nD3.js → node-service-De_WkxJe.js} +2 -2
  166. package/dist/{nodes-cli-BX6oWnLC.js → nodes-cli-BxrMVI9V.js} +25 -23
  167. package/dist/{nodes-cli-CVHzcQo2.js → nodes-cli-Clb0ocwB.js} +24 -22
  168. package/dist/{nodes-screen-DGlNPbk4.js → nodes-screen-CVL9363A.js} +48 -6
  169. package/dist/{nodes-screen-lykd2cny.js → nodes-screen-DsHJIN2I.js} +47 -5
  170. package/dist/{note-Ci08TSbV.js → note-Duiadw1g.js} +1 -1
  171. package/dist/{note-DVO1KLaW.js → note-uC6iDp4y.js} +2 -2
  172. package/dist/{onboard-channels-DTkFFbzS.js → onboard-channels-C5Iaafwb.js} +10 -10
  173. package/dist/{onboard-channels-CtDnwaF5.js → onboard-channels-C5uL3i8d.js} +11 -11
  174. package/dist/{onboard-skills-BnAcpzfX.js → onboard-skills-BFxdI1Y1.js} +1143 -112
  175. package/dist/{onboard-skills-DuoDzEmI.js → onboard-skills-DUG8Y0se.js} +1142 -111
  176. package/dist/{onboarding-DvhiiHh0.js → onboarding-ClzElK4D.js} +56 -48
  177. package/dist/{openclaw-root-93W6UrUK.js → openclaw-root-BKsZvO6K.js} +6 -2
  178. package/dist/{openclaw-root-9ILYSmJ9.js → openclaw-root-CEnmuBUN.js} +6 -2
  179. package/dist/{pairing-cli-BKJHBxwT.js → pairing-cli-BWWFZF7Q.js} +16 -16
  180. package/dist/{pairing-cli-DJHjPBwu.js → pairing-cli-BrFLxnug.js} +16 -16
  181. package/dist/{pairing-labels-xImhiJax.js → pairing-labels-C8KULWNH.js} +1 -1
  182. package/dist/{pairing-labels-CHxlh3tT.js → pairing-labels-Dt2vXyI7.js} +1 -1
  183. package/dist/{pairing-store-CO6umWFP.js → pairing-store-Dz-ArTQS.js} +3 -3
  184. package/dist/{pairing-store-BpPUNzmB.js → pairing-store-gQdv7Ruh.js} +2 -2
  185. package/dist/{path-env-Nq83EHH9.js → path-env-BRKerjt1.js} +2 -2
  186. package/dist/{path-env-CXWUFfFv.js → path-env-OJAyUeWW.js} +1 -1
  187. package/dist/paths-BZK4Ct0I.js +81 -0
  188. package/dist/paths-DWYi0R_2.js +78 -0
  189. package/dist/{paths-Bkhd_qY8.js → paths-DdKf4lHp.js} +35 -5
  190. package/dist/paths-SFzVNGbc.js +78 -0
  191. package/dist/pi-auth-json-D7hGObyW.js +12 -0
  192. package/dist/pi-auth-json-DgvHjfJy.js +8 -0
  193. package/dist/pi-auth-json-la6lnAzY.js +79 -0
  194. package/dist/pi-auth-json-p3vsMR7W.js +79 -0
  195. package/dist/{pi-embedded-C1qKCgDT.js → pi-embedded-De6SeAPs.js} +9518 -9968
  196. package/dist/{pi-embedded-helpers-DtPn5RC8.js → pi-embedded-helpers-BrUBxrE2.js} +70 -10
  197. package/dist/{pi-embedded-helpers-DhEkdWB1.js → pi-embedded-helpers-D0mqOwwq.js} +821 -128
  198. package/dist/{pi-embedded-helpers-7AjuNiiJ.js → pi-embedded-helpers-DpJb0kUk.js} +69 -9
  199. package/dist/{pi-embedded-helpers-BTkXgwJ7.js → pi-embedded-helpers-ZI1UCSRM.js} +927 -136
  200. package/dist/{pi-tools.policy-gG96mWwA.js → pi-tools.policy-z5Wd_2WN.js} +4 -4
  201. package/dist/{plugin-auto-enable-D5ye7QnB.js → plugin-auto-enable-B8mX3rX3.js} +14 -5
  202. package/dist/{plugin-auto-enable-BROgMZcf.js → plugin-auto-enable-OO0eDINB.js} +14 -5
  203. package/dist/plugin-sdk/agents/apply-patch-update.d.ts +3 -1
  204. package/dist/plugin-sdk/agents/apply-patch.d.ts +11 -3
  205. package/dist/plugin-sdk/agents/auth-profiles/profiles.d.ts +5 -0
  206. package/dist/plugin-sdk/agents/auth-profiles.d.ts +1 -1
  207. package/dist/plugin-sdk/agents/bash-process-registry.d.ts +1 -0
  208. package/dist/plugin-sdk/agents/bash-tools.exec.d.ts +26 -0
  209. package/dist/plugin-sdk/agents/current-time.d.ts +17 -0
  210. package/dist/plugin-sdk/agents/huggingface-models.d.ts +17 -0
  211. package/dist/plugin-sdk/agents/models-config.providers.d.ts +10 -0
  212. package/dist/plugin-sdk/agents/openclaw-tools.d.ts +2 -0
  213. package/dist/plugin-sdk/agents/pi-auth-json.d.ts +14 -0
  214. package/dist/plugin-sdk/agents/pi-embedded-helpers/errors.d.ts +5 -1
  215. package/dist/plugin-sdk/agents/pi-embedded-helpers.d.ts +1 -1
  216. package/dist/plugin-sdk/agents/pi-embedded-runner/google.d.ts +1 -0
  217. package/dist/plugin-sdk/agents/pi-embedded-runner/run/images.d.ts +9 -4
  218. package/dist/plugin-sdk/agents/pi-embedded-runner/run/params.d.ts +2 -0
  219. package/dist/plugin-sdk/agents/pi-embedded-runner/run/payloads.d.ts +1 -0
  220. package/dist/plugin-sdk/agents/pi-embedded-runner/run/types.d.ts +2 -0
  221. package/dist/plugin-sdk/agents/pi-embedded-runner/types.d.ts +15 -0
  222. package/dist/plugin-sdk/agents/pi-embedded-subscribe.handlers.tools.d.ts +1 -1
  223. package/dist/plugin-sdk/agents/pi-embedded-subscribe.handlers.types.d.ts +2 -0
  224. package/dist/plugin-sdk/agents/pi-embedded-subscribe.types.d.ts +2 -0
  225. package/dist/plugin-sdk/agents/pi-tools.read.d.ts +8 -3
  226. package/dist/plugin-sdk/agents/sandbox/constants.d.ts +1 -1
  227. package/dist/plugin-sdk/agents/sandbox/docker.d.ts +14 -3
  228. package/dist/plugin-sdk/agents/sandbox/fs-bridge.d.ts +56 -0
  229. package/dist/plugin-sdk/agents/sandbox/types.d.ts +2 -0
  230. package/dist/plugin-sdk/agents/session-tool-result-guard-wrapper.d.ts +2 -0
  231. package/dist/plugin-sdk/agents/session-tool-result-guard.d.ts +4 -0
  232. package/dist/plugin-sdk/agents/subagent-registry.d.ts +3 -1
  233. package/dist/plugin-sdk/agents/tools/agent-step.d.ts +3 -0
  234. package/dist/plugin-sdk/agents/tools/browser-tool.schema.d.ts +2 -2
  235. package/dist/plugin-sdk/agents/tools/common.d.ts +4 -0
  236. package/dist/plugin-sdk/agents/tools/image-tool.d.ts +9 -1
  237. package/dist/plugin-sdk/agents/tools/web-search.d.ts +10 -1
  238. package/dist/plugin-sdk/agents/usage.d.ts +1 -0
  239. package/dist/plugin-sdk/auto-reply/reply/commands-status.d.ts +1 -0
  240. package/dist/plugin-sdk/auto-reply/reply/get-reply-directives.d.ts +1 -0
  241. package/dist/plugin-sdk/auto-reply/reply/memory-flush.d.ts +2 -2
  242. package/dist/plugin-sdk/auto-reply/reply/mentions.d.ts +1 -0
  243. package/dist/plugin-sdk/auto-reply/reply/model-selection.d.ts +3 -0
  244. package/dist/plugin-sdk/auto-reply/reply/reply-reference.d.ts +1 -1
  245. package/dist/plugin-sdk/auto-reply/reply/session-run-accounting.d.ts +11 -0
  246. package/dist/plugin-sdk/auto-reply/reply/session-usage.d.ts +8 -0
  247. package/dist/plugin-sdk/auto-reply/status.d.ts +2 -0
  248. package/dist/plugin-sdk/auto-reply/templating.d.ts +3 -0
  249. package/dist/plugin-sdk/auto-reply/thinking.d.ts +1 -1
  250. package/dist/plugin-sdk/auto-reply/types.d.ts +2 -0
  251. package/dist/plugin-sdk/browser/cdp.helpers.d.ts +2 -1
  252. package/dist/plugin-sdk/browser/client-actions-core.d.ts +1 -0
  253. package/dist/plugin-sdk/browser/control-auth.d.ts +13 -0
  254. package/dist/plugin-sdk/browser/pw-ai.d.ts +1 -1
  255. package/dist/plugin-sdk/browser/pw-session.d.ts +25 -0
  256. package/dist/plugin-sdk/browser/pw-tools-core.interactions.d.ts +2 -0
  257. package/dist/plugin-sdk/browser/routes/dispatcher.d.ts +1 -0
  258. package/dist/plugin-sdk/browser/routes/types.d.ts +5 -0
  259. package/dist/plugin-sdk/channels/plugins/onboarding/signal.d.ts +1 -0
  260. package/dist/plugin-sdk/channels/registry.d.ts +2 -2
  261. package/dist/plugin-sdk/cli/nodes-camera.d.ts +8 -2
  262. package/dist/plugin-sdk/cli/prompt.d.ts +1 -0
  263. package/dist/plugin-sdk/commands/agent/types.d.ts +2 -0
  264. package/dist/plugin-sdk/commands/onboard-helpers.d.ts +1 -0
  265. package/dist/plugin-sdk/commands/onboard-types.d.ts +9 -1
  266. package/dist/plugin-sdk/commands/signal-install.d.ts +20 -0
  267. package/dist/plugin-sdk/config/config.d.ts +1 -1
  268. package/dist/plugin-sdk/config/group-policy.d.ts +3 -0
  269. package/dist/plugin-sdk/config/merge-patch.d.ts +1 -0
  270. package/dist/plugin-sdk/config/sessions/paths.d.ts +14 -4
  271. package/dist/plugin-sdk/config/sessions/store.d.ts +8 -0
  272. package/dist/plugin-sdk/config/sessions/types.d.ts +8 -0
  273. package/dist/plugin-sdk/config/types.agents.d.ts +2 -0
  274. package/dist/plugin-sdk/config/types.channels.d.ts +2 -0
  275. package/dist/plugin-sdk/config/types.d.ts +1 -0
  276. package/dist/plugin-sdk/config/types.discord.d.ts +5 -0
  277. package/dist/plugin-sdk/config/types.gateway.d.ts +35 -0
  278. package/dist/plugin-sdk/config/types.hooks.d.ts +23 -1
  279. package/dist/plugin-sdk/config/types.irc.d.ts +96 -0
  280. package/dist/plugin-sdk/config/types.memory.d.ts +2 -0
  281. package/dist/plugin-sdk/config/types.openclaw.d.ts +6 -0
  282. package/dist/plugin-sdk/config/types.queue.d.ts +1 -0
  283. package/dist/plugin-sdk/config/types.slack.d.ts +2 -0
  284. package/dist/plugin-sdk/config/types.telegram.d.ts +2 -0
  285. package/dist/plugin-sdk/config/validation.d.ts +20 -0
  286. package/dist/plugin-sdk/config/zod-schema.agents.d.ts +1 -0
  287. package/dist/plugin-sdk/config/zod-schema.core.d.ts +2 -0
  288. package/dist/plugin-sdk/config/zod-schema.d.ts +193 -2
  289. package/dist/plugin-sdk/config/zod-schema.hooks.d.ts +3 -2
  290. package/dist/plugin-sdk/config/zod-schema.providers-core.d.ts +378 -0
  291. package/dist/plugin-sdk/config/zod-schema.providers.d.ts +176 -0
  292. package/dist/plugin-sdk/config/zod-schema.sensitive.d.ts +2 -0
  293. package/dist/plugin-sdk/config/zod-schema.session.d.ts +1 -0
  294. package/dist/plugin-sdk/cron/service/jobs.d.ts +8 -0
  295. package/dist/plugin-sdk/cron/service/state.d.ts +1 -0
  296. package/dist/plugin-sdk/cron/types.d.ts +2 -0
  297. package/dist/plugin-sdk/discord/monitor/allow-list.d.ts +15 -0
  298. package/dist/plugin-sdk/discord/send.types.d.ts +5 -0
  299. package/dist/plugin-sdk/gateway/auth-rate-limit.d.ts +59 -0
  300. package/dist/plugin-sdk/gateway/auth.d.ts +47 -0
  301. package/dist/plugin-sdk/gateway/net.d.ts +5 -0
  302. package/dist/plugin-sdk/gateway/protocol/index.d.ts +7 -7
  303. package/dist/plugin-sdk/gateway/protocol/schema/agent.d.ts +7 -1
  304. package/dist/plugin-sdk/gateway/protocol/schema/channels.d.ts +21 -0
  305. package/dist/plugin-sdk/gateway/protocol/schema/types.d.ts +3 -1
  306. package/dist/plugin-sdk/gateway/session-utils.fs.d.ts +3 -1
  307. package/dist/plugin-sdk/gateway/session-utils.types.d.ts +1 -0
  308. package/dist/plugin-sdk/imessage/send.d.ts +12 -0
  309. package/dist/plugin-sdk/index.js +2147 -900
  310. package/dist/plugin-sdk/infra/binaries.d.ts +3 -0
  311. package/dist/plugin-sdk/infra/brew.d.ts +8 -0
  312. package/dist/plugin-sdk/infra/heartbeat-active-hours.d.ts +5 -0
  313. package/dist/plugin-sdk/infra/heartbeat-runner.d.ts +1 -0
  314. package/dist/plugin-sdk/infra/heartbeat-wake.d.ts +8 -1
  315. package/dist/plugin-sdk/infra/net/fetch-guard.d.ts +1 -0
  316. package/dist/plugin-sdk/infra/net/ssrf.d.ts +1 -0
  317. package/dist/plugin-sdk/infra/outbound/message.d.ts +2 -0
  318. package/dist/plugin-sdk/infra/outbound/outbound-send-service.d.ts +2 -0
  319. package/dist/plugin-sdk/infra/session-cost-usage.d.ts +3 -0
  320. package/dist/plugin-sdk/infra/tailscale.d.ts +34 -0
  321. package/dist/plugin-sdk/infra/tmp-openclaw-dir.d.ts +10 -0
  322. package/dist/plugin-sdk/logging/console.d.ts +4 -0
  323. package/dist/plugin-sdk/logging/logger.d.ts +1 -1
  324. package/dist/plugin-sdk/logging/state.d.ts +1 -0
  325. package/dist/plugin-sdk/logging.d.ts +2 -2
  326. package/dist/plugin-sdk/markdown/ir.d.ts +1 -1
  327. package/dist/plugin-sdk/markdown/whatsapp.d.ts +14 -0
  328. package/dist/plugin-sdk/media/input-files.d.ts +5 -0
  329. package/dist/plugin-sdk/media/store.d.ts +10 -0
  330. package/dist/plugin-sdk/media-understanding/audio-preflight.d.ts +16 -0
  331. package/dist/plugin-sdk/media-understanding/types.d.ts +1 -0
  332. package/dist/plugin-sdk/memory/backend-config.d.ts +2 -1
  333. package/dist/plugin-sdk/memory/embedding-chunk-limits.d.ts +3 -0
  334. package/dist/plugin-sdk/memory/embedding-input-limits.d.ts +2 -0
  335. package/dist/plugin-sdk/memory/embedding-model-limits.d.ts +2 -0
  336. package/dist/plugin-sdk/memory/embeddings.d.ts +1 -0
  337. package/dist/plugin-sdk/memory/internal.d.ts +11 -0
  338. package/dist/plugin-sdk/memory/manager.d.ts +0 -6
  339. package/dist/plugin-sdk/memory/qmd-manager.d.ts +2 -0
  340. package/dist/plugin-sdk/memory/qmd-query-parser.d.ts +8 -0
  341. package/dist/plugin-sdk/memory/session-files.d.ts +2 -0
  342. package/dist/plugin-sdk/process/command-queue.d.ts +16 -0
  343. package/dist/plugin-sdk/providers/github-copilot-token.d.ts +3 -0
  344. package/dist/plugin-sdk/routing/resolve-route.d.ts +3 -1
  345. package/dist/plugin-sdk/security/external-content.d.ts +1 -1
  346. package/dist/plugin-sdk/security/secret-equal.d.ts +1 -0
  347. package/dist/plugin-sdk/sessions/input-provenance.d.ts +16 -0
  348. package/dist/plugin-sdk/signal/monitor/event-handler.types.d.ts +8 -0
  349. package/dist/plugin-sdk/signal/monitor/mentions.d.ts +2 -0
  350. package/dist/plugin-sdk/slack/monitor/commands.d.ts +5 -0
  351. package/dist/plugin-sdk/slack/monitor/media.d.ts +21 -0
  352. package/dist/plugin-sdk/slack/types.d.ts +1 -0
  353. package/dist/plugin-sdk/telegram/bot-message-context.d.ts +2 -1
  354. package/dist/plugin-sdk/telegram/fetch.d.ts +1 -0
  355. package/dist/plugin-sdk/telegram/monitor.d.ts +1 -0
  356. package/dist/plugin-sdk/telegram/send.d.ts +3 -0
  357. package/dist/plugin-sdk/tts/tts.d.ts +2 -2
  358. package/dist/plugin-sdk/utils/fetch-timeout.d.ts +2 -0
  359. package/dist/plugin-sdk/web/media.d.ts +12 -2
  360. package/dist/{plugins-CQw3z3Nw.js → plugins-CTjLu-z-.js} +4 -4
  361. package/dist/{plugins-B7F0Ly9G.js → plugins-CxrdL_IZ.js} +3 -3
  362. package/dist/{plugins-cli-CJ74eHvr.js → plugins-cli-CbX97Kvt.js} +259 -49
  363. package/dist/{plugins-cli-ubDwUAzK.js → plugins-cli-Dn9OeO53.js} +257 -47
  364. package/dist/{ports-kYsTYQdA.js → ports-C8YYHVlc.js} +2 -2
  365. package/dist/{program-1bQ15ivo.js → program-D-mNC0It.js} +86 -83
  366. package/dist/{progress-Da1ehW-x.js → progress-COHv-uNT.js} +1 -1
  367. package/dist/{progress-COzt9PNY.js → progress-DZb6yPcJ.js} +1 -1
  368. package/dist/{prompt-style-Dc0C5HC9.js → prompt-style-Cf1r1L6k.js} +1 -1
  369. package/dist/{prompt-style-DjZDxcFg.js → prompt-style-lSlXMhsd.js} +1 -1
  370. package/dist/{pw-ai-CQ4-gUNR.js → pw-ai-6GzTgK5g.js} +205 -32
  371. package/dist/{pw-ai-1NN0FrJb.js → pw-ai-C8YhJRaI.js} +207 -32
  372. package/dist/{pw-ai-qEMUq5Mt.js → pw-ai-CKGenizV.js} +203 -29
  373. package/dist/{pw-ai-IOqEXO1O.js → pw-ai-D7devT89.js} +206 -32
  374. package/dist/{qmd-manager-CEwp3el1.js → qmd-manager-CQzWovq-.js} +71 -90
  375. package/dist/{qmd-manager-D6N3qvQ5.js → qmd-manager-Cs8RJVQp.js} +73 -90
  376. package/dist/{qmd-manager-C48QzrRe.js → qmd-manager-DdgrQ2kc.js} +71 -88
  377. package/dist/{qmd-manager-DaUqCKB_.js → qmd-manager-dyIoOvKl.js} +73 -90
  378. package/dist/{register.subclis-Cm-VJ5nP.js → register.subclis-ifHtmF3e.js} +29 -29
  379. package/dist/{reply-CBs4e9Rm.js → reply-VIHqsQ-k.js} +7906 -8743
  380. package/dist/{routes-9ygR0GOk.js → routes-CaCvio4Q.js} +36 -15
  381. package/dist/{routes-BrWrBk2R.js → routes-Cpfxk96k.js} +36 -14
  382. package/dist/{rpc-Cjuz2Gv1.js → rpc-BhB01Bhj.js} +3 -3
  383. package/dist/{rpc-DhkLVY5H.js → rpc-C5WsS_Ne.js} +3 -3
  384. package/dist/{run-main-BlZ5l-X9.js → run-main-DVy6KJTe.js} +88 -85
  385. package/dist/runner-B7CKBC80.js +1800 -0
  386. package/dist/runner-BEy5ZGFv.js +1901 -0
  387. package/dist/runner-Bv0BmJPF.js +1800 -0
  388. package/dist/runner-ChqVEgPx.js +1901 -0
  389. package/dist/{sandbox-qt49csTr.js → sandbox-BAChxjC5.js} +627 -157
  390. package/dist/{sandbox-CPZiaKcS.js → sandbox-DNHDwHw8.js} +628 -158
  391. package/dist/{sandbox-cli-C6_iNuqO.js → sandbox-cli-9oq67QEg.js} +22 -22
  392. package/dist/{sandbox-cli-C_wK-KAE.js → sandbox-cli-BiNq9yUe.js} +22 -22
  393. package/dist/{security-cli-CTTD1vms.js → security-cli-CRg03hvq.js} +28 -28
  394. package/dist/{security-cli-DRpGF2Yc.js → security-cli-LmBBHnmh.js} +28 -28
  395. package/dist/{server-context-lyNcqJYD.js → server-context-FwqBRH3K.js} +10 -10
  396. package/dist/{server-context-39mkstUs.js → server-context-RY7lRaxl.js} +9 -9
  397. package/dist/{server-node-events-V_G9BRRw.js → server-node-events-BbHOZX3O.js} +48 -43
  398. package/dist/{server-node-events-o9G18PaE.js → server-node-events-CngNLVL-.js} +50 -45
  399. package/dist/{service-DOlJdIqe.js → service-BnqdBTAK.js} +8 -4
  400. package/dist/{service-DDPRbf8a.js → service-DZN7KRok.js} +8 -4
  401. package/dist/{service-audit-VDRrWefh.js → service-audit-0Eil3ISN.js} +4 -4
  402. package/dist/{service-audit-CVy00Ze_.js → service-audit-B8KIOe8A.js} +4 -4
  403. package/dist/{session-cost-usage-CcCEQNuc.js → session-cost-usage-B-tyjp76.js} +14 -14
  404. package/dist/{session-cost-usage-PvyVZz-g.js → session-cost-usage-BYUb7fov.js} +14 -14
  405. package/dist/{shared-BnpC3wMU.js → shared-BCdNboU1.js} +3 -3
  406. package/dist/{shared-CagUDdmp.js → shared-CsAwU6-q.js} +3 -3
  407. package/dist/{shared-BDk_zC9p.js → shared-Csn6DLBA.js} +5 -5
  408. package/dist/{shared-C92wo-6f.js → shared-DEanAgja.js} +4 -4
  409. package/dist/{skill-scanner-C_fQzVDu.js → skill-scanner-BrGkh5K7.js} +1 -1
  410. package/dist/{skill-scanner-DrVEHfC6.js → skill-scanner-CucvxYhu.js} +1 -1
  411. package/dist/{skills-Ccsv3IQq.js → skills-CE7by2IF.js} +151 -8
  412. package/dist/{skills-_eKGrw9z.js → skills-Dz15dAM4.js} +152 -9
  413. package/dist/{skills-cli-DqvLjooh.js → skills-cli-B5b75pDK.js} +13 -13
  414. package/dist/{skills-cli-DUncybht.js → skills-cli-CbCDrYwp.js} +13 -13
  415. package/dist/{skills-status-Cp2ZFhIx.js → skills-status-B99Us6yS.js} +2 -2
  416. package/dist/{skills-status-Ck0CCFZG.js → skills-status-ChM7JE47.js} +3 -3
  417. package/dist/{sqlite-DODNHWJb.js → sqlite-2UsPaJz5.js} +97 -2
  418. package/dist/{sqlite-cSdsHVEw.js → sqlite-CASnHrgX.js} +97 -1
  419. package/dist/{sqlite-Bwo2rASR.js → sqlite-CVWiMkGu.js} +97 -1
  420. package/dist/{sqlite-CpqIbY4-.js → sqlite-CcIWkGaM.js} +97 -1
  421. package/dist/{status-Bmx9_1C7.js → status-CKuX1-zb.js} +3 -3
  422. package/dist/{status-CBGgwlTW.js → status-Cm4q6o-I.js} +57 -49
  423. package/dist/{status-DkJgtvSz.js → status-DD2iqGc9.js} +4 -4
  424. package/dist/{subsystem-DPnkvS73.js → subsystem-DHfJG4gk.js} +73 -20
  425. package/dist/{system-cli-9fQ1uLiz.js → system-cli-BVJDR474.js} +87 -15
  426. package/dist/{system-cli-Gq8OWHFg.js → system-cli-C3Y_9VpI.js} +88 -16
  427. package/dist/{systemd-Pa7LURHB.js → systemd-DxddcFsa.js} +3 -3
  428. package/dist/{systemd-hints-zi4ohCOY.js → systemd-hints-BVLopJ9O.js} +1 -1
  429. package/dist/{systemd-linger-CDo2UbHM.js → systemd-linger-BThjV1Sr.js} +2 -2
  430. package/dist/{systemd-linger-6_naJcJp.js → systemd-linger-D3Va1Cv7.js} +2 -2
  431. package/dist/{systemd-BEWwfwn0.js → systemd-s3S2HVog.js} +3 -3
  432. package/dist/{table-Bb9gAVIp.js → table-BIk8Aan_.js} +2 -2
  433. package/dist/{table-cCoGqLsk.js → table-Bvka_vkc.js} +1 -1
  434. package/dist/{tool-display-DUVhO36P.js → tool-display-DbdMQFZx.js} +2 -2
  435. package/dist/{tool-display-DNOVCI6J.js → tool-display-kpW5Hg2z.js} +2 -2
  436. package/dist/{tui-DDVqLwqT.js → tui-B40Z2jMa.js} +120 -14
  437. package/dist/{tui-cli-CurbazQf.js → tui-cli-Bwa6K7xR.js} +28 -28
  438. package/dist/{tui-cli-BeN2K38I.js → tui-cli-DD6g7uZb.js} +27 -27
  439. package/dist/{tui-B9zLJxf6.js → tui-lFMZUnx6.js} +121 -13
  440. package/dist/{update-Ct9sqJC_.js → update-Bos8PPCG.js} +3 -3
  441. package/dist/{update--i077azM.js → update-Cg8MtrEr.js} +3 -3
  442. package/dist/{update-cli-CT5W0kpw.js → update-cli-CC-wTeje.js} +92 -73
  443. package/dist/{update-cli-C87lNK1S.js → update-cli-CULnXFL_.js} +91 -72
  444. package/dist/{update-runner-BIttRDyV.js → update-runner-BaLsla0c.js} +11 -11
  445. package/dist/{update-runner-xbeVkAD9.js → update-runner-Dbsdl5AU.js} +10 -10
  446. package/dist/{utils-Dk86IbEs.js → utils-BLJAc3ZV.js} +1 -1
  447. package/dist/{utils-BTaR--Ln.js → utils-BtIMES3N.js} +1 -1
  448. package/dist/{webhooks-cli-Db3zyJaw.js → webhooks-cli-ClHLUu_j.js} +21 -13
  449. package/dist/{webhooks-cli-DUUa8gVY.js → webhooks-cli-DVXr2uyN.js} +21 -13
  450. package/dist/{widearea-dns-BgYasW6m.js → widearea-dns-C4RnIR9O.js} +3 -3
  451. package/dist/{widearea-dns-CMIG6-74.js → widearea-dns-Ypwgjpsr.js} +3 -3
  452. package/dist/{ws-C0k_dhCP.js → ws-BcJt4pcg.js} +24 -2
  453. package/dist/{ws-DtDKpbLR.js → ws-MC-rTJLe.js} +24 -2
  454. package/dist/{ws-log-cMNgAyLy.js → ws-log-WrJ4QYu7.js} +1 -1
  455. package/dist/{ws-log-C6vm_XMA.js → ws-log-lip4ETlm.js} +2 -2
  456. package/dist/{wsl-rfIr_Sde.js → wsl-BvTIzy-8.js} +5 -3
  457. package/docs/assets/install-script.svg +1 -0
  458. package/docs/automation/hooks.md +1 -38
  459. package/docs/automation/webhook.md +52 -2
  460. package/docs/channels/discord.md +389 -381
  461. package/docs/channels/grammy.md +1 -1
  462. package/docs/channels/imessage.md +229 -218
  463. package/docs/channels/index.md +1 -0
  464. package/docs/channels/irc.md +234 -0
  465. package/docs/channels/msteams.md +2 -0
  466. package/docs/channels/pairing.md +1 -1
  467. package/docs/channels/slack.md +295 -415
  468. package/docs/channels/telegram.md +397 -460
  469. package/docs/channels/whatsapp.md +338 -310
  470. package/docs/ci.md +0 -12
  471. package/docs/cli/hooks.md +1 -14
  472. package/docs/cli/index.md +6 -1
  473. package/docs/cli/logs.md +4 -0
  474. package/docs/cli/onboard.md +33 -0
  475. package/docs/cli/plugins.md +20 -1
  476. package/docs/cli/security.md +2 -0
  477. package/docs/concepts/architecture.md +0 -16
  478. package/docs/concepts/memory.md +7 -4
  479. package/docs/concepts/model-providers.md +27 -0
  480. package/docs/concepts/session-tool.md +1 -0
  481. package/docs/concepts/system-prompt.md +13 -0
  482. package/docs/docs.json +18 -12
  483. package/docs/experiments/plans/browser-evaluate-cdp-refactor.md +229 -0
  484. package/docs/gateway/configuration-examples.md +9 -2
  485. package/docs/gateway/configuration-reference.md +2345 -0
  486. package/docs/gateway/configuration.md +338 -3297
  487. package/docs/gateway/index.md +162 -238
  488. package/docs/gateway/openai-http-api.md +1 -0
  489. package/docs/gateway/openresponses-http-api.md +16 -0
  490. package/docs/gateway/remote-gateway-readme.md +0 -16
  491. package/docs/gateway/security/index.md +4 -16
  492. package/docs/gateway/tools-invoke-http-api.md +26 -1
  493. package/docs/help/faq.md +9 -0
  494. package/docs/help/testing.md +11 -0
  495. package/docs/install/docker.md +18 -0
  496. package/docs/install/hetzner.md +21 -0
  497. package/docs/install/installer.md +20 -0
  498. package/docs/nodes/audio.md +19 -0
  499. package/docs/platforms/mac/release.md +7 -7
  500. package/docs/providers/glm.md +3 -3
  501. package/docs/providers/huggingface.md +209 -0
  502. package/docs/providers/index.md +3 -0
  503. package/docs/providers/litellm.md +153 -0
  504. package/docs/providers/together.md +2 -2
  505. package/docs/providers/vllm.md +92 -0
  506. package/docs/providers/zai.md +2 -2
  507. package/docs/reference/credits.md +4 -28
  508. package/docs/reference/test.md +2 -1
  509. package/docs/reference/token-use.md +1 -1
  510. package/docs/reference/transcript-hygiene.md +18 -0
  511. package/docs/start/getting-started.md +5 -0
  512. package/docs/start/onboarding-overview.md +51 -0
  513. package/docs/start/onboarding.md +1 -0
  514. package/docs/start/openclaw.md +0 -16
  515. package/docs/start/wizard-cli-automation.md +17 -0
  516. package/docs/start/wizard-cli-reference.md +12 -0
  517. package/docs/start/wizard.md +3 -1
  518. package/docs/tools/browser.md +6 -0
  519. package/docs/zh-CN/automation/hooks.md +1 -38
  520. package/docs/zh-CN/cli/hooks.md +1 -14
  521. package/extensions/bluebubbles/package.json +1 -1
  522. package/extensions/bluebubbles/src/monitor.test.ts +40 -28
  523. package/extensions/bluebubbles/src/monitor.ts +0 -4
  524. package/extensions/copilot-proxy/package.json +1 -1
  525. package/extensions/diagnostics-otel/package.json +10 -10
  526. package/extensions/discord/package.json +1 -1
  527. package/extensions/feishu/package.json +2 -5
  528. package/extensions/feishu/src/bot.checkBotMentioned.test.ts +64 -0
  529. package/extensions/feishu/src/bot.test.ts +265 -0
  530. package/extensions/feishu/src/bot.ts +73 -18
  531. package/extensions/feishu/src/channel.test.ts +48 -0
  532. package/extensions/feishu/src/channel.ts +1 -3
  533. package/extensions/feishu/src/config-schema.ts +6 -0
  534. package/extensions/feishu/src/docx.ts +14 -4
  535. package/extensions/feishu/src/media.test.ts +151 -0
  536. package/extensions/feishu/src/media.ts +27 -13
  537. package/extensions/feishu/src/reply-dispatcher.test.ts +116 -0
  538. package/extensions/feishu/src/reply-dispatcher.ts +124 -67
  539. package/extensions/feishu/src/streaming-card.ts +223 -0
  540. package/extensions/feishu/src/targets.test.ts +16 -0
  541. package/extensions/feishu/src/targets.ts +1 -1
  542. package/extensions/google-antigravity-auth/package.json +1 -1
  543. package/extensions/google-gemini-cli-auth/oauth.test.ts +4 -1
  544. package/extensions/google-gemini-cli-auth/package.json +1 -1
  545. package/extensions/googlechat/package.json +1 -1
  546. package/extensions/googlechat/src/channel.ts +3 -20
  547. package/extensions/googlechat/src/resolve-target.test.ts +138 -0
  548. package/extensions/imessage/package.json +1 -1
  549. package/extensions/irc/index.ts +17 -0
  550. package/extensions/irc/openclaw.plugin.json +9 -0
  551. package/extensions/irc/package.json +14 -0
  552. package/extensions/irc/src/accounts.ts +268 -0
  553. package/extensions/irc/src/channel.ts +367 -0
  554. package/extensions/irc/src/client.test.ts +43 -0
  555. package/extensions/irc/src/client.ts +439 -0
  556. package/extensions/irc/src/config-schema.test.ts +27 -0
  557. package/extensions/irc/src/config-schema.ts +97 -0
  558. package/extensions/irc/src/control-chars.ts +22 -0
  559. package/extensions/irc/src/inbound.ts +334 -0
  560. package/extensions/irc/src/monitor.test.ts +43 -0
  561. package/extensions/irc/src/monitor.ts +158 -0
  562. package/extensions/irc/src/normalize.test.ts +46 -0
  563. package/extensions/irc/src/normalize.ts +117 -0
  564. package/extensions/irc/src/onboarding.test.ts +118 -0
  565. package/extensions/irc/src/onboarding.ts +479 -0
  566. package/extensions/irc/src/policy.test.ts +132 -0
  567. package/extensions/irc/src/policy.ts +157 -0
  568. package/extensions/irc/src/probe.ts +64 -0
  569. package/extensions/irc/src/protocol.test.ts +44 -0
  570. package/extensions/irc/src/protocol.ts +169 -0
  571. package/extensions/irc/src/runtime.ts +14 -0
  572. package/extensions/irc/src/send.ts +99 -0
  573. package/extensions/irc/src/types.ts +94 -0
  574. package/extensions/line/package.json +1 -1
  575. package/extensions/llm-task/package.json +1 -1
  576. package/extensions/lobster/package.json +1 -1
  577. package/extensions/matrix/CHANGELOG.md +6 -0
  578. package/extensions/matrix/node_modules/.bin/markdown-it +2 -2
  579. package/extensions/matrix/node_modules/.bin/markdown-it.CMD +2 -2
  580. package/extensions/matrix/node_modules/.bin/markdown-it.ps1 +2 -2
  581. package/extensions/matrix/package.json +2 -2
  582. package/extensions/matrix/src/matrix/monitor/media.ts +4 -2
  583. package/extensions/mattermost/package.json +1 -1
  584. package/extensions/memory-core/package.json +1 -1
  585. package/extensions/memory-lancedb/index.ts +6 -2
  586. package/extensions/memory-lancedb/node_modules/.bin/openai +2 -2
  587. package/extensions/memory-lancedb/node_modules/.bin/openai.CMD +2 -2
  588. package/extensions/memory-lancedb/node_modules/.bin/openai.ps1 +2 -2
  589. package/extensions/memory-lancedb/package.json +2 -2
  590. package/extensions/minimax-portal-auth/index.ts +7 -5
  591. package/extensions/minimax-portal-auth/package.json +1 -1
  592. package/extensions/msteams/CHANGELOG.md +6 -0
  593. package/extensions/msteams/package.json +1 -1
  594. package/extensions/msteams/src/media-helpers.test.ts +9 -0
  595. package/extensions/msteams/src/media-helpers.ts +15 -1
  596. package/extensions/msteams/src/mentions.test.ts +235 -0
  597. package/extensions/msteams/src/mentions.ts +114 -0
  598. package/extensions/msteams/src/messenger.test.ts +81 -1
  599. package/extensions/msteams/src/messenger.ts +11 -2
  600. package/extensions/nextcloud-talk/package.json +1 -1
  601. package/extensions/nostr/CHANGELOG.md +6 -0
  602. package/extensions/nostr/package.json +2 -2
  603. package/extensions/open-prose/package.json +1 -1
  604. package/extensions/signal/package.json +1 -1
  605. package/extensions/slack/package.json +1 -1
  606. package/extensions/telegram/package.json +1 -1
  607. package/extensions/telegram/src/channel.ts +1 -0
  608. package/extensions/tlon/package.json +1 -1
  609. package/extensions/twitch/CHANGELOG.md +6 -0
  610. package/extensions/twitch/package.json +1 -1
  611. package/extensions/twitch/src/onboarding.test.ts +5 -0
  612. package/extensions/twitch/src/outbound.test.ts +17 -6
  613. package/extensions/twitch/src/outbound.ts +12 -10
  614. package/extensions/voice-call/CHANGELOG.md +6 -0
  615. package/extensions/voice-call/package.json +1 -1
  616. package/extensions/voice-call/src/media-stream.ts +7 -1
  617. package/extensions/voice-call/src/providers/twilio.test.ts +5 -3
  618. package/extensions/voice-call/src/providers/twilio.ts +12 -1
  619. package/extensions/whatsapp/package.json +1 -1
  620. package/extensions/whatsapp/src/channel.ts +6 -16
  621. package/extensions/whatsapp/src/resolve-target.test.ts +154 -0
  622. package/extensions/zalo/CHANGELOG.md +6 -0
  623. package/extensions/zalo/package.json +1 -1
  624. package/extensions/zalouser/CHANGELOG.md +6 -0
  625. package/extensions/zalouser/package.json +1 -1
  626. package/package.json +26 -22
  627. package/dist/auth-BcNHFK-i.js +0 -184
  628. package/dist/auth-DkjJ3pm-.js +0 -184
  629. package/dist/boolean-M-esQJt6.js +0 -30
  630. package/dist/bundled/soul-evil/HOOK.md +0 -71
  631. package/dist/bundled/soul-evil/handler.js +0 -194
  632. package/dist/cli-B631__JU.js +0 -89
  633. package/dist/cli-DVhCVZZ6.js +0 -86
  634. package/dist/config-CI7EpvlP.js +0 -15
  635. package/dist/constants-DuoCkWRh.js +0 -65
  636. package/dist/control-ui/assets/index-CnB9IO4a.js.map +0 -1
  637. package/dist/control-ui/assets/index-DWhx-9JL.css +0 -1
  638. package/dist/date-time-c6HTX6IW.js +0 -187
  639. package/dist/frontmatter-xwTm0734.js +0 -105
  640. package/dist/parse-DqAvJRIf.js +0 -23
  641. package/dist/parse-duration-De_tAQSe.js +0 -24
  642. package/dist/parse-timeout-DV8NQQWk.js +0 -16
  643. package/dist/paths-IivnSNkP.js +0 -51
  644. package/dist/paths-MnZaxqPw.js +0 -48
  645. package/dist/paths-uoGO2aiO.js +0 -48
  646. package/dist/pi-model-discovery-DzFOAbQt.js +0 -20
  647. package/dist/plugin-sdk/tui/tui-formatters.d.ts +0 -31
  648. package/dist/session-key-nXYQSv-a.js +0 -167
  649. package/dist/tailscale-DU6DgqVy.js +0 -225
  650. package/dist/tailscale-DzJUWmKf.js +0 -252
  651. package/dist/utils-dp_OM900.js +0 -476
  652. package/docs/hooks/soul-evil.md +0 -69
  653. package/docs/zh-CN/hooks/soul-evil.md +0 -72
  654. package/skills/local-places/SERVER_README.md +0 -101
  655. package/skills/local-places/SKILL.md +0 -102
  656. package/skills/local-places/pyproject.toml +0 -21
  657. package/skills/local-places/src/local_places/__init__.py +0 -2
  658. package/skills/local-places/src/local_places/google_places.py +0 -314
  659. package/skills/local-places/src/local_places/main.py +0 -65
  660. package/skills/local-places/src/local_places/schemas.py +0 -107
  661. /package/dist/{archive-CXhvR9nU.js → archive-aSMUcOc6.js} +0 -0
  662. /package/dist/{archive-D0z3LZDK.js → archive-beaSfAzA.js} +0 -0
  663. /package/dist/{brew-BIrWdDps.js → brew-DlQQMJ3n.js} +0 -0
  664. /package/dist/{brew-B7YK4ZoL.js → brew-ROHf0-Xp.js} +0 -0
  665. /package/dist/{cli-utils-PlLcDZlM.js → cli-utils-CRhVAaLV.js} +0 -0
  666. /package/dist/{cli-utils-R-ECs5cY.js → cli-utils-CodyYLHe.js} +0 -0
  667. /package/dist/{command-format-BUxhT1xL.js → command-format-qUVxzqYm.js} +0 -0
  668. /package/dist/{constants-CNTiY-ZN.js → constants-BvQ6S8j5.js} +0 -0
  669. /package/dist/{errors-D3tYRJWG.js → errors-B91HIDPD.js} +0 -0
  670. /package/dist/{errors-B0eT3jVv.js → errors-Bv81hF2P.js} +0 -0
  671. /package/dist/{errors-x4NYs-1P.js → errors-Cojm0Kl7.js} +0 -0
  672. /package/dist/{format-CaxeRcue.js → format-CL8VOhxX.js} +0 -0
  673. /package/dist/{format-DLOJPZmo.js → format-DcfK-dwd.js} +0 -0
  674. /package/dist/{format-duration-CEmFWLyX.js → format-duration--hQihAvf.js} +0 -0
  675. /package/dist/{format-duration-DCXJx2ba.js → format-duration-84n6_DgO.js} +0 -0
  676. /package/dist/{format-relative-79_Y1n2Y.js → format-relative-Cywx6ldk.js} +0 -0
  677. /package/dist/{format-relative-Db7eqEu8.js → format-relative-cegC_FF5.js} +0 -0
  678. /package/dist/{helpers-CQI-5xS9.js → helpers-8O7IVGO-.js} +0 -0
  679. /package/dist/{helpers-DdwqKAAS.js → helpers-ByYj2Aq5.js} +0 -0
  680. /package/dist/{helpers-CRzoyyXS.js → helpers-CUVSCDJV.js} +0 -0
  681. /package/dist/{helpers-C89IG08W.js → helpers-HyeZXsnu.js} +0 -0
  682. /package/dist/{is-main-qJ675wPV.js → is-main-B9A8S9YC.js} +0 -0
  683. /package/dist/{is-main-WWuz28Ip.js → is-main-BWoXGz7p.js} +0 -0
  684. /package/dist/{logging-BzvBIA3Y.js → logging-D-Jq2wIo.js} +0 -0
  685. /package/dist/{logging-CfEk_PnX.js → logging-fywhKCmE.js} +0 -0
  686. /package/dist/{parse-Cjiudy6x.js → parse-Bw0oH-rT.js} +0 -0
  687. /package/dist/{parse-log-line-CUrpqe1w.js → parse-log-line-BuRiE-Ij.js} +0 -0
  688. /package/dist/{parse-log-line-D2UGw0wR.js → parse-log-line-CfVgwy6x.js} +0 -0
  689. /package/dist/{parse-timeout-DFSPLxpY.js → parse-timeout-D1XX_zN_.js} +0 -0
  690. /package/dist/{pi-model-discovery-CV2V1HHz.js → pi-model-discovery-DqgqUyAv.js} +0 -0
  691. /package/dist/{pi-model-discovery-DzEIEgHL.js → pi-model-discovery-EwKVHlZB.js} +0 -0
  692. /package/dist/{prompts--d-6l5Ln.js → prompts-Bg96reub.js} +0 -0
  693. /package/dist/{prompts-CXLLIBwP.js → prompts-Dszjy1n_.js} +0 -0
  694. /package/dist/{redact-BRmQPYDR.js → redact-BIMJ3ntQ.js} +0 -0
  695. /package/dist/{redact-BHmk44DI.js → redact-BRsnXqwD.js} +0 -0
  696. /package/dist/{redact-DAKeu7PA.js → redact-UvkXqguc.js} +0 -0
  697. /package/dist/{status-Cv36yYdi.js → status-C_dMhoE0.js} +0 -0
  698. /package/dist/{status-Drziap9H.js → status-DCkF_L3U.js} +0 -0
  699. /package/dist/{systemd-hints-CH4pbCFD.js → systemd-hints-CXNtLw9Q.js} +0 -0
  700. /package/dist/{tailnet-CL5GtL7t.js → tailnet-DATIFSsY.js} +0 -0
  701. /package/dist/{tailnet-DGRSvYuQ.js → tailnet-uoFvUSsw.js} +0 -0
  702. /package/dist/{transcript-events-BlIONGVn.js → transcript-events-BHS7QoRl.js} +0 -0
  703. /package/dist/{transcript-events-C1hdue6u.js → transcript-events-Bp7fGnwv.js} +0 -0
  704. /package/dist/{transcript-events-CZ8CG4ht.js → transcript-events-Ch7wLX-j.js} +0 -0
  705. /package/dist/{usage-format-6Uar63S0.js → usage-format-Bhl_WCWP.js} +0 -0
  706. /package/dist/{usage-format-hd37en6b.js → usage-format-CpORtVCG.js} +0 -0
  707. /package/extensions/{feishu → irc}/node_modules/.bin/claw +0 -0
  708. /package/extensions/{feishu → irc}/node_modules/.bin/claw.CMD +0 -0
  709. /package/extensions/{feishu → irc}/node_modules/.bin/claw.ps1 +0 -0
  710. /package/extensions/{feishu → irc}/node_modules/.bin/moltbot +0 -0
  711. /package/extensions/{feishu → irc}/node_modules/.bin/moltbot.CMD +0 -0
  712. /package/extensions/{feishu → irc}/node_modules/.bin/moltbot.ps1 +0 -0
  713. /package/extensions/{feishu → irc}/node_modules/.bin/pigbot +0 -0
  714. /package/extensions/{feishu → irc}/node_modules/.bin/pigbot.CMD +0 -0
  715. /package/extensions/{feishu → irc}/node_modules/.bin/pigbot.ps1 +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-DPnkvS73.js";
2
- import { A as resolveHeartbeatDeliveryTarget, Dr as peekSystemEvents, Gn as resolveUserTimezone, Hn as resolveEffectiveMessagesConfig, _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-CBs4e9Rm.js";
1
+ import { D as info, I as colorize, L as isRich, R as theme, c as defaultRuntime, t as createSubsystemLogger } from "./subsystem-DHfJG4gk.js";
2
+ import { A as resolveHeartbeatDeliveryTarget, Cr as resolveHeartbeatPrompt$1, Kn as resolveEffectiveMessagesConfig, Mr as peekSystemEvents, Sr as isHeartbeatContentEffectivelyEmpty, _n as resolveIndicatorType, br as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, ct as setHeartbeatWakeHandler, gr as CommandLane, j as resolveHeartbeatSenderContext, mn as emitHeartbeatEvent, pn as resolveHeartbeatVisibility, pr as getQueueSize, qn as resolveUserTimezone, st as requestHeartbeatNow, t as getReplyFromConfig, vn as appendCronStyleCurrentTimeLine, wr as stripHeartbeatToken, xr as DEFAULT_HEARTBEAT_EVERY } from "./reply-VIHqsQ-k.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-DFOtZbI0.js";
5
- import { n as resolveOpenClawPackageRootSync, t as resolveOpenClawPackageRoot } from "./openclaw-root-93W6UrUK.js";
6
- import { c as resolveDefaultAgentId, m as DEFAULT_HEARTBEAT_FILENAME, n as resolveAgentConfig, s as resolveAgentWorkspaceDir } from "./agent-scope-DnyDZ5RH.js";
7
- import { t as isTruthyEnvValue } from "./env-B5YXooWp.js";
8
- import { g as parseDurationMs, i as loadConfig } from "./config-Bj2eDa02.js";
9
- import { f as resolvePreferredAccountId, n as listChannelPlugins, t as getChannelPlugin, u as buildChannelAccountBindings } from "./plugins-CQw3z3Nw.js";
10
- import { F as resolveAgentMainSessionKey, P as canonicalizeMainSessionAlias, d as loadSessionStore, g as updateSessionStore, m as saveSessionStore } from "./sandbox-qt49csTr.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-CDMGxRoW.js";
14
- import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-CM25qgxz.js";
15
- import { n as withProgress } from "./progress-COzt9PNY.js";
16
- import { t as resolveChannelDefaultAccountId } from "./helpers-C89IG08W.js";
4
+ import { t as runCommandWithTimeout } from "./exec-BPQSKwGa.js";
5
+ import { n as resolveOpenClawPackageRootSync, t as resolveOpenClawPackageRoot } from "./openclaw-root-CEnmuBUN.js";
6
+ import { c as resolveDefaultAgentId, m as DEFAULT_HEARTBEAT_FILENAME, n as resolveAgentConfig, s as resolveAgentWorkspaceDir } from "./agent-scope-GYIs5dyU.js";
7
+ import { t as isTruthyEnvValue } from "./env-BUuSkE19.js";
8
+ import { g as parseDurationMs, i as loadConfig } from "./config-CeWMHOiQ.js";
9
+ import { f as resolvePreferredAccountId, n as listChannelPlugins, t as getChannelPlugin, u as buildChannelAccountBindings } from "./plugins-CTjLu-z-.js";
10
+ import { I as canonicalizeMainSessionAlias, L as resolveAgentMainSessionKey, d as loadSessionStore, g as updateSessionStore, m as saveSessionStore } from "./sandbox-BAChxjC5.js";
11
+ import { n as formatErrorMessage } from "./errors-Bv81hF2P.js";
12
+ import { c as resolveStorePath } from "./paths-DdKf4lHp.js";
13
+ import { q as HEARTBEAT_TOKEN, t as deliverOutboundPayloads } from "./deliver-geVWJ52I.js";
14
+ import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-DAfkvtVq.js";
15
+ import { n as withProgress } from "./progress-DZb6yPcJ.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: hasExecCompletion ? EXEC_EVENT_PROMPT : hasCronEvents ? CRON_EVENT_PROMPT : resolveHeartbeatPrompt(cfg, heartbeat),
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) {
@@ -617,6 +655,7 @@ function startHeartbeatRunner(opts) {
617
655
  if (!Number.isFinite(nextDue)) return;
618
656
  const delay = Math.max(0, nextDue - now);
619
657
  state.timer = setTimeout(() => {
658
+ state.timer = null;
620
659
  requestHeartbeatNow({
621
660
  reason: "interval",
622
661
  coalesceMs: 0
@@ -657,6 +696,10 @@ function startHeartbeatRunner(opts) {
657
696
  scheduleNext();
658
697
  };
659
698
  const run = async (params) => {
699
+ if (state.stopped) return {
700
+ status: "skipped",
701
+ reason: "disabled"
702
+ };
660
703
  if (!heartbeatsEnabled) return {
661
704
  status: "skipped",
662
705
  reason: "disabled"
@@ -672,18 +715,27 @@ function startHeartbeatRunner(opts) {
672
715
  let ran = false;
673
716
  for (const agent of state.agents.values()) {
674
717
  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;
718
+ let res;
719
+ try {
720
+ res = await runOnce({
721
+ cfg: state.cfg,
722
+ agentId: agent.agentId,
723
+ heartbeat: agent.heartbeat,
724
+ reason,
725
+ deps: { runtime: state.runtime }
726
+ });
727
+ } catch (err) {
728
+ const errMsg = formatErrorMessage(err);
729
+ log.error(`heartbeat runner: runOnce threw unexpectedly: ${errMsg}`, { error: errMsg });
730
+ advanceAgentSchedule(agent, now);
731
+ continue;
686
732
  }
733
+ if (res.status === "skipped" && res.reason === "requests-in-flight") {
734
+ advanceAgentSchedule(agent, now);
735
+ scheduleNext();
736
+ return res;
737
+ }
738
+ if (res.status !== "skipped" || res.reason !== "disabled") advanceAgentSchedule(agent, now);
687
739
  if (res.status === "ran") ran = true;
688
740
  }
689
741
  scheduleNext();
@@ -696,11 +748,13 @@ function startHeartbeatRunner(opts) {
696
748
  reason: isInterval ? "not-due" : "disabled"
697
749
  };
698
750
  };
699
- setHeartbeatWakeHandler(async (params) => run({ reason: params.reason }));
751
+ const wakeHandler = async (params) => run({ reason: params.reason });
752
+ const disposeWakeHandler = setHeartbeatWakeHandler(wakeHandler);
700
753
  updateConfig(state.cfg);
701
754
  const cleanup = () => {
755
+ if (state.stopped) return;
702
756
  state.stopped = true;
703
- setHeartbeatWakeHandler(null);
757
+ disposeWakeHandler();
704
758
  if (state.timer) clearTimeout(state.timer);
705
759
  state.timer = null;
706
760
  };
@@ -1204,7 +1258,10 @@ function resolveControlUiDistIndexPathForRoot(root) {
1204
1258
  return path.join(root, ...CONTROL_UI_DIST_PATH_SEGMENTS);
1205
1259
  }
1206
1260
  async function resolveControlUiDistIndexHealth(opts = {}) {
1207
- const indexPath = opts.root ? resolveControlUiDistIndexPathForRoot(opts.root) : await resolveControlUiDistIndexPath(opts.argv1 ?? process.argv[1]);
1261
+ const indexPath = opts.root ? resolveControlUiDistIndexPathForRoot(opts.root) : await resolveControlUiDistIndexPath({
1262
+ argv1: opts.argv1 ?? process.argv[1],
1263
+ moduleUrl: opts.moduleUrl
1264
+ });
1208
1265
  return {
1209
1266
  indexPath,
1210
1267
  exists: Boolean(indexPath && fs.existsSync(indexPath))
@@ -1228,12 +1285,17 @@ function resolveControlUiRepoRoot(argv1 = process.argv[1]) {
1228
1285
  }
1229
1286
  return null;
1230
1287
  }
1231
- async function resolveControlUiDistIndexPath(argv1 = process.argv[1]) {
1288
+ async function resolveControlUiDistIndexPath(argv1OrOpts) {
1289
+ const argv1 = typeof argv1OrOpts === "string" ? argv1OrOpts : argv1OrOpts?.argv1 ?? process.argv[1];
1290
+ const moduleUrl = typeof argv1OrOpts === "object" ? argv1OrOpts?.moduleUrl : void 0;
1232
1291
  if (!argv1) return null;
1233
1292
  const normalized = path.resolve(argv1);
1234
1293
  const distDir = path.dirname(normalized);
1235
1294
  if (path.basename(distDir) === "dist") return path.join(distDir, "control-ui", "index.html");
1236
- const packageRoot = await resolveOpenClawPackageRoot({ argv1: normalized });
1295
+ const packageRoot = await resolveOpenClawPackageRoot({
1296
+ argv1: normalized,
1297
+ moduleUrl
1298
+ });
1237
1299
  if (packageRoot) return path.join(packageRoot, "dist", "control-ui", "index.html");
1238
1300
  let dir = path.dirname(normalized);
1239
1301
  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-9ILYSmJ9.js";
5
- import { c as resolveDefaultAgentId, m as DEFAULT_HEARTBEAT_FILENAME, n as resolveAgentConfig, s as resolveAgentWorkspaceDir } from "./agent-scope-D3me2AZa.js";
6
- import { g as parseDurationMs, i as loadConfig } from "./config-fCnPoWjU.js";
7
- import { n as formatErrorMessage } from "./errors-x4NYs-1P.js";
8
- import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-CD2IZCHT.js";
9
- import { f as resolvePreferredAccountId, n as listChannelPlugins, t as getChannelPlugin, u as buildChannelAccountBindings } from "./plugins-B7F0Ly9G.js";
10
- import { A as resolveHeartbeatVisibility, Cr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, Dr as stripHeartbeatToken, Er as resolveHeartbeatPrompt$1, Mr as resolveUserTimezone, P as resolveIndicatorType, Rr as resolveEffectiveMessagesConfig, Sn as resolveHeartbeatSenderContext, Tr as isHeartbeatContentEffectivelyEmpty, V as getReplyFromConfig, _r as getQueueSize, er as peekSystemEvents, j as emitHeartbeatEvent, nr as setHeartbeatWakeHandler, tr as requestHeartbeatNow, wr as DEFAULT_HEARTBEAT_EVERY, xn as resolveHeartbeatDeliveryTarget, yr as CommandLane } from "./loader-BnzQyT31.js";
11
- import { n as withProgress } from "./progress-Da1ehW-x.js";
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-CD7-BhYD.js";
15
- import { N as canonicalizeMainSessionAlias, P as resolveAgentMainSessionKey, d as loadSessionStore, g as updateSessionStore, m as saveSessionStore } from "./sandbox-CPZiaKcS.js";
3
+ import { t as runCommandWithTimeout } from "./exec-DqZFMawz.js";
4
+ import { n as resolveOpenClawPackageRootSync, t as resolveOpenClawPackageRoot } from "./openclaw-root-BKsZvO6K.js";
5
+ import { c as resolveDefaultAgentId, m as DEFAULT_HEARTBEAT_FILENAME, n as resolveAgentConfig, s as resolveAgentWorkspaceDir } from "./agent-scope-Bkr9fZtl.js";
6
+ import { g as parseDurationMs, i as loadConfig } from "./config-B8v0zg48.js";
7
+ import { n as formatErrorMessage } from "./errors-Cojm0Kl7.js";
8
+ import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-CjEdFGAf.js";
9
+ import { f as resolvePreferredAccountId, n as listChannelPlugins, t as getChannelPlugin, u as buildChannelAccountBindings } from "./plugins-CxrdL_IZ.js";
10
+ import { Ar as stripHeartbeatToken, Br as resolveEffectiveMessagesConfig, Dr as DEFAULT_HEARTBEAT_EVERY, Er as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, F as resolveIndicatorType, I as appendCronStyleCurrentTimeLine, M as emitHeartbeatEvent, Nr as resolveUserTimezone, Or as isHeartbeatContentEffectivelyEmpty, Sr as CommandLane, W as getReplyFromConfig, _n as resolveHeartbeatDeliveryTarget, er as peekSystemEvents, j as resolveHeartbeatVisibility, kr as resolveHeartbeatPrompt$1, nr as setHeartbeatWakeHandler, tr as requestHeartbeatNow, vn as resolveHeartbeatSenderContext, yr as getQueueSize } from "./loader-CS-5lMQa.js";
11
+ import { n as withProgress } from "./progress-COHv-uNT.js";
12
+ import { t as resolveChannelDefaultAccountId } from "./helpers-ByYj2Aq5.js";
13
+ import { k as HEARTBEAT_TOKEN, t as deliverOutboundPayloads } from "./deliver-BHNoC9Yk.js";
14
+ import { c as resolveStorePath } from "./paths-BZK4Ct0I.js";
15
+ import { F as canonicalizeMainSessionAlias, I as resolveAgentMainSessionKey, d as loadSessionStore, g as updateSessionStore, m as saveSessionStore } from "./sandbox-DNHDwHw8.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: hasExecCompletion ? EXEC_EVENT_PROMPT : hasCronEvents ? CRON_EVENT_PROMPT : resolveHeartbeatPrompt(cfg, heartbeat),
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) {
@@ -616,6 +654,7 @@ function startHeartbeatRunner(opts) {
616
654
  if (!Number.isFinite(nextDue)) return;
617
655
  const delay = Math.max(0, nextDue - now);
618
656
  state.timer = setTimeout(() => {
657
+ state.timer = null;
619
658
  requestHeartbeatNow({
620
659
  reason: "interval",
621
660
  coalesceMs: 0
@@ -656,6 +695,10 @@ function startHeartbeatRunner(opts) {
656
695
  scheduleNext();
657
696
  };
658
697
  const run = async (params) => {
698
+ if (state.stopped) return {
699
+ status: "skipped",
700
+ reason: "disabled"
701
+ };
659
702
  if (!heartbeatsEnabled) return {
660
703
  status: "skipped",
661
704
  reason: "disabled"
@@ -671,18 +714,27 @@ function startHeartbeatRunner(opts) {
671
714
  let ran = false;
672
715
  for (const agent of state.agents.values()) {
673
716
  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;
717
+ let res;
718
+ try {
719
+ res = await runOnce({
720
+ cfg: state.cfg,
721
+ agentId: agent.agentId,
722
+ heartbeat: agent.heartbeat,
723
+ reason,
724
+ deps: { runtime: state.runtime }
725
+ });
726
+ } catch (err) {
727
+ const errMsg = formatErrorMessage(err);
728
+ log.error(`heartbeat runner: runOnce threw unexpectedly: ${errMsg}`, { error: errMsg });
729
+ advanceAgentSchedule(agent, now);
730
+ continue;
685
731
  }
732
+ if (res.status === "skipped" && res.reason === "requests-in-flight") {
733
+ advanceAgentSchedule(agent, now);
734
+ scheduleNext();
735
+ return res;
736
+ }
737
+ if (res.status !== "skipped" || res.reason !== "disabled") advanceAgentSchedule(agent, now);
686
738
  if (res.status === "ran") ran = true;
687
739
  }
688
740
  scheduleNext();
@@ -695,11 +747,13 @@ function startHeartbeatRunner(opts) {
695
747
  reason: isInterval ? "not-due" : "disabled"
696
748
  };
697
749
  };
698
- setHeartbeatWakeHandler(async (params) => run({ reason: params.reason }));
750
+ const wakeHandler = async (params) => run({ reason: params.reason });
751
+ const disposeWakeHandler = setHeartbeatWakeHandler(wakeHandler);
699
752
  updateConfig(state.cfg);
700
753
  const cleanup = () => {
754
+ if (state.stopped) return;
701
755
  state.stopped = true;
702
- setHeartbeatWakeHandler(null);
756
+ disposeWakeHandler();
703
757
  if (state.timer) clearTimeout(state.timer);
704
758
  state.timer = null;
705
759
  };
@@ -1203,7 +1257,10 @@ function resolveControlUiDistIndexPathForRoot(root) {
1203
1257
  return path.join(root, ...CONTROL_UI_DIST_PATH_SEGMENTS);
1204
1258
  }
1205
1259
  async function resolveControlUiDistIndexHealth(opts = {}) {
1206
- const indexPath = opts.root ? resolveControlUiDistIndexPathForRoot(opts.root) : await resolveControlUiDistIndexPath(opts.argv1 ?? process.argv[1]);
1260
+ const indexPath = opts.root ? resolveControlUiDistIndexPathForRoot(opts.root) : await resolveControlUiDistIndexPath({
1261
+ argv1: opts.argv1 ?? process.argv[1],
1262
+ moduleUrl: opts.moduleUrl
1263
+ });
1207
1264
  return {
1208
1265
  indexPath,
1209
1266
  exists: Boolean(indexPath && fs.existsSync(indexPath))
@@ -1227,12 +1284,17 @@ function resolveControlUiRepoRoot(argv1 = process.argv[1]) {
1227
1284
  }
1228
1285
  return null;
1229
1286
  }
1230
- async function resolveControlUiDistIndexPath(argv1 = process.argv[1]) {
1287
+ async function resolveControlUiDistIndexPath(argv1OrOpts) {
1288
+ const argv1 = typeof argv1OrOpts === "string" ? argv1OrOpts : argv1OrOpts?.argv1 ?? process.argv[1];
1289
+ const moduleUrl = typeof argv1OrOpts === "object" ? argv1OrOpts?.moduleUrl : void 0;
1231
1290
  if (!argv1) return null;
1232
1291
  const normalized = path.resolve(argv1);
1233
1292
  const distDir = path.dirname(normalized);
1234
1293
  if (path.basename(distDir) === "dist") return path.join(distDir, "control-ui", "index.html");
1235
- const packageRoot = await resolveOpenClawPackageRoot({ argv1: normalized });
1294
+ const packageRoot = await resolveOpenClawPackageRoot({
1295
+ argv1: normalized,
1296
+ moduleUrl
1297
+ });
1236
1298
  if (packageRoot) return path.join(packageRoot, "dist", "control-ui", "index.html");
1237
1299
  let dir = path.dirname(normalized);
1238
1300
  for (let i = 0; i < 8; i++) {
@@ -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,4 +1,4 @@
1
- import { R as theme } from "./subsystem-DPnkvS73.js";
1
+ import { R as theme } from "./subsystem-DHfJG4gk.js";
2
2
 
3
3
  //#region src/cli/help-format.ts
4
4
  function formatHelpExample(command, description) {
@@ -1,49 +1,54 @@
1
- import { k as theme, p as defaultRuntime } from "./entry.js";
2
- import "./auth-profiles-FJ3VY25a.js";
3
- import { t as formatCliCommand } from "./command-format-ayFsmwwz.js";
4
- import { S as shortenHomePath, t as CONFIG_DIR, y as resolveUserPath } from "./utils-Dk86IbEs.js";
5
- import { t as runCommandWithTimeout } from "./exec-B8JKbXKW.js";
6
- import { c as resolveDefaultAgentId, s as resolveAgentWorkspaceDir } from "./agent-scope-D3me2AZa.js";
7
- import "./github-copilot-token-SLWintYd.js";
8
- import "./pi-model-discovery-DzEIEgHL.js";
9
- import { c as writeConfigFile, i as loadConfig } from "./config-fCnPoWjU.js";
10
- import { a as MANIFEST_KEY } from "./manifest-registry-D5SiA3xq.js";
11
- import "./server-context-lyNcqJYD.js";
12
- import "./chrome-B2UjqY-9.js";
13
- import "./control-service-Djd_WI3_.js";
14
- import "./client-DMloFP_O.js";
15
- import "./call-CD2IZCHT.js";
16
- import "./message-channel-BlgPSDAh.js";
17
- import { t as formatDocsLink } from "./links-7M-j83As.js";
18
- import "./plugins-B7F0Ly9G.js";
19
- import "./logging-CfEk_PnX.js";
20
- import "./accounts-DbzMEfKN.js";
21
- import "./loader-BnzQyT31.js";
22
- import "./progress-Da1ehW-x.js";
23
- import "./prompt-style-Dc0C5HC9.js";
24
- import { a as resolvePackedRootDir, i as resolveArchiveKind, n as fileExists, r as readJsonFile, t as extractArchive } from "./archive-D0z3LZDK.js";
25
- import "./manager-CMFBuvVd.js";
26
- import "./paths-IivnSNkP.js";
27
- import "./sqlite-DODNHWJb.js";
28
- import "./routes-9ygR0GOk.js";
29
- import "./pi-embedded-helpers-7AjuNiiJ.js";
30
- import "./deliver-CD7-BhYD.js";
31
- import "./sandbox-CPZiaKcS.js";
32
- import "./tui-formatters-BDP_71Xt.js";
33
- import "./wsl-rfIr_Sde.js";
34
- import "./skills-Ccsv3IQq.js";
35
- import "./image-ORs4LLwg.js";
36
- import "./redact-BHmk44DI.js";
37
- import "./tool-display-DUVhO36P.js";
38
- import "./channel-selection-DAHCVAX4.js";
39
- import "./session-cost-usage-CcCEQNuc.js";
40
- import "./commands-BWHYcc83.js";
41
- import "./pairing-store-CO6umWFP.js";
42
- import "./login-qr-KUOtNJaQ.js";
43
- import "./pairing-labels-CHxlh3tT.js";
44
- import { t as renderTable } from "./table-cCoGqLsk.js";
45
- import { a as parseFrontmatter, n as loadWorkspaceHookEntries, t as buildWorkspaceHookStatus } from "./hooks-status-DRAVHSPg.js";
46
- import { t as buildPluginStatusReport } from "./status-Bmx9_1C7.js";
1
+ import { A as theme, p as defaultRuntime } from "./entry.js";
2
+ import "./auth-profiles-Cp9MtUdM.js";
3
+ import { t as formatCliCommand } from "./command-format-Bxe0mWee.js";
4
+ import { S as shortenHomePath, t as CONFIG_DIR, y as resolveUserPath } from "./utils-BLJAc3ZV.js";
5
+ import { t as runCommandWithTimeout } from "./exec-DqZFMawz.js";
6
+ import { c as resolveDefaultAgentId, s as resolveAgentWorkspaceDir } from "./agent-scope-Bkr9fZtl.js";
7
+ import "./github-copilot-token-C9W4SY9o.js";
8
+ import "./pi-model-discovery-EhM2JAQo.js";
9
+ import { c as writeConfigFile, i as loadConfig } from "./config-B8v0zg48.js";
10
+ import { a as MANIFEST_KEY } from "./manifest-registry-CVsqjgX0.js";
11
+ import "./server-context-FwqBRH3K.js";
12
+ import "./chrome--Fe8F5Kf.js";
13
+ import "./auth-CLhyWwAU.js";
14
+ import "./control-auth-BlWU-jBl.js";
15
+ import "./control-service-COF59GQe.js";
16
+ import "./client-BhZjzrH2.js";
17
+ import "./call-CjEdFGAf.js";
18
+ import "./message-channel-DWcu72r7.js";
19
+ import { t as formatDocsLink } from "./links-DpxpaKe1.js";
20
+ import "./plugins-CxrdL_IZ.js";
21
+ import "./logging-D-Jq2wIo.js";
22
+ import "./accounts-Bvh0DFxS.js";
23
+ import "./loader-CS-5lMQa.js";
24
+ import "./progress-COHv-uNT.js";
25
+ import "./prompt-style-Cf1r1L6k.js";
26
+ import { a as resolvePackedRootDir, i as resolveArchiveKind, n as fileExists, r as readJsonFile, t as extractArchive } from "./archive-aSMUcOc6.js";
27
+ import "./deliver-BHNoC9Yk.js";
28
+ import "./manager-ChW0jk7T.js";
29
+ import "./paths-BZK4Ct0I.js";
30
+ import "./sqlite-2UsPaJz5.js";
31
+ import "./redact-UvkXqguc.js";
32
+ import "./routes-CaCvio4Q.js";
33
+ import "./pi-embedded-helpers-DpJb0kUk.js";
34
+ import "./fetch-wuOZDzdT.js";
35
+ import "./sandbox-DNHDwHw8.js";
36
+ import "./commands-registry-6NUFrejL.js";
37
+ import "./wsl-BvTIzy-8.js";
38
+ import "./skills-CE7by2IF.js";
39
+ import "./image-D-5pUELC.js";
40
+ import "./nodes-screen-CVL9363A.js";
41
+ import "./tool-display-DbdMQFZx.js";
42
+ import "./channel-selection-BaW1xXEa.js";
43
+ import "./session-cost-usage-B-tyjp76.js";
44
+ import "./runner-BEy5ZGFv.js";
45
+ import "./commands-gOiRcfoU.js";
46
+ import "./pairing-store-Dz-ArTQS.js";
47
+ import "./login-qr-BsYM2E1y.js";
48
+ import "./pairing-labels-Dt2vXyI7.js";
49
+ import { t as renderTable } from "./table-Bvka_vkc.js";
50
+ import { a as parseFrontmatter, n as loadWorkspaceHookEntries, t as buildWorkspaceHookStatus } from "./hooks-status-BbIz0zmm.js";
51
+ import { t as buildPluginStatusReport } from "./status-CKuX1-zb.js";
47
52
  import path from "node:path";
48
53
  import os from "node:os";
49
54
  import fs from "node:fs";
@@ -203,7 +208,8 @@ async function installHookPackageFromDir(params) {
203
208
  "npm",
204
209
  "install",
205
210
  "--omit=dev",
206
- "--silent"
211
+ "--silent",
212
+ "--ignore-scripts"
207
213
  ], {
208
214
  timeoutMs: Math.max(timeoutMs, 3e5),
209
215
  cwd: targetDir