@nikolasp98/minion 2026.6.14-dev.20260616061802 → 2026.6.16-dev

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 (393) hide show
  1. package/dist/{acp-cli-Du7NWZu3.js → acp-cli-2xKZfd6v.js} +3 -3
  2. package/dist/{acp-cli-BmKOFno7.js → acp-cli-q8e4aJoa.js} +3 -3
  3. package/dist/{agent-6dzad4Vk.js → agent-CZq9c4BW.js} +13 -13
  4. package/dist/{agent-step-C3wXb9Cx.js → agent-step-D5w2xNfi.js} +2 -2
  5. package/dist/{agent-step-Bf1GImWB.js → agent-step-DnVo1ws9.js} +2 -2
  6. package/dist/{agents-Dw2xlB7X.js → agents-3owoMugG.js} +7 -7
  7. package/dist/{agents-list-tool-Dq0lIpTn.js → agents-list-tool-Bjcc4I_6.js} +3 -3
  8. package/dist/{agents-list-tool-D9mHFLLa.js → agents-list-tool-CzUTgXov.js} +3 -3
  9. package/dist/{agents.config-1imA1H12.js → agents.config-Di1Fb5KI.js} +12 -12
  10. package/dist/{audit-DmbpL3cv.js → audit-B8L_aShb.js} +10 -10
  11. package/dist/{audit-DmJGMt0j.js → audit-Ck6MCUxx.js} +10 -10
  12. package/dist/{auth-choice-neer30p3.js → auth-choice-B6U5biA7.js} +4 -4
  13. package/dist/{auth-choice-CAmZkQLg.js → auth-choice-DmpOyRlb.js} +4 -4
  14. package/dist/{banner-DpI_geg3.js → banner-Be2ToLay.js} +1 -1
  15. package/dist/{browser-cli-z39mB4Us.js → browser-cli-BvtSNPci.js} +3 -3
  16. package/dist/{browser-cli-DDHEGwdS.js → browser-cli-De-S5eSp.js} +3 -3
  17. package/dist/{browser-tool-CWG74LXa.js → browser-tool-BVAlCkv9.js} +7 -7
  18. package/dist/{browser-tool-CZsdYOyF.js → browser-tool-CTNhVzit.js} +7 -7
  19. package/dist/build-info.json +3 -3
  20. package/dist/bundled/boot-md/handler.js +489 -42
  21. package/dist/bundled/kg-message-sync/handler.js +6 -2
  22. package/dist/bundled/session-memory/handler.js +47 -1
  23. package/dist/{call-DkT-xA-u.js → call-BrDNyQiZ.js} +2 -2
  24. package/dist/{call-COjGFB_A.js → call-Di0NGY7s.js} +2 -2
  25. package/dist/{call-BKa0221r.js → call-QNmBuec5.js} +1 -1
  26. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  27. package/dist/{canvas-tool-yqzOmVk8.js → canvas-tool-C8kJ8X6t.js} +2 -2
  28. package/dist/{canvas-tool-D7utVUj9.js → canvas-tool-v_tDod0l.js} +2 -2
  29. package/dist/{channel-options-DDJR7t6c.js → channel-options-BgB_XE_R.js} +1 -1
  30. package/dist/{channel-options-wAeX19Sd.js → channel-options-C3G3uvc8.js} +1 -1
  31. package/dist/{channel-web-B731iz_S.js → channel-web-C7erWB8c.js} +7 -7
  32. package/dist/{channels-cli-DyZ1QjyT.js → channels-cli-CWL9_dUC.js} +9 -9
  33. package/dist/{channels-cli-B2lgO976.js → channels-cli-D0WU7aEW.js} +9 -9
  34. package/dist/{chrome-BYfNS8BB.js → chrome-BUH9jMtc.js} +1 -1
  35. package/dist/{chrome-DKRiholg.js → chrome-WqxB18cs.js} +2 -2
  36. package/dist/{chrome-C3MXJRdA.js → chrome-xmfH0ICu.js} +2 -2
  37. package/dist/{clawbot-cli-ByrTjcjf.js → clawbot-cli-BqvWmOf2.js} +1 -1
  38. package/dist/{clawbot-cli-C-8EFRKv.js → clawbot-cli-Cy4xxEwA.js} +1 -1
  39. package/dist/cli/daemon-cli.js +1 -1
  40. package/dist/{cli-DNiohgQu.js → cli-C6-qelzK.js} +3 -3
  41. package/dist/{cli-D-m3umOT.js → cli-COPy2u3N.js} +3 -3
  42. package/dist/{client-D2hf2jQ7.js → client-BIS2Uayk.js} +4 -4
  43. package/dist/{client-BQN-LuPk.js → client-BoM5FwV4.js} +4 -4
  44. package/dist/{client-xu3whbFC.js → client-CTr2olAS.js} +4 -4
  45. package/dist/{command-registry-CB0tYTNA.js → command-registry-BSAY6wdm.js} +14 -14
  46. package/dist/{commands-registry-PW7IInMR.js → commands-registry-SXjoCA7i.js} +2 -2
  47. package/dist/{commands-registry-dia3m7-M.js → commands-registry-UnBqSA67.js} +2 -2
  48. package/dist/{completion-cli-Dg5pvBMY.js → completion-cli--3eqgAwK.js} +1 -1
  49. package/dist/{completion-cli-CSzxM5wY.js → completion-cli-RDTl_9qR.js} +2 -2
  50. package/dist/{config-BBoAK0dA.js → config-CkMQunWU.js} +6 -2
  51. package/dist/{config-ClkrcdId.js → config-DHYot764.js} +2 -2
  52. package/dist/{config-BgqD6SVw.js → config-DJTLRK5S.js} +2 -2
  53. package/dist/{config-cli-Denu0eEu.js → config-cli-BUCeVfP_.js} +4 -4
  54. package/dist/{config-cli-DtAjejub.js → config-cli-C1RrXpz0.js} +4 -4
  55. package/dist/{config-guard-DF1WNs2e.js → config-guard-CVx36OOi.js} +3 -3
  56. package/dist/config-guard-Csz0-uEX.js +2 -0
  57. package/dist/{config-validation-mmyHFUrK.js → config-validation-BVN3OEOd.js} +2 -2
  58. package/dist/{config-validation-lm5BwYiy.js → config-validation-C3jULSMI.js} +2 -2
  59. package/dist/{configure-CxrB1V4C.js → configure-CQEz5KQ3.js} +15 -15
  60. package/dist/{configure-CroxylRT.js → configure-akx6bWAt.js} +15 -15
  61. package/dist/{cron-cli-CYFkAl-f.js → cron-cli-BoMJUHUX.js} +2 -2
  62. package/dist/{cron-cli-CMjG3iLg.js → cron-cli-DvtMDSN2.js} +1 -1
  63. package/dist/{cron-tool-B3ffaxAO.js → cron-tool-Dcr3QMih.js} +5 -5
  64. package/dist/{cron-tool-BnUUPLV3.js → cron-tool-DllqQBKI.js} +5 -5
  65. package/dist/{daemon-cli-Bs0GD5xF.js → daemon-cli-CHfZAu4w.js} +9 -9
  66. package/dist/{daemon-cli-dauqwBcE.js → daemon-cli-D7K6zRR6.js} +9 -9
  67. package/dist/daemon-cli.js +6 -2
  68. package/dist/daemon-install-helpers-Ls_foXgf.js +2 -0
  69. package/dist/daemon-install-helpers-VzSaKa-j.js +2 -0
  70. package/dist/{daemon-runtime-C-XyxJRT.js → daemon-runtime--L-FasK6.js} +1 -1
  71. package/dist/{daemon-runtime-BLp3uThx.js → daemon-runtime-DKTkFmdZ.js} +1 -1
  72. package/dist/{deliver-C40KRMzm.js → deliver-BCijF1xe.js} +4 -4
  73. package/dist/{deliver-C5vVViLg.js → deliver-DiDYkpmh.js} +5 -5
  74. package/dist/{deliver-Dhut24vc.js → deliver-Ds0o_rCY.js} +3 -3
  75. package/dist/{deps-DRyTOIPO.js → deps-DFeGFeii.js} +6 -6
  76. package/dist/{devices-cli-DFPiK0W5.js → devices-cli-C9OvVBEs.js} +1 -1
  77. package/dist/{devices-cli-BfwxECLu.js → devices-cli-D4YJarjz.js} +1 -1
  78. package/dist/{diagnostic-Bzd3eHBU.js → diagnostic-CVAiT8Yi.js} +2 -2
  79. package/dist/{diagnostic-session-state-C8e7GxAm.js → diagnostic-session-state-Cj5nMvNL.js} +1 -1
  80. package/dist/{directory-cli-BX_a06o7.js → directory-cli--LuldZqc.js} +2 -2
  81. package/dist/{directory-cli-BQlGeeQK.js → directory-cli-DHpksyLI.js} +2 -2
  82. package/dist/{dispatcher-BWcYLowQ.js → dispatcher-D46WCdTe.js} +7 -7
  83. package/dist/{dispatcher-DefEQC4n.js → dispatcher-D8fgAnwH.js} +7 -7
  84. package/dist/{dm-policy-shared-Dm70u4Yr.js → dm-policy-shared-CEUsAI0F.js} +1 -1
  85. package/dist/{dm-policy-shared-DeX6SUMT.js → dm-policy-shared-DZglJJMa.js} +1 -1
  86. package/dist/{dns-cli-CxMaD4cI.js → dns-cli-C4L7EzEY.js} +2 -2
  87. package/dist/{dns-cli-DAdvx6qq.js → dns-cli-wSFONc42.js} +2 -2
  88. package/dist/{docs-cli-BR1YXIH4.js → docs-cli-4Dzg7LrJ.js} +1 -1
  89. package/dist/{docs-cli-BR8IKtP3.js → docs-cli-BWUGypxO.js} +1 -1
  90. package/dist/doctor-completion-B4bzzPyA.js +2 -0
  91. package/dist/doctor-completion-CE9xjPcf.js +2 -0
  92. package/dist/{doctor-completion-C3YAoPkP.js → doctor-completion-COKl8-PU.js} +1 -1
  93. package/dist/{doctor-completion-CkIy7FpB.js → doctor-completion-DPjvm1G7.js} +1 -1
  94. package/dist/{doctor-config-flow-CsP66Ij5.js → doctor-config-flow-CCqETtju.js} +4 -4
  95. package/dist/{doctor-config-flow-D_WRZLT3.js → doctor-config-flow-CRibe33c.js} +4 -4
  96. package/dist/entry.js +1 -1
  97. package/dist/{exec-approvals-cli-CLIzgYS8.js → exec-approvals-cli-CCqVDSOe.js} +2 -2
  98. package/dist/{exec-approvals-cli-DW2-7TEV.js → exec-approvals-cli-RRZ5wIP0.js} +2 -2
  99. package/dist/extensionAPI.d.ts +36 -2
  100. package/dist/extensionAPI.js +263 -20
  101. package/dist/{gateway-Duqy39t3.js → gateway-Bvd5CqY4.js} +3 -3
  102. package/dist/{gateway-CqhiWZQd.js → gateway-D_kwhuup.js} +3 -3
  103. package/dist/{gateway-cli-CUrxOlB4.js → gateway-cli-BbuSOWKq.js} +328 -244
  104. package/dist/{gateway-cli-BrM4d8E7.js → gateway-cli-C-AMSwgo.js} +324 -240
  105. package/dist/{gateway-0sVK3Rjy.js → gateway-q_fM0u-m.js} +2 -2
  106. package/dist/{gateway-rpc-BGgh3mTl.js → gateway-rpc-Ed0F1N_m.js} +1 -1
  107. package/dist/{gateway-rpc-9WQJwkTJ.js → gateway-rpc-J14XBNuM.js} +1 -1
  108. package/dist/{gateway-tool-DtlbDV6N.js → gateway-tool-Bi96OPGe.js} +3 -3
  109. package/dist/{gateway-tool-CMd3r3O5.js → gateway-tool-CNaxsMbd.js} +3 -3
  110. package/dist/{github-copilot-auth-Dh5sombA.js → github-copilot-auth-BmlL3P7c.js} +2 -2
  111. package/dist/{github-copilot-auth-ClDHXpfT.js → github-copilot-auth-DhjScF3O.js} +2 -2
  112. package/dist/{gmail-Dkq3kngs.js → gmail-BuCz-KEp.js} +1 -1
  113. package/dist/{gmail-DpPYd91j.js → gmail-C1O6grHu.js} +1 -1
  114. package/dist/{health-BlZEOPXK.js → health-6TTjEZoo.js} +8 -8
  115. package/dist/{health-BJ-Irw3K.js → health-BJbAa4df.js} +8 -8
  116. package/dist/{hooks-cli-Bqd1BR2r.js → hooks-cli-C0Z9dRtP.js} +2 -2
  117. package/dist/{hooks-cli-CR_bwhdf.js → hooks-cli-DFrRHJ1j.js} +2 -2
  118. package/dist/{host-D3VZGype.js → host-C8oRBLB6.js} +1 -1
  119. package/dist/{host-CafVbu36.js → host-DCfZcVR_.js} +1 -1
  120. package/dist/{image-tool-CwCxITcF.js → image-tool-D_dhIXLT.js} +2 -2
  121. package/dist/{image-tool-BY8NbIQs.js → image-tool-y-FDf6-M.js} +2 -2
  122. package/dist/index.d.ts +36 -2
  123. package/dist/index.js +10 -10
  124. package/dist/{io-TKYkFbcF.js → io-C_Q6AU5E.js} +2 -2
  125. package/dist/{io-oiyyZuuG.js → io-CpUiX-Lv.js} +2 -2
  126. package/dist/{ir-CP9ltYx0.js → ir-D0vxg3iM.js} +2 -2
  127. package/dist/{knowledge-graph-Dd0rSl0Q.js → knowledge-graph-BFnL_feN.js} +1 -1
  128. package/dist/{lifecycle-core-C7W7YZwn.js → lifecycle-core-CCUOBmZs.js} +3 -3
  129. package/dist/{lifecycle-core-BQztQGrv.js → lifecycle-core-CX37YE4Z.js} +3 -3
  130. package/dist/llm-slug-generator.js +47 -1
  131. package/dist/{logs-cli-CdAJHTuP.js → logs-cli-BYdqoMkJ.js} +2 -2
  132. package/dist/{logs-cli-lcuW5kPv.js → logs-cli-Comxq7pP.js} +2 -2
  133. package/dist/{manager-DeR0znMP.js → manager-DvUEsXx3.js} +1 -1
  134. package/dist/{memory-cli-BxVGlaEm.js → memory-cli-Bz--RMDo.js} +3 -3
  135. package/dist/{memory-cli-Y_w-AsVt.js → memory-cli-ilkHc_D4.js} +3 -3
  136. package/dist/{message-action-runner-CE4bDq6V.js → message-action-runner-BZQOV03k.js} +9 -9
  137. package/dist/{message-action-runner-BdclEzxx.js → message-action-runner-J8W9BPhj.js} +9 -9
  138. package/dist/{message-tool-BpFLUe6E.js → message-tool-BHJpugQ6.js} +6 -6
  139. package/dist/{message-tool-_MODnjgC.js → message-tool-GTRrYMuR.js} +6 -6
  140. package/dist/{model-catalog-AiXYmm_2.js → model-catalog-7Ew4iFgU.js} +3 -3
  141. package/dist/{model-catalog-CIgjk707.js → model-catalog-B1R3eepi.js} +3 -3
  142. package/dist/{model-fallback-DsefSc26.js → model-fallback--afWtYyY.js} +2 -2
  143. package/dist/{model-fallback-C92G-WUW.js → model-fallback-DXR7ZbvM.js} +2 -2
  144. package/dist/{model-fallback-Dwkt7imi.js → model-fallback-GSMox3YK.js} +3 -3
  145. package/dist/{model-picker-B_SEgewv.js → model-picker--bqpbxbC.js} +2 -2
  146. package/dist/{model-picker-DLr3xagY.js → model-picker-DJpEjKZT.js} +2 -2
  147. package/dist/{models-YFKEQsfy.js → models-CETV4zZ3.js} +12 -12
  148. package/dist/{models-cli-DuHCNW7r.js → models-cli-B5caj79x.js} +2 -2
  149. package/dist/{models-cli-yoQKaR0X.js → models-cli-DPT6gYJm.js} +12 -12
  150. package/dist/{models-config-BWzVL4DK.js → models-config-CX3wpMrd.js} +2 -2
  151. package/dist/{models-config-Df7nRCU-.js → models-config-ChIAfklN.js} +2 -2
  152. package/dist/{node-cli-D4pCYQMW.js → node-cli-4VRhz_1P.js} +7 -7
  153. package/dist/{node-cli-DzvdQBVp.js → node-cli-DyoQqYo1.js} +7 -7
  154. package/dist/{nodes-cli-CHWJMLm6.js → nodes-cli-CNQ633Hz.js} +5 -5
  155. package/dist/{nodes-cli-cjiOPFLH.js → nodes-cli-Dl3KtKoX.js} +5 -5
  156. package/dist/{nodes-tool-CR8MmpTZ.js → nodes-tool-BkgixWxk.js} +3 -3
  157. package/dist/{nodes-tool-DxMgloLr.js → nodes-tool-BmT8LWTt.js} +3 -3
  158. package/dist/{nodes-utils-BHrOJOWk.js → nodes-utils-B1jr4oHE.js} +1 -1
  159. package/dist/{nodes-utils-BRFzmJmB.js → nodes-utils-CVaBTJ5V.js} +1 -1
  160. package/dist/{nodes-utils-Eo4ilZ36.js → nodes-utils-DVNKajNN.js} +1 -1
  161. package/dist/{onboard-D3EkmOs0.js → onboard-BSb-bXtw.js} +9 -9
  162. package/dist/{onboard-DdguleAq.js → onboard-DHzBfhN9.js} +9 -9
  163. package/dist/{onboard-channels-DBltNYY2.js → onboard-channels-BP5oQVqD.js} +1 -1
  164. package/dist/{onboard-channels-cSzxNqaz.js → onboard-channels-CNmc5fTo.js} +1 -1
  165. package/dist/{onboard-channels-CeAsHBgW.js → onboard-channels-DHeOj8d6.js} +1 -1
  166. package/dist/{onboard-channels-ZDMAODeW.js → onboard-channels-DqoegMtk.js} +1 -1
  167. package/dist/{onboard-custom-DqkrqRdv.js → onboard-custom-B7OO328d.js} +2 -2
  168. package/dist/{onboard-custom-DMHUJH5-.js → onboard-custom-BODmfSpC.js} +1 -1
  169. package/dist/{onboard-custom-Vb7K9679.js → onboard-custom-BZv_tJxB.js} +1 -1
  170. package/dist/{onboard-custom-DOEx3xcN.js → onboard-custom-D7LvDFdH.js} +2 -2
  171. package/dist/{onboard-helpers-D60Qp1ne.js → onboard-helpers-B9IGa3vx.js} +5 -5
  172. package/dist/{onboard-helpers-7fbTU2tq.js → onboard-helpers-BKca3qU4.js} +1 -1
  173. package/dist/{onboard-helpers-DCve32jF.js → onboard-helpers-DP2LE5Oh.js} +5 -5
  174. package/dist/{onboard-helpers-xGGsG9to.js → onboard-helpers-HkYz_NGi.js} +1 -1
  175. package/dist/{onboard-remote-B13DRLJa.js → onboard-remote-DQrtJWPJ.js} +1 -1
  176. package/dist/{onboard-remote-C6s3bR7X.js → onboard-remote-kBPMv7zo.js} +1 -1
  177. package/dist/{onboard-skills-BU0OKpqj.js → onboard-skills-Cd2WeuBn.js} +3 -3
  178. package/dist/{onboard-skills-CKzdl2Ph.js → onboard-skills-KRXxu17b.js} +3 -3
  179. package/dist/{onboarding-BkiZ3JkU.js → onboarding-Cg42Uf0E.js} +11 -11
  180. package/dist/{onboarding-C--TfoeE.js → onboarding-nPyIyp8f.js} +11 -11
  181. package/dist/{onboarding.finalize-CUkOVH_E.js → onboarding.finalize-B8gctARP.js} +9 -9
  182. package/dist/{onboarding.finalize-Damz4ET-.js → onboarding.finalize-BoMhnz3U.js} +9 -9
  183. package/dist/{onboarding.gateway-config-BA3PQJBL.js → onboarding.gateway-config-Co5c5Jsj.js} +2 -2
  184. package/dist/{onboarding.gateway-config-4wtmgfdq.js → onboarding.gateway-config-DkkPCpUx.js} +2 -2
  185. package/dist/{outbound-send-deps-BmDpImVK.js → outbound-send-deps-Dg8cSoFv.js} +6 -6
  186. package/dist/{outbound-session-B9B7Vsxm.js → outbound-session-BCNTkSVV.js} +3 -3
  187. package/dist/{outbound-session-pZGUQ4vz.js → outbound-session-BG0ZMrIB.js} +3 -3
  188. package/dist/{pairing-cli-CRnZKVjx.js → pairing-cli-B_sfgSbk.js} +2 -2
  189. package/dist/{pairing-cli-aoyKpG0L.js → pairing-cli-mUAKj093.js} +2 -2
  190. package/dist/{pi-embedded-helpers-D-m7pmXE.js → pi-embedded-helpers-BsRnajNh.js} +1 -1
  191. package/dist/{pi-embedded-helpers-CkhQP2gU.js → pi-embedded-helpers-CSxJBpFl.js} +1 -1
  192. package/dist/{pi-embedded-helpers-BbHYim54.js → pi-embedded-helpers-CUfPWD_N.js} +6 -5
  193. package/dist/{pi-embedded-utils-C6MaVLHj.js → pi-embedded-utils-BlNfBen_.js} +1 -1
  194. package/dist/{pi-embedded-utils-DIGchmzO.js → pi-embedded-utils-Bql42QTv.js} +1 -1
  195. package/dist/{pi-embedded-utils-Ip0GsjWb.js → pi-embedded-utils-BtyCE2ZK.js} +1 -1
  196. package/dist/{pi-model-discovery-Ot_Q_yYa.js → pi-model-discovery-BV73T1am.js} +1 -1
  197. package/dist/{pi-tools.policy-Dt2kTSid.js → pi-tools.policy-DDJ31-0E.js} +3 -3
  198. package/dist/{plugin-registry-BZCSZFQn.js → plugin-registry-Dq33ZU89.js} +3 -3
  199. package/dist/{plugin-registry-DMRnpxA2.js → plugin-registry-RoPLmlrM.js} +3 -3
  200. package/dist/plugin-sdk/agents/bash/bash-tools.exec-runtime.d.ts +4 -0
  201. package/dist/plugin-sdk/agents/pi-embedded-runner/tool-result-context-guard.d.ts +5 -0
  202. package/dist/plugin-sdk/agents/pi-embedded-runner/tool-result-reduce.d.ts +8 -0
  203. package/dist/plugin-sdk/agents/sandbox/tier0/index.d.ts +3 -0
  204. package/dist/plugin-sdk/agents/sandbox/tier0/registry.d.ts +28 -0
  205. package/dist/plugin-sdk/agents/sandbox/tier0/router.d.ts +18 -0
  206. package/dist/plugin-sdk/agents/sandbox/tier0/virtual-sandbox.d.ts +30 -0
  207. package/dist/plugin-sdk/agents/sandbox/types.d.ts +5 -0
  208. package/dist/plugin-sdk/agents/sections/behaviour.d.ts +9 -0
  209. package/dist/plugin-sdk/agents/skills/compact-prompt.d.ts +12 -0
  210. package/dist/plugin-sdk/agents/skills/workspace.d.ts +4 -0
  211. package/dist/plugin-sdk/channels/discord.js +487 -40
  212. package/dist/plugin-sdk/channels/googlechat.js +3 -1
  213. package/dist/plugin-sdk/channels/imessage.js +487 -40
  214. package/dist/plugin-sdk/channels/line.js +489 -42
  215. package/dist/plugin-sdk/channels/msteams.js +3 -1
  216. package/dist/plugin-sdk/channels/signal.js +487 -40
  217. package/dist/plugin-sdk/channels/slack.js +487 -40
  218. package/dist/plugin-sdk/channels/telegram.js +487 -40
  219. package/dist/plugin-sdk/channels/whatsapp.js +488 -41
  220. package/dist/plugin-sdk/config/types.agent-defaults.d.ts +8 -0
  221. package/dist/plugin-sdk/config/types.agents.d.ts +4 -0
  222. package/dist/plugin-sdk/config/types.gateway.d.ts +8 -0
  223. package/dist/plugin-sdk/config/types.skills.d.ts +7 -0
  224. package/dist/plugin-sdk/config/types.tools.d.ts +8 -0
  225. package/dist/plugin-sdk/config/zod-schema.agent-defaults.d.ts +3 -0
  226. package/dist/plugin-sdk/config/zod-schema.agent-runtime.d.ts +9 -0
  227. package/dist/plugin-sdk/config/zod-schema.agents.d.ts +6 -0
  228. package/dist/plugin-sdk/config/zod-schema.d.ts +26 -0
  229. package/dist/plugin-sdk/core.js +6 -2
  230. package/dist/plugin-sdk/index.js +501 -54
  231. package/dist/{plugins-cli-BKMBY-np.js → plugins-cli-BA0wJM-k.js} +3 -3
  232. package/dist/{plugins-cli-D3_BCsVN.js → plugins-cli-a-DWljrI.js} +3 -3
  233. package/dist/{program-context-CVLR19jJ.js → program-context-CUZUPsiC.js} +43 -43
  234. package/dist/{program-DFvYiOXj.js → program-gbYi5UIa.js} +7 -7
  235. package/dist/{prompt-select-styled-D-axSDjg.js → prompt-select-styled-DAdqH32e.js} +17 -17
  236. package/dist/{prompt-select-styled-n1nMLPsI.js → prompt-select-styled-lKRNiihE.js} +17 -17
  237. package/dist/{push-apns-Dh6xZki_.js → push-apns-BhtcU_Da.js} +1 -1
  238. package/dist/{push-apns-D4wjtIOe.js → push-apns-D69Af97u.js} +1 -1
  239. package/dist/{pw-ai-2VhRhF2B.js → pw-ai-Ba9xJlWV.js} +2 -2
  240. package/dist/{pw-ai-Blk_s6D5.js → pw-ai-Cvjg4UOk.js} +2 -2
  241. package/dist/{pw-ai-B6oeo1wI.js → pw-ai-DiwvYyv3.js} +2 -2
  242. package/dist/{pw-session-Crb06R5v.js → pw-session-BZ1pAX5r.js} +1 -1
  243. package/dist/{pw-session-DmaV4mTM.js → pw-session-BxiZ6YYh.js} +1 -1
  244. package/dist/{pw-session-CATqkBLI.js → pw-session-EHew9i-n.js} +1 -1
  245. package/dist/{qr-cli-B3IWV_8b.js → qr-cli-CFsUuFR-.js} +2 -2
  246. package/dist/{qr-cli-SfioxAM_.js → qr-cli-SfzcWdI0.js} +2 -2
  247. package/dist/{register.agent-DDVZDpQC.js → register.agent-B4bNkRtB.js} +11 -11
  248. package/dist/{register.agent-Dfk70LYq.js → register.agent-DHCAqxWX.js} +8 -8
  249. package/dist/{register.channel-BvMvb6ip.js → register.channel-B1vKkWV7.js} +2 -2
  250. package/dist/{register.channel-BJtyCgD7.js → register.channel-D0lVq7dU.js} +2 -2
  251. package/dist/{register.configure-WQlTjNyz.js → register.configure-DFSJd0YH.js} +1 -1
  252. package/dist/{register.configure-BdKChDnl.js → register.configure-DIHFldND.js} +1 -1
  253. package/dist/{register.drone-B-xrDJpJ.js → register.drone-Do4i5ZE9.js} +2 -2
  254. package/dist/{register.drone-DSHJ5vq1.js → register.drone-Tckr0QFo.js} +2 -2
  255. package/dist/{register.maintenance-DoMoBeyF.js → register.maintenance-Bw9G1eZ0.js} +5 -5
  256. package/dist/{register.maintenance-DnP_N0ye.js → register.maintenance-D5LVEuKI.js} +5 -5
  257. package/dist/{register.message-Xl-pZILp.js → register.message-BsGRyTVT.js} +7 -7
  258. package/dist/{register.message-Cdp8TM0J.js → register.message-C_51tZCE.js} +8 -8
  259. package/dist/{register.onboard-BzZPizJ0.js → register.onboard-CMusJAzJ.js} +1 -1
  260. package/dist/{register.onboard-IPqLR5Zb.js → register.onboard-Ngaw9ikW.js} +1 -1
  261. package/dist/{register.setup-DLzSctB1.js → register.setup-aKi_hurQ.js} +4 -4
  262. package/dist/{register.setup-BX8Ya9qY.js → register.setup-xpiPRct8.js} +4 -4
  263. package/dist/{register.status-health-sessions-CXIHidz6.js → register.status-health-sessions-B87H-g0g.js} +6 -6
  264. package/dist/{register.status-health-sessions-DnNAMB3T.js → register.status-health-sessions-D2rMUW_t.js} +4 -4
  265. package/dist/{register.subclis-DAt5WEzu.js → register.subclis-DB0kFld6.js} +30 -30
  266. package/dist/{reply-D_uwJ_hb.js → reply-CNJWciSj.js} +442 -52
  267. package/dist/{reply-payloads-BBHotu7W.js → reply-payloads-BS889lPA.js} +2 -2
  268. package/dist/{reply-payloads-CikGrhVL.js → reply-payloads-Dk-zLmJC.js} +2 -2
  269. package/dist/{reply-prefix-eSF5kXs5.js → reply-prefix-CfrIMbCM.js} +1 -1
  270. package/dist/{reply-prefix-CYbvVBOV.js → reply-prefix-D9MQ_veY.js} +1 -1
  271. package/dist/{resolve-route-FLi7kFo1.js → resolve-route-0arQsERr.js} +1 -1
  272. package/dist/{resolve-route-DiiBj8NL.js → resolve-route-DwDSX3mI.js} +2 -2
  273. package/dist/{routes-DFLRIpty.js → routes-DubNFADQ.js} +4 -4
  274. package/dist/{routes-CagC77kh.js → routes-hcdbDZ60.js} +4 -4
  275. package/dist/{rpc-DxdMMngu.js → rpc-CpEGWO4f.js} +1 -1
  276. package/dist/{rpc-dZcSayi6.js → rpc-DShIx1il.js} +1 -1
  277. package/dist/{run-main-Cw7JO4bk.js → run-main-CgrHeBpO.js} +20 -20
  278. package/dist/{sandbox-DX1DKAJb.js → sandbox-BYK6Qgnd.js} +9 -8
  279. package/dist/{sandbox-pZvVQZ-a.js → sandbox-CDGF9AVA.js} +9 -8
  280. package/dist/{sandbox-cli-DsFqky0Y.js → sandbox-cli-3v8NFyXC.js} +4 -4
  281. package/dist/{sandbox-cli--NZU5yHm.js → sandbox-cli-DmXP8NkD.js} +4 -4
  282. package/dist/{security-cli-B9rFqAom.js → security-cli-B23Rjmu8.js} +3 -3
  283. package/dist/{security-cli-DUGFqvJc.js → security-cli-C7jxF7EW.js} +3 -3
  284. package/dist/{send-OcwoynpB.js → send-B3EXtlyb.js} +2 -2
  285. package/dist/{send-BUUHmWJ3.js → send-Boe93Q4V.js} +2 -2
  286. package/dist/{send-Czh3Yz38.js → send-Br1IcpxR.js} +2 -2
  287. package/dist/{send-mztwgKny.js → send-BrvRGJ0_.js} +3 -3
  288. package/dist/{send-CRNffLsb.js → send-BuiJlYF8.js} +2 -2
  289. package/dist/{send-DTQ_lSWv.js → send-DPURnZWZ.js} +2 -2
  290. package/dist/{send-Bh69NFd_.js → send-DT-x-IFQ.js} +3 -3
  291. package/dist/{send-CuFw68zk.js → send-D_PQuZ3x.js} +2 -2
  292. package/dist/{send-Ckq83rOO.js → send-DhuPDKRX.js} +2 -2
  293. package/dist/{server-context-D-VUH9Bz.js → server-context-BRKaxwJB.js} +6 -6
  294. package/dist/{server-context-BlUcP_zF.js → server-context-CvEQbenq.js} +6 -6
  295. package/dist/{server-context-BNI2cc_e.js → server-context-nyYhGUmI.js} +5 -5
  296. package/dist/{server-node-events-DQqHB_8B.js → server-node-events-B6rUT0PE.js} +8 -8
  297. package/dist/{server-node-events-BqG45BMs.js → server-node-events-D90DAPI1.js} +10 -10
  298. package/dist/{session-status-tool-CN-Juxjq.js → session-status-tool-BIN4ooy0.js} +6 -6
  299. package/dist/{session-status-tool-DnD354sJ.js → session-status-tool-CtbF1-VI.js} +7 -7
  300. package/dist/{session-utils-0BYkk3f_.js → session-utils-DDCd8HC9.js} +4 -4
  301. package/dist/{sessions-CismtNoo.js → sessions-ByNQiqr2.js} +1 -1
  302. package/dist/{sessions-D_b2UXud.js → sessions-C0Qs0Flz.js} +3 -3
  303. package/dist/{sessions-0d-dBE8D.js → sessions-CPoA3oJo.js} +4 -4
  304. package/dist/{sessions-Z8JCL_sa.js → sessions-CW4tzKA-.js} +3 -3
  305. package/dist/{sessions-helpers-Crh_NTSX.js → sessions-helpers-DdqQiSR6.js} +3 -3
  306. package/dist/{sessions-helpers-JsbUTHcP.js → sessions-helpers-vwVJ1Vy4.js} +3 -3
  307. package/dist/{sessions-helpers-uZ0Taeh3.js → sessions-helpers-xH-u6Byb.js} +3 -3
  308. package/dist/{sessions-history-tool-6VYdT_kc.js → sessions-history-tool-BO81rMTT.js} +5 -5
  309. package/dist/{sessions-history-tool-6WMcHpxy.js → sessions-history-tool-DKXNjv5X.js} +5 -5
  310. package/dist/{sessions-list-tool-CwTLRwGc.js → sessions-list-tool-6DJtypdD.js} +5 -5
  311. package/dist/{sessions-list-tool-CwGp-l3S.js → sessions-list-tool-s_y-_4Uv.js} +5 -5
  312. package/dist/{sessions-send-tool-BKNgicV5.js → sessions-send-tool-C3ggqtMe.js} +5 -5
  313. package/dist/{sessions-send-tool-Dl4HKGgL.js → sessions-send-tool-roh-kyNw.js} +5 -5
  314. package/dist/{sessions-spawn-tool-DqfoPFrK.js → sessions-spawn-tool-BgkkNWMg.js} +1 -1
  315. package/dist/{sessions-spawn-tool-Bguo3O1I.js → sessions-spawn-tool-UAd65WIb.js} +1 -1
  316. package/dist/{shared-Cr0N9iap.js → shared-BysrBqEi.js} +2 -2
  317. package/dist/{shared-B7QVxDsn.js → shared-CjEFJgna.js} +2 -2
  318. package/dist/{skills-DkeUrhAT.js → skills-Bf4ZPGHe.js} +1 -1
  319. package/dist/{skills-DMPRReoe.js → skills-DDhWBAii.js} +1 -1
  320. package/dist/{skills-cli--8zG3UQk.js → skills-cli-DnO1g2oN.js} +6 -6
  321. package/dist/{skills-cli-D334Q0dM.js → skills-cli-DxFMRja6.js} +6 -6
  322. package/dist/{skills-install-DAphGXoj.js → skills-install-Bo9PwVmT.js} +2 -2
  323. package/dist/{skills-install-BNR2Nfa3.js → skills-install-DkZHLCih.js} +2 -2
  324. package/dist/{skills-status-D54inzOP.js → skills-status-8p-KrlIF.js} +2 -2
  325. package/dist/{skills-status-DDzkv-Rj.js → skills-status-CBTT87BN.js} +2 -2
  326. package/dist/{status-BIvJQtxV.js → status-BpgCPxM4.js} +3 -3
  327. package/dist/{status-JJ8BdlhI.js → status-Db6PPdwI.js} +3 -3
  328. package/dist/{status-DosDYGut.js → status-DyQwrglF.js} +12 -12
  329. package/dist/{status-gWt5DmvD.js → status-Dz_-4ATW.js} +13 -13
  330. package/dist/{status.update-BnYycijV.js → status.update-BBLk_Q3P.js} +1 -1
  331. package/dist/{status.update-D0KmfrNX.js → status.update-OhQ3FS7R.js} +1 -1
  332. package/dist/{subagent-registry-0zv9UyYz.js → subagent-registry-C_UHFYRY.js} +443 -53
  333. package/dist/{subagents-tool-usr_WpP2.js → subagents-tool-BdWYv7Mb.js} +6 -6
  334. package/dist/{subagents-tool-m92Kjy1x.js → subagents-tool-DjPwvSat.js} +6 -6
  335. package/dist/{system-cli-t4Qk2mcC.js → system-cli-BQJK1EiV.js} +1 -1
  336. package/dist/{system-cli-BxYnYU05.js → system-cli-Cj6oDS1q.js} +1 -1
  337. package/dist/{systemd-hints-JlNoKkcf.js → systemd-hints-BKM-UvY_.js} +1 -1
  338. package/dist/{systemd-hints-C21GmUrX.js → systemd-hints-BdVIEvO3.js} +1 -1
  339. package/dist/{targets-BWPxk4rU.js → targets-BpZ7t54u.js} +1 -1
  340. package/dist/{tools-F4g3knJE.js → tools-D3fRPoa3.js} +421 -38
  341. package/dist/{tools-cli-Cmg7InJT.js → tools-cli-CjniP2oD.js} +3 -3
  342. package/dist/{tools-cli-BPV7GpBg.js → tools-cli-DLPn3_f-.js} +3 -3
  343. package/dist/{tts-CC3WSaW9.js → tts-BhWpmVdG.js} +1 -1
  344. package/dist/{tts-CRpGlsYO.js → tts-DrFhyLnB.js} +1 -1
  345. package/dist/{tts-OJZ7iSKo.js → tts-DyQvwyVi.js} +1 -1
  346. package/dist/{tts-tool-DsLN8-ZT.js → tts-tool-CdaKVWBM.js} +3 -3
  347. package/dist/{tts-tool-B73xs8Vs.js → tts-tool-CfEs7ebD.js} +3 -3
  348. package/dist/{tui-BRdOjXJy.js → tui-CNuz7tKz.js} +5 -5
  349. package/dist/{tui-PSDwA6SF.js → tui-DJvjN1xV.js} +5 -5
  350. package/dist/{tui-cli-DMD7clw2.js → tui-cli-CLoyYSXd.js} +1 -1
  351. package/dist/{tui-cli-DHWrleUP.js → tui-cli-DhhA87TG.js} +1 -1
  352. package/dist/{update-cli-DlxYgSAN.js → update-cli-0lBEnFj5.js} +8 -8
  353. package/dist/{update-cli-Du5BbYfl.js → update-cli-Cc4jgBsG.js} +8 -8
  354. package/dist/{validation-CG8Ui8_v.js → validation-B-XaORq2.js} +5 -1
  355. package/dist/{validation-T0CNq_JP.js → validation-DuFmPzCB.js} +5 -1
  356. package/dist/web-BUkj8HIz.js +2 -0
  357. package/dist/{web-CtwxKIvO.js → web-BY79LufL.js} +8 -8
  358. package/dist/{web-search-B5d6ODyB.js → web-search-CCeGZMBD.js} +4 -4
  359. package/dist/{web-search-CV42wG57.js → web-search-D1pX-Tuc.js} +4 -4
  360. package/dist/{webhooks-cli-tSv_Pzzq.js → webhooks-cli-B3LP9UKY.js} +5 -5
  361. package/dist/{webhooks-cli-BeHnKv6z.js → webhooks-cli-C5xR4Wu5.js} +5 -5
  362. package/dist/{workspace-Dov1_dCF.js → workspace-BwzunhL2.js} +49 -3
  363. package/dist/{workspace-CSGZ3DZ_.js → workspace-CVAkpBJa.js} +48 -2
  364. package/dist/{workspace-CSBTFAxh.js → workspace-D5-DoTNR.js} +48 -2
  365. package/dist/{workspace-dirs-Yo4RZm7s.js → workspace-dirs-CJDJUlno.js} +3 -3
  366. package/docs/superpowers/plans/2026-06-10-phase1-quick-wins.md +1260 -0
  367. package/docs/superpowers/specs/2026-06-10-recon-quick-wins-and-silent-agent-design.md +151 -0
  368. package/extensions/alert-watcher/index.js +47 -1
  369. package/extensions/bluebubbles/index.js +5 -1
  370. package/extensions/feishu/index.js +5 -1
  371. package/extensions/flows/index.js +52 -2
  372. package/extensions/gmail-calendar/index.js +47 -1
  373. package/extensions/googlechat/index.js +5 -1
  374. package/extensions/irc/index.js +5 -1
  375. package/extensions/llm-task/index.js +47 -1
  376. package/extensions/matrix/{credentials-B1q3x-N0.mjs → credentials-BtiLgiNR.mjs} +5 -1
  377. package/extensions/matrix/index.js +3 -3
  378. package/extensions/matrix/{matrix-B9amoffh.mjs → matrix-CWlUSNSh.mjs} +2 -2
  379. package/extensions/matrix/{resolve-targets-Dw7tv-7K.mjs → resolve-targets-ml4iU4Bd.mjs} +2 -2
  380. package/extensions/mattermost/index.js +5 -1
  381. package/extensions/nextcloud-talk/index.js +5 -1
  382. package/extensions/tlon/index.js +47 -1
  383. package/extensions/wati/index.js +5 -1
  384. package/extensions/weixin/index.js +5 -1
  385. package/extensions/zalo/index.js +5 -1
  386. package/extensions/zalouser/index.js +5 -1
  387. package/package.json +3 -2
  388. package/dist/config-guard-BfdkKYAa.js +0 -2
  389. package/dist/daemon-install-helpers-4gMthp-_.js +0 -2
  390. package/dist/daemon-install-helpers-BLXYJ3C5.js +0 -2
  391. package/dist/doctor-completion-DKJRw1m1.js +0 -2
  392. package/dist/doctor-completion-DMcJXsi0.js +0 -2
  393. package/dist/web-Dj8nR4rt.js +0 -2
