openclaw-cortex 3.1.0 → 3.2.0

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 (386) hide show
  1. package/dist/{agents-DFGWWUWP.js → agents-Connanf3.js} +9 -9
  2. package/dist/{audio-preflight-CJMYPxgz.js → audio-preflight-CketII1D.js} +4 -4
  3. package/dist/{audio-preflight-Da8wJ2aM.js → audio-preflight-uMyPrpUu.js} +2 -2
  4. package/dist/{audit-D2RyL2xf.js → audit-DkAW6KBR.js} +5 -5
  5. package/dist/audit-cli-BXgvg5ZF.js +149 -0
  6. package/dist/audit-cli-DtqyB9AV.js +142 -0
  7. package/dist/{audit-BjY3NDuN.js → audit-qELipjtd.js} +5 -5
  8. package/dist/{auth-choice-GohCLqPi.js → auth-choice-iBFMtcSX.js} +6 -6
  9. package/dist/{auth-choice-options-DnA9f3yX.js → auth-choice-options-B1kkod6_.js} +1 -1
  10. package/dist/{auth-choice-options-DEXqZb42.js → auth-choice-options-ypl3E9Ly.js} +1 -1
  11. package/dist/{auth-choice-prompt-Dl-yzpY0.js → auth-choice-prompt-BRyWAtfZ.js} +1 -1
  12. package/dist/{auth-choice-prompt-UUacbtn9.js → auth-choice-prompt-HAxprx2p.js} +1 -1
  13. package/dist/{auth-choice-Ts5V5Aeh.js → auth-choice-qtLrrNVz.js} +5 -5
  14. package/dist/{banner-Bg78pfCD.js → banner-D_oPGRF8.js} +1 -1
  15. package/dist/{bonjour-discovery-Dci4cd0G.js → bonjour-discovery-D7009yxB.js} +1 -1
  16. package/dist/{bonjour-discovery-Bbq821TB.js → bonjour-discovery-DZl6ArZI.js} +1 -1
  17. package/dist/{browser-cli-Br6_uOTg.js → browser-cli-B9Vh8gTE.js} +1 -1
  18. package/dist/{browser-cli-6clFJFS6.js → browser-cli-BTtbPQaz.js} +1 -1
  19. package/dist/build-info.json +3 -3
  20. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  21. package/dist/{channel-options-DWVQz-Pr.js → channel-options-B48SGv9h.js} +1 -1
  22. package/dist/{channel-options-VO3dsstv.js → channel-options-BcJt26VG.js} +2 -2
  23. package/dist/{channel-web-CfYHK75g.js → channel-web-CgFmP49a.js} +2 -2
  24. package/dist/{channels-cli-CgzGUhuU.js → channels-cli-CL1qUEGy.js} +19 -19
  25. package/dist/{channels-cli-ClaXI2LY.js → channels-cli-DKyMl3-J.js} +18 -18
  26. package/dist/{chrome-jiKls1lm.js → chrome-7PNldBIY.js} +7 -7
  27. package/dist/{clack-prompter-xfiETF85.js → clack-prompter-CTPf_777.js} +2 -2
  28. package/dist/{clack-prompter-BKrj0iD5.js → clack-prompter-KpWBIhc1.js} +2 -2
  29. package/dist/{clawbot-cli-BLkszw7f.js → clawbot-cli-DbkjoCG5.js} +1 -1
  30. package/dist/{clawbot-cli-D--KZtXG.js → clawbot-cli-i4NzkdF4.js} +1 -1
  31. package/dist/{cli-jzRaj4XC.js → cli-DsZC1vDc.js} +2 -2
  32. package/dist/{cli-VXGGV02p.js → cli-lEZ3mJ9g.js} +4 -4
  33. package/dist/{command-registry-DdnU-C_q.js → command-registry-C2HYRZO_.js} +12 -12
  34. package/dist/{completion-cli-DuxZVRrg.js → completion-cli-DB5qbPxk.js} +1 -1
  35. package/dist/{completion-cli-BiPxrDMm.js → completion-cli-rVm9UjTQ.js} +3 -3
  36. package/dist/{config-cli-CxCTGO_g.js → config-cli-1O6rmVow.js} +1 -1
  37. package/dist/{config-cli-WYe98Ox0.js → config-cli-DKFT2jQY.js} +1 -1
  38. package/dist/{config-guard-DgjGJ8Lb.js → config-guard-BAA0NN6K.js} +3 -3
  39. package/dist/{config-guard-Fvw_vc_U.js → config-guard-FQYcQKxs.js} +1 -1
  40. package/dist/{configure--dU6eZNK.js → configure-Bq40wO_g.js} +18 -18
  41. package/dist/{configure-D83Cw4Tz.js → configure-Hjs-w_V-.js} +18 -18
  42. package/dist/control-ui/_app/immutable/assets/0.CIIOt0aD.css +1 -0
  43. package/dist/control-ui/_app/immutable/chunks/{DXhHboeH.js → PR_wZ9tz.js} +1 -1
  44. package/dist/control-ui/_app/immutable/entry/app.DKU3ZeOo.js +2 -0
  45. package/dist/control-ui/_app/immutable/entry/start.Bt2xwOar.js +1 -0
  46. package/dist/control-ui/_app/immutable/nodes/{0.B62uYxuw.js → 0.CDaa-GWT.js} +8 -8
  47. package/dist/control-ui/_app/immutable/nodes/{1.CDpdCVD0.js → 1.CYtkLWum.js} +1 -1
  48. package/dist/control-ui/_app/immutable/nodes/{9.DFhiU3G3.js → 10.DfK8stgG.js} +1 -1
  49. package/dist/control-ui/_app/immutable/nodes/{10.CFP8x2TH.js → 11.Dzw5x9Jt.js} +1 -1
  50. package/dist/control-ui/_app/immutable/nodes/{14.DP0eaD-P.js → 15.7DnWqn28.js} +1 -1
  51. package/dist/control-ui/_app/immutable/nodes/5.BbK5Iwro.js +4 -0
  52. package/dist/control-ui/_app/immutable/nodes/{5._XvLegf_.js → 6.CbanPjIA.js} +1 -1
  53. package/dist/control-ui/_app/immutable/nodes/{8.B5aVfCJN.js → 9.D4Abr5tX.js} +1 -1
  54. package/dist/control-ui/_app/version.json +1 -1
  55. package/dist/control-ui/index.html +6 -6
  56. package/dist/{cron-cli-QB8r6K_w.js → cron-cli-aGCB_2-m.js} +1 -1
  57. package/dist/{daemon-Cb7wiTzs.js → daemon-CrTIKc6F.js} +6 -6
  58. package/dist/{daemon-Des4AgjX.js → daemon-DP4R5-Kf.js} +6 -6
  59. package/dist/{daemon-cli-BlsF7JRB.js → daemon-cli-Bpc5ZmKC.js} +1 -1
  60. package/dist/{daemon-cli-sM-6bwnt.js → daemon-cli-CUh4NlQ7.js} +8 -8
  61. package/dist/{daemon-cli-CAME8LzX.js → daemon-cli-zo00dvxw.js} +1 -1
  62. package/dist/{daemon-runtime-CS81-2xm.js → daemon-runtime-DnzXuU_x.js} +1 -1
  63. package/dist/{deliver-DXKF_Nu0.js → deliver-CFSxoz2_.js} +1 -1
  64. package/dist/{devices-cli-DeDV4Bqj.js → devices-cli-3ZwsBIF1.js} +1 -1
  65. package/dist/{devices-cli-DC0MbgAK.js → devices-cli-D4MzUzC7.js} +1 -1
  66. package/dist/{diagnostics-23-FTnVz.js → diagnostics-D3Hu1kBI.js} +1 -1
  67. package/dist/{diagnostics-Ef27CLfy.js → diagnostics-D7bn87xJ.js} +1 -1
  68. package/dist/{directory-cli-SE46S0CB.js → directory-cli-CcPugz8R.js} +2 -2
  69. package/dist/{directory-cli-BIjxWy1d.js → directory-cli-DXwiDLrf.js} +2 -2
  70. package/dist/{dns-cli-74dMXPOa.js → dns-cli-DKZyzBHW.js} +2 -2
  71. package/dist/{dns-cli-B5TFMuUd.js → dns-cli-Dj9PvwCt.js} +2 -2
  72. package/dist/{doctor-completion-D0-JkRk1.js → doctor-completion-CDdw31wQ.js} +2 -2
  73. package/dist/{doctor-completion-DcqQQvqC.js → doctor-completion-lw65Gm69.js} +2 -2
  74. package/dist/{doctor-config-flow-VkeqkE_0.js → doctor-config-flow-BeaKHczK.js} +4 -4
  75. package/dist/{doctor-config-flow-CCgRJLm0.js → doctor-config-flow-H0rj1G82.js} +4 -4
  76. package/dist/{enable-55n-WSsE.js → enable-C2kZT1wf.js} +1 -1
  77. package/dist/{enable-CknE1f0w.js → enable-CBGVOpes.js} +1 -1
  78. package/dist/entry.js +1 -1
  79. package/dist/{exec-approvals-cli-Dd_vBz5L.js → exec-approvals-cli-Bnd2QORy.js} +5 -5
  80. package/dist/{exec-approvals-cli-oCsC4ad1.js → exec-approvals-cli-y-rX8HdN.js} +5 -5
  81. package/dist/extensionAPI.js +6 -6
  82. package/dist/{gateway-cli-Cfs77-mk.js → gateway-cli-D_RCXTvo.js} +389 -69
  83. package/dist/{gateway-cli-bSwcceJd.js → gateway-cli-yd0wJM_1.js} +388 -68
  84. package/dist/{health-fyXf4lEO.js → health-CuD8XoQy.js} +2 -2
  85. package/dist/{health-6g5hi28u.js → health-HfXeNmAj.js} +2 -2
  86. package/dist/{hooks-cli-CZfvOlY1.js → hooks-cli-B9pYOLSo.js} +10 -10
  87. package/dist/{hooks-cli-D59S5DQ3.js → hooks-cli-CfXcytes.js} +8 -8
  88. package/dist/{hooks-status-C9KqWt8h.js → hooks-status-Cp7ejPFf.js} +1 -1
  89. package/dist/{hooks-status-QGgVvmRr.js → hooks-status-b7LxQMuo.js} +1 -1
  90. package/dist/{image-DChVqMFC.js → image-DafeVSso.js} +1 -1
  91. package/dist/index.js +10 -10
  92. package/dist/{inspect-CKqi1YnO.js → inspect-CRH0n6VO.js} +1 -1
  93. package/dist/{inspect-cZ9bY884.js → inspect-De36nczp.js} +1 -1
  94. package/dist/{install-safe-path-Cx0jIhFX.js → install-safe-path-BUZoxvjo.js} +1 -1
  95. package/dist/{install-safe-path-BK8js28D.js → install-safe-path-C__62m3G.js} +1 -1
  96. package/dist/{installs-Bb-tLJtw.js → installs-BQomWNkv.js} +3 -3
  97. package/dist/{installs-D96MHCfz.js → installs-DOzoX6Lj.js} +3 -3
  98. package/dist/{lifecycle-core-BsxpzMSa.js → lifecycle-core-D-idKcJT.js} +4 -4
  99. package/dist/{lifecycle-core-Bt5BqaIY.js → lifecycle-core-DtN4Wg9p.js} +4 -4
  100. package/dist/{logs-cli-3J59cVdu.js → logs-cli-Co-dRkBt.js} +1 -1
  101. package/dist/{logs-cli-v35EJjb3.js → logs-cli-DxRr-okE.js} +1 -1
  102. package/dist/{memory-cli-DWydhV-V.js → memory-cli-BuqY12GX.js} +1 -1
  103. package/dist/{memory-cli-D1uj5PFF.js → memory-cli-oTchxxCo.js} +1 -1
  104. package/dist/{model-catalog-yzrJiO3y.js → model-catalog-CbowpOxX.js} +1 -1
  105. package/dist/{model-picker-ei3br5zp.js → model-picker-C8wvNgLt.js} +2 -2
  106. package/dist/{model-picker-nxntGU8X.js → model-picker-CfpSzPcs.js} +3 -3
  107. package/dist/{models-cli-CY__bDc5.js → models-cli-C9laZsKz.js} +14 -14
  108. package/dist/{models-cli-Bk9n0tJe.js → models-cli-rLp2PtTV.js} +10 -10
  109. package/dist/{models-g128XKsn.js → models-iwnnK-j-.js} +9 -9
  110. package/dist/{node-cli-Bj8ON11k.js → node-cli-Dp7mtofP.js} +10 -10
  111. package/dist/{node-cli-CJjrrKq9.js → node-cli-iV-j-wYM.js} +9 -9
  112. package/dist/{node-service-CPLJsCSU.js → node-service-BuwCiN6g.js} +1 -1
  113. package/dist/{node-service-D1-7_1cb.js → node-service-DMNdtnuy.js} +1 -1
  114. package/dist/{nodes-cli-Ci-Bcwf8.js → nodes-cli-CzfzXfgv.js} +2 -2
  115. package/dist/{nodes-cli-BxRAQoe9.js → nodes-cli-DYLMQpcr.js} +2 -2
  116. package/dist/{npm-registry-spec-KNhAHcQS.js → npm-registry-spec-GhKQD8SI.js} +1 -1
  117. package/dist/{npm-registry-spec-DkaZNHAW.js → npm-registry-spec-PuS2I1Em.js} +1 -1
  118. package/dist/{onboard-DmTh7SXf.js → onboard-Bd7A_X5U.js} +14 -14
  119. package/dist/{onboard-DMifN-i1.js → onboard-DtWmcQlQ.js} +15 -15
  120. package/dist/{onboard-channels-DvKfcKcM.js → onboard-channels-CUrbd3Wb.js} +5 -5
  121. package/dist/{onboard-channels-OJRGzltw.js → onboard-channels-jQ3eUVs5.js} +6 -6
  122. package/dist/{onboard-custom-CVkHP2LI.js → onboard-custom-DGPRdl88.js} +2 -2
  123. package/dist/{onboard-custom-EVjMXHxg.js → onboard-custom-zu25Ce3O.js} +2 -2
  124. package/dist/{onboard-hooks-CbvnumRC.js → onboard-hooks-BGNKszKA.js} +2 -2
  125. package/dist/{onboard-hooks-Bf71KQxe.js → onboard-hooks-Bfe1d0y4.js} +2 -2
  126. package/dist/{onboard-remote-B1ALuxz1.js → onboard-remote-Crh1ykbv.js} +2 -2
  127. package/dist/{onboard-remote-DvD400Xk.js → onboard-remote-DNAePOvY.js} +2 -2
  128. package/dist/{onboard-skills-DADB1X8v.js → onboard-skills-JPKMqrus.js} +1 -1
  129. package/dist/{onboard-skills-B-SjYRhY.js → onboard-skills-Xk7z94Bl.js} +1 -1
  130. package/dist/{onboarding-CQzBfGpz.js → onboarding-D5BRyKY0.js} +14 -14
  131. package/dist/{onboarding-De7bUYn0.js → onboarding-JoS3gVBZ.js} +14 -14
  132. package/dist/{onboarding.finalize-CfRbKgYD.js → onboarding.finalize-Bbi4NFVI.js} +16 -16
  133. package/dist/{onboarding.finalize-FFs7GkQQ.js → onboarding.finalize-DwWgfZqG.js} +17 -17
  134. package/dist/{onboarding.gateway-config-BtNlVRR8.js → onboarding.gateway-config-C57J8mMa.js} +1 -1
  135. package/dist/{onboarding.gateway-config-DcPeHQOU.js → onboarding.gateway-config-DnCISZSx.js} +1 -1
  136. package/dist/{openai-model-default-nCXNgugA.js → openai-model-default-Cr6-L10w.js} +1 -1
  137. package/dist/{openai-model-default-DPkXfXr6.js → openai-model-default-JoN5c4An.js} +1 -1
  138. package/dist/{pairing-cli-BLo9Ainb.js → pairing-cli-Bcec_R3Q.js} +1 -1
  139. package/dist/{pairing-cli-_0WmOf9q.js → pairing-cli-PoxPVvhd.js} +1 -1
  140. package/dist/{pi-auth-json-CSe5xRCM.js → pi-auth-json-DoNJ0jhK.js} +1 -1
  141. package/dist/{pi-embedded-DPsT4Vb4.js → pi-embedded-Ig1YOX5t.js} +16 -16
  142. package/dist/{pi-embedded-helpers--8pQ_5Ix.js → pi-embedded-helpers-C-3FQnQz.js} +4 -4
  143. package/dist/{plugin-auto-enable-Czk5vqi1.js → plugin-auto-enable-CgzsK3UF.js} +1 -1
  144. package/dist/{plugin-auto-enable-bi7o87Rj.js → plugin-auto-enable-Co1CxSEm.js} +2 -2
  145. package/dist/{plugin-registry-Bq3rtiCL.js → plugin-registry-6pWyMqfg.js} +1 -1
  146. package/dist/{plugin-registry-D6-nPnzv.js → plugin-registry-CAfPxKab.js} +1 -1
  147. package/dist/plugin-sdk/{accounts-vV5Gfd26.js → accounts-CRs7kbLB.js} +1 -1
  148. package/dist/plugin-sdk/{accounts-iN-dbgw4.js → accounts-b1Cok6r_.js} +3 -3
  149. package/dist/plugin-sdk/{accounts-LxMkgia0.js → accounts-uAqOguyH.js} +1 -1
  150. package/dist/plugin-sdk/{active-listener-Bh0LXjEI.js → active-listener-BdVTYHTN.js} +1 -1
  151. package/dist/plugin-sdk/{agent-scope-BS_vck4W.js → agent-scope-OWMdRegz.js} +2 -2
  152. package/dist/plugin-sdk/{api-key-rotation-LkecAWT_.js → api-key-rotation-DedcgBOR.js} +1 -1
  153. package/dist/plugin-sdk/{audio-preflight-Bs1SkEb1.js → audio-preflight-EYVIo5wC.js} +25 -25
  154. package/dist/plugin-sdk/{bindings-CTCkMENc.js → bindings-LROfNV1W.js} +2 -2
  155. package/dist/plugin-sdk/{channel-activity-PV3vhwo2.js → channel-activity-DHI8R5Xg.js} +1 -1
  156. package/dist/plugin-sdk/{channel-web-C1Hsjdgf.js → channel-web-CGp1_ZH4.js} +22 -22
  157. package/dist/plugin-sdk/{chrome-cWvSiZw3.js → chrome-BS8LYp6z.js} +3 -3
  158. package/dist/plugin-sdk/{chunk-CyOBR4uk.js → chunk-C9J4kyVw.js} +1 -1
  159. package/dist/plugin-sdk/{command-format-C5kdEGEu.js → command-format-BTciq6Gg.js} +1 -1
  160. package/dist/plugin-sdk/{commands-registry-Bvksrm0n.js → commands-registry-pHxVP_Zd.js} +3 -3
  161. package/dist/plugin-sdk/{common-CJo4CK5_.js → common-CCPGi5xr.js} +2 -2
  162. package/dist/plugin-sdk/{config-B8Nc1zrG.js → config-DemNgb7Z.js} +9 -9
  163. package/dist/plugin-sdk/{deliver-Dut_1pt2.js → deliver-BCvqh6o3.js} +10 -10
  164. package/dist/plugin-sdk/{diagnostic-DFXnVf2I.js → diagnostic-oBxO5N68.js} +1 -1
  165. package/dist/plugin-sdk/{fs-safe-CdpuSWry.js → fs-safe-CGcLaY9D.js} +1 -1
  166. package/dist/plugin-sdk/{image-B3tSrFDE.js → image-BHSeZfna.js} +4 -4
  167. package/dist/plugin-sdk/index.js +52 -52
  168. package/dist/plugin-sdk/{ir-05vuco_v.js → ir-JSGKj1e6.js} +4 -4
  169. package/dist/plugin-sdk/{local-roots-DlmKIABh.js → local-roots-jpNoUngc.js} +3 -3
  170. package/dist/plugin-sdk/{login-_t6d0RBi.js → login-Ckh0Yz4j.js} +7 -7
  171. package/dist/plugin-sdk/{login-qr-Czq6nBnB.js → login-qr-DRY27T-V.js} +9 -9
  172. package/dist/plugin-sdk/{manager-DEOMAxd_.js → manager-B9XMF8DU.js} +8 -8
  173. package/dist/plugin-sdk/{manifest-registry-BgkX6ON4.js → manifest-registry-Lzj-fZNH.js} +1 -1
  174. package/dist/plugin-sdk/{markdown-tables-FF81O4MP.js → markdown-tables-CgnPuqk-.js} +1 -1
  175. package/dist/plugin-sdk/{message-channel-DxNExIdv.js → message-channel-C3OrO29D.js} +1 -1
  176. package/dist/plugin-sdk/{model-selection-Bj-E4zbc.js → model-selection-BQiSfqzh.js} +4 -4
  177. package/dist/plugin-sdk/{normalize-DWmWs1Oq.js → normalize-raRH8X3d.js} +4 -4
  178. package/dist/plugin-sdk/{outbound-D2-05wUl.js → outbound-CtRrsxZT.js} +7 -7
  179. package/dist/plugin-sdk/{outbound-attachment-DmbQx_Vk.js → outbound-attachment-BD9q-xgD.js} +2 -2
  180. package/dist/plugin-sdk/{pi-auth-json-D-qvsSpX.js → pi-auth-json-BlIDGSl5.js} +5 -5
  181. package/dist/plugin-sdk/{pi-embedded-helpers-C1u6XyK5.js → pi-embedded-helpers-0qu1zxwF.js} +17 -17
  182. package/dist/plugin-sdk/{plugins-0PB0IWJL.js → plugins-BJciHbYr.js} +3 -3
  183. package/dist/plugin-sdk/{pw-ai-BIyeKPJF.js → pw-ai-DkUDisr8.js} +8 -8
  184. package/dist/plugin-sdk/{qmd-manager-DeQxerRp.js → qmd-manager-kPD4Wyie.js} +4 -4
  185. package/dist/plugin-sdk/{registry-BECEtj9n.js → registry-C8pj8ctW.js} +2 -2
  186. package/dist/plugin-sdk/{replies-DnGHvUeV.js → replies-0BFlZXJ5.js} +3 -3
  187. package/dist/plugin-sdk/{reply-Due6Dl-a.js → reply-BUzGHOJ7.js} +78 -78
  188. package/dist/plugin-sdk/{reply-prefix-UgReuQSG.js → reply-prefix-YUOHz1rF.js} +1 -1
  189. package/dist/plugin-sdk/{resolve-route-BaFHJbum.js → resolve-route-DudlMKs4.js} +3 -3
  190. package/dist/plugin-sdk/{retry-Bkj1k1me.js → retry-B8Oq5mgi.js} +1 -1
  191. package/dist/plugin-sdk/{runner-Bq1wBell.js → runner-BkD3LLSl.js} +9 -9
  192. package/dist/plugin-sdk/{send-MrY4gJ_w.js → send-9i1KJYhJ.js} +7 -7
  193. package/dist/plugin-sdk/{send-D4HKCCvV.js → send-A_uouj00.js} +7 -7
  194. package/dist/plugin-sdk/{send-By-dm-fT.js → send-CpfmIaxP.js} +11 -11
  195. package/dist/plugin-sdk/{send-NUKqMNZh.js → send-DREpPboJ.js} +6 -6
  196. package/dist/plugin-sdk/{send-M99nJHP9.js → send-Di1hHvf2.js} +11 -11
  197. package/dist/plugin-sdk/{session-DGLRioDC.js → session-CpS-Mhnp.js} +4 -4
  198. package/dist/plugin-sdk/{skill-commands-Cw-IRPUz.js → skill-commands-CTB7AZXn.js} +5 -5
  199. package/dist/plugin-sdk/{skills-D0-IpJne.js → skills-BCD1hFBZ.js} +7 -7
  200. package/dist/plugin-sdk/{sqlite-DtIiUWZr.js → sqlite-Yn48izJ_.js} +1 -1
  201. package/dist/plugin-sdk/{store-BcTI1iBS.js → store-BJRhX9Bi.js} +2 -2
  202. package/dist/plugin-sdk/{subsystem-Ck27y_6W.js → subsystem-BfLMZ8kW.js} +1 -1
  203. package/dist/plugin-sdk/{tables-B6ajREI6.js → tables-D5aPNTF6.js} +1 -1
  204. package/dist/plugin-sdk/{thinking-D81fexfE.js → thinking-BACprzA0.js} +5 -5
  205. package/dist/plugin-sdk/{tokens-B6GWdF_0.js → tokens-D1LxPszt.js} +1 -1
  206. package/dist/plugin-sdk/{tool-loop-detection-CbPwu1_R.js → tool-loop-detection-CYSptBsl.js} +2 -2
  207. package/dist/plugin-sdk/web-DNugKZLo.js +65 -0
  208. package/dist/plugin-sdk/{whatsapp-actions-B8IYO5sc.js → whatsapp-actions-CGuheX42.js} +20 -20
  209. package/dist/{plugins-cli-BBPth1Z6.js → plugins-cli-B1yYys0A.js} +11 -11
  210. package/dist/{plugins-cli-C9JJoC7q.js → plugins-cli-Dl95iV2J.js} +9 -9
  211. package/dist/{program-BEFngAg_.js → program-a6gIDhmg.js} +12 -12
  212. package/dist/{program-context-Bd7FDrI6.js → program-context-a5xRVp1E.js} +47 -39
  213. package/dist/{prompt-select-styled-rdKrlwqC.js → prompt-select-styled-BEAD7Qf_.js} +20 -20
  214. package/dist/{prompt-select-styled-0lIQRloq.js → prompt-select-styled-pDE5STe1.js} +21 -21
  215. package/dist/{provider-auth-helpers-1tpv3AhX.js → provider-auth-helpers-C2efwIJ1.js} +4 -4
  216. package/dist/{provider-auth-helpers-C3rs3jFv.js → provider-auth-helpers-Cgi-JpAw.js} +4 -4
  217. package/dist/{push-apns-ByshEodu.js → push-apns-CBVQ1O88.js} +1 -1
  218. package/dist/{push-apns-CdHUueH2.js → push-apns-DgHzRUEl.js} +1 -1
  219. package/dist/{pw-ai-D6PxL0UG.js → pw-ai-CNp2t_EO.js} +1 -1
  220. package/dist/{register.agent-KAixKF-e.js → register.agent-BzIdik-2.js} +22 -22
  221. package/dist/{register.agent-DY1rT-kZ.js → register.agent-C_hXidrG.js} +24 -24
  222. package/dist/{register.configure-CvKA3Sss.js → register.configure-DQeftoKx.js} +34 -34
  223. package/dist/{register.configure-DH6m9Dbt.js → register.configure-g10-MK8e.js} +34 -34
  224. package/dist/{register.init-C7vQ5ty0.js → register.init-CUPE0cHA.js} +4 -4
  225. package/dist/{register.init-p2x-x-f8.js → register.init-Dij0ZrC0.js} +4 -4
  226. package/dist/{register.maintenance-vVCRwkP4.js → register.maintenance-C0OozXb_.js} +26 -26
  227. package/dist/{register.maintenance-BgHX_v3B.js → register.maintenance-CkXb4wzI.js} +28 -28
  228. package/dist/{register.message-gR7FXB8b.js → register.message-C0zBUZj1.js} +5 -5
  229. package/dist/{register.message-i1zkq7RF.js → register.message-De4xgZGu.js} +6 -6
  230. package/dist/{register.onboard-ZV_tfZG_.js → register.onboard-B612Ekbb.js} +20 -20
  231. package/dist/{register.onboard-DfrgIeaZ.js → register.onboard-BFR0fFZX.js} +21 -21
  232. package/dist/{register.setup-Bsl2gf-B.js → register.setup-Caf3i42W.js} +20 -20
  233. package/dist/{register.setup-D-hAPrfW.js → register.setup-CtDlzU4V.js} +21 -21
  234. package/dist/{register.status-health-sessions-7cVPFmZG.js → register.status-health-sessions-B4fHdwpJ.js} +18 -18
  235. package/dist/{register.status-health-sessions-D5r2mHKj.js → register.status-health-sessions-B_yvC_IP.js} +17 -17
  236. package/dist/{register.subclis-abFJJY6D.js → register.subclis-7bpaXBdE.js} +37 -29
  237. package/dist/{reply-CwuYaPUY.js → reply-BNfv4Ttn.js} +9 -9
  238. package/dist/{run-main-DYoPNoW5.js → run-main-Y3Uf0qp5.js} +24 -24
  239. package/dist/{runner-CRUcM4a1.js → runner-BN1T_Ne4.js} +1 -1
  240. package/dist/{runner-CXxgpUTT.js → runner-DZGwjCQ8.js} +1 -1
  241. package/dist/{runners-BrJPcqyJ.js → runners-C2-1DcXS.js} +7 -7
  242. package/dist/{runners-BAXojh38.js → runners-GZYUkx-2.js} +7 -7
  243. package/dist/{security-cli-D4GRgOyQ.js → security-cli-BBZ808uq.js} +3 -3
  244. package/dist/{security-cli-DWY-vrKB.js → security-cli-Ci9uePi2.js} +3 -3
  245. package/dist/{server-node-events-7Xu3f7tS.js → server-node-events-BBifAwDM.js} +5 -5
  246. package/dist/{server-node-events-GvqKSJEV.js → server-node-events-DWWxWJHk.js} +3 -3
  247. package/dist/{service-Bci1KDFO.js → service-7TtUcMJq.js} +1 -1
  248. package/dist/{service-0NbohZ8s.js → service-Cu7ieLvZ.js} +1 -1
  249. package/dist/{session-dirs-HNLtHJ3O.js → session-dirs-CCdhZT0k.js} +3 -3
  250. package/dist/{session-dirs-BMCU5I9u.js → session-dirs-CIPNs4EK.js} +3 -3
  251. package/dist/{setup-qSIfHSqC.js → setup-DwAfJSCF.js} +1 -1
  252. package/dist/{setup-Dldkh1a8.js → setup-RQ3Uj-Tt.js} +1 -1
  253. package/dist/{shared-D8AUGe9Z.js → shared-CrPSzpAK.js} +1 -1
  254. package/dist/{shared-DNTO_mJp.js → shared-CzoHL8EG.js} +1 -1
  255. package/dist/{skills-cli-CM3wAhcI.js → skills-cli-BH0eERa-.js} +1 -1
  256. package/dist/{skills-cli-r1KS1oIQ.js → skills-cli-DiPfBmlI.js} +1 -1
  257. package/dist/{skills-install-D9QMhbxP.js → skills-install-Czf3NCmL.js} +3 -3
  258. package/dist/{skills-install-DlMTcQDE.js → skills-install-DZ5aRsyP.js} +3 -3
  259. package/dist/{status-_qW_2na1.js → status--mrN_W_U.js} +14 -14
  260. package/dist/{status-V-dQaLmz.js → status-Br2tlhc-.js} +1 -1
  261. package/dist/{status-BP3UtuGr.js → status-CwTBZYF8.js} +14 -14
  262. package/dist/{status-C6MlKGQ4.js → status-pSqbCX9M.js} +1 -1
  263. package/dist/{status.update-BUCokEjk.js → status.update-DUXJAggs.js} +1 -1
  264. package/dist/{status.update-P7aU2obf.js → status.update-s8H29Man.js} +1 -1
  265. package/dist/{subagent-registry-D5OOZhWd.js → subagent-registry-zIjho4Sx.js} +7 -7
  266. package/dist/{systemd-hints-BgcSCvUs.js → systemd-hints-D6arXULU.js} +4 -4
  267. package/dist/{systemd-hints-k45i-vVl.js → systemd-hints-DKcj1qba.js} +4 -4
  268. package/dist/{systemd-linger-BZTSu7IW.js → systemd-linger-CS2529_b.js} +2 -2
  269. package/dist/{systemd-linger-BGSDHb2w.js → systemd-linger-Doc2XbHm.js} +2 -2
  270. package/dist/{tui-cli-D7h8fAwG.js → tui-cli-BxmbE0rC.js} +1 -1
  271. package/dist/{tui-cli-CPhjIczA.js → tui-cli-CQXfzM3c.js} +1 -1
  272. package/dist/{update-CbOSx9mE.js → update-BQD52CHs.js} +1 -1
  273. package/dist/{update-blirS9pH.js → update-DCT94pb8.js} +1 -1
  274. package/dist/{update-check-BJw7yNjU.js → update-check-BrrYgTQO.js} +1 -1
  275. package/dist/{update-cli-t7J2ZeJa.js → update-cli-D-f0EC6V.js} +37 -37
  276. package/dist/{update-cli-BIbwcmoL.js → update-cli-DQ-gzfuL.js} +35 -35
  277. package/dist/{web-QGqe0Uj4.js → web-ComVBhjb.js} +6 -6
  278. package/dist/{web-By-kRvFi.js → web-CuEg5tFB.js} +2 -2
  279. package/dist/{web-C9vY5D5V.js → web-Uu6oWOPn.js} +5 -5
  280. package/dist/{webhooks-cli-BvrLfKKF.js → webhooks-cli-BLnOPXwx.js} +1 -1
  281. package/dist/{webhooks-cli-D5mvAQYZ.js → webhooks-cli-DdpgWHN2.js} +1 -1
  282. package/package.json +1 -1
  283. package/dist/control-ui/_app/immutable/assets/0.z0sOcqs9.css +0 -1
  284. package/dist/control-ui/_app/immutable/entry/app.BJP-sOIH.js +0 -2
  285. package/dist/control-ui/_app/immutable/entry/start.PIf-cCdk.js +0 -1
  286. package/dist/plugin-sdk/web-BfmMxgKj.js +0 -65
  287. /package/dist/{agents.config-BPyTmpPK.js → agents.config-DHoLdlhC.js} +0 -0
  288. /package/dist/{agents.config-D731KhB0.js → agents.config-sDVfdzxD.js} +0 -0
  289. /package/dist/{allow-from-BzKkMBk8.js → allow-from-BWMFfmlZ.js} +0 -0
  290. /package/dist/{allow-from-Cnsv6ADB.js → allow-from-Cm2uzFk5.js} +0 -0
  291. /package/dist/{audio-preflight-CZ94CIQw.js → audio-preflight-qssIjQ-F.js} +0 -0
  292. /package/dist/{auth-choice-legacy-BKXTgyr4.js → auth-choice-legacy-DxCamFcQ.js} +0 -0
  293. /package/dist/{auth-choice-legacy-hjIR80f8.js → auth-choice-legacy-E4Y1ux1Z.js} +0 -0
  294. /package/dist/{auth-token-Ci5rpCz5.js → auth-token-DATumkKN.js} +0 -0
  295. /package/dist/{auth-token-DpULas_n.js → auth-token-NZQN5y-U.js} +0 -0
  296. /package/dist/{catalog-DAXVp4Hp.js → catalog-2EmOju0o.js} +0 -0
  297. /package/dist/{channels-status-issues-DanmEwDB.js → channels-status-issues-C4ciBh-M.js} +0 -0
  298. /package/dist/{channels-status-issues-COukP8Y6.js → channels-status-issues-xbZicfvF.js} +0 -0
  299. /package/dist/{clipboard-C0XDE_OY.js → clipboard-DHic8nRu.js} +0 -0
  300. /package/dist/{clipboard-B7hFDaBm.js → clipboard-DuDW3vYo.js} +0 -0
  301. /package/dist/{config-validation-CQ0H2AMy.js → config-validation-B1DoZdes.js} +0 -0
  302. /package/dist/{config-validation-CVifNndy.js → config-validation-lwkaqwYa.js} +0 -0
  303. /package/dist/control-ui/_app/immutable/nodes/{11.Sd6L6Nq2.js → 12.Sd6L6Nq2.js} +0 -0
  304. /package/dist/control-ui/_app/immutable/nodes/{12.tVVXkjFh.js → 13.tVVXkjFh.js} +0 -0
  305. /package/dist/control-ui/_app/immutable/nodes/{13.D93_LX58.js → 14.D93_LX58.js} +0 -0
  306. /package/dist/control-ui/_app/immutable/nodes/{15.CIr4ejir.js → 16.CIr4ejir.js} +0 -0
  307. /package/dist/control-ui/_app/immutable/nodes/{16.QX2ielYQ.js → 17.QX2ielYQ.js} +0 -0
  308. /package/dist/control-ui/_app/immutable/nodes/{17.6qOW3iFE.js → 18.6qOW3iFE.js} +0 -0
  309. /package/dist/control-ui/_app/immutable/nodes/{6.B2G6IFSu.js → 7.B2G6IFSu.js} +0 -0
  310. /package/dist/control-ui/_app/immutable/nodes/{7.C7FQ9bAP.js → 8.C7FQ9bAP.js} +0 -0
  311. /package/dist/{control-ui-assets-DVRic6kO.js → control-ui-assets-DnNkT3mI.js} +0 -0
  312. /package/dist/{control-ui-assets-DDs6rXoP.js → control-ui-assets-LA1g8l2Z.js} +0 -0
  313. /package/dist/{cron-cli-CI-bQlmZ.js → cron-cli-DAFfUWqL.js} +0 -0
  314. /package/dist/{daemon-runtime-D4iQgg-u.js → daemon-runtime-diKhAkzH.js} +0 -0
  315. /package/dist/{dm-policy-shared-CVbsDo_m.js → dm-policy-shared-CwzTKPWR.js} +0 -0
  316. /package/dist/{dm-policy-shared-ClEAJ4JJ.js → dm-policy-shared-DfAxaWbA.js} +0 -0
  317. /package/dist/{docs-cli-uSamdGao.js → docs-cli-CmcfAiHF.js} +0 -0
  318. /package/dist/{docs-cli-BZGTgGrB.js → docs-cli-WYkzyw8T.js} +0 -0
  319. /package/dist/{format-C7-5KbO2.js → format-CTmea3zf.js} +0 -0
  320. /package/dist/{format-DBqU4ar8.js → format-wIeBvJLR.js} +0 -0
  321. /package/dist/{gmail-setup-utils-ZFcCjPly.js → gmail-setup-utils-C4IVVrZO.js} +0 -0
  322. /package/dist/{gmail-setup-utils-DhpSrQNl.js → gmail-setup-utils-Rfb3FX0J.js} +0 -0
  323. /package/dist/{health-format-if3Q3vD2.js → health-format-S-b7sQsV.js} +0 -0
  324. /package/dist/{health-format-BC_LUyJS.js → health-format-azWJfp5e.js} +0 -0
  325. /package/dist/{helpers-BMqFgDx8.js → helpers-CRF4tyVM.js} +0 -0
  326. /package/dist/{helpers-BIUvY7vn.js → helpers-Npa3_iL5.js} +0 -0
  327. /package/dist/{helpers-Ctj8giHC.js → helpers-xdkmLQDw.js} +0 -0
  328. /package/dist/{ipv4-CVdlCn-2.js → ipv4-C52gDH2M.js} +0 -0
  329. /package/dist/{ipv4-JtDdwuHX.js → ipv4-Dz51vmVq.js} +0 -0
  330. /package/dist/{logging-DhPrhYzz.js → logging-C8-t269D.js} +0 -0
  331. /package/dist/{logging-91m0KJMN.js → logging-D59-dc0L.js} +0 -0
  332. /package/dist/{login-qr-4D0SkvgJ.js → login-qr-Bhy40v7Q.js} +0 -0
  333. /package/dist/{login-qr-Cx7POWvS.js → login-qr-DFnPwMt5.js} +0 -0
  334. /package/dist/{model-param-b-B6FHfgGB.js → model-param-b-CMJBkHox.js} +0 -0
  335. /package/dist/{model-param-b-YCqgSBAn.js → model-param-b-CtugMKF_.js} +0 -0
  336. /package/dist/{note-DLcYjdh7.js → note-COLxJd1A.js} +0 -0
  337. /package/dist/{note-B8g6kl8x.js → note-DewoEWtc.js} +0 -0
  338. /package/dist/{onboard-config-7cR7QGjL.js → onboard-config-BZIxuZ7r.js} +0 -0
  339. /package/dist/{onboard-config-DeF7eIAr.js → onboard-config-C5M0ze8s.js} +0 -0
  340. /package/dist/{parse-log-line-C6yJx969.js → parse-log-line-C2bNfwG3.js} +0 -0
  341. /package/dist/{parse-log-line-C7ynn72M.js → parse-log-line-DvyqdjCI.js} +0 -0
  342. /package/dist/{parse-port-C02PeAGr.js → parse-port-BnVa643B.js} +0 -0
  343. /package/dist/{parse-port-DnJYkByg.js → parse-port-QkaTJ4ru.js} +0 -0
  344. /package/dist/{path-safety-BEgQ9rq6.js → path-safety-BL0luniQ.js} +0 -0
  345. /package/dist/{path-safety-CP6a8uVu.js → path-safety-Yi1WxZLl.js} +0 -0
  346. /package/dist/{plugins-allowlist-CCpr61rO.js → plugins-allowlist-CLU_IjDy.js} +0 -0
  347. /package/dist/{plugins-allowlist-GsmzvLs7.js → plugins-allowlist-Ci7ynogX.js} +0 -0
  348. /package/dist/{ports-BsxTf9Nu.js → ports-DCcAHTa_.js} +0 -0
  349. /package/dist/{program-context-5q-A0wbP.js → program-context-Ds_91dTq.js} +0 -0
  350. /package/dist/{prompts-NOUgk6FH.js → prompts-C27EhvcG.js} +0 -0
  351. /package/dist/{prompts-m1IJwIAx.js → prompts-DbHSz44H.js} +0 -0
  352. /package/dist/{qmd-manager-C06_28MM.js → qmd-manager-3oLU7g8E.js} +0 -0
  353. /package/dist/{qmd-manager-BvV80INM.js → qmd-manager-C2OgnXnr.js} +0 -0
  354. /package/dist/{qr-cli-2Fy8laX0.js → qr-cli-C-M7Cr8-.js} +0 -0
  355. /package/dist/{qr-cli-snlmcHOZ.js → qr-cli-CFf4WwCt.js} +0 -0
  356. /package/dist/{rpc-B53Lst62.js → rpc-DhW1No2D.js} +0 -0
  357. /package/dist/{rpc-DOYJ1ToJ.js → rpc-wVn8a1qC.js} +0 -0
  358. /package/dist/{runtime-guard-Cs_ClFhP.js → runtime-guard-DOhPjoet.js} +0 -0
  359. /package/dist/{runtime-status-B3l0ReO9.js → runtime-status-D0P5lDGf.js} +0 -0
  360. /package/dist/{runtime-status-D6c3G7my.js → runtime-status-DKnpLP5Q.js} +0 -0
  361. /package/dist/{sandbox-cli-B2nWROn6.js → sandbox-cli-BZzO-G-E.js} +0 -0
  362. /package/dist/{sandbox-cli-C7vkwMnP.js → sandbox-cli-ner0PQZU.js} +0 -0
  363. /package/dist/{sessions-R_on4Zw8.js → sessions-DKM968hA.js} +0 -0
  364. /package/dist/{shared-BQtDR2KM.js → shared-C6D7PTpH.js} +0 -0
  365. /package/dist/{shared-BDiw3_ym.js → shared-TnZhahku.js} +0 -0
  366. /package/dist/{skill-scanner-Bheo_OM5.js → skill-scanner-CIuC1feQ.js} +0 -0
  367. /package/dist/{skill-scanner-CwX9i_5k.js → skill-scanner-DnsSvRKK.js} +0 -0
  368. /package/dist/{status-BUedPCLb.js → status-B8TZsG0t.js} +0 -0
  369. /package/dist/{status-TtGsgDjP.js → status-DmhrztXn.js} +0 -0
  370. /package/dist/{system-cli-BlP6wWBy.js → system-cli-BnE7tN9V.js} +0 -0
  371. /package/dist/{system-cli-BTjyT8Gj.js → system-cli-CWgd7EB8.js} +0 -0
  372. /package/dist/{system-run-command-BOJwzLhj.js → system-run-command-B8ZYVrSF.js} +0 -0
  373. /package/dist/{system-run-command-PyKttz6b.js → system-run-command-CPFFvnG3.js} +0 -0
  374. /package/dist/{systemd-CzUdukgB.js → systemd-DemAzd31.js} +0 -0
  375. /package/dist/{systemd-0aPKXWO6.js → systemd-DokFcnJ7.js} +0 -0
  376. /package/dist/{table-CnYUWV1p.js → table-CUa4MMQL.js} +0 -0
  377. /package/dist/{table-BUWXR5y-.js → table-D6Gdu916.js} +0 -0
  378. /package/dist/{tui-B3G_mrHY.js → tui-B0NcNHYX.js} +0 -0
  379. /package/dist/{tui-DVdma27Y.js → tui-pbn3ONIE.js} +0 -0
  380. /package/dist/{update-check-xr9SsfM1.js → update-check-DnX0d2ne.js} +0 -0
  381. /package/dist/{vllm-setup-CAy1vRJ-.js → vllm-setup-BNKMIbIo.js} +0 -0
  382. /package/dist/{vllm-setup-POm89Pya.js → vllm-setup-CDcd_nVe.js} +0 -0
  383. /package/dist/{widearea-dns-Ch3SpQBE.js → widearea-dns-5AVs3ht0.js} +0 -0
  384. /package/dist/{widearea-dns-D_JsGJ9_.js → widearea-dns-BiHqFzVe.js} +0 -0
  385. /package/dist/{workspace-BPoYjLyJ.js → workspace-C1EdIb-r.js} +0 -0
  386. /package/dist/{workspace-NVPAcG5w.js → workspace-IziJxxVr.js} +0 -0
