@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
@@ -10,51 +10,51 @@ import { n as getEventStore, r as initEventSystem, t as emitEvent } from "./emit
10
10
  import { t as applySqlitePragmas } from "./sqlite-pragmas-C_o_lU6a.js";
11
11
  import { t as requireNodeSqlite } from "./sqlite-C3xwcWJn.js";
12
12
  import { d as setSentryTag, n as getReliabilityUptimeStartMs, r as initReliability, t as emitReliabilityEvent, u as setSentryContext } from "./reliability-L4etAGQV.js";
13
- import { n as buildWorkspaceSkillSnapshot, r as loadWorkspaceSkillEntries } from "./workspace-CSBTFAxh.js";
14
- import "./skills-DMPRReoe.js";
13
+ import { n as buildWorkspaceSkillSnapshot, r as loadWorkspaceSkillEntries } from "./workspace-D5-DoTNR.js";
14
+ import "./skills-DDhWBAii.js";
15
15
  import { l as isTestDefaultMemorySlotDisabled, n as loadPluginManifestRegistry } from "./manifest-registry-DCVfom1u.js";
16
- import { t as buildWorkspaceSkillStatus } from "./skills-status-DDzkv-Rj.js";
17
- import { E as parseDurationMs, c as applyLegacyMigrations, i as MinionSchema, n as validateConfigObjectWithPlugins, v as resolveAgentMaxConcurrent, w as sensitive, y as resolveSubagentMaxConcurrent } from "./validation-CG8Ui8_v.js";
18
- 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-TKYkFbcF.js";
19
- import { n as migrateLegacyConfig } from "./config-ClkrcdId.js";
16
+ import { t as buildWorkspaceSkillStatus } from "./skills-status-CBTT87BN.js";
17
+ import { E as parseDurationMs, c as applyLegacyMigrations, i as MinionSchema, n as validateConfigObjectWithPlugins, v as resolveAgentMaxConcurrent, w as sensitive, y as resolveSubagentMaxConcurrent } from "./validation-B-XaORq2.js";
18
+ 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-C_Q6AU5E.js";
19
+ import { n as migrateLegacyConfig } from "./config-DHYot764.js";
20
20
  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-DaLwaG9G.js";
21
21
  import { n as pickPrimaryTailnetIPv4, r as pickPrimaryTailnetIPv6 } from "./tailnet-C0DLwT7t.js";
22
- import { n as callGateway, o as loadGatewayTlsRuntime$1 } from "./call-DkT-xA-u.js";
22
+ import { n as callGateway, o as loadGatewayTlsRuntime$1 } from "./call-BrDNyQiZ.js";
23
23
  import { f as GATEWAY_CLIENT_CAPS, g as hasGatewayClientCap, h as GATEWAY_CLIENT_NAMES, i as isGatewayMessageChannel, l as normalizeMessageChannel, m as GATEWAY_CLIENT_MODES, n as isDeliverableMessageChannel, p as GATEWAY_CLIENT_IDS, r as isGatewayCliClient, s as isWebchatClient, t as INTERNAL_MESSAGE_CHANNEL } from "./message-channel-C02KGm4w.js";
24
24
  import { c as pickPrimaryLanIPv4, d as resolveGatewayListenHosts, f as resolveHostName, i as isTrustedProxyAddress, l as resolveGatewayBindHost, n as isLoopbackHost, o as normalizeHostHeader, p as rawDataToString, r as isPrivateOrLoopbackAddress, t as isLoopbackAddress, u as resolveGatewayClientIp } from "./net-C0W-QK7p.js";
25
25
  import { i as normalizeInputProvenance } from "./input-provenance-ChJN5mZj.js";
26
- import { $ as isSteppedBuildEnabled, $t as setSkillsRemoteRegistry, A as loadOpenClawPlugins, An as registerUnhandledRejectionHandler, At as buildSectionRenderContext, B as getTotalPendingReplies, Bn as formatZonedTimestamp, C as createOpenClawCodingTools, Cn as applyVerboseOverride, D as getPluginToolMeta, Dt as assembleAgentSystemPromptWithSections, E as buildDefaultToolPolicyPipelineSteps, En as isSystemEventContextChanged, F as openMessageLedger, Fn as extractImageContentFromSource, Ft as buildSystemPromptParams, Gn as stopSubagentsForRequester, Gt as normalizeSendPolicy, Ht as requestHeartbeatNow, I as patchRouting, In as normalizeMimeList, It as buildSystemPromptReport, J as setCliSessionId, Jt as primeRemoteSkillsCache, K as resolveCronStyleNow, Kt as resolveSendPolicy, L as record, Ln as resolveInputFileLimits, M as closeMessageLedger, Mn as DEFAULT_INPUT_IMAGE_MIMES, Mt as PromptSectionRegistry, N as markFailed, Nt as PROSE_GLOBAL_ROOT, Ot as getBuiltinSectionRegistry, P as markSynced, Pn as extractFileContentFromSource, Pt as _clearProseCache, Q as debugStepContinue, Qt as removeRemoteNodeInfo, R as dispatchInboundMessage, S as readConsolidationState, Sn as applyModelOverrideToSessionEntry, St as loadProviderUsageSummary, T as applyToolPolicyPipeline, Tn as enqueueSystemEvent, Un as resolveUserTimezone, W as BARE_SESSION_RESET_PROMPT, Wn as isAbortTrigger, Xt as refreshRemoteBinsForConnectedNodes, Y as runCliAgent, Yn as clearSessionQueues, Yt as recordRemoteNodeInfo, Z as debugSkipAll, Zn as resolveAgentIdentity, Zt as refreshRemoteNodeBins, _ as listForCurrentInstance, an as updatePairedNodeMetadata, ar as setCommandLaneConcurrency, b as markRecoveryAttempt, bn as buildAuthHealthSummary, cn as hashToken, cr as clearAgentRunContext, ct as spawnSubagentDirect, d as abortEmbeddedPiRun, dn as resolvePairingPaths, dr as onAgentEvent, dt as getTemplateCache, en as approveNodePairing, er as resolveBootstrapContextForRun, et as setDebugStepBroadcaster, f as getActiveEmbeddedRunCount, fn as readJsonFile, fr as registerAgentRunContext, ft as getTemplateLoadErrors, g as deleteRow, gn as registerSkillsChangeListener, h as closeInFlightTurnsStore, hn as getSkillsSnapshotVersion, ht as stopTemplateWatcher, i as listDescendantRunsForRequester, in as requestNodePairing, ir as resetAllLanes, j as claimBatch, jt as buildToolSummaryMap, k as loadMinionPlugins, l as runSubagentAnnounceFlow, ln as verifyPairingToken, lr as emitAgentEvent, lt as getLastReloadAt, m as waitForEmbeddedPiRunEnd, mn as createAsyncLock, mt as initTemplateLoader, n as countActiveDescendantRuns, nn as rejectNodePairing, nt as createOpenClawTools, on as verifyNodeToken, or as waitForActiveTasks, p as queueEmbeddedPiMessage, pn as writeJsonAtomic, pt as getTemplateUsageStats, q as getCliSessionId, qt as getRemoteSkillEligibility, r as initSubagentRegistry, rn as renamePairedNode, rr as getTotalQueueSize, rt as TOOL_REGISTRY, s as markSubagentRunTerminated, sn as generatePairingToken, sr as resolveAgentTimeoutMs, tn as listNodePairing, tr as getActiveTaskCount, tt as setSteppedBuild, u as runEmbeddedPiAgent, un as pruneExpiredPending, ur as getAgentRunContext, ut as getTemplate, v as listFromOtherInstances, wn as parseVerboseOverride, x as openInFlightTurnsStore, xt as normalizeGroupActivation, y as markInterrupted, z as createReplyDispatcher, zn as transcribeOpenAiCompatibleAudio } from "./subagent-registry-0zv9UyYz.js";
27
- import { $ as mergeDeliveryContext, C as cleanStaleLockFiles, E as evaluateSessionFreshness, F as resolveExplicitAgentSessionKey, I as resolveMainSessionKey, L as resolveMainSessionKeyFromConfig, M as resolveFreshSessionTotalTokens, N as canonicalizeMainSessionAlias, O as resolveSessionResetPolicy, P as resolveAgentMainSessionKey, Z as deliveryContextFromSession, _ as readSessionMessages, a as loadSessionStore, b as resolveSessionTranscriptCandidates, g as capArrayByJsonBytes, h as archiveSessionTranscripts, m as archiveFileOnDisk, n as parseSessionThreadInfo, t as extractDeliveryInfo, tt as normalizeSessionDeliveryFields, u as updateSessionStore, v as readSessionPreviewItemsFromTranscript, x as stripEnvelopeFromMessages, z as snapshotSessionOrigin } from "./sessions-D_b2UXud.js";
26
+ import { $ as debugStepContinue, $t as removeRemoteNodeInfo, A as loadMinionPlugins, B as createReplyDispatcher, Bn as transcribeOpenAiCompatibleAudio, C as readConsolidationState, Cn as applyModelOverrideToSessionEntry, Ct as loadProviderUsageSummary, D as buildDefaultToolPolicyPipelineSteps, Dn as isSystemEventContextChanged, E as applyToolPolicyPipeline, En as enqueueSystemEvent, F as markSynced, Fn as extractFileContentFromSource, Ft as _clearProseCache, G as BARE_SESSION_RESET_PROMPT, Gn as isAbortTrigger, I as openMessageLedger, In as extractImageContentFromSource, It as buildSystemPromptParams, J as getCliSessionId, Jt as getRemoteSkillEligibility, Kn as stopSubagentsForRequester, Kt as normalizeSendPolicy, L as patchRouting, Ln as normalizeMimeList, Lt as buildSystemPromptReport, M as claimBatch, Mt as buildToolSummaryMap, N as closeMessageLedger, Nn as DEFAULT_INPUT_IMAGE_MIMES, Nt as PromptSectionRegistry, O as getPluginToolMeta, Ot as assembleAgentSystemPromptWithSections, P as markFailed, Pt as PROSE_GLOBAL_ROOT, Q as debugSkipAll, Qn as resolveAgentIdentity, Qt as refreshRemoteNodeBins, R as record, Rn as resolveInputFileLimits, S as openInFlightTurnsStore, St as normalizeGroupActivation, Tn as parseVerboseOverride, Ut as requestHeartbeatNow, V as getTotalPendingReplies, Vn as formatZonedTimestamp, Wn as resolveUserTimezone, X as runCliAgent, Xn as clearSessionQueues, Xt as recordRemoteNodeInfo, Y as setCliSessionId, Yt as primeRemoteSkillsCache, Zt as refreshRemoteBinsForConnectedNodes, _ as deleteRow, _n as registerSkillsChangeListener, an as requestNodePairing, ar as resetAllLanes, b as markInterrupted, cn as generatePairingToken, cr as resolveAgentTimeoutMs, d as abortEmbeddedPiRun, dn as pruneExpiredPending, dr as getAgentRunContext, dt as getTemplate, en as setSkillsRemoteRegistry, et as isSteppedBuildEnabled, f as getActiveEmbeddedRunCount, fn as resolvePairingPaths, fr as onAgentEvent, ft as getTemplateCache, g as closeInFlightTurnsStore, gn as getSkillsSnapshotVersion, gt as stopTemplateWatcher, h as registerLifecycleHooks, hn as createAsyncLock, ht as initTemplateLoader, i as listDescendantRunsForRequester, in as renamePairedNode, ir as getTotalQueueSize, it as TOOL_REGISTRY, j as loadOpenClawPlugins, jn as registerUnhandledRejectionHandler, jt as buildSectionRenderContext, kt as getBuiltinSectionRegistry, l as runSubagentAnnounceFlow, ln as hashToken, lr as clearAgentRunContext, lt as spawnSubagentDirect, m as waitForEmbeddedPiRunEnd, mn as writeJsonAtomic, mt as getTemplateUsageStats, n as countActiveDescendantRuns, nn as listNodePairing, nr as getActiveTaskCount, nt as setSteppedBuild, on as updatePairedNodeMetadata, or as setCommandLaneConcurrency, p as queueEmbeddedPiMessage, pn as readJsonFile, pr as registerAgentRunContext, pt as getTemplateLoadErrors, q as resolveCronStyleNow, qt as resolveSendPolicy, r as initSubagentRegistry, rn as rejectNodePairing, rt as createOpenClawTools, s as markSubagentRunTerminated, sn as verifyNodeToken, sr as waitForActiveTasks, tn as approveNodePairing, tr as resolveBootstrapContextForRun, tt as setDebugStepBroadcaster, u as runEmbeddedPiAgent, un as verifyPairingToken, ur as emitAgentEvent, ut as getLastReloadAt, v as listForCurrentInstance, w as createOpenClawCodingTools, wn as applyVerboseOverride, x as markRecoveryAttempt, xn as buildAuthHealthSummary, y as listFromOtherInstances, z as dispatchInboundMessage } from "./subagent-registry-C_UHFYRY.js";
27
+ import { $ as mergeDeliveryContext, C as cleanStaleLockFiles, E as evaluateSessionFreshness, F as resolveExplicitAgentSessionKey, I as resolveMainSessionKey, L as resolveMainSessionKeyFromConfig, M as resolveFreshSessionTotalTokens, N as canonicalizeMainSessionAlias, O as resolveSessionResetPolicy, P as resolveAgentMainSessionKey, Z as deliveryContextFromSession, _ as readSessionMessages, a as loadSessionStore, b as resolveSessionTranscriptCandidates, g as capArrayByJsonBytes, h as archiveSessionTranscripts, m as archiveFileOnDisk, n as parseSessionThreadInfo, t as extractDeliveryInfo, tt as normalizeSessionDeliveryFields, u as updateSessionStore, v as readSessionPreviewItemsFromTranscript, x as stripEnvelopeFromMessages, z as snapshotSessionOrigin } from "./sessions-C0Qs0Flz.js";
28
28
  import { n as SILENT_REPLY_TOKEN, r as isSilentReplyText } from "./tokens-BkvS7DSy.js";
