activeclaw 2026.2.12 → 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 (364) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/{accounts-DbzMEfKN.js → accounts-DCDeFTra.js} +2 -2
  3. package/dist/{accounts-DimKrt7j.js → accounts-DeqIQjo1.js} +2 -2
  4. package/dist/{acp-cli-Cs1ai4XO.js → acp-cli-CeYI4XRd.js} +15 -16
  5. package/dist/{acp-cli-oV2dodPg.js → acp-cli-rNbGXICg.js} +14 -15
  6. package/dist/{agent-BndgzkUe.js → agent-BvNJF5QL.js} +19 -16
  7. package/dist/{agent-DZvDwqnd.js → agent-CyMxTyrG.js} +20 -17
  8. package/dist/{agent-scope-rXQ7WARN.js → agent-scope-BIEhVP4_.js} +1 -1
  9. package/dist/{agent-scope---6LLHj0.js → agent-scope-CQCus0rI.js} +2 -2
  10. package/dist/{agent-scope-RCSw6gHy.js → agent-scope-CsRbLH4l.js} +3 -3
  11. package/dist/{agent-scope-CN8DM4Xb.js → agent-scope-DPIFau3f.js} +1 -1
  12. package/dist/{audio-preflight-SZRntkxo.js → audio-preflight-BU8W7uxc.js} +10 -10
  13. package/dist/{audio-preflight-ClVNINDs.js → audio-preflight-CGsumMzb.js} +10 -10
  14. package/dist/{audio-preflight-txAP3v-C.js → audio-preflight-SLmkJI6-.js} +22 -22
  15. package/dist/{audio-preflight-BP6s-UPp.js → audio-preflight-jZc5mFCZ.js} +23 -23
  16. package/dist/{audit-CQzrm61N.js → audit-Dmww_503.js} +70 -18
  17. package/dist/{audit-DMH3CSXY.js → audit-wPu26VMb.js} +72 -20
  18. package/dist/{tailscale-DU6DgqVy.js → auth-9x3lqfIY.js} +208 -3
  19. package/dist/{tailscale-DHfcfRCx.js → auth-CQNl_IaI.js} +190 -3
  20. package/dist/{auth-health-BB3e3OmN.js → auth-health-C4L4FGBA.js} +1 -1
  21. package/dist/{auth-health-zZ9dnQGC.js → auth-health-j6epgQbq.js} +1 -1
  22. package/dist/{auth-profiles-CcJ3hrog.js → auth-profiles-ByNs3eEm.js} +60 -22
  23. package/dist/build-info.json +3 -3
  24. package/dist/bundled/boot-md/handler.js +19 -16
  25. package/dist/bundled/session-memory/handler.js +16 -15
  26. package/dist/{call-Yxns4CVq.js → call-DVYCIV8m.js} +5 -5
  27. package/dist/{call-C9az806y.js → call-SolyGS1r.js} +4 -4
  28. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  29. package/dist/{channel-options-CjXPwMWu.js → channel-options-BwC2yQcR.js} +4 -4
  30. package/dist/{channel-options-CX4iYQfR.js → channel-options-Cq9BVDkP.js} +7 -7
  31. package/dist/{channel-selection-BoQ7GurB.js → channel-selection-D4D6ImhN.js} +2 -2
  32. package/dist/{channel-selection-C78IwbD-.js → channel-selection-MZAHm4U8.js} +2 -2
  33. package/dist/{channels-cli-DUHsmX3q.js → channels-cli-9Dsk9Qm7.js} +53 -51
  34. package/dist/{channels-cli-BXMQPB4x.js → channels-cli-BJUppQll.js} +52 -50
  35. package/dist/{channels-status-issues-Ca9--azp.js → channels-status-issues-D7GSV1GS.js} +1 -1
  36. package/dist/{channels-status-issues-CbULFg2X.js → channels-status-issues-DDAWeT-6.js} +1 -1
  37. package/dist/{chrome-svgmQ8T_.js → chrome-BfB6JdKF.js} +2 -1
  38. package/dist/{chrome-juQxt0zf.js → chrome-Cvr-57lg.js} +4 -3
  39. package/dist/{chrome-BCPPeLQ6.js → chrome-DL0avO8n.js} +2 -1
  40. package/dist/{chrome-yIKmOzCO.js → chrome-foEwx3lN.js} +5 -4
  41. package/dist/{clack-prompter-Dmvcu3gn.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-FdxAcu_y.js → cli-ZR9ugUBX.js} +42 -40
  45. package/dist/{cli-By331Q9f.js → cli-miPe4Ujz.js} +42 -40
  46. package/dist/{client-B0_GiCjB.js → client-BrYfyoDK.js} +52 -3
  47. package/dist/{client-D7wrC1Ug.js → client-CTwXnRl7.js} +53 -4
  48. package/dist/{command-format-ayFsmwwz.js → command-format-Bxe0mWee.js} +1 -1
  49. package/dist/{command-options-BSDiKuyX.js → command-options-BvgxzPbK.js} +4 -4
  50. package/dist/{commands-BG25qku5.js → commands-BX_OIIVR.js} +4 -4
  51. package/dist/{completion-cli-C4zxjkC1.js → completion-cli-CR77-jyv.js} +3 -3
  52. package/dist/{completion-cli-DECEgBWR.js → completion-cli-DnjpxAag.js} +29 -29
  53. package/dist/{config-B7sno9eI.js → config-Bdhomfei.js} +15 -6
  54. package/dist/{config-BuF7vm-v.js → config-BvMsmctM.js} +13 -4
  55. package/dist/{config-D50SQVar.js → config-QYrbd7x7.js} +13 -4
  56. package/dist/{config-DH9TLUNc.js → config-aFQssWKX.js} +15 -6
  57. package/dist/{config-guard-DPxxY1iw.js → config-guard-CljaSxJd.js} +39 -39
  58. package/dist/{configure-BZQ9uSVX.js → configure-BXLiucXo.js} +19 -19
  59. package/dist/{configure-Cg5IKSUy.js → configure-BYPqXzGZ.js} +19 -19
  60. package/dist/control-auth-8Cf4WXpR.js +54 -0
  61. package/dist/control-auth-DBCu3qyv.js +54 -0
  62. package/dist/{control-service-CBlMVTRu.js → control-service-B5KnPqGP.js} +11 -5
  63. package/dist/{control-service-B2er20Ke.js → control-service-DKnttEus.js} +10 -4
  64. package/dist/{cron-cli-B2Zwhy_r.js → cron-cli-D7BRjDv2.js} +17 -17
  65. package/dist/{cron-cli-EaRUVd0p.js → cron-cli-z1zk_FXQ.js} +16 -16
  66. package/dist/{daemon-cli-CVNzObIF.js → daemon-cli-BDkU2ocb.js} +18 -18
  67. package/dist/{daemon-cli-DF6Rxjy6.js → daemon-cli-cNSF93-v.js} +19 -19
  68. package/dist/{daemon-runtime-BHF5NjQ7.js → daemon-runtime-B0tg_LsX.js} +2 -2
  69. package/dist/{daemon-runtime-B05PME1z.js → daemon-runtime-Bsjeut6m.js} +3 -3
  70. package/dist/{deliver-DzcxEcza.js → deliver-CIU9Npgs.js} +306 -12
  71. package/dist/{deliver-COf5XFo_.js → deliver-DYYCo1G7.js} +302 -8
  72. package/dist/{deliver-B1jsU2r7.js → deliver-LsxKETro.js} +306 -12
  73. package/dist/{deliver-CLwC284e.js → deliver-xUU3mGHo.js} +302 -8
  74. package/dist/{deps-Cva7QM_t.js → deps-QSwGcoNZ.js} +2 -2
  75. package/dist/{deps-B6602Wid.js → deps-lAAA2zYI.js} +2 -2
  76. package/dist/{devices-cli-DPg_4aW8.js → devices-cli-BG3-2oqt.js} +13 -13
  77. package/dist/{devices-cli-D8K3hZR5.js → devices-cli-VIQtOvt_.js} +13 -13
  78. package/dist/{directory-cli-OGBSVKAZ.js → directory-cli-BCJwjVC0.js} +15 -15
  79. package/dist/{directory-cli-Bn47fFX7.js → directory-cli-jYzZ02gk.js} +14 -14
  80. package/dist/{dispatcher-BHsNwFe-.js → dispatcher-DY51b-Zc.js} +2 -2
  81. package/dist/{dns-cli-DmTHXgwU.js → dns-cli-DHIiMJjS.js} +11 -11
  82. package/dist/{dns-cli-kk2rysJh.js → dns-cli-pZlv87Ib.js} +11 -11
  83. package/dist/{docs-cli-CB77CeM4.js → docs-cli-2JDiwfzP.js} +7 -7
  84. package/dist/{docs-cli-DUcyw0X0.js → docs-cli-BhkYqoIQ.js} +6 -6
  85. package/dist/{doctor-DwqdkfPa.js → doctor-Bf8EhNtA.js} +33 -33
  86. package/dist/{doctor-BZfxDGUg.js → doctor-sYG5V4Co.js} +32 -32
  87. package/dist/entry.js +36 -14
  88. package/dist/{env-DE9xvYOL.js → env-ONzUVAG2.js} +1 -1
  89. package/dist/{exec-4WHuOniw.js → exec-B8lXct-k.js} +31 -13
  90. package/dist/{exec-B8JKbXKW.js → exec-CACT5OAW.js} +1 -1
  91. package/dist/{exec-D12IZYtJ.js → exec-CJFFoM7H.js} +31 -13
  92. package/dist/{exec-DXtR2fhb.js → exec-YIosokWE.js} +1 -1
  93. package/dist/{exec-approvals-cli-GizapOX5.js → exec-approvals-cli-7LH0lwhO.js} +19 -19
  94. package/dist/{exec-approvals-cli-BWO0Rs-a.js → exec-approvals-cli-apGnQbpj.js} +19 -19
  95. package/dist/extensionAPI.js +1108 -661
  96. package/dist/{fetch-CqZP8jwB.js → fetch-DmiOpALK.js} +5 -3
  97. package/dist/{fetch-timeout-B2KlHXi3.js → fetch-timeout-BEtUjM1S.js} +5 -3
  98. package/dist/{fetch-timeout-ohY5QmsW.js → fetch-timeout-DEoXG_SF.js} +5 -3
  99. package/dist/{fetch-timeout-4UKsdtE1.js → fetch-timeout-DTK9vxex.js} +5 -3
  100. package/dist/{gateway-cli-Bbd1Xbsc.js → gateway-cli-DUdYxlZS.js} +315 -103
  101. package/dist/{gateway-cli-PR1S0BTe.js → gateway-cli-DbvWmE-9.js} +314 -102
  102. package/dist/{gateway-rpc-8gue7Qjt.js → gateway-rpc-BByb2Snz.js} +3 -3
  103. package/dist/{gateway-rpc-DjuxyOm-.js → gateway-rpc-wXSCUZXj.js} +3 -3
  104. package/dist/{github-copilot-auth-B3chCDfc.js → github-copilot-auth-D7ewvpMd.js} +16 -8
  105. package/dist/{github-copilot-auth-Cm2SB8Qf.js → github-copilot-auth-DDispnyz.js} +16 -8
  106. package/dist/{github-copilot-token-SLWintYd.js → github-copilot-token-Cfs0Wxr8.js} +1 -1
  107. package/dist/{gmail-setup-utils-Cgh0ptgA.js → gmail-setup-utils-Cfns8TQx.js} +3 -3
  108. package/dist/{gmail-setup-utils-WDyf1gTU.js → gmail-setup-utils-DJb-_5kO.js} +4 -4
  109. package/dist/{health-format-C0C_Apce.js → health-format-KGPokKJH.js} +68 -28
  110. package/dist/{health-format-gLMfE2wf.js → health-format-LZDxu3rv.js} +67 -27
  111. package/dist/{help-format-5iAL_46a.js → help-format-C48TXngO.js} +1 -1
  112. package/dist/{help-format-DUy1KRxq.js → help-format-R5fLToDw.js} +1 -1
  113. package/dist/{hooks-cli-CEN1h1ya.js → hooks-cli-CT8JCRkH.js} +46 -44
  114. package/dist/{hooks-cli-DrchIqSi.js → hooks-cli-S1MKumJO.js} +47 -45
  115. package/dist/{hooks-status-Cgy6AtQk.js → hooks-status-Cw0xD8Lt.js} +3 -3
  116. package/dist/{hooks-status--xVLpAXz.js → hooks-status-D9MhwHRp.js} +3 -3
  117. package/dist/{image-Dkawt9Kg.js → image-Brk1sJbw.js} +4 -4
  118. package/dist/{image-DI9s9eEx.js → image-C4Nn2p3e.js} +5 -5
  119. package/dist/{image-LxFvu0wL.js → image-DgtfXMcX.js} +5 -5
  120. package/dist/{image-B4mDPdyz.js → image-RKwc3fsL.js} +4 -4
  121. package/dist/index.js +83 -83
  122. package/dist/{installs-NS0VMPN7.js → installs-CrLcWYHe.js} +4 -4
  123. package/dist/{installs-DA-eSN1B.js → installs-DscWb9b9.js} +5 -5
  124. package/dist/{links-CV4oki2u.js → links-B8LAzWwg.js} +1 -1
  125. package/dist/{links-7M-j83As.js → links-Eax1UO3w.js} +1 -1
  126. package/dist/llm-slug-generator.js +15 -15
  127. package/dist/{loader-Caow9TPA.js → loader-KjT074JR.js} +1105 -762
  128. package/dist/{logging-CeHn2itV.js → logging-BAyPwvdH.js} +1 -1
  129. package/dist/{logging-D0MyqUlV.js → logging-CRq4h04P.js} +2 -2
  130. package/dist/{login-qr-Xx8yJrSc.js → login-qr-B6ZgAuIf.js} +5 -5
  131. package/dist/{login-qr-CoskdtvN.js → login-qr-Bua-p0nG.js} +2 -2
  132. package/dist/{login-qr-CAk9D-FM.js → login-qr-CuvemJj4.js} +6 -6
  133. package/dist/{login-qr-kUyMWXV1.js → login-qr-Djr1JfIf.js} +2 -2
  134. package/dist/{logs-cli-B476pzJS.js → logs-cli-9IAV7rWY.js} +15 -15
  135. package/dist/{logs-cli-BQRUI_PO.js → logs-cli-EiKzUFPa.js} +14 -14
  136. package/dist/{manager-CBApH7eR.js → manager-BIMh_eSm.js} +5 -5
  137. package/dist/{manager-CyJH6WMg.js → manager-CwinWQoz.js} +5 -5
  138. package/dist/{manager-DScY_ZTT.js → manager-DkqF1GiK.js} +7 -7
  139. package/dist/{manager-DseK7RWj.js → manager-T1XfGchB.js} +8 -8
  140. package/dist/{manifest-registry-DFckk-L8.js → manifest-registry-CQhdnDBZ.js} +2 -2
  141. package/dist/{manifest-registry-BTgLN_W2.js → manifest-registry-u0okVSkU.js} +2 -2
  142. package/dist/{message-channel-0717wOz-.js → message-channel-BLi2a6Yw.js} +1 -1
  143. package/dist/{message-channel-BlgPSDAh.js → message-channel-C_MmebBt.js} +1 -1
  144. package/dist/{model-auth-CbqRVYRp.js → model-auth-CabXIF6O.js} +57 -19
  145. package/dist/{model-selection-unMJyUIE.js → model-selection-BLuqsGVB.js} +59 -21
  146. package/dist/{model-selection-B9Y7dKQd.js → model-selection-C1GmkTAV.js} +57 -19
  147. package/dist/{models-cli-B1cLGcRz.js → models-cli-9jmDv-h3.js} +50 -48
  148. package/dist/{models-cli-D7sChCi6.js → models-cli-zS9rtWz8.js} +48 -46
  149. package/dist/{node-cli-ic2C1xs2.js → node-cli-CrpTxTTs.js} +26 -24
  150. package/dist/{node-cli-CS3KwBh1.js → node-cli-wemUMCg-.js} +25 -23
  151. package/dist/{node-service-D_Cdq1JI.js → node-service-C8DTHTMg.js} +2 -2
  152. package/dist/{node-service-_vgO5xR-.js → node-service-WQuEKz6W.js} +1 -1
  153. package/dist/{nodes-cli-CipcvVMc.js → nodes-cli-BaU2SIFw.js} +16 -16
  154. package/dist/{nodes-cli-B1meaW7S.js → nodes-cli-Dx23D72n.js} +16 -16
  155. package/dist/{nodes-screen-N-4_0VIu.js → nodes-screen-C0IuBqUL.js} +1 -1
  156. package/dist/{note-CAM9PbSJ.js → note-BhRSeNeu.js} +2 -2
  157. package/dist/{note-Ci08TSbV.js → note-hhtubr2j.js} +1 -1
  158. package/dist/{onboard-channels-DMcOT0dj.js → onboard-channels-C501x8GI.js} +8 -8
  159. package/dist/{onboard-channels-CsT3E4bT.js → onboard-channels-Dxzroasd.js} +8 -8
  160. package/dist/{onboard-skills-DoxkpnEU.js → onboard-skills-DV0Qzvjj.js} +19 -19
  161. package/dist/{onboard-skills-D-BrCoRN.js → onboard-skills-rlBHcu3Q.js} +18 -18
  162. package/dist/{onboarding-B92952fz.js → onboarding-CN-EDLjd.js} +34 -34
  163. package/dist/{pairing-cli-BDUJ5VoX.js → pairing-cli-CDHG4xuI.js} +15 -15
  164. package/dist/{pairing-cli-0wbU1u8d.js → pairing-cli-CQP34Dlx.js} +14 -14
  165. package/dist/{pairing-labels-3o3QO3Qn.js → pairing-labels-B6CN0SNH.js} +1 -1
  166. package/dist/{pairing-labels-Bin1K7_f.js → pairing-labels-CgNHnjzT.js} +1 -1
  167. package/dist/{pairing-store-CL4rJ7m7.js → pairing-store-CmlRVqOz.js} +2 -2
  168. package/dist/{pairing-store-fIWI3pXG.js → pairing-store-Dp5_JGnG.js} +3 -3
  169. package/dist/{path-env-CXWUFfFv.js → path-env-CLvYNwtL.js} +1 -1
  170. package/dist/{path-env-C5FR_Eay.js → path-env-CaYUVIML.js} +2 -2
  171. package/dist/{paths-DwKNqk_S.js → paths-B0a4ywSO.js} +30 -5
  172. package/dist/{paths-RITJT4UY.js → paths-B49s6UZQ.js} +30 -5
  173. package/dist/{paths-CB2fqqbX.js → paths-D0O87MfH.js} +30 -5
  174. package/dist/{paths-IivnSNkP.js → paths-DLINmNFQ.js} +31 -6
  175. package/dist/{pi-embedded-DhYItk8O.js → pi-embedded-Ctrt2kz0.js} +1109 -662
  176. package/dist/{pi-embedded-helpers-CmftU5Zj.js → pi-embedded-helpers-CMKLjW6X.js} +8 -5
  177. package/dist/{pi-embedded-helpers-CfXnSIFx.js → pi-embedded-helpers-CUzTc1v6.js} +170 -19
  178. package/dist/{pi-embedded-helpers-Uan-3N1T.js → pi-embedded-helpers-DfwkwPYD.js} +7 -4
  179. package/dist/{pi-embedded-helpers-Bri9tk9g.js → pi-embedded-helpers-WDwx99UA.js} +170 -19
  180. package/dist/{pi-tools.policy-CJFi1sny.js → pi-tools.policy-BpsROZbz.js} +4 -4
  181. package/dist/{plugin-auto-enable-BY4CqJbD.js → plugin-auto-enable-Bqhc3w5n.js} +5 -5
  182. package/dist/{plugin-auto-enable-DbQrtQjL.js → plugin-auto-enable-PW76g_PJ.js} +5 -5
  183. package/dist/plugin-sdk/agents/pi-embedded-runner/run/params.d.ts +2 -0
  184. package/dist/plugin-sdk/agents/pi-embedded-runner/run/types.d.ts +2 -0
  185. package/dist/plugin-sdk/agents/pi-embedded-runner/types.d.ts +15 -0
  186. package/dist/plugin-sdk/agents/pi-embedded-subscribe.handlers.tools.d.ts +1 -1
  187. package/dist/plugin-sdk/agents/pi-embedded-subscribe.handlers.types.d.ts +2 -0
  188. package/dist/plugin-sdk/agents/pi-embedded-subscribe.types.d.ts +2 -0
  189. package/dist/plugin-sdk/agents/session-tool-result-guard-wrapper.d.ts +2 -0
  190. package/dist/plugin-sdk/agents/session-tool-result-guard.d.ts +4 -0
  191. package/dist/plugin-sdk/agents/tools/agent-step.d.ts +3 -0
  192. package/dist/plugin-sdk/agents/usage.d.ts +1 -0
  193. package/dist/plugin-sdk/auto-reply/reply/reply-reference.d.ts +1 -1
  194. package/dist/plugin-sdk/auto-reply/reply/session-run-accounting.d.ts +11 -0
  195. package/dist/plugin-sdk/auto-reply/reply/session-usage.d.ts +8 -0
  196. package/dist/plugin-sdk/browser/control-auth.d.ts +13 -0
  197. package/dist/plugin-sdk/channels/plugins/onboarding/signal.d.ts +1 -0
  198. package/dist/plugin-sdk/cli/prompt.d.ts +1 -0
  199. package/dist/plugin-sdk/commands/agent/types.d.ts +2 -0
  200. package/dist/plugin-sdk/config/sessions/paths.d.ts +7 -2
  201. package/dist/plugin-sdk/config/types.agents.d.ts +2 -0
  202. package/dist/plugin-sdk/config/types.discord.d.ts +5 -0
  203. package/dist/plugin-sdk/config/types.gateway.d.ts +15 -0
  204. package/dist/plugin-sdk/config/types.hooks.d.ts +15 -0
  205. package/dist/plugin-sdk/config/zod-schema.agents.d.ts +1 -0
  206. package/dist/plugin-sdk/config/zod-schema.d.ts +11 -0
  207. package/dist/plugin-sdk/config/zod-schema.providers-core.d.ts +9 -0
  208. package/dist/plugin-sdk/config/zod-schema.providers.d.ts +4 -0
  209. package/dist/plugin-sdk/discord/monitor/allow-list.d.ts +15 -0
  210. package/dist/plugin-sdk/discord/send.types.d.ts +3 -0
  211. package/dist/plugin-sdk/gateway/auth.d.ts +36 -0
  212. package/dist/plugin-sdk/gateway/protocol/schema/agent.d.ts +6 -0
  213. package/dist/plugin-sdk/gateway/session-utils.fs.d.ts +3 -1
  214. package/dist/plugin-sdk/index.js +295 -99
  215. package/dist/plugin-sdk/infra/binaries.d.ts +3 -0
  216. package/dist/plugin-sdk/infra/heartbeat-runner.d.ts +1 -0
  217. package/dist/plugin-sdk/infra/net/fetch-guard.d.ts +1 -0
  218. package/dist/plugin-sdk/infra/net/ssrf.d.ts +1 -0
  219. package/dist/plugin-sdk/infra/tailscale.d.ts +34 -0
  220. package/dist/plugin-sdk/infra/tmp-openclaw-dir.d.ts +10 -0
  221. package/dist/plugin-sdk/logging/logger.d.ts +1 -1
  222. package/dist/plugin-sdk/media/input-files.d.ts +5 -0
  223. package/dist/plugin-sdk/routing/resolve-route.d.ts +3 -1
  224. package/dist/plugin-sdk/security/external-content.d.ts +1 -1
  225. package/dist/plugin-sdk/security/secret-equal.d.ts +1 -0
  226. package/dist/plugin-sdk/sessions/input-provenance.d.ts +16 -0
  227. package/dist/plugin-sdk/signal/monitor/event-handler.types.d.ts +8 -0
  228. package/dist/plugin-sdk/signal/monitor/mentions.d.ts +2 -0
  229. package/dist/{plugins-3GyCj5KL.js → plugins-4Hqd1WGf.js} +3 -3
  230. package/dist/{plugins-BL9lIXSA.js → plugins-X7d_tfTE.js} +4 -4
  231. package/dist/{plugins-cli-Ce7VsvZh.js → plugins-cli-Bgku3EGj.js} +253 -46
  232. package/dist/{plugins-cli-e9gUebMd.js → plugins-cli-CVToH3if.js} +254 -47
  233. package/dist/{ports-DupIRXQ0.js → ports-qkt29rdC.js} +2 -2
  234. package/dist/{program-u22vbFpH.js → program-Cf7lkBur.js} +82 -82
  235. package/dist/{progress-g9R--HZD.js → progress-C9kngsTD.js} +1 -1
  236. package/dist/{progress-Da1ehW-x.js → progress-DWqhRakV.js} +1 -1
  237. package/dist/{prompt-style-Dc0C5HC9.js → prompt-style-BFH5D5LN.js} +1 -1
  238. package/dist/{prompt-style-lmJDcgtA.js → prompt-style-CIbmaxSa.js} +1 -1
  239. package/dist/{pw-ai-C43wv1ZF.js → pw-ai-8mdv3h-d.js} +7 -6
  240. package/dist/{pw-ai-DTZVjndL.js → pw-ai-CM1IsSgZ.js} +5 -5
  241. package/dist/{pw-ai-zVebjrSG.js → pw-ai-FGoRVblI.js} +3 -3
  242. package/dist/{pw-ai-CWrnJ98b.js → pw-ai-sS1fRKW_.js} +3 -3
  243. package/dist/{qmd-manager-NPD5Yh_4.js → qmd-manager-C67Fc8aN.js} +4 -4
  244. package/dist/{qmd-manager-ozZ933qc.js → qmd-manager-CXVbfg99.js} +7 -7
  245. package/dist/{qmd-manager-DBCZ1sio.js → qmd-manager-RMRE8Tqt.js} +6 -6
  246. package/dist/{qmd-manager-a9Bt0405.js → qmd-manager-pyc_MTIe.js} +4 -4
  247. package/dist/{register.subclis-BpX3ulH1.js → register.subclis-C02e4zuJ.js} +28 -28
  248. package/dist/{reply-m467_fOC.js → reply-DICXkh_C.js} +911 -568
  249. package/dist/{routes-82Ywfho6.js → routes-CmOI1hIH.js} +29 -11
  250. package/dist/{routes-BqxA3ZYr.js → routes-DewK5tq2.js} +29 -12
  251. package/dist/{rpc-DcGBG-Fp.js → rpc-DHr30euf.js} +3 -3
  252. package/dist/{rpc-CfdBHlnp.js → rpc-T300F8zI.js} +3 -3
  253. package/dist/{run-main-aolvSfj3.js → run-main-C5wpthq1.js} +84 -84
  254. package/dist/{runner-C1G8RFWl.js → runner-CY0nmVme.js} +9 -9
  255. package/dist/{runner-BCBs8JKA.js → runner-Cfm5nTMc.js} +6 -6
  256. package/dist/{runner-CInKPsiP.js → runner-D_dujMod.js} +8 -8
  257. package/dist/{runner-Cwfn-VOM.js → runner-DrGYLH5K.js} +6 -6
  258. package/dist/{sandbox-B0K9e6Fw.js → sandbox-BKYnhYQH.js} +23 -15
  259. package/dist/{sandbox-BW8Xnkw1.js → sandbox-Bhjnh1Xg.js} +21 -13
  260. package/dist/{sandbox-cli-mKCs2J0i.js → sandbox-cli-DBsAjZJN.js} +20 -20
  261. package/dist/{sandbox-cli-BD5LkZ0B.js → sandbox-cli-rV9LtFeu.js} +19 -19
  262. package/dist/{security-cli-kgI4soGy.js → security-cli-BIwJM_rs.js} +27 -27
  263. package/dist/{security-cli-kz8TiyqU.js → security-cli-BRjny8Yu.js} +26 -26
  264. package/dist/{server-context-fX4xiYRh.js → server-context-BGpGs3qd.js} +7 -7
  265. package/dist/{server-context-Lb-eUZG_.js → server-context-Cl0U0vE3.js} +5 -5
  266. package/dist/{server-node-events-Dx18uVrH.js → server-node-events-CBfTbiTA.js} +45 -43
  267. package/dist/{server-node-events-KqZMN30F.js → server-node-events-QCvh8EgI.js} +45 -43
  268. package/dist/{service-DZMXgMra.js → service--nPk7DvT.js} +3 -3
  269. package/dist/{service-DNcIZ5Kp.js → service-99RDXwX4.js} +2 -2
  270. package/dist/{service-audit-0WLGnoNT.js → service-audit-DnLmRGQt.js} +4 -4
  271. package/dist/{service-audit-uhZSlxeb.js → service-audit-ckBaRCVC.js} +3 -3
  272. package/dist/{session-cost-usage-HU4OeRgw.js → session-cost-usage-D7HuoSSD.js} +10 -8
  273. package/dist/{session-cost-usage-CL8gnHRN.js → session-cost-usage-D9hHANWI.js} +10 -8
  274. package/dist/{shared-j4Qtr475.js → shared-Bs4vduG4.js} +3 -3
  275. package/dist/{shared-BBw6F-YC.js → shared-CEY5IkwG.js} +2 -2
  276. package/dist/{shared-DOZs2SoH.js → shared-DRohONn_.js} +3 -3
  277. package/dist/{shared-CtP9K-o2.js → shared-ICqOZibV.js} +3 -3
  278. package/dist/{skill-scanner-C_fQzVDu.js → skill-scanner-rHMtUHtP.js} +1 -1
  279. package/dist/{skills-BvPUNjxo.js → skills-DRjfSQT3.js} +128 -4
  280. package/dist/{skills-aFOsriMP.js → skills-DprQj9X2.js} +129 -5
  281. package/dist/{skills-cli-oWaTJzZd.js → skills-cli-9WO-C55s.js} +12 -12
  282. package/dist/{skills-cli-E6shXpdd.js → skills-cli-B9eej-EW.js} +13 -13
  283. package/dist/{skills-status-D4vbIMnz.js → skills-status-5U3P3YfJ.js} +3 -3
  284. package/dist/{skills-status-DJDaA2Ur.js → skills-status-TDIgVd1K.js} +2 -2
  285. package/dist/{sqlite-B7FPASCO.js → sqlite-BINzs1U0.js} +2 -2
  286. package/dist/{sqlite-B4Z1_Ioc.js → sqlite-D4w5TejA.js} +2 -2
  287. package/dist/{sqlite-BkYnxkQO.js → sqlite-DRRHmlug.js} +2 -2
  288. package/dist/{sqlite-EuQPVXvn.js → sqlite-F6PGkEm1.js} +2 -2
  289. package/dist/{status-B2Yr-2J5.js → status-BKGkKC_v.js} +3 -3
  290. package/dist/{status-DW7m5xUN.js → status-CiHtHdaa.js} +4 -4
  291. package/dist/{status-CxhnUa5J.js → status-DDWoOpeB.js} +33 -33
  292. package/dist/{subsystem-Bv7dGhES.js → subsystem-BoExtIHo.js} +32 -13
  293. package/dist/{system-cli-0JXhJNWm.js → system-cli-B6lr60Io.js} +14 -14
  294. package/dist/{system-cli-D-0OaMtH.js → system-cli-CprW9G3h.js} +14 -14
  295. package/dist/{systemd-CNTodvCO.js → systemd-C0VZriGM.js} +2 -2
  296. package/dist/{systemd-CUJJHgHa.js → systemd-DrmBtJ5T.js} +3 -3
  297. package/dist/{systemd-hints-cmHtrXUl.js → systemd-hints-DZtXiVHa.js} +1 -1
  298. package/dist/{systemd-linger-CArPbmvv.js → systemd-linger-NC2kl1SC.js} +2 -2
  299. package/dist/{systemd-linger-XvT9Y9sb.js → systemd-linger-xdn3BdPh.js} +2 -2
  300. package/dist/{table-DzBBIqHO.js → table-B8dx3v4v.js} +2 -2
  301. package/dist/{table-oJQPTUL6.js → table-CwulTLQp.js} +1 -1
  302. package/dist/{tool-display-Na-EVL83.js → tool-display-CZRIDMRm.js} +1 -1
  303. package/dist/{tool-display-sHJa3kRs.js → tool-display-ClRud3pg.js} +2 -2
  304. package/dist/{tui-nGp8ltQK.js → tui-CVTQn-dC.js} +9 -9
  305. package/dist/{tui-Biw7aqPj.js → tui-Lu8FdrlK.js} +9 -9
  306. package/dist/{tui-cli-C9FEfG7C.js → tui-cli-BLpTj1X9.js} +25 -25
  307. package/dist/{tui-cli-Dxnu5JGl.js → tui-cli-BLx5kL2I.js} +25 -25
  308. package/dist/{tui-formatters-BiNTNGwg.js → tui-formatters-CNySEfJN.js} +5 -5
  309. package/dist/{tui-formatters-C_baVYUz.js → tui-formatters-DePhZK3J.js} +5 -5
  310. package/dist/{update-C4rsLj2F.js → update-DHVxMTpQ.js} +3 -3
  311. package/dist/{update-uwUWrKFu.js → update-DU1geolI.js} +3 -3
  312. package/dist/{update-cli-cNd_G9E6.js → update-cli-C0hUvJWK.js} +66 -66
  313. package/dist/{update-cli-CBXp-c4C.js → update-cli-Wb1GB3rL.js} +68 -68
  314. package/dist/{update-runner-BLsqC24J.js → update-runner--ixK4J3W.js} +10 -10
  315. package/dist/{update-runner-C_FDpmA3.js → update-runner-7Qa1T9y6.js} +9 -9
  316. package/dist/{utils-Dk86IbEs.js → utils-BLJAc3ZV.js} +1 -1
  317. package/dist/{utils-BHPdZE4h.js → utils-Cd9QdCHh.js} +1 -1
  318. package/dist/{webhooks-cli-BpBKXL7W.js → webhooks-cli-DgcMy7RG.js} +12 -12
  319. package/dist/{webhooks-cli-wNfhfKqm.js → webhooks-cli-aVzUcJY9.js} +11 -11
  320. package/dist/{widearea-dns-WVCWJTEb.js → widearea-dns-BaIgNEhY.js} +1 -1
  321. package/dist/{widearea-dns-BWYPcfby.js → widearea-dns-DzuRdwk5.js} +1 -1
  322. package/dist/{ws-log-Cafylho7.js → ws-log-CIXbLCka.js} +1 -1
  323. package/dist/{ws-log-DTUOUVgR.js → ws-log-DcQFZByi.js} +1 -1
  324. package/dist/{wsl-B-H6Z5wp.js → wsl-BUOkxKJu.js} +2 -2
  325. package/docs/automation/webhook.md +43 -2
  326. package/docs/channels/discord.md +29 -1
  327. package/docs/cli/plugins.md +20 -1
  328. package/docs/cli/security.md +1 -0
  329. package/docs/concepts/session-tool.md +1 -0
  330. package/docs/gateway/configuration-reference.md +11 -0
  331. package/docs/gateway/configuration.md +3 -0
  332. package/docs/gateway/openresponses-http-api.md +15 -0
  333. package/docs/gateway/security/index.md +3 -0
  334. package/docs/help/faq.md +9 -0
  335. package/docs/install/installer.md +20 -0
  336. package/docs/reference/transcript-hygiene.md +18 -0
  337. package/docs/tools/browser.md +6 -0
  338. package/extensions/diagnostics-otel/package.json +9 -9
  339. package/extensions/feishu/package.json +1 -1
  340. package/extensions/feishu/src/config-schema.ts +6 -0
  341. package/extensions/feishu/src/reply-dispatcher.test.ts +116 -0
  342. package/extensions/feishu/src/reply-dispatcher.ts +124 -67
  343. package/extensions/feishu/src/streaming-card.ts +223 -0
  344. package/extensions/feishu/src/targets.test.ts +16 -0
  345. package/extensions/feishu/src/targets.ts +1 -1
  346. package/extensions/irc/src/client.ts +1 -1
  347. package/extensions/minimax-portal-auth/index.ts +7 -5
  348. package/extensions/nostr/package.json +1 -1
  349. package/package.json +13 -13
  350. package/dist/auth-BcNHFK-i.js +0 -184
  351. package/dist/auth-jrfLXze7.js +0 -184
  352. /package/dist/{archive-DqNr5i8b.js → archive-beaSfAzA.js} +0 -0
  353. /package/dist/{brew-BIrWdDps.js → brew-BUIxHEkn.js} +0 -0
  354. /package/dist/{brew-6UyogeLe.js → brew-ROHf0-Xp.js} +0 -0
  355. /package/dist/{constants-DuoCkWRh.js → constants-BvQ6S8j5.js} +0 -0
  356. /package/dist/{errors-x4NYs-1P.js → errors-DjZBTJJ3.js} +0 -0
  357. /package/dist/{helpers-BDvtkJjw.js → helpers-HyeZXsnu.js} +0 -0
  358. /package/dist/{is-main-CE1eOBYb.js → is-main-BWoXGz7p.js} +0 -0
  359. /package/dist/{parse-Cjiudy6x.js → parse-Bw0oH-rT.js} +0 -0
  360. /package/dist/{parse-timeout-DFSPLxpY.js → parse-timeout-D1XX_zN_.js} +0 -0
  361. /package/dist/{prompts-BOz5176z.js → prompts-Bg96reub.js} +0 -0
  362. /package/dist/{redact-DuEEf1p1.js → redact-Br9GfacZ.js} +0 -0
  363. /package/dist/{skill-scanner-CprFkZib.js → skill-scanner-CucvxYhu.js} +0 -0
  364. /package/dist/{transcript-events-CZ8CG4ht.js → transcript-events-BtNd-j6q.js} +0 -0