@@ -1,8 +1,8 @@
1
1
  import { C as expandHomePrefix, c as resolveConfigPath, d as resolveGatewayLockDir, f as resolveGatewayPort, n as STATE_DIR, r as isNixMode, t as CONFIG_PATH, v as resolveStateDir } from "./paths-Ce170Tex.js";
2
2
  import { C as shortenHomePath, D as truncateUtf16Safe, L as getChildLogger, P as setVerbose, R as getLogger, _ as resolveConfigDir, b as resolveUserPath, c as ensureDir, d as isPlainObject, r as clamp, t as CONFIG_DIR, z as getResolvedLoggerSettings } from "./utils-DsgtGH3c.js";
3
3
  import { n as isRich, r as theme, t as colorize } from "./theme-CDbj88LB.js";
4
- import { F as resolveBootstrapMaxChars, G as normalizeUsageDisplay, H as normalizeElevatedLevel, I as resolveBootstrapTotalMaxChars, J as supportsXHighThinking, K as normalizeVerboseLevel, R as formatThinkingLevels, U as normalizeReasoningLevel, V as listThinkingLevels, W as normalizeThinkLevel, z as formatXHighModelHint } from "./pi-embedded-helpers-CkhQP2gU.js";
5
- import { $ as renamePairedNode, $n as getAgentRunContext, $t as applyToolPolicyPipeline, An as formatZonedTimestamp, At as abortEmbeddedPiRun, Br as extractImageContentFromSource, Bt as openInFlightTurnsStore, C as initTemplateLoader, Cr as parseVerboseOverride, Ct as loadCombinedSessionStoreForGateway, Dt as resolveSessionModelRef, Et as resolveGatewaySessionStoreTarget, Fr as registerUnhandledRejectionHandler, Ft as deleteRow, G as recordRemoteNodeInfo, H as resolveSendPolicy, Hn as countActiveDescendantRuns, Hr as resolveInputFileLimits, Ht as readConsolidationState, In as isAbortTrigger, It as listForCurrentInstance, J as removeRemoteNodeInfo, Jt as PromptSectionRegistry, K as refreshRemoteBinsForConnectedNodes, Kt as buildSectionRenderContext, Ln as stopSubagentsForRequester, Lr as DEFAULT_INPUT_IMAGE_MIMES, Lt as listFromOtherInstances, Mt as queueEmbeddedPiMessage, Nn as resolveUserTimezone, Nt as waitForEmbeddedPiRunEnd, Ot as normalizeOrgIds, Pt as closeInFlightTurnsStore, Q as rejectNodePairing, Qn as emitAgentEvent, Rt as markInterrupted, S as getTemplateUsageStats, Sn as getTotalPendingReplies, Sr as applyVerboseOverride, St as listSessionsFromStore, Tr as isSystemEventContextChanged, Tt as pruneLegacyStoreKeys, U as getRemoteSkillEligibility, Un as initSubagentRegistry, Ut as assembleAgentSystemPromptWithSections, V as normalizeSendPolicy, Vr as normalizeMimeList, W as primeRemoteSkillsCache, Wn as listDescendantRunsForRequester, Wr as transcribeOpenAiCompatibleAudio, Wt as getBuiltinSectionRegistry, X as approveNodePairing, Xt as _clearProseCache, Y as setSkillsRemoteRegistry, Yn as runSubagentAnnounceFlow, Yt as PROSE_GLOBAL_ROOT, Z as listNodePairing, Zn as clearAgentRunContext, Zt as createOpenClawCodingTools, _ as spawnSubagentDirect, _n as record, _t as buildSystemPromptReport, a as getCliSessionId, at as verifyPairingToken, b as getTemplateCache, bn as dispatchInboundMessage, c as debugSkipAll, cn as loadMinionPlugins, cr as resolveBootstrapContextForRun, ct as readJsonFile, d as setDebugStepBroadcaster, dn as claimBatch, dr as getTotalQueueSize, dt as getSkillsSnapshotVersion, en as buildDefaultToolPolicyPipelineSteps, er as onAgentEvent, et as requestNodePairing, f as setSteppedBuild, fn as closeMessageLedger, fr as resetAllLanes, ft as registerSkillsChangeListener, gn as patchRouting, gt as runEmbeddedPiAgent, hn as openMessageLedger, hr as lookupContextTokens, ht as clearSessionQueues, i as resolveCronStyleNow, it as hashToken, j as loadProviderUsageSummary, jt as getActiveEmbeddedRunCount, k as normalizeGroupActivation, kt as orgScopeVisible, l as debugStepContinue, ln as loadOpenClawPlugins, lr as getActiveTaskCount, lt as writeJsonAtomic, mn as markSynced, mr as waitForActiveTasks, n as BARE_SESSION_RESET_PROMPT, nn as TOOL_REGISTRY, nt as verifyNodeToken, o as setCliSessionId, on as getPluginToolMeta, ot as pruneExpiredPending, pn as markFailed, pr as setCommandLaneConcurrency, q as refreshRemoteNodeBins, qn as markSubagentRunTerminated, qr as resolveAgentTimeoutMs, qt as buildToolSummaryMap, rn as requestHeartbeatNow, rr as resolveAgentIdentity, rt as generatePairingToken, s as runCliAgent, st as resolvePairingPaths, tn as createOpenClawTools, tr as registerAgentRunContext, tt as updatePairedNodeMetadata, u as isSteppedBuildEnabled, ut as createAsyncLock, v as getLastReloadAt, vt as buildSystemPromptParams, w as stopTemplateWatcher, wr as enqueueSystemEvent, wt as loadSessionEntry, x as getTemplateLoadErrors, xn as createReplyDispatcher, xr as applyModelOverrideToSessionEntry, xt as listAgentsForGateway, y as getTemplate, yr as buildAuthHealthSummary, yt as canonicalizeSpawnedByForAgent, zr as extractFileContentFromSource, zt as markRecoveryAttempt } from "./reply-D_uwJ_hb.js";
4
+ import { F as resolveBootstrapMaxChars, G as normalizeUsageDisplay, H as normalizeElevatedLevel, I as resolveBootstrapTotalMaxChars, J as supportsXHighThinking, K as normalizeVerboseLevel, R as formatThinkingLevels, U as normalizeReasoningLevel, V as listThinkingLevels, W as normalizeThinkLevel, z as formatXHighModelHint } from "./pi-embedded-helpers-CSxJBpFl.js";
5
+ import { $ as renamePairedNode, $n as emitAgentEvent, At as abortEmbeddedPiRun, Br as extractFileContentFromSource, Bt as markRecoveryAttempt, C as initTemplateLoader, Cn as getTotalPendingReplies, Cr as applyVerboseOverride, Ct as loadCombinedSessionStoreForGateway, Dt as resolveSessionModelRef, Er as isSystemEventContextChanged, Et as resolveGatewaySessionStoreTarget, Ft as closeInFlightTurnsStore, G as recordRemoteNodeInfo, Gn as listDescendantRunsForRequester, Gr as transcribeOpenAiCompatibleAudio, Gt as getBuiltinSectionRegistry, H as resolveSendPolicy, Hr as normalizeMimeList, Ir as registerUnhandledRejectionHandler, It as deleteRow, J as removeRemoteNodeInfo, Jn as markSubagentRunTerminated, Jr as resolveAgentTimeoutMs, Jt as buildToolSummaryMap, K as refreshRemoteBinsForConnectedNodes, Ln as isAbortTrigger, Lt as listForCurrentInstance, Mt as queueEmbeddedPiMessage, Nt as waitForEmbeddedPiRunEnd, Ot as normalizeOrgIds, Pn as resolveUserTimezone, Pt as registerLifecycleHooks, Q as rejectNodePairing, Qn as clearAgentRunContext, Qt as createOpenClawCodingTools, Rn as stopSubagentsForRequester, Rr as DEFAULT_INPUT_IMAGE_MIMES, Rt as listFromOtherInstances, S as getTemplateUsageStats, Sn as createReplyDispatcher, Sr as applyModelOverrideToSessionEntry, St as listSessionsFromStore, Tr as enqueueSystemEvent, Tt as pruneLegacyStoreKeys, U as getRemoteSkillEligibility, Un as countActiveDescendantRuns, Ur as resolveInputFileLimits, Ut as readConsolidationState, V as normalizeSendPolicy, Vr as extractImageContentFromSource, Vt as openInFlightTurnsStore, W as primeRemoteSkillsCache, Wn as initSubagentRegistry, Wt as assembleAgentSystemPromptWithSections, X as approveNodePairing, Xn as runSubagentAnnounceFlow, Xt as PROSE_GLOBAL_ROOT, Y as setSkillsRemoteRegistry, Yt as PromptSectionRegistry, Z as listNodePairing, Zt as _clearProseCache, _ as spawnSubagentDirect, _n as patchRouting, _t as buildSystemPromptReport, a as getCliSessionId, at as verifyPairingToken, b as getTemplateCache, br as buildAuthHealthSummary, c as debugSkipAll, ct as readJsonFile, d as setDebugStepBroadcaster, dt as getSkillsSnapshotVersion, en as applyToolPolicyPipeline, er as getAgentRunContext, et as requestNodePairing, f as setSteppedBuild, fn as claimBatch, fr as getTotalQueueSize, ft as registerSkillsChangeListener, gn as openMessageLedger, gr as lookupContextTokens, gt as runEmbeddedPiAgent, hn as markSynced, hr as waitForActiveTasks, ht as clearSessionQueues, i as resolveCronStyleNow, in as requestHeartbeatNow, ir as resolveAgentIdentity, it as hashToken, j as loadProviderUsageSummary, jn as formatZonedTimestamp, jt as getActiveEmbeddedRunCount, k as normalizeGroupActivation, kt as orgScopeVisible, l as debugStepContinue, ln as loadMinionPlugins, lr as resolveBootstrapContextForRun, lt as writeJsonAtomic, mn as markFailed, mr as setCommandLaneConcurrency, n as BARE_SESSION_RESET_PROMPT, nn as createOpenClawTools, nr as registerAgentRunContext, nt as verifyNodeToken, o as setCliSessionId, ot as pruneExpiredPending, pn as closeMessageLedger, pr as resetAllLanes, q as refreshRemoteNodeBins, qt as buildSectionRenderContext, rn as TOOL_REGISTRY, rt as generatePairingToken, s as runCliAgent, sn as getPluginToolMeta, st as resolvePairingPaths, tn as buildDefaultToolPolicyPipelineSteps, tr as onAgentEvent, tt as updatePairedNodeMetadata, u as isSteppedBuildEnabled, un as loadOpenClawPlugins, ur as getActiveTaskCount, ut as createAsyncLock, v as getLastReloadAt, vn as record, vt as buildSystemPromptParams, w as stopTemplateWatcher, wr as parseVerboseOverride, wt as loadSessionEntry, x as getTemplateLoadErrors, xn as dispatchInboundMessage, xt as listAgentsForGateway, y as getTemplate, yt as canonicalizeSpawnedByForAgent, zt as markInterrupted } from "./reply-CNJWciSj.js";
6
6
  import { B as listMcpTools, E as createEmptyPluginRegistry, F as triggerInternalHook, H as registerMcpTool, I as addMcpSseSubscriber, L as getMcpDispatcher, M as clearInternalHooks, N as createInternalHookEvent, P as registerInternalHook, R as getMcpIdentityResolver, U as setMcpDispatcher, V as reconcileMcpPluginTools, W as setMcpIdentityResolver, a as setConsoleSubsystemFilter, d as CHANNEL_IDS, n as runtimeForLogger, o as setConsoleTimestampPrefix, t as createSubsystemLogger, w as setActivePluginRegistryConfig, x as getActivePluginRegistry, z as getMcpToolMethod } from "./subsystem-Cnn1-kOi.js";