29
29
  import { d as buildChannelAccountBindings, n as listChannelPlugins, r as normalizeChannelId, t as getChannelPlugin } from "./plugins-irMKpl65.js";
30
30
  import "./logging-D43UWj1X.js";
31
31
  import { r as resolveUserDir } from "./user-directory-D27je39W.js";
32
32
  import { c as resolveStorePath, i as resolveSessionTranscriptPath, n as resolveSessionFilePath, r as resolveSessionFilePathOptions, s as resolveSessionTranscriptsDirForAgent } from "./paths-D59m1grH.js";
33
33
  import { a as stripHeartbeatToken } from "./lanes-L5j3C7cx.js";
34
- import { a as resolveOutboundTarget, o as resolveSessionDeliveryTarget } from "./resolve-route-FLi7kFo1.js";
34
+ import { a as resolveOutboundTarget, o as resolveSessionDeliveryTarget } from "./resolve-route-0arQsERr.js";
35
35
  import { n as getMachineDisplayName } from "./with-timeout-BVhDEOTB.js";
36
36
  import { c as startDiagnosticHeartbeat, d as isDiagnosticsEnabled, l as stopDiagnosticHeartbeat } from "./diagnostic-BEEvI8Zw.js";
37
- import { g as getGlobalHookRunner, v as runGlobalGatewayStopSafely } from "./reply-payloads-CikGrhVL.js";
38
- 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-CRpGlsYO.js";
37
+ import { g as getGlobalHookRunner, v as runGlobalGatewayStopSafely } from "./reply-payloads-Dk-zLmJC.js";
38
+ 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-DrFhyLnB.js";
39
39
  import { c as detectMime } from "./image-ops-QvmG4zb9.js";
40
- import { a as defineDrone, i as runDrone, t as createGatewayDroneHost } from "./host-CafVbu36.js";
41
- import { K as resolveBootstrapMaxChars, a as formatXHighModelHint, c as normalizeElevatedLevel, d as normalizeUsageDisplay, f as normalizeVerboseLevel, i as formatThinkingLevels, l as normalizeReasoningLevel, m as supportsXHighThinking, q as resolveBootstrapTotalMaxChars, s as listThinkingLevels, u as normalizeThinkLevel } from "./pi-embedded-helpers-D-m7pmXE.js";
42
- import { c as resolveSandboxRuntimeStatus, g as collectExplicitAllowlist, p as TOOL_GROUPS, v as expandToolGroups, x as resolveToolProfilePolicy, y as mergeAlsoAllowPolicy } from "./sandbox-pZvVQZ-a.js";
40
+ import { a as defineDrone, i as runDrone, t as createGatewayDroneHost } from "./host-DCfZcVR_.js";
41
+ import { K as resolveBootstrapMaxChars, a as formatXHighModelHint, c as normalizeElevatedLevel, d as normalizeUsageDisplay, f as normalizeVerboseLevel, i as formatThinkingLevels, l as normalizeReasoningLevel, m as supportsXHighThinking, q as resolveBootstrapTotalMaxChars, s as listThinkingLevels, u as normalizeThinkLevel } from "./pi-embedded-helpers-BsRnajNh.js";
42
+ import { c as resolveSandboxRuntimeStatus, g as collectExplicitAllowlist, p as TOOL_GROUPS, v as expandToolGroups, x as resolveToolProfilePolicy, y as mergeAlsoAllowPolicy } from "./sandbox-CDGF9AVA.js";
43
43
  import { a as enableTailscaleServeFunnel, i as enableTailscaleServe, n as disableTailscaleServe, r as enableTailscaleFunnel, s as getTailnetHostname, t as disableTailscaleFunnel } from "./tailscale-DztQ748s.js";