@@ -23,7 +23,7 @@ import { t as rawDataToString } from "./ws-_-dDG5N0.js";
23
23
  import { n as pickPrimaryTailnetIPv4, r as pickPrimaryTailnetIPv6 } from "./tailnet-Cmumpn76.js";
24
24
  import { a as isValidIPv4, c as pickPrimaryLanIPv4, d as resolveGatewayListenHosts, f as resolveHostName, i as isTrustedProxyAddress, l as resolveGatewayBindHost, n as isLoopbackHost, o as normalizeHostHeader, t as isLoopbackAddress, u as resolveGatewayClientIp } from "./net-BxenOPeq.js";
25
25
  import { i as normalizeInputProvenance } from "./input-provenance-B7mgmKVR.js";
26
- import { $n as OPENAI_TTS_VOICES, At as stripLegacyDeliveryFields, B as getTotalPendingReplies, Bn as resolveUserTimezone, Bt as deferGatewayRestartUntilIdle, C as agentCommand, Cn as extractFileContentFromSource, Ct as normalizeOptionalSessionKey, D as createOutboundSendDeps, Dt as migrateLegacyCronPayload, E as resolveAgentOutboundTarget, En as resolveInputFileLimits, Et as normalizeRequiredName, Ft as getHookType, G as resolveCronStyleNow, Gn as resolveTtsAutoMode, Gt as setGatewaySigusr1RestartPolicy, Hn as isTtsEnabled, Ht as isGatewaySigusr1RestartExternallyAllowed, In as isAbortTrigger, It as isExternalHookSession, J as runCliAgent, Jn as resolveTtsProviderOrder, K as getCliSessionId, Kn as resolveTtsConfig, Kt as setPreRestartDeferralCheck, Ln as stopSubagentsForRequester, Lt as applyBrowserProxyPaths, N as buildHistoryContextFromEntries, Nn as formatZonedTimestamp, Nt as buildSafeExternalPrompt, O as createDefaultDeps, On as resolveAgentTimeoutMs, Ot as buildDeliveryFromLegacyPayload, Pt as detectSuspiciousPatterns, Q as resolveAnnounceTargetFromKey, Qn as OPENAI_TTS_MODELS, R as dispatchInboundMessage, Rt as persistBrowserProxyFiles, S as sleepWithAbort, Sn as DEFAULT_INPUT_TIMEOUT_MS, St as normalizeOptionalAgentId, T as resolveAgentDeliveryPlan, Tn as normalizeMimeList, Tt as normalizePayloadToSystemText, U as BARE_SESSION_RESET_PROMPT, Un as isTtsProviderConfigured, Ut as markGatewaySigusr1RestartHandled, Vn as getTtsProvider, Vt as emitGatewayRestart, Wn as resolveTtsApiKey, Wt as scheduleGatewaySigusr1Restart, X as createOpenClawTools, Xn as setTtsProvider, Yn as setTtsEnabled, Yt as loadProviderUsageSummary, Z as readLatestAssistantReply, Zn as textToSpeech, _t as writeRestartSentinel, a as runSubagentAnnounceFlow, ar as waitForActiveTasks, at as resolveSessionDeliveryTarget, b as requestBodyErrorToText, bn as DEFAULT_INPUT_IMAGE_MIMES, bt as normalizeCronJobPatch, c as abortEmbeddedPiRun, d as applyToolPolicyPipeline, dr as stripHeartbeatToken, dt as consumeRestartSentinel, er as getActiveTaskCount, et as ensureOutboundSessionEntry, f as buildDefaultToolPolicyPipelineSteps, fn as applyModelOverrideToSessionEntry, fr as clearAgentRunContext, ft as formatDoctorNonInteractiveHint, g as loadOpenClawPlugins, gn as isSystemEventContextChanged, gr as registerAgentRunContext, hn as enqueueSystemEvent, hr as onAgentEvent, ht as summarizeRestartSentinel, ir as setCommandLaneConcurrency, it as resolveOutboundTarget, k as createOutboundSendDeps$1, kt as hasLegacyDeliveryHints, l as getActiveEmbeddedRunCount, lt as runWithModelFallback, m as getPluginToolMeta, mn as parseVerboseOverride, mr as getAgentRunContext, n as initSubagentRegistry, nr as getTotalQueueSize, o as clearSessionQueues, on as normalizeSendPolicy, or as CommandLane, pn as applyVerboseOverride, pr as emitAgentEvent, pt as formatRestartSentinelMessage, q as setCliSessionId, qn as resolveTtsPrefsPath, qt as normalizeGroupActivation, r as listDescendantRunsForRequester, rn as requestHeartbeatNow, rr as resetAllLanes, s as runEmbeddedPiAgent, sn as resolveSendPolicy, sr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, st as resetDirectoryCache, t as countActiveDescendantRuns, tt as resolveOutboundSessionRoute, u as waitForEmbeddedPiRunEnd, v as handleSlackHttpRequest, vt as normalizeHttpWebhookUrl, wn as extractImageContentFromSource, wt as normalizeOptionalText, x as computeBackoff, xn as DEFAULT_INPUT_MAX_REDIRECTS, xt as inferLegacyName, y as readJsonBodyWithLimit, yn as DEFAULT_INPUT_IMAGE_MAX_BYTES, yt as normalizeCronJobCreate, z as createReplyDispatcher, zt as consumeGatewaySigusr1RestartAuthorization } from "./subagent-registry-D5OOZhWd.js";
26
+ import { $n as OPENAI_TTS_VOICES, At as stripLegacyDeliveryFields, B as getTotalPendingReplies, Bn as resolveUserTimezone, Bt as deferGatewayRestartUntilIdle, C as agentCommand, Cn as extractFileContentFromSource, Ct as normalizeOptionalSessionKey, D as createOutboundSendDeps, Dt as migrateLegacyCronPayload, E as resolveAgentOutboundTarget, En as resolveInputFileLimits, Et as normalizeRequiredName, Ft as getHookType, G as resolveCronStyleNow, Gn as resolveTtsAutoMode, Gt as setGatewaySigusr1RestartPolicy, Hn as isTtsEnabled, Ht as isGatewaySigusr1RestartExternallyAllowed, In as isAbortTrigger, It as isExternalHookSession, J as runCliAgent, Jn as resolveTtsProviderOrder, K as getCliSessionId, Kn as resolveTtsConfig, Kt as setPreRestartDeferralCheck, Ln as stopSubagentsForRequester, Lt as applyBrowserProxyPaths, N as buildHistoryContextFromEntries, Nn as formatZonedTimestamp, Nt as buildSafeExternalPrompt, O as createDefaultDeps, On as resolveAgentTimeoutMs, Ot as buildDeliveryFromLegacyPayload, Pt as detectSuspiciousPatterns, Q as resolveAnnounceTargetFromKey, Qn as OPENAI_TTS_MODELS, R as dispatchInboundMessage, Rt as persistBrowserProxyFiles, S as sleepWithAbort, Sn as DEFAULT_INPUT_TIMEOUT_MS, St as normalizeOptionalAgentId, T as resolveAgentDeliveryPlan, Tn as normalizeMimeList, Tt as normalizePayloadToSystemText, U as BARE_SESSION_RESET_PROMPT, Un as isTtsProviderConfigured, Ut as markGatewaySigusr1RestartHandled, Vn as getTtsProvider, Vt as emitGatewayRestart, Wn as resolveTtsApiKey, Wt as scheduleGatewaySigusr1Restart, X as createOpenClawTools, Xn as setTtsProvider, Yn as setTtsEnabled, Yt as loadProviderUsageSummary, Z as readLatestAssistantReply, Zn as textToSpeech, _t as writeRestartSentinel, a as runSubagentAnnounceFlow, ar as waitForActiveTasks, at as resolveSessionDeliveryTarget, b as requestBodyErrorToText, bn as DEFAULT_INPUT_IMAGE_MIMES, bt as normalizeCronJobPatch, c as abortEmbeddedPiRun, d as applyToolPolicyPipeline, dr as stripHeartbeatToken, dt as consumeRestartSentinel, er as getActiveTaskCount, et as ensureOutboundSessionEntry, f as buildDefaultToolPolicyPipelineSteps, fn as applyModelOverrideToSessionEntry, fr as clearAgentRunContext, ft as formatDoctorNonInteractiveHint, g as loadOpenClawPlugins, gn as isSystemEventContextChanged, gr as registerAgentRunContext, hn as enqueueSystemEvent, hr as onAgentEvent, ht as summarizeRestartSentinel, ir as setCommandLaneConcurrency, it as resolveOutboundTarget, k as createOutboundSendDeps$1, kt as hasLegacyDeliveryHints, l as getActiveEmbeddedRunCount, lt as runWithModelFallback, m as getPluginToolMeta, mn as parseVerboseOverride, mr as getAgentRunContext, n as initSubagentRegistry, nr as getTotalQueueSize, o as clearSessionQueues, on as normalizeSendPolicy, or as CommandLane, pn as applyVerboseOverride, pr as emitAgentEvent, pt as formatRestartSentinelMessage, q as setCliSessionId, qn as resolveTtsPrefsPath, qt as normalizeGroupActivation, r as listDescendantRunsForRequester, rn as requestHeartbeatNow, rr as resetAllLanes, s as runEmbeddedPiAgent, sn as resolveSendPolicy, sr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, st as resetDirectoryCache, t as countActiveDescendantRuns, tt as resolveOutboundSessionRoute, u as waitForEmbeddedPiRunEnd, v as handleSlackHttpRequest, vt as normalizeHttpWebhookUrl, wn as extractImageContentFromSource, wt as normalizeOptionalText, x as computeBackoff, xn as DEFAULT_INPUT_MAX_REDIRECTS, xt as inferLegacyName, y as readJsonBodyWithLimit, yn as DEFAULT_INPUT_IMAGE_MAX_BYTES, yt as normalizeCronJobCreate, z as createReplyDispatcher, zt as consumeGatewaySigusr1RestartAuthorization } from "./subagent-registry-zIjho4Sx.js";
27
27
  import { E as resolveSessionResetPolicy, F as resolveMainSessionKeyFromConfig, G as mergeDeliveryContext, L as snapshotSessionOrigin, M as resolveAgentMainSessionKey, N as resolveExplicitAgentSessionKey, P as resolveMainSessionKey, U as deliveryContextFromSession, V as cleanStaleLockFiles, _ as readSessionMessages, a as loadSessionStore, b as resolveSessionTranscriptCandidates, g as capArrayByJsonBytes, h as archiveSessionTranscripts, j as canonicalizeMainSessionAlias, m as archiveFileOnDisk, n as parseSessionThreadInfo, q as normalizeSessionDeliveryFields, t as extractDeliveryInfo, u as updateSessionStore, v as readSessionPreviewItemsFromTranscript, w as evaluateSessionFreshness, x as stripEnvelopeFromMessages } from "./sessions-CZFgqqFB.js";