@@ -1,9 +1,9 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
- import { j as normalizeAccountId$1 } from "./agent-scope-CN8DM4Xb.js";
3
- import { J as logVerbose, O as escapeRegExp, R as resolveUserPath, X as shouldLogVerbose, b as getActivePluginRegistry } from "./exec-D12IZYtJ.js";
4
- import { An as resolveSignalAccount, At as convertHeicToJpeg, Dn as maxBytesForKind, It as saveMediaBuffer, J as resolveMirroredTranscriptText, Mt as hasAlphaChannel, Nn as normalizeChannelId, Nt as optimizeImageToPng, On as mediaKindFromMime, Pt as resizeToJpeg, bn as extensionForMime, cn as INTERNAL_MESSAGE_CHANNEL, jn as getChannelPlugin, m as isMessagingToolDuplicate, q as appendAssistantMessageToSessionTranscript, vt as getChannelDock, yn as detectMime } from "./pi-embedded-helpers-CfXnSIFx.js";
5
- import { t as loadConfig } from "./config-D50SQVar.js";
6
- import { r as fetchRemoteMedia, t as fetchWithTimeout } from "./fetch-timeout-ohY5QmsW.js";
2
+ import { j as normalizeAccountId$1 } from "./agent-scope-DPIFau3f.js";
3
+ import { J as logVerbose, O as escapeRegExp, R as resolveUserPath, X as shouldLogVerbose, b as getActivePluginRegistry, l as createSubsystemLogger } from "./exec-CJFFoM7H.js";
4
+ import { An as mediaKindFromMime, At as convertHeicToJpeg, Fn as normalizeChannelId, It as saveMediaBuffer, J as resolveMirroredTranscriptText, Mn as resolveSignalAccount, Mt as hasAlphaChannel, Nn as getChannelPlugin, Nt as optimizeImageToPng, Pt as resizeToJpeg, Sn as extensionForMime, kn as maxBytesForKind, m as isMessagingToolDuplicate, q as appendAssistantMessageToSessionTranscript, un as INTERNAL_MESSAGE_CHANNEL, vt as getChannelDock, xn as detectMime } from "./pi-embedded-helpers-CUzTc1v6.js";
5
+ import { t as loadConfig } from "./config-QYrbd7x7.js";
6
+ import { r as fetchRemoteMedia, t as fetchWithTimeout } from "./fetch-timeout-DEoXG_SF.js";
7
7
  import path from "node:path";