44
44
  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-CFiHbm6v.js";
45
- import { h as mergeGatewayTailscaleConfig, m as ensureGatewayStartupAuth } from "./server-context-D-VUH9Bz.js";
45
+ import { h as mergeGatewayTailscaleConfig, m as ensureGatewayStartupAuth } from "./server-context-BRKaxwJB.js";
46
46
  import { a as isErrno, n as formatErrorMessage } from "./errors-iV4-NKRR.js";
47
47
  import { i as formatPortDiagnostics, n as inspectPortUsage, t as ensurePortAvailable } from "./ports-CWP9QmS6.js";
48
48
  import { t as movePathToTrash } from "./trash-DPd6fFGH.js";
49
49
  import { a as traceGatewayEvent, n as pruneOldTraceFiles } from "./chat-trace-BMcJ2gl7.js";
50
- import { i as resolveMemoryBackendConfig, r as getMemorySearchManager } from "./memory-cli-Y_w-AsVt.js";
50
+ import { i as resolveMemoryBackendConfig, r as getMemorySearchManager } from "./memory-cli-ilkHc_D4.js";
51
51
  import { t as ToolInputError } from "./common-BHzo6lXS.js";
52
52
  import { i as isExternalHookSession, n as detectSuspiciousPatterns, r as getHookType, t as buildSafeExternalPrompt } from "./external-content-Css-cJoz.js";
53
- import { n as runWithModelFallback } from "./model-fallback-C92G-WUW.js";
53
+ import { n as runWithModelFallback } from "./model-fallback-DXR7ZbvM.js";
54
54
  import { t as fetchWithSsrFGuard } from "./fetch-guard-2x6L37KS.js";
55
- import { n as loadModelCatalog } from "./model-catalog-AiXYmm_2.js";
56
- import { a as loadCombinedSessionStoreForGateway, c as resolveGatewaySessionStoreTarget, d as orgScopeVisible, f as lookupContextTokens, i as listSessionsFromStore, l as resolveSessionModelRef, o as loadSessionEntry, r as listAgentsForGateway, s as pruneLegacyStoreKeys, t as canonicalizeSpawnedByForAgent, u as normalizeOrgIds } from "./session-utils-0BYkk3f_.js";
57
- import { a as resolveSubagentToolPolicy, d as listAgentWorkspaceDirs, i as resolveGroupToolPolicy, r as resolveEffectiveToolPolicy } from "./pi-tools.policy-Dt2kTSid.js";
55
+ import { n as loadModelCatalog } from "./model-catalog-7Ew4iFgU.js";
56
+ import { a as loadCombinedSessionStoreForGateway, c as resolveGatewaySessionStoreTarget, d as orgScopeVisible, f as lookupContextTokens, i as listSessionsFromStore, l as resolveSessionModelRef, o as loadSessionEntry, r as listAgentsForGateway, s as pruneLegacyStoreKeys, t as canonicalizeSpawnedByForAgent, u as normalizeOrgIds } from "./session-utils-DDCd8HC9.js";
57
+ import { a as resolveSubagentToolPolicy, d as listAgentWorkspaceDirs, i as resolveGroupToolPolicy, r as resolveEffectiveToolPolicy } from "./pi-tools.policy-DDJ31-0E.js";
58
58
  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-9-5NQEhL.js";
59
59
  import { c as hasNonzeroUsage, i as loadSessionUsageTimeSeries, n as loadCostUsageSummary, r as loadSessionCostSummary, s as deriveSessionTotalTokens, t as discoverAllSessions } from "./session-cost-usage-b8aNuBYW.js";
60
60
  import { n as formatTokenCount, r as formatUsd } from "./usage-format--dK3YoXf.js";
@@ -70,18 +70,18 @@ import { n as setGoogleAdcClient, t as getGoogleAdcClient } from "./hub-credenti
70
70
  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-DQ4SDf3R.js";
71
71
  import { i as parseAbsoluteTimeMs, n as resolveCronStaggerMs, r as resolveDefaultCronStaggerMs, t as normalizeCronStaggerMs } from "./stagger-BlvVswOf.js";
72
72
  import { a as summarizeRestartSentinel, n as formatDoctorNonInteractiveHint, r as formatRestartSentinelMessage, s as writeRestartSentinel, t as consumeRestartSentinel } from "./restart-sentinel-CFtgrOm4.js";
73
- import { c as loadChannelOutboundAdapter, o as normalizeReplyPayloadsForDelivery, t as deliverOutboundPayloads } from "./deliver-C40KRMzm.js";
73
+ import { c as loadChannelOutboundAdapter, o as normalizeReplyPayloadsForDelivery, t as deliverOutboundPayloads } from "./deliver-BCijF1xe.js";
74
74
  import { n as resolveMessageChannelSelection } from "./channel-selection-Bzg2Xpo4.js";
75
- import { a as resetDirectoryCache, n as ensureOutboundSessionEntry, t as resolveOutboundSessionRoute } from "./outbound-session-B9B7Vsxm.js";
75
+ import { a as resetDirectoryCache, n as ensureOutboundSessionEntry, t as resolveOutboundSessionRoute } from "./outbound-session-BCNTkSVV.js";
76
76
  import { t as normalizePollInput } from "./polls-8i6CJXI7.js";
77
- import { c as resolveAnnounceTargetFromKey, t as readLatestAssistantReply } from "./agent-step-Bf1GImWB.js";
77
+ import { c as resolveAnnounceTargetFromKey, t as readLatestAssistantReply } from "./agent-step-DnVo1ws9.js";
78
78
  import { a as runAggregation, n as executeOrchestration, r as readStatusJson, t as executePipeline } from "./orchestration-pipeline-Bi3YT3Jf.js";
79
79
  import { r as readManifest, t as completeManifest } from "./orchestration-manifest-DXWf2_x7.js";
80
- import { i as startBrowserControlServiceFromConfig, r as createBrowserControlContext, t as createBrowserRouteDispatcher } from "./dispatcher-BWcYLowQ.js";
80
+ import { i as startBrowserControlServiceFromConfig, r as createBrowserControlContext, t as createBrowserRouteDispatcher } from "./dispatcher-D46WCdTe.js";
81
81
  import { n as persistBrowserProxyFiles, t as applyBrowserProxyPaths } from "./proxy-files-DtQxHMjp.js";
82
82
  import { r as cachedJson } from "./ttl-cache-CEaNnSl4.js";
83
83
  import { i as onHeartbeatEvent, r as getLastHeartbeatEvent, t as resolveHeartbeatVisibility } from "./heartbeat-visibility-BqNH_1lC.js";
84
- import { a as initUserSubsystem, d as sleepWithAbort, i as handleHubAssignmentChanged, l as buildHistoryContextFromEntries, n as resolveChannelSenderIdentity, r as getActiveUserSubsystem, s as mapRoleToScopes, t as createReplyPrefixOptions, u as computeBackoff } from "./reply-prefix-CYbvVBOV.js";
84
+ import { a as initUserSubsystem, d as sleepWithAbort, i as handleHubAssignmentChanged, l as buildHistoryContextFromEntries, n as resolveChannelSenderIdentity, r as getActiveUserSubsystem, s as mapRoleToScopes, t as createReplyPrefixOptions, u as computeBackoff } from "./reply-prefix-D9MQ_veY.js";
85
85
  import { t as ensureMinionCliOnPath } from "./path-env-DpsCNe2h.js";
86
86
  import { n as DEFAULT_GATEWAY_HTTP_TOOL_DENY } from "./dangerous-tools-_OH_n-zu.js";
87
87
  import { n as inheritOptionFromParent } from "./command-options-Dhjl7AMa.js";
@@ -90,27 +90,27 @@ import { t as WizardCancelledError } from "./prompts-E0FayNjJ.js";
90
90
  import { t as resolveChannelDefaultAccountId } from "./helpers-HNAIOJ_3.js";
91
91
  import { t as applyPluginAutoEnable } from "./plugin-auto-enable-CEWEwQIw.js";
92
92
  import { t as buildChannelAccountSnapshot } from "./status-Dg720jp3.js";
93
- import { C as resolveAssistantAvatarUrl, S as normalizeControlUiBasePath, b as CONTROL_UI_AVATAR_PREFIX, c as handleReset, x as buildControlUiAvatarUrl } from "./onboard-helpers-DCve32jF.js";
94
- import "./onboard-helpers-7fbTU2tq.js";
93
+ import { C as resolveAssistantAvatarUrl, S as normalizeControlUiBasePath, b as CONTROL_UI_AVATAR_PREFIX, c as handleReset, x as buildControlUiAvatarUrl } from "./onboard-helpers-DP2LE5Oh.js";
94
+ import "./onboard-helpers-BKca3qU4.js";
95
95
  import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, s as loadAgentIdentityFromWorkspace, t as applyAgentConfig } from "./agents.config-DMloABxR.js";