7
7
  import { t as defaultRuntime } from "./runtime-Da615Z-K.js";
8
8
  import { b as isSubagentSessionKey, d as resolveAgentIdFromSessionKey, h as toAgentStoreSessionKey, i as buildAgentMainSessionKey, l as normalizeAgentId, m as toAgentRequestSessionKey, n as DEFAULT_AGENT_ID, s as classifySessionKeyShape, t as DEFAULT_ACCOUNT_ID, u as normalizeMainKey, v as isCronRunSessionKey, x as parseAgentSessionKey } from "./session-key-BcXqsG0l.js";
@@ -16,21 +16,21 @@ import { t as applySqlitePragmas } from "./sqlite-pragmas-C_o_lU6a.js";
16
16
  import { t as requireNodeSqlite } from "./sqlite-TEJFfaDd.js";
17
17
  import { d as setSentryTag, n as getReliabilityUptimeStartMs, r as initReliability, t as emitReliabilityEvent, u as setSentryContext } from "./reliability-sDt3TayA.js";
18
18
  import { n as logAcceptedEnvOption, t as isTruthyEnvValue } from "./env-Ceu1fF46.js";
19
- import { E as parseDurationMs, c as applyLegacyMigrations, i as MinionSchema, n as validateConfigObjectWithPlugins, v as resolveAgentMaxConcurrent, w as sensitive, y as resolveSubagentMaxConcurrent } from "./validation-T0CNq_JP.js";
20
- import { C as resolveRuntimeServiceVersion, S as VERSION, a as parseConfigJson5, c as resolveConfigSnapshotHash, i as loadConfig, l as writeConfigFile, n as clearConfigCache, o as readConfigFileSnapshot, r as createConfigIO, s as readConfigFileSnapshotForWrite, t as applySnapshotDefaults, y as applyMergePatch } from "./io-oiyyZuuG.js";
19
+ import { E as parseDurationMs, c as applyLegacyMigrations, i as MinionSchema, n as validateConfigObjectWithPlugins, v as resolveAgentMaxConcurrent, w as sensitive, y as resolveSubagentMaxConcurrent } from "./validation-DuFmPzCB.js";
20
+ import { C as resolveRuntimeServiceVersion, S as VERSION, a as parseConfigJson5, c as resolveConfigSnapshotHash, i as loadConfig, l as writeConfigFile, n as clearConfigCache, o as readConfigFileSnapshot, r as createConfigIO, s as readConfigFileSnapshotForWrite, t as applySnapshotDefaults, y as applyMergePatch } from "./io-CpUiX-Lv.js";
21
21
  import { l as isTestDefaultMemorySlotDisabled, n as loadPluginManifestRegistry } from "./manifest-registry-CGpdVni_.js";
