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,5 +1,5 @@
1
1
  import { s as resolveStateDir, u as resolveRequiredHomeDir } from "./paths-rb94mUrR.js";
2
- import { F as pathExists, R as resolveUserPath, t as runCommandWithTimeout } from "./exec-57A8Rlc8.js";
2
+ import { F as pathExists, R as resolveUserPath, t as runCommandWithTimeout } from "./exec-CJFFoM7H.js";
3
3
  import path from "node:path";
4
4
  import fs from "node:fs";
5
5
  import os from "node:os";
@@ -217,6 +217,10 @@ function findPackageRootSync(startDir, maxDepth = 12) {
217
217
  function candidateDirsFromArgv1(argv1) {
218
218
  const normalized = path.resolve(argv1);
219
219
  const candidates = [path.dirname(normalized)];
220
+ try {
221
+ const resolved = fs.realpathSync(normalized);
222
+ if (resolved !== normalized) candidates.push(path.dirname(resolved));
223
+ } catch {}
220
224
  const parts = normalized.split(path.sep);
221
225
  const binIndex = parts.lastIndexOf(".bin");
222
226
  if (binIndex > 0 && parts[binIndex - 1] === "node_modules") {
@@ -0,0 +1,60 @@
1
+ import "./paths-rb94mUrR.js";
2
+ import "./agent-scope-DPIFau3f.js";
3
+ import { J as logVerbose, X as shouldLogVerbose } from "./exec-CJFFoM7H.js";
4
+ import "./model-selection-C1GmkTAV.js";
5
+ import "./github-copilot-token-wCk9Fg_E.js";
6
+ import "./pi-embedded-helpers-CUzTc1v6.js";
7
+ import "./config-QYrbd7x7.js";
8
+ import "./pi-model-discovery-EhM2JAQo.js";
9
+ import "./chrome-DL0avO8n.js";
10
+ import "./paths-D0O87MfH.js";
11
+ import "./image-RKwc3fsL.js";
12
+ import "./redact-BIMJ3ntQ.js";
13
+ import "./fetch-timeout-DEoXG_SF.js";
14
+ import { a as runCapability, l as isAudioAttachment, n as createMediaAttachmentCache, r as normalizeMediaAttachments, t as buildProviderRegistry } from "./runner-DrGYLH5K.js";
15
+
16
+ //#region src/media-understanding/audio-preflight.ts
17
+ /**
18
+ * Transcribes the first audio attachment BEFORE mention checking.
19
+ * This allows voice notes to be processed in group chats with requireMention: true.
20
+ * Returns the transcript or undefined if transcription fails or no audio is found.
21
+ */
22
+ async function transcribeFirstAudio(params) {
23
+ const { ctx, cfg } = params;
24
+ const audioConfig = cfg.tools?.media?.audio;
25
+ if (!audioConfig || audioConfig.enabled === false) return;
26
+ const attachments = normalizeMediaAttachments(ctx);
27
+ if (!attachments || attachments.length === 0) return;
28
+ const firstAudio = attachments.find((att) => att && isAudioAttachment(att) && !att.alreadyTranscribed);
29
+ if (!firstAudio) return;
30
+ if (shouldLogVerbose()) logVerbose(`audio-preflight: transcribing attachment ${firstAudio.index} for mention check`);
31
+ const providerRegistry = buildProviderRegistry(params.providers);
32
+ const cache = createMediaAttachmentCache(attachments);
33
+ try {
34
+ const result = await runCapability({
35
+ capability: "audio",
36
+ cfg,
37
+ ctx,
38
+ attachments: cache,
39
+ media: attachments,
40
+ agentDir: params.agentDir,
41
+ providerRegistry,
42
+ config: audioConfig,
43
+ activeModel: params.activeModel
44
+ });
45
+ if (!result || result.outputs.length === 0) return;
46
+ const audioOutput = result.outputs.find((output) => output.kind === "audio.transcription");
47
+ if (!audioOutput || !audioOutput.text) return;
48
+ firstAudio.alreadyTranscribed = true;
49
+ if (shouldLogVerbose()) logVerbose(`audio-preflight: transcribed ${audioOutput.text.length} chars from attachment ${firstAudio.index}`);
50
+ return audioOutput.text;
51
+ } catch (err) {
52
+ if (shouldLogVerbose()) logVerbose(`audio-preflight: transcription failed: ${String(err)}`);
53
+ return;
54
+ } finally {
55
+ await cache.cleanup();
56
+ }
57
+ }
58
+
59
+ //#endregion
60
+ export { transcribeFirstAudio };
@@ -0,0 +1,60 @@
1
+ import "./paths-BZtyHNCi.js";
2
+ import "./agent-scope-BIEhVP4_.js";
3
+ import { Y as logVerbose, Z as shouldLogVerbose } from "./exec-B8lXct-k.js";
4
+ import "./pi-embedded-helpers-WDwx99UA.js";
5
+ import "./model-auth-CabXIF6O.js";
6
+ import "./config-BvMsmctM.js";
7
+ import "./github-copilot-token-DkiRbJdR.js";
8
+ import "./pi-model-discovery-DqgqUyAv.js";
9
+ import "./chrome-BfB6JdKF.js";
10
+ import "./paths-B0a4ywSO.js";
11
+ import "./image-Brk1sJbw.js";
12
+ import "./redact-BrXLgslJ.js";
13
+ import "./fetch-timeout-BEtUjM1S.js";
14
+ import { a as runCapability, l as isAudioAttachment, n as createMediaAttachmentCache, r as normalizeMediaAttachments, t as buildProviderRegistry } from "./runner-Cfm5nTMc.js";
15
+
16
+ //#region src/media-understanding/audio-preflight.ts
17
+ /**
18
+ * Transcribes the first audio attachment BEFORE mention checking.
19
+ * This allows voice notes to be processed in group chats with requireMention: true.
20
+ * Returns the transcript or undefined if transcription fails or no audio is found.
21
+ */
22
+ async function transcribeFirstAudio(params) {
23
+ const { ctx, cfg } = params;
24
+ const audioConfig = cfg.tools?.media?.audio;
25
+ if (!audioConfig || audioConfig.enabled === false) return;
26
+ const attachments = normalizeMediaAttachments(ctx);
27
+ if (!attachments || attachments.length === 0) return;
28
+ const firstAudio = attachments.find((att) => att && isAudioAttachment(att) && !att.alreadyTranscribed);
29
+ if (!firstAudio) return;
30
+ if (shouldLogVerbose()) logVerbose(`audio-preflight: transcribing attachment ${firstAudio.index} for mention check`);
31
+ const providerRegistry = buildProviderRegistry(params.providers);
32
+ const cache = createMediaAttachmentCache(attachments);
33
+ try {
34
+ const result = await runCapability({
35
+ capability: "audio",
36
+ cfg,
37
+ ctx,
38
+ attachments: cache,
39
+ media: attachments,
40
+ agentDir: params.agentDir,
41
+ providerRegistry,
42
+ config: audioConfig,
43
+ activeModel: params.activeModel
44
+ });
45
+ if (!result || result.outputs.length === 0) return;
46
+ const audioOutput = result.outputs.find((output) => output.kind === "audio.transcription");
47
+ if (!audioOutput || !audioOutput.text) return;
48
+ firstAudio.alreadyTranscribed = true;
49
+ if (shouldLogVerbose()) logVerbose(`audio-preflight: transcribed ${audioOutput.text.length} chars from attachment ${firstAudio.index}`);
50
+ return audioOutput.text;
51
+ } catch (err) {
52
+ if (shouldLogVerbose()) logVerbose(`audio-preflight: transcription failed: ${String(err)}`);
53
+ return;
54
+ } finally {
55
+ await cache.cleanup();
56
+ }
57
+ }
58
+
59
+ //#endregion
60
+ export { transcribeFirstAudio };
@@ -0,0 +1,74 @@
1
+ import "./paths-DVBShlw6.js";
2
+ import { A as logVerbose, N as shouldLogVerbose } from "./subsystem-BoExtIHo.js";
3
+ import "./utils-Cd9QdCHh.js";
4
+ import "./pi-embedded-helpers-CMKLjW6X.js";
5
+ import "./exec-YIosokWE.js";
6
+ import "./agent-scope-CQCus0rI.js";
7
+ import "./model-selection-BLuqsGVB.js";
8
+ import "./github-copilot-token-BW-SEg7E.js";
9
+ import "./boolean-BgXe2hyu.js";
10
+ import "./env-ONzUVAG2.js";
11
+ import "./config-aFQssWKX.js";
12
+ import "./manifest-registry-CQhdnDBZ.js";
13
+ import "./plugins-X7d_tfTE.js";
14
+ import "./sandbox-Bhjnh1Xg.js";
15
+ import { a as runCapability, l as isAudioAttachment, n as createMediaAttachmentCache, r as normalizeMediaAttachments, t as buildProviderRegistry } from "./runner-D_dujMod.js";
16
+ import "./image-C4Nn2p3e.js";
17
+ import "./pi-model-discovery-EwKVHlZB.js";
18
+ import "./chrome-Cvr-57lg.js";
19
+ import "./skills-DprQj9X2.js";
20
+ import "./routes-CmOI1hIH.js";
21
+ import "./server-context-Cl0U0vE3.js";
22
+ import "./message-channel-BLi2a6Yw.js";
23
+ import "./logging-fywhKCmE.js";
24
+ import "./accounts-DeqIQjo1.js";
25
+ import "./paths-B49s6UZQ.js";
26
+ import "./redact-BRsnXqwD.js";
27
+ import "./tool-display-CZRIDMRm.js";
28
+ import "./fetch-DmiOpALK.js";
29
+
30
+ //#region src/media-understanding/audio-preflight.ts
31
+ /**
32
+ * Transcribes the first audio attachment BEFORE mention checking.
33
+ * This allows voice notes to be processed in group chats with requireMention: true.
34
+ * Returns the transcript or undefined if transcription fails or no audio is found.
35
+ */
36
+ async function transcribeFirstAudio(params) {
37
+ const { ctx, cfg } = params;
38
+ const audioConfig = cfg.tools?.media?.audio;
39
+ if (!audioConfig || audioConfig.enabled === false) return;
40
+ const attachments = normalizeMediaAttachments(ctx);
41
+ if (!attachments || attachments.length === 0) return;
42
+ const firstAudio = attachments.find((att) => att && isAudioAttachment(att) && !att.alreadyTranscribed);
43
+ if (!firstAudio) return;
44
+ if (shouldLogVerbose()) logVerbose(`audio-preflight: transcribing attachment ${firstAudio.index} for mention check`);
45
+ const providerRegistry = buildProviderRegistry(params.providers);
46
+ const cache = createMediaAttachmentCache(attachments);
47
+ try {
48
+ const result = await runCapability({
49
+ capability: "audio",
50
+ cfg,
51
+ ctx,
52
+ attachments: cache,
53
+ media: attachments,
54
+ agentDir: params.agentDir,
55
+ providerRegistry,
56
+ config: audioConfig,
57
+ activeModel: params.activeModel
58
+ });
59
+ if (!result || result.outputs.length === 0) return;
60
+ const audioOutput = result.outputs.find((output) => output.kind === "audio.transcription");
61
+ if (!audioOutput || !audioOutput.text) return;
62
+ firstAudio.alreadyTranscribed = true;
63
+ if (shouldLogVerbose()) logVerbose(`audio-preflight: transcribed ${audioOutput.text.length} chars from attachment ${firstAudio.index}`);
64
+ return audioOutput.text;
65
+ } catch (err) {
66
+ if (shouldLogVerbose()) logVerbose(`audio-preflight: transcription failed: ${String(err)}`);
67
+ return;
68
+ } finally {
69
+ await cache.cleanup();
70
+ }
71
+ }
72
+
73
+ //#endregion
74
+ export { transcribeFirstAudio };
@@ -0,0 +1,71 @@
1
+ import { S as logVerbose, T as shouldLogVerbose } from "./entry.js";
2
+ import "./auth-profiles-ByNs3eEm.js";
3
+ import "./utils-BLJAc3ZV.js";
4
+ import "./exec-CACT5OAW.js";
5
+ import "./agent-scope-CsRbLH4l.js";
6
+ import "./github-copilot-token-Cfs0Wxr8.js";
7
+ import "./pi-model-discovery-DzEIEgHL.js";
8
+ import "./config-Bdhomfei.js";
9
+ import "./manifest-registry-u0okVSkU.js";
10
+ import "./server-context-BGpGs3qd.js";
11
+ import "./chrome-foEwx3lN.js";
12
+ import "./message-channel-C_MmebBt.js";
13
+ import "./plugins-4Hqd1WGf.js";
14
+ import "./logging-CfEk_PnX.js";
15
+ import "./accounts-DCDeFTra.js";
16
+ import "./paths-DLINmNFQ.js";
17
+ import "./redact-Br9GfacZ.js";
18
+ import "./routes-DewK5tq2.js";
19
+ import "./pi-embedded-helpers-DfwkwPYD.js";
20
+ import "./fetch-timeout-DTK9vxex.js";
21
+ import "./sandbox-BKYnhYQH.js";
22
+ import "./skills-DRjfSQT3.js";
23
+ import "./image-DgtfXMcX.js";
24
+ import "./tool-display-ClRud3pg.js";
25
+ import { a as runCapability, n as createMediaAttachmentCache, o as isAudioAttachment, r as normalizeMediaAttachments, t as buildProviderRegistry } from "./runner-CY0nmVme.js";
26
+
27
+ //#region src/media-understanding/audio-preflight.ts
28
+ /**
29
+ * Transcribes the first audio attachment BEFORE mention checking.
30
+ * This allows voice notes to be processed in group chats with requireMention: true.
31
+ * Returns the transcript or undefined if transcription fails or no audio is found.
32
+ */
33
+ async function transcribeFirstAudio(params) {
34
+ const { ctx, cfg } = params;
35
+ const audioConfig = cfg.tools?.media?.audio;
36
+ if (!audioConfig || audioConfig.enabled === false) return;
37
+ const attachments = normalizeMediaAttachments(ctx);
38
+ if (!attachments || attachments.length === 0) return;
39
+ const firstAudio = attachments.find((att) => att && isAudioAttachment(att) && !att.alreadyTranscribed);
40
+ if (!firstAudio) return;
41
+ if (shouldLogVerbose()) logVerbose(`audio-preflight: transcribing attachment ${firstAudio.index} for mention check`);
42
+ const providerRegistry = buildProviderRegistry(params.providers);
43
+ const cache = createMediaAttachmentCache(attachments);
44
+ try {
45
+ const result = await runCapability({
46
+ capability: "audio",
47
+ cfg,
48
+ ctx,
49
+ attachments: cache,
50
+ media: attachments,
51
+ agentDir: params.agentDir,
52
+ providerRegistry,
53
+ config: audioConfig,
54
+ activeModel: params.activeModel
55
+ });
56
+ if (!result || result.outputs.length === 0) return;
57
+ const audioOutput = result.outputs.find((output) => output.kind === "audio.transcription");
58
+ if (!audioOutput || !audioOutput.text) return;
59
+ firstAudio.alreadyTranscribed = true;
60
+ if (shouldLogVerbose()) logVerbose(`audio-preflight: transcribed ${audioOutput.text.length} chars from attachment ${firstAudio.index}`);
61
+ return audioOutput.text;
62
+ } catch (err) {
63
+ if (shouldLogVerbose()) logVerbose(`audio-preflight: transcription failed: ${String(err)}`);
64
+ return;
65
+ } finally {
66
+ await cache.cleanup();
67
+ }
68
+ }
69
+
70
+ //#endregion
71
+ export { transcribeFirstAudio };
@@ -1,23 +1,24 @@
1
1
  import { g as resolveStateDir, m as resolveOAuthDir, o as resolveConfigPath } from "./paths-DVBShlw6.js";
2
2
  import { l as normalizeAgentId } from "./session-key-BWxPj0z_.js";
3
- import { n as runExec } from "./exec-Cv_Ofd1m.js";
4
- import { c as resolveDefaultAgentId, s as resolveAgentWorkspaceDir } from "./agent-scope-CGmuusG9.js";
3
+ import { n as runExec } from "./exec-YIosokWE.js";
4
+ import { c as resolveDefaultAgentId, s as resolveAgentWorkspaceDir } from "./agent-scope-CQCus0rI.js";
5
5
  import { t as formatCliCommand } from "./command-format-ChfKqObn.js";
6
- import { D as INCLUDE_KEY, O as MAX_INCLUDE_DEPTH, r as createConfigIO } from "./config--NUdpACy.js";
7
- import { a as MANIFEST_KEY } from "./manifest-registry-3It8Z8yN.js";
8
- import { n as listChannelPlugins } from "./plugins-CNaHNND_.js";
9
- import { $ as resolveSandboxToolPolicyForAgent, Z as resolveSandboxConfigForAgent, ot as resolveToolProfilePolicy } from "./sandbox-DqUO2K83.js";
10
- import { i as loadWorkspaceSkillEntries } from "./skills-ccAgQ3Ad.js";
11
- import { n as formatErrorMessage } from "./errors-B0eT3jVv.js";
12
- import { a as resolveProfile, i as resolveBrowserConfig } from "./server-context-8Qt35QdF.js";
13
- import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-Cu61-7H6.js";
14
- import { t as GatewayClient } from "./client-6xKrRC-1.js";
15
- import { t as buildGatewayConnectionDetails } from "./call-Bek1xlgk.js";
16
- import { i as readChannelAllowFromStore } from "./pairing-store-c-QQ2u8p.js";
17
- import { c as resolveNativeSkillsEnabled, n as isToolAllowedByPolicies, s as resolveNativeCommandsEnabled } from "./pi-tools.policy-akYsGFiA.js";
18
- import { t as resolveChannelDefaultAccountId } from "./helpers-C89IG08W.js";
19
- import { t as scanDirectoryWithSummary } from "./skill-scanner-DrVEHfC6.js";
20
- import { i as resolveGatewayAuth } from "./auth-BvIPpm7G.js";
6
+ import { D as INCLUDE_KEY, O as MAX_INCLUDE_DEPTH, r as createConfigIO } from "./config-aFQssWKX.js";
7
+ import { a as MANIFEST_KEY } from "./manifest-registry-CQhdnDBZ.js";
8
+ import { n as listChannelPlugins } from "./plugins-X7d_tfTE.js";
9
+ import { $ as resolveSandboxToolPolicyForAgent, Z as resolveSandboxConfigForAgent, ot as resolveToolProfilePolicy } from "./sandbox-Bhjnh1Xg.js";
10
+ import { i as loadWorkspaceSkillEntries } from "./skills-DprQj9X2.js";
11
+ import { n as formatErrorMessage } from "./errors-Bv81hF2P.js";
12
+ import { a as resolveProfile, i as resolveBrowserConfig } from "./server-context-Cl0U0vE3.js";
13
+ import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-BLi2a6Yw.js";
14
+ import { t as GatewayClient } from "./client-BrYfyoDK.js";
15
+ import { t as buildGatewayConnectionDetails } from "./call-SolyGS1r.js";
16
+ import { i as readChannelAllowFromStore } from "./pairing-store-CmlRVqOz.js";
17
+ import { c as resolveNativeSkillsEnabled, n as isToolAllowedByPolicies, s as resolveNativeCommandsEnabled } from "./pi-tools.policy-BpsROZbz.js";
18
+ import { i as resolveGatewayAuth } from "./auth-CQNl_IaI.js";
19
+ import { n as resolveBrowserControlAuth } from "./control-auth-DBCu3qyv.js";
20
+ import { t as resolveChannelDefaultAccountId } from "./helpers-HyeZXsnu.js";
21
+ import { t as scanDirectoryWithSummary } from "./skill-scanner-CucvxYhu.js";
21
22
  import os from "node:os";
22
23
  import path from "node:path";
23
24
  import JSON5 from "json5";
@@ -143,6 +144,11 @@ function looksLikeEnvRef(value) {
143
144
  const v = value.trim();
144
145
  return v.startsWith("${") && v.endsWith("}");
145
146
  }
147
+ function isGatewayRemotelyExposed(cfg) {
148
+ if ((typeof cfg.gateway?.bind === "string" ? cfg.gateway.bind : "loopback") !== "loopback") return true;
149
+ const tailscaleMode = cfg.gateway?.tailscale?.mode ?? "off";
150
+ return tailscaleMode === "serve" || tailscaleMode === "funnel";
151
+ }
146
152
  function addModel(models, raw, source) {
147
153
  if (typeof raw !== "string") return;
148
154
  const id = raw.trim();
@@ -353,6 +359,31 @@ function collectHooksHardeningFindings(cfg) {
353
359
  detail: "hooks.path='/' would shadow other HTTP endpoints and is unsafe.",
354
360
  remediation: "Use a dedicated path like '/hooks'."
355
361
  });
362
+ const allowRequestSessionKey = cfg.hooks?.allowRequestSessionKey === true;
363
+ const defaultSessionKey = typeof cfg.hooks?.defaultSessionKey === "string" ? cfg.hooks.defaultSessionKey.trim() : "";
364
+ const allowedPrefixes = Array.isArray(cfg.hooks?.allowedSessionKeyPrefixes) ? cfg.hooks.allowedSessionKeyPrefixes.map((prefix) => prefix.trim()).filter((prefix) => prefix.length > 0) : [];
365
+ const remoteExposure = isGatewayRemotelyExposed(cfg);
366
+ if (!defaultSessionKey) findings.push({
367
+ checkId: "hooks.default_session_key_unset",
368
+ severity: "warn",
369
+ title: "hooks.defaultSessionKey is not configured",
370
+ detail: "Hook agent runs without explicit sessionKey use generated per-request keys. Set hooks.defaultSessionKey to keep hook ingress scoped to a known session.",
371
+ remediation: "Set hooks.defaultSessionKey (for example, \"hook:ingress\")."
372
+ });
373
+ if (allowRequestSessionKey) findings.push({
374
+ checkId: "hooks.request_session_key_enabled",
375
+ severity: remoteExposure ? "critical" : "warn",
376
+ title: "External hook payloads may override sessionKey",
377
+ detail: "hooks.allowRequestSessionKey=true allows `/hooks/agent` callers to choose the session key. Treat hook token holders as full-trust unless you also restrict prefixes.",
378
+ remediation: "Set hooks.allowRequestSessionKey=false (recommended) or constrain hooks.allowedSessionKeyPrefixes."
379
+ });
380
+ if (allowRequestSessionKey && allowedPrefixes.length === 0) findings.push({
381
+ checkId: "hooks.request_session_key_prefixes_missing",
382
+ severity: remoteExposure ? "critical" : "warn",
383
+ title: "Request sessionKey override is enabled without prefix restrictions",
384
+ detail: "hooks.allowRequestSessionKey=true and hooks.allowedSessionKeyPrefixes is unset/empty, so request payloads can target arbitrary session key shapes.",
385
+ remediation: "Set hooks.allowedSessionKeyPrefixes (for example, [\"hook:\"]) or disable request overrides."
386
+ });
356
387
  return findings;
357
388
  }
358
389
  function collectModelHygieneFindings(cfg) {
@@ -1361,6 +1392,7 @@ function collectGatewayConfigFindings(cfg, env) {
1361
1392
  const hasSharedSecret = auth.mode === "token" && hasToken || auth.mode === "password" && hasPassword;
1362
1393
  const hasTailscaleAuth = auth.allowTailscale && tailscaleMode === "serve";
1363
1394
  const hasGatewayAuth = hasSharedSecret || hasTailscaleAuth;
1395
+ const remotelyExposed = bind !== "loopback" || tailscaleMode === "serve" || tailscaleMode === "funnel";
1364
1396
  if (bind !== "loopback" && !hasSharedSecret) findings.push({
1365
1397
  checkId: "gateway.bind_no_auth",
1366
1398
  severity: "critical",
@@ -1416,9 +1448,21 @@ function collectGatewayConfigFindings(cfg, env) {
1416
1448
  title: "Gateway token looks short",
1417
1449
  detail: `gateway auth token is ${token.length} chars; prefer a long random token.`
1418
1450
  });
1451
+ const chatCompletionsEnabled = cfg.gateway?.http?.endpoints?.chatCompletions?.enabled === true;
1452
+ const responsesEnabled = cfg.gateway?.http?.endpoints?.responses?.enabled === true;
1453
+ if (chatCompletionsEnabled || responsesEnabled) {
1454
+ const enabledEndpoints = [chatCompletionsEnabled ? "/v1/chat/completions" : null, responsesEnabled ? "/v1/responses" : null].filter((value) => Boolean(value));
1455
+ findings.push({
1456
+ checkId: "gateway.http.session_key_override_enabled",
1457
+ severity: remotelyExposed ? "warn" : "info",
1458
+ title: "HTTP APIs accept explicit session key override headers",
1459
+ detail: `${enabledEndpoints.join(", ")} support x-openclaw-session-key. Any authenticated caller can route requests into arbitrary sessions.`,
1460
+ remediation: "Treat HTTP API credentials as full-trust, disable unused endpoints, and avoid sharing tokens across tenants."
1461
+ });
1462
+ }
1419
1463
  return findings;
1420
1464
  }
1421
- function collectBrowserControlFindings(cfg) {
1465
+ function collectBrowserControlFindings(cfg, env) {
1422
1466
  const findings = [];
1423
1467
  let resolved;
1424
1468
  try {
@@ -1434,6 +1478,14 @@ function collectBrowserControlFindings(cfg) {
1434
1478
  return findings;
1435
1479
  }
1436
1480
  if (!resolved.enabled) return findings;
1481
+ const browserAuth = resolveBrowserControlAuth(cfg, env);
1482
+ if (!browserAuth.token && !browserAuth.password) findings.push({
1483
+ checkId: "browser.control_no_auth",
1484
+ severity: "critical",
1485
+ title: "Browser control has no auth",
1486
+ detail: "Browser control HTTP routes are enabled but no gateway.auth token/password is configured. Any local process (or SSRF to loopback) can call browser control endpoints.",
1487
+ remediation: "Set gateway.auth.token (recommended) or gateway.auth.password so browser control HTTP routes require authentication. Restarting the gateway will auto-generate gateway.auth.token when browser control is enabled."
1488
+ });
1437
1489
  for (const name of Object.keys(resolved.profiles)) {
1438
1490
  const profile = resolveProfile(resolved, name);
1439
1491
  if (!profile || profile.cdpIsLoopback) continue;
@@ -1778,7 +1830,7 @@ async function runSecurityAudit(opts) {
1778
1830
  configPath
1779
1831
  }));
1780
1832
  findings.push(...collectGatewayConfigFindings(cfg, env));
1781
- findings.push(...collectBrowserControlFindings(cfg));
1833
+ findings.push(...collectBrowserControlFindings(cfg, env));
1782
1834
  findings.push(...collectLoggingFindings(cfg));
1783
1835
  findings.push(...collectElevatedFindings(cfg));
1784
1836
  findings.push(...collectHooksHardeningFindings(cfg));
@@ -1,23 +1,24 @@
1
- import { B as resolveConfigPath, J as resolveOAuthDir, X as resolveStateDir } from "./entry.js";
2
- import { t as formatCliCommand } from "./command-format-ayFsmwwz.js";
1
+ import { V as resolveConfigPath, Y as resolveOAuthDir, Z as resolveStateDir } from "./entry.js";
2
+ import { t as formatCliCommand } from "./command-format-Bxe0mWee.js";
3
3
  import { l as normalizeAgentId } from "./session-key-DVvxnFKg.js";
4
- import { n as runExec } from "./exec-B8JKbXKW.js";
5
- import { c as resolveDefaultAgentId, s as resolveAgentWorkspaceDir } from "./agent-scope-DQuy3dwI.js";
6
- import { D as INCLUDE_KEY, O as MAX_INCLUDE_DEPTH, r as createConfigIO } from "./config-B00lvFac.js";
7
- import { a as MANIFEST_KEY } from "./manifest-registry-D5SiA3xq.js";
8
- import { a as resolveBrowserConfig, o as resolveProfile } from "./server-context-fX4xiYRh.js";
9
- import { n as formatErrorMessage } from "./errors-x4NYs-1P.js";
10
- import { i as resolveGatewayAuth } from "./auth-BcNHFK-i.js";
11
- import { t as GatewayClient } from "./client-DMloFP_O.js";
12
- import { t as buildGatewayConnectionDetails } from "./call-7yrB6v4I.js";
13
- import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-BlgPSDAh.js";
14
- import { n as listChannelPlugins } from "./plugins-Db5BiELK.js";
4
+ import { n as runExec } from "./exec-CACT5OAW.js";
5
+ import { c as resolveDefaultAgentId, s as resolveAgentWorkspaceDir } from "./agent-scope-CsRbLH4l.js";
6
+ import { D as INCLUDE_KEY, O as MAX_INCLUDE_DEPTH, r as createConfigIO } from "./config-Bdhomfei.js";
7
+ import { a as MANIFEST_KEY } from "./manifest-registry-u0okVSkU.js";
8
+ import { a as resolveBrowserConfig, o as resolveProfile } from "./server-context-BGpGs3qd.js";
9
+ import { i as resolveGatewayAuth } from "./auth-9x3lqfIY.js";
10
+ import { n as resolveBrowserControlAuth } from "./control-auth-8Cf4WXpR.js";
11
+ import { n as formatErrorMessage } from "./errors-DjZBTJJ3.js";
12
+ import { t as GatewayClient } from "./client-CTwXnRl7.js";
13
+ import { t as buildGatewayConnectionDetails } from "./call-DVYCIV8m.js";
14
+ import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-C_MmebBt.js";
15
+ import { n as listChannelPlugins } from "./plugins-4Hqd1WGf.js";
15
16
  import { t as resolveChannelDefaultAccountId } from "./helpers-DdwqKAAS.js";
16
- import { t as scanDirectoryWithSummary } from "./skill-scanner-C_fQzVDu.js";
17
- import { G as resolveSandboxToolPolicyForAgent, Q as resolveToolProfilePolicy, U as resolveSandboxConfigForAgent } from "./sandbox-Aks-9EcZ.js";
18
- import { i as loadWorkspaceSkillEntries } from "./skills-D5UZZZSY.js";
19
- import { a as isToolAllowedByPolicies, n as resolveNativeCommandsEnabled, r as resolveNativeSkillsEnabled } from "./commands-CjEGXOZ_.js";
20
- import { i as readChannelAllowFromStore } from "./pairing-store-CgXR3ZWJ.js";
17
+ import { t as scanDirectoryWithSummary } from "./skill-scanner-rHMtUHtP.js";
18
+ import { G as resolveSandboxToolPolicyForAgent, Q as resolveToolProfilePolicy, U as resolveSandboxConfigForAgent } from "./sandbox-BKYnhYQH.js";
19
+ import { i as loadWorkspaceSkillEntries } from "./skills-DRjfSQT3.js";
20
+ import { a as isToolAllowedByPolicies, n as resolveNativeCommandsEnabled, r as resolveNativeSkillsEnabled } from "./commands-BX_OIIVR.js";
21
+ import { i as readChannelAllowFromStore } from "./pairing-store-Dp5_JGnG.js";
21
22
  import path from "node:path";
22
23
  import os from "node:os";
23
24
  import JSON5 from "json5";
@@ -143,6 +144,11 @@ function looksLikeEnvRef(value) {
143
144
  const v = value.trim();
144
145
  return v.startsWith("${") && v.endsWith("}");
145
146
  }
147
+ function isGatewayRemotelyExposed(cfg) {
148
+ if ((typeof cfg.gateway?.bind === "string" ? cfg.gateway.bind : "loopback") !== "loopback") return true;
149
+ const tailscaleMode = cfg.gateway?.tailscale?.mode ?? "off";
150
+ return tailscaleMode === "serve" || tailscaleMode === "funnel";
151
+ }
146
152
  function addModel(models, raw, source) {
147
153
  if (typeof raw !== "string") return;
148
154
  const id = raw.trim();
@@ -353,6 +359,31 @@ function collectHooksHardeningFindings(cfg) {
353
359
  detail: "hooks.path='/' would shadow other HTTP endpoints and is unsafe.",
354
360
  remediation: "Use a dedicated path like '/hooks'."
355
361
  });
362
+ const allowRequestSessionKey = cfg.hooks?.allowRequestSessionKey === true;
363
+ const defaultSessionKey = typeof cfg.hooks?.defaultSessionKey === "string" ? cfg.hooks.defaultSessionKey.trim() : "";
364
+ const allowedPrefixes = Array.isArray(cfg.hooks?.allowedSessionKeyPrefixes) ? cfg.hooks.allowedSessionKeyPrefixes.map((prefix) => prefix.trim()).filter((prefix) => prefix.length > 0) : [];
365
+ const remoteExposure = isGatewayRemotelyExposed(cfg);
366
+ if (!defaultSessionKey) findings.push({
367
+ checkId: "hooks.default_session_key_unset",
368
+ severity: "warn",
369
+ title: "hooks.defaultSessionKey is not configured",
370
+ detail: "Hook agent runs without explicit sessionKey use generated per-request keys. Set hooks.defaultSessionKey to keep hook ingress scoped to a known session.",
371
+ remediation: "Set hooks.defaultSessionKey (for example, \"hook:ingress\")."
372
+ });
373
+ if (allowRequestSessionKey) findings.push({
374
+ checkId: "hooks.request_session_key_enabled",
375
+ severity: remoteExposure ? "critical" : "warn",
376
+ title: "External hook payloads may override sessionKey",
377
+ detail: "hooks.allowRequestSessionKey=true allows `/hooks/agent` callers to choose the session key. Treat hook token holders as full-trust unless you also restrict prefixes.",
378
+ remediation: "Set hooks.allowRequestSessionKey=false (recommended) or constrain hooks.allowedSessionKeyPrefixes."
379
+ });
380
+ if (allowRequestSessionKey && allowedPrefixes.length === 0) findings.push({
381
+ checkId: "hooks.request_session_key_prefixes_missing",
382
+ severity: remoteExposure ? "critical" : "warn",
383
+ title: "Request sessionKey override is enabled without prefix restrictions",
384
+ detail: "hooks.allowRequestSessionKey=true and hooks.allowedSessionKeyPrefixes is unset/empty, so request payloads can target arbitrary session key shapes.",
385
+ remediation: "Set hooks.allowedSessionKeyPrefixes (for example, [\"hook:\"]) or disable request overrides."
386
+ });
356
387
  return findings;
357
388
  }
358
389
  function collectModelHygieneFindings(cfg) {
@@ -1361,6 +1392,7 @@ function collectGatewayConfigFindings(cfg, env) {
1361
1392
  const hasSharedSecret = auth.mode === "token" && hasToken || auth.mode === "password" && hasPassword;
1362
1393
  const hasTailscaleAuth = auth.allowTailscale && tailscaleMode === "serve";
1363
1394
  const hasGatewayAuth = hasSharedSecret || hasTailscaleAuth;
1395
+ const remotelyExposed = bind !== "loopback" || tailscaleMode === "serve" || tailscaleMode === "funnel";
1364
1396
  if (bind !== "loopback" && !hasSharedSecret) findings.push({
1365
1397
  checkId: "gateway.bind_no_auth",
1366
1398
  severity: "critical",
@@ -1416,9 +1448,21 @@ function collectGatewayConfigFindings(cfg, env) {
1416
1448
  title: "Gateway token looks short",
1417
1449
  detail: `gateway auth token is ${token.length} chars; prefer a long random token.`
1418
1450
  });
1451
+ const chatCompletionsEnabled = cfg.gateway?.http?.endpoints?.chatCompletions?.enabled === true;
1452
+ const responsesEnabled = cfg.gateway?.http?.endpoints?.responses?.enabled === true;
1453
+ if (chatCompletionsEnabled || responsesEnabled) {
1454
+ const enabledEndpoints = [chatCompletionsEnabled ? "/v1/chat/completions" : null, responsesEnabled ? "/v1/responses" : null].filter((value) => Boolean(value));
1455
+ findings.push({
1456
+ checkId: "gateway.http.session_key_override_enabled",
1457
+ severity: remotelyExposed ? "warn" : "info",
1458
+ title: "HTTP APIs accept explicit session key override headers",
1459
+ detail: `${enabledEndpoints.join(", ")} support x-openclaw-session-key. Any authenticated caller can route requests into arbitrary sessions.`,
1460
+ remediation: "Treat HTTP API credentials as full-trust, disable unused endpoints, and avoid sharing tokens across tenants."
1461
+ });
1462
+ }
1419
1463
  return findings;
1420
1464
  }
1421
- function collectBrowserControlFindings(cfg) {
1465
+ function collectBrowserControlFindings(cfg, env) {
1422
1466
  const findings = [];
1423
1467
  let resolved;
1424
1468
  try {
@@ -1434,6 +1478,14 @@ function collectBrowserControlFindings(cfg) {
1434
1478
  return findings;
1435
1479
  }
1436
1480
  if (!resolved.enabled) return findings;
1481
+ const browserAuth = resolveBrowserControlAuth(cfg, env);
1482
+ if (!browserAuth.token && !browserAuth.password) findings.push({
1483
+ checkId: "browser.control_no_auth",
1484
+ severity: "critical",
1485
+ title: "Browser control has no auth",
1486
+ detail: "Browser control HTTP routes are enabled but no gateway.auth token/password is configured. Any local process (or SSRF to loopback) can call browser control endpoints.",
1487
+ remediation: "Set gateway.auth.token (recommended) or gateway.auth.password so browser control HTTP routes require authentication. Restarting the gateway will auto-generate gateway.auth.token when browser control is enabled."
1488
+ });
1437
1489
  for (const name of Object.keys(resolved.profiles)) {
1438
1490
  const profile = resolveProfile(resolved, name);
1439
1491
  if (!profile || profile.cdpIsLoopback) continue;
@@ -1778,7 +1830,7 @@ async function runSecurityAudit(opts) {
1778
1830
  configPath
1779
1831
  }));
1780
1832
  findings.push(...collectGatewayConfigFindings(cfg, env));
1781
- findings.push(...collectBrowserControlFindings(cfg));
1833
+ findings.push(...collectBrowserControlFindings(cfg, env));
1782
1834
  findings.push(...collectLoggingFindings(cfg));
1783
1835
  findings.push(...collectElevatedFindings(cfg));
1784
1836
  findings.push(...collectHooksHardeningFindings(cfg));