28
28
  import { n as SILENT_REPLY_TOKEN, r as isSilentReplyText } from "./tokens-DgTg5We6.js";
29
29
  import { n as normalizeWhatsAppTarget } from "./normalize-JhFp-UPh.js";
@@ -62,10 +62,10 @@ import { c as resolveStorePath, i as resolveSessionTranscriptPath, n as resolveS
62
62
  import { a as normalizeElevatedLevel, c as normalizeUsageDisplay, d as supportsXHighThinking, l as normalizeVerboseLevel, n as formatXHighModelHint, o as normalizeReasoningLevel, s as normalizeThinkLevel, t as formatThinkingLevels } from "./thinking-DTY6T_br.js";
63
63
  import "./models-config-CBf4GFNL.js";
64
64
  import { a as resolveAgentIdentity, t as createReplyPrefixOptions } from "./reply-prefix-eqKSCWjU.js";
65
- import { i as resolveMemoryBackendConfig, r as getMemorySearchManager } from "./memory-cli-D1uj5PFF.js";
65
+ import { i as resolveMemoryBackendConfig, r as getMemorySearchManager } from "./memory-cli-oTchxxCo.js";
66
66
  import { n as resolveMemorySearchConfig } from "./manager-BVmTvJv5.js";
67
67
  import "./gemini-auth-BNz8ukjq.js";
68
- import "./sqlite-BymrTufT.js";
68
+ import { t as requireNodeSqlite } from "./sqlite-BymrTufT.js";
69
69
  import "./retry-CpQnihk7.js";
70
70
  import "./chunk-QdCd8YF1.js";
71
71
  import "./markdown-tables-DQ49Pa3m.js";
@@ -112,45 +112,45 @@ import { i as onHeartbeatEvent, r as getLastHeartbeatEvent, t as resolveHeartbea
112
112
  import { t as ensureOpenClawCliOnPath } from "./path-env-Co_fin1B.js";
113
113
  import { n as DEFAULT_GATEWAY_HTTP_TOOL_DENY } from "./dangerous-tools-B8QrxStA.js";
114
114
  import { n as inheritOptionFromParent } from "./command-options-6wdtBBWB.js";
115
- import { t as buildChannelUiCatalog } from "./catalog-DAXVp4Hp.js";
116
- import { t as WizardCancelledError } from "./prompts-m1IJwIAx.js";
117
- import { t as resolveChannelDefaultAccountId } from "./helpers-BIUvY7vn.js";
118
- import { t as applyPluginAutoEnable } from "./plugin-auto-enable-bi7o87Rj.js";
119
- import "./install-safe-path-BK8js28D.js";
120
- import "./skill-scanner-Bheo_OM5.js";
121
- import { t as buildChannelAccountSnapshot } from "./status-BUedPCLb.js";
122
- import "./channels-status-issues-DanmEwDB.js";
123
- import "./daemon-runtime-CS81-2xm.js";
124
- import "./runtime-guard-Cs_ClFhP.js";
125
- import "./systemd-CzUdukgB.js";
126
- import "./service-0NbohZ8s.js";
127
- import "./lifecycle-core-BsxpzMSa.js";
128
- import "./systemd-hints-BgcSCvUs.js";
129
- import { t as parsePort$1 } from "./parse-port-DnJYkByg.js";
130
- import "./runners-BrJPcqyJ.js";
131
- import "./diagnostics-23-FTnVz.js";
132
- import { n as addGatewayServiceCommands } from "./daemon-cli-BlsF7JRB.js";
133
- import "./table-CnYUWV1p.js";
134
- import { n as resolveWideAreaDiscoveryDomain, r as writeWideAreaGatewayZone } from "./widearea-dns-D_JsGJ9_.js";
135
- import { i as toOptionString, n as extractGatewayMiskeys, r as maybeExplainGatewayServiceStop, t as describeUnknownError } from "./shared-D8AUGe9Z.js";
136
- import { c as probeGateway, o as isNodeCommandAllowed, s as resolveNodeCommandAllowlist } from "./audit-D2RyL2xf.js";
137
- import { t as discoverGatewayBeacons } from "./bonjour-discovery-Bbq821TB.js";
138
- import { i as pickGatewaySelfPresence, r as getStatusSummary } from "./status-BP3UtuGr.js";
139
- import { a as styleHealthChannelLine, c as setHeartbeatsEnabled, l as startHeartbeatRunner, n as getHealthSnapshot, s as runHeartbeatOnce, t as formatHealthChannelLines } from "./health-fyXf4lEO.js";
140
- import { a as resolveControlUiRootSync, i as resolveControlUiRootOverrideSync, t as ensureControlUiAssetsBuilt } from "./control-ui-assets-DVRic6kO.js";
141
- import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, m as normalizeUpdateChannel, n as compareSemverStrings, t as checkUpdateStatus } from "./update-check-BJw7yNjU.js";
142
- import { t as runOnboardingWizard } from "./onboarding-CQzBfGpz.js";
143
- import { a as sendApnsAlert, c as parseMessageWithAttachments, d as shouldLogWs, f as summarizeAgentEventForWsLog, i as resolveApnsAuthConfigFromEnv, l as formatForLog, n as normalizeApnsEnvironment, o as sendApnsBackgroundWake, p as setGatewayWsLogStyle, s as normalizeRpcAttachmentsToChatAttachments, t as loadApnsRegistration, u as logWs } from "./push-apns-CdHUueH2.js";
144
- import { T as resolveGmailHookRuntimeConfig, _ as buildGogWatchServeArgs, i as ensureTailscaleEndpoint, v as buildGogWatchStartArgs } from "./gmail-setup-utils-ZFcCjPly.js";
145
- import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, s as loadAgentIdentityFromWorkspace, t as applyAgentConfig } from "./agents.config-BPyTmpPK.js";
146
- import "./dm-policy-shared-ClEAJ4JJ.js";
147
- import "./node-service-CPLJsCSU.js";
148
- import "./status.update-BUCokEjk.js";
149
- import { n as validateSystemRunCommandConsistency, t as formatExecCommand } from "./system-run-command-PyKttz6b.js";
150
- import { t as installSkill } from "./skills-install-D9QMhbxP.js";
151
- import { n as runGatewayUpdate, t as resolveAgentSessionDirs } from "./session-dirs-HNLtHJ3O.js";
152
- import { i as shouldIncludeHook, r as resolveHookConfig, t as loadWorkspaceHookEntries } from "./workspace-NVPAcG5w.js";
153
- import { n as forceFreePortAndWait } from "./ports-BsxTf9Nu.js";
115
+ import { t as buildChannelUiCatalog } from "./catalog-2EmOju0o.js";
116
+ import { t as WizardCancelledError } from "./prompts-DbHSz44H.js";
117
+ import { t as resolveChannelDefaultAccountId } from "./helpers-Npa3_iL5.js";
118
+ import { t as applyPluginAutoEnable } from "./plugin-auto-enable-Co1CxSEm.js";
119
+ import "./install-safe-path-C__62m3G.js";
120
+ import "./skill-scanner-CIuC1feQ.js";
121
+ import { t as buildChannelAccountSnapshot } from "./status-B8TZsG0t.js";
122
+ import "./channels-status-issues-C4ciBh-M.js";
123
+ import "./daemon-runtime-DnzXuU_x.js";
124
+ import "./runtime-guard-DOhPjoet.js";
125
+ import "./systemd-DemAzd31.js";
126
+ import "./service-Cu7ieLvZ.js";
127
+ import "./lifecycle-core-D-idKcJT.js";
128
+ import "./systemd-hints-D6arXULU.js";
129
+ import { t as parsePort$1 } from "./parse-port-QkaTJ4ru.js";
130
+ import "./runners-C2-1DcXS.js";
131
+ import "./diagnostics-D3Hu1kBI.js";
132
+ import { n as addGatewayServiceCommands } from "./daemon-cli-Bpc5ZmKC.js";
133
+ import "./table-CUa4MMQL.js";
134
+ import { n as resolveWideAreaDiscoveryDomain, r as writeWideAreaGatewayZone } from "./widearea-dns-BiHqFzVe.js";
135
+ import { i as toOptionString, n as extractGatewayMiskeys, r as maybeExplainGatewayServiceStop, t as describeUnknownError } from "./shared-CrPSzpAK.js";
136
+ import { c as probeGateway, o as isNodeCommandAllowed, s as resolveNodeCommandAllowlist } from "./audit-DkAW6KBR.js";
137
+ import { t as discoverGatewayBeacons } from "./bonjour-discovery-DZl6ArZI.js";
138
+ import { i as pickGatewaySelfPresence, r as getStatusSummary } from "./status-CwTBZYF8.js";
139
+ import { a as styleHealthChannelLine, c as setHeartbeatsEnabled, l as startHeartbeatRunner, n as getHealthSnapshot, s as runHeartbeatOnce, t as formatHealthChannelLines } from "./health-CuD8XoQy.js";
140
+ import { a as resolveControlUiRootSync, i as resolveControlUiRootOverrideSync, t as ensureControlUiAssetsBuilt } from "./control-ui-assets-DnNkT3mI.js";
141
+ import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, m as normalizeUpdateChannel, n as compareSemverStrings, t as checkUpdateStatus } from "./update-check-BrrYgTQO.js";
142
+ import { t as runOnboardingWizard } from "./onboarding-D5BRyKY0.js";
143
+ import { a as sendApnsAlert, c as parseMessageWithAttachments, d as shouldLogWs, f as summarizeAgentEventForWsLog, i as resolveApnsAuthConfigFromEnv, l as formatForLog, n as normalizeApnsEnvironment, o as sendApnsBackgroundWake, p as setGatewayWsLogStyle, s as normalizeRpcAttachmentsToChatAttachments, t as loadApnsRegistration, u as logWs } from "./push-apns-DgHzRUEl.js";
144
+ import { T as resolveGmailHookRuntimeConfig, _ as buildGogWatchServeArgs, i as ensureTailscaleEndpoint, v as buildGogWatchStartArgs } from "./gmail-setup-utils-C4IVVrZO.js";
145
+ import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, s as loadAgentIdentityFromWorkspace, t as applyAgentConfig } from "./agents.config-DHoLdlhC.js";
146
+ import "./dm-policy-shared-DfAxaWbA.js";
147
+ import "./node-service-BuwCiN6g.js";
148
+ import "./status.update-DUXJAggs.js";
149
+ import { n as validateSystemRunCommandConsistency, t as formatExecCommand } from "./system-run-command-CPFFvnG3.js";
150
+ import { t as installSkill } from "./skills-install-Czf3NCmL.js";
151
+ import { n as runGatewayUpdate, t as resolveAgentSessionDirs } from "./session-dirs-CCdhZT0k.js";
152
+ import { i as shouldIncludeHook, r as resolveHookConfig, t as loadWorkspaceHookEntries } from "./workspace-IziJxxVr.js";
153
+ import { n as forceFreePortAndWait } from "./ports-DCcAHTa_.js";
154
154
  import { spawn, spawnSync } from "node:child_process";