22
- import { n as migrateLegacyConfig } from "./config-BgqD6SVw.js";
22
+ import { n as migrateLegacyConfig } from "./config-DJTLRK5S.js";
23
23
  import { n as listChannelPlugins, r as normalizeChannelId, t as getChannelPlugin, v as buildChannelAccountBindings } from "./plugins-DQY2DPZw.js";
24
- import { A as evaluateSessionFreshness, B as resolveMainSessionKey, C as readSessionMessages, D as stripEnvelopeFromMessages, E as resolveSessionTranscriptCandidates, I as resolveFreshSessionTotalTokens, L as canonicalizeMainSessionAlias, M as resolveSessionResetPolicy, R as resolveAgentMainSessionKey, S as capArrayByJsonBytes, U as snapshotSessionOrigin, V as resolveMainSessionKeyFromConfig, a as loadSessionStore, b as archiveFileOnDisk, g as mergeDeliveryContext, m as deliveryContextFromSession, n as parseSessionThreadInfo, t as extractDeliveryInfo, tt as cleanStaleLockFiles, u as updateSessionStore, v as normalizeSessionDeliveryFields, w as readSessionPreviewItemsFromTranscript, x as archiveSessionTranscripts, z as resolveExplicitAgentSessionKey } from "./sessions-Z8JCL_sa.js";
25
- import { n as runWithModelFallback } from "./model-fallback-DsefSc26.js";
26
- import { c as resolveSandboxRuntimeStatus, g as collectExplicitAllowlist, p as TOOL_GROUPS, v as expandToolGroups, x as resolveToolProfilePolicy, y as mergeAlsoAllowPolicy } from "./sandbox-DX1DKAJb.js";
24
+ import { A as evaluateSessionFreshness, B as resolveMainSessionKey, C as readSessionMessages, D as stripEnvelopeFromMessages, E as resolveSessionTranscriptCandidates, I as resolveFreshSessionTotalTokens, L as canonicalizeMainSessionAlias, M as resolveSessionResetPolicy, R as resolveAgentMainSessionKey, S as capArrayByJsonBytes, U as snapshotSessionOrigin, V as resolveMainSessionKeyFromConfig, a as loadSessionStore, b as archiveFileOnDisk, g as mergeDeliveryContext, m as deliveryContextFromSession, n as parseSessionThreadInfo, t as extractDeliveryInfo, tt as cleanStaleLockFiles, u as updateSessionStore, v as normalizeSessionDeliveryFields, w as readSessionPreviewItemsFromTranscript, x as archiveSessionTranscripts, z as resolveExplicitAgentSessionKey } from "./sessions-CW4tzKA-.js";
25
+ import { n as runWithModelFallback } from "./model-fallback--afWtYyY.js";
26
+ import { c as resolveSandboxRuntimeStatus, g as collectExplicitAllowlist, p as TOOL_GROUPS, v as expandToolGroups, x as resolveToolProfilePolicy, y as mergeAlsoAllowPolicy } from "./sandbox-BYK6Qgnd.js";
27
27
  import { a as enableTailscaleServeFunnel, i as enableTailscaleServe, n as disableTailscaleServe, r as enableTailscaleFunnel, s as getTailnetHostname, t as disableTailscaleFunnel } from "./tailscale-CTwxLN7C.js";