96
96
  import { a as resolveControlUiRootSync, i as resolveControlUiRootOverrideSync, t as ensureControlUiAssetsBuilt } from "./control-ui-assets-Cx6dCwYR.js";
97
- import { a as styleHealthChannelLine, c as setHeartbeatsEnabled, l as startHeartbeatRunner, n as formatHealthChannelLines, r as getHealthSnapshot, s as runHeartbeatOnce } from "./health-BlZEOPXK.js";
97
+ import { a as styleHealthChannelLine, c as setHeartbeatsEnabled, l as startHeartbeatRunner, n as formatHealthChannelLines, r as getHealthSnapshot, s as runHeartbeatOnce } from "./health-6TTjEZoo.js";
98
98
  import { n as resolveWideAreaDiscoveryDomain, r as writeWideAreaGatewayZone } from "./widearea-dns-76BDB4BP.js";
99
99
  import { t as discoverGatewayBeacons } from "./bonjour-discovery-COG6-6UR.js";
100
- import { t as installSkill } from "./skills-install-DAphGXoj.js";
100
+ import { t as installSkill } from "./skills-install-Bo9PwVmT.js";
101
101
  import { i as shouldIncludeHook, r as resolveHookConfig, t as loadWorkspaceHookEntries } from "./workspace-B2N-dnoC.js";
102
102
  import { a as resolveNpmChannelTag, n as compareSemverStrings, p as normalizeUpdateChannel, t as checkUpdateStatus } from "./update-check-DUIvch0v.js";
103
- import { i as pickGatewaySelfPresence, r as getStatusSummary } from "./status-gWt5DmvD.js";
104
- import { a as probeGateway, i as resolveNodeCommandAllowlist, r as isNodeCommandAllowed } from "./audit-DmJGMt0j.js";
103
+ import { i as pickGatewaySelfPresence, r as getStatusSummary } from "./status-Dz_-4ATW.js";
104
+ import { a as probeGateway, i as resolveNodeCommandAllowlist, r as isNodeCommandAllowed } from "./audit-Ck6MCUxx.js";
105
105
  import { t as parsePort$1 } from "./parse-port-DA32M3gA.js";
106
- import { n as addGatewayServiceCommands } from "./daemon-cli-dauqwBcE.js";
106
+ import { n as addGatewayServiceCommands } from "./daemon-cli-D7K6zRR6.js";
107
107
  import { i as toOptionString, n as extractGatewayMiskeys, r as maybeExplainGatewayServiceStop, t as describeUnknownError } from "./shared-C-PEQv_O.js";
108
- import { n as createDefaultDeps, r as createOutboundSendDeps$1, t as createOutboundSendDeps } from "./outbound-send-deps-BmDpImVK.js";
108
+ import { n as createDefaultDeps, r as createOutboundSendDeps$1, t as createOutboundSendDeps } from "./outbound-send-deps-Dg8cSoFv.js";
109
109
  import { i as initCrypto, n as ProbeRegistry, r as SecretsManager, t as SecretStore } from "./store-CCYsWl7_.js";
110
- import { t as runOnboardingWizard } from "./onboarding-C--TfoeE.js";
111
- 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-D4wjtIOe.js";
112
- import { h as resolveGmailPullRuntimeConfig } from "./gmail-DpPYd91j.js";
113
- import { i as resolveAgentOutboundTarget, r as resolveAgentDeliveryPlan, t as agentCommand } from "./agent-6dzad4Vk.js";
110
+ import { t as runOnboardingWizard } from "./onboarding-nPyIyp8f.js";
111
+ 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-D69Af97u.js";
112
+ import { h as resolveGmailPullRuntimeConfig } from "./gmail-C1O6grHu.js";
113
+ import { i as resolveAgentOutboundTarget, r as resolveAgentDeliveryPlan, t as agentCommand } from "./agent-CZq9c4BW.js";
114
114
  import { n as validateSystemRunCommandConsistency, t as formatExecCommand } from "./system-run-command-BRxsVIll.js";
115
115
  import { n as runGatewayUpdate, t as resolveAgentSessionDirs } from "./session-dirs-B0q97NF_.js";
116
116
  import { n as setEmbedConcurrency } from "./qmd-embed-semaphore-CLBO94qU.js";
@@ -120,7 +120,7 @@ import os, { homedir } from "node:os";
120
120
  import * as path$1 from "node:path";
121
121
  import path, { dirname, join } from "node:path";
122
122
  import * as fs$3 from "node:fs";
123
- import fs, { constants, promises, readFileSync } from "node:fs";
123
+ import fs, { appendFileSync, constants, existsSync, mkdirSync, promises, readFileSync, statSync } from "node:fs";
124
124
  import { promisify } from "node:util";
125
125
  import chalk from "chalk";
126
126
  import JSON5 from "json5";
@@ -142,8 +142,8 @@ import { lookup } from "node:dns/promises";
142
142
  import chokidar from "chokidar";
143
143
  import { EventEmitter } from "node:events";
144
144
  import Database from "better-sqlite3";
145
- import { monitorEventLoopDelay } from "node:perf_hooks";
146
145
  import { SignJWT, createRemoteJWKSet, jwtVerify } from "jose";
146
+ import { monitorEventLoopDelay } from "node:perf_hooks";
147
147
  import { Cron } from "croner";
148
148
  import { DatabaseSync } from "node:sqlite";
149
149
  import { encode } from "gpt-tokenizer";
@@ -1393,177 +1393,8 @@ function scanForInterruptedOrchestrations(agentWorkspaces) {
1393
1393
  return interrupted;
1394
1394
  }
1395
1395
  //#endregion