155
155
  import os from "node:os";
156
156
  import path from "node:path";
@@ -912,7 +912,7 @@ function truncateCloseReason(reason, maxBytes = CLOSE_REASON_MAX_BYTES) {
912
912
 
913
913
  //#endregion
914
914
  //#region src/infra/exec-approval-forwarder.ts
915
- const log$7 = createSubsystemLogger("gateway/exec-approvals");
915
+ const log$8 = createSubsystemLogger("gateway/exec-approvals");
916
916
  const DEFAULT_MODE = "session";
917
917
  function normalizeMode(mode) {
918
918
  return mode ?? DEFAULT_MODE;
@@ -1030,7 +1030,7 @@ async function deliverToTargets(params) {
1030
1030
  payloads: [{ text: params.text }]
1031
1031
  });
1032
1032
  } catch (err) {
1033
- log$7.error(`exec approvals: failed to deliver to ${channel}:${target.to}: ${String(err)}`);
1033
+ log$8.error(`exec approvals: failed to deliver to ${channel}:${target.to}: ${String(err)}`);
1034
1034
  }
1035
1035
  });
1036
1036
  await Promise.allSettled(deliveries);
@@ -1265,7 +1265,7 @@ function scheduleGatewayUpdateCheck(params) {
1265
1265
 
1266
1266
  //#endregion
1267
1267
  //#region src/gateway/channel-health-monitor.ts
1268
- const log$6 = createSubsystemLogger("gateway/health-monitor");
1268
+ const log$7 = createSubsystemLogger("gateway/health-monitor");
1269
1269
  const DEFAULT_CHECK_INTERVAL_MS = 5 * 6e4;
1270
1270
  const DEFAULT_STARTUP_GRACE_MS = 6e4;
1271
1271
  const DEFAULT_COOLDOWN_CYCLES = 2;
@@ -1314,11 +1314,11 @@ function startChannelHealthMonitor(deps) {
1314
1314
  if (now - record.lastRestartAt <= cooldownMs) continue;
1315
1315
  pruneOldRestarts(record, now);
1316
1316
  if (record.restartsThisHour.length >= maxRestartsPerHour) {
1317
- log$6.warn?.(`[${channelId}:${accountId}] health-monitor: hit ${maxRestartsPerHour} restarts/hour limit, skipping`);
1317
+ log$7.warn?.(`[${channelId}:${accountId}] health-monitor: hit ${maxRestartsPerHour} restarts/hour limit, skipping`);
1318
1318
  continue;
1319
1319
  }
1320
1320
  const reason = !status.running ? status.reconnectAttempts && status.reconnectAttempts >= 10 ? "gave-up" : "stopped" : "stuck";
1321
- log$6.info?.(`[${channelId}:${accountId}] health-monitor: restarting (reason: ${reason})`);
1321
+ log$7.info?.(`[${channelId}:${accountId}] health-monitor: restarting (reason: ${reason})`);
1322
1322
  try {
1323
1323
  if (status.running) await channelManager.stopChannel(channelId, accountId);
1324
1324
  channelManager.resetRestartAttempts(channelId, accountId);
@@ -1327,7 +1327,7 @@ function startChannelHealthMonitor(deps) {
1327
1327
  record.restartsThisHour.push({ at: now });
1328
1328
  restartRecords.set(key, record);
1329
1329
  } catch (err) {
1330
- log$6.error?.(`[${channelId}:${accountId}] health-monitor: restart failed: ${String(err)}`);
1330
+ log$7.error?.(`[${channelId}:${accountId}] health-monitor: restart failed: ${String(err)}`);
1331
1331
  }
1332
1332
  }
1333
1333
  }
@@ -1347,7 +1347,7 @@ function startChannelHealthMonitor(deps) {
1347
1347
  abortSignal?.addEventListener("abort", stop, { once: true });
1348
1348
  timer = setInterval(() => void runCheck(), checkIntervalMs);
1349
1349
  if (typeof timer === "object" && "unref" in timer) timer.unref();
1350
- log$6.info?.(`started (interval: ${Math.round(checkIntervalMs / 1e3)}s, grace: ${Math.round(startupGraceMs / 1e3)}s)`);
1350
+ log$7.info?.(`started (interval: ${Math.round(checkIntervalMs / 1e3)}s, grace: ${Math.round(startupGraceMs / 1e3)}s)`);
1351
1351
  }
1352
1352
  return { stop };
1353
1353
  }