28
28
  import { a as resolveRequestClientIp, c as createAuthRateLimiter, i as resolveGatewayAuth, l as safeEqualSecret, n as authorizeGatewayConnect, o as AUTH_RATE_LIMIT_SCOPE_DEVICE_TOKEN, r as isLocalDirectRequest, s as AUTH_RATE_LIMIT_SCOPE_SHARED_SECRET, t as assertGatewayAuthConfigured } from "./auth-2GwvV8-B.js";
29
29
  import { n as pickPrimaryTailnetIPv4, r as pickPrimaryTailnetIPv6 } from "./tailnet-C0DLwT7t.js";
30
30
  import { a as isTrustedProxyAddress, d as resolveGatewayClientIp, f as resolveGatewayListenHosts, i as isPrivateOrLoopbackAddress, l as pickPrimaryLanIPv4, n as isLoopbackAddress, p as resolveHostName, r as isLoopbackHost, s as normalizeHostHeader, t as rawDataToString, u as resolveGatewayBindHost } from "./ws-D1BO6u3O.js";
31
- import { h as mergeGatewayTailscaleConfig, m as ensureGatewayStartupAuth } from "./server-context-BlUcP_zF.js";
32
- import { n as buildWorkspaceSkillSnapshot, r as loadWorkspaceSkillEntries } from "./workspace-CSGZ3DZ_.js";
33
- import "./skills-DkeUrhAT.js";
31
+ import { h as mergeGatewayTailscaleConfig, m as ensureGatewayStartupAuth } from "./server-context-CvEQbenq.js";
32
+ import { n as buildWorkspaceSkillSnapshot, r as loadWorkspaceSkillEntries } from "./workspace-CVAkpBJa.js";
33
+ import "./skills-Bf4ZPGHe.js";
34
34
  import { a as isErrno, n as formatErrorMessage } from "./errors-iV4-NKRR.js";
35
35
  import { c as detectMime } from "./image-ops-BGSWtWRb.js";
36
36
  import { a as inspectPortUsage, r as ensurePortAvailable, s as formatPortDiagnostics } from "./ports-Cwx06Uji.js";
@@ -41,20 +41,20 @@ import { r as resolveUserDir } from "./user-directory-D27je39W.js";
41
41
  import { c as resolveStorePath, i as resolveSessionTranscriptPath, n as resolveSessionFilePath, r as resolveSessionFilePathOptions, s as resolveSessionTranscriptsDirForAgent } from "./paths-Ds2czhyU.js";
42
42
  import { i as normalizeInputProvenance } from "./input-provenance-ChJN5mZj.js";
43
43
  import { t as fetchWithSsrFGuard } from "./fetch-guard-qmA7mTor.js";
44
- import { n as loadModelCatalog } from "./model-catalog-CIgjk707.js";
44
+ import { n as loadModelCatalog } from "./model-catalog-B1R3eepi.js";
45
45
  import { n as SILENT_REPLY_TOKEN, r as isSilentReplyText } from "./tokens-DRSqc0S5.js";
46
46
  import { a as stripHeartbeatToken } from "./lanes-D8quZPN3.js";
47
- import { i as resolveSessionDeliveryTarget, r as resolveOutboundTarget } from "./targets-BWPxk4rU.js";
47
+ import { i as resolveSessionDeliveryTarget, r as resolveOutboundTarget } from "./targets-BpZ7t54u.js";
48
48
  import { n as getMachineDisplayName } from "./with-timeout-B2r_vm3n.js";
49
49
  import { c as startDiagnosticHeartbeat, d as isDiagnosticsEnabled, l as stopDiagnosticHeartbeat } from "./diagnostic-BGtWFYHO.js";
50
- import { g as getGlobalHookRunner, v as runGlobalGatewayStopSafely } from "./reply-payloads-BBHotu7W.js";
51
- import { C as OPENAI_TTS_MODELS, _ as setTtsEnabled, d as resolveTtsAutoMode, f as resolveTtsConfig, i as getTtsProvider, m as resolveTtsProviderOrder, o as isTtsEnabled, p as resolveTtsPrefsPath, s as isTtsProviderConfigured, t as buildTtsSystemPromptHint, u as resolveTtsApiKey, w as OPENAI_TTS_VOICES, x as textToSpeech, y as setTtsProvider } from "./tts-CC3WSaW9.js";
52
- import { a as defineDrone, i as runDrone, t as createGatewayDroneHost } from "./host-D3VZGype.js";
50
+ import { g as getGlobalHookRunner, v as runGlobalGatewayStopSafely } from "./reply-payloads-BS889lPA.js";
51
+ import { C as OPENAI_TTS_MODELS, _ as setTtsEnabled, d as resolveTtsAutoMode, f as resolveTtsConfig, i as getTtsProvider, m as resolveTtsProviderOrder, o as isTtsEnabled, p as resolveTtsPrefsPath, s as isTtsProviderConfigured, t as buildTtsSystemPromptHint, u as resolveTtsApiKey, w as OPENAI_TTS_VOICES, x as textToSpeech, y as setTtsProvider } from "./tts-BhWpmVdG.js";
52
+ import { a as defineDrone, i as runDrone, t as createGatewayDroneHost } from "./host-C8oRBLB6.js";
53
53
  import { a as traceGatewayEvent, n as pruneOldTraceFiles } from "./chat-trace-B7hAMbQe.js";
54
- import { i as resolveMemoryBackendConfig, r as getMemorySearchManager } from "./memory-cli-BxVGlaEm.js";
54
+ import { i as resolveMemoryBackendConfig, r as getMemorySearchManager } from "./memory-cli-Bz--RMDo.js";
55
55
  import { t as ToolInputError } from "./common-CRD8HhuP.js";
56
56
  import { $ as validateNodeDescribeParams, A as validateCronRunsParams, At as validateToolsUpdateParams, B as validateExecApprovalRequestParams, Bt as errorShape, C as validateConfigSchemaParams, Ct as validateSkillsStatusParams, D as validateCronListParams, Dt as validateTelegramValidateTokenParams, E as validateCronAddParams, Et as validateTalkModeParams, F as validateDevicePairRejectParams, Ft as validateWizardCancelParams, G as validateExecApprovalsSetParams, Gt as deriveDeviceIdFromPublicKey, H as validateExecApprovalsGetParams, Ht as buildDeviceAuthPayload, I as validateDevicePairRemoveParams, It as validateWizardNextParams, J as validateMeshPlanParams, Jt as verifyDeviceSignature, K as validateLogsTailParams, L as validateDeviceTokenRevokeParams, Lt as validateWizardStartParams, M as validateCronUpdateParams, Mt as validateWakeParams, N as validateDevicePairApproveParams, Nt as validateWebLoginStartParams, O as validateCronRemoveParams, Ot as validateToolsOverridesSetParams, P as validateDevicePairListParams, Pt as validateWebLoginWaitParams, Q as validateModelsListParams, R as validateDeviceTokenRotateParams, Rt as validateWizardStatusParams, S as validateConfigPatchParams, St as validateSkillsInstallParams, T as validateConnectParams, Tt as validateTalkConfigParams, U as validateExecApprovalsNodeGetParams, Ut as normalizeDeviceAuthScopes, V as validateExecApprovalResolveParams, Vt as parseSessionLabel, W as validateExecApprovalsNodeSetParams, X as validateMeshRunParams, Y as validateMeshRetryParams, Z as validateMeshStatusParams, _ as validateChatHistoryParams, _t as validateSessionsPreviewParams, a as validateAgentWaitParams, at as validateNodePairListParams, b as validateConfigApplyParams, bt as validateSessionsUsageParams, c as validateAgentsFilesGetParams, ct as validateNodePairVerifyParams, d as validateAgentsListParams, dt as validateRequestFrame, et as validateNodeEventParams, f as validateAgentsSkillsSetParams, ft as validateSendParams, g as validateChatAbortParams, gt as validateSessionsPatchParams, h as validateChannelsStatusParams, ht as validateSessionsListParams, i as validateAgentParams, it as validateNodePairApproveParams, j as validateCronStatusParams, jt as validateUpdateRunParams, k as validateCronRunParams, kt as validateToolsStatusParams, l as validateAgentsFilesListParams, lt as validateNodeRenameParams, m as validateChannelsLogoutParams, mt as validateSessionsDeleteParams, n as formatValidationErrors, nt as validateNodeInvokeResultParams, o as validateAgentsCreateParams, ot as validateNodePairRejectParams, p as validateAgentsUpdateParams, pt as validateSessionsCompactParams, q as validateMeshPlanAutoParams, qt as normalizeDevicePublicKeyBase64Url, r as validateAgentIdentityParams, rt as validateNodeListParams, s as validateAgentsDeleteParams, st as validateNodePairRequestParams, tt as validateNodeInvokeParams, u as validateAgentsFilesSetParams, ut as validatePollParams, v as validateChatInjectParams, vt as validateSessionsResetParams, w as validateConfigSetParams, wt as validateSkillsUpdateParams, x as validateConfigGetParams, xt as validateSkillsBinsParams, y as validateChatSendParams, yt as validateSessionsResolveParams, z as validateDiscordValidateTokenParams, zt as ErrorCodes } from "./client-u0H6YbL4.js";
57
- import { n as callGateway, o as loadGatewayTlsRuntime$1 } from "./call-COjGFB_A.js";
57
+ import { n as callGateway, o as loadGatewayTlsRuntime$1 } from "./call-Di0NGY7s.js";
58
58
  import { i as isExternalHookSession, n as detectSuspiciousPatterns, r as getHookType, t as buildSafeExternalPrompt } from "./external-content-Css-cJoz.js";
59
59
  import { t as formatDocsLink } from "./links-C1xb6h4b.js";
60
60
  import { n as runCommandWithRuntime } from "./cli-utils-Cg2c3XDf.js";
@@ -62,7 +62,7 @@ import { t as formatHelpExamples } from "./help-format-D20I7z1G.js";
62
62
  import { n as withProgress } from "./progress-8_pqhNaq.js";
63
63
  import { t as getChannelActivity } from "./channel-activity-mLVM0GeJ.js";
64
64
  import { a as mergeExecApprovalsSocketDefaults, c as readExecApprovalsSnapshot, p as saveExecApprovals, r as ensureExecApprovals, s as normalizeExecApprovals, t as DEFAULT_EXEC_APPROVAL_TIMEOUT_MS } from "./exec-approvals-DWRoIcX_.js";
65
- import { a as resolveGroupToolPolicy, i as resolveEffectiveToolPolicy, o as resolveSubagentToolPolicy, t as listAgentWorkspaceDirs } from "./workspace-dirs-Yo4RZm7s.js";
65
+ import { a as resolveGroupToolPolicy, i as resolveEffectiveToolPolicy, o as resolveSubagentToolPolicy, t as listAgentWorkspaceDirs } from "./workspace-dirs-CJDJUlno.js";
66
66
  import { r as recallMemories, t as configureMemorySink } from "./memory-sink-D19pkCCX.js";
67
67
  import { t as KnowledgeGraphSession } from "./knowledge-graph-DoB5Rkcc.js";
68
68
  import { c as hasNonzeroUsage, i as loadSessionUsageTimeSeries, n as loadCostUsageSummary, r as loadSessionCostSummary, s as deriveSessionTotalTokens, t as discoverAllSessions } from "./session-cost-usage-7pQyzV4m.js";
@@ -70,25 +70,25 @@ import { n as formatTokenCount, r as formatUsd } from "./usage-format--dK3YoXf.j
70
70
  import { a as markGatewaySigusr1RestartHandled, c as setPreRestartDeferralCheck, i as isGatewaySigusr1RestartExternallyAllowed, n as deferGatewayRestartUntilIdle, o as scheduleGatewaySigusr1Restart, r as emitGatewayRestart, s as setGatewaySigusr1RestartPolicy, t as consumeGatewaySigusr1RestartAuthorization } from "./restart-CrIJvqAZ.js";
71
71
  import { i as onHeartbeatEvent, r as getLastHeartbeatEvent, t as resolveHeartbeatVisibility } from "./heartbeat-visibility-CCq47bb-.js";
72
72
  import { t as normalizePollInput } from "./polls-8i6CJXI7.js";
73
- import { a as computeBackoff, n as resolveChannelSenderIdentity, o as sleepWithAbort, r as buildHistoryContextFromEntries, t as createReplyPrefixOptions } from "./reply-prefix-eSF5kXs5.js";
73
+ import { a as computeBackoff, n as resolveChannelSenderIdentity, o as sleepWithAbort, r as buildHistoryContextFromEntries, t as createReplyPrefixOptions } from "./reply-prefix-CfrIMbCM.js";
74
74
  import { n as handleHubAssignmentChanged, r as initUserSubsystem, t as getActiveUserSubsystem } from "./server-startup-users-DPCSImrP.js";
75
75
  import { t as mapRoleToScopes } from "./types-DI5uGqkl.js";
76
- import { n as createOutboundSendDeps, t as createDefaultDeps } from "./deps-DRyTOIPO.js";
76
+ import { n as createOutboundSendDeps, t as createDefaultDeps } from "./deps-DFeGFeii.js";
77
77
  import { t as ensureMinionCliOnPath } from "./path-env-D7TwuZdr.js";
78
78
  import { t as forceFreePortAndWait } from "./ports-BsrFZzjz.js";
79
79
  import { t as buildChannelUiCatalog } from "./catalog-gQ7yZnqz.js";
80
- import { t as buildWorkspaceSkillStatus } from "./skills-status-D54inzOP.js";
80
+ import { t as buildWorkspaceSkillStatus } from "./skills-status-8p-KrlIF.js";
81
81
  import { n as setGoogleAdcClient, t as getGoogleAdcClient } from "./hub-credential-client-registry-Do4Y6KWZ.js";
82
82
  import { a as normalizeOptionalAgentId, c as normalizePayloadToSystemText, d as buildDeliveryFromLegacyPayload, f as hasLegacyDeliveryHints, i as inferLegacyName, l as normalizeRequiredName, n as normalizeCronJobCreate, o as normalizeOptionalSessionKey, p as stripLegacyDeliveryFields, r as normalizeCronJobPatch, s as normalizeOptionalText, t as normalizeHttpWebhookUrl, u as migrateLegacyCronPayload } from "./webhook-url-_cSEQkJk.js";
83
83
  import { i as parseAbsoluteTimeMs, n as resolveCronStaggerMs, r as resolveDefaultCronStaggerMs, t as normalizeCronStaggerMs } from "./stagger-BlvVswOf.js";
84
84
  import { a as summarizeRestartSentinel, n as formatDoctorNonInteractiveHint, r as formatRestartSentinelMessage, s as writeRestartSentinel, t as consumeRestartSentinel } from "./restart-sentinel-B7OftYJp.js";
85
- import { c as loadChannelOutboundAdapter, o as normalizeReplyPayloadsForDelivery, t as deliverOutboundPayloads } from "./deliver-Dhut24vc.js";
85
+ import { c as loadChannelOutboundAdapter, o as normalizeReplyPayloadsForDelivery, t as deliverOutboundPayloads } from "./deliver-Ds0o_rCY.js";
86
86
  import { n as resolveMessageChannelSelection } from "./channel-selection-ERVd9FwM.js";
