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,184 +0,0 @@
1
- import { i as isTrustedProxyAddress, l as resolveGatewayClientIp, n as isLoopbackAddress, o as parseForwardedForClientIp } from "./ws-C0k_dhCP.js";
2
- import { c as readTailscaleWhoisIdentity } from "./tailscale-DU6DgqVy.js";
3
- import { timingSafeEqual } from "node:crypto";
4
-
5
- //#region src/gateway/auth.ts
6
- function safeEqual(a, b) {
7
- if (a.length !== b.length) return false;
8
- return timingSafeEqual(Buffer.from(a), Buffer.from(b));
9
- }
10
- function normalizeLogin(login) {
11
- return login.trim().toLowerCase();
12
- }
13
- function getHostName(hostHeader) {
14
- const host = (hostHeader ?? "").trim().toLowerCase();
15
- if (!host) return "";
16
- if (host.startsWith("[")) {
17
- const end = host.indexOf("]");
18
- if (end !== -1) return host.slice(1, end);
19
- }
20
- const [name] = host.split(":");
21
- return name ?? "";
22
- }
23
- function headerValue(value) {
24
- return Array.isArray(value) ? value[0] : value;
25
- }
26
- function resolveTailscaleClientIp(req) {
27
- if (!req) return;
28
- const forwardedFor = headerValue(req.headers?.["x-forwarded-for"]);
29
- return forwardedFor ? parseForwardedForClientIp(forwardedFor) : void 0;
30
- }
31
- function resolveRequestClientIp(req, trustedProxies) {
32
- if (!req) return;
33
- return resolveGatewayClientIp({
34
- remoteAddr: req.socket?.remoteAddress ?? "",
35
- forwardedFor: headerValue(req.headers?.["x-forwarded-for"]),
36
- realIp: headerValue(req.headers?.["x-real-ip"]),
37
- trustedProxies
38
- });
39
- }
40
- function isLocalDirectRequest(req, trustedProxies) {
41
- if (!req) return false;
42
- if (!isLoopbackAddress(resolveRequestClientIp(req, trustedProxies) ?? "")) return false;
43
- const host = getHostName(req.headers?.host);
44
- const hostIsLocal = host === "localhost" || host === "127.0.0.1" || host === "::1";
45
- const hostIsTailscaleServe = host.endsWith(".ts.net");
46
- const hasForwarded = Boolean(req.headers?.["x-forwarded-for"] || req.headers?.["x-real-ip"] || req.headers?.["x-forwarded-host"]);
47
- const remoteIsTrustedProxy = isTrustedProxyAddress(req.socket?.remoteAddress, trustedProxies);
48
- return (hostIsLocal || hostIsTailscaleServe) && (!hasForwarded || remoteIsTrustedProxy);
49
- }
50
- function getTailscaleUser(req) {
51
- if (!req) return null;
52
- const login = req.headers["tailscale-user-login"];
53
- if (typeof login !== "string" || !login.trim()) return null;
54
- const nameRaw = req.headers["tailscale-user-name"];
55
- const profilePic = req.headers["tailscale-user-profile-pic"];
56
- const name = typeof nameRaw === "string" && nameRaw.trim() ? nameRaw.trim() : login.trim();
57
- return {
58
- login: login.trim(),
59
- name,
60
- profilePic: typeof profilePic === "string" && profilePic.trim() ? profilePic.trim() : void 0
61
- };
62
- }
63
- function hasTailscaleProxyHeaders(req) {
64
- if (!req) return false;
65
- return Boolean(req.headers["x-forwarded-for"] && req.headers["x-forwarded-proto"] && req.headers["x-forwarded-host"]);
66
- }
67
- function isTailscaleProxyRequest(req) {
68
- if (!req) return false;
69
- return isLoopbackAddress(req.socket?.remoteAddress) && hasTailscaleProxyHeaders(req);
70
- }
71
- async function resolveVerifiedTailscaleUser(params) {
72
- const { req, tailscaleWhois } = params;
73
- const tailscaleUser = getTailscaleUser(req);
74
- if (!tailscaleUser) return {
75
- ok: false,
76
- reason: "tailscale_user_missing"
77
- };
78
- if (!isTailscaleProxyRequest(req)) return {
79
- ok: false,
80
- reason: "tailscale_proxy_missing"
81
- };
82
- const clientIp = resolveTailscaleClientIp(req);
83
- if (!clientIp) return {
84
- ok: false,
85
- reason: "tailscale_whois_failed"
86
- };
87
- const whois = await tailscaleWhois(clientIp);
88
- if (!whois?.login) return {
89
- ok: false,
90
- reason: "tailscale_whois_failed"
91
- };
92
- if (normalizeLogin(whois.login) !== normalizeLogin(tailscaleUser.login)) return {
93
- ok: false,
94
- reason: "tailscale_user_mismatch"
95
- };
96
- return {
97
- ok: true,
98
- user: {
99
- login: whois.login,
100
- name: whois.name ?? tailscaleUser.name,
101
- profilePic: tailscaleUser.profilePic
102
- }
103
- };
104
- }
105
- function resolveGatewayAuth(params) {
106
- const authConfig = params.authConfig ?? {};
107
- const env = params.env ?? process.env;
108
- const token = authConfig.token ?? env.OPENCLAW_GATEWAY_TOKEN ?? env.CLAWDBOT_GATEWAY_TOKEN ?? void 0;
109
- const password = authConfig.password ?? env.OPENCLAW_GATEWAY_PASSWORD ?? env.CLAWDBOT_GATEWAY_PASSWORD ?? void 0;
110
- const mode = authConfig.mode ?? (password ? "password" : "token");
111
- return {
112
- mode,
113
- token,
114
- password,
115
- allowTailscale: authConfig.allowTailscale ?? (params.tailscaleMode === "serve" && mode !== "password")
116
- };
117
- }
118
- function assertGatewayAuthConfigured(auth) {
119
- if (auth.mode === "token" && !auth.token) {
120
- if (auth.allowTailscale) return;
121
- throw new Error("gateway auth mode is token, but no token was configured (set gateway.auth.token or OPENCLAW_GATEWAY_TOKEN)");
122
- }
123
- if (auth.mode === "password" && !auth.password) throw new Error("gateway auth mode is password, but no password was configured");
124
- }
125
- async function authorizeGatewayConnect(params) {
126
- const { auth, connectAuth, req, trustedProxies } = params;
127
- const tailscaleWhois = params.tailscaleWhois ?? readTailscaleWhoisIdentity;
128
- const localDirect = isLocalDirectRequest(req, trustedProxies);
129
- if (auth.allowTailscale && !localDirect) {
130
- const tailscaleCheck = await resolveVerifiedTailscaleUser({
131
- req,
132
- tailscaleWhois
133
- });
134
- if (tailscaleCheck.ok) return {
135
- ok: true,
136
- method: "tailscale",
137
- user: tailscaleCheck.user.login
138
- };
139
- }
140
- if (auth.mode === "token") {
141
- if (!auth.token) return {
142
- ok: false,
143
- reason: "token_missing_config"
144
- };
145
- if (!connectAuth?.token) return {
146
- ok: false,
147
- reason: "token_missing"
148
- };
149
- if (!safeEqual(connectAuth.token, auth.token)) return {
150
- ok: false,
151
- reason: "token_mismatch"
152
- };
153
- return {
154
- ok: true,
155
- method: "token"
156
- };
157
- }
158
- if (auth.mode === "password") {
159
- const password = connectAuth?.password;
160
- if (!auth.password) return {
161
- ok: false,
162
- reason: "password_missing_config"
163
- };
164
- if (!password) return {
165
- ok: false,
166
- reason: "password_missing"
167
- };
168
- if (!safeEqual(password, auth.password)) return {
169
- ok: false,
170
- reason: "password_mismatch"
171
- };
172
- return {
173
- ok: true,
174
- method: "password"
175
- };
176
- }
177
- return {
178
- ok: false,
179
- reason: "unauthorized"
180
- };
181
- }
182
-
183
- //#endregion
184
- export { resolveGatewayAuth as i, authorizeGatewayConnect as n, isLocalDirectRequest as r, assertGatewayAuthConfigured as t };
@@ -1,184 +0,0 @@
1
- import { i as isTrustedProxyAddress, l as resolveGatewayClientIp, n as isLoopbackAddress, o as parseForwardedForClientIp } from "./ws-DtDKpbLR.js";
2
- import { c as readTailscaleWhoisIdentity } from "./tailscale-Cu-2HNvU.js";
3
- import { timingSafeEqual } from "node:crypto";
4
-
5
- //#region src/gateway/auth.ts
6
- function safeEqual(a, b) {
7
- if (a.length !== b.length) return false;
8
- return timingSafeEqual(Buffer.from(a), Buffer.from(b));
9
- }
10
- function normalizeLogin(login) {
11
- return login.trim().toLowerCase();
12
- }
13
- function getHostName(hostHeader) {
14
- const host = (hostHeader ?? "").trim().toLowerCase();
15
- if (!host) return "";
16
- if (host.startsWith("[")) {
17
- const end = host.indexOf("]");
18
- if (end !== -1) return host.slice(1, end);
19
- }
20
- const [name] = host.split(":");
21
- return name ?? "";
22
- }
23
- function headerValue(value) {
24
- return Array.isArray(value) ? value[0] : value;
25
- }
26
- function resolveTailscaleClientIp(req) {
27
- if (!req) return;
28
- const forwardedFor = headerValue(req.headers?.["x-forwarded-for"]);
29
- return forwardedFor ? parseForwardedForClientIp(forwardedFor) : void 0;
30
- }
31
- function resolveRequestClientIp(req, trustedProxies) {
32
- if (!req) return;
33
- return resolveGatewayClientIp({
34
- remoteAddr: req.socket?.remoteAddress ?? "",
35
- forwardedFor: headerValue(req.headers?.["x-forwarded-for"]),
36
- realIp: headerValue(req.headers?.["x-real-ip"]),
37
- trustedProxies
38
- });
39
- }
40
- function isLocalDirectRequest(req, trustedProxies) {
41
- if (!req) return false;
42
- if (!isLoopbackAddress(resolveRequestClientIp(req, trustedProxies) ?? "")) return false;
43
- const host = getHostName(req.headers?.host);
44
- const hostIsLocal = host === "localhost" || host === "127.0.0.1" || host === "::1";
45
- const hostIsTailscaleServe = host.endsWith(".ts.net");
46
- const hasForwarded = Boolean(req.headers?.["x-forwarded-for"] || req.headers?.["x-real-ip"] || req.headers?.["x-forwarded-host"]);
47
- const remoteIsTrustedProxy = isTrustedProxyAddress(req.socket?.remoteAddress, trustedProxies);
48
- return (hostIsLocal || hostIsTailscaleServe) && (!hasForwarded || remoteIsTrustedProxy);
49
- }
50
- function getTailscaleUser(req) {
51
- if (!req) return null;
52
- const login = req.headers["tailscale-user-login"];
53
- if (typeof login !== "string" || !login.trim()) return null;
54
- const nameRaw = req.headers["tailscale-user-name"];
55
- const profilePic = req.headers["tailscale-user-profile-pic"];
56
- const name = typeof nameRaw === "string" && nameRaw.trim() ? nameRaw.trim() : login.trim();
57
- return {
58
- login: login.trim(),
59
- name,
60
- profilePic: typeof profilePic === "string" && profilePic.trim() ? profilePic.trim() : void 0
61
- };
62
- }
63
- function hasTailscaleProxyHeaders(req) {
64
- if (!req) return false;
65
- return Boolean(req.headers["x-forwarded-for"] && req.headers["x-forwarded-proto"] && req.headers["x-forwarded-host"]);
66
- }
67
- function isTailscaleProxyRequest(req) {
68
- if (!req) return false;
69
- return isLoopbackAddress(req.socket?.remoteAddress) && hasTailscaleProxyHeaders(req);
70
- }
71
- async function resolveVerifiedTailscaleUser(params) {
72
- const { req, tailscaleWhois } = params;
73
- const tailscaleUser = getTailscaleUser(req);
74
- if (!tailscaleUser) return {
75
- ok: false,
76
- reason: "tailscale_user_missing"
77
- };
78
- if (!isTailscaleProxyRequest(req)) return {
79
- ok: false,
80
- reason: "tailscale_proxy_missing"
81
- };
82
- const clientIp = resolveTailscaleClientIp(req);
83
- if (!clientIp) return {
84
- ok: false,
85
- reason: "tailscale_whois_failed"
86
- };
87
- const whois = await tailscaleWhois(clientIp);
88
- if (!whois?.login) return {
89
- ok: false,
90
- reason: "tailscale_whois_failed"
91
- };
92
- if (normalizeLogin(whois.login) !== normalizeLogin(tailscaleUser.login)) return {
93
- ok: false,
94
- reason: "tailscale_user_mismatch"
95
- };
96
- return {
97
- ok: true,
98
- user: {
99
- login: whois.login,
100
- name: whois.name ?? tailscaleUser.name,
101
- profilePic: tailscaleUser.profilePic
102
- }
103
- };
104
- }
105
- function resolveGatewayAuth(params) {
106
- const authConfig = params.authConfig ?? {};
107
- const env = params.env ?? process.env;
108
- const token = authConfig.token ?? env.OPENCLAW_GATEWAY_TOKEN ?? env.CLAWDBOT_GATEWAY_TOKEN ?? void 0;
109
- const password = authConfig.password ?? env.OPENCLAW_GATEWAY_PASSWORD ?? env.CLAWDBOT_GATEWAY_PASSWORD ?? void 0;
110
- const mode = authConfig.mode ?? (password ? "password" : "token");
111
- return {
112
- mode,
113
- token,
114
- password,
115
- allowTailscale: authConfig.allowTailscale ?? (params.tailscaleMode === "serve" && mode !== "password")
116
- };
117
- }
118
- function assertGatewayAuthConfigured(auth) {
119
- if (auth.mode === "token" && !auth.token) {
120
- if (auth.allowTailscale) return;
121
- throw new Error("gateway auth mode is token, but no token was configured (set gateway.auth.token or OPENCLAW_GATEWAY_TOKEN)");
122
- }
123
- if (auth.mode === "password" && !auth.password) throw new Error("gateway auth mode is password, but no password was configured");
124
- }
125
- async function authorizeGatewayConnect(params) {
126
- const { auth, connectAuth, req, trustedProxies } = params;
127
- const tailscaleWhois = params.tailscaleWhois ?? readTailscaleWhoisIdentity;
128
- const localDirect = isLocalDirectRequest(req, trustedProxies);
129
- if (auth.allowTailscale && !localDirect) {
130
- const tailscaleCheck = await resolveVerifiedTailscaleUser({
131
- req,
132
- tailscaleWhois
133
- });
134
- if (tailscaleCheck.ok) return {
135
- ok: true,
136
- method: "tailscale",
137
- user: tailscaleCheck.user.login
138
- };
139
- }
140
- if (auth.mode === "token") {
141
- if (!auth.token) return {
142
- ok: false,
143
- reason: "token_missing_config"
144
- };
145
- if (!connectAuth?.token) return {
146
- ok: false,
147
- reason: "token_missing"
148
- };
149
- if (!safeEqual(connectAuth.token, auth.token)) return {
150
- ok: false,
151
- reason: "token_mismatch"
152
- };
153
- return {
154
- ok: true,
155
- method: "token"
156
- };
157
- }
158
- if (auth.mode === "password") {
159
- const password = connectAuth?.password;
160
- if (!auth.password) return {
161
- ok: false,
162
- reason: "password_missing_config"
163
- };
164
- if (!password) return {
165
- ok: false,
166
- reason: "password_missing"
167
- };
168
- if (!safeEqual(password, auth.password)) return {
169
- ok: false,
170
- reason: "password_mismatch"
171
- };
172
- return {
173
- ok: true,
174
- method: "password"
175
- };
176
- }
177
- return {
178
- ok: false,
179
- reason: "unauthorized"
180
- };
181
- }
182
-
183
- //#endregion
184
- export { resolveGatewayAuth as i, authorizeGatewayConnect as n, isLocalDirectRequest as r, assertGatewayAuthConfigured as t };
@@ -1,30 +0,0 @@
1
- //#region src/utils/boolean.ts
2
- const DEFAULT_TRUTHY = [
3
- "true",
4
- "1",
5
- "yes",
6
- "on"
7
- ];
8
- const DEFAULT_FALSY = [
9
- "false",
10
- "0",
11
- "no",
12
- "off"
13
- ];
14
- const DEFAULT_TRUTHY_SET = new Set(DEFAULT_TRUTHY);
15
- const DEFAULT_FALSY_SET = new Set(DEFAULT_FALSY);
16
- function parseBooleanValue(value, options = {}) {
17
- if (typeof value === "boolean") return value;
18
- if (typeof value !== "string") return;
19
- const normalized = value.trim().toLowerCase();
20
- if (!normalized) return;
21
- const truthy = options.truthy ?? DEFAULT_TRUTHY;
22
- const falsy = options.falsy ?? DEFAULT_FALSY;
23
- const truthySet = truthy === DEFAULT_TRUTHY ? DEFAULT_TRUTHY_SET : new Set(truthy);
24
- const falsySet = falsy === DEFAULT_FALSY ? DEFAULT_FALSY_SET : new Set(falsy);
25
- if (truthySet.has(normalized)) return true;
26
- if (falsySet.has(normalized)) return false;
27
- }
28
-
29
- //#endregion
30
- export { parseBooleanValue as t };
@@ -1,71 +0,0 @@
1
- ---
2
- name: soul-evil
3
- description: "Swap SOUL.md with SOUL_EVIL.md during a purge window or by random chance"
4
- homepage: https://docs.openclaw.ai/hooks/soul-evil
5
- metadata:
6
- {
7
- "openclaw":
8
- {
9
- "emoji": "😈",
10
- "events": ["agent:bootstrap"],
11
- "requires": { "config": ["hooks.internal.entries.soul-evil.enabled"] },
12
- "install": [{ "id": "bundled", "kind": "bundled", "label": "Bundled with OpenClaw" }],
13
- },
14
- }
15
- ---
16
-
17
- # SOUL Evil Hook
18
-
19
- Replaces the injected `SOUL.md` content with `SOUL_EVIL.md` during a daily purge window or by random chance.
20
-
21
- ## What It Does
22
-
23
- When enabled and the trigger conditions match, the hook swaps the **injected** `SOUL.md` content before the system prompt is built. It does **not** modify files on disk.
24
-
25
- ## Files
26
-
27
- - `SOUL.md` — normal persona (always read)
28
- - `SOUL_EVIL.md` — alternate persona (read only when triggered)
29
-
30
- You can change the filename via hook config.
31
-
32
- ## Configuration
33
-
34
- Add this to your config (`~/.openclaw/openclaw.json`):
35
-
36
- ```json
37
- {
38
- "hooks": {
39
- "internal": {
40
- "enabled": true,
41
- "entries": {
42
- "soul-evil": {
43
- "enabled": true,
44
- "file": "SOUL_EVIL.md",
45
- "chance": 0.1,
46
- "purge": { "at": "21:00", "duration": "15m" }
47
- }
48
- }
49
- }
50
- }
51
- }
52
- ```
53
-
54
- ### Options
55
-
56
- - `file` (string): alternate SOUL filename (default: `SOUL_EVIL.md`)
57
- - `chance` (number 0–1): random chance per run to swap in SOUL_EVIL
58
- - `purge.at` (HH:mm): daily purge window start time (24h)
59
- - `purge.duration` (duration): window length (e.g. `30s`, `10m`, `1h`)
60
-
61
- **Precedence:** purge window wins over chance.
62
-
63
- ## Requirements
64
-
65
- - `hooks.internal.entries.soul-evil.enabled` must be set to `true`
66
-
67
- ## Enable
68
-
69
- ```bash
70
- openclaw hooks enable soul-evil
71
- ```
@@ -1,194 +0,0 @@
1
- import "../../paths-BZtyHNCi.js";
2
- import { h as isSubagentSessionKey } from "../../session-key-nXYQSv-a.js";
3
- import { g as resolveUserPath } from "../../utils-dp_OM900.js";
4
- import "../../boolean-M-esQJt6.js";
5
- import { o as isAgentBootstrapEvent, r as resolveUserTimezone } from "../../date-time-c6HTX6IW.js";
6
- import { t as parseDurationMs } from "../../parse-duration-De_tAQSe.js";
7
- import "../../frontmatter-xwTm0734.js";
8
- import { t as resolveHookConfig } from "../../config-CI7EpvlP.js";
9
- import fs from "node:fs/promises";
10
- import path from "node:path";
11
-
12
- //#region src/hooks/soul-evil.ts
13
- const DEFAULT_SOUL_EVIL_FILENAME = "SOUL_EVIL.md";
14
- function resolveSoulEvilConfigFromHook(entry, log) {
15
- if (!entry) return null;
16
- const file = typeof entry.file === "string" ? entry.file : void 0;
17
- if (entry.file !== void 0 && !file) log?.warn?.("soul-evil config: file must be a string");
18
- let chance;
19
- if (entry.chance !== void 0) if (typeof entry.chance === "number" && Number.isFinite(entry.chance)) chance = entry.chance;
20
- else log?.warn?.("soul-evil config: chance must be a number");
21
- let purge;
22
- if (entry.purge && typeof entry.purge === "object") {
23
- const at = typeof entry.purge.at === "string" ? entry.purge.at : void 0;
24
- const duration = typeof entry.purge.duration === "string" ? entry.purge.duration : void 0;
25
- if (entry.purge.at !== void 0 && !at) log?.warn?.("soul-evil config: purge.at must be a string");
26
- if (entry.purge.duration !== void 0 && !duration) log?.warn?.("soul-evil config: purge.duration must be a string");
27
- purge = {
28
- at,
29
- duration
30
- };
31
- } else if (entry.purge !== void 0) log?.warn?.("soul-evil config: purge must be an object");
32
- if (!file && chance === void 0 && !purge) return null;
33
- return {
34
- file,
35
- chance,
36
- purge
37
- };
38
- }
39
- function clampChance(value) {
40
- if (typeof value !== "number" || !Number.isFinite(value)) return 0;
41
- return Math.min(1, Math.max(0, value));
42
- }
43
- function parsePurgeAt(raw) {
44
- if (!raw) return null;
45
- const trimmed = raw.trim();
46
- const match = /^([01]?\d|2[0-3]):([0-5]\d)$/.exec(trimmed);
47
- if (!match) return null;
48
- const hour = Number.parseInt(match[1] ?? "", 10);
49
- const minute = Number.parseInt(match[2] ?? "", 10);
50
- if (!Number.isFinite(hour) || !Number.isFinite(minute)) return null;
51
- return hour * 60 + minute;
52
- }
53
- function timeOfDayMsInTimezone(date, timeZone) {
54
- try {
55
- const parts = new Intl.DateTimeFormat("en-US", {
56
- timeZone,
57
- hour: "2-digit",
58
- minute: "2-digit",
59
- second: "2-digit",
60
- hourCycle: "h23"
61
- }).formatToParts(date);
62
- const map = {};
63
- for (const part of parts) if (part.type !== "literal") map[part.type] = part.value;
64
- if (!map.hour || !map.minute || !map.second) return null;
65
- const hour = Number.parseInt(map.hour, 10);
66
- const minute = Number.parseInt(map.minute, 10);
67
- const second = Number.parseInt(map.second, 10);
68
- if (!Number.isFinite(hour) || !Number.isFinite(minute) || !Number.isFinite(second)) return null;
69
- return (hour * 3600 + minute * 60 + second) * 1e3 + date.getMilliseconds();
70
- } catch {
71
- return null;
72
- }
73
- }
74
- function isWithinDailyPurgeWindow(params) {
75
- if (!params.at || !params.duration) return false;
76
- const startMinutes = parsePurgeAt(params.at);
77
- if (startMinutes === null) return false;
78
- let durationMs;
79
- try {
80
- durationMs = parseDurationMs(params.duration, { defaultUnit: "m" });
81
- } catch {
82
- return false;
83
- }
84
- if (!Number.isFinite(durationMs) || durationMs <= 0) return false;
85
- const dayMs = 1440 * 60 * 1e3;
86
- if (durationMs >= dayMs) return true;
87
- const nowMs = timeOfDayMsInTimezone(params.now, params.timeZone);
88
- if (nowMs === null) return false;
89
- const startMs = startMinutes * 60 * 1e3;
90
- const endMs = startMs + durationMs;
91
- if (endMs < dayMs) return nowMs >= startMs && nowMs < endMs;
92
- const wrappedEnd = endMs % dayMs;
93
- return nowMs >= startMs || nowMs < wrappedEnd;
94
- }
95
- function decideSoulEvil(params) {
96
- const evil = params.config;
97
- const fileName = evil?.file?.trim() || DEFAULT_SOUL_EVIL_FILENAME;
98
- if (!evil) return {
99
- useEvil: false,
100
- fileName
101
- };
102
- const timeZone = resolveUserTimezone(params.userTimezone);
103
- const now = params.now ?? /* @__PURE__ */ new Date();
104
- if (isWithinDailyPurgeWindow({
105
- at: evil.purge?.at,
106
- duration: evil.purge?.duration,
107
- now,
108
- timeZone
109
- })) return {
110
- useEvil: true,
111
- reason: "purge",
112
- fileName
113
- };
114
- const chance = clampChance(evil.chance);
115
- if (chance > 0) {
116
- if ((params.random ?? Math.random)() < chance) return {
117
- useEvil: true,
118
- reason: "chance",
119
- fileName
120
- };
121
- }
122
- return {
123
- useEvil: false,
124
- fileName
125
- };
126
- }
127
- async function applySoulEvilOverride(params) {
128
- const decision = decideSoulEvil({
129
- config: params.config,
130
- userTimezone: params.userTimezone,
131
- now: params.now,
132
- random: params.random
133
- });
134
- if (!decision.useEvil) return params.files;
135
- const workspaceDir = resolveUserPath(params.workspaceDir);
136
- const evilPath = path.join(workspaceDir, decision.fileName);
137
- let evilContent;
138
- try {
139
- evilContent = await fs.readFile(evilPath, "utf-8");
140
- } catch {
141
- params.log?.warn?.(`SOUL_EVIL active (${decision.reason ?? "unknown"}) but file missing: ${evilPath}`);
142
- return params.files;
143
- }
144
- if (!evilContent.trim()) {
145
- params.log?.warn?.(`SOUL_EVIL active (${decision.reason ?? "unknown"}) but file empty: ${evilPath}`);
146
- return params.files;
147
- }
148
- if (!params.files.some((file) => file.name === "SOUL.md")) {
149
- params.log?.warn?.(`SOUL_EVIL active (${decision.reason ?? "unknown"}) but SOUL.md not in bootstrap files`);
150
- return params.files;
151
- }
152
- let replaced = false;
153
- const updated = params.files.map((file) => {
154
- if (file.name !== "SOUL.md") return file;
155
- replaced = true;
156
- return {
157
- ...file,
158
- content: evilContent,
159
- missing: false
160
- };
161
- });
162
- if (!replaced) return params.files;
163
- params.log?.debug?.(`SOUL_EVIL active (${decision.reason ?? "unknown"}) using ${decision.fileName}`);
164
- return updated;
165
- }
166
-
167
- //#endregion
168
- //#region src/hooks/bundled/soul-evil/handler.ts
169
- const HOOK_KEY = "soul-evil";
170
- const soulEvilHook = async (event) => {
171
- if (!isAgentBootstrapEvent(event)) return;
172
- const context = event.context;
173
- if (context.sessionKey && isSubagentSessionKey(context.sessionKey)) return;
174
- const cfg = context.cfg;
175
- const hookConfig = resolveHookConfig(cfg, HOOK_KEY);
176
- if (!hookConfig || hookConfig.enabled === false) return;
177
- const soulConfig = resolveSoulEvilConfigFromHook(hookConfig, { warn: (message) => console.warn(`[soul-evil] ${message}`) });
178
- if (!soulConfig) return;
179
- const workspaceDir = context.workspaceDir;
180
- if (!workspaceDir || !Array.isArray(context.bootstrapFiles)) return;
181
- context.bootstrapFiles = await applySoulEvilOverride({
182
- files: context.bootstrapFiles,
183
- workspaceDir,
184
- config: soulConfig,
185
- userTimezone: cfg?.agents?.defaults?.userTimezone,
186
- log: {
187
- warn: (message) => console.warn(`[soul-evil] ${message}`),
188
- debug: (message) => console.debug?.(`[soul-evil] ${message}`)
189
- }
190
- });
191
- };
192
-
193
- //#endregion
194
- export { soulEvilHook as default };