@@ -2521,7 +2521,7 @@ function createAgentEventHandler({ broadcast, broadcastToConnIds, nodeSendToSess
2521
2521
  * Automatically starts `gog gmail watch serve` when the gateway starts,
2522
2522
  * if hooks.gmail is configured with an account.
2523
2523
  */
2524
- const log$5 = createSubsystemLogger("gmail-watcher");
2524
+ const log$6 = createSubsystemLogger("gmail-watcher");
2525
2525
  const ADDRESS_IN_USE_RE = /address already in use|EADDRINUSE/i;
2526
2526
  function isAddressInUseError(line) {
2527
2527
  return ADDRESS_IN_USE_RE.test(line);
@@ -2545,13 +2545,13 @@ async function startGmailWatch(cfg) {
2545
2545
  const result = await runCommandWithTimeout(args, { timeoutMs: 12e4 });
2546
2546
  if (result.code !== 0) {
2547
2547
  const message = result.stderr || result.stdout || "gog watch start failed";
2548
- log$5.error(`watch start failed: ${message}`);
2548
+ log$6.error(`watch start failed: ${message}`);
2549
2549
  return false;
2550
2550
  }
2551
- log$5.info(`watch started for ${cfg.account}`);
2551
+ log$6.info(`watch started for ${cfg.account}`);
2552
2552
  return true;
2553
2553
  } catch (err) {
2554
- log$5.error(`watch start error: ${String(err)}`);
2554
+ log$6.error(`watch start error: ${String(err)}`);
2555
2555
  return false;
2556
2556
  }
2557
2557
  }
@@ -2560,7 +2560,7 @@ async function startGmailWatch(cfg) {
2560
2560
  */
2561
2561
  function spawnGogServe(cfg) {
2562
2562
  const args = buildGogWatchServeArgs(cfg);
2563
- log$5.info(`starting gog ${args.join(" ")}`);
2563
+ log$6.info(`starting gog ${args.join(" ")}`);
2564
2564
  let addressInUse = false;
2565
2565
  const child = spawn("gog", args, {
2566
2566
  stdio: [
@@ -2572,25 +2572,25 @@ function spawnGogServe(cfg) {
2572
2572
  });
2573
2573
  child.stdout?.on("data", (data) => {
2574
2574
  const line = data.toString().trim();
2575
- if (line) log$5.info(`[gog] ${line}`);
2575
+ if (line) log$6.info(`[gog] ${line}`);
2576
2576
  });
2577
2577
  child.stderr?.on("data", (data) => {
2578
2578
  const line = data.toString().trim();
2579
2579
  if (!line) return;
2580
2580
  if (isAddressInUseError(line)) addressInUse = true;
2581
- log$5.warn(`[gog] ${line}`);
2581
+ log$6.warn(`[gog] ${line}`);
2582
2582
  });
2583
2583
  child.on("error", (err) => {
2584
- log$5.error(`gog process error: ${String(err)}`);
2584
+ log$6.error(`gog process error: ${String(err)}`);
2585
2585
  });
2586
2586
  child.on("exit", (code, signal) => {
2587
2587
  if (shuttingDown) return;
2588
2588
  if (addressInUse) {
2589
- log$5.warn("gog serve failed to bind (address already in use); stopping restarts. Another watcher is likely running. Set OPENCLAW_SKIP_GMAIL_WATCHER=1 or stop the other process.");
2589
+ log$6.warn("gog serve failed to bind (address already in use); stopping restarts. Another watcher is likely running. Set OPENCLAW_SKIP_GMAIL_WATCHER=1 or stop the other process.");
2590
2590
  watcherProcess = null;
2591
2591
  return;
2592
2592
  }
2593
- log$5.warn(`gog exited (code=${code}, signal=${signal}); restarting in 5s`);
2593
+ log$6.warn(`gog exited (code=${code}, signal=${signal}); restarting in 5s`);
2594
2594
  watcherProcess = null;
2595
2595
  setTimeout(() => {
2596
2596
  if (shuttingDown || !currentConfig) return;
@@ -2630,15 +2630,15 @@ async function startGmailWatcher(cfg) {
2630
2630
  port: runtimeConfig.serve.port,
2631
2631
  target: runtimeConfig.tailscale.target
2632
2632
  });
2633
- log$5.info(`tailscale ${runtimeConfig.tailscale.mode} configured for port ${runtimeConfig.serve.port}`);
2633
+ log$6.info(`tailscale ${runtimeConfig.tailscale.mode} configured for port ${runtimeConfig.serve.port}`);
2634
2634
  } catch (err) {
2635
- log$5.error(`tailscale setup failed: ${String(err)}`);
2635
+ log$6.error(`tailscale setup failed: ${String(err)}`);
2636
2636
  return {
2637
2637
  started: false,
2638
2638
  reason: `tailscale setup failed: ${String(err)}`
2639
2639
  };
2640
2640
  }
2641
- if (!await startGmailWatch(runtimeConfig)) log$5.warn("gmail watch start failed, but continuing with serve");
2641
+ if (!await startGmailWatch(runtimeConfig)) log$6.warn("gmail watch start failed, but continuing with serve");
2642
2642
  shuttingDown = false;
2643
2643
  watcherProcess = spawnGogServe(runtimeConfig);
2644
2644
  const renewMs = runtimeConfig.renewEveryMinutes * 6e4;
@@ -2646,7 +2646,7 @@ async function startGmailWatcher(cfg) {
2646
2646
  if (shuttingDown) return;
2647
2647
  startGmailWatch(runtimeConfig);
2648
2648
  }, renewMs);
2649
- log$5.info(`gmail watcher started for ${runtimeConfig.account} (renew every ${runtimeConfig.renewEveryMinutes}m)`);
2649
+ log$6.info(`gmail watcher started for ${runtimeConfig.account} (renew every ${runtimeConfig.renewEveryMinutes}m)`);
2650
2650
  return { started: true };
2651
2651
  }
2652
2652
  /**
@@ -2659,7 +2659,7 @@ async function stopGmailWatcher() {
2659
2659
  renewInterval = null;
2660
2660
  }
2661
2661
  if (watcherProcess) {
2662
- log$5.info("stopping gmail watcher");
2662
+ log$6.info("stopping gmail watcher");
2663
2663
  watcherProcess.kill("SIGTERM");
2664
2664
  await new Promise((resolve) => {
2665
2665
  const timeout = setTimeout(() => {
@@ -2674,7 +2674,7 @@ async function stopGmailWatcher() {
2674
2674
  watcherProcess = null;
2675
2675
  }
2676
2676
  currentConfig = null;
2677
- log$5.info("gmail watcher stopped");
2677
+ log$6.info("gmail watcher stopped");
2678
2678
  }
2679
2679
 
2680
2680
  //#endregion
@@ -6431,7 +6431,10 @@ const BASE_METHODS = [
6431
6431
  "browser.request",
6432
6432
  "chat.history",
6433
6433
  "chat.abort",
6434
- "chat.send"
6434
+ "chat.send",
6435
+ "audit.query",
6436
+ "audit.stats",
6437
+ "audit.prune"
6435
6438
  ];
6436
6439
  function listGatewayMethods() {
6437
6440
  const channelMethods = listChannelPlugins().flatMap((plugin) => plugin.gatewayMethods ?? []);
@@ -6459,6 +6462,200 @@ const GATEWAY_EVENTS = [
6459
6462
  GATEWAY_EVENT_UPDATE_AVAILABLE
6460
6463
  ];
6461
6464
 
6465
+ //#endregion
6466
+ //#region src/audit/audit-logger.ts
6467
+ /**
6468
+ * Audit Logger — Phase 1 Security Foundation
6469
+ *
6470
+ * Singleton service for writing, querying, and pruning audit log events.
6471
+ * Uses node:sqlite (DatabaseSync) following the same pattern as memory/manager.ts.
6472
+ */
6473
+ const log$5 = createSubsystemLogger("audit");
6474
+ const SCHEMA_SQL = `
6475
+ CREATE TABLE IF NOT EXISTS audit_log (
6476
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
6477
+ timestamp TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')),
6478
+ actor_type TEXT NOT NULL,
6479
+ actor_id TEXT,
6480
+ action TEXT NOT NULL,
6481
+ resource TEXT,
6482
+ details TEXT,
6483
+ ip TEXT,
6484
+ result TEXT NOT NULL DEFAULT 'success',
6485
+ created_at INTEGER NOT NULL DEFAULT (unixepoch())
6486
+ );
6487
+ CREATE INDEX IF NOT EXISTS idx_audit_timestamp ON audit_log(created_at);
6488
+ CREATE INDEX IF NOT EXISTS idx_audit_actor ON audit_log(actor_id);
6489
+ CREATE INDEX IF NOT EXISTS idx_audit_action ON audit_log(action);
6490
+ `;
6491
+ let instance = null;
6492
+ var AuditLogger = class AuditLogger {
6493
+ constructor(opts) {
6494
+ this.db = null;
6495
+ this.pruneTimer = null;
6496
+ this.initialized = false;
6497
+ const stateDir = resolveStateDir(process.env);
6498
+ this.dbPath = opts?.dbPath ?? path.join(stateDir, "audit.db");
6499
+ this.retentionDays = opts?.retentionDays ?? 90;
6500
+ }
6501
+ /** Initialize the database and schema. Safe to call multiple times. */
6502
+ init() {
6503
+ if (this.initialized) return;
6504
+ try {
6505
+ const dir = path.dirname(this.dbPath);
6506
+ if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
6507
+ const { DatabaseSync: SqliteDatabase } = requireNodeSqlite();
6508
+ this.db = new SqliteDatabase(this.dbPath);
6509
+ this.db.exec(SCHEMA_SQL);
6510
+ this.initialized = true;
6511
+ this.pruneTimer = setInterval(() => {
6512
+ try {
6513
+ this.prune(this.retentionDays);
6514
+ } catch (err) {
6515
+ log$5.warn(`auto-prune failed: ${String(err)}`);
6516
+ }
6517
+ }, 360 * 60 * 1e3);
6518
+ if (this.pruneTimer?.unref) this.pruneTimer.unref();
6519
+ try {
6520
+ this.prune(this.retentionDays);
6521
+ } catch {}
6522
+ log$5.info(`audit log initialized at ${this.dbPath}`);
6523
+ } catch (err) {
6524
+ log$5.warn(`audit logger failed to initialize: ${String(err)}`);
6525
+ this.initialized = false;
6526
+ }
6527
+ }
6528
+ /** Log an audit event. Non-blocking, never throws. */
6529
+ log(event) {
6530
+ try {
6531
+ if (!this.db) return;
6532
+ this.db.prepare(`INSERT INTO audit_log (actor_type, actor_id, action, resource, details, ip, result)
6533
+ VALUES (?, ?, ?, ?, ?, ?, ?)`).run(event.actor_type, event.actor_id ?? null, event.action, event.resource ?? null, event.details ?? null, event.ip ?? null, event.result ?? "success");
6534
+ } catch (err) {
6535
+ log$5.warn(`audit log write failed: ${String(err)}`);
6536
+ }
6537
+ }
6538
+ /** Query audit entries with filters. */
6539
+ query(filters = {}) {
6540
+ if (!this.db) return [];
6541
+ try {
6542
+ const conditions = [];
6543
+ const params = [];
6544
+ if (filters.action) {
6545
+ conditions.push("action = ?");
6546
+ params.push(filters.action);
6547
+ }
6548
+ if (filters.actor) {
6549
+ conditions.push("actor_id = ?");
6550
+ params.push(filters.actor);
6551
+ }
6552
+ if (filters.since != null) {
6553
+ conditions.push("created_at >= ?");
6554
+ params.push(filters.since);
6555
+ }
6556
+ if (filters.until != null) {
6557
+ conditions.push("created_at <= ?");
6558
+ params.push(filters.until);
6559
+ }
6560
+ if (filters.result) {
6561
+ conditions.push("result = ?");
6562
+ params.push(filters.result);
6563
+ }
6564
+ const where = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
6565
+ const limit = Math.min(filters.limit ?? 100, 1e3);
6566
+ const offset = filters.offset ?? 0;
6567
+ const sql = `SELECT * FROM audit_log ${where} ORDER BY created_at DESC LIMIT ? OFFSET ?`;
6568
+ params.push(limit, offset);
6569
+ return this.db.prepare(sql).all(...params);
6570
+ } catch (err) {
6571
+ log$5.warn(`audit query failed: ${String(err)}`);
6572
+ return [];
6573
+ }
6574
+ }
6575
+ /** Get summary statistics. */
6576
+ stats() {
6577
+ if (!this.db) return {
6578
+ total: 0,
6579
+ byAction: {},
6580
+ byActor: {},
6581
+ failures: 0,
6582
+ oldestTimestamp: null,
6583
+ newestTimestamp: null
6584
+ };
6585
+ try {
6586
+ const totalRow = this.db.prepare("SELECT COUNT(*) as cnt FROM audit_log").get();
6587
+ const failureRow = this.db.prepare("SELECT COUNT(*) as cnt FROM audit_log WHERE result != 'success'").get();
6588
+ const actionRows = this.db.prepare("SELECT action, COUNT(*) as cnt FROM audit_log GROUP BY action ORDER BY cnt DESC LIMIT 50").all();
6589
+ const actorRows = this.db.prepare("SELECT actor_id, COUNT(*) as cnt FROM audit_log WHERE actor_id IS NOT NULL GROUP BY actor_id ORDER BY cnt DESC LIMIT 50").all();
6590
+ const oldestRow = this.db.prepare("SELECT timestamp FROM audit_log ORDER BY created_at ASC LIMIT 1").get();
6591
+ const newestRow = this.db.prepare("SELECT timestamp FROM audit_log ORDER BY created_at DESC LIMIT 1").get();
6592
+ const byAction = {};
6593
+ for (const row of actionRows) byAction[row.action] = row.cnt;
6594
+ const byActor = {};
6595
+ for (const row of actorRows) byActor[row.actor_id] = row.cnt;
6596
+ return {
6597
+ total: totalRow.cnt,
6598
+ byAction,
6599
+ byActor,
6600
+ failures: failureRow.cnt,
6601
+ oldestTimestamp: oldestRow?.timestamp ?? null,
6602
+ newestTimestamp: newestRow?.timestamp ?? null
6603
+ };
6604
+ } catch (err) {
6605
+ log$5.warn(`audit stats failed: ${String(err)}`);
6606
+ return {
6607
+ total: 0,
6608
+ byAction: {},
6609
+ byActor: {},
6610
+ failures: 0,
6611
+ oldestTimestamp: null,
6612
+ newestTimestamp: null
6613
+ };
6614
+ }
6615
+ }
6616
+ /** Delete entries older than the given number of days. Returns count deleted. */
6617
+ prune(olderThanDays) {
6618
+ if (!this.db) return 0;
6619
+ try {
6620
+ const cutoff = Math.floor(Date.now() / 1e3) - olderThanDays * 86400;
6621
+ const deleted = this.db.prepare("DELETE FROM audit_log WHERE created_at < ?").run(cutoff).changes ?? 0;
6622
+ if (deleted > 0) log$5.info(`pruned ${deleted} audit entries older than ${olderThanDays} days`);
6623
+ return deleted;
6624
+ } catch (err) {
6625
+ log$5.warn(`audit prune failed: ${String(err)}`);
6626
+ return 0;
6627
+ }
6628
+ }
6629
+ /** Graceful shutdown. */
6630
+ close() {
6631
+ if (this.pruneTimer) {
6632
+ clearInterval(this.pruneTimer);
6633
+ this.pruneTimer = null;
6634
+ }
6635
+ try {
6636
+ this.db?.close();
6637
+ } catch {}
6638
+ this.db = null;
6639
+ this.initialized = false;
6640
+ }
6641
+ /** Get singleton instance. */
6642
+ static getInstance() {
6643
+ if (!instance) instance = new AuditLogger();
6644
+ return instance;
6645
+ }
6646
+ /** Initialize singleton. Call at gateway startup. */
6647
+ static init(opts) {
6648
+ if (!instance) instance = new AuditLogger(opts);
6649
+ instance.init();
6650
+ return instance;
6651
+ }
6652
+ /** Destroy singleton (for testing). */
6653
+ static destroy() {
6654
+ instance?.close();
6655
+ instance = null;
6656
+ }
6657
+ };
6658
+
6462
6659
  //#endregion
6463
6660
  //#region src/gateway/control-plane-audit.ts
6464
6661
  function normalizePart$1(value, fallback) {
@@ -8321,6 +8518,58 @@ const agentsHandlers = {
8321
8518
  }
8322
8519
  };
8323
8520
 
8521
+ //#endregion
8522
+ //#region src/gateway/server-methods/audit.ts
8523
+ /**
8524
+ * Audit RPC method handlers (#6)
8525
+ * Registers audit.query and audit.stats as gateway RPC methods.
8526
+ */
8527
+ const auditHandlers = {
8528
+ "audit.query": ({ params, respond }) => {
8529
+ try {
8530
+ const logger = AuditLogger.getInstance();
8531
+ const filters = {};
8532
+ if (typeof params.action === "string") filters.action = params.action;
8533
+ if (typeof params.actor === "string") filters.actor = params.actor;
8534
+ if (typeof params.since === "number") filters.since = params.since;
8535
+ if (typeof params.until === "number") filters.until = params.until;
8536
+ if (typeof params.result === "string") filters.result = params.result;
8537
+ if (typeof params.limit === "number") filters.limit = params.limit;
8538
+ if (typeof params.offset === "number") filters.offset = params.offset;
8539
+ const entries = logger.query(filters);
8540
+ respond(true, {
8541
+ entries,
8542
+ count: entries.length
8543
+ }, void 0);
8544
+ } catch (err) {
8545
+ respond(false, void 0, errorShape(ErrorCodes.UNAVAILABLE, `audit query failed: ${String(err)}`));
8546
+ }
8547
+ },
8548
+ "audit.stats": ({ respond }) => {
8549
+ try {
8550
+ respond(true, AuditLogger.getInstance().stats(), void 0);
8551
+ } catch (err) {
8552
+ respond(false, void 0, errorShape(ErrorCodes.UNAVAILABLE, `audit stats failed: ${String(err)}`));
8553
+ }
8554
+ },
8555
+ "audit.prune": ({ params, respond }) => {
8556
+ try {
8557
+ const logger = AuditLogger.getInstance();
8558
+ const olderThanDays = typeof params.olderThanDays === "number" ? params.olderThanDays : 90;
8559
+ if (olderThanDays < 1) {
8560
+ respond(false, void 0, errorShape(ErrorCodes.INVALID_REQUEST, "olderThanDays must be >= 1"));
8561
+ return;
8562
+ }
8563
+ respond(true, {
8564
+ deleted: logger.prune(olderThanDays),
8565
+ olderThanDays
8566
+ }, void 0);
8567
+ } catch (err) {
8568
+ respond(false, void 0, errorShape(ErrorCodes.UNAVAILABLE, `audit prune failed: ${String(err)}`));
8569
+ }
8570
+ }
8571
+ };
8572
+
8324
8573
  //#endregion
8325
8574
  //#region src/gateway/server-methods/nodes.helpers.ts
8326
8575
  function respondInvalidParams(params) {
@@ -12445,7 +12694,7 @@ const nodeHandlers = {
12445
12694
  const p = params;
12446
12695
  const payloadJSON = typeof p.payloadJSON === "string" ? p.payloadJSON : p.payload !== void 0 ? JSON.stringify(p.payload) : null;
12447
12696
  await respondUnavailableOnThrow(respond, async () => {
12448
- const { handleNodeEvent } = await import("./server-node-events-GvqKSJEV.js");
12697
+ const { handleNodeEvent } = await import("./server-node-events-DWWxWJHk.js");
12449
12698
  const nodeId = client?.connect?.device?.id ?? client?.connect?.client?.id ?? "node";
12450
12699
  await handleNodeEvent({
12451
12700
  deps: context.deps,
@@ -14313,6 +14562,54 @@ const CONTROL_PLANE_WRITE_METHODS = new Set([
14313
14562
  "config.patch",
14314
14563
  "update.run"
14315
14564
  ]);
14565
+ /** Methods that always get audit logged when audit is enabled. */
14566
+ const AUDIT_SENSITIVE_METHODS = new Set([
14567
+ "config.set",
14568
+ "config.apply",
14569
+ "config.patch",
14570
+ "device.pair.approve",
14571
+ "device.pair.reject",
14572
+ "node.pair.approve",
14573
+ "node.pair.reject",
14574
+ "exec.approvals.set",
14575
+ "sessions.delete",
14576
+ "update.run"
14577
+ ]);
14578
+ function resolveAuditConfig() {
14579
+ try {
14580
+ const security = loadConfig().security;
14581
+ return {
14582
+ enabled: security?.audit?.enabled !== false,
14583
+ level: security?.audit?.level ?? "sensitive"
14584
+ };
14585
+ } catch {
14586
+ return {
14587
+ enabled: true,
14588
+ level: "sensitive"
14589
+ };
14590
+ }
14591
+ }
14592
+ function shouldAuditMethod(method, level) {
14593
+ if (level === "off") return false;
14594
+ if (level === "all") return true;
14595
+ return AUDIT_SENSITIVE_METHODS.has(method);
14596
+ }
14597
+ function auditLogMethodCall(method, client, result) {
14598
+ try {
14599
+ const logger = AuditLogger.getInstance();
14600
+ const actorType = client?.connect?.role ?? "unknown";
14601
+ const actorId = client?.connect?.client?.id ?? client?.connect?.device?.id ?? void 0;
14602
+ const ip = client?.clientIp ?? void 0;
14603
+ logger.log({
14604
+ actor_type: actorType,
14605
+ actor_id: actorId,
14606
+ action: method,
14607
+ ip,
14608
+ result,
14609
+ details: result !== "success" ? `method ${method} ${result}` : void 0
14610
+ });
14611
+ } catch {}
14612
+ }
14316
14613
  function authorizeGatewayMethod(method, client) {
14317
14614
  if (!client?.connect) return null;
14318
14615
  if (method === "health") return null;
@@ -14355,12 +14652,14 @@ const coreGatewayHandlers = {
14355
14652
  ...usageHandlers,
14356
14653
  ...agentHandlers,
14357
14654
  ...agentsHandlers,
14358
- ...browserHandlers
14655
+ ...browserHandlers,
14656
+ ...auditHandlers
14359
14657
  };
14360
14658
  async function handleGatewayRequest(opts) {
14361
14659
  const { req, respond, client, isWebchatConnect, context } = opts;
14362
14660
  const authError = authorizeGatewayMethod(req.method, client);
14363
14661
  if (authError) {
14662
+ if (resolveAuditConfig().enabled) auditLogMethodCall(req.method, client, "denied");
14364
14663
  respond(false, void 0, authError);
14365
14664
  return;
14366
14665
  }
@@ -14385,7 +14684,22 @@ async function handleGatewayRequest(opts) {
14385
14684
  respond(false, void 0, errorShape(ErrorCodes.INVALID_REQUEST, `unknown method: ${req.method}`));
14386
14685
  return;
14387
14686
  }
14388
- await handler({
14687
+ const auditCfg = resolveAuditConfig();
14688
+ if (auditCfg.enabled && shouldAuditMethod(req.method, auditCfg.level)) {
14689
+ const originalRespond = respond;
14690
+ const auditedRespond = (ok, payload, error, meta) => {
14691
+ auditLogMethodCall(req.method, client, ok ? "success" : "failure");
14692
+ originalRespond(ok, payload, error, meta);
14693
+ };
14694
+ await handler({
14695
+ req,
14696
+ params: req.params ?? {},
14697
+ client,
14698
+ isWebchatConnect,
14699
+ respond: auditedRespond,
14700
+ context
14701
+ });
14702
+ } else await handler({
14389
14703
  req,
14390
14704
  params: req.params ?? {},
14391
14705
  client,
@@ -18862,6 +19176,12 @@ async function startGatewayMemoryBackend(params) {
18862
19176
  //#region src/gateway/server-startup.ts
18863
19177
  const SESSION_LOCK_STALE_MS = 1800 * 1e3;
18864
19178
  async function startGatewaySidecars(params) {
19179
+ try {
19180
+ const auditRetention = params.cfg.security;
19181
+ AuditLogger.init({ retentionDays: auditRetention?.audit?.retentionDays });
19182
+ } catch (err) {
19183
+ params.log.warn(`audit logger initialization failed: ${String(err)}`);
19184
+ }
18865
19185
  try {
18866
19186
  const sessionDirs = await resolveAgentSessionDirs(resolveStateDir(process.env));
18867
19187
  for (const sessionsDir of sessionDirs) await cleanStaleLockFiles({