1396
- //#region src/gateway/gateway-request-metrics.ts
1397
- /**
1398
- * Gateway request performance metrics.
1399
- *
1400
- * Records per-method handler latency at the request dispatch chokepoint and
1401
- * samples Node's event-loop delay, then emits a single aggregated
1402
- * `gateway.perf_snapshot` event per window (default 60s) into the unified
1403
- * event store — the same surface the hub reliability dashboard reads.
1404
- *
1405
- * Why this exists: the legacy `gateway.ws_slow_response` event fired per-call
1406
- * at a 50ms bar, flooding the dashboard with non-actionable noise while
1407
- * measuring *total* WS round-trip time (which is dominated by event-loop
1408
- * scheduling, not handler work). This module instead measures handler CPU
1409
- * time per method AND event-loop delay separately, so slow responses can be
1410
- * correctly attributed (heavy handler vs. a congested event loop) from
1411
- * percentile aggregates rather than guesswork.
1412
- *
1413
- * Metric points emitted (in `gateway.perf_snapshot` metadata):
1414
- * - requests — count + throughput (req/s) over the window
1415
- * - errorRate — fraction of requests that responded `ok: false`
1416
- * - latencyMs — p50 / p95 / p99 / max handler latency across all methods
1417
- * - slowestMethods — top methods by p95 latency (count, p50, p95, max, errors)
1418
- * - eventLoopDelayMs — mean / p50 / p99 / max event-loop lag over the window
1419
- *
1420
- * @module
1421
- */
1422
- const log$26 = createSubsystemLogger("gateway/metrics");
1423
- /** Cap on retained latency samples per method (reservoir) to bound memory. */
1424
- const MAX_SAMPLES_PER_METHOD = 512;
1425
- /** Default snapshot window. Matches the reliability rate-limiter granularity. */
1426
- const DEFAULT_INTERVAL_MS = 6e4;
1427
- const methodStats = /* @__PURE__ */ new Map();
1428
- let reporterTimer = null;
1429
- let eventLoopHist = null;
1430
- let windowStartMs = 0;
1431
- /**
1432
- * Record one dispatched request's handler latency and outcome.
1433
- * Called at the dispatch chokepoint. Best-effort — never throws.
1434
- */
1435
- function recordMethodLatency(method, durationMs, ok) {
1436
- if (!Number.isFinite(durationMs) || durationMs < 0) return;
1437
- let stat = methodStats.get(method);
1438
- if (!stat) {
1439
- stat = {
1440
- count: 0,
1441
- errors: 0,
1442
- samples: []
1443
- };
1444
- methodStats.set(method, stat);
1445
- }
1446
- stat.count += 1;
1447
- if (!ok) stat.errors += 1;
1448
- if (stat.samples.length < MAX_SAMPLES_PER_METHOD) stat.samples.push(durationMs);
1449
- else stat.samples[Math.floor(Math.random() * MAX_SAMPLES_PER_METHOD)] = durationMs;
1450
- }
1451
- function percentiles(samples) {
1452
- if (samples.length === 0) return {
1453
- p50: 0,
1454
- p95: 0,
1455
- p99: 0,
1456
- max: 0
1457
- };
1458
- const sorted = [...samples].sort((a, b) => a - b);
1459
- const at = (q) => sorted[Math.min(Math.floor(sorted.length * q), sorted.length - 1)];
1460
- return {
1461
- p50: Math.round(at(.5)),
1462
- p95: Math.round(at(.95)),
1463
- p99: Math.round(at(.99)),
1464
- max: Math.round(sorted[sorted.length - 1])
1465
- };
1466
- }
1467
- /** Build a snapshot from the current window without resetting state. */
1468
- function buildGatewayPerfSnapshot(windowMs, topN = 5) {
1469
- const allSamples = [];
1470
- let requests = 0;
1471
- let errors = 0;
1472
- const perMethod = [];
1473
- for (const [method, stat] of methodStats) {
1474
- requests += stat.count;
1475
- errors += stat.errors;
1476
- for (const s of stat.samples) allSamples.push(s);
1477
- const p = percentiles(stat.samples);
1478
- perMethod.push({
1479
- method,
1480
- count: stat.count,
1481
- errors: stat.errors,
1482
- p50: p.p50,
1483
- p95: p.p95,
1484
- max: p.max
1485
- });
1486
- }
1487
- perMethod.sort((a, b) => b.p95 - a.p95 || b.max - a.max);
1488
- const windowSec = windowMs > 0 ? windowMs / 1e3 : 1;
1489
- const el = eventLoopHist;
1490
- const elMs = (ns) => Math.round(ns / 1e6 * 100) / 100;
1491
- return {
1492
- windowMs,
1493
- requests,
1494
- throughputPerSec: Math.round(requests / windowSec * 100) / 100,
1495
- errorRate: requests > 0 ? Math.round(errors / requests * 1e3) / 1e3 : 0,
1496
- latencyMs: percentiles(allSamples),
1497
- slowestMethods: perMethod.slice(0, topN),
1498
- eventLoopDelayMs: el ? {
1499
- mean: elMs(el.mean),
1500
- p50: elMs(el.percentile(50)),
1501
- p99: elMs(el.percentile(99)),
1502
- max: elMs(el.max)
1503
- } : {
1504
- mean: 0,
1505
- p50: 0,
1506
- p99: 0,
1507
- max: 0
1508
- }
1509
- };
1510
- }
1511
- function emitSnapshot(windowMs) {
1512
- const snap = buildGatewayPerfSnapshot(windowMs);
1513
- if (snap.requests === 0 && snap.eventLoopDelayMs.max < 100) return;
1514
- const { latencyMs: lat, eventLoopDelayMs: el } = snap;
1515
- emitEvent({
1516
- category: "gateway",
1517
- severity: "info",
1518
- event: "gateway.perf_snapshot",
1519
- 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`,
1520
- metadata: { ...snap },
1521
- timestamp: Date.now()
1522
- });
1523
- }
1524
- /**
1525
- * Start the periodic metrics reporter and event-loop delay monitor.
1526
- * Idempotent — a second call is a no-op until {@link stopGatewayRequestMetrics}.
1527
- * Returns a stop function.
1528
- */
1529
- function startGatewayRequestMetrics(opts) {
1530
- if (reporterTimer) return stopGatewayRequestMetrics;
1531
- const intervalMs = opts?.intervalMs ?? DEFAULT_INTERVAL_MS;
1532
- try {
1533
- eventLoopHist = monitorEventLoopDelay({ resolution: 20 });
1534
- eventLoopHist.enable();
1535
- } catch (err) {
1536
- log$26.debug(`event-loop delay monitor unavailable: ${err instanceof Error ? err.message : String(err)}`);
1537
- eventLoopHist = null;
1538
- }
1539
- windowStartMs = Date.now();
1540
- reporterTimer = setInterval(() => {
1541
- const now = Date.now();
1542
- try {
1543
- emitSnapshot(now - windowStartMs);
1544
- } catch (err) {
1545
- log$26.debug(`perf snapshot emit failed: ${err instanceof Error ? err.message : String(err)}`);
1546
- }
1547
- methodStats.clear();
1548
- eventLoopHist?.reset();
1549
- windowStartMs = now;
1550
- }, intervalMs);
1551
- reporterTimer.unref?.();
1552
- return stopGatewayRequestMetrics;
1553
- }
1554
- /** Stop the reporter and clear accumulated state. */
1555
- function stopGatewayRequestMetrics() {
1556
- if (reporterTimer) {
1557
- clearInterval(reporterTimer);
1558
- reporterTimer = null;
1559
- }
1560
- eventLoopHist?.disable();
1561
- eventLoopHist = null;
1562
- methodStats.clear();
1563
- }
1564
- //#endregion
1565
1396
  //#region src/infra/exec-approval-forwarder.ts
1566
- const log$25 = createSubsystemLogger("gateway/exec-approvals");
1397
+ const log$26 = createSubsystemLogger("gateway/exec-approvals");
1567
1398
  const DEFAULT_MODE = "session";
1568
1399
  function normalizeMode(mode) {
1569
1400
  return mode ?? DEFAULT_MODE;
@@ -1681,7 +1512,7 @@ async function deliverToTargets(params) {
1681
1512
  payloads: [{ text: params.text }]
1682
1513
  });
1683
1514
  } catch (err) {
1684
- log$25.error(`exec approvals: failed to deliver to ${channel}:${target.to}: ${String(err)}`);
1515
+ log$26.error(`exec approvals: failed to deliver to ${channel}:${target.to}: ${String(err)}`);
1685
1516
  }
1686
1517
  });
1687
1518
  await Promise.allSettled(deliveries);
@@ -1842,12 +1673,12 @@ function stopLedgerFlusher() {
1842
1673
  }
1843
1674
  //#endregion
1844
1675
  //#region src/infra/message-ledger-hooks.ts
1845
- const PLUGIN_ID$2 = "minion:message-ledger";
1676
+ const PLUGIN_ID$3 = "minion:message-ledger";
1846
1677
  const recentInbound = /* @__PURE__ */ new Map();
1847
1678
  const keyFor = (channel, accountId, chatId) => `${channel}|${accountId ?? ""}|${chatId ?? ""}`;
1848
1679
  function registerMessageLedgerHooks(registry, dbPath, flusher) {
1849
1680
  registry.typedHooks.push({
1850
- pluginId: PLUGIN_ID$2,
1681
+ pluginId: PLUGIN_ID$3,
1851
1682
  hookName: "gateway_start",
1852
1683
  handler: () => {
1853
1684
  openMessageLedger(dbPath);
@@ -1855,7 +1686,7 @@ function registerMessageLedgerHooks(registry, dbPath, flusher) {
1855
1686
  },
1856
1687
  source: "internal"
1857
1688
  }, {
1858
- pluginId: PLUGIN_ID$2,
1689
+ pluginId: PLUGIN_ID$3,
1859
1690
  hookName: "gateway_stop",
1860
1691
  handler: () => {
1861
1692
  stopLedgerFlusher();
@@ -1863,7 +1694,7 @@ function registerMessageLedgerHooks(registry, dbPath, flusher) {
1863
1694
  },
1864
1695
  source: "internal"
1865
1696
  }, {
1866
- pluginId: PLUGIN_ID$2,
1697
+ pluginId: PLUGIN_ID$3,
1867
1698
  hookName: "message_inbound",
1868
1699
  handler: (event) => {
1869
1700
  const row = record({
@@ -1888,7 +1719,7 @@ function registerMessageLedgerHooks(registry, dbPath, flusher) {
1888
1719
  },
1889
1720
  source: "internal"
1890
1721
  }, {
1891
- pluginId: PLUGIN_ID$2,
1722
+ pluginId: PLUGIN_ID$3,
1892
1723
  hookName: "message_received",
1893
1724
  handler: (_event, ctx) => {
1894
1725
  if (!ctx.sessionKey) return;
@@ -1904,7 +1735,7 @@ function registerMessageLedgerHooks(registry, dbPath, flusher) {
1904
1735
  },
1905
1736
  source: "internal"
1906
1737
  }, {
1907
- pluginId: PLUGIN_ID$2,
1738
+ pluginId: PLUGIN_ID$3,
1908
1739
  hookName: "message_sent",
1909
1740
  handler: (event, ctx) => {
1910
1741
  record({
@@ -2342,24 +2173,24 @@ function ensureWorkspaceSafely(userId) {
2342
2173
  ensurePersonalAgentWorkspace(userId);
2343
2174
  } catch {}
2344
2175
  }
2345
- const PLUGIN_ID$1 = "minion:personal-agent-observations";
2176
+ const PLUGIN_ID$2 = "minion:personal-agent-observations";
2346
2177
  function registerPersonalAgentObservationHooks(registry, dbPath) {
2347
2178
  registry.typedHooks.push({
2348
- pluginId: PLUGIN_ID$1,
2179
+ pluginId: PLUGIN_ID$2,
2349
2180
  hookName: "gateway_start",
2350
2181
  handler: () => {
2351
2182
  openObservationStore(dbPath);
2352
2183
  },
2353
2184
  source: "internal"
2354
2185
  }, {
2355
- pluginId: PLUGIN_ID$1,
2186
+ pluginId: PLUGIN_ID$2,
2356
2187
  hookName: "gateway_stop",
2357
2188
  handler: () => {
2358
2189
  closeObservationStore();
2359
2190
  },
2360
2191
  source: "internal"
2361
2192
  }, {
2362
- pluginId: PLUGIN_ID$1,
2193
+ pluginId: PLUGIN_ID$2,
2363
2194
  hookName: "message_inbound",
2364
2195
  handler: (event) => {
2365
2196
  if (event.isGroup) return;
@@ -2382,7 +2213,7 @@ function registerPersonalAgentObservationHooks(registry, dbPath) {
2382
2213
  },
2383
2214
  source: "internal"
2384
2215
  }, {
2385
- pluginId: PLUGIN_ID$1,
2216
+ pluginId: PLUGIN_ID$2,
2386
2217
  hookName: "message_received",
2387
2218
  handler: (event, ctx) => {
2388
2219
  const channel = ctx.channelId;
@@ -2399,7 +2230,7 @@ function registerPersonalAgentObservationHooks(registry, dbPath) {
2399
2230
  },
2400
2231
  source: "internal"
2401
2232
  }, {
2402
- pluginId: PLUGIN_ID$1,
2233
+ pluginId: PLUGIN_ID$2,
2403
2234
  hookName: "message_sent",
2404
2235
  handler: (event, ctx) => {
2405
2236
  const channel = ctx.channelId;
@@ -3141,6 +2972,86 @@ function asStringArray(v) {
3141
2972
  return v.filter((x) => typeof x === "string");
3142
2973
  }
3143
2974
  //#endregion
2975
+ //#region src/trajectory/writer.ts
2976
+ const DEFAULT_MAX_BYTES$2 = 5 * 1024 * 1024;
2977
+ var TrajectoryWriter = class {
2978
+ constructor(file, opts) {
2979
+ this.file = file;
2980
+ this.bytes = 0;
2981
+ this.dropped = 0;
2982
+ this.maxBytes = opts?.maxBytes ?? DEFAULT_MAX_BYTES$2;
2983
+ mkdirSync(dirname(file), { recursive: true });
2984
+ if (existsSync(file)) this.bytes = statSync(file).size;
2985
+ }
2986
+ append(event) {
2987
+ if (this.bytes >= this.maxBytes) {
2988
+ this.dropped += 1;
2989
+ return;
2990
+ }
2991
+ const line = `${JSON.stringify(event)}\n`;
2992
+ try {
2993
+ appendFileSync(this.file, line);
2994
+ this.bytes += Buffer.byteLength(line);
2995
+ } catch {
2996
+ this.dropped += 1;
2997
+ }
2998
+ }
2999
+ };
3000
+ //#endregion
3001
+ //#region src/trajectory/recorder.ts
3002
+ const PLUGIN_ID$1 = "trajectory-recorder";
3003
+ const writers = /* @__PURE__ */ new Map();
3004
+ const MAX_LIVE_SESSIONS = 500;
3005
+ function writerFor(sessionId, agentId) {
3006
+ let w = writers.get(sessionId);
3007
+ if (!w) {
3008
+ if (writers.size >= MAX_LIVE_SESSIONS) {
3009
+ const oldest = writers.keys().next().value;
3010
+ if (oldest !== void 0) writers.delete(oldest);
3011
+ }
3012
+ w = new TrajectoryWriter(join(resolveSessionTranscriptsDirForAgent(agentId), `trajectory-${sessionId}.jsonl`));
3013
+ writers.set(sessionId, w);
3014
+ }
3015
+ return w;
3016
+ }
3017
+ /** Idempotent: enable per-session JSONL trajectory recording via lifecycle hooks. */
3018
+ function enableTrajectoryRecording() {
3019
+ registerLifecycleHooks(PLUGIN_ID$1, {
3020
+ onSessionStart: async (s) => {
3021
+ writerFor(s.sessionId, s.agentId).append({
3022
+ kind: "session_start",
3023
+ sessionId: s.sessionId,
3024
+ agentId: s.agentId,
3025
+ channelType: s.channelType,
3026
+ timestamp: s.startedAt
3027
+ });
3028
+ },
3029
+ postLlmCall: async (ctx, result) => {
3030
+ writerFor(ctx.sessionId, ctx.agentId).append({
3031
+ kind: "llm_call",
3032
+ turn: ctx.turn,
3033
+ model: result.model,
3034
+ inputTokens: result.inputTokens,
3035
+ outputTokens: result.outputTokens,
3036
+ durationMs: result.durationMs,
3037
+ hasToolCalls: result.hasToolCalls,
3038
+ error: result.error,
3039
+ timestamp: ctx.timestamp
3040
+ });
3041
+ },
3042
+ onSessionEnd: async (s, summary) => {
3043
+ writerFor(s.sessionId, s.agentId).append({
3044
+ kind: "session_end",
3045
+ turns: summary.turns,
3046
+ durationMs: summary.durationMs,
3047
+ endReason: summary.endReason,
3048
+ timestamp: Date.now()
3049
+ });
3050
+ writers.delete(s.sessionId);
3051
+ }
3052
+ });
3053
+ }
3054
+ //#endregion
3144
3055
  //#region src/gateway/auth/auth-jwt.ts
3145
3056
  /**
3146
3057
  * JWT validation module for the multi-tenant gateway.
@@ -3246,7 +3157,7 @@ async function validateGatewayJwt(token, config) {
3246
3157
  }
3247
3158
  //#endregion
3248
3159
  //#region src/gateway/channel-health-monitor.ts
3249
- const log$24 = createSubsystemLogger("gateway/health-monitor");
3160
+ const log$25 = createSubsystemLogger("gateway/health-monitor");
3250
3161
  const DEFAULT_CHECK_INTERVAL_MS$1 = 5 * 6e4;
3251
3162
  const DEFAULT_STARTUP_GRACE_MS = 6e4;
3252
3163
  const DEFAULT_COOLDOWN_CYCLES = 2;
@@ -3295,11 +3206,11 @@ function startChannelHealthMonitor(deps) {
3295
3206
  if (now - record.lastRestartAt <= cooldownMs) continue;
3296
3207
  pruneOldRestarts(record, now);
3297
3208
  if (record.restartsThisHour.length >= maxRestartsPerHour) {
3298
- log$24.warn?.(`[${channelId}:${accountId}] health-monitor: hit ${maxRestartsPerHour} restarts/hour limit, skipping`);
3209
+ log$25.warn?.(`[${channelId}:${accountId}] health-monitor: hit ${maxRestartsPerHour} restarts/hour limit, skipping`);
3299
3210
  continue;
3300
3211
  }
3301
3212
  const reason = !status.running ? status.reconnectAttempts && status.reconnectAttempts >= 10 ? "gave-up" : "stopped" : "stuck";
3302
- log$24.info?.(`[${channelId}:${accountId}] health-monitor: restarting (reason: ${reason})`);
3213
+ log$25.info?.(`[${channelId}:${accountId}] health-monitor: restarting (reason: ${reason})`);
3303
3214
  try {
3304
3215
  if (status.running) await channelManager.stopChannel(channelId, accountId);
3305
3216
  channelManager.resetRestartAttempts(channelId, accountId);
@@ -3308,7 +3219,7 @@ function startChannelHealthMonitor(deps) {
3308
3219
  record.restartsThisHour.push({ at: now });
3309
3220
  restartRecords.set(key, record);
3310
3221
  } catch (err) {
3311
- log$24.error?.(`[${channelId}:${accountId}] health-monitor: restart failed: ${String(err)}`);
3222
+ log$25.error?.(`[${channelId}:${accountId}] health-monitor: restart failed: ${String(err)}`);
3312
3223
  }
3313
3224
  }
3314
3225
  }
@@ -3328,7 +3239,7 @@ function startChannelHealthMonitor(deps) {
3328
3239
  abortSignal?.addEventListener("abort", stop, { once: true });
3329
3240
  timer = setInterval(() => void runCheck(), checkIntervalMs);
3330
3241
  if (typeof timer === "object" && "unref" in timer) timer.unref();
3331
- log$24.info?.(`started (interval: ${Math.round(checkIntervalMs / 1e3)}s, grace: ${Math.round(startupGraceMs / 1e3)}s)`);
3242
+ log$25.info?.(`started (interval: ${Math.round(checkIntervalMs / 1e3)}s, grace: ${Math.round(startupGraceMs / 1e3)}s)`);
3332
3243
  }
3333
3244
  return { stop };
3334
3245
  }
@@ -3822,7 +3733,7 @@ var ExecApprovalManager = class {
3822
3733
  * Opens the SQLite database, applies WAL pragmas, and runs the
3823
3734
  * 004_free_tier_users migration. Returns the DatabaseSync instance.
3824
3735
  */
3825
- const log$23 = createSubsystemLogger("free-tier/db");
3736
+ const log$24 = createSubsystemLogger("free-tier/db");
3826
3737
  const MIGRATION_SQL_PATH = join(dirname(fileURLToPath(import.meta.url)), "../../db/migrations/004_free_tier_users.sql");
3827
3738
  function openFreeTierDb(dbPath) {
3828
3739
  const { DatabaseSync } = requireNodeSqlite();
@@ -3831,9 +3742,9 @@ function openFreeTierDb(dbPath) {
3831
3742
  try {
3832
3743
  const sql = readFileSync(MIGRATION_SQL_PATH, "utf8");
3833
3744
  db.exec(sql);
3834
- log$23.info("free-tier DB migration applied", { dbPath });
3745
+ log$24.info("free-tier DB migration applied", { dbPath });
3835
3746
  } catch (err) {
3836
- log$23.error("free-tier DB migration failed", {
3747
+ log$24.error("free-tier DB migration failed", {
3837
3748
  dbPath,
3838
3749
  error: String(err)
3839
3750
  });
@@ -3972,13 +3883,13 @@ var UserRepository = class {
3972
3883
  };
3973
3884
  //#endregion
3974
3885
  //#region src/gateway/free-tier/email.ts
3975
- const log$22 = createSubsystemLogger("free-tier/email");
3886
+ const log$23 = createSubsystemLogger("free-tier/email");
3976
3887
  const RESEND_API = "https://api.resend.com/emails";
3977
3888
  const FROM = "OpenClaw <noreply@minion.ai>";
3978
3889
  async function send$1(to, subject, html) {
3979
3890
  const apiKey = process.env["RESEND_API_KEY"];
3980
3891
  if (!apiKey) {
3981
- log$22.warn("RESEND_API_KEY not set — email not sent", {
3892
+ log$23.warn("RESEND_API_KEY not set — email not sent", {
3982
3893
  to,
3983
3894
  subject
3984
3895
  });
@@ -3999,7 +3910,7 @@ async function send$1(to, subject, html) {
3999
3910
  });
4000
3911
  if (!res.ok) {
4001
3912
  const text = await res.text().catch(() => "");
4002
- log$22.error("Resend API error", {
3913
+ log$23.error("Resend API error", {
4003
3914
  status: res.status,
4004
3915
  body: text
4005
3916
  });
@@ -4012,7 +3923,7 @@ async function sendVerificationEmail(email, token, baseUrl) {
4012
3923
  }
4013
3924
  //#endregion
4014
3925
  //#region src/gateway/free-tier/auth-http.ts
4015
- const log$21 = createSubsystemLogger("free-tier/auth");
3926
+ const log$22 = createSubsystemLogger("free-tier/auth");
4016
3927
  function json$1(res, status, body) {
4017
3928
  res.statusCode = status;
4018
3929
  res.setHeader("Content-Type", "application/json; charset=utf-8");
@@ -4074,7 +3985,7 @@ async function handleSignup(req, res, users) {
4074
3985
  passwordHash
4075
3986
  });
4076
3987
  await sendVerificationEmail(email, verifyToken, process.env["HUB_BASE_URL"] ?? "https://hub.minion.ai").catch((e) => {
4077
- log$21.error("failed to send verification email", {
3988
+ log$22.error("failed to send verification email", {
4078
3989
  userId: user.id,
4079
3990
  error: String(e)
4080
3991
  });
@@ -4381,6 +4292,175 @@ function createFreeTierApiHandler(db) {
4381
4292
  };
4382
4293
  }
4383
4294
  //#endregion
4295
+ //#region src/gateway/gateway-request-metrics.ts
4296
+ /**
4297
+ * Gateway request performance metrics.
4298
+ *
4299
+ * Records per-method handler latency at the request dispatch chokepoint and
4300
+ * samples Node's event-loop delay, then emits a single aggregated
4301
+ * `gateway.perf_snapshot` event per window (default 60s) into the unified
4302
+ * event store — the same surface the hub reliability dashboard reads.
4303
+ *
4304
+ * Why this exists: the legacy `gateway.ws_slow_response` event fired per-call
4305
+ * at a 50ms bar, flooding the dashboard with non-actionable noise while
4306
+ * measuring *total* WS round-trip time (which is dominated by event-loop
4307
+ * scheduling, not handler work). This module instead measures handler CPU
4308
+ * time per method AND event-loop delay separately, so slow responses can be
4309
+ * correctly attributed (heavy handler vs. a congested event loop) from
4310
+ * percentile aggregates rather than guesswork.
4311
+ *
4312
+ * Metric points emitted (in `gateway.perf_snapshot` metadata):
4313
+ * - requests — count + throughput (req/s) over the window
4314
+ * - errorRate — fraction of requests that responded `ok: false`
4315
+ * - latencyMs — p50 / p95 / p99 / max handler latency across all methods
4316
+ * - slowestMethods — top methods by p95 latency (count, p50, p95, max, errors)
4317
+ * - eventLoopDelayMs — mean / p50 / p99 / max event-loop lag over the window
4318
+ *
4319
+ * @module
4320
+ */
4321
+ const log$21 = createSubsystemLogger("gateway/metrics");
4322
+ /** Cap on retained latency samples per method (reservoir) to bound memory. */
4323
+ const MAX_SAMPLES_PER_METHOD = 512;
4324
+ /** Default snapshot window. Matches the reliability rate-limiter granularity. */
4325
+ const DEFAULT_INTERVAL_MS = 6e4;
4326
+ const methodStats = /* @__PURE__ */ new Map();
4327
+ let reporterTimer = null;
4328
+ let eventLoopHist = null;
4329
+ let windowStartMs = 0;
4330
+ /**
4331
+ * Record one dispatched request's handler latency and outcome.
4332
+ * Called at the dispatch chokepoint. Best-effort — never throws.
4333
+ */
4334
+ function recordMethodLatency(method, durationMs, ok) {
4335
+ if (!Number.isFinite(durationMs) || durationMs < 0) return;
4336
+ let stat = methodStats.get(method);
4337
+ if (!stat) {
4338
+ stat = {
4339
+ count: 0,
4340
+ errors: 0,
4341
+ samples: []
4342
+ };
4343
+ methodStats.set(method, stat);
4344
+ }
4345
+ stat.count += 1;
4346
+ if (!ok) stat.errors += 1;
4347
+ if (stat.samples.length < MAX_SAMPLES_PER_METHOD) stat.samples.push(durationMs);
4348
+ else stat.samples[Math.floor(Math.random() * MAX_SAMPLES_PER_METHOD)] = durationMs;
4349
+ }
4350
+ function percentiles(samples) {
4351
+ if (samples.length === 0) return {
4352
+ p50: 0,
4353
+ p95: 0,
4354
+ p99: 0,
4355
+ max: 0
4356
+ };
4357
+ const sorted = [...samples].sort((a, b) => a - b);
4358
+ const at = (q) => sorted[Math.min(Math.floor(sorted.length * q), sorted.length - 1)];
4359
+ return {
4360
+ p50: Math.round(at(.5)),
4361
+ p95: Math.round(at(.95)),
4362
+ p99: Math.round(at(.99)),
4363
+ max: Math.round(sorted[sorted.length - 1])
4364
+ };
4365
+ }
4366
+ /** Build a snapshot from the current window without resetting state. */
4367
+ function buildGatewayPerfSnapshot(windowMs, topN = 5) {
4368
+ const allSamples = [];
4369
+ let requests = 0;
4370
+ let errors = 0;
4371
+ const perMethod = [];
4372
+ for (const [method, stat] of methodStats) {
4373
+ requests += stat.count;
4374
+ errors += stat.errors;
4375
+ for (const s of stat.samples) allSamples.push(s);
4376
+ const p = percentiles(stat.samples);
4377
+ perMethod.push({
4378
+ method,
4379
+ count: stat.count,
4380
+ errors: stat.errors,
4381
+ p50: p.p50,
4382
+ p95: p.p95,
4383
+ max: p.max
4384
+ });
4385
+ }
4386
+ perMethod.sort((a, b) => b.p95 - a.p95 || b.max - a.max);
4387
+ const windowSec = windowMs > 0 ? windowMs / 1e3 : 1;
4388
+ const el = eventLoopHist;
4389
+ const elMs = (ns) => Math.round(ns / 1e6 * 100) / 100;
4390
+ return {
4391
+ windowMs,
4392
+ requests,
4393
+ throughputPerSec: Math.round(requests / windowSec * 100) / 100,
4394
+ errorRate: requests > 0 ? Math.round(errors / requests * 1e3) / 1e3 : 0,
4395
+ latencyMs: percentiles(allSamples),
4396
+ slowestMethods: perMethod.slice(0, topN),
4397
+ eventLoopDelayMs: el ? {
4398
+ mean: elMs(el.mean),
4399
+ p50: elMs(el.percentile(50)),
4400
+ p99: elMs(el.percentile(99)),
4401
+ max: elMs(el.max)
4402
+ } : {
4403
+ mean: 0,
4404
+ p50: 0,
4405
+ p99: 0,
4406
+ max: 0
4407
+ }
4408
+ };
4409
+ }
4410
+ function emitSnapshot(windowMs) {
4411
+ const snap = buildGatewayPerfSnapshot(windowMs);
4412
+ if (snap.requests === 0 && snap.eventLoopDelayMs.max < 100) return;
4413
+ const { latencyMs: lat, eventLoopDelayMs: el } = snap;
4414
+ emitEvent({
4415
+ category: "gateway",
4416
+ severity: "info",
4417
+ event: "gateway.perf_snapshot",
4418
+ 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`,
4419
+ metadata: { ...snap },
4420
+ timestamp: Date.now()
4421
+ });
4422
+ }
4423
+ /**
4424
+ * Start the periodic metrics reporter and event-loop delay monitor.
4425
+ * Idempotent — a second call is a no-op until {@link stopGatewayRequestMetrics}.
4426
+ * Returns a stop function.
4427
+ */
4428
+ function startGatewayRequestMetrics(opts) {
4429
+ if (reporterTimer) return stopGatewayRequestMetrics;
4430
+ const intervalMs = opts?.intervalMs ?? DEFAULT_INTERVAL_MS;
4431
+ try {
4432
+ eventLoopHist = monitorEventLoopDelay({ resolution: 20 });
4433
+ eventLoopHist.enable();
4434
+ } catch (err) {
4435
+ log$21.debug(`event-loop delay monitor unavailable: ${err instanceof Error ? err.message : String(err)}`);
4436
+ eventLoopHist = null;
4437
+ }
4438
+ windowStartMs = Date.now();
4439
+ reporterTimer = setInterval(() => {
4440
+ const now = Date.now();
4441
+ try {
4442
+ emitSnapshot(now - windowStartMs);
4443
+ } catch (err) {
4444
+ log$21.debug(`perf snapshot emit failed: ${err instanceof Error ? err.message : String(err)}`);
4445
+ }
4446
+ methodStats.clear();
4447
+ eventLoopHist?.reset();
4448
+ windowStartMs = now;
4449
+ }, intervalMs);
4450
+ reporterTimer.unref?.();
4451
+ return stopGatewayRequestMetrics;
4452
+ }
4453
+ /** Stop the reporter and clear accumulated state. */
4454
+ function stopGatewayRequestMetrics() {
4455
+ if (reporterTimer) {
4456
+ clearInterval(reporterTimer);
4457
+ reporterTimer = null;
4458
+ }
4459
+ eventLoopHist?.disable();
4460
+ eventLoopHist = null;
4461
+ methodStats.clear();
4462
+ }
4463
+ //#endregion
4384
4464
  //#region src/gateway/http-utils.ts