87
- import { a as resetDirectoryCache, n as ensureOutboundSessionEntry, t as resolveOutboundSessionRoute } from "./outbound-session-pZGUQ4vz.js";
88
- import { c as resolveAnnounceTargetFromKey, t as readLatestAssistantReply } from "./agent-step-C3wXb9Cx.js";
87
+ import { a as resetDirectoryCache, n as ensureOutboundSessionEntry, t as resolveOutboundSessionRoute } from "./outbound-session-BG0ZMrIB.js";
88
+ import { c as resolveAnnounceTargetFromKey, t as readLatestAssistantReply } from "./agent-step-D5w2xNfi.js";
89
89
  import { a as runAggregation, n as executeOrchestration, r as readStatusJson, t as executePipeline } from "./orchestration-pipeline-BBscBgru.js";
90
90
  import { r as readManifest, t as completeManifest } from "./orchestration-manifest-ByxGsjSI.js";
91
- import { i as startBrowserControlServiceFromConfig, r as createBrowserControlContext, t as createBrowserRouteDispatcher } from "./dispatcher-DefEQC4n.js";
91
+ import { i as startBrowserControlServiceFromConfig, r as createBrowserControlContext, t as createBrowserRouteDispatcher } from "./dispatcher-D8fgAnwH.js";
92
92
  import { n as persistBrowserProxyFiles, t as applyBrowserProxyPaths } from "./proxy-files-BG6FSWAt.js";
93
93
  import { r as cachedJson } from "./ttl-cache-D8U8y0By.js";
94
94
  import { n as DEFAULT_GATEWAY_HTTP_TOOL_DENY } from "./dangerous-tools-_OH_n-zu.js";
@@ -97,32 +97,32 @@ import { t as WizardCancelledError } from "./prompts-E0FayNjJ.js";
97
97
  import { t as resolveChannelDefaultAccountId } from "./helpers-BcEbnHmz.js";
98
98
  import { t as applyPluginAutoEnable } from "./plugin-auto-enable-DARQAsaF.js";
99
99
  import { t as buildChannelAccountSnapshot } from "./status-Dg720jp3.js";
100
- import { C as resolveAssistantAvatarUrl, S as normalizeControlUiBasePath, b as CONTROL_UI_AVATAR_PREFIX, c as handleReset, x as buildControlUiAvatarUrl } from "./onboard-helpers-D60Qp1ne.js";
101
- import "./onboard-helpers-xGGsG9to.js";
100
+ import { C as resolveAssistantAvatarUrl, S as normalizeControlUiBasePath, b as CONTROL_UI_AVATAR_PREFIX, c as handleReset, x as buildControlUiAvatarUrl } from "./onboard-helpers-B9IGa3vx.js";
101
+ import "./onboard-helpers-HkYz_NGi.js";
102
102
  import { a as resolveControlUiRootSync, i as resolveControlUiRootOverrideSync, t as ensureControlUiAssetsBuilt } from "./control-ui-assets-C0ucbd84.js";
103
- import { c as startHeartbeatRunner, i as styleHealthChannelLine, n as getHealthSnapshot, o as runHeartbeatOnce, s as setHeartbeatsEnabled, t as formatHealthChannelLines } from "./health-BJ-Irw3K.js";
103
+ import { c as startHeartbeatRunner, i as styleHealthChannelLine, n as getHealthSnapshot, o as runHeartbeatOnce, s as setHeartbeatsEnabled, t as formatHealthChannelLines } from "./health-BJbAa4df.js";
104
104
  import { n as resolveWideAreaDiscoveryDomain, r as writeWideAreaGatewayZone } from "./widearea-dns-BatXL6LW.js";
105
105
  import { t as discoverGatewayBeacons } from "./bonjour-discovery-C1bt62Sk.js";
106
- import { t as installSkill } from "./skills-install-BNR2Nfa3.js";
106
+ import { t as installSkill } from "./skills-install-DkZHLCih.js";
107
107
  import { i as shouldIncludeHook, r as resolveHookConfig, t as loadWorkspaceHookEntries } from "./workspace-Do82z49r.js";
108
108
  import { t as parsePort$1 } from "./parse-port-DA32M3gA.js";
109
- import { n as addGatewayServiceCommands } from "./daemon-cli-Bs0GD5xF.js";
109
+ import { n as addGatewayServiceCommands } from "./daemon-cli-CHfZAu4w.js";
110
110
  import { i as toOptionString, n as extractGatewayMiskeys, r as maybeExplainGatewayServiceStop, t as describeUnknownError } from "./shared-CnK9cDZ7.js";
111
- import { a as resolveNodeCommandAllowlist, i as isNodeCommandAllowed, o as probeGateway } from "./audit-DmbpL3cv.js";
112
- import { n as getStatusSummary, r as pickGatewaySelfPresence } from "./status-DosDYGut.js";
111
+ import { a as resolveNodeCommandAllowlist, i as isNodeCommandAllowed, o as probeGateway } from "./audit-B8L_aShb.js";
112
+ import { n as getStatusSummary, r as pickGatewaySelfPresence } from "./status-DyQwrglF.js";
113
113
  import { a as resolveNpmChannelTag, n as compareSemverStrings, p as normalizeUpdateChannel, t as checkUpdateStatus } from "./update-check-Dy4Ru8ir.js";
114
114
  import { i as initCrypto, n as ProbeRegistry, r as SecretsManager, t as SecretStore } from "./store-BBswqFUs.js";
115
- import { t as runOnboardingWizard } from "./onboarding-BkiZ3JkU.js";
116
- import { a as normalizeRpcAttachmentsToChatAttachments, c as logWs, d as setGatewayWsLogStyle, i as sendApnsBackgroundWake, l as shouldLogWs, o as parseMessageWithAttachments, r as resolveApnsAuthConfigFromEnv, s as formatForLog, t as loadApnsRegistration, u as summarizeAgentEventForWsLog } from "./push-apns-Dh6xZki_.js";
117
- import { h as resolveGmailPullRuntimeConfig } from "./gmail-Dkq3kngs.js";
115
+ import { t as runOnboardingWizard } from "./onboarding-Cg42Uf0E.js";
116
+ import { a as normalizeRpcAttachmentsToChatAttachments, c as logWs, d as setGatewayWsLogStyle, i as sendApnsBackgroundWake, l as shouldLogWs, o as parseMessageWithAttachments, r as resolveApnsAuthConfigFromEnv, s as formatForLog, t as loadApnsRegistration, u as summarizeAgentEventForWsLog } from "./push-apns-BhtcU_Da.js";
117
+ import { h as resolveGmailPullRuntimeConfig } from "./gmail-BuCz-KEp.js";
118
118
  import { t as createOutboundSendDeps$1 } from "./outbound-send-deps-BF7Fp5DR.js";
119
- import { a as pruneAgentConfig, c as resolveAgentDeliveryPlan, d as loadAgentIdentityFromWorkspace, i as loadAgentIdentity, l as resolveAgentOutboundTarget, o as agentCommand, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-1imA1H12.js";
119
+ import { a as pruneAgentConfig, c as resolveAgentDeliveryPlan, d as loadAgentIdentityFromWorkspace, i as loadAgentIdentity, l as resolveAgentOutboundTarget, o as agentCommand, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-Di1Fb5KI.js";
120
120
  import { n as validateSystemRunCommandConsistency, t as formatExecCommand } from "./system-run-command-BRxsVIll.js";
121
121
  import { n as runGatewayUpdate, t as resolveAgentSessionDirs } from "./session-dirs-COKJbLTF.js";
122
122
  import { n as setEmbedConcurrency } from "./qmd-embed-semaphore-B8ApTrxs.js";
123
123
  import { fileURLToPath, pathToFileURL } from "node:url";
124
124
  import * as fs$3 from "node:fs";
125
- import fs, { constants, promises, readFileSync } from "node:fs";
125
+ import fs, { appendFileSync, constants, existsSync, mkdirSync, promises, readFileSync, statSync } from "node:fs";
126
126
  import os, { homedir } from "node:os";
127
127
  import * as path$1 from "node:path";
128
128
  import path, { dirname, join } from "node:path";
@@ -147,8 +147,8 @@ import chokidar from "chokidar";
147
147
  import { Type } from "@sinclair/typebox";
148
148
  import { EventEmitter } from "node:events";
149
149
  import Database from "better-sqlite3";
150
- import { monitorEventLoopDelay } from "node:perf_hooks";
151
150
  import { SignJWT, createRemoteJWKSet, jwtVerify } from "jose";
151
+ import { monitorEventLoopDelay } from "node:perf_hooks";
152
152
  import { Cron } from "croner";
153
153
  import { DatabaseSync } from "node:sqlite";
154
154
  import { encode } from "gpt-tokenizer";
@@ -1398,177 +1398,8 @@ function scanForInterruptedOrchestrations(agentWorkspaces) {
1398
1398
  return interrupted;
1399
1399
  }
1400
1400
  //#endregion
1401
- //#region src/gateway/gateway-request-metrics.ts
1402
- /**
1403
- * Gateway request performance metrics.
1404
- *
1405
- * Records per-method handler latency at the request dispatch chokepoint and
1406
- * samples Node's event-loop delay, then emits a single aggregated
1407
- * `gateway.perf_snapshot` event per window (default 60s) into the unified
1408
- * event store — the same surface the hub reliability dashboard reads.
1409
- *
1410
- * Why this exists: the legacy `gateway.ws_slow_response` event fired per-call
1411
- * at a 50ms bar, flooding the dashboard with non-actionable noise while
1412
- * measuring *total* WS round-trip time (which is dominated by event-loop
1413
- * scheduling, not handler work). This module instead measures handler CPU
1414
- * time per method AND event-loop delay separately, so slow responses can be
1415
- * correctly attributed (heavy handler vs. a congested event loop) from
1416
- * percentile aggregates rather than guesswork.
1417
- *
1418
- * Metric points emitted (in `gateway.perf_snapshot` metadata):
1419
- * - requests — count + throughput (req/s) over the window
1420
- * - errorRate — fraction of requests that responded `ok: false`
1421
- * - latencyMs — p50 / p95 / p99 / max handler latency across all methods
1422
- * - slowestMethods — top methods by p95 latency (count, p50, p95, max, errors)
1423
- * - eventLoopDelayMs — mean / p50 / p99 / max event-loop lag over the window
1424
- *
1425
- * @module
1426
- */
1427
- const log$26 = createSubsystemLogger("gateway/metrics");
1428
- /** Cap on retained latency samples per method (reservoir) to bound memory. */
1429
- const MAX_SAMPLES_PER_METHOD = 512;
1430
- /** Default snapshot window. Matches the reliability rate-limiter granularity. */
1431
- const DEFAULT_INTERVAL_MS = 6e4;
1432
- const methodStats = /* @__PURE__ */ new Map();
1433
- let reporterTimer = null;
1434
- let eventLoopHist = null;
1435
- let windowStartMs = 0;
1436
- /**
1437
- * Record one dispatched request's handler latency and outcome.
1438
- * Called at the dispatch chokepoint. Best-effort — never throws.
1439
- */
1440
- function recordMethodLatency(method, durationMs, ok) {
1441
- if (!Number.isFinite(durationMs) || durationMs < 0) return;
1442
- let stat = methodStats.get(method);
1443
- if (!stat) {
1444
- stat = {
1445
- count: 0,
1446
- errors: 0,
1447
- samples: []
1448
- };
1449
- methodStats.set(method, stat);
1450
- }
1451
- stat.count += 1;
1452
- if (!ok) stat.errors += 1;
1453
- if (stat.samples.length < MAX_SAMPLES_PER_METHOD) stat.samples.push(durationMs);
1454
- else stat.samples[Math.floor(Math.random() * MAX_SAMPLES_PER_METHOD)] = durationMs;
1455
- }
1456
- function percentiles(samples) {
1457
- if (samples.length === 0) return {
1458
- p50: 0,
1459
- p95: 0,
1460
- p99: 0,
1461
- max: 0
1462
- };
1463
- const sorted = [...samples].sort((a, b) => a - b);
1464
- const at = (q) => sorted[Math.min(Math.floor(sorted.length * q), sorted.length - 1)];
1465
- return {
1466
- p50: Math.round(at(.5)),
1467
- p95: Math.round(at(.95)),
1468
- p99: Math.round(at(.99)),
1469
- max: Math.round(sorted[sorted.length - 1])
1470
- };
1471
- }
1472
- /** Build a snapshot from the current window without resetting state. */
1473
- function buildGatewayPerfSnapshot(windowMs, topN = 5) {
1474
- const allSamples = [];
1475
- let requests = 0;
1476
- let errors = 0;
1477
- const perMethod = [];
1478
- for (const [method, stat] of methodStats) {
1479
- requests += stat.count;
1480
- errors += stat.errors;
1481
- for (const s of stat.samples) allSamples.push(s);
1482
- const p = percentiles(stat.samples);
1483
- perMethod.push({
1484
- method,
1485
- count: stat.count,
1486
- errors: stat.errors,
1487
- p50: p.p50,
1488
- p95: p.p95,
1489
- max: p.max
1490
- });
1491
- }
1492
- perMethod.sort((a, b) => b.p95 - a.p95 || b.max - a.max);
1493
- const windowSec = windowMs > 0 ? windowMs / 1e3 : 1;
1494
- const el = eventLoopHist;
1495
- const elMs = (ns) => Math.round(ns / 1e6 * 100) / 100;
1496
- return {
1497
- windowMs,
1498
- requests,
1499
- throughputPerSec: Math.round(requests / windowSec * 100) / 100,
1500
- errorRate: requests > 0 ? Math.round(errors / requests * 1e3) / 1e3 : 0,
1501
- latencyMs: percentiles(allSamples),
1502
- slowestMethods: perMethod.slice(0, topN),
1503
- eventLoopDelayMs: el ? {
1504
- mean: elMs(el.mean),
1505
- p50: elMs(el.percentile(50)),
1506
- p99: elMs(el.percentile(99)),
1507
- max: elMs(el.max)
1508
- } : {
1509
- mean: 0,
1510
- p50: 0,
1511
- p99: 0,
1512
- max: 0
1513
- }
1514
- };
1515
- }
1516
- function emitSnapshot(windowMs) {
1517
- const snap = buildGatewayPerfSnapshot(windowMs);
1518
- if (snap.requests === 0 && snap.eventLoopDelayMs.max < 100) return;
1519
- const { latencyMs: lat, eventLoopDelayMs: el } = snap;
1520
- emitEvent({
1521
- category: "gateway",
1522
- severity: "info",
1523
- event: "gateway.perf_snapshot",
1524
- message: `Gateway perf: ${snap.requests} req (${snap.throughputPerSec}/s), p95 ${lat.p95}ms / max ${lat.max}ms, evloop p99 ${el.p99}ms / max ${el.max}ms`,
1525
- metadata: { ...snap },
1526
- timestamp: Date.now()
1527
- });
1528
- }
1529
- /**
1530
- * Start the periodic metrics reporter and event-loop delay monitor.
1531
- * Idempotent — a second call is a no-op until {@link stopGatewayRequestMetrics}.
1532
- * Returns a stop function.
1533
- */
1534
- function startGatewayRequestMetrics(opts) {
1535
- if (reporterTimer) return stopGatewayRequestMetrics;
1536
- const intervalMs = opts?.intervalMs ?? DEFAULT_INTERVAL_MS;
1537
- try {
1538
- eventLoopHist = monitorEventLoopDelay({ resolution: 20 });
1539
- eventLoopHist.enable();
1540
- } catch (err) {
1541
- log$26.debug(`event-loop delay monitor unavailable: ${err instanceof Error ? err.message : String(err)}`);
1542
- eventLoopHist = null;
1543
- }
1544
- windowStartMs = Date.now();
1545
- reporterTimer = setInterval(() => {
1546
- const now = Date.now();
1547
- try {
1548
- emitSnapshot(now - windowStartMs);
1549
- } catch (err) {
1550
- log$26.debug(`perf snapshot emit failed: ${err instanceof Error ? err.message : String(err)}`);
1551
- }
1552
- methodStats.clear();
1553
- eventLoopHist?.reset();
1554
- windowStartMs = now;
1555
- }, intervalMs);
1556
- reporterTimer.unref?.();
1557
- return stopGatewayRequestMetrics;
1558
- }
1559
- /** Stop the reporter and clear accumulated state. */
1560
- function stopGatewayRequestMetrics() {
1561
- if (reporterTimer) {
1562
- clearInterval(reporterTimer);
1563
- reporterTimer = null;
1564
- }
1565
- eventLoopHist?.disable();
1566
- eventLoopHist = null;
1567
- methodStats.clear();
1568
- }
1569
- //#endregion
1570
1401
  //#region src/infra/exec-approval-forwarder.ts
1571
- const log$25 = createSubsystemLogger("gateway/exec-approvals");
1402
+ const log$26 = createSubsystemLogger("gateway/exec-approvals");
1572
1403
  const DEFAULT_MODE = "session";
1573
1404
  function normalizeMode(mode) {
1574
1405
  return mode ?? DEFAULT_MODE;
@@ -1686,7 +1517,7 @@ async function deliverToTargets(params) {
1686
1517
  payloads: [{ text: params.text }]
1687
1518
  });
1688
1519
  } catch (err) {
1689
- log$25.error(`exec approvals: failed to deliver to ${channel}:${target.to}: ${String(err)}`);
1520
+ log$26.error(`exec approvals: failed to deliver to ${channel}:${target.to}: ${String(err)}`);
1690
1521
  }
1691
1522
  });