8
8
  import os from "node:os";
9
9
  import fs from "node:fs/promises";
@@ -21,6 +21,260 @@ function isSilentReplyText(text, token = SILENT_REPLY_TOKEN) {
21
21
  return new RegExp(`\\b${escaped}\\b\\W*$`).test(text);
22
22
  }
23
23
 
24
+ //#endregion
25
+ //#region src/plugins/hooks.ts
26
+ /**
27
+ * Get hooks for a specific hook name, sorted by priority (higher first).
28
+ */
29
+ function getHooksForName(registry, hookName) {
30
+ return registry.typedHooks.filter((h) => h.hookName === hookName).toSorted((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
31
+ }
32
+ /**
33
+ * Create a hook runner for a specific registry.
34
+ */
35
+ function createHookRunner(registry, options = {}) {
36
+ const logger = options.logger;
37
+ const catchErrors = options.catchErrors ?? true;
38
+ /**
39
+ * Run a hook that doesn't return a value (fire-and-forget style).
40
+ * All handlers are executed in parallel for performance.
41
+ */
42
+ async function runVoidHook(hookName, event, ctx) {
43
+ const hooks = getHooksForName(registry, hookName);
44
+ if (hooks.length === 0) return;
45
+ logger?.debug?.(`[hooks] running ${hookName} (${hooks.length} handlers)`);
46
+ const promises = hooks.map(async (hook) => {
47
+ try {
48
+ await hook.handler(event, ctx);
49
+ } catch (err) {
50
+ const msg = `[hooks] ${hookName} handler from ${hook.pluginId} failed: ${String(err)}`;
51
+ if (catchErrors) logger?.error(msg);
52
+ else throw new Error(msg, { cause: err });
53
+ }
54
+ });
55
+ await Promise.all(promises);
56
+ }
57
+ /**
58
+ * Run a hook that can return a modifying result.
59
+ * Handlers are executed sequentially in priority order, and results are merged.
60
+ */
61
+ async function runModifyingHook(hookName, event, ctx, mergeResults) {
62
+ const hooks = getHooksForName(registry, hookName);
63
+ if (hooks.length === 0) return;
64
+ logger?.debug?.(`[hooks] running ${hookName} (${hooks.length} handlers, sequential)`);
65
+ let result;
66
+ for (const hook of hooks) try {
67
+ const handlerResult = await hook.handler(event, ctx);
68
+ if (handlerResult !== void 0 && handlerResult !== null) if (mergeResults && result !== void 0) result = mergeResults(result, handlerResult);
69
+ else result = handlerResult;
70
+ } catch (err) {
71
+ const msg = `[hooks] ${hookName} handler from ${hook.pluginId} failed: ${String(err)}`;
72
+ if (catchErrors) logger?.error(msg);
73
+ else throw new Error(msg, { cause: err });
74
+ }
75
+ return result;
76
+ }
77
+ /**
78
+ * Run before_agent_start hook.
79
+ * Allows plugins to inject context into the system prompt.
80
+ * Runs sequentially, merging systemPrompt and prependContext from all handlers.
81
+ */
82
+ async function runBeforeAgentStart(event, ctx) {
83
+ return runModifyingHook("before_agent_start", event, ctx, (acc, next) => ({
84
+ systemPrompt: next.systemPrompt ?? acc?.systemPrompt,
85
+ prependContext: acc?.prependContext && next.prependContext ? `${acc.prependContext}\n\n${next.prependContext}` : next.prependContext ?? acc?.prependContext
86
+ }));
87
+ }
88
+ /**
89
+ * Run agent_end hook.
90
+ * Allows plugins to analyze completed conversations.
91
+ * Runs in parallel (fire-and-forget).
92
+ */
93
+ async function runAgentEnd(event, ctx) {
94
+ return runVoidHook("agent_end", event, ctx);
95
+ }
96
+ /**
97
+ * Run before_compaction hook.
98
+ */
99
+ async function runBeforeCompaction(event, ctx) {
100
+ return runVoidHook("before_compaction", event, ctx);
101
+ }
102
+ /**
103
+ * Run after_compaction hook.
104
+ */
105
+ async function runAfterCompaction(event, ctx) {
106
+ return runVoidHook("after_compaction", event, ctx);
107
+ }
108
+ /**
109
+ * Run message_received hook.
110
+ * Runs in parallel (fire-and-forget).
111
+ */
112
+ async function runMessageReceived(event, ctx) {
113
+ return runVoidHook("message_received", event, ctx);
114
+ }
115
+ /**
116
+ * Run message_sending hook.
117
+ * Allows plugins to modify or cancel outgoing messages.
118
+ * Runs sequentially.
119
+ */
120
+ async function runMessageSending(event, ctx) {
121
+ return runModifyingHook("message_sending", event, ctx, (acc, next) => ({
122
+ content: next.content ?? acc?.content,
123
+ cancel: next.cancel ?? acc?.cancel
124
+ }));
125
+ }
126
+ /**
127
+ * Run message_sent hook.
128
+ * Runs in parallel (fire-and-forget).
129
+ */
130
+ async function runMessageSent(event, ctx) {
131
+ return runVoidHook("message_sent", event, ctx);
132
+ }
133
+ /**
134
+ * Run before_tool_call hook.
135
+ * Allows plugins to modify or block tool calls.
136
+ * Runs sequentially.
137
+ */
138
+ async function runBeforeToolCall(event, ctx) {
139
+ return runModifyingHook("before_tool_call", event, ctx, (acc, next) => ({
140
+ params: next.params ?? acc?.params,
141
+ block: next.block ?? acc?.block,
142
+ blockReason: next.blockReason ?? acc?.blockReason
143
+ }));
144
+ }
145
+ /**
146
+ * Run after_tool_call hook.
147
+ * Runs in parallel (fire-and-forget).
148
+ */
149
+ async function runAfterToolCall(event, ctx) {
150
+ return runVoidHook("after_tool_call", event, ctx);
151
+ }
152
+ /**
153
+ * Run tool_result_persist hook.
154
+ *
155
+ * This hook is intentionally synchronous: it runs in hot paths where session
156
+ * transcripts are appended synchronously.
157
+ *
158
+ * Handlers are executed sequentially in priority order (higher first). Each
159
+ * handler may return `{ message }` to replace the message passed to the next
160
+ * handler.
161
+ */
162
+ function runToolResultPersist(event, ctx) {
163
+ const hooks = getHooksForName(registry, "tool_result_persist");
164
+ if (hooks.length === 0) return;
165
+ let current = event.message;
166
+ for (const hook of hooks) try {
167
+ const out = hook.handler({
168
+ ...event,
169
+ message: current
170
+ }, ctx);
171
+ if (out && typeof out.then === "function") {
172
+ const msg = `[hooks] tool_result_persist handler from ${hook.pluginId} returned a Promise; this hook is synchronous and the result was ignored.`;
173
+ if (catchErrors) {
174
+ logger?.warn?.(msg);
175
+ continue;
176
+ }
177
+ throw new Error(msg);
178
+ }
179
+ const next = out?.message;
180
+ if (next) current = next;
181
+ } catch (err) {
182
+ const msg = `[hooks] tool_result_persist handler from ${hook.pluginId} failed: ${String(err)}`;
183
+ if (catchErrors) logger?.error(msg);
184
+ else throw new Error(msg, { cause: err });
185
+ }
186
+ return { message: current };
187
+ }
188
+ /**
189
+ * Run session_start hook.
190
+ * Runs in parallel (fire-and-forget).
191
+ */
192
+ async function runSessionStart(event, ctx) {
193
+ return runVoidHook("session_start", event, ctx);
194
+ }
195
+ /**
196
+ * Run session_end hook.
197
+ * Runs in parallel (fire-and-forget).
198
+ */
199
+ async function runSessionEnd(event, ctx) {
200
+ return runVoidHook("session_end", event, ctx);
201
+ }
202
+ /**
203
+ * Run gateway_start hook.
204
+ * Runs in parallel (fire-and-forget).
205
+ */
206
+ async function runGatewayStart(event, ctx) {
207
+ return runVoidHook("gateway_start", event, ctx);
208
+ }
209
+ /**
210
+ * Run gateway_stop hook.
211
+ * Runs in parallel (fire-and-forget).
212
+ */
213
+ async function runGatewayStop(event, ctx) {
214
+ return runVoidHook("gateway_stop", event, ctx);
215
+ }
216
+ /**
217
+ * Check if any hooks are registered for a given hook name.
218
+ */
219
+ function hasHooks(hookName) {
220
+ return registry.typedHooks.some((h) => h.hookName === hookName);
221
+ }
222
+ /**
223
+ * Get count of registered hooks for a given hook name.
224
+ */
225
+ function getHookCount(hookName) {
226
+ return registry.typedHooks.filter((h) => h.hookName === hookName).length;
227
+ }
228
+ return {
229
+ runBeforeAgentStart,
230
+ runAgentEnd,
231
+ runBeforeCompaction,
232
+ runAfterCompaction,
233
+ runMessageReceived,
234
+ runMessageSending,
235
+ runMessageSent,
236
+ runBeforeToolCall,
237
+ runAfterToolCall,
238
+ runToolResultPersist,
239
+ runSessionStart,
240
+ runSessionEnd,
241
+ runGatewayStart,
242
+ runGatewayStop,
243
+ hasHooks,
244
+ getHookCount
245
+ };
246
+ }
247
+
248
+ //#endregion
249
+ //#region src/plugins/hook-runner-global.ts
250
+ const log = createSubsystemLogger("plugins");
251
+ let globalHookRunner = null;
252
+ let globalRegistry = null;
253
+ /**
254
+ * Initialize the global hook runner with a plugin registry.
255
+ * Called once when plugins are loaded during gateway startup.
256
+ */
257
+ function initializeGlobalHookRunner(registry) {
258
+ globalRegistry = registry;
259
+ globalHookRunner = createHookRunner(registry, {
260
+ logger: {
261
+ debug: (msg) => log.debug(msg),
262
+ warn: (msg) => log.warn(msg),
263
+ error: (msg) => log.error(msg)
264
+ },
265
+ catchErrors: true
266
+ });
267
+ const hookCount = registry.hooks.length;
268
+ if (hookCount > 0) log.info(`hook runner initialized with ${hookCount} registered hooks`);
269
+ }
270
+ /**
271
+ * Get the global hook runner.
272
+ * Returns null if plugins haven't been loaded yet.
273
+ */
274
+ function getGlobalHookRunner() {
275
+ return globalHookRunner;
276
+ }
277
+
24
278
  //#endregion
25
279
  //#region src/markdown/fences.ts
26
280
  function parseFenceSpans(buffer) {
@@ -2333,22 +2587,60 @@ async function deliverOutboundPayloads(params) {
2333
2587
  const normalized = normalizeWhatsAppPayload(payload);
2334
2588
  return normalized ? [normalized] : [];
2335
2589
  });
2590
+ const hookRunner = getGlobalHookRunner();
2336
2591
  for (const payload of normalizedPayloads) {
2337
2592
  const payloadSummary = {
2338
2593
  text: payload.text ?? "",
2339
2594
  mediaUrls: payload.mediaUrls ?? (payload.mediaUrl ? [payload.mediaUrl] : []),
2340
2595
  channelData: payload.channelData
2341
2596
  };
2597
+ const emitMessageSent = (success, error) => {
2598
+ if (!hookRunner?.hasHooks("message_sent")) return;
2599
+ hookRunner.runMessageSent({
2600
+ to,
2601
+ content: payloadSummary.text,
2602
+ success,
2603
+ ...error ? { error } : {}
2604
+ }, {
2605
+ channelId: channel,
2606
+ accountId: accountId ?? void 0
2607
+ }).catch(() => {});
2608
+ };
2342
2609
  try {
2343
2610
  throwIfAborted(abortSignal);
2611
+ let effectivePayload = payload;
2612
+ if (hookRunner?.hasHooks("message_sending")) try {
2613
+ const sendingResult = await hookRunner.runMessageSending({
2614
+ to,
2615
+ content: payloadSummary.text,
2616
+ metadata: {
2617
+ channel,
2618
+ accountId,
2619
+ mediaUrls: payloadSummary.mediaUrls
2620
+ }
2621
+ }, {
2622
+ channelId: channel,
2623
+ accountId: accountId ?? void 0
2624
+ });
2625
+ if (sendingResult?.cancel) continue;
2626
+ if (sendingResult?.content != null) {
2627
+ effectivePayload = {
2628
+ ...payload,
2629
+ text: sendingResult.content
2630
+ };
2631
+ payloadSummary.text = sendingResult.content;
2632
+ }
2633
+ } catch {}
2344
2634
  params.onPayload?.(payloadSummary);
2345
- if (handler.sendPayload && payload.channelData) {
2346
- results.push(await handler.sendPayload(payload));
2635
+ if (handler.sendPayload && effectivePayload.channelData) {
2636
+ results.push(await handler.sendPayload(effectivePayload));
2637
+ emitMessageSent(true);
2347
2638
  continue;
2348
2639
  }
2349
2640
  if (payloadSummary.mediaUrls.length === 0) {
2350
2641
  if (isSignalChannel) await sendSignalTextChunks(payloadSummary.text);
2351
2642
  else await sendTextChunks(payloadSummary.text);
2643
+ emitMessageSent(true);
2352
2644
  continue;
2353
2645
  }
2354
2646
  let first = true;
@@ -2359,7 +2651,9 @@ async function deliverOutboundPayloads(params) {
2359
2651
  if (isSignalChannel) results.push(await sendSignalMedia(caption, url));
2360
2652
  else results.push(await handler.sendMedia(caption, url));
2361
2653
  }
2654
+ emitMessageSent(true);
2362
2655
  } catch (err) {
2656
+ emitMessageSent(false, err instanceof Error ? err.message : String(err));
2363
2657
  if (!params.bestEffort) throw err;
2364
2658
  params.onError?.(err, payloadSummary);
2365
2659
  }
@@ -2379,4 +2673,4 @@ async function deliverOutboundPayloads(params) {
2379
2673
  }
2380
2674
 
2381
2675
  //#endregion
2382
- export { loadWebMediaRaw as A, isSafeFenceBreak as B, parseInlineDirectives as C, markdownToIR as D, chunkMarkdownIR as E, chunkText as F, HEARTBEAT_TOKEN as H, chunkTextWithMode as I, resolveChunkMode as L, chunkByNewline as M, chunkMarkdownText as N, markdownToIRWithMeta as O, chunkMarkdownTextWithMode as P, resolveTextChunkLimit as R, splitMediaFromOutput as S, wrapFetchWithAbortSignal as T, SILENT_REPLY_TOKEN as U, parseFenceSpans as V, isSilentReplyText as W, buildTargetResolverSignature as _, applyReplyThreading as a, throwIfAborted as b, shouldSuppressMessagingToolReplies as c, sendMessageSignal as d, sendReadReceiptSignal as f, streamSignalEvents as g, signalRpcRequest as h, applyReplyTagsToPayload as i, resolveMarkdownTableMode as j, loadWebMedia as k, createReplyToModeFilterForChannel as l, signalCheck as m, deliver_exports as n, filterMessagingToolDuplicates as o, sendTypingSignal as p, normalizeReplyPayloadsForDelivery as r, isRenderablePayload as s, deliverOutboundPayloads as t, resolveReplyToMode as u, normalizeChannelTargetInput as v, resolveFetch as w, parseReplyDirectives as x, normalizeTargetForProvider as y, findFenceSpanAt as z };
2676
+ export { loadWebMediaRaw as A, isSafeFenceBreak as B, parseInlineDirectives as C, markdownToIR as D, chunkMarkdownIR as E, chunkText as F, SILENT_REPLY_TOKEN as G, getGlobalHookRunner as H, chunkTextWithMode as I, isSilentReplyText as K, resolveChunkMode as L, chunkByNewline as M, chunkMarkdownText as N, markdownToIRWithMeta as O, chunkMarkdownTextWithMode as P, resolveTextChunkLimit as R, splitMediaFromOutput as S, wrapFetchWithAbortSignal as T, initializeGlobalHookRunner as U, parseFenceSpans as V, HEARTBEAT_TOKEN as W, buildTargetResolverSignature as _, applyReplyThreading as a, throwIfAborted as b, shouldSuppressMessagingToolReplies as c, sendMessageSignal as d, sendReadReceiptSignal as f, streamSignalEvents as g, signalRpcRequest as h, applyReplyTagsToPayload as i, resolveMarkdownTableMode as j, loadWebMedia as k, createReplyToModeFilterForChannel as l, signalCheck as m, deliver_exports as n, filterMessagingToolDuplicates as o, sendTypingSignal as p, normalizeReplyPayloadsForDelivery as r, isRenderablePayload as s, deliverOutboundPayloads as t, resolveReplyToMode as u, normalizeChannelTargetInput as v, resolveFetch as w, parseReplyDirectives as x, normalizeTargetForProvider as y, findFenceSpanAt as z };
@@ -1,5 +1,5 @@
1
- import { L as sendMessageTelegram, Mr as sendMessageSlack, R as sendMessageDiscord, kr as sendMessageWhatsApp, r as sendMessageIMessage } from "./loader-Caow9TPA.js";
2
- import { m as sendMessageSignal } from "./deliver-DzcxEcza.js";
1
+ import { L as sendMessageTelegram, Mr as sendMessageSlack, R as sendMessageDiscord, kr as sendMessageWhatsApp, r as sendMessageIMessage } from "./loader-KjT074JR.js";
2
+ import { m as sendMessageSignal } from "./deliver-CIU9Npgs.js";
3
3
 
4
4
  //#region src/cli/deps.ts
5
5
  function createDefaultDeps() {
@@ -1,5 +1,5 @@
1
- import { Ln as sendMessageWhatsApp, _t as sendMessageIMessage, bn as sendMessageDiscord, yn as sendMessageTelegram, zn as sendMessageSlack } from "./reply-m467_fOC.js";
2
- import { x as sendMessageSignal } from "./deliver-B1jsU2r7.js";
1
+ import { Ln as sendMessageWhatsApp, _t as sendMessageIMessage, bn as sendMessageDiscord, yn as sendMessageTelegram, zn as sendMessageSlack } from "./reply-DICXkh_C.js";
2
+ import { x as sendMessageSignal } from "./deliver-LsxKETro.js";
3
3
 
4
4
  //#region src/cli/deps.ts
5
5
  function createDefaultDeps() {
@@ -1,17 +1,17 @@
1
- import { k as theme, p as defaultRuntime } from "./entry.js";
2
- import "./auth-profiles-CcJ3hrog.js";
3
- import "./utils-Dk86IbEs.js";
4
- import "./exec-B8JKbXKW.js";
5
- import "./agent-scope-RCSw6gHy.js";
6
- import "./github-copilot-token-SLWintYd.js";
7
- import "./config-B7sno9eI.js";
8
- import "./manifest-registry-BTgLN_W2.js";
9
- import "./client-D7wrC1Ug.js";
10
- import { n as callGateway } from "./call-Yxns4CVq.js";
11
- import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-BlgPSDAh.js";
12
- import { n as withProgress } from "./progress-Da1ehW-x.js";
1
+ import { A as theme, p as defaultRuntime } 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 "./config-Bdhomfei.js";
8
+ import "./manifest-registry-u0okVSkU.js";
9
+ import "./client-CTwXnRl7.js";
10
+ import { n as callGateway } from "./call-DVYCIV8m.js";
11
+ import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-C_MmebBt.js";
12
+ import { n as withProgress } from "./progress-DWqhRakV.js";
13
13
  import { n as formatTimeAgo } from "./format-relative-CZOlQ2pA.js";
14
- import { t as renderTable } from "./table-oJQPTUL6.js";
14
+ import { t as renderTable } from "./table-CwulTLQp.js";
15
15
 
16
16
  //#region src/cli/devices-cli.ts
17
17
  const devicesCallOpts = (cmd, defaults) => cmd.option("--url <url>", "Gateway WebSocket URL (defaults to gateway.remote.url when configured)").option("--token <token>", "Gateway token (if required)").option("--password <password>", "Gateway password (password auth)").option("--timeout <ms>", "Timeout in ms", String(defaults?.timeoutMs ?? 1e4)).option("--json", "Output JSON", false);
@@ -1,20 +1,20 @@
1
1
  import "./paths-DVBShlw6.js";
2
- import { R as theme, c as defaultRuntime } from "./subsystem-Bv7dGhES.js";
3
- import "./utils-BHPdZE4h.js";
4
- import "./exec-DXtR2fhb.js";
5
- import "./agent-scope---6LLHj0.js";
6
- import "./model-selection-unMJyUIE.js";
2
+ import { R as theme, c as defaultRuntime } from "./subsystem-BoExtIHo.js";
3
+ import "./utils-Cd9QdCHh.js";
4
+ import "./exec-YIosokWE.js";
5
+ import "./agent-scope-CQCus0rI.js";
6
+ import "./model-selection-BLuqsGVB.js";
7
7
  import "./github-copilot-token-BW-SEg7E.js";
8
8
  import "./boolean-BgXe2hyu.js";
9
- import "./env-DE9xvYOL.js";
10
- import "./config-DH9TLUNc.js";
11
- import "./manifest-registry-DFckk-L8.js";
12
- import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-0717wOz-.js";
13
- import "./client-B0_GiCjB.js";
14
- import { n as callGateway } from "./call-C9az806y.js";
9
+ import "./env-ONzUVAG2.js";
10
+ import "./config-aFQssWKX.js";
11
+ import "./manifest-registry-CQhdnDBZ.js";
12
+ import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-BLi2a6Yw.js";
13
+ import "./client-BrYfyoDK.js";
14
+ import { n as callGateway } from "./call-SolyGS1r.js";
15
15
  import { n as formatTimeAgo } from "./format-relative-cegC_FF5.js";
16
- import { n as withProgress } from "./progress-g9R--HZD.js";
17
- import { t as renderTable } from "./table-DzBBIqHO.js";
16
+ import { n as withProgress } from "./progress-C9kngsTD.js";
17
+ import { t as renderTable } from "./table-B8dx3v4v.js";
18
18
 
19
19
  //#region src/cli/devices-cli.ts
20
20
  const devicesCallOpts = (cmd, defaults) => cmd.option("--url <url>", "Gateway WebSocket URL (defaults to gateway.remote.url when configured)").option("--token <token>", "Gateway token (if required)").option("--password <password>", "Gateway password (password auth)").option("--timeout <ms>", "Timeout in ms", String(defaults?.timeoutMs ?? 1e4)).option("--json", "Output JSON", false);
@@ -1,22 +1,22 @@
1
1
  import "./paths-DVBShlw6.js";
2
- import { E as danger, R as theme, c as defaultRuntime } from "./subsystem-Bv7dGhES.js";
3
- import "./utils-BHPdZE4h.js";
4
- import "./exec-DXtR2fhb.js";
5
- import "./agent-scope---6LLHj0.js";
6
- import "./model-selection-unMJyUIE.js";
2
+ import { E as danger, R as theme, c as defaultRuntime } from "./subsystem-BoExtIHo.js";
3
+ import "./utils-Cd9QdCHh.js";
4
+ import "./exec-YIosokWE.js";
5
+ import "./agent-scope-CQCus0rI.js";
6
+ import "./model-selection-BLuqsGVB.js";
7
7
  import "./github-copilot-token-BW-SEg7E.js";
8
8
  import "./boolean-BgXe2hyu.js";
9
- import "./env-DE9xvYOL.js";
10
- import { i as loadConfig } from "./config-DH9TLUNc.js";
11
- import "./manifest-registry-DFckk-L8.js";
12
- import { t as getChannelPlugin } from "./plugins-BL9lIXSA.js";
13
- import "./message-channel-0717wOz-.js";
9
+ import "./env-ONzUVAG2.js";
10
+ import { i as loadConfig } from "./config-aFQssWKX.js";
11
+ import "./manifest-registry-CQhdnDBZ.js";
12
+ import { t as getChannelPlugin } from "./plugins-X7d_tfTE.js";
13
+ import "./message-channel-BLi2a6Yw.js";
14
14
  import "./logging-fywhKCmE.js";
15
- import "./accounts-DimKrt7j.js";
16
- import { t as formatDocsLink } from "./links-CV4oki2u.js";
17
- import { n as resolveMessageChannelSelection } from "./channel-selection-C78IwbD-.js";
18
- import { t as resolveChannelDefaultAccountId } from "./helpers-BDvtkJjw.js";
19
- import { t as renderTable } from "./table-DzBBIqHO.js";
15
+ import "./accounts-DeqIQjo1.js";
16
+ import { t as formatDocsLink } from "./links-Eax1UO3w.js";
17
+ import { n as resolveMessageChannelSelection } from "./channel-selection-MZAHm4U8.js";
18
+ import { t as resolveChannelDefaultAccountId } from "./helpers-HyeZXsnu.js";
19
+ import { t as renderTable } from "./table-B8dx3v4v.js";
20
20
 
21
21
  //#region src/cli/directory-cli.ts
22
22
  function parseLimit(value) {
@@ -1,19 +1,19 @@
1
- import { k as theme, p as defaultRuntime, v as danger } from "./entry.js";
2
- import "./auth-profiles-CcJ3hrog.js";
3
- import "./utils-Dk86IbEs.js";
4
- import "./exec-B8JKbXKW.js";
5
- import "./agent-scope-RCSw6gHy.js";
6
- import "./github-copilot-token-SLWintYd.js";
7
- import { i as loadConfig } from "./config-B7sno9eI.js";
8
- import "./manifest-registry-BTgLN_W2.js";
9
- import "./message-channel-BlgPSDAh.js";
10
- import { t as formatDocsLink } from "./links-7M-j83As.js";
11
- import { t as getChannelPlugin } from "./plugins-3GyCj5KL.js";
1
+ import { A as theme, p as defaultRuntime, v as danger } 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 { i as loadConfig } from "./config-Bdhomfei.js";
8
+ import "./manifest-registry-u0okVSkU.js";
9
+ import "./message-channel-C_MmebBt.js";
10
+ import { t as formatDocsLink } from "./links-B8LAzWwg.js";
11
+ import { t as getChannelPlugin } from "./plugins-4Hqd1WGf.js";
12
12
  import "./logging-CfEk_PnX.js";
13
- import "./accounts-DbzMEfKN.js";
13
+ import "./accounts-DCDeFTra.js";
14
14
  import { t as resolveChannelDefaultAccountId } from "./helpers-DdwqKAAS.js";
15
- import { n as resolveMessageChannelSelection } from "./channel-selection-BoQ7GurB.js";
16
- import { t as renderTable } from "./table-oJQPTUL6.js";
15
+ import { n as resolveMessageChannelSelection } from "./channel-selection-D4D6ImhN.js";
16
+ import { t as renderTable } from "./table-CwulTLQp.js";
17
17
 
18
18
  //#region src/cli/directory-cli.ts
19
19
  function parseLimit(value) {
@@ -1,5 +1,5 @@
1
- import { l as escapeRegExp } from "./utils-BHPdZE4h.js";
2
- import { t as registerBrowserRoutes } from "./routes-82Ywfho6.js";
1
+ import { l as escapeRegExp } from "./utils-Cd9QdCHh.js";
2
+ import { t as registerBrowserRoutes } from "./routes-CmOI1hIH.js";
3
3
  import { readFileSync } from "node:fs";
4
4
  import os from "node:os";
5
5
  import fs$1 from "node:fs/promises";
@@ -1,18 +1,18 @@
1
1
  import "./paths-DVBShlw6.js";
2
- import { R as theme, c as defaultRuntime } from "./subsystem-Bv7dGhES.js";
3
- import "./utils-BHPdZE4h.js";
4
- import "./exec-DXtR2fhb.js";
5
- import "./agent-scope---6LLHj0.js";
6
- import "./model-selection-unMJyUIE.js";
2
+ import { R as theme, c as defaultRuntime } from "./subsystem-BoExtIHo.js";
3
+ import "./utils-Cd9QdCHh.js";
4
+ import "./exec-YIosokWE.js";
5
+ import "./agent-scope-CQCus0rI.js";
6
+ import "./model-selection-BLuqsGVB.js";
7
7
  import "./github-copilot-token-BW-SEg7E.js";
8
8
  import "./boolean-BgXe2hyu.js";
9
- import "./env-DE9xvYOL.js";
10
- import { i as loadConfig } from "./config-DH9TLUNc.js";
11
- import "./manifest-registry-DFckk-L8.js";
9
+ import "./env-ONzUVAG2.js";
10
+ import { i as loadConfig } from "./config-aFQssWKX.js";
11
+ import "./manifest-registry-CQhdnDBZ.js";
12
12
  import { n as pickPrimaryTailnetIPv6, t as pickPrimaryTailnetIPv4 } from "./tailnet-DATIFSsY.js";
13
- import { t as formatDocsLink } from "./links-CV4oki2u.js";
14
- import { t as renderTable } from "./table-DzBBIqHO.js";
15
- import { n as resolveWideAreaDiscoveryDomain, t as getWideAreaZonePath } from "./widearea-dns-BWYPcfby.js";
13
+ import { t as formatDocsLink } from "./links-Eax1UO3w.js";
14
+ import { t as renderTable } from "./table-B8dx3v4v.js";
15
+ import { n as resolveWideAreaDiscoveryDomain, t as getWideAreaZonePath } from "./widearea-dns-DzuRdwk5.js";
16
16
  import fs from "node:fs";
17
17
  import path from "node:path";
18
18
  import { spawnSync } from "node:child_process";
@@ -1,15 +1,15 @@
1
- import { k as theme, p as defaultRuntime } from "./entry.js";
2
- import "./auth-profiles-CcJ3hrog.js";
3
- import "./utils-Dk86IbEs.js";
4
- import "./exec-B8JKbXKW.js";
5
- import "./agent-scope-RCSw6gHy.js";
6
- import "./github-copilot-token-SLWintYd.js";
7
- import { i as loadConfig } from "./config-B7sno9eI.js";
8
- import "./manifest-registry-BTgLN_W2.js";
1
+ import { A as theme, p as defaultRuntime } 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 { i as loadConfig } from "./config-Bdhomfei.js";
8
+ import "./manifest-registry-u0okVSkU.js";
9
9
  import { n as pickPrimaryTailnetIPv6, t as pickPrimaryTailnetIPv4 } from "./tailnet-CL5GtL7t.js";
10
- import { t as formatDocsLink } from "./links-7M-j83As.js";
11
- import { t as renderTable } from "./table-oJQPTUL6.js";
12
- import { n as resolveWideAreaDiscoveryDomain, t as getWideAreaZonePath } from "./widearea-dns-WVCWJTEb.js";
10
+ import { t as formatDocsLink } from "./links-B8LAzWwg.js";
11
+ import { t as renderTable } from "./table-CwulTLQp.js";
12
+ import { n as resolveWideAreaDiscoveryDomain, t as getWideAreaZonePath } from "./widearea-dns-BaIgNEhY.js";
13
13
  import { spawnSync } from "node:child_process";
14
14
  import path from "node:path";
15
15
  import fs from "node:fs";
@@ -1,10 +1,10 @@
1
- import { O as isRich, k as theme, p as defaultRuntime } from "./entry.js";
2
- import { t as formatCliCommand } from "./command-format-ayFsmwwz.js";
3
- import "./utils-Dk86IbEs.js";
4
- import { t as runCommandWithTimeout } from "./exec-B8JKbXKW.js";
5
- import "./manifest-registry-BTgLN_W2.js";
6
- import { t as formatDocsLink } from "./links-7M-j83As.js";
7
- import { d as hasBinary } from "./skills-BvPUNjxo.js";
1
+ import { A as theme, k as isRich, p as defaultRuntime } from "./entry.js";
2
+ import { t as formatCliCommand } from "./command-format-Bxe0mWee.js";
3
+ import "./utils-BLJAc3ZV.js";
4
+ import { t as runCommandWithTimeout } from "./exec-CACT5OAW.js";
5
+ import "./manifest-registry-u0okVSkU.js";
6
+ import { t as formatDocsLink } from "./links-B8LAzWwg.js";
7
+ import { m as hasBinary } from "./skills-DRjfSQT3.js";
8
8
  import { n as runCommandWithRuntime } from "./cli-utils-LcHOt63h.js";
9
9
 
10
10
  //#region src/commands/docs.ts
@@ -1,12 +1,12 @@
1
1
  import "./paths-DVBShlw6.js";
2
- import { L as isRich, R as theme, c as defaultRuntime } from "./subsystem-Bv7dGhES.js";
3
- import "./utils-BHPdZE4h.js";
4
- import { t as runCommandWithTimeout } from "./exec-DXtR2fhb.js";
2
+ import { L as isRich, R as theme, c as defaultRuntime } from "./subsystem-BoExtIHo.js";
3
+ import "./utils-Cd9QdCHh.js";
4
+ import { t as runCommandWithTimeout } from "./exec-YIosokWE.js";
5
5
  import { t as formatCliCommand } from "./command-format-ChfKqObn.js";
6
6
  import "./boolean-BgXe2hyu.js";
7
- import "./manifest-registry-DFckk-L8.js";
8
- import { d as hasBinary } from "./skills-aFOsriMP.js";
9
- import { t as formatDocsLink } from "./links-CV4oki2u.js";
7
+ import "./manifest-registry-CQhdnDBZ.js";
8
+ import { m as hasBinary } from "./skills-DprQj9X2.js";
9
+ import { t as formatDocsLink } from "./links-Eax1UO3w.js";
10
10
  import { n as runCommandWithRuntime } from "./cli-utils-CRhVAaLV.js";
11
11
 
12
12
  //#region src/commands/docs.ts