4385
4465
  function getHeader(req, name) {
4386
4466
  const raw = req.headers[name.toLowerCase()];
@@ -18899,7 +18979,7 @@ const nodeHandlers = {
18899
18979
  const p = params;
18900
18980
  const payloadJSON = typeof p.payloadJSON === "string" ? p.payloadJSON : p.payload !== void 0 ? JSON.stringify(p.payload) : null;
18901
18981
  await respondUnavailableOnThrow(respond, async () => {
18902
- const { handleNodeEvent } = await import("./server-node-events-BqG45BMs.js");
18982
+ const { handleNodeEvent } = await import("./server-node-events-D90DAPI1.js");
18903
18983
  const nodeId = client?.connect?.device?.id ?? client?.connect?.client?.id ?? "node";
18904
18984
  const nodeConnId = client?.connId;
18905
18985
  await handleNodeEvent({
@@ -26406,7 +26486,7 @@ function normalizeAgentPayload(payload) {
26406
26486
  async function startBrowserControlServerIfEnabled() {
26407
26487
  if (isTruthyEnvValue(process.env.MINION_SKIP_BROWSER_CONTROL_SERVER)) return null;
26408
26488
  const override = process.env.MINION_BROWSER_CONTROL_MODULE?.trim();
26409
- const mod = override ? await import(override) : await import("./dispatcher-BWcYLowQ.js").then((n) => n.n);
26489
+ const mod = override ? await import(override) : await import("./dispatcher-D46WCdTe.js").then((n) => n.n);
26410
26490
  const start = typeof mod.startBrowserControlServiceFromConfig === "function" ? mod.startBrowserControlServiceFromConfig : mod.startBrowserControlServerFromConfig;
26411
26491
  const stop = typeof mod.stopBrowserControlService === "function" ? mod.stopBrowserControlService : mod.stopBrowserControlServer;
26412
26492
  if (!start) return null;
@@ -32265,7 +32345,7 @@ async function deliverFlowReply(sessionKey, reply) {
32265
32345
  }
32266
32346
  try {
32267
32347
  const cfg = loadConfig();
32268
- const { deliverOutboundPayloads } = await import("./deliver-C40KRMzm.js").then((n) => n.n);
32348
+ const { deliverOutboundPayloads } = await import("./deliver-BCijF1xe.js").then((n) => n.n);
32269
32349
  await deliverOutboundPayloads({
32270
32350
  cfg,
32271
32351
  channel: target.channel,
@@ -33948,7 +34028,7 @@ function attachGatewayWsMessageHandler(params) {
33948
34028
  mtUserRole = matchedSvc.role;
33949
34029
  mtOrgId = "service";
33950
34030
  mtAssignedAgentIds = matchedSvc.agentIds;
33951
- const { mapRoleToScopes: mapRole } = await import("./reply-prefix-CYbvVBOV.js").then((n) => n.c);
34031
+ const { mapRoleToScopes: mapRole } = await import("./reply-prefix-D9MQ_veY.js").then((n) => n.c);
33952
34032
  scopes = mapRole(matchedSvc.role);
33953
34033
  connectParams.scopes = scopes;
33954
34034
  authOk = true;
@@ -33989,7 +34069,7 @@ function attachGatewayWsMessageHandler(params) {
33989
34069
  scopes = jwtResult.scopes;
33990
34070
  connectParams.scopes = scopes;
33991
34071
  if (jwtResult.jti) {
33992
- const { getActiveUserSubsystem } = await import("./reply-prefix-CYbvVBOV.js").then((n) => n.o);
34072
+ const { getActiveUserSubsystem } = await import("./reply-prefix-D9MQ_veY.js").then((n) => n.o);
33993
34073
  if (getActiveUserSubsystem()?.tokenRevocationStore.isRevoked(jwtResult.jti)) {
33994
34074
  markHandshakeFailure("token-revoked", {
33995
34075
  userId: mtUserId,
@@ -34037,7 +34117,7 @@ function attachGatewayWsMessageHandler(params) {
34037
34117
  return;
34038
34118
  }
34039
34119
  if (mtUserId) {
34040
- const { provisionOnConnect } = await import("./reply-prefix-CYbvVBOV.js").then((n) => n.o);
34120
+ const { provisionOnConnect } = await import("./reply-prefix-D9MQ_veY.js").then((n) => n.o);
34041
34121
  const { resolveStateDir } = await import("./paths-aEg9UgoF.js").then((n) => n.i);
34042
34122
  provisionOnConnect({
34043
34123
  stateDir: resolveStateDir(process.env),
@@ -35633,6 +35713,10 @@ async function startGatewayServer(port = 18789, opts = {}) {
35633
35713
  key: "MINION_PERSONAL_AGENT_OBSERVATIONS_PATH",
35634
35714
  description: "personal-agent observations database path override"
35635
35715
  });
35716
+ if (cfgAtStart.gateway?.trajectory?.enabled === true) {
35717
+ enableTrajectoryRecording();
35718
+ log.info("trajectory recording enabled");
35719
+ }
35636
35720
  }
35637
35721
  const channelLogs = Object.fromEntries(listChannelPlugins().map((plugin) => [plugin.id, logChannels.child(plugin.id)]));
35638
35722
  const channelRuntimeEnvs = Object.fromEntries(Object.entries(channelLogs).map(([id, logger]) => [id, runtimeForLogger(logger)]));
@@ -35931,8 +36015,8 @@ async function startGatewayServer(port = 18789, opts = {}) {
35931
36015
  });
35932
36016
  if (!minimalTestGateway) cron.start().catch((err) => logCron.error(`failed to start: ${String(err)}`));
35933
36017
  if (!minimalTestGateway) (async () => {
35934
- const { recoverPendingDeliveries } = await import("./deliver-C40KRMzm.js").then((n) => n.s);
35935
- const { deliverOutboundPayloads } = await import("./deliver-C40KRMzm.js").then((n) => n.n);
36018
+ const { recoverPendingDeliveries } = await import("./deliver-BCijF1xe.js").then((n) => n.s);
36019
+ const { deliverOutboundPayloads } = await import("./deliver-BCijF1xe.js").then((n) => n.n);
35936
36020
  await recoverPendingDeliveries({
35937
36021
  deliver: deliverOutboundPayloads,
35938
36022
  log: log.child("delivery-recovery"),