1692
1523
  await Promise.allSettled(deliveries);
@@ -1847,12 +1678,12 @@ function stopLedgerFlusher() {
1847
1678
  }
1848
1679
  //#endregion
1849
1680
  //#region src/infra/message-ledger-hooks.ts
1850
- const PLUGIN_ID$2 = "minion:message-ledger";
1681
+ const PLUGIN_ID$3 = "minion:message-ledger";
1851
1682
  const recentInbound = /* @__PURE__ */ new Map();
1852
1683
  const keyFor = (channel, accountId, chatId) => `${channel}|${accountId ?? ""}|${chatId ?? ""}`;
1853
1684
  function registerMessageLedgerHooks(registry, dbPath, flusher) {
1854
1685
  registry.typedHooks.push({
1855
- pluginId: PLUGIN_ID$2,
1686
+ pluginId: PLUGIN_ID$3,
1856
1687
  hookName: "gateway_start",
1857
1688
  handler: () => {
1858
1689
  openMessageLedger(dbPath);
@@ -1860,7 +1691,7 @@ function registerMessageLedgerHooks(registry, dbPath, flusher) {
1860
1691
  },
1861
1692
  source: "internal"
1862
1693
  }, {
1863
- pluginId: PLUGIN_ID$2,
1694
+ pluginId: PLUGIN_ID$3,
1864
1695
  hookName: "gateway_stop",
1865
1696
  handler: () => {
1866
1697
  stopLedgerFlusher();
@@ -1868,7 +1699,7 @@ function registerMessageLedgerHooks(registry, dbPath, flusher) {
1868
1699
  },
1869
1700
  source: "internal"
1870
1701
  }, {
1871
- pluginId: PLUGIN_ID$2,
1702
+ pluginId: PLUGIN_ID$3,
1872
1703
  hookName: "message_inbound",
1873
1704
  handler: (event) => {
1874
1705
  const row = record({
@@ -1893,7 +1724,7 @@ function registerMessageLedgerHooks(registry, dbPath, flusher) {
1893
1724
  },
1894
1725
  source: "internal"
1895
1726
  }, {
1896
- pluginId: PLUGIN_ID$2,
1727
+ pluginId: PLUGIN_ID$3,
1897
1728
  hookName: "message_received",
1898
1729
  handler: (_event, ctx) => {
1899
1730
  if (!ctx.sessionKey) return;
@@ -1909,7 +1740,7 @@ function registerMessageLedgerHooks(registry, dbPath, flusher) {
1909
1740
  },
1910
1741
  source: "internal"
1911
1742
  }, {
1912
- pluginId: PLUGIN_ID$2,
1743
+ pluginId: PLUGIN_ID$3,
1913
1744
  hookName: "message_sent",
1914
1745
  handler: (event, ctx) => {
1915
1746
  record({
@@ -2347,24 +2178,24 @@ function ensureWorkspaceSafely(userId) {
2347
2178
  ensurePersonalAgentWorkspace(userId);
2348
2179
  } catch {}
2349
2180
  }
2350
- const PLUGIN_ID$1 = "minion:personal-agent-observations";
2181
+ const PLUGIN_ID$2 = "minion:personal-agent-observations";
2351
2182
  function registerPersonalAgentObservationHooks(registry, dbPath) {
2352
2183
  registry.typedHooks.push({
2353
- pluginId: PLUGIN_ID$1,
2184
+ pluginId: PLUGIN_ID$2,
2354
2185
  hookName: "gateway_start",
2355
2186
  handler: () => {
2356
2187
  openObservationStore(dbPath);
2357
2188
  },
2358
2189
  source: "internal"
2359
2190
  }, {
2360
- pluginId: PLUGIN_ID$1,
2191
+ pluginId: PLUGIN_ID$2,
2361
2192
  hookName: "gateway_stop",
2362
2193
  handler: () => {
2363
2194
  closeObservationStore();
2364
2195
  },
2365
2196
  source: "internal"
2366
2197
  }, {
2367
- pluginId: PLUGIN_ID$1,
2198
+ pluginId: PLUGIN_ID$2,
2368
2199
  hookName: "message_inbound",
2369
2200
  handler: (event) => {
2370
2201
  if (event.isGroup) return;
@@ -2387,7 +2218,7 @@ function registerPersonalAgentObservationHooks(registry, dbPath) {
2387
2218
  },
2388
2219
  source: "internal"
2389
2220
  }, {
2390
- pluginId: PLUGIN_ID$1,
2221
+ pluginId: PLUGIN_ID$2,
2391
2222
  hookName: "message_received",
2392
2223
  handler: (event, ctx) => {
2393
2224
  const channel = ctx.channelId;
@@ -2404,7 +2235,7 @@ function registerPersonalAgentObservationHooks(registry, dbPath) {
2404
2235
  },
2405
2236
  source: "internal"
2406
2237
  }, {
2407
- pluginId: PLUGIN_ID$1,
2238
+ pluginId: PLUGIN_ID$2,
2408
2239
  hookName: "message_sent",
2409
2240
  handler: (event, ctx) => {
2410
2241
  const channel = ctx.channelId;
@@ -3146,6 +2977,86 @@ function asStringArray(v) {
3146
2977
  return v.filter((x) => typeof x === "string");
3147
2978
  }
3148
2979
  //#endregion
2980
+ //#region src/trajectory/writer.ts
2981
+ const DEFAULT_MAX_BYTES$2 = 5 * 1024 * 1024;
2982
+ var TrajectoryWriter = class {
2983
+ constructor(file, opts) {
2984
+ this.file = file;
2985
+ this.bytes = 0;
2986
+ this.dropped = 0;
2987
+ this.maxBytes = opts?.maxBytes ?? DEFAULT_MAX_BYTES$2;
2988
+ mkdirSync(dirname(file), { recursive: true });
2989
+ if (existsSync(file)) this.bytes = statSync(file).size;
2990
+ }
2991
+ append(event) {
2992
+ if (this.bytes >= this.maxBytes) {
2993
+ this.dropped += 1;
2994
+ return;
2995
+ }
2996
+ const line = `${JSON.stringify(event)}\n`;
2997
+ try {
2998
+ appendFileSync(this.file, line);
2999
+ this.bytes += Buffer.byteLength(line);
3000
+ } catch {
3001
+ this.dropped += 1;
3002
+ }
3003
+ }
3004
+ };
3005
+ //#endregion
3006
+ //#region src/trajectory/recorder.ts
3007
+ const PLUGIN_ID$1 = "trajectory-recorder";
3008
+ const writers = /* @__PURE__ */ new Map();
3009
+ const MAX_LIVE_SESSIONS = 500;
3010
+ function writerFor(sessionId, agentId) {
3011
+ let w = writers.get(sessionId);
3012
+ if (!w) {
3013
+ if (writers.size >= MAX_LIVE_SESSIONS) {
3014
+ const oldest = writers.keys().next().value;
3015
+ if (oldest !== void 0) writers.delete(oldest);
3016
+ }
3017
+ w = new TrajectoryWriter(join(resolveSessionTranscriptsDirForAgent(agentId), `trajectory-${sessionId}.jsonl`));
3018
+ writers.set(sessionId, w);
3019
+ }
3020
+ return w;
3021
+ }
3022
+ /** Idempotent: enable per-session JSONL trajectory recording via lifecycle hooks. */
3023
+ function enableTrajectoryRecording() {
3024
+ registerLifecycleHooks(PLUGIN_ID$1, {
3025
+ onSessionStart: async (s) => {
3026
+ writerFor(s.sessionId, s.agentId).append({
3027
+ kind: "session_start",
3028
+ sessionId: s.sessionId,
3029
+ agentId: s.agentId,
3030
+ channelType: s.channelType,
3031
+ timestamp: s.startedAt
3032
+ });
3033
+ },
3034
+ postLlmCall: async (ctx, result) => {
3035
+ writerFor(ctx.sessionId, ctx.agentId).append({
3036
+ kind: "llm_call",
3037
+ turn: ctx.turn,
3038
+ model: result.model,
3039
+ inputTokens: result.inputTokens,
3040
+ outputTokens: result.outputTokens,
3041
+ durationMs: result.durationMs,
3042
+ hasToolCalls: result.hasToolCalls,
3043
+ error: result.error,
3044
+ timestamp: ctx.timestamp
3045
+ });
3046
+ },
3047
+ onSessionEnd: async (s, summary) => {
3048
+ writerFor(s.sessionId, s.agentId).append({
3049
+ kind: "session_end",
3050
+ turns: summary.turns,
3051
+ durationMs: summary.durationMs,
3052
+ endReason: summary.endReason,
3053
+ timestamp: Date.now()
3054
+ });
3055
+ writers.delete(s.sessionId);
3056
+ }
3057
+ });
3058
+ }
3059
+ //#endregion
3149
3060
  //#region src/gateway/auth/auth-jwt.ts
3150
3061
  /**
3151
3062
  * JWT validation module for the multi-tenant gateway.
@@ -3251,7 +3162,7 @@ async function validateGatewayJwt(token, config) {
3251
3162
  }
3252
3163
  //#endregion
3253
3164
  //#region src/gateway/channel-health-monitor.ts
3254
- const log$24 = createSubsystemLogger("gateway/health-monitor");
3165
+ const log$25 = createSubsystemLogger("gateway/health-monitor");
3255
3166
  const DEFAULT_CHECK_INTERVAL_MS$1 = 5 * 6e4;
3256
3167
  const DEFAULT_STARTUP_GRACE_MS = 6e4;
3257
3168
  const DEFAULT_COOLDOWN_CYCLES = 2;
@@ -3300,11 +3211,11 @@ function startChannelHealthMonitor(deps) {
3300
3211
  if (now - record.lastRestartAt <= cooldownMs) continue;
3301
3212
  pruneOldRestarts(record, now);
3302
3213
  if (record.restartsThisHour.length >= maxRestartsPerHour) {
3303
- log$24.warn?.(`[${channelId}:${accountId}] health-monitor: hit ${maxRestartsPerHour} restarts/hour limit, skipping`);
3214
+ log$25.warn?.(`[${channelId}:${accountId}] health-monitor: hit ${maxRestartsPerHour} restarts/hour limit, skipping`);
3304
3215
  continue;
3305
3216
  }
3306
3217
  const reason = !status.running ? status.reconnectAttempts && status.reconnectAttempts >= 10 ? "gave-up" : "stopped" : "stuck";
3307
- log$24.info?.(`[${channelId}:${accountId}] health-monitor: restarting (reason: ${reason})`);
3218
+ log$25.info?.(`[${channelId}:${accountId}] health-monitor: restarting (reason: ${reason})`);
3308
3219
  try {
3309
3220
  if (status.running) await channelManager.stopChannel(channelId, accountId);
3310
3221
  channelManager.resetRestartAttempts(channelId, accountId);
@@ -3313,7 +3224,7 @@ function startChannelHealthMonitor(deps) {
3313
3224
  record.restartsThisHour.push({ at: now });
3314
3225
  restartRecords.set(key, record);
3315
3226
  } catch (err) {
3316
- log$24.error?.(`[${channelId}:${accountId}] health-monitor: restart failed: ${String(err)}`);
3227
+ log$25.error?.(`[${channelId}:${accountId}] health-monitor: restart failed: ${String(err)}`);
3317
3228
  }
3318
3229
  }
3319
3230
  }
@@ -3333,7 +3244,7 @@ function startChannelHealthMonitor(deps) {
3333
3244
  abortSignal?.addEventListener("abort", stop, { once: true });
3334
3245
  timer = setInterval(() => void runCheck(), checkIntervalMs);
3335
3246
  if (typeof timer === "object" && "unref" in timer) timer.unref();
3336
- log$24.info?.(`started (interval: ${Math.round(checkIntervalMs / 1e3)}s, grace: ${Math.round(startupGraceMs / 1e3)}s)`);
3247
+ log$25.info?.(`started (interval: ${Math.round(checkIntervalMs / 1e3)}s, grace: ${Math.round(startupGraceMs / 1e3)}s)`);
3337
3248
  }
3338
3249
  return { stop };
3339
3250
  }
@@ -3827,7 +3738,7 @@ var ExecApprovalManager = class {
3827
3738
  * Opens the SQLite database, applies WAL pragmas, and runs the
3828
3739
  * 004_free_tier_users migration. Returns the DatabaseSync instance.
3829
3740
  */
3830
- const log$23 = createSubsystemLogger("free-tier/db");
3741
+ const log$24 = createSubsystemLogger("free-tier/db");
3831
3742
  const MIGRATION_SQL_PATH = join(dirname(fileURLToPath(import.meta.url)), "../../db/migrations/004_free_tier_users.sql");
3832
3743
  function openFreeTierDb(dbPath) {
3833
3744
  const { DatabaseSync } = requireNodeSqlite();
@@ -3836,9 +3747,9 @@ function openFreeTierDb(dbPath) {
3836
3747
  try {
3837
3748
  const sql = readFileSync(MIGRATION_SQL_PATH, "utf8");
3838
3749
  db.exec(sql);
3839
- log$23.info("free-tier DB migration applied", { dbPath });
3750
+ log$24.info("free-tier DB migration applied", { dbPath });
3840
3751
  } catch (err) {
3841
- log$23.error("free-tier DB migration failed", {
3752
+ log$24.error("free-tier DB migration failed", {
3842
3753
  dbPath,
3843
3754
  error: String(err)
3844
3755
  });
@@ -3977,13 +3888,13 @@ var UserRepository = class {
3977
3888
  };
3978
3889
  //#endregion
3979
3890
  //#region src/gateway/free-tier/email.ts
3980
- const log$22 = createSubsystemLogger("free-tier/email");
3891
+ const log$23 = createSubsystemLogger("free-tier/email");
3981
3892
  const RESEND_API = "https://api.resend.com/emails";
3982
3893
  const FROM = "OpenClaw <noreply@minion.ai>";
3983
3894
  async function send$1(to, subject, html) {
3984
3895
  const apiKey = process.env["RESEND_API_KEY"];
3985
3896
  if (!apiKey) {
3986
- log$22.warn("RESEND_API_KEY not set — email not sent", {
3897
+ log$23.warn("RESEND_API_KEY not set — email not sent", {
3987
3898
  to,
3988
3899
  subject
3989
3900
  });
@@ -4004,7 +3915,7 @@ async function send$1(to, subject, html) {
4004
3915
  });
4005
3916
  if (!res.ok) {
4006
3917
  const text = await res.text().catch(() => "");
4007
- log$22.error("Resend API error", {
3918
+ log$23.error("Resend API error", {
4008
3919
  status: res.status,
4009
3920
  body: text
4010
3921
  });
@@ -4017,7 +3928,7 @@ async function sendVerificationEmail(email, token, baseUrl) {
4017
3928
  }
4018
3929
  //#endregion
4019
3930
  //#region src/gateway/free-tier/auth-http.ts
4020
- const log$21 = createSubsystemLogger("free-tier/auth");
3931
+ const log$22 = createSubsystemLogger("free-tier/auth");
4021
3932
  function json$1(res, status, body) {
4022
3933
  res.statusCode = status;
4023
3934
  res.setHeader("Content-Type", "application/json; charset=utf-8");
@@ -4079,7 +3990,7 @@ async function handleSignup(req, res, users) {
4079
3990
  passwordHash
4080
3991
  });
4081
3992
  await sendVerificationEmail(email, verifyToken, process.env["HUB_BASE_URL"] ?? "https://hub.minion.ai").catch((e) => {
4082
- log$21.error("failed to send verification email", {
3993
+ log$22.error("failed to send verification email", {
4083
3994
  userId: user.id,
4084
3995
  error: String(e)
4085
3996
  });
@@ -4386,6 +4297,175 @@ function createFreeTierApiHandler(db) {
4386
4297
  };
4387
4298
  }
4388
4299
  //#endregion
4300
+ //#region src/gateway/gateway-request-metrics.ts
4301
+ /**
4302
+ * Gateway request performance metrics.
4303
+ *
4304
+ * Records per-method handler latency at the request dispatch chokepoint and
4305
+ * samples Node's event-loop delay, then emits a single aggregated
4306
+ * `gateway.perf_snapshot` event per window (default 60s) into the unified
4307
+ * event store — the same surface the hub reliability dashboard reads.
4308
+ *
4309
+ * Why this exists: the legacy `gateway.ws_slow_response` event fired per-call
4310
+ * at a 50ms bar, flooding the dashboard with non-actionable noise while
4311
+ * measuring *total* WS round-trip time (which is dominated by event-loop
4312
+ * scheduling, not handler work). This module instead measures handler CPU
4313
+ * time per method AND event-loop delay separately, so slow responses can be
4314
+ * correctly attributed (heavy handler vs. a congested event loop) from
4315
+ * percentile aggregates rather than guesswork.
4316
+ *
4317
+ * Metric points emitted (in `gateway.perf_snapshot` metadata):
4318
+ * - requests — count + throughput (req/s) over the window
4319
+ * - errorRate — fraction of requests that responded `ok: false`
4320
+ * - latencyMs — p50 / p95 / p99 / max handler latency across all methods
4321
+ * - slowestMethods — top methods by p95 latency (count, p50, p95, max, errors)
4322
+ * - eventLoopDelayMs — mean / p50 / p99 / max event-loop lag over the window
4323
+ *
4324
+ * @module
4325
+ */
4326
+ const log$21 = createSubsystemLogger("gateway/metrics");
4327
+ /** Cap on retained latency samples per method (reservoir) to bound memory. */
4328
+ const MAX_SAMPLES_PER_METHOD = 512;
4329
+ /** Default snapshot window. Matches the reliability rate-limiter granularity. */
4330
+ const DEFAULT_INTERVAL_MS = 6e4;
4331
+ const methodStats = /* @__PURE__ */ new Map();
4332
+ let reporterTimer = null;
4333
+ let eventLoopHist = null;
4334
+ let windowStartMs = 0;
4335
+ /**
4336
+ * Record one dispatched request's handler latency and outcome.
4337
+ * Called at the dispatch chokepoint. Best-effort — never throws.
4338
+ */
4339
+ function recordMethodLatency(method, durationMs, ok) {
4340
+ if (!Number.isFinite(durationMs) || durationMs < 0) return;
4341
+ let stat = methodStats.get(method);
4342
+ if (!stat) {
4343
+ stat = {
4344
+ count: 0,
4345
+ errors: 0,
4346
+ samples: []
4347
+ };
4348
+ methodStats.set(method, stat);
4349
+ }
4350
+ stat.count += 1;
4351
+ if (!ok) stat.errors += 1;
4352
+ if (stat.samples.length < MAX_SAMPLES_PER_METHOD) stat.samples.push(durationMs);
4353
+ else stat.samples[Math.floor(Math.random() * MAX_SAMPLES_PER_METHOD)] = durationMs;
4354
+ }
4355
+ function percentiles(samples) {
4356
+ if (samples.length === 0) return {
4357
+ p50: 0,
4358
+ p95: 0,
4359
+ p99: 0,
4360
+ max: 0
4361
+ };
4362
+ const sorted = [...samples].sort((a, b) => a - b);
4363
+ const at = (q) => sorted[Math.min(Math.floor(sorted.length * q), sorted.length - 1)];
4364
+ return {
4365
+ p50: Math.round(at(.5)),
4366
+ p95: Math.round(at(.95)),
4367
+ p99: Math.round(at(.99)),
4368
+ max: Math.round(sorted[sorted.length - 1])
4369
+ };
4370
+ }
4371
+ /** Build a snapshot from the current window without resetting state. */
4372
+ function buildGatewayPerfSnapshot(windowMs, topN = 5) {
4373
+ const allSamples = [];
4374
+ let requests = 0;
4375
+ let errors = 0;
4376
+ const perMethod = [];
4377
+ for (const [method, stat] of methodStats) {
4378
+ requests += stat.count;
4379
+ errors += stat.errors;
4380
+ for (const s of stat.samples) allSamples.push(s);
4381
+ const p = percentiles(stat.samples);
4382
+ perMethod.push({
4383
+ method,
4384
+ count: stat.count,
4385
+ errors: stat.errors,
4386
+ p50: p.p50,
4387
+ p95: p.p95,
4388
+ max: p.max
4389
+ });
4390
+ }
4391
+ perMethod.sort((a, b) => b.p95 - a.p95 || b.max - a.max);
4392
+ const windowSec = windowMs > 0 ? windowMs / 1e3 : 1;
4393
+ const el = eventLoopHist;
4394
+ const elMs = (ns) => Math.round(ns / 1e6 * 100) / 100;
4395
+ return {
4396
+ windowMs,
4397
+ requests,
4398
+ throughputPerSec: Math.round(requests / windowSec * 100) / 100,
4399
+ errorRate: requests > 0 ? Math.round(errors / requests * 1e3) / 1e3 : 0,
4400
+ latencyMs: percentiles(allSamples),
4401
+ slowestMethods: perMethod.slice(0, topN),
4402
+ eventLoopDelayMs: el ? {
4403
+ mean: elMs(el.mean),
4404
+ p50: elMs(el.percentile(50)),
4405
+ p99: elMs(el.percentile(99)),
4406
+ max: elMs(el.max)
4407
+ } : {
4408
+ mean: 0,
4409
+ p50: 0,
4410
+ p99: 0,
4411
+ max: 0
4412
+ }
4413
+ };
4414
+ }
4415
+ function emitSnapshot(windowMs) {
4416
+ const snap = buildGatewayPerfSnapshot(windowMs);
4417
+ if (snap.requests === 0 && snap.eventLoopDelayMs.max < 100) return;
4418
+ const { latencyMs: lat, eventLoopDelayMs: el } = snap;
4419
+ emitEvent({
4420
+ category: "gateway",
4421
+ severity: "info",
4422
+ event: "gateway.perf_snapshot",
4423
+ message: `Gateway perf: ${snap.requests} req (${snap.throughputPerSec}/s), p95 ${lat.p95}ms / max ${lat.max}ms, evloop p99 ${el.p99}ms / max ${el.max}ms`,
4424
+ metadata: { ...snap },
4425
+ timestamp: Date.now()
4426
+ });
4427
+ }
4428
+ /**
4429
+ * Start the periodic metrics reporter and event-loop delay monitor.
4430
+ * Idempotent — a second call is a no-op until {@link stopGatewayRequestMetrics}.
4431
+ * Returns a stop function.
4432
+ */
4433
+ function startGatewayRequestMetrics(opts) {
4434
+ if (reporterTimer) return stopGatewayRequestMetrics;
4435
+ const intervalMs = opts?.intervalMs ?? DEFAULT_INTERVAL_MS;
4436
+ try {
4437
+ eventLoopHist = monitorEventLoopDelay({ resolution: 20 });
4438
+ eventLoopHist.enable();
4439
+ } catch (err) {
4440
+ log$21.debug(`event-loop delay monitor unavailable: ${err instanceof Error ? err.message : String(err)}`);
4441
+ eventLoopHist = null;
4442
+ }
4443
+ windowStartMs = Date.now();
4444
+ reporterTimer = setInterval(() => {
4445
+ const now = Date.now();
4446
+ try {
4447
+ emitSnapshot(now - windowStartMs);
4448
+ } catch (err) {
4449
+ log$21.debug(`perf snapshot emit failed: ${err instanceof Error ? err.message : String(err)}`);
4450
+ }
4451
+ methodStats.clear();
4452
+ eventLoopHist?.reset();
4453
+ windowStartMs = now;
4454
+ }, intervalMs);
4455
+ reporterTimer.unref?.();
4456
+ return stopGatewayRequestMetrics;
4457
+ }
4458
+ /** Stop the reporter and clear accumulated state. */
4459
+ function stopGatewayRequestMetrics() {
4460
+ if (reporterTimer) {
4461
+ clearInterval(reporterTimer);
4462
+ reporterTimer = null;
4463
+ }
4464
+ eventLoopHist?.disable();
4465
+ eventLoopHist = null;
4466
+ methodStats.clear();
4467
+ }
4468
+ //#endregion
4389
4469
  //#region src/gateway/http-utils.ts
4390
4470
  function getHeader(req, name) {
4391
4471
  const raw = req.headers[name.toLowerCase()];
@@ -18904,7 +18984,7 @@ const nodeHandlers = {
18904
18984
  const p = params;
18905
18985
  const payloadJSON = typeof p.payloadJSON === "string" ? p.payloadJSON : p.payload !== void 0 ? JSON.stringify(p.payload) : null;
18906
18986
  await respondUnavailableOnThrow(respond, async () => {
18907
- const { handleNodeEvent } = await import("./server-node-events-DQqHB_8B.js");
18987
+ const { handleNodeEvent } = await import("./server-node-events-B6rUT0PE.js");
18908
18988
  const nodeId = client?.connect?.device?.id ?? client?.connect?.client?.id ?? "node";
18909
18989
  const nodeConnId = client?.connId;
18910
18990
  await handleNodeEvent({
@@ -26411,7 +26491,7 @@ function normalizeAgentPayload(payload) {
26411
26491
  async function startBrowserControlServerIfEnabled() {
26412
26492
  if (isTruthyEnvValue(process.env.MINION_SKIP_BROWSER_CONTROL_SERVER)) return null;
26413
26493
  const override = process.env.MINION_BROWSER_CONTROL_MODULE?.trim();
26414
- const mod = override ? await import(override) : await import("./dispatcher-DefEQC4n.js").then((n) => n.n);
26494
+ const mod = override ? await import(override) : await import("./dispatcher-D8fgAnwH.js").then((n) => n.n);
26415
26495
  const start = typeof mod.startBrowserControlServiceFromConfig === "function" ? mod.startBrowserControlServiceFromConfig : mod.startBrowserControlServerFromConfig;
26416
26496
  const stop = typeof mod.stopBrowserControlService === "function" ? mod.stopBrowserControlService : mod.stopBrowserControlServer;
26417
26497
  if (!start) return null;
@@ -32270,7 +32350,7 @@ async function deliverFlowReply(sessionKey, reply) {
32270
32350
  }
32271
32351
  try {
32272
32352
  const cfg = loadConfig();
32273
- const { deliverOutboundPayloads } = await import("./deliver-Dhut24vc.js").then((n) => n.n);
32353
+ const { deliverOutboundPayloads } = await import("./deliver-Ds0o_rCY.js").then((n) => n.n);
32274
32354
  await deliverOutboundPayloads({
32275
32355
  cfg,
32276
32356
  channel: target.channel,
@@ -35638,6 +35718,10 @@ async function startGatewayServer(port = 18789, opts = {}) {
35638
35718
  key: "MINION_PERSONAL_AGENT_OBSERVATIONS_PATH",
35639
35719
  description: "personal-agent observations database path override"
35640
35720
  });
35721
+ if (cfgAtStart.gateway?.trajectory?.enabled === true) {
35722
+ enableTrajectoryRecording();
35723
+ log.info("trajectory recording enabled");
35724
+ }
35641
35725
  }
35642
35726
  const channelLogs = Object.fromEntries(listChannelPlugins().map((plugin) => [plugin.id, logChannels.child(plugin.id)]));
35643
35727
  const channelRuntimeEnvs = Object.fromEntries(Object.entries(channelLogs).map(([id, logger]) => [id, runtimeForLogger(logger)]));
@@ -35936,8 +36020,8 @@ async function startGatewayServer(port = 18789, opts = {}) {
35936
36020
  });
35937
36021
  if (!minimalTestGateway) cron.start().catch((err) => logCron.error(`failed to start: ${String(err)}`));
35938
36022
  if (!minimalTestGateway) (async () => {
35939
- const { recoverPendingDeliveries } = await import("./deliver-Dhut24vc.js").then((n) => n.s);
35940
- const { deliverOutboundPayloads } = await import("./deliver-Dhut24vc.js").then((n) => n.n);
36023
+ const { recoverPendingDeliveries } = await import("./deliver-Ds0o_rCY.js").then((n) => n.s);
36024
+ const { deliverOutboundPayloads } = await import("./deliver-Ds0o_rCY.js").then((n) => n.n);
35941
36025
  await recoverPendingDeliveries({
35942
36026
  deliver: deliverOutboundPayloads,
35943
36027
  log: log.child("delivery-recovery"),