remoteclaw 0.1.0-next.2abd2fa → 0.1.0-next.2e9a6cd

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 (1052) hide show
  1. package/README.md +9 -7
  2. package/dist/accounts-A8jZK_v9.js +272 -0
  3. package/dist/accounts-BegPt5VR.js +36 -0
  4. package/dist/accounts-BmiimLpP.js +47 -0
  5. package/dist/accounts-Bomfgw0M.js +32 -0
  6. package/dist/accounts-Bpk-loA6.js +47 -0
  7. package/dist/accounts-DAdUdbPk.js +36 -0
  8. package/dist/accounts-WYyfAiie.js +270 -0
  9. package/dist/ack-reactions-CMDRj7fJ.js +446 -0
  10. package/dist/ack-reactions-D7VScSny.js +446 -0
  11. package/dist/acp-cli-BpMS0SsZ.js +1323 -0
  12. package/dist/acp-cli-DkXTlCpF.js +1317 -0
  13. package/dist/active-listener--FT8ewxl.js +37 -0
  14. package/dist/active-listener-C1StcdIA.js +37 -0
  15. package/dist/agent-C76P7tEr.js +703 -0
  16. package/dist/agent-helpers-CK3Obbsi.js +400 -0
  17. package/dist/agent-helpers-KHUla1K7.js +400 -0
  18. package/dist/agent-scope-BrDeaWWf.js +116 -0
  19. package/dist/agent-scope-DxqtYjuJ.js +114 -0
  20. package/dist/agent-ue8p9AIv.js +704 -0
  21. package/dist/agents--24oKN80.js +788 -0
  22. package/dist/agents.config-CWAUoPzG.js +116 -0
  23. package/dist/agents.config-Ck45E_ce.js +116 -0
  24. package/dist/audio-B85HoT7E.js +43 -0
  25. package/dist/audio-BbCUzndz.js +43 -0
  26. package/dist/audio-preflight-B3f0x3zu.js +69 -0
  27. package/dist/audio-preflight-Dv76vFTu.js +64 -0
  28. package/dist/audit-BAbBf2MU.js +3149 -0
  29. package/dist/audit-g55SYz1m.js +3149 -0
  30. package/dist/auth-Bq44qPUd.js +448 -0
  31. package/dist/auth-CVfoI--S.js +281 -0
  32. package/dist/auth-DTWpZJ1a.js +279 -0
  33. package/dist/auth-VItd2pwK.js +448 -0
  34. package/dist/banner-CyPQJybO.js +294 -0
  35. package/dist/binaries-DbgLoSWv.js +13 -0
  36. package/dist/bindings-6KojDoIi.js +69 -0
  37. package/dist/bindings-B6icMMUx.js +69 -0
  38. package/dist/bonjour-discovery-CQU4QbLK.js +378 -0
  39. package/dist/bonjour-discovery-D8aOnk3M.js +378 -0
  40. package/dist/boot/handler.js +42 -69
  41. package/dist/browser-cli-BH41geGr.js +1693 -0
  42. package/dist/browser-cli-u4nrjp1h.js +1688 -0
  43. package/dist/build-info.json +3 -3
  44. package/dist/call-CMDcRlGW.js +2826 -0
  45. package/dist/call-D5YKTYSM.js +2827 -0
  46. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  47. package/dist/catalog-CUY_iTaG.js +185 -0
  48. package/dist/catalog-p6W09S2j.js +185 -0
  49. package/dist/channel-account-context-CA2m93Kt.js +550 -0
  50. package/dist/channel-account-context-Las-t6RP.js +550 -0
  51. package/dist/channel-activity-BD603ehL.js +94 -0
  52. package/dist/channel-activity-CwiF_QMr.js +94 -0
  53. package/dist/channel-activity-daCpxHdT.js +292 -0
  54. package/dist/channel-options-CAlClffy.js +33 -0
  55. package/dist/channel-options-Hl_ep3UG.js +32 -0
  56. package/dist/channel-selection-CHJ7TumC.js +51 -0
  57. package/dist/channel-selection-DR7eW8UG.js +51 -0
  58. package/dist/channel-web-B79j9fSC.js +2134 -0
  59. package/dist/channel-web-DHTTcipm.js +2136 -0
  60. package/dist/channels-cli-DeZ95hcx.js +1427 -0
  61. package/dist/channels-cli-eUCi6jXk.js +1422 -0
  62. package/dist/channels-status-issues-By77REbh.js +18 -0
  63. package/dist/channels-status-issues-DXyOO-KH.js +18 -0
  64. package/dist/chat-envelope-BEDutlnF.js +248 -0
  65. package/dist/chat-envelope-vJJUdDE7.js +248 -0
  66. package/dist/chrome-BuAi16Rq.js +1732 -0
  67. package/dist/chrome-IR-2ukph.js +1733 -0
  68. package/dist/chunk-C1mQSjas.js +341 -0
  69. package/dist/chunk-D7VX4pmT.js +341 -0
  70. package/dist/clack-prompter-BX8SVxtP.js +122 -0
  71. package/dist/clack-prompter-D6HhVlZW.js +121 -0
  72. package/dist/cleanup-utils-DNd0wdKZ.js +94 -0
  73. package/dist/cli/daemon-cli.js +1 -1
  74. package/dist/cli-CK4Y43rx.js +131 -0
  75. package/dist/cli-Cha5Uk29.js +126 -0
  76. package/dist/clipboard-Cbj3McM_.js +31 -0
  77. package/dist/clipboard-Ne8gaWea.js +31 -0
  78. package/dist/command-format-D0vKipG9.js +32 -0
  79. package/dist/command-format-KkslAzwV.js +18 -0
  80. package/dist/command-logger/handler.js +3 -3
  81. package/dist/command-registry-07zlvSN8.js +215 -0
  82. package/dist/commands-DChC3pIF.js +41 -0
  83. package/dist/commands-DFHMoQgH.js +41 -0
  84. package/dist/commands-registry-BN04GIlJ.js +891 -0
  85. package/dist/commands-registry-DbS9NHeX.js +892 -0
  86. package/dist/common-DHHHAcmR.js +156 -0
  87. package/dist/common-De-Lakuh.js +156 -0
  88. package/dist/completion-cli--Jcg794c.js +452 -0
  89. package/dist/completion-cli-B8n7umme.js +452 -0
  90. package/dist/config-BupC6eiJ.js +4223 -0
  91. package/dist/config-CHDaGquZ.js +4225 -0
  92. package/dist/config-cli-Cu79BThx.js +242 -0
  93. package/dist/config-cli-DrJtiyW-.js +247 -0
  94. package/dist/config-guard-BLsqW1qt.js +98 -0
  95. package/dist/config-guard-NQ7jaYM4.js +75 -0
  96. package/dist/config-validation-BLllMW0t.js +18 -0
  97. package/dist/config-validation-DT29VEco.js +18 -0
  98. package/dist/configure-B25UEQnQ.js +889 -0
  99. package/dist/configure-CqMUE4Zw.js +891 -0
  100. package/dist/constants-BbAEYzFC.js +70 -0
  101. package/dist/constants-tLOgmZZ1.js +70 -0
  102. package/dist/control-auth-BFbDXKLK.js +397 -0
  103. package/dist/control-auth-BiiO-FNy.js +397 -0
  104. package/dist/control-ui/assets/index-CuY3pfh1.js +7716 -0
  105. package/dist/control-ui/assets/index-CuY3pfh1.js.map +1 -0
  106. package/dist/control-ui/assets/index-D_fjkN3g.css +1 -0
  107. package/dist/control-ui/index.html +2 -2
  108. package/dist/control-ui-assets-BlpSXjlT.js +186 -0
  109. package/dist/control-ui-assets-eJU2-yvs.js +186 -0
  110. package/dist/conversation-label-Bn5j3lUT.js +36 -0
  111. package/dist/conversation-label-L0QTtKji.js +36 -0
  112. package/dist/cron-cli-BV1o0UgM.js +491 -0
  113. package/dist/cron-cli-C8j-P8GF.js +496 -0
  114. package/dist/daemon-cli-BDvU0Xv6.js +1199 -0
  115. package/dist/daemon-cli-CoNl2Ugf.js +1197 -0
  116. package/dist/daemon-cli.js +53 -97
  117. package/dist/daemon-install-BMEnzWwq.js +60 -0
  118. package/dist/daemon-install-BkUJbdPC.js +55 -0
  119. package/dist/daemon-install-helpers-B9kMxC1v.js +462 -0
  120. package/dist/daemon-install-helpers-DoYR5z4H.js +462 -0
  121. package/dist/deliver-D8P9_nk-.js +481 -0
  122. package/dist/deliver-F9ed3dhp.js +481 -0
  123. package/dist/delivery-queue-B6TuHppj.js +244 -0
  124. package/dist/delivery-queue-BZc3AiGu.js +244 -0
  125. package/dist/devices-cli-DZgxMNLD.js +322 -0
  126. package/dist/devices-cli-DlG9ehK0.js +317 -0
  127. package/dist/diagnostics-CK2HGAFw.js +46 -0
  128. package/dist/diagnostics-G-C-IuxO.js +46 -0
  129. package/dist/directory-cli-CY6tHRIZ.js +218 -0
  130. package/dist/directory-cli-HyvRJ1Ua.js +223 -0
  131. package/dist/dm-policy-shared-1FdjwGtJ.js +22 -0
  132. package/dist/dm-policy-shared-CT3er5HI.js +22 -0
  133. package/dist/dns-cli-Cu-wYvll.js +203 -0
  134. package/dist/dns-cli-DQdnNJh4.js +198 -0
  135. package/dist/dock-D038fZZl.js +929 -0
  136. package/dist/dock-D5pZ3a44.js +928 -0
  137. package/dist/doctor-completion-BrHnayfU.js +92 -0
  138. package/dist/doctor-completion-CoZP2KiR.js +92 -0
  139. package/dist/doctor-config-flow-DJ1nWCTZ.js +1935 -0
  140. package/dist/doctor-config-flow-DYhXUwEq.js +1934 -0
  141. package/dist/enable-B5dIjgnm.js +59 -0
  142. package/dist/enable-FmiEY4ng.js +59 -0
  143. package/dist/entry.js +14 -16
  144. package/dist/env-DUb5GiQe.js +60 -0
  145. package/dist/env-vars-C8WMB8Ix.js +93 -0
  146. package/dist/errors-CdmXrBic.js +35 -0
  147. package/dist/errors-DdLfwEVi.js +35 -0
  148. package/dist/exec-BhkXWg7V.js +164 -0
  149. package/dist/exec-ClUTXFZ9.js +164 -0
  150. package/dist/export-html/template.css +0 -36
  151. package/dist/export-html/template.js +1 -32
  152. package/dist/extensionAPI.js +1015 -142
  153. package/dist/fetch-CCuD0LYV.js +67 -0
  154. package/dist/fetch-JBWLkOpL.js +67 -0
  155. package/dist/fetch-oku6r8tJ.js +67 -0
  156. package/dist/file-lock-6NXMPZTT.js +107 -0
  157. package/dist/file-lock-Ks-RPU6W.js +107 -0
  158. package/dist/fs-safe-93aDW4mH.js +98 -0
  159. package/dist/fs-safe-ACrBwOF5.js +88 -0
  160. package/dist/gateway-cli-CJs4Mxlv.js +23730 -0
  161. package/dist/gateway-cli-gUVR20v7.js +23725 -0
  162. package/dist/gateway-rpc-CSdrtPzg.js +28 -0
  163. package/dist/gateway-rpc-PNA_wUoe.js +28 -0
  164. package/dist/gmail-setup-utils-DNZEf6T0.js +422 -0
  165. package/dist/gmail-setup-utils-KPAKWwGy.js +423 -0
  166. package/dist/health-BCidscV-.js +1417 -0
  167. package/dist/health-Cw2dr19V.js +1414 -0
  168. package/dist/health-format-DOhfU1rY.js +28 -0
  169. package/dist/heartbeat-visibility-C5Vxudi9.js +125 -0
  170. package/dist/heartbeat-visibility-DHeZ-ko1.js +125 -0
  171. package/dist/help-format-Ch0EWh7N.js +17 -0
  172. package/dist/helpers-B4NWktS8.js +10 -0
  173. package/dist/hook-runner-global-Vj-YQxeR.js +527 -0
  174. package/dist/hooks-cli---vy0V0j.js +1218 -0
  175. package/dist/hooks-cli-CX-JUHdJ.js +1223 -0
  176. package/dist/image-ops-DMl7j7f4.js +354 -0
  177. package/dist/image-ops-DpkTOzhI.js +354 -0
  178. package/dist/import-DIjlFm_Y.js +493 -0
  179. package/dist/import-DdQvVR-_.js +495 -0
  180. package/dist/inbound-context-CmmmT8IP.js +68 -0
  181. package/dist/inbound-context-oxIWzEgc.js +68 -0
  182. package/dist/inbound-path-policy-BdmTOUka.js +90 -0
  183. package/dist/inbound-path-policy-DYTLjca8.js +90 -0
  184. package/dist/index.js +106 -105
  185. package/dist/inspect-C9d1V-lI.js +559 -0
  186. package/dist/inspect-rHjRqr3W.js +559 -0
  187. package/dist/installs-QUjSL2ZA.js +325 -0
  188. package/dist/installs-vT5wnxC4.js +325 -0
  189. package/dist/ipv4-DdcyK1aU.js +46 -0
  190. package/dist/ipv4-OHvujh00.js +46 -0
  191. package/dist/ir-CnMQRFBu.js +940 -0
  192. package/dist/json-files-BiA_B-xm.js +46 -0
  193. package/dist/links-CIHbVNO_.js +15 -0
  194. package/dist/loader-CYigLbch.js +22404 -0
  195. package/dist/loader-ElWX62xE.js +22401 -0
  196. package/dist/local-roots-B0QcJDJI.js +313 -0
  197. package/dist/local-roots-BfXsZRkm.js +314 -0
  198. package/dist/logger-BtwpYD7c.js +49 -0
  199. package/dist/logging-CLc3Umm0.js +20 -0
  200. package/dist/login-C8jHYLxN.js +61 -0
  201. package/dist/login-D__FYZX9.js +62 -0
  202. package/dist/login-qr-C0Gd6ybl.js +323 -0
  203. package/dist/login-qr-D7dw54Yp.js +328 -0
  204. package/dist/logs-cli-CFOVARdJ.js +234 -0
  205. package/dist/logs-cli-DtAR__VH.js +239 -0
  206. package/dist/markdown-tables-ChBqQA_Q.js +29 -0
  207. package/dist/markdown-tables-xMuH3QnS.js +29 -0
  208. package/dist/media-CmiNXiOZ.js +10453 -0
  209. package/dist/media-DYopaoc0.js +940 -0
  210. package/dist/message-action-names-CACBi-HB.js +2521 -0
  211. package/dist/message-action-names-CFwlz01T.js +2521 -0
  212. package/dist/message-channel-DF4I2vOK.js +91 -0
  213. package/dist/net-COL170MG.js +225 -0
  214. package/dist/net-QZ8IHNXc.js +225 -0
  215. package/dist/node-cli-CW8jOcHO.js +24 -0
  216. package/dist/nodes-cli-B4lvU9N5.js +1349 -0
  217. package/dist/nodes-cli-B8iTBsI6.js +1344 -0
  218. package/dist/nodes-screen-CZCXHrWB.js +250 -0
  219. package/dist/nodes-screen-C_K1vcS5.js +250 -0
  220. package/dist/note-BVerR3D5.js +92 -0
  221. package/dist/note-Dk8-EaJg.js +92 -0
  222. package/dist/npm-registry-spec-Dma0KHft.js +786 -0
  223. package/dist/npm-registry-spec-vYkxZb6u.js +786 -0
  224. package/dist/npm-resolution-CcZYnzrL.js +86 -0
  225. package/dist/npm-resolution-DsATEEGx.js +86 -0
  226. package/dist/onboard-Csm4bDd_.js +438 -0
  227. package/dist/onboard-D1b535pC.js +436 -0
  228. package/dist/onboard-channels-5EIXyDZh.js +2547 -0
  229. package/dist/onboard-channels-bedB47Hs.js +2548 -0
  230. package/dist/onboard-config-CcPV3Cqz.js +39 -0
  231. package/dist/onboard-config-DcTaxmuf.js +39 -0
  232. package/dist/onboard-helpers-BHNXyhA4.js +364 -0
  233. package/dist/onboard-helpers-eTUU00t8.js +363 -0
  234. package/dist/onboard-remote-DwDKQk1K.js +127 -0
  235. package/dist/onboard-remote-TPbiye5m.js +127 -0
  236. package/dist/onboarding-D0YGZ_Ux.js +588 -0
  237. package/dist/onboarding-DCfmKzl2.js +586 -0
  238. package/dist/onboarding.finalize-BhpsVwME.js +399 -0
  239. package/dist/onboarding.finalize-CY8vgmi9.js +402 -0
  240. package/dist/onboarding.gateway-config-C_eqpJ7D.js +192 -0
  241. package/dist/onboarding.gateway-config-DR1ey6tU.js +199 -0
  242. package/dist/outbound-Be4BgVqF.js +220 -0
  243. package/dist/outbound-CXJLn8kn.js +221 -0
  244. package/dist/outbound-attachment-CbNLn0lk.js +18 -0
  245. package/dist/outbound-attachment-DNCMF74c.js +18 -0
  246. package/dist/outbound-attachment-DaStRTGv.js +18 -0
  247. package/dist/pairing-cli-CxGDUsLT.js +128 -0
  248. package/dist/pairing-cli-D83T3PG9.js +123 -0
  249. package/dist/pairing-labels-6f8FqSS5.js +9 -0
  250. package/dist/pairing-labels-CI5j-OUT.js +9 -0
  251. package/dist/pairing-store-DnTHRcnO.js +459 -0
  252. package/dist/pairing-store-ONzqxcNb.js +460 -0
  253. package/dist/path-env-D7VB7sOO.js +89 -0
  254. package/dist/path-env-DFiYvvI-.js +89 -0
  255. package/dist/path-safety-BshBsw4P.js +14 -0
  256. package/dist/path-safety-CZbhQciI.js +14 -0
  257. package/dist/plugin-auto-enable-BnCQKkIK.js +302 -0
  258. package/dist/plugin-auto-enable-CFRs-pcA.js +301 -0
  259. package/dist/plugin-registry-CV5pfXOU.js +33 -0
  260. package/dist/plugin-registry-CmG34W0u.js +33 -0
  261. package/dist/plugin-sdk/agents/agent-helpers.d.ts +0 -1
  262. package/dist/plugin-sdk/agents/agent-scope.d.ts +10 -0
  263. package/dist/plugin-sdk/agents/agent-types.d.ts +1 -6
  264. package/dist/plugin-sdk/agents/agent-utils.d.ts +0 -14
  265. package/dist/plugin-sdk/agents/provider-utils.d.ts +0 -1
  266. package/dist/plugin-sdk/agents/subagent-spawn.d.ts +0 -1
  267. package/dist/plugin-sdk/agents/tools/sessions-helpers.d.ts +0 -1
  268. package/dist/plugin-sdk/auth/constants.d.ts +16 -0
  269. package/dist/plugin-sdk/auth/display.d.ts +7 -0
  270. package/dist/plugin-sdk/auth/doctor.d.ts +8 -0
  271. package/dist/plugin-sdk/auth/env-injection.d.ts +41 -0
  272. package/dist/plugin-sdk/auth/index.d.ts +8 -0
  273. package/dist/plugin-sdk/auth/oauth.d.ts +14 -0
  274. package/dist/plugin-sdk/auth/provider-auth.d.ts +40 -0
  275. package/dist/plugin-sdk/auth/session-override.d.ts +18 -0
  276. package/dist/plugin-sdk/auto-reply/reply/agent-runner-execution.d.ts +0 -1
  277. package/dist/plugin-sdk/auto-reply/reply/agent-runner-utils.d.ts +0 -2
  278. package/dist/plugin-sdk/auto-reply/reply/commands-status.d.ts +1 -4
  279. package/dist/plugin-sdk/auto-reply/reply/commands-types.d.ts +1 -4
  280. package/dist/plugin-sdk/auto-reply/reply/directive-handling.levels.d.ts +1 -7
  281. package/dist/plugin-sdk/auto-reply/reply/directive-handling.params.d.ts +1 -4
  282. package/dist/plugin-sdk/auto-reply/reply/directive-handling.parse.d.ts +1 -7
  283. package/dist/plugin-sdk/auto-reply/reply/directive-handling.shared.d.ts +1 -4
  284. package/dist/plugin-sdk/auto-reply/reply/directives.d.ts +3 -15
  285. package/dist/plugin-sdk/auto-reply/reply/get-reply-directives.d.ts +1 -5
  286. package/dist/plugin-sdk/auto-reply/reply/get-reply-inline-actions.d.ts +1 -5
  287. package/dist/plugin-sdk/auto-reply/reply/get-reply-run.d.ts +1 -5
  288. package/dist/plugin-sdk/auto-reply/reply/queue/types.d.ts +1 -3
  289. package/dist/plugin-sdk/auto-reply/reply/response-prefix-template.d.ts +4 -6
  290. package/dist/plugin-sdk/auto-reply/reply/session-run-accounting.d.ts +0 -7
  291. package/dist/plugin-sdk/auto-reply/reply/session-updates.d.ts +0 -10
  292. package/dist/plugin-sdk/auto-reply/reply.d.ts +1 -1
  293. package/dist/plugin-sdk/auto-reply/status.d.ts +2 -6
  294. package/dist/plugin-sdk/auto-reply/thinking.d.ts +0 -11
  295. package/dist/plugin-sdk/auto-reply/types.d.ts +1 -2
  296. package/dist/plugin-sdk/commands/agent/session.d.ts +1 -2
  297. package/dist/plugin-sdk/config/defaults.d.ts +0 -1
  298. package/dist/plugin-sdk/config/sessions/types.d.ts +0 -8
  299. package/dist/plugin-sdk/config/types.agent-defaults.d.ts +28 -112
  300. package/dist/plugin-sdk/config/types.agents.d.ts +8 -0
  301. package/dist/plugin-sdk/config/types.messages.d.ts +1 -2
  302. package/dist/plugin-sdk/config/types.tools.d.ts +1 -1
  303. package/dist/plugin-sdk/config/zod-schema.agent-defaults.d.ts +9 -66
  304. package/dist/plugin-sdk/config/zod-schema.agent-runtime.d.ts +5 -13
  305. package/dist/plugin-sdk/config/zod-schema.agents.d.ts +12 -76
  306. package/dist/plugin-sdk/config/zod-schema.d.ts +12 -76
  307. package/dist/plugin-sdk/daemon/constants.d.ts +2 -2
  308. package/dist/plugin-sdk/gateway/protocol/index.d.ts +1 -3
  309. package/dist/plugin-sdk/gateway/protocol/schema/sessions.d.ts +0 -2
  310. package/dist/plugin-sdk/gateway/session-utils.types.d.ts +0 -2
  311. package/dist/plugin-sdk/index.js +108 -134
  312. package/dist/plugin-sdk/middleware/auth-key-retry.d.ts +32 -0
  313. package/dist/plugin-sdk/middleware/channel-bridge.d.ts +4 -0
  314. package/dist/plugin-sdk/middleware/error-classifier.d.ts +5 -0
  315. package/dist/plugin-sdk/middleware/media-resolver.d.ts +12 -0
  316. package/dist/plugin-sdk/middleware/runtime-factory.d.ts +42 -0
  317. package/dist/plugin-sdk/middleware/types.d.ts +33 -1
  318. package/dist/plugin-sdk/plugins/types.d.ts +1 -1
  319. package/dist/plugin-sdk/terminal/palette.d.ts +2 -2
  320. package/dist/plugins-B4waLB_f.js +453 -0
  321. package/dist/plugins-D6-JJ1il.js +455 -0
  322. package/dist/plugins-cli-DG2zHgdP.js +799 -0
  323. package/dist/plugins-cli-DZvQzkWd.js +794 -0
  324. package/dist/ports-BcTKFlWl.js +96 -0
  325. package/dist/ports-DAc2AlZE.js +316 -0
  326. package/dist/ports-HiuYk3bt.js +96 -0
  327. package/dist/ports-dEePqmCq.js +370 -0
  328. package/dist/program-CX-EtQ9W.js +245 -0
  329. package/dist/program-context-R3wsjl2f.js +474 -0
  330. package/dist/progress-DQ1drugY.js +124 -0
  331. package/dist/prompt-edYTUtju.js +21 -0
  332. package/dist/prompt-select-styled-BzL7v1zQ.js +1647 -0
  333. package/dist/prompt-select-styled-g5q4srtu.js +1650 -0
  334. package/dist/prompt-style-CYEpbwXH.js +9 -0
  335. package/dist/provider-dispatcher-D7qFGoUR.js +660 -0
  336. package/dist/provider-dispatcher-dB_rm6tV.js +659 -0
  337. package/dist/push-apns-DQwR-i4_.js +713 -0
  338. package/dist/push-apns-Dj5RApCY.js +711 -0
  339. package/dist/pw-ai-DOQMJFB-.js +1911 -0
  340. package/dist/pw-ai-oqtYDmjQ.js +1907 -0
  341. package/dist/qr-cli-CBGm_Cik.js +353 -0
  342. package/dist/qr-cli-D2jZPdW9.js +348 -0
  343. package/dist/redact-gXuh8MFk.js +191 -0
  344. package/dist/redact-snapshot-B-2V56Yb.js +2016 -0
  345. package/dist/redact-snapshot-CD36XSYE.js +2016 -0
  346. package/dist/register.agent-DLSuiqWE.js +287 -0
  347. package/dist/register.agent-DcvEt3hG.js +1044 -0
  348. package/dist/register.configure-3edoYZai.js +131 -0
  349. package/dist/register.configure-CyOJCmnY.js +125 -0
  350. package/dist/register.import-Cku0T-PA.js +31 -0
  351. package/dist/register.import-Dr8TiUVx.js +28 -0
  352. package/dist/register.maintenance-5aaPQbJk.js +495 -0
  353. package/dist/register.maintenance-DPSswZDJ.js +498 -0
  354. package/dist/register.message-BaSVFv92.js +682 -0
  355. package/dist/register.message-FEI0RiNN.js +687 -0
  356. package/dist/register.onboard-CO1UZL-9.js +258 -0
  357. package/dist/register.onboard-DuLKxjXl.js +263 -0
  358. package/dist/register.setup-CFYYd_Ev.js +115 -0
  359. package/dist/register.setup-P0UHDBMS.js +110 -0
  360. package/dist/register.status-health-sessions-D_3vm2yw.js +424 -0
  361. package/dist/register.status-health-sessions-z9x79dmg.js +665 -0
  362. package/dist/register.subclis-B-d970d6.js +267 -0
  363. package/dist/replies-BvarRpHb.js +136 -0
  364. package/dist/replies-CSzm5168.js +136 -0
  365. package/dist/reply-CTgksTO1.js +13695 -0
  366. package/dist/reply-CUyafs4J.js +13692 -0
  367. package/dist/reply-directives-Caq4zVTg.js +182 -0
  368. package/dist/reply-directives-D91fapDF.js +182 -0
  369. package/dist/reply-payloads-te0YnESs.js +527 -0
  370. package/dist/reply-prefix-Bv8Mv9q8.js +37 -0
  371. package/dist/reply-prefix-Rk_UEaJa.js +37 -0
  372. package/dist/resolve-route-BPa6q23t.js +249 -0
  373. package/dist/resolve-route-CN9BEALz.js +249 -0
  374. package/dist/response-prefix-template-D-ptXREi.js +134 -0
  375. package/dist/response-prefix-template-Dckjdftg.js +134 -0
  376. package/dist/retry-BcZuGfnV.js +77 -0
  377. package/dist/retry-BzWBtFpP.js +77 -0
  378. package/dist/run-main-BugUkGES.js +303 -0
  379. package/dist/runner-CVMXkHe9.js +2295 -0
  380. package/dist/runner-DOWTBU0-.js +2295 -0
  381. package/dist/runtime-guard-CXt4yzo-.js +60 -0
  382. package/dist/secure-random-CBwDBdj1.js +44 -0
  383. package/dist/security-cli-BQzdzJUp.js +479 -0
  384. package/dist/security-cli-D2d8RvsT.js +485 -0
  385. package/dist/send-B3G3I3II.js +349 -0
  386. package/dist/send-B6IB6ELR.js +547 -0
  387. package/dist/send-BT8XEvZB.js +332 -0
  388. package/dist/send-BTupAHVX.js +2245 -0
  389. package/dist/send-BZCfto_I.js +1174 -0
  390. package/dist/send-C5EDjThR.js +492 -0
  391. package/dist/send-CBM54hgN.js +349 -0
  392. package/dist/send-CPBd6ItT.js +29 -0
  393. package/dist/send-CzYm7ULP.js +2245 -0
  394. package/dist/send-D2m_x8xM.js +374 -0
  395. package/dist/send-DmEBPE2S.js +1779 -0
  396. package/dist/send-Dt4iCx61.js +426 -0
  397. package/dist/send-MWjpLHEV.js +11 -0
  398. package/dist/send-qpwqt34s.js +547 -0
  399. package/dist/send-rW25uKNz.js +1776 -0
  400. package/dist/send-uqa6CNuP.js +492 -0
  401. package/dist/server-BhmYVCED.js +201 -0
  402. package/dist/server-DaUw1o2B.js +206 -0
  403. package/dist/server-lifecycle-BeZsBQwF.js +2437 -0
  404. package/dist/server-lifecycle-C2F1_TE2.js +2437 -0
  405. package/dist/server-node-events-DoRFbKCT.js +390 -0
  406. package/dist/server-node-events-jbbbt-4R.js +395 -0
  407. package/dist/service-BDt-zUvV.js +670 -0
  408. package/dist/service-Os7W1F2S.js +670 -0
  409. package/dist/session-B9KGKVrY.js +170 -0
  410. package/dist/session-DzAupDyj.js +170 -0
  411. package/dist/session-cost-usage-BYCI739a.js +627 -0
  412. package/dist/session-cost-usage-DGsPcuMj.js +627 -0
  413. package/dist/session-dirs-BIg5RHAh.js +947 -0
  414. package/dist/session-dirs-DwDxjK1p.js +947 -0
  415. package/dist/session-utils-BgWDCbyx.js +622 -0
  416. package/dist/session-utils-CxxOeC1M.js +622 -0
  417. package/dist/sessions-Bwu0l_CG.js +2569 -0
  418. package/dist/sessions-CiuFFCnt.js +247 -0
  419. package/dist/shell-env-CsV_IkJj.js +163 -0
  420. package/dist/shell-env-hZW9j-Uc.js +163 -0
  421. package/dist/ssrf-B-rF_tZB.js +183 -0
  422. package/dist/ssrf-D6fl_7ww.js +183 -0
  423. package/dist/status-BOFm7iyj.js +2065 -0
  424. package/dist/status-RI2y_M21.js +2061 -0
  425. package/dist/status.update-DbO7izip.js +79 -0
  426. package/dist/status.update-wXyvcztI.js +79 -0
  427. package/dist/store-BLGrRL_E.js +64 -0
  428. package/dist/store-BYhcsOLr.js +64 -0
  429. package/dist/store-Dv76bGHg.js +2571 -0
  430. package/dist/store-Dw93tSB-.js +53 -0
  431. package/dist/subagent-registry-DWL-tayF.js +4856 -0
  432. package/dist/subagent-registry-HjR1tO3-.js +4854 -0
  433. package/dist/subsystem-BCkt9Ocb.js +1079 -0
  434. package/dist/subsystem-BgxIzx7w.js +1137 -0
  435. package/dist/system-cli-DtrDDmCt.js +71 -0
  436. package/dist/system-cli-xDr_Yyaa.js +76 -0
  437. package/dist/systemd-BlbIQ1PV.js +547 -0
  438. package/dist/systemd-DzXePo7r.js +547 -0
  439. package/dist/systemd-linger-mLbBF4pa.js +75 -0
  440. package/dist/systemd-linger-qlGGW2JB.js +75 -0
  441. package/dist/table-V_9n7CjP.js +279 -0
  442. package/dist/tables-Cy3gObW7.js +55 -0
  443. package/dist/tables-DAuk-Y6F.js +55 -0
  444. package/dist/tables-DRh09aPZ.js +55 -0
  445. package/dist/tailnet-BoTa0e2q.js +40 -0
  446. package/dist/tailnet-Cy0Q27lj.js +40 -0
  447. package/dist/tailscale-CiWkh0vS.js +230 -0
  448. package/dist/tailscale-Driw3j8E.js +230 -0
  449. package/dist/targets-3hewwPvM.js +120 -0
  450. package/dist/targets-Bkw_co-B.js +220 -0
  451. package/dist/targets-C1Tt0ZWd.js +2406 -0
  452. package/dist/targets-CsrqF2M4.js +650 -0
  453. package/dist/targets-DKriCISG.js +53 -0
  454. package/dist/targets-DTM2OPnS.js +650 -0
  455. package/dist/targets-DhhaK2xG.js +53 -0
  456. package/dist/targets-tDrl_ioQ.js +46 -0
  457. package/dist/targets-yq1kGK1_.js +2407 -0
  458. package/dist/thinking-XA5P_zFw.js +88 -0
  459. package/dist/thinking-l-rrvZwu.js +88 -0
  460. package/dist/tokens-7ZtWRjA3.js +21 -0
  461. package/dist/tool-display-AxpSXZVq.js +785 -0
  462. package/dist/tool-display-D6GD-41Y.js +785 -0
  463. package/dist/tool-images-D16vIWPg.js +263 -0
  464. package/dist/tool-images-IVIZ29ID.js +263 -0
  465. package/dist/trash--8b4GDyV.js +125 -0
  466. package/dist/trash-ivbG2QWV.js +125 -0
  467. package/dist/tui-Cbe1EW-B.js +3319 -0
  468. package/dist/tui-Dj3XrTCV.js +3319 -0
  469. package/dist/tui-cli-EGqEcdfE.js +64 -0
  470. package/dist/tui-cli-KKmqnNs2.js +59 -0
  471. package/dist/update-DruVguh4.js +349 -0
  472. package/dist/update-cli-C5tdQeGG.js +1371 -0
  473. package/dist/update-cli-Canq11sh.js +1374 -0
  474. package/dist/update-y8nz-3OC.js +349 -0
  475. package/dist/usage-CAuX4vsd.js +5384 -0
  476. package/dist/utils-C5daYcFn.js +631 -0
  477. package/dist/web-B9gR_cGR.js +3071 -0
  478. package/dist/web-DZ8ahrhK.js +77 -0
  479. package/dist/web-DkYPsnyd.js +71 -0
  480. package/dist/webhooks-cli-DFqGwW1f.js +329 -0
  481. package/dist/webhooks-cli-y-E-q0Xo.js +334 -0
  482. package/dist/whatsapp-actions-BXIe-Uei.js +123 -0
  483. package/dist/whatsapp-actions-BictxOCB.js +129 -0
  484. package/dist/widearea-dns-fHQt5-Q3.js +127 -0
  485. package/dist/workspace-DvbSDgO_.js +449 -0
  486. package/dist/workspace-zLfKNRwR.js +447 -0
  487. package/dist/zod-schema-B9RGngMW.js +2696 -0
  488. package/dist/zod-schema-D3hQ5SKe.js +2696 -0
  489. package/extensions/matrix/src/matrix/monitor/replies.ts +0 -24
  490. package/extensions/mattermost/src/mattermost/monitor-helpers.ts +0 -1
  491. package/package.json +3 -3
  492. package/dist/accounts-BFy_Z3od.js +0 -272
  493. package/dist/accounts-BTXSfPWi.js +0 -270
  494. package/dist/accounts-BxGS70Do.js +0 -36
  495. package/dist/accounts-CNY1TGj1.js +0 -47
  496. package/dist/accounts-DBohBlww.js +0 -32
  497. package/dist/accounts-DqRQ75w3.js +0 -36
  498. package/dist/accounts-iODF3SK2.js +0 -47
  499. package/dist/ack-reactions-B11TAC2D.js +0 -446
  500. package/dist/ack-reactions-BWVjL4H6.js +0 -446
  501. package/dist/acp-cli-CA1xMmVo.js +0 -1320
  502. package/dist/acp-cli-CGo6fJVZ.js +0 -1326
  503. package/dist/active-listener-VzhWW8W6.js +0 -37
  504. package/dist/active-listener-z0qVEcom.js +0 -37
  505. package/dist/agent-CTizRPIJ.js +0 -732
  506. package/dist/agent-D2RVoS5g.js +0 -731
  507. package/dist/agent-helpers-B6VfZ9_u.js +0 -606
  508. package/dist/agent-helpers-CTx5KKJu.js +0 -606
  509. package/dist/agent-scope-BGYzhtWQ.js +0 -121
  510. package/dist/agent-scope-C50VuLKh.js +0 -119
  511. package/dist/agents-BuYn-obw.js +0 -788
  512. package/dist/agents.config-BSTxuTVd.js +0 -116
  513. package/dist/agents.config-p3V3b9u6.js +0 -116
  514. package/dist/audio-DPOuhNq7.js +0 -43
  515. package/dist/audio-VBcVDa08.js +0 -43
  516. package/dist/audio-preflight-BwmCYeuM.js +0 -64
  517. package/dist/audio-preflight-co8gjlPX.js +0 -69
  518. package/dist/audit-oH4urD3G.js +0 -3138
  519. package/dist/audit-qgtCT3ik.js +0 -3138
  520. package/dist/auth-CAczFgAO.js +0 -448
  521. package/dist/auth-Deh9i9Eg.js +0 -448
  522. package/dist/auth-profiles-BquJGKLC.js +0 -279
  523. package/dist/auth-profiles-D8vKiBPq.js +0 -281
  524. package/dist/banner-Cf978khN.js +0 -294
  525. package/dist/binaries-DXW6oATV.js +0 -13
  526. package/dist/bindings-CRU_udk8.js +0 -69
  527. package/dist/bindings-DQZAu8Wv.js +0 -69
  528. package/dist/bonjour-discovery-DdAk1VyO.js +0 -378
  529. package/dist/bonjour-discovery-DuhiIZZx.js +0 -378
  530. package/dist/browser-cli-CZC4h5V4.js +0 -1687
  531. package/dist/browser-cli-DAgi_aQk.js +0 -1692
  532. package/dist/call-BbwtB9Y-.js +0 -2828
  533. package/dist/call-PivL7Uex.js +0 -2829
  534. package/dist/catalog-BqO6yem_.js +0 -185
  535. package/dist/catalog-DFmaYwfk.js +0 -185
  536. package/dist/channel-account-context-CvIDAtHS.js +0 -550
  537. package/dist/channel-account-context-q-o0pG1A.js +0 -550
  538. package/dist/channel-activity-BaCNOZpP.js +0 -94
  539. package/dist/channel-activity-C-G4n9BK.js +0 -292
  540. package/dist/channel-activity-DTKGf3j5.js +0 -94
  541. package/dist/channel-options-Cyappik_.js +0 -32
  542. package/dist/channel-options-DFnypY5S.js +0 -33
  543. package/dist/channel-selection-BGl53D5K.js +0 -51
  544. package/dist/channel-selection-NNPbxnyZ.js +0 -51
  545. package/dist/channel-web-DmhVkWbP.js +0 -2134
  546. package/dist/channel-web-kRC3UYBJ.js +0 -2136
  547. package/dist/channels-cli-C5XRkPJl.js +0 -1421
  548. package/dist/channels-cli-D6TqCI0m.js +0 -1426
  549. package/dist/channels-status-issues-CUc9mpeW.js +0 -18
  550. package/dist/channels-status-issues-DwRDzwrV.js +0 -18
  551. package/dist/chat-envelope-DEZ-5RY8.js +0 -248
  552. package/dist/chat-envelope-el7Uo-Fe.js +0 -248
  553. package/dist/chrome-0QaGKb3L.js +0 -1732
  554. package/dist/chrome-CFeWdP0Y.js +0 -1733
  555. package/dist/chunk-CSQfUhgF.js +0 -341
  556. package/dist/chunk-D0Y_w4oX.js +0 -341
  557. package/dist/clack-prompter-B7tOxhJd.js +0 -122
  558. package/dist/clack-prompter-CCFnKP_1.js +0 -121
  559. package/dist/cleanup-utils-CqAVZz2b.js +0 -94
  560. package/dist/cli-BR2J3c4l.js +0 -125
  561. package/dist/cli-C1q1vSmN.js +0 -130
  562. package/dist/clipboard-D7_SKHPK.js +0 -31
  563. package/dist/clipboard-Dzkx6Q2K.js +0 -31
  564. package/dist/command-format-CVfo8I5f.js +0 -18
  565. package/dist/command-format-DgXcqxBt.js +0 -32
  566. package/dist/command-registry-CYjvOp8W.js +0 -215
  567. package/dist/commands-CDonBOrw.js +0 -41
  568. package/dist/commands-D_-bgTlO.js +0 -41
  569. package/dist/commands-registry-CWJv6xe2.js +0 -892
  570. package/dist/commands-registry-Ci8_cFk9.js +0 -893
  571. package/dist/common-CMI-qsF8.js +0 -156
  572. package/dist/common-DSVmydhm.js +0 -156
  573. package/dist/completion-cli-8iZJqfmX.js +0 -452
  574. package/dist/completion-cli-CYDjEZSt.js +0 -452
  575. package/dist/config-D5XU45KD.js +0 -6953
  576. package/dist/config-FHu9Bn4R.js +0 -6951
  577. package/dist/config-cli-Gehy4sav.js +0 -241
  578. package/dist/config-cli-RC9qMgJq.js +0 -246
  579. package/dist/config-guard-J-Q_DFWk.js +0 -97
  580. package/dist/config-guard-cB5a_ANg.js +0 -75
  581. package/dist/config-validation-BPNyd9_3.js +0 -18
  582. package/dist/config-validation-BPWuvhVe.js +0 -18
  583. package/dist/configure-CC2XdRRm.js +0 -891
  584. package/dist/configure-DxFBJuhZ.js +0 -889
  585. package/dist/constants-BmRFoHl0.js +0 -67
  586. package/dist/constants-C9WPAluB.js +0 -67
  587. package/dist/control-auth-D0tpV3ts.js +0 -397
  588. package/dist/control-auth-_-0PGRUs.js +0 -397
  589. package/dist/control-ui/assets/index-B4ZM1lW1.js +0 -7738
  590. package/dist/control-ui/assets/index-B4ZM1lW1.js.map +0 -1
  591. package/dist/control-ui/assets/index-PED72sKF.css +0 -1
  592. package/dist/control-ui-assets-Cx_mw4D0.js +0 -186
  593. package/dist/control-ui-assets-W1AUuGrO.js +0 -186
  594. package/dist/conversation-label-C4SDz4sT.js +0 -36
  595. package/dist/conversation-label-D1frnvYe.js +0 -36
  596. package/dist/cron-cli-BzERxhr5.js +0 -495
  597. package/dist/cron-cli-C8j_uslU.js +0 -490
  598. package/dist/daemon-cli-C95XNbX0.js +0 -1199
  599. package/dist/daemon-cli-e6sURMqd.js +0 -1197
  600. package/dist/daemon-install-CcohRvKV.js +0 -55
  601. package/dist/daemon-install-DDshfT0J.js +0 -60
  602. package/dist/daemon-install-helpers-CFGAfRlj.js +0 -462
  603. package/dist/daemon-install-helpers-DIUzSFG1.js +0 -462
  604. package/dist/defaults-B5KStIBg.js +0 -7
  605. package/dist/defaults-xUAL2Z-F.js +0 -7
  606. package/dist/deliver-912khjLK.js +0 -481
  607. package/dist/deliver-D56J4-1F.js +0 -481
  608. package/dist/delivery-queue-Cfa9Wmxp.js +0 -244
  609. package/dist/delivery-queue-CxVRi4tw.js +0 -244
  610. package/dist/devices-cli-0qDhTgZR.js +0 -316
  611. package/dist/devices-cli-6SKMR2bV.js +0 -321
  612. package/dist/diagnostics-99iCgBUh.js +0 -46
  613. package/dist/diagnostics-VC0cz7kX.js +0 -46
  614. package/dist/directory-cli-5YXdoVdn.js +0 -217
  615. package/dist/directory-cli-D3IKCHmn.js +0 -222
  616. package/dist/dm-policy-shared-4rkjhcrM.js +0 -22
  617. package/dist/dm-policy-shared-D8lgnmrC.js +0 -22
  618. package/dist/dns-cli-11CtErVU.js +0 -197
  619. package/dist/dns-cli-SiEd_1Lq.js +0 -202
  620. package/dist/dock-BqNINg7k.js +0 -928
  621. package/dist/dock-CQuu41bw.js +0 -929
  622. package/dist/doctor-completion-BR1SlAT3.js +0 -92
  623. package/dist/doctor-completion-CZwpEhIK.js +0 -92
  624. package/dist/doctor-config-flow-BVkHcvoj.js +0 -1933
  625. package/dist/doctor-config-flow-DVYRn0An.js +0 -1934
  626. package/dist/enable-DcJnkzfz.js +0 -59
  627. package/dist/enable-ibNq4UWy.js +0 -59
  628. package/dist/env-DeF64iu0.js +0 -60
  629. package/dist/env-vars-7aZqKPhk.js +0 -93
  630. package/dist/errors-8F-77i6m.js +0 -35
  631. package/dist/errors-DZ199hOo.js +0 -35
  632. package/dist/exec-DbKuYyM1.js +0 -164
  633. package/dist/exec-DkFE7lqU.js +0 -164
  634. package/dist/fetch-BFSBLBkA.js +0 -67
  635. package/dist/fetch-C6XKGA11.js +0 -67
  636. package/dist/fetch-CEDsOiql.js +0 -67
  637. package/dist/file-lock-CIvloidc.js +0 -107
  638. package/dist/file-lock-CzBL_VIx.js +0 -107
  639. package/dist/fs-safe-DSwT85uK.js +0 -88
  640. package/dist/fs-safe-DkBhNAc3.js +0 -98
  641. package/dist/gateway-cli-BEEZhCHv.js +0 -23747
  642. package/dist/gateway-cli-Nob0g_4y.js +0 -23742
  643. package/dist/gateway-rpc-CksB-N83.js +0 -28
  644. package/dist/gateway-rpc-Dq44SkOv.js +0 -28
  645. package/dist/gmail-setup-utils-Cnx8A5pW.js +0 -422
  646. package/dist/gmail-setup-utils-nkabbKOE.js +0 -423
  647. package/dist/health-RT-F3hzT.js +0 -1423
  648. package/dist/health-SOuaKNRa.js +0 -1420
  649. package/dist/health-format-BG95OE6N.js +0 -28
  650. package/dist/heartbeat-visibility-BxkZjE5m.js +0 -125
  651. package/dist/heartbeat-visibility-CGG-G7px.js +0 -125
  652. package/dist/help-format-DAxf0l_h.js +0 -17
  653. package/dist/helpers-kkeXif0Q.js +0 -10
  654. package/dist/hook-runner-global-DJ14gXFP.js +0 -527
  655. package/dist/hooks-cli-DyEKryW8.js +0 -1217
  656. package/dist/hooks-cli-RuEn0-oy.js +0 -1222
  657. package/dist/image-ops-Bi6JPSkD.js +0 -354
  658. package/dist/image-ops-DWytvdh_.js +0 -354
  659. package/dist/import-D8BBZQgl.js +0 -170
  660. package/dist/import-DQ6NI4Fz.js +0 -168
  661. package/dist/inbound-context-CPkkQW0i.js +0 -68
  662. package/dist/inbound-context-DS_kpIYI.js +0 -68
  663. package/dist/inbound-path-policy-Bg4gZBx-.js +0 -250
  664. package/dist/inbound-path-policy-sdr5Ji0k.js +0 -250
  665. package/dist/inspect-Dt8hogS3.js +0 -559
  666. package/dist/inspect-vYIL1oA0.js +0 -559
  667. package/dist/installs-aM5dWAyn.js +0 -325
  668. package/dist/installs-pWdqG8HL.js +0 -325
  669. package/dist/ipv4--2WXMVtE.js +0 -46
  670. package/dist/ipv4-CDQpx1A7.js +0 -46
  671. package/dist/ir-BpaAMTfW.js +0 -940
  672. package/dist/json-files-DzpTak5i.js +0 -46
  673. package/dist/links-C3soDNDH.js +0 -15
  674. package/dist/loader-Ccwsh8Sh.js +0 -22624
  675. package/dist/loader-y9MhJewT.js +0 -22621
  676. package/dist/local-roots-BrH0Q63K.js +0 -313
  677. package/dist/local-roots-nImrw2WR.js +0 -314
  678. package/dist/logger-Bw3cFE5t.js +0 -49
  679. package/dist/logging-C-nxX2fn.js +0 -20
  680. package/dist/login-C_Kt57nO.js +0 -62
  681. package/dist/login-DOmWDMeP.js +0 -61
  682. package/dist/login-qr-CXU0wC5K.js +0 -322
  683. package/dist/login-qr-D0u6fdeO.js +0 -327
  684. package/dist/logs-cli-CschwP4d.js +0 -238
  685. package/dist/logs-cli-D7ayUvz_.js +0 -233
  686. package/dist/markdown-tables-CrmghPAr.js +0 -29
  687. package/dist/markdown-tables-jrnSPvZ6.js +0 -29
  688. package/dist/media-CojxZ45J.js +0 -10492
  689. package/dist/media-DN7yRfrH.js +0 -940
  690. package/dist/message-action-names-CtEZcmlU.js +0 -2521
  691. package/dist/message-action-names-WglOO_DT.js +0 -2521
  692. package/dist/message-channel-DzJqHVZD.js +0 -91
  693. package/dist/net-Cg8AQeke.js +0 -225
  694. package/dist/net-D6D0wgcF.js +0 -225
  695. package/dist/node-cli-Q2-n3Fgv.js +0 -24
  696. package/dist/nodes-cli-C2SoKfCv.js +0 -1343
  697. package/dist/nodes-cli-CQmlfx0K.js +0 -1348
  698. package/dist/nodes-screen-BR9sYoPa.js +0 -250
  699. package/dist/nodes-screen-Cw7Hv7M2.js +0 -250
  700. package/dist/note-Dlv4NmlQ.js +0 -92
  701. package/dist/note-kvWV4xtw.js +0 -92
  702. package/dist/npm-registry-spec-0qiKawvv.js +0 -786
  703. package/dist/npm-registry-spec-COvUzy5J.js +0 -786
  704. package/dist/npm-resolution-6v_Zm-9G.js +0 -86
  705. package/dist/npm-resolution-BFz7LeoN.js +0 -86
  706. package/dist/onboard-CgyU-mDL.js +0 -407
  707. package/dist/onboard-RI4vNTZd.js +0 -405
  708. package/dist/onboard-channels-DN5JoKPd.js +0 -2548
  709. package/dist/onboard-channels-DyAd1OZr.js +0 -2547
  710. package/dist/onboard-config-BCTthQ7J.js +0 -24
  711. package/dist/onboard-config-y-2cgT0V.js +0 -24
  712. package/dist/onboard-helpers-BCzZUD0z.js +0 -363
  713. package/dist/onboard-helpers-sDc2Ky6H.js +0 -362
  714. package/dist/onboard-remote-CJrMtttl.js +0 -127
  715. package/dist/onboard-remote-hyQIBguz.js +0 -127
  716. package/dist/onboarding-DCu1iBTV.js +0 -541
  717. package/dist/onboarding-zKMitzpb.js +0 -543
  718. package/dist/onboarding.finalize-ClHhYE2E.js +0 -401
  719. package/dist/onboarding.finalize-D5JkVJgg.js +0 -398
  720. package/dist/onboarding.gateway-config-DFh71Ndn.js +0 -198
  721. package/dist/onboarding.gateway-config-VBk6AP9U.js +0 -191
  722. package/dist/outbound-BYlZshIw.js +0 -221
  723. package/dist/outbound-CFfJC1j5.js +0 -220
  724. package/dist/outbound-attachment-BCNs1u1F.js +0 -18
  725. package/dist/outbound-attachment-B_0D60Yr.js +0 -18
  726. package/dist/outbound-attachment-o0seS0CP.js +0 -18
  727. package/dist/pairing-cli-BeydfoF9.js +0 -122
  728. package/dist/pairing-cli-DWzX866x.js +0 -127
  729. package/dist/pairing-labels-B-N8S5Fc.js +0 -9
  730. package/dist/pairing-labels-B_53dY5L.js +0 -9
  731. package/dist/pairing-store-BxdqFZGK.js +0 -460
  732. package/dist/pairing-store-CTkD51uW.js +0 -459
  733. package/dist/path-env-DR5vn3QL.js +0 -89
  734. package/dist/path-env-qRJbjJzj.js +0 -89
  735. package/dist/path-safety-DkT9RmTG.js +0 -14
  736. package/dist/path-safety-juI2XbO1.js +0 -14
  737. package/dist/plugin-auto-enable-D23gv7Aw.js +0 -302
  738. package/dist/plugin-auto-enable-DuPS9XiJ.js +0 -301
  739. package/dist/plugin-registry-CNu_1KZz.js +0 -33
  740. package/dist/plugin-registry-DeHwd2jk.js +0 -33
  741. package/dist/plugin-sdk/agents/agent-helpers/thinking.d.ts +0 -5
  742. package/dist/plugin-sdk/agents/auth-profiles/constants.d.ts +0 -16
  743. package/dist/plugin-sdk/agents/auth-profiles/display.d.ts +0 -7
  744. package/dist/plugin-sdk/agents/auth-profiles/doctor.d.ts +0 -8
  745. package/dist/plugin-sdk/agents/auth-profiles/oauth.d.ts +0 -14
  746. package/dist/plugin-sdk/agents/auth-profiles/session-override.d.ts +0 -18
  747. package/dist/plugin-sdk/agents/auth-profiles.d.ts +0 -8
  748. package/dist/plugin-sdk/agents/defaults.d.ts +0 -3
  749. package/dist/plugin-sdk/agents/provider-auth.d.ts +0 -40
  750. package/dist/plugin-sdk/auto-reply/model-runtime.d.ts +0 -17
  751. package/dist/plugin-sdk/config/model-input.d.ts +0 -9
  752. package/dist/plugin-sdk/config/zod-schema.agent-model.d.ts +0 -5
  753. package/dist/plugin-sdk/sessions/model-overrides.d.ts +0 -14
  754. package/dist/plugin-sdk/telegram/reasoning-lane-coordinator.d.ts +0 -18
  755. package/dist/plugins-BflZz0sp.js +0 -453
  756. package/dist/plugins-cli-DV82scUw.js +0 -798
  757. package/dist/plugins-cli-Qj1UyIZO.js +0 -793
  758. package/dist/plugins-woGRXMzU.js +0 -455
  759. package/dist/ports-DrruB2fK.js +0 -370
  760. package/dist/ports-GT1yV-Tg.js +0 -96
  761. package/dist/ports-NPqtlfp0.js +0 -316
  762. package/dist/ports-QMI4-F9m.js +0 -96
  763. package/dist/program-CQmIaRUI.js +0 -244
  764. package/dist/program-context-DEU6ACnL.js +0 -474
  765. package/dist/progress-CBkSaM6z.js +0 -124
  766. package/dist/prompt-Bllj1dhc.js +0 -21
  767. package/dist/prompt-select-styled-BhTN6zE2.js +0 -1650
  768. package/dist/prompt-select-styled-WopXnjIy.js +0 -1647
  769. package/dist/prompt-style-DVEm3BZW.js +0 -9
  770. package/dist/provider-dispatcher-B4QMe-I6.js +0 -659
  771. package/dist/provider-dispatcher-Bfauw6zz.js +0 -660
  772. package/dist/push-apns-C0LyG-WB.js +0 -713
  773. package/dist/push-apns-DuG95AKC.js +0 -711
  774. package/dist/pw-ai-D9n6-Wa6.js +0 -1906
  775. package/dist/pw-ai-T280E6Mn.js +0 -1910
  776. package/dist/qr-cli-DVECWTHN.js +0 -352
  777. package/dist/qr-cli-hSLixZCe.js +0 -347
  778. package/dist/redact-eZq1uwNK.js +0 -191
  779. package/dist/redact-snapshot-BZYLIqe-.js +0 -2028
  780. package/dist/redact-snapshot-C6hVx_9I.js +0 -2028
  781. package/dist/register.agent-Dmj-sgEl.js +0 -1043
  782. package/dist/register.agent-IspcBFeD.js +0 -286
  783. package/dist/register.configure-BqJEqyGL.js +0 -130
  784. package/dist/register.configure-PPkU_4Ea.js +0 -124
  785. package/dist/register.import-Bs-UkOs-.js +0 -27
  786. package/dist/register.import-DLng8g-e.js +0 -30
  787. package/dist/register.maintenance-BbpkJil3.js +0 -497
  788. package/dist/register.maintenance-C5nkOQxa.js +0 -494
  789. package/dist/register.message-C83Hi1b3.js +0 -681
  790. package/dist/register.message-D16isu4u.js +0 -686
  791. package/dist/register.onboard-B8EzX3wY.js +0 -257
  792. package/dist/register.onboard-CyRbr_0V.js +0 -262
  793. package/dist/register.setup-DWyoowAz.js +0 -109
  794. package/dist/register.setup-Dz6GwMnu.js +0 -114
  795. package/dist/register.status-health-sessions-CbQOfycz.js +0 -423
  796. package/dist/register.status-health-sessions-DXIWG47y.js +0 -669
  797. package/dist/register.subclis-DeGP5UPU.js +0 -267
  798. package/dist/replies-BKrzM0QI.js +0 -136
  799. package/dist/replies-Cl2gYBVt.js +0 -136
  800. package/dist/reply-CCu_DY64.js +0 -13900
  801. package/dist/reply-DSKC8kyS.js +0 -13897
  802. package/dist/reply-directives-BHJKp1Du.js +0 -182
  803. package/dist/reply-directives-CD2WycBM.js +0 -182
  804. package/dist/reply-payloads-D_BM1Anb.js +0 -527
  805. package/dist/reply-prefix-DBLCYiup.js +0 -38
  806. package/dist/reply-prefix-Q4DOJSn_.js +0 -38
  807. package/dist/resolve-route-CBVbY0xS.js +0 -249
  808. package/dist/resolve-route-DGEgTEif.js +0 -249
  809. package/dist/response-prefix-template-rVZQOViK.js +0 -136
  810. package/dist/response-prefix-template-up4REfuR.js +0 -136
  811. package/dist/retry-BhuXOEVR.js +0 -77
  812. package/dist/retry-DUjAzOBy.js +0 -77
  813. package/dist/run-main-Um5xhxla.js +0 -320
  814. package/dist/runner-yVJ4HB2K.js +0 -2294
  815. package/dist/runner-z92MWZ3m.js +0 -2294
  816. package/dist/runtime-guard-DZ_xuCc4.js +0 -60
  817. package/dist/secure-random-Pl9rPl0l.js +0 -44
  818. package/dist/security-cli-CdwbWZUj.js +0 -484
  819. package/dist/security-cli-DP5QJpa5.js +0 -478
  820. package/dist/send-B1_Ymjb9.js +0 -1778
  821. package/dist/send-B84axiIa.js +0 -29
  822. package/dist/send-BN_zYVlx.js +0 -547
  823. package/dist/send-BqVOxAmK.js +0 -1174
  824. package/dist/send-Bx9bUGav.js +0 -492
  825. package/dist/send-C3pdJ6p-.js +0 -2245
  826. package/dist/send-CBGSXjfD.js +0 -2245
  827. package/dist/send-CGXyTF22.js +0 -426
  828. package/dist/send-CKavrhXj.js +0 -11
  829. package/dist/send-D08Je6DL.js +0 -374
  830. package/dist/send-D1aYEG-k.js +0 -332
  831. package/dist/send-DHldI3gf.js +0 -492
  832. package/dist/send-D_DUQJ6H.js +0 -349
  833. package/dist/send-Ds63eF4a.js +0 -349
  834. package/dist/send-YRVDWfSs.js +0 -547
  835. package/dist/send-xnwty9cY.js +0 -1775
  836. package/dist/server-BQFoyCRR.js +0 -200
  837. package/dist/server-DhXw25Jq.js +0 -205
  838. package/dist/server-lifecycle-BjCCyD3w.js +0 -2437
  839. package/dist/server-lifecycle-Coyr6Lda.js +0 -2437
  840. package/dist/server-node-events-De4WZQQD.js +0 -393
  841. package/dist/server-node-events-dXXayuqY.js +0 -398
  842. package/dist/service-Bjqii5nW.js +0 -670
  843. package/dist/service-fp29z5Ww.js +0 -670
  844. package/dist/session-DBL5nHDy.js +0 -170
  845. package/dist/session-cost-usage-DX09eTPU.js +0 -627
  846. package/dist/session-cost-usage-yYi525j3.js +0 -627
  847. package/dist/session-dirs-Cj5xi7zX.js +0 -947
  848. package/dist/session-dirs-DdF6TDsE.js +0 -947
  849. package/dist/session-utils-CEtEq6bi.js +0 -625
  850. package/dist/session-utils-WmlWAs1r.js +0 -625
  851. package/dist/session-xKIW6gL2.js +0 -170
  852. package/dist/sessions--PykPynp.js +0 -2593
  853. package/dist/sessions-Bw4LRnSr.js +0 -252
  854. package/dist/ssrf-Ck9HDZpv.js +0 -183
  855. package/dist/ssrf-m7kFIobZ.js +0 -183
  856. package/dist/status-CtzYFLLF.js +0 -2072
  857. package/dist/status-DiN1cq2p.js +0 -2068
  858. package/dist/status.update-C55QM2xs.js +0 -79
  859. package/dist/status.update-CBmPXwYN.js +0 -79
  860. package/dist/store-C3tOpizT.js +0 -64
  861. package/dist/store-CPJXuhvQ.js +0 -53
  862. package/dist/store-SusmIfz7.js +0 -2595
  863. package/dist/store-v3P-OWhi.js +0 -64
  864. package/dist/subagent-registry-Db4Ho_2Y.js +0 -4858
  865. package/dist/subagent-registry-Du_j0Fnt.js +0 -4860
  866. package/dist/subsystem-BUXAJwPD.js +0 -1079
  867. package/dist/subsystem-COd61u0P.js +0 -1139
  868. package/dist/system-cli-DYCpLO3T.js +0 -75
  869. package/dist/system-cli-eAk5wVbP.js +0 -70
  870. package/dist/systemd-DSnlM3jX.js +0 -547
  871. package/dist/systemd-TfK8GuTx.js +0 -547
  872. package/dist/systemd-linger-Axnc1xCb.js +0 -75
  873. package/dist/systemd-linger-_0_-RY4v.js +0 -75
  874. package/dist/table-DPTzZyhu.js +0 -279
  875. package/dist/tables-DI5LGEr1.js +0 -55
  876. package/dist/tables-PxcSPSO0.js +0 -55
  877. package/dist/tables-TWiml6b1.js +0 -55
  878. package/dist/tailnet-CEudzG0i.js +0 -40
  879. package/dist/tailnet-PnMrjwGT.js +0 -40
  880. package/dist/tailscale-DTATQxAG.js +0 -230
  881. package/dist/tailscale-Dbyahx0J.js +0 -230
  882. package/dist/targets-C1NeMn2J.js +0 -220
  883. package/dist/targets-CcTME3bp.js +0 -46
  884. package/dist/targets-CmC5m7Ey.js +0 -53
  885. package/dist/targets-D-u6Kyio.js +0 -650
  886. package/dist/targets-D7OKVXMI.js +0 -650
  887. package/dist/targets-DB4vBpIQ.js +0 -2172
  888. package/dist/targets-DfqPGOmM.js +0 -2173
  889. package/dist/targets-DyybKefq.js +0 -53
  890. package/dist/targets-JCISV-hS.js +0 -120
  891. package/dist/tokens-DzFOtLlW.js +0 -21
  892. package/dist/tool-display-Br6mwaJc.js +0 -785
  893. package/dist/tool-display-sgNwLOBj.js +0 -785
  894. package/dist/tool-images-BNfIJ_Kj.js +0 -263
  895. package/dist/tool-images-kloBqxqK.js +0 -263
  896. package/dist/trash-DPi0aCCQ.js +0 -125
  897. package/dist/trash-D_Jd_yQZ.js +0 -125
  898. package/dist/tui-CHc0EfJO.js +0 -3392
  899. package/dist/tui-CyHwc2uX.js +0 -3392
  900. package/dist/tui-cli-BvwbrIYO.js +0 -63
  901. package/dist/tui-cli-C9I18SfW.js +0 -58
  902. package/dist/update-DxyjwCL2.js +0 -349
  903. package/dist/update-IX7vdqA8.js +0 -349
  904. package/dist/update-cli-CBeXUSzq.js +0 -1373
  905. package/dist/update-cli-DkAWmUrp.js +0 -1370
  906. package/dist/usage-CYlQW4M2.js +0 -5279
  907. package/dist/utils-LBKvDoPx.js +0 -631
  908. package/dist/web-BUYUdnRH.js +0 -3065
  909. package/dist/web-Dquzwqf4.js +0 -70
  910. package/dist/web-tS8diboh.js +0 -76
  911. package/dist/webhooks-cli-B7Vw3CMz.js +0 -333
  912. package/dist/webhooks-cli-BpZHQlVd.js +0 -328
  913. package/dist/whatsapp-actions-D5HXezjp.js +0 -128
  914. package/dist/whatsapp-actions-DaA291Ya.js +0 -122
  915. package/dist/widearea-dns-DSoaA-eH.js +0 -127
  916. package/dist/workspace-B4ZvVYT9.js +0 -447
  917. package/dist/workspace-B8PA8oxJ.js +0 -449
  918. /package/dist/{account-lookup-0KDSp5Mj.js → account-lookup-BOCzCnir.js} +0 -0
  919. /package/dist/{account-lookup-zvANGr2x.js → account-lookup-DGscKBsr.js} +0 -0
  920. /package/dist/{ansi-D04X81yq.js → ansi-aRwLYlzD.js} +0 -0
  921. /package/dist/{api-BeQMq2iS.js → api-BDff51CS.js} +0 -0
  922. /package/dist/{api-CxX8-gGz.js → api-qWSMsT8m.js} +0 -0
  923. /package/dist/{argv-Co-b9Zsc.js → argv-neJY_Hxm.js} +0 -0
  924. /package/dist/{brew-C4zKZsHX.js → brew-ByYl36Mt.js} +0 -0
  925. /package/dist/{brew-DbSbN8sD.js → brew-CMSQ5Fek.js} +0 -0
  926. /package/dist/{chat-type-CYPyHAj-.js → chat-type-BKe459rw.js} +0 -0
  927. /package/dist/{chat-type-DKb2TlGZ.js → chat-type-DyovJwCt.js} +0 -0
  928. /package/dist/{cleanup-utils-CwQvD73q.js → cleanup-utils-S_P5Jebv.js} +0 -0
  929. /package/dist/{cli-name-BicfmwQX.js → cli-name-CRLBidNP.js} +0 -0
  930. /package/dist/{cli-name-C6rJGl18.js → cli-name-Yv30OygA.js} +0 -0
  931. /package/dist/{cli-utils-BhXbz2UF.js → cli-utils-C5nQDfa6.js} +0 -0
  932. /package/dist/{cli-utils-DZe_rVkZ.js → cli-utils-KcEwAsuZ.js} +0 -0
  933. /package/dist/{client-C61M8zI3.js → client-C7B0uFB0.js} +0 -0
  934. /package/dist/{client-DdpmATKq.js → client-Cd2HNUX0.js} +0 -0
  935. /package/dist/{command-options-C4paWSGf.js → command-options-1bi44p_B.js} +0 -0
  936. /package/dist/{command-options-CA30lfLK.js → command-options-7y5Zrv4M.js} +0 -0
  937. /package/dist/{config-eval-CjGZtLwx.js → config-eval-CJtk3Msr.js} +0 -0
  938. /package/dist/{config-eval-H_wlEYIG.js → config-eval-DQIwdWg7.js} +0 -0
  939. /package/dist/{constants-ChptG3d7.js → constants--3PuQVaS.js} +0 -0
  940. /package/dist/{constants-DY6b-_Wl.js → constants-DNWjlxZ5.js} +0 -0
  941. /package/dist/{credentials-BHWUBHMd.js → credentials-BhnauW0K.js} +0 -0
  942. /package/dist/{credentials-DFsi1_e8.js → credentials-eZcqWNG_.js} +0 -0
  943. /package/dist/{daemon-runtime-CMnbwryP.js → daemon-runtime-99xh1fGv.js} +0 -0
  944. /package/dist/{daemon-runtime-CvqE4ysg.js → daemon-runtime-BOcdJaFy.js} +0 -0
  945. /package/dist/{dangerous-name-matching-BzmiLXmA.js → dangerous-name-matching-YeatnYIA.js} +0 -0
  946. /package/dist/{dangerous-name-matching-DaVRgwer.js → dangerous-name-matching-oVb1EqYT.js} +0 -0
  947. /package/dist/{dangerous-tools-BOLoCRv4.js → dangerous-tools-BMt8-6jE.js} +0 -0
  948. /package/dist/{dangerous-tools-Baq7Q-i6.js → dangerous-tools-CripTfYv.js} +0 -0
  949. /package/dist/{fetch-timeout-DTIN7CGM.js → fetch-timeout-Db3da8yR.js} +0 -0
  950. /package/dist/{fetch-timeout-DoySHqfO.js → fetch-timeout-l_6RdoMw.js} +0 -0
  951. /package/dist/{file-identity-BxlKD8Ys.js → file-identity-Bs9zZOi2.js} +0 -0
  952. /package/dist/{format-duration-CqUERz51.js → format-duration-Bo-Mxi3E.js} +0 -0
  953. /package/dist/{format-duration-Ct-yiwkS.js → format-duration-CfrJ5T8k.js} +0 -0
  954. /package/dist/{format-relative-79_Y1n2Y.js → format-relative-8cNYQsqb.js} +0 -0
  955. /package/dist/{format-relative-CxLpEQOX.js → format-relative-CZOlQ2pA.js} +0 -0
  956. /package/dist/{health-format-B_QRD8Si.js → health-format-WMRp1BbP.js} +0 -0
  957. /package/dist/{heartbeat-wake-LGEgcXjs.js → heartbeat-wake-BtRrOB-t.js} +0 -0
  958. /package/dist/{heartbeat-wake-Y97geucO.js → heartbeat-wake-eRINROYK.js} +0 -0
  959. /package/dist/{help-format-NNm_Ov4H.js → help-format-BEb0SPHF.js} +0 -0
  960. /package/dist/{helpers-BAsMXprO.js → helpers-BJtPtu_2.js} +0 -0
  961. /package/dist/{helpers-DLgbkcEn.js → helpers-Cj6f8SPZ.js} +0 -0
  962. /package/dist/{helpers-R7bU5IBz.js → helpers-ryxLx-aM.js} +0 -0
  963. /package/dist/{host-env-security-szwfmhC4.js → host-env-security-CbiODGvQ.js} +0 -0
  964. /package/dist/{input-provenance-Bn6thJNm.js → input-provenance-CPhdY-0F.js} +0 -0
  965. /package/dist/{input-provenance-xUsSMOsz.js → input-provenance-DUNEQoFM.js} +0 -0
  966. /package/dist/{ip-C9q3Oq20.js → ip-BAhS4rY2.js} +0 -0
  967. /package/dist/{ip-D0zgNmBV.js → ip-BcdPcLiP.js} +0 -0
  968. /package/dist/{is-main-DN8-sNR5.js → is-main-KcWqINzy.js} +0 -0
  969. /package/dist/{json-file-ChO_R9yh.js → json-file-BVvmrQG3.js} +0 -0
  970. /package/dist/{json-file-B7l5-Xhr.js → json-file-Dbg7nZg1.js} +0 -0
  971. /package/dist/{json-files-CmpYSF4G.js → json-files-DSKEdz7x.js} +0 -0
  972. /package/dist/{lanes-ByWMUgrz.js → lanes-Brd-nf-Z.js} +0 -0
  973. /package/dist/{lanes-cHJ5arWg.js → lanes-COs3zODW.js} +0 -0
  974. /package/dist/{links-Bz4V7R_p.js → links-gse8sWn-.js} +0 -0
  975. /package/dist/{location-DBWCGNLq.js → location-D1FM_C63.js} +0 -0
  976. /package/dist/{location-GbZ0bBRU.js → location-LuzkqHGi.js} +0 -0
  977. /package/dist/{logger-DyL5G2DO.js → logger-BMP_j_Lx.js} +0 -0
  978. /package/dist/{logger-BWMPnILd.js → logger-DWbwXLjl.js} +0 -0
  979. /package/dist/{logger-GvipVDfh.js → logger-DXCDb7qu.js} +0 -0
  980. /package/dist/{logging-D8-Kozjc.js → logging-CAgCb3n3.js} +0 -0
  981. /package/dist/{message-channel-uWMAiywE.js → message-channel-D72Bc6Tb.js} +0 -0
  982. /package/dist/{mime-BS3jhcZE.js → mime-Cqg1jjia.js} +0 -0
  983. /package/dist/{mime-Cxh_64P6.js → mime-D4bQLMJL.js} +0 -0
  984. /package/dist/{mutable-allowlist-detectors-DiZDtmlZ.js → mutable-allowlist-detectors-NtI6s4TE.js} +0 -0
  985. /package/dist/{mutable-allowlist-detectors-U5ThQr9V.js → mutable-allowlist-detectors-nAmo9v5u.js} +0 -0
  986. /package/dist/{node-cli-Uf6lAntf.js → node-cli-bNJbha3z.js} +0 -0
  987. /package/dist/{parse-log-line-enq8pduH.js → parse-log-line-BY9Vz72K.js} +0 -0
  988. /package/dist/{parse-log-line-mz9TG6ig.js → parse-log-line-BrrE4onI.js} +0 -0
  989. /package/dist/{parse-timeout-BMP8a0_a.js → parse-timeout-Dfyln-4M.js} +0 -0
  990. /package/dist/{path-guards-CIx4hURU.js → path-guards-D9LU0y9L.js} +0 -0
  991. /package/dist/{path-guards-CrQOUlsq.js → path-guards-crZaTVvq.js} +0 -0
  992. /package/dist/plugin-sdk/{agents → auth}/api-key-rotation.d.ts +0 -0
  993. /package/dist/plugin-sdk/{agents/auth-profiles → auth}/paths.d.ts +0 -0
  994. /package/dist/plugin-sdk/{agents/auth-profiles → auth}/profiles.d.ts +0 -0
  995. /package/dist/plugin-sdk/{agents/auth-profiles → auth}/store.d.ts +0 -0
  996. /package/dist/plugin-sdk/{agents/auth-profiles → auth}/types.d.ts +0 -0
  997. /package/dist/{plugins-allowlist-BbTQ5Z2k.js → plugins-allowlist-CD4oIJNk.js} +0 -0
  998. /package/dist/{plugins-allowlist-C20oaESO.js → plugins-allowlist-CUhk3GDh.js} +0 -0
  999. /package/dist/{polls-B0CCBDeR.js → polls-ChvH1OIW.js} +0 -0
  1000. /package/dist/{polls-CwwHzYBM.js → polls-Dn1C2d1-.js} +0 -0
  1001. /package/dist/{ports-lsof-Wteul3ju.js → ports-lsof-BDQWExpn.js} +0 -0
  1002. /package/dist/{process-scoped-map-CV9kDvfG.js → process-scoped-map-BwUkYFQV.js} +0 -0
  1003. /package/dist/{process-scoped-map-PEvnG75N.js → process-scoped-map-CBWcUvTa.js} +0 -0
  1004. /package/dist/{program-context-jqeI5alP.js → program-context-DtsEOsdM.js} +0 -0
  1005. /package/dist/{progress-C1kUfYL-.js → progress-BjGCAXH7.js} +0 -0
  1006. /package/dist/{prompt-Yn2yClg1.js → prompt-FIISMuNm.js} +0 -0
  1007. /package/dist/{prompt-style-DjEYC_s-.js → prompt-style-DL64_X-p.js} +0 -0
  1008. /package/dist/{provider-utils-3JTMJroG.js → provider-utils-DiLhkKQp.js} +0 -0
  1009. /package/dist/{proxy-DL3MD6-P.js → proxy-DUTF0OYE.js} +0 -0
  1010. /package/dist/{proxy-DpNv2cSV.js → proxy-Dv0sbx6A.js} +0 -0
  1011. /package/dist/{pw-ai-state-CGfLv6nV.js → pw-ai-state-DKhOTqDv.js} +0 -0
  1012. /package/dist/{pw-ai-state-Dynx20hr.js → pw-ai-state-kkp06zyZ.js} +0 -0
  1013. /package/dist/{redact-Dx1Fue21.js → redact-BTeK8lMZ.js} +0 -0
  1014. /package/dist/{redact-identifier-BTIWtaa-.js → redact-identifier-F6t5pklx.js} +0 -0
  1015. /package/dist/{redact-identifier-CAagcfWA.js → redact-identifier-VdOrq-IK.js} +0 -0
  1016. /package/dist/{remoteclaw-root-C2HV2VeC.js → remoteclaw-root-DF8m3X4C.js} +0 -0
  1017. /package/dist/{remoteclaw-root-DybYl8PL.js → remoteclaw-root-rJHOCwzo.js} +0 -0
  1018. /package/dist/{render-CCLsW6Lz.js → render-e7fENCYH.js} +0 -0
  1019. /package/dist/{render-uf6PvGMV.js → render-qcqmrHse.js} +0 -0
  1020. /package/dist/{retry-DnqPAqWp.js → retry-CwZiwLDN.js} +0 -0
  1021. /package/dist/{runtime-DJNp29jv.js → runtime-Ds3E9SqF.js} +0 -0
  1022. /package/dist/{runtime-guard-U-ewY_QH.js → runtime-guard-CdJVmJc0.js} +0 -0
  1023. /package/dist/{secret-equal-BbHdTtqY.js → secret-equal-CDUVxXmp.js} +0 -0
  1024. /package/dist/{secret-equal-CXJEZiWb.js → secret-equal-d3sEnK98.js} +0 -0
  1025. /package/dist/{secure-random-CS2mSdTn.js → secure-random-CJtykx_p.js} +0 -0
  1026. /package/dist/{secure-random-_dzDDlFo.js → secure-random-y6N6Gted.js} +0 -0
  1027. /package/dist/{session-key-5YLnn_qf.js → session-key-BF-9YzxC.js} +0 -0
  1028. /package/dist/{stagger-BXv_apuy.js → stagger-B-_Wnofy.js} +0 -0
  1029. /package/dist/{stagger-MI9gd2rQ.js → stagger-CjkdqPuN.js} +0 -0
  1030. /package/dist/{status-BmtCS3T1.js → status-BFmH9Uge.js} +0 -0
  1031. /package/dist/{status-BrwHRn2B.js → status-BIupzBh9.js} +0 -0
  1032. /package/dist/{strip-inbound-meta-DjKcSFaW.js → strip-inbound-meta-BNXRYvmY.js} +0 -0
  1033. /package/dist/{strip-inbound-meta-jy3bkUab.js → strip-inbound-meta-BtNFmc6V.js} +0 -0
  1034. /package/dist/{table-C1rdyYl9.js → table-Au5EeKD6.js} +0 -0
  1035. /package/dist/{target-errors-BDpPcwh5.js → target-errors-B6YON-5k.js} +0 -0
  1036. /package/dist/{target-errors-DdIAPcMM.js → target-errors-sPHoHj73.js} +0 -0
  1037. /package/dist/{targets-D-qLBpTA.js → targets-BtGRUQMa.js} +0 -0
  1038. /package/dist/{targets-BMenhVHg.js → targets-D3r6Zgic.js} +0 -0
  1039. /package/dist/{targets-C-2xwh9f.js → targets-DDdPVd12.js} +0 -0
  1040. /package/dist/{targets-UncQvCVs.js → targets-Ds5eT_RZ.js} +0 -0
  1041. /package/dist/{targets-D7PT_rdO.js → targets-DtvPW-B8.js} +0 -0
  1042. /package/dist/{text-format-BQ3z_OXA.js → text-format-CFm4X8Ze.js} +0 -0
  1043. /package/dist/{text-format-oWqzVmah.js → text-format-KHU3KzvQ.js} +0 -0
  1044. /package/dist/{tokens-B-jmvNR9.js → tokens-BGw4xHhW.js} +0 -0
  1045. /package/dist/{usage-BdhBT0Vz.js → usage-BEjWlD9A.js} +0 -0
  1046. /package/dist/{usage-format-C3mNLfhI.js → usage-format-Cx3JveFn.js} +0 -0
  1047. /package/dist/{usage-format-DAaPzr_z.js → usage-format-D-ZaYT_e.js} +0 -0
  1048. /package/dist/{usage-BtQcAnf6.js → usage-o8O_TxA-.js} +0 -0
  1049. /package/dist/{widearea-dns-CsmBVbez.js → widearea-dns-DUDYT3z2.js} +0 -0
  1050. /package/dist/{workspace-BzPeZDew.js → workspace-9__vtmnA.js} +0 -0
  1051. /package/dist/{wsl-B_sPlzWw.js → wsl-BLrG__iS.js} +0 -0
  1052. /package/dist/{wsl-BCnYV9O0.js → wsl-C2dudsWt.js} +0 -0
@@ -0,0 +1,1414 @@
1
+ import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
+ import { Ct as theme, St as isRich, _ as defaultRuntime, ft as info, n as isTruthyEnvValue, o as createSubsystemLogger } from "./entry.js";
3
+ import { i as loadConfig } from "./config-BupC6eiJ.js";
4
+ import { l as resolveAgentIdFromSessionKey, p as toAgentStoreSessionKey, s as normalizeAgentId } from "./session-key-BF-9YzxC.js";
5
+ import { s as parseDurationMs } from "./zod-schema-B9RGngMW.js";
6
+ import { c as resolveDefaultAgentId, i as resolveAgentConfig, o as resolveAgentWorkspaceDir } from "./agent-scope-DxqtYjuJ.js";
7
+ import { K as canonicalizeMainSessionAlias, g as updateSessionStore, l as loadSessionStore, m as saveSessionStore, q as resolveAgentMainSessionKey } from "./sessions-Bwu0l_CG.js";
8
+ import { n as listChannelPlugins, t as getChannelPlugin } from "./plugins-B4waLB_f.js";
9
+ import { a as resolvePreferredAccountId, t as buildChannelAccountBindings } from "./bindings-6KojDoIi.js";
10
+ import { c as resolveSessionFilePath, m as resolveStorePath } from "./chat-envelope-vJJUdDE7.js";
11
+ import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-CMDcRlGW.js";
12
+ import { r as CommandLane } from "./lanes-Brd-nf-Z.js";
13
+ import { tt as getQueueSize } from "./subagent-registry-HjR1tO3-.js";
14
+ import { a as resolveEffectiveMessagesConfig } from "./response-prefix-template-Dckjdftg.js";
15
+ import { p as resolveUserTimezone, t as getReplyFromConfig } from "./reply-CUyafs4J.js";
16
+ import { n as formatErrorMessage } from "./errors-DdLfwEVi.js";
17
+ import { n as resolveHeartbeatSenderContext, t as resolveHeartbeatDeliveryTarget, x as peekSystemEventEntries } from "./targets-C1Tt0ZWd.js";
18
+ import { a as resolveIndicatorType, c as resolveHeartbeatReplyPayload, l as appendCronStyleCurrentTimeLine, n as emitHeartbeatEvent, o as DEFAULT_HEARTBEAT_EVERY, s as resolveHeartbeatPrompt$1, t as resolveHeartbeatVisibility } from "./heartbeat-visibility-C5Vxudi9.js";
19
+ import { n as withProgress } from "./progress-BjGCAXH7.js";
20
+ import { t as resolveChannelDefaultAccountId } from "./helpers-B4NWktS8.js";
21
+ import { t as deliverOutboundPayloads } from "./deliver-F9ed3dhp.js";
22
+ import { n as setHeartbeatWakeHandler, r as resolveHeartbeatReasonKind, t as requestHeartbeatNow } from "./heartbeat-wake-BtRrOB-t.js";
23
+ import path from "node:path";
24
+ import fsp from "node:fs/promises";
25
+
26
+ //#region src/infra/heartbeat-active-hours.ts
27
+ const ACTIVE_HOURS_TIME_PATTERN = /^(?:([01]\d|2[0-3]):([0-5]\d)|24:00)$/;
28
+ function resolveActiveHoursTimezone(cfg, raw) {
29
+ const trimmed = raw?.trim();
30
+ if (!trimmed || trimmed === "user") return resolveUserTimezone(cfg.agents?.defaults?.userTimezone);
31
+ if (trimmed === "local") return Intl.DateTimeFormat().resolvedOptions().timeZone?.trim() || "UTC";
32
+ try {
33
+ new Intl.DateTimeFormat("en-US", { timeZone: trimmed }).format(/* @__PURE__ */ new Date());
34
+ return trimmed;
35
+ } catch {
36
+ return resolveUserTimezone(cfg.agents?.defaults?.userTimezone);
37
+ }
38
+ }
39
+ function parseActiveHoursTime(opts, raw) {
40
+ if (!raw || !ACTIVE_HOURS_TIME_PATTERN.test(raw)) return null;
41
+ const [hourStr, minuteStr] = raw.split(":");
42
+ const hour = Number(hourStr);
43
+ const minute = Number(minuteStr);
44
+ if (!Number.isFinite(hour) || !Number.isFinite(minute)) return null;
45
+ if (hour === 24) {
46
+ if (!opts.allow24 || minute !== 0) return null;
47
+ return 1440;
48
+ }
49
+ return hour * 60 + minute;
50
+ }
51
+ function resolveMinutesInTimeZone(nowMs, timeZone) {
52
+ try {
53
+ const parts = new Intl.DateTimeFormat("en-US", {
54
+ timeZone,
55
+ hour: "2-digit",
56
+ minute: "2-digit",
57
+ hourCycle: "h23"
58
+ }).formatToParts(new Date(nowMs));
59
+ const map = {};
60
+ for (const part of parts) if (part.type !== "literal") map[part.type] = part.value;
61
+ const hour = Number(map.hour);
62
+ const minute = Number(map.minute);
63
+ if (!Number.isFinite(hour) || !Number.isFinite(minute)) return null;
64
+ return hour * 60 + minute;
65
+ } catch {
66
+ return null;
67
+ }
68
+ }
69
+ function isWithinActiveHours(cfg, heartbeat, nowMs) {
70
+ const active = heartbeat?.activeHours;
71
+ if (!active) return true;
72
+ const startMin = parseActiveHoursTime({ allow24: false }, active.start);
73
+ const endMin = parseActiveHoursTime({ allow24: true }, active.end);
74
+ if (startMin === null || endMin === null) return true;
75
+ if (startMin === endMin) return false;
76
+ const timeZone = resolveActiveHoursTimezone(cfg, active.timezone);
77
+ const currentMin = resolveMinutesInTimeZone(nowMs ?? Date.now(), timeZone);
78
+ if (currentMin === null) return true;
79
+ if (endMin > startMin) return currentMin >= startMin && currentMin < endMin;
80
+ return currentMin >= startMin || currentMin < endMin;
81
+ }
82
+
83
+ //#endregion
84
+ //#region src/infra/heartbeat-events-filter.ts
85
+ function buildCronEventPrompt(pendingEvents, opts) {
86
+ const deliverToUser = opts?.deliverToUser ?? true;
87
+ const eventText = pendingEvents.join("\n").trim();
88
+ if (!eventText) {
89
+ if (!deliverToUser) return "A scheduled cron event was triggered, but no event content was found. Handle this internally and report using the heartbeat_report tool when nothing needs user-facing follow-up.";
90
+ return "A scheduled cron event was triggered, but no event content was found. Report using the heartbeat_report tool.";
91
+ }
92
+ if (!deliverToUser) return "A scheduled reminder has been triggered. The reminder content is:\n\n" + eventText + "\n\nHandle this reminder internally. Do not relay it to the user unless explicitly requested.";
93
+ return "A scheduled reminder has been triggered. The reminder content is:\n\n" + eventText + "\n\nPlease relay this reminder to the user in a helpful and friendly way.";
94
+ }
95
+ function buildExecEventPrompt(opts) {
96
+ if (!(opts?.deliverToUser ?? true)) return "An async command you ran earlier has completed. The result is shown in the system messages above. Handle the result internally. Do not relay it to the user unless explicitly requested.";
97
+ return "An async command you ran earlier has completed. The result is shown in the system messages above. Please relay the command output to the user in a helpful way. If the command succeeded, share the relevant output. If it failed, explain what went wrong.";
98
+ }
99
+ function isHeartbeatNoiseEvent(evt) {
100
+ const lower = evt.trim().toLowerCase();
101
+ if (!lower) return false;
102
+ return lower.includes("heartbeat poll") || lower.includes("heartbeat wake");
103
+ }
104
+ function isExecCompletionEvent(evt) {
105
+ return evt.toLowerCase().includes("exec finished");
106
+ }
107
+ function isCronSystemEvent(evt) {
108
+ if (!evt.trim()) return false;
109
+ return !isHeartbeatNoiseEvent(evt) && !isExecCompletionEvent(evt);
110
+ }
111
+
112
+ //#endregion
113
+ //#region src/infra/heartbeat-runner.ts
114
+ const log = createSubsystemLogger("gateway/heartbeat");
115
+ let heartbeatsEnabled = true;
116
+ function setHeartbeatsEnabled(enabled) {
117
+ heartbeatsEnabled = enabled;
118
+ }
119
+ const DEFAULT_HEARTBEAT_TARGET = "none";
120
+ function hasExplicitHeartbeatAgents(cfg) {
121
+ return (cfg.agents?.list ?? []).some((entry) => Boolean(entry?.heartbeat));
122
+ }
123
+ function isHeartbeatEnabledForAgent(cfg, agentId) {
124
+ const resolvedAgentId = normalizeAgentId(agentId ?? resolveDefaultAgentId(cfg));
125
+ const list = cfg.agents?.list ?? [];
126
+ if (hasExplicitHeartbeatAgents(cfg)) return list.some((entry) => Boolean(entry?.heartbeat) && normalizeAgentId(entry?.id) === resolvedAgentId);
127
+ return resolvedAgentId === resolveDefaultAgentId(cfg);
128
+ }
129
+ function resolveHeartbeatConfig(cfg, agentId) {
130
+ const defaults = cfg.agents?.defaults?.heartbeat;
131
+ if (!agentId) return defaults;
132
+ const overrides = resolveAgentConfig(cfg, agentId)?.heartbeat;
133
+ if (!defaults && !overrides) return overrides;
134
+ return {
135
+ ...defaults,
136
+ ...overrides
137
+ };
138
+ }
139
+ function resolveHeartbeatSummaryForAgent(cfg, agentId) {
140
+ const defaults = cfg.agents?.defaults?.heartbeat;
141
+ const overrides = agentId ? resolveAgentConfig(cfg, agentId)?.heartbeat : void 0;
142
+ if (!isHeartbeatEnabledForAgent(cfg, agentId)) return {
143
+ enabled: false,
144
+ every: "disabled",
145
+ everyMs: null,
146
+ prompt: defaults?.prompt?.trim() || (defaults?.file ? `[file: ${defaults.file}]` : ""),
147
+ target: defaults?.target ?? DEFAULT_HEARTBEAT_TARGET,
148
+ model: defaults?.model
149
+ };
150
+ const merged = defaults || overrides ? {
151
+ ...defaults,
152
+ ...overrides
153
+ } : void 0;
154
+ const every = merged?.every ?? defaults?.every ?? overrides?.every ?? DEFAULT_HEARTBEAT_EVERY;
155
+ const everyMs = resolveHeartbeatIntervalMs(cfg, void 0, merged);
156
+ const rawPrompt = merged?.prompt ?? defaults?.prompt ?? overrides?.prompt;
157
+ const rawFile = merged?.file ?? defaults?.file ?? overrides?.file;
158
+ return {
159
+ enabled: true,
160
+ every,
161
+ everyMs,
162
+ prompt: rawPrompt?.trim() || (rawFile ? `[file: ${rawFile}]` : ""),
163
+ target: merged?.target ?? defaults?.target ?? overrides?.target ?? DEFAULT_HEARTBEAT_TARGET,
164
+ model: merged?.model ?? defaults?.model ?? overrides?.model
165
+ };
166
+ }
167
+ function resolveHeartbeatAgents(cfg) {
168
+ const list = cfg.agents?.list ?? [];
169
+ if (hasExplicitHeartbeatAgents(cfg)) return list.filter((entry) => entry?.heartbeat).map((entry) => {
170
+ const id = normalizeAgentId(entry.id);
171
+ return {
172
+ agentId: id,
173
+ heartbeat: resolveHeartbeatConfig(cfg, id)
174
+ };
175
+ }).filter((entry) => entry.agentId);
176
+ const fallbackId = resolveDefaultAgentId(cfg);
177
+ return [{
178
+ agentId: fallbackId,
179
+ heartbeat: resolveHeartbeatConfig(cfg, fallbackId)
180
+ }];
181
+ }
182
+ function resolveHeartbeatIntervalMs(cfg, overrideEvery, heartbeat) {
183
+ const raw = overrideEvery ?? heartbeat?.every ?? cfg.agents?.defaults?.heartbeat?.every ?? DEFAULT_HEARTBEAT_EVERY;
184
+ if (!raw) return null;
185
+ const trimmed = String(raw).trim();
186
+ if (!trimmed) return null;
187
+ let ms;
188
+ try {
189
+ ms = parseDurationMs(trimmed, { defaultUnit: "m" });
190
+ } catch {
191
+ return null;
192
+ }
193
+ if (ms <= 0) return null;
194
+ return ms;
195
+ }
196
+ async function resolveHeartbeatPrompt(cfg, heartbeat, agentId) {
197
+ const defaults = cfg.agents?.defaults?.heartbeat;
198
+ return resolveHeartbeatPrompt$1({
199
+ prompt: heartbeat?.prompt ?? defaults?.prompt,
200
+ file: heartbeat?.file ?? defaults?.file,
201
+ workspaceDir: resolveAgentWorkspaceDir(cfg, agentId ?? resolveDefaultAgentId(cfg))
202
+ });
203
+ }
204
+ function resolveHeartbeatSession(cfg, agentId, heartbeat, forcedSessionKey) {
205
+ const sessionCfg = cfg.session;
206
+ const scope = sessionCfg?.scope ?? "per-sender";
207
+ const resolvedAgentId = normalizeAgentId(agentId ?? resolveDefaultAgentId(cfg));
208
+ const mainSessionKey = scope === "global" ? "global" : resolveAgentMainSessionKey({
209
+ cfg,
210
+ agentId: resolvedAgentId
211
+ });
212
+ const storeAgentId = scope === "global" ? resolveDefaultAgentId(cfg) : resolvedAgentId;
213
+ const storePath = resolveStorePath(sessionCfg?.store, { agentId: storeAgentId });
214
+ const store = loadSessionStore(storePath);
215
+ const mainEntry = store[mainSessionKey];
216
+ if (scope === "global") return {
217
+ sessionKey: mainSessionKey,
218
+ storePath,
219
+ store,
220
+ entry: mainEntry
221
+ };
222
+ const forced = forcedSessionKey?.trim();
223
+ if (forced) {
224
+ const forcedCanonical = canonicalizeMainSessionAlias({
225
+ cfg,
226
+ agentId: resolvedAgentId,
227
+ sessionKey: toAgentStoreSessionKey({
228
+ agentId: resolvedAgentId,
229
+ requestKey: forced,
230
+ mainKey: cfg.session?.mainKey
231
+ })
232
+ });
233
+ if (forcedCanonical !== "global") {
234
+ if (resolveAgentIdFromSessionKey(forcedCanonical) === normalizeAgentId(resolvedAgentId)) return {
235
+ sessionKey: forcedCanonical,
236
+ storePath,
237
+ store,
238
+ entry: store[forcedCanonical]
239
+ };
240
+ }
241
+ }
242
+ const trimmed = heartbeat?.session?.trim() ?? "";
243
+ if (!trimmed) return {
244
+ sessionKey: mainSessionKey,
245
+ storePath,
246
+ store,
247
+ entry: mainEntry
248
+ };
249
+ const normalized = trimmed.toLowerCase();
250
+ if (normalized === "main" || normalized === "global") return {
251
+ sessionKey: mainSessionKey,
252
+ storePath,
253
+ store,
254
+ entry: mainEntry
255
+ };
256
+ const canonical = canonicalizeMainSessionAlias({
257
+ cfg,
258
+ agentId: resolvedAgentId,
259
+ sessionKey: toAgentStoreSessionKey({
260
+ agentId: resolvedAgentId,
261
+ requestKey: trimmed,
262
+ mainKey: cfg.session?.mainKey
263
+ })
264
+ });
265
+ if (canonical !== "global") {
266
+ if (resolveAgentIdFromSessionKey(canonical) === normalizeAgentId(resolvedAgentId)) return {
267
+ sessionKey: canonical,
268
+ storePath,
269
+ store,
270
+ entry: store[canonical]
271
+ };
272
+ }
273
+ return {
274
+ sessionKey: mainSessionKey,
275
+ storePath,
276
+ store,
277
+ entry: mainEntry
278
+ };
279
+ }
280
+ async function restoreHeartbeatUpdatedAt(params) {
281
+ const { storePath, sessionKey, updatedAt } = params;
282
+ if (typeof updatedAt !== "number") return;
283
+ const entry = loadSessionStore(storePath)[sessionKey];
284
+ if (!entry) return;
285
+ const nextUpdatedAt = Math.max(entry.updatedAt ?? 0, updatedAt);
286
+ if (entry.updatedAt === nextUpdatedAt) return;
287
+ await updateSessionStore(storePath, (nextStore) => {
288
+ const nextEntry = nextStore[sessionKey] ?? entry;
289
+ if (!nextEntry) return;
290
+ const resolvedUpdatedAt = Math.max(nextEntry.updatedAt ?? 0, updatedAt);
291
+ if (nextEntry.updatedAt === resolvedUpdatedAt) return;
292
+ nextStore[sessionKey] = {
293
+ ...nextEntry,
294
+ updatedAt: resolvedUpdatedAt
295
+ };
296
+ });
297
+ }
298
+ /**
299
+ * Prune heartbeat transcript entries by truncating the file back to a previous size.
300
+ * This removes the user+assistant turns that were written during a HEARTBEAT_OK run,
301
+ * preventing context pollution from zero-information exchanges.
302
+ */
303
+ async function pruneHeartbeatTranscript(params) {
304
+ const { transcriptPath, preHeartbeatSize } = params;
305
+ if (!transcriptPath || typeof preHeartbeatSize !== "number" || preHeartbeatSize < 0) return;
306
+ try {
307
+ if ((await fsp.stat(transcriptPath)).size > preHeartbeatSize) await fsp.truncate(transcriptPath, preHeartbeatSize);
308
+ } catch {}
309
+ }
310
+ /**
311
+ * Get the transcript file path and its current size before a heartbeat run.
312
+ * Returns undefined values if the session or transcript doesn't exist yet.
313
+ */
314
+ async function captureTranscriptState(params) {
315
+ const { storePath, sessionKey, agentId } = params;
316
+ try {
317
+ const entry = loadSessionStore(storePath)[sessionKey];
318
+ if (!entry?.sessionId) return {};
319
+ const transcriptPath = resolveSessionFilePath(entry.sessionId, entry, {
320
+ agentId,
321
+ sessionsDir: path.dirname(storePath)
322
+ });
323
+ return {
324
+ transcriptPath,
325
+ preHeartbeatSize: (await fsp.stat(transcriptPath)).size
326
+ };
327
+ } catch {
328
+ return {};
329
+ }
330
+ }
331
+ function normalizeHeartbeatReply(payload, responsePrefix) {
332
+ const report = payload.heartbeatReport;
333
+ const rawText = typeof payload.text === "string" ? payload.text.trim() : "";
334
+ const hasMedia = Boolean(payload.mediaUrl || (payload.mediaUrls?.length ?? 0) > 0);
335
+ if (report) {
336
+ if (!report.anythingDone) return {
337
+ shouldSkip: true,
338
+ text: report.summary?.trim() ?? "",
339
+ hasMedia
340
+ };
341
+ let finalText = report.summary?.trim() || "Agent performed actions";
342
+ if (responsePrefix && finalText && !finalText.startsWith(responsePrefix)) finalText = `${responsePrefix} ${finalText}`;
343
+ return {
344
+ shouldSkip: false,
345
+ text: finalText,
346
+ hasMedia
347
+ };
348
+ }
349
+ if (!rawText && !hasMedia) return {
350
+ shouldSkip: true,
351
+ text: "",
352
+ hasMedia
353
+ };
354
+ let finalText = rawText;
355
+ if (responsePrefix && finalText && !finalText.startsWith(responsePrefix)) finalText = `${responsePrefix} ${finalText}`;
356
+ return {
357
+ shouldSkip: false,
358
+ text: finalText,
359
+ hasMedia
360
+ };
361
+ }
362
+ function resolveHeartbeatReasonFlags(reason) {
363
+ const reasonKind = resolveHeartbeatReasonKind(reason);
364
+ return {
365
+ isExecEventReason: reasonKind === "exec-event",
366
+ isCronEventReason: reasonKind === "cron",
367
+ isWakeReason: reasonKind === "wake" || reasonKind === "hook"
368
+ };
369
+ }
370
+ async function resolveHeartbeatPreflight(params) {
371
+ const reasonFlags = resolveHeartbeatReasonFlags(params.reason);
372
+ const session = resolveHeartbeatSession(params.cfg, params.agentId, params.heartbeat, params.forcedSessionKey);
373
+ const pendingEventEntries = peekSystemEventEntries(session.sessionKey);
374
+ const hasTaggedCronEvents = pendingEventEntries.some((event) => event.contextKey?.startsWith("cron:"));
375
+ const shouldInspectPendingEvents = reasonFlags.isExecEventReason || reasonFlags.isCronEventReason || hasTaggedCronEvents;
376
+ return {
377
+ ...reasonFlags,
378
+ session,
379
+ pendingEventEntries,
380
+ hasTaggedCronEvents,
381
+ shouldInspectPendingEvents
382
+ };
383
+ }
384
+ async function resolveHeartbeatRunPrompt(params) {
385
+ const pendingEventEntries = params.preflight.pendingEventEntries;
386
+ const pendingEvents = params.preflight.shouldInspectPendingEvents ? pendingEventEntries.map((event) => event.text) : [];
387
+ const cronEvents = pendingEventEntries.filter((event) => (params.preflight.isCronEventReason || event.contextKey?.startsWith("cron:")) && isCronSystemEvent(event.text)).map((event) => event.text);
388
+ const hasExecCompletion = pendingEvents.some(isExecCompletionEvent);
389
+ const hasCronEvents = cronEvents.length > 0;
390
+ return {
391
+ prompt: hasExecCompletion ? buildExecEventPrompt({ deliverToUser: params.canRelayToUser }) : hasCronEvents ? buildCronEventPrompt(cronEvents, { deliverToUser: params.canRelayToUser }) : await resolveHeartbeatPrompt(params.cfg, params.heartbeat, params.agentId),
392
+ hasExecCompletion,
393
+ hasCronEvents
394
+ };
395
+ }
396
+ async function runHeartbeatOnce(opts) {
397
+ const cfg = opts.cfg ?? loadConfig();
398
+ const agentId = normalizeAgentId(opts.agentId ?? resolveDefaultAgentId(cfg));
399
+ const heartbeat = opts.heartbeat ?? resolveHeartbeatConfig(cfg, agentId);
400
+ if (!heartbeatsEnabled) return {
401
+ status: "skipped",
402
+ reason: "disabled"
403
+ };
404
+ if (!isHeartbeatEnabledForAgent(cfg, agentId)) return {
405
+ status: "skipped",
406
+ reason: "disabled"
407
+ };
408
+ if (!resolveHeartbeatIntervalMs(cfg, void 0, heartbeat)) return {
409
+ status: "skipped",
410
+ reason: "disabled"
411
+ };
412
+ const startedAt = opts.deps?.nowMs?.() ?? Date.now();
413
+ if (!isWithinActiveHours(cfg, heartbeat, startedAt)) return {
414
+ status: "skipped",
415
+ reason: "quiet-hours"
416
+ };
417
+ if ((opts.deps?.getQueueSize ?? getQueueSize)(CommandLane.Main) > 0) return {
418
+ status: "skipped",
419
+ reason: "requests-in-flight"
420
+ };
421
+ const preflight = await resolveHeartbeatPreflight({
422
+ cfg,
423
+ agentId,
424
+ heartbeat,
425
+ forcedSessionKey: opts.sessionKey,
426
+ reason: opts.reason
427
+ });
428
+ const { entry, sessionKey, storePath } = preflight.session;
429
+ const previousUpdatedAt = entry?.updatedAt;
430
+ const delivery = resolveHeartbeatDeliveryTarget({
431
+ cfg,
432
+ entry,
433
+ heartbeat
434
+ });
435
+ const heartbeatAccountId = heartbeat?.accountId?.trim();
436
+ if (delivery.reason === "unknown-account") log.warn("heartbeat: unknown accountId", {
437
+ accountId: delivery.accountId ?? heartbeatAccountId ?? null,
438
+ target: heartbeat?.target ?? "none"
439
+ });
440
+ else if (heartbeatAccountId) log.info("heartbeat: using explicit accountId", {
441
+ accountId: delivery.accountId ?? heartbeatAccountId,
442
+ target: heartbeat?.target ?? "none",
443
+ channel: delivery.channel
444
+ });
445
+ const visibility = delivery.channel !== "none" ? resolveHeartbeatVisibility({
446
+ cfg,
447
+ channel: delivery.channel,
448
+ accountId: delivery.accountId
449
+ }) : {
450
+ showOk: false,
451
+ showAlerts: true,
452
+ useIndicator: true
453
+ };
454
+ const { sender } = resolveHeartbeatSenderContext({
455
+ cfg,
456
+ entry,
457
+ delivery
458
+ });
459
+ const responsePrefix = resolveEffectiveMessagesConfig(cfg, agentId, {
460
+ channel: delivery.channel !== "none" ? delivery.channel : void 0,
461
+ accountId: delivery.accountId
462
+ }).responsePrefix;
463
+ const { prompt, hasExecCompletion, hasCronEvents } = await resolveHeartbeatRunPrompt({
464
+ cfg,
465
+ agentId,
466
+ heartbeat,
467
+ preflight,
468
+ canRelayToUser: Boolean(delivery.channel !== "none" && delivery.to && visibility.showAlerts)
469
+ });
470
+ if (!prompt) {
471
+ emitHeartbeatEvent({
472
+ status: "skipped",
473
+ reason: "no-prompt",
474
+ durationMs: Date.now() - startedAt
475
+ });
476
+ return {
477
+ status: "skipped",
478
+ reason: "no-prompt"
479
+ };
480
+ }
481
+ const ctx = {
482
+ Body: appendCronStyleCurrentTimeLine(prompt, cfg, startedAt),
483
+ From: sender,
484
+ To: sender,
485
+ OriginatingChannel: delivery.channel !== "none" ? delivery.channel : void 0,
486
+ OriginatingTo: delivery.to,
487
+ AccountId: delivery.accountId,
488
+ MessageThreadId: delivery.threadId,
489
+ Provider: hasExecCompletion ? "exec-event" : hasCronEvents ? "cron-event" : "heartbeat",
490
+ SessionKey: sessionKey
491
+ };
492
+ if (!visibility.showAlerts && !visibility.showOk && !visibility.useIndicator) {
493
+ emitHeartbeatEvent({
494
+ status: "skipped",
495
+ reason: "alerts-disabled",
496
+ durationMs: Date.now() - startedAt,
497
+ channel: delivery.channel !== "none" ? delivery.channel : void 0,
498
+ accountId: delivery.accountId
499
+ });
500
+ return {
501
+ status: "skipped",
502
+ reason: "alerts-disabled"
503
+ };
504
+ }
505
+ const maybeSendHeartbeatOkSummary = async (summary) => {
506
+ if (!visibility.showOk || delivery.channel === "none" || !delivery.to || !summary.trim()) return false;
507
+ const heartbeatPlugin = getChannelPlugin(delivery.channel);
508
+ if (heartbeatPlugin?.heartbeat?.checkReady) {
509
+ if (!(await heartbeatPlugin.heartbeat.checkReady({
510
+ cfg,
511
+ accountId: delivery.accountId,
512
+ deps: opts.deps
513
+ })).ok) return false;
514
+ }
515
+ await deliverOutboundPayloads({
516
+ cfg,
517
+ channel: delivery.channel,
518
+ to: delivery.to,
519
+ accountId: delivery.accountId,
520
+ threadId: delivery.threadId,
521
+ payloads: [{ text: summary }],
522
+ agentId,
523
+ deps: opts.deps
524
+ });
525
+ return true;
526
+ };
527
+ try {
528
+ const transcriptState = await captureTranscriptState({
529
+ storePath,
530
+ sessionKey,
531
+ agentId
532
+ });
533
+ const heartbeatModelOverride = heartbeat?.model?.trim() || void 0;
534
+ const suppressToolErrorWarnings = heartbeat?.suppressToolErrorWarnings === true;
535
+ const replyPayload = resolveHeartbeatReplyPayload(await getReplyFromConfig(ctx, heartbeatModelOverride ? {
536
+ isHeartbeat: true,
537
+ heartbeatModelOverride,
538
+ suppressToolErrorWarnings
539
+ } : {
540
+ isHeartbeat: true,
541
+ suppressToolErrorWarnings
542
+ }, cfg));
543
+ if (!replyPayload || !replyPayload.text && !replyPayload.mediaUrl && !replyPayload.mediaUrls?.length && !replyPayload.heartbeatReport) {
544
+ await restoreHeartbeatUpdatedAt({
545
+ storePath,
546
+ sessionKey,
547
+ updatedAt: previousUpdatedAt
548
+ });
549
+ await pruneHeartbeatTranscript(transcriptState);
550
+ emitHeartbeatEvent({
551
+ status: "ok-empty",
552
+ reason: opts.reason,
553
+ durationMs: Date.now() - startedAt,
554
+ channel: delivery.channel !== "none" ? delivery.channel : void 0,
555
+ accountId: delivery.accountId,
556
+ silent: true,
557
+ indicatorType: visibility.useIndicator ? resolveIndicatorType("ok-empty") : void 0
558
+ });
559
+ return {
560
+ status: "ran",
561
+ durationMs: Date.now() - startedAt
562
+ };
563
+ }
564
+ const normalized = normalizeHeartbeatReply(replyPayload, responsePrefix);
565
+ if (hasExecCompletion && normalized.shouldSkip && replyPayload.text?.trim()) {
566
+ normalized.text = replyPayload.text.trim();
567
+ normalized.shouldSkip = false;
568
+ }
569
+ const shouldSkipMain = normalized.shouldSkip && !normalized.hasMedia && !hasExecCompletion;
570
+ if (shouldSkipMain) {
571
+ await restoreHeartbeatUpdatedAt({
572
+ storePath,
573
+ sessionKey,
574
+ updatedAt: previousUpdatedAt
575
+ });
576
+ await pruneHeartbeatTranscript(transcriptState);
577
+ const okSent = await maybeSendHeartbeatOkSummary(normalized.text);
578
+ emitHeartbeatEvent({
579
+ status: "ok-token",
580
+ reason: opts.reason,
581
+ durationMs: Date.now() - startedAt,
582
+ channel: delivery.channel !== "none" ? delivery.channel : void 0,
583
+ accountId: delivery.accountId,
584
+ silent: !okSent,
585
+ indicatorType: visibility.useIndicator ? resolveIndicatorType("ok-token") : void 0
586
+ });
587
+ return {
588
+ status: "ran",
589
+ durationMs: Date.now() - startedAt
590
+ };
591
+ }
592
+ const mediaUrls = replyPayload.mediaUrls ?? (replyPayload.mediaUrl ? [replyPayload.mediaUrl] : []);
593
+ const prevHeartbeatText = typeof entry?.lastHeartbeatText === "string" ? entry.lastHeartbeatText : "";
594
+ const prevHeartbeatAt = typeof entry?.lastHeartbeatSentAt === "number" ? entry.lastHeartbeatSentAt : void 0;
595
+ if (!shouldSkipMain && !mediaUrls.length && Boolean(prevHeartbeatText.trim()) && normalized.text.trim() === prevHeartbeatText.trim() && typeof prevHeartbeatAt === "number" && startedAt - prevHeartbeatAt < 1440 * 60 * 1e3) {
596
+ await restoreHeartbeatUpdatedAt({
597
+ storePath,
598
+ sessionKey,
599
+ updatedAt: previousUpdatedAt
600
+ });
601
+ await pruneHeartbeatTranscript(transcriptState);
602
+ emitHeartbeatEvent({
603
+ status: "skipped",
604
+ reason: "duplicate",
605
+ preview: normalized.text.slice(0, 200),
606
+ durationMs: Date.now() - startedAt,
607
+ hasMedia: false,
608
+ channel: delivery.channel !== "none" ? delivery.channel : void 0,
609
+ accountId: delivery.accountId
610
+ });
611
+ return {
612
+ status: "ran",
613
+ durationMs: Date.now() - startedAt
614
+ };
615
+ }
616
+ const previewText = normalized.text;
617
+ if (delivery.channel === "none" || !delivery.to) {
618
+ emitHeartbeatEvent({
619
+ status: "skipped",
620
+ reason: delivery.reason ?? "no-target",
621
+ preview: previewText?.slice(0, 200),
622
+ durationMs: Date.now() - startedAt,
623
+ hasMedia: mediaUrls.length > 0,
624
+ accountId: delivery.accountId
625
+ });
626
+ return {
627
+ status: "ran",
628
+ durationMs: Date.now() - startedAt
629
+ };
630
+ }
631
+ if (!visibility.showAlerts) {
632
+ await restoreHeartbeatUpdatedAt({
633
+ storePath,
634
+ sessionKey,
635
+ updatedAt: previousUpdatedAt
636
+ });
637
+ emitHeartbeatEvent({
638
+ status: "skipped",
639
+ reason: "alerts-disabled",
640
+ preview: previewText?.slice(0, 200),
641
+ durationMs: Date.now() - startedAt,
642
+ channel: delivery.channel,
643
+ hasMedia: mediaUrls.length > 0,
644
+ accountId: delivery.accountId,
645
+ indicatorType: visibility.useIndicator ? resolveIndicatorType("sent") : void 0
646
+ });
647
+ return {
648
+ status: "ran",
649
+ durationMs: Date.now() - startedAt
650
+ };
651
+ }
652
+ const deliveryAccountId = delivery.accountId;
653
+ const heartbeatPlugin = getChannelPlugin(delivery.channel);
654
+ if (heartbeatPlugin?.heartbeat?.checkReady) {
655
+ const readiness = await heartbeatPlugin.heartbeat.checkReady({
656
+ cfg,
657
+ accountId: deliveryAccountId,
658
+ deps: opts.deps
659
+ });
660
+ if (!readiness.ok) {
661
+ emitHeartbeatEvent({
662
+ status: "skipped",
663
+ reason: readiness.reason,
664
+ preview: previewText?.slice(0, 200),
665
+ durationMs: Date.now() - startedAt,
666
+ hasMedia: mediaUrls.length > 0,
667
+ channel: delivery.channel,
668
+ accountId: delivery.accountId
669
+ });
670
+ log.info("heartbeat: channel not ready", {
671
+ channel: delivery.channel,
672
+ reason: readiness.reason
673
+ });
674
+ return {
675
+ status: "skipped",
676
+ reason: readiness.reason
677
+ };
678
+ }
679
+ }
680
+ await deliverOutboundPayloads({
681
+ cfg,
682
+ channel: delivery.channel,
683
+ to: delivery.to,
684
+ accountId: deliveryAccountId,
685
+ agentId,
686
+ threadId: delivery.threadId,
687
+ payloads: [{
688
+ text: normalized.text,
689
+ mediaUrls
690
+ }],
691
+ deps: opts.deps
692
+ });
693
+ if (!shouldSkipMain && normalized.text.trim()) {
694
+ const store = loadSessionStore(storePath);
695
+ const current = store[sessionKey];
696
+ if (current) {
697
+ store[sessionKey] = {
698
+ ...current,
699
+ lastHeartbeatText: normalized.text,
700
+ lastHeartbeatSentAt: startedAt
701
+ };
702
+ await saveSessionStore(storePath, store);
703
+ }
704
+ }
705
+ emitHeartbeatEvent({
706
+ status: "sent",
707
+ to: delivery.to,
708
+ preview: previewText?.slice(0, 200),
709
+ durationMs: Date.now() - startedAt,
710
+ hasMedia: mediaUrls.length > 0,
711
+ channel: delivery.channel,
712
+ accountId: delivery.accountId,
713
+ indicatorType: visibility.useIndicator ? resolveIndicatorType("sent") : void 0
714
+ });
715
+ return {
716
+ status: "ran",
717
+ durationMs: Date.now() - startedAt
718
+ };
719
+ } catch (err) {
720
+ const reason = formatErrorMessage(err);
721
+ emitHeartbeatEvent({
722
+ status: "failed",
723
+ reason,
724
+ durationMs: Date.now() - startedAt,
725
+ channel: delivery.channel !== "none" ? delivery.channel : void 0,
726
+ accountId: delivery.accountId,
727
+ indicatorType: visibility.useIndicator ? resolveIndicatorType("failed") : void 0
728
+ });
729
+ log.error(`heartbeat failed: ${reason}`, { error: reason });
730
+ return {
731
+ status: "failed",
732
+ reason
733
+ };
734
+ }
735
+ }
736
+ function startHeartbeatRunner(opts) {
737
+ const runtime = opts.runtime ?? defaultRuntime;
738
+ const runOnce = opts.runOnce ?? runHeartbeatOnce;
739
+ const state = {
740
+ cfg: opts.cfg ?? loadConfig(),
741
+ runtime,
742
+ agents: /* @__PURE__ */ new Map(),
743
+ timer: null,
744
+ stopped: false
745
+ };
746
+ let initialized = false;
747
+ const resolveNextDue = (now, intervalMs, prevState) => {
748
+ if (typeof prevState?.lastRunMs === "number") return prevState.lastRunMs + intervalMs;
749
+ if (prevState && prevState.intervalMs === intervalMs && prevState.nextDueMs > now) return prevState.nextDueMs;
750
+ return now + intervalMs;
751
+ };
752
+ const advanceAgentSchedule = (agent, now) => {
753
+ agent.lastRunMs = now;
754
+ agent.nextDueMs = now + agent.intervalMs;
755
+ };
756
+ const scheduleNext = () => {
757
+ if (state.stopped) return;
758
+ if (state.timer) {
759
+ clearTimeout(state.timer);
760
+ state.timer = null;
761
+ }
762
+ if (state.agents.size === 0) return;
763
+ const now = Date.now();
764
+ let nextDue = Number.POSITIVE_INFINITY;
765
+ for (const agent of state.agents.values()) if (agent.nextDueMs < nextDue) nextDue = agent.nextDueMs;
766
+ if (!Number.isFinite(nextDue)) return;
767
+ const delay = Math.max(0, nextDue - now);
768
+ state.timer = setTimeout(() => {
769
+ state.timer = null;
770
+ requestHeartbeatNow({
771
+ reason: "interval",
772
+ coalesceMs: 0
773
+ });
774
+ }, delay);
775
+ state.timer.unref?.();
776
+ };
777
+ const updateConfig = (cfg) => {
778
+ if (state.stopped) return;
779
+ const now = Date.now();
780
+ const prevAgents = state.agents;
781
+ const prevEnabled = prevAgents.size > 0;
782
+ const nextAgents = /* @__PURE__ */ new Map();
783
+ const intervals = [];
784
+ for (const agent of resolveHeartbeatAgents(cfg)) {
785
+ const intervalMs = resolveHeartbeatIntervalMs(cfg, void 0, agent.heartbeat);
786
+ if (!intervalMs) continue;
787
+ intervals.push(intervalMs);
788
+ const prevState = prevAgents.get(agent.agentId);
789
+ const nextDueMs = resolveNextDue(now, intervalMs, prevState);
790
+ nextAgents.set(agent.agentId, {
791
+ agentId: agent.agentId,
792
+ heartbeat: agent.heartbeat,
793
+ intervalMs,
794
+ lastRunMs: prevState?.lastRunMs,
795
+ nextDueMs
796
+ });
797
+ }
798
+ state.cfg = cfg;
799
+ state.agents = nextAgents;
800
+ const nextEnabled = nextAgents.size > 0;
801
+ if (!initialized) {
802
+ if (!nextEnabled) log.info("heartbeat: disabled", { enabled: false });
803
+ else log.info("heartbeat: started", { intervalMs: Math.min(...intervals) });
804
+ initialized = true;
805
+ } else if (prevEnabled !== nextEnabled) if (!nextEnabled) log.info("heartbeat: disabled", { enabled: false });
806
+ else log.info("heartbeat: started", { intervalMs: Math.min(...intervals) });
807
+ scheduleNext();
808
+ };
809
+ const run = async (params) => {
810
+ if (state.stopped) return {
811
+ status: "skipped",
812
+ reason: "disabled"
813
+ };
814
+ if (!heartbeatsEnabled) return {
815
+ status: "skipped",
816
+ reason: "disabled"
817
+ };
818
+ if (state.agents.size === 0) return {
819
+ status: "skipped",
820
+ reason: "disabled"
821
+ };
822
+ const reason = params?.reason;
823
+ const requestedAgentId = params?.agentId ? normalizeAgentId(params.agentId) : void 0;
824
+ const requestedSessionKey = params?.sessionKey?.trim() || void 0;
825
+ const isInterval = reason === "interval";
826
+ const startedAt = Date.now();
827
+ const now = startedAt;
828
+ let ran = false;
829
+ if (requestedSessionKey || requestedAgentId) {
830
+ const targetAgentId = requestedAgentId ?? resolveAgentIdFromSessionKey(requestedSessionKey);
831
+ const targetAgent = state.agents.get(targetAgentId);
832
+ if (!targetAgent) {
833
+ scheduleNext();
834
+ return {
835
+ status: "skipped",
836
+ reason: "disabled"
837
+ };
838
+ }
839
+ try {
840
+ const res = await runOnce({
841
+ cfg: state.cfg,
842
+ agentId: targetAgent.agentId,
843
+ heartbeat: targetAgent.heartbeat,
844
+ reason,
845
+ sessionKey: requestedSessionKey,
846
+ deps: { runtime: state.runtime }
847
+ });
848
+ if (res.status !== "skipped" || res.reason !== "disabled") advanceAgentSchedule(targetAgent, now);
849
+ scheduleNext();
850
+ return res.status === "ran" ? {
851
+ status: "ran",
852
+ durationMs: Date.now() - startedAt
853
+ } : res;
854
+ } catch (err) {
855
+ const errMsg = formatErrorMessage(err);
856
+ log.error(`heartbeat runner: targeted runOnce threw unexpectedly: ${errMsg}`, { error: errMsg });
857
+ advanceAgentSchedule(targetAgent, now);
858
+ scheduleNext();
859
+ return {
860
+ status: "failed",
861
+ reason: errMsg
862
+ };
863
+ }
864
+ }
865
+ for (const agent of state.agents.values()) {
866
+ if (isInterval && now < agent.nextDueMs) continue;
867
+ let res;
868
+ try {
869
+ res = await runOnce({
870
+ cfg: state.cfg,
871
+ agentId: agent.agentId,
872
+ heartbeat: agent.heartbeat,
873
+ reason,
874
+ deps: { runtime: state.runtime }
875
+ });
876
+ } catch (err) {
877
+ const errMsg = formatErrorMessage(err);
878
+ log.error(`heartbeat runner: runOnce threw unexpectedly: ${errMsg}`, { error: errMsg });
879
+ advanceAgentSchedule(agent, now);
880
+ continue;
881
+ }
882
+ if (res.status === "skipped" && res.reason === "requests-in-flight") {
883
+ advanceAgentSchedule(agent, now);
884
+ scheduleNext();
885
+ return res;
886
+ }
887
+ if (res.status !== "skipped" || res.reason !== "disabled") advanceAgentSchedule(agent, now);
888
+ if (res.status === "ran") ran = true;
889
+ }
890
+ scheduleNext();
891
+ if (ran) return {
892
+ status: "ran",
893
+ durationMs: Date.now() - startedAt
894
+ };
895
+ return {
896
+ status: "skipped",
897
+ reason: isInterval ? "not-due" : "disabled"
898
+ };
899
+ };
900
+ const wakeHandler = async (params) => run({
901
+ reason: params.reason,
902
+ agentId: params.agentId,
903
+ sessionKey: params.sessionKey
904
+ });
905
+ const disposeWakeHandler = setHeartbeatWakeHandler(wakeHandler);
906
+ updateConfig(state.cfg);
907
+ const cleanup = () => {
908
+ if (state.stopped) return;
909
+ state.stopped = true;
910
+ disposeWakeHandler();
911
+ if (state.timer) clearTimeout(state.timer);
912
+ state.timer = null;
913
+ };
914
+ opts.abortSignal?.addEventListener("abort", cleanup, { once: true });
915
+ return {
916
+ stop: cleanup,
917
+ updateConfig
918
+ };
919
+ }
920
+
921
+ //#endregion
922
+ //#region src/terminal/health-style.ts
923
+ function styleHealthChannelLine(line, rich) {
924
+ if (!rich) return line;
925
+ const colon = line.indexOf(":");
926
+ if (colon === -1) return line;
927
+ const label = line.slice(0, colon + 1);
928
+ const detail = line.slice(colon + 1).trimStart();
929
+ const normalized = detail.toLowerCase();
930
+ const applyPrefix = (prefix, color) => `${label} ${color(detail.slice(0, prefix.length))}${detail.slice(prefix.length)}`;
931
+ if (normalized.startsWith("failed")) return applyPrefix("failed", theme.error);
932
+ if (normalized.startsWith("ok")) return applyPrefix("ok", theme.success);
933
+ if (normalized.startsWith("linked")) return applyPrefix("linked", theme.success);
934
+ if (normalized.startsWith("configured")) return applyPrefix("configured", theme.success);
935
+ if (normalized.startsWith("not linked")) return applyPrefix("not linked", theme.warn);
936
+ if (normalized.startsWith("not configured")) return applyPrefix("not configured", theme.muted);
937
+ if (normalized.startsWith("unknown")) return applyPrefix("unknown", theme.warn);
938
+ return line;
939
+ }
940
+
941
+ //#endregion
942
+ //#region src/commands/health.ts
943
+ var health_exports = /* @__PURE__ */ __exportAll({
944
+ formatHealthChannelLines: () => formatHealthChannelLines,
945
+ getHealthSnapshot: () => getHealthSnapshot,
946
+ healthCommand: () => healthCommand
947
+ });
948
+ const DEFAULT_TIMEOUT_MS = 1e4;
949
+ const debugHealth = (...args) => {
950
+ if (isTruthyEnvValue(process.env.REMOTECLAW_DEBUG_HEALTH)) console.warn("[health:debug]", ...args);
951
+ };
952
+ const formatDurationParts = (ms) => {
953
+ if (!Number.isFinite(ms)) return "unknown";
954
+ if (ms < 1e3) return `${Math.max(0, Math.round(ms))}ms`;
955
+ const units = [
956
+ {
957
+ label: "w",
958
+ size: 10080 * 60 * 1e3
959
+ },
960
+ {
961
+ label: "d",
962
+ size: 1440 * 60 * 1e3
963
+ },
964
+ {
965
+ label: "h",
966
+ size: 3600 * 1e3
967
+ },
968
+ {
969
+ label: "m",
970
+ size: 60 * 1e3
971
+ },
972
+ {
973
+ label: "s",
974
+ size: 1e3
975
+ }
976
+ ];
977
+ let remaining = Math.max(0, Math.floor(ms));
978
+ const parts = [];
979
+ for (const unit of units) {
980
+ const value = Math.floor(remaining / unit.size);
981
+ if (value > 0) {
982
+ parts.push(`${value}${unit.label}`);
983
+ remaining -= value * unit.size;
984
+ }
985
+ }
986
+ if (parts.length === 0) return "0s";
987
+ return parts.join(" ");
988
+ };
989
+ const resolveHeartbeatSummary = (cfg, agentId) => resolveHeartbeatSummaryForAgent(cfg, agentId);
990
+ const resolveAgentOrder = (cfg) => {
991
+ const defaultAgentId = resolveDefaultAgentId(cfg);
992
+ const entries = Array.isArray(cfg.agents?.list) ? cfg.agents.list : [];
993
+ const seen = /* @__PURE__ */ new Set();
994
+ const ordered = [];
995
+ for (const entry of entries) {
996
+ if (!entry || typeof entry !== "object") continue;
997
+ if (typeof entry.id !== "string" || !entry.id.trim()) continue;
998
+ const id = normalizeAgentId(entry.id);
999
+ if (!id || seen.has(id)) continue;
1000
+ seen.add(id);
1001
+ ordered.push({
1002
+ id,
1003
+ name: typeof entry.name === "string" ? entry.name : void 0
1004
+ });
1005
+ }
1006
+ if (!seen.has(defaultAgentId)) ordered.unshift({ id: defaultAgentId });
1007
+ if (ordered.length === 0) ordered.push({ id: defaultAgentId });
1008
+ return {
1009
+ defaultAgentId,
1010
+ ordered
1011
+ };
1012
+ };
1013
+ const buildSessionSummary = (storePath) => {
1014
+ const store = loadSessionStore(storePath);
1015
+ const sessions = Object.entries(store).filter(([key]) => key !== "global" && key !== "unknown").map(([key, entry]) => ({
1016
+ key,
1017
+ updatedAt: entry?.updatedAt ?? 0
1018
+ })).toSorted((a, b) => b.updatedAt - a.updatedAt);
1019
+ const recent = sessions.slice(0, 5).map((s) => ({
1020
+ key: s.key,
1021
+ updatedAt: s.updatedAt || null,
1022
+ age: s.updatedAt ? Date.now() - s.updatedAt : null
1023
+ }));
1024
+ return {
1025
+ path: storePath,
1026
+ count: sessions.length,
1027
+ recent
1028
+ };
1029
+ };
1030
+ const isAccountEnabled = (account) => {
1031
+ if (!account || typeof account !== "object") return true;
1032
+ return account.enabled !== false;
1033
+ };
1034
+ const asRecord = (value) => value && typeof value === "object" ? value : null;
1035
+ const formatProbeLine = (probe, opts = {}) => {
1036
+ const record = asRecord(probe);
1037
+ if (!record) return null;
1038
+ const ok = typeof record.ok === "boolean" ? record.ok : void 0;
1039
+ if (ok === void 0) return null;
1040
+ const elapsedMs = typeof record.elapsedMs === "number" ? record.elapsedMs : null;
1041
+ const status = typeof record.status === "number" ? record.status : null;
1042
+ const error = typeof record.error === "string" ? record.error : null;
1043
+ const bot = asRecord(record.bot);
1044
+ const botUsername = bot && typeof bot.username === "string" ? bot.username : null;
1045
+ const webhook = asRecord(record.webhook);
1046
+ const webhookUrl = webhook && typeof webhook.url === "string" ? webhook.url : null;
1047
+ const usernames = /* @__PURE__ */ new Set();
1048
+ if (botUsername) usernames.add(botUsername);
1049
+ for (const extra of opts.botUsernames ?? []) if (extra) usernames.add(extra);
1050
+ if (ok) {
1051
+ let label = "ok";
1052
+ if (usernames.size > 0) label += ` (@${Array.from(usernames).join(", @")})`;
1053
+ if (elapsedMs != null) label += ` (${elapsedMs}ms)`;
1054
+ if (webhookUrl) label += ` - webhook ${webhookUrl}`;
1055
+ return label;
1056
+ }
1057
+ let label = `failed (${status ?? "unknown"})`;
1058
+ if (error) label += ` - ${error}`;
1059
+ return label;
1060
+ };
1061
+ const formatAccountProbeTiming = (summary) => {
1062
+ const probe = asRecord(summary.probe);
1063
+ if (!probe) return null;
1064
+ const elapsedMs = typeof probe.elapsedMs === "number" ? Math.round(probe.elapsedMs) : null;
1065
+ const ok = typeof probe.ok === "boolean" ? probe.ok : null;
1066
+ if (elapsedMs == null && ok !== true) return null;
1067
+ const accountId = summary.accountId || "default";
1068
+ const botRecord = asRecord(probe.bot);
1069
+ const botUsername = botRecord && typeof botRecord.username === "string" ? botRecord.username : null;
1070
+ return `${botUsername ? `@${botUsername}` : accountId}:${accountId}:${elapsedMs != null ? `${elapsedMs}ms` : "ok"}`;
1071
+ };
1072
+ const isProbeFailure = (summary) => {
1073
+ const probe = asRecord(summary.probe);
1074
+ if (!probe) return false;
1075
+ return (typeof probe.ok === "boolean" ? probe.ok : null) === false;
1076
+ };
1077
+ const formatHealthChannelLines = (summary, opts = {}) => {
1078
+ const channels = summary.channels ?? {};
1079
+ const channelOrder = summary.channelOrder?.length > 0 ? summary.channelOrder : Object.keys(channels);
1080
+ const accountMode = opts.accountMode ?? "default";
1081
+ const lines = [];
1082
+ for (const channelId of channelOrder) {
1083
+ const channelSummary = channels[channelId];
1084
+ if (!channelSummary) continue;
1085
+ const plugin = getChannelPlugin(channelId);
1086
+ const label = summary.channelLabels?.[channelId] ?? plugin?.meta.label ?? channelId;
1087
+ const accountSummaries = channelSummary.accounts ?? {};
1088
+ const accountIds = opts.accountIdsByChannel?.[channelId];
1089
+ const filteredSummaries = accountIds && accountIds.length > 0 ? accountIds.map((accountId) => accountSummaries[accountId]).filter((entry) => Boolean(entry)) : void 0;
1090
+ const listSummaries = accountMode === "all" ? Object.values(accountSummaries) : filteredSummaries ?? (channelSummary.accounts ? Object.values(accountSummaries) : []);
1091
+ const baseSummary = filteredSummaries && filteredSummaries.length > 0 ? filteredSummaries[0] : channelSummary;
1092
+ const botUsernames = listSummaries ? listSummaries.map((account) => {
1093
+ const probeRecord = asRecord(account.probe);
1094
+ const bot = probeRecord ? asRecord(probeRecord.bot) : null;
1095
+ return bot && typeof bot.username === "string" ? bot.username : null;
1096
+ }).filter((value) => Boolean(value)) : [];
1097
+ const linked = typeof baseSummary.linked === "boolean" ? baseSummary.linked : null;
1098
+ if (linked !== null) {
1099
+ if (linked) {
1100
+ const authAgeMs = typeof baseSummary.authAgeMs === "number" ? baseSummary.authAgeMs : null;
1101
+ const authLabel = authAgeMs != null ? ` (auth age ${Math.round(authAgeMs / 6e4)}m)` : "";
1102
+ lines.push(`${label}: linked${authLabel}`);
1103
+ } else lines.push(`${label}: not linked`);
1104
+ continue;
1105
+ }
1106
+ const configured = typeof baseSummary.configured === "boolean" ? baseSummary.configured : null;
1107
+ if (configured === false) {
1108
+ lines.push(`${label}: not configured`);
1109
+ continue;
1110
+ }
1111
+ const accountTimings = accountMode === "all" ? listSummaries.map((account) => formatAccountProbeTiming(account)).filter((value) => Boolean(value)) : [];
1112
+ const failedSummary = listSummaries.find((summary) => isProbeFailure(summary));
1113
+ if (failedSummary) {
1114
+ const failureLine = formatProbeLine(failedSummary.probe, { botUsernames });
1115
+ if (failureLine) {
1116
+ lines.push(`${label}: ${failureLine}`);
1117
+ continue;
1118
+ }
1119
+ }
1120
+ if (accountTimings.length > 0) {
1121
+ lines.push(`${label}: ok (${accountTimings.join(", ")})`);
1122
+ continue;
1123
+ }
1124
+ const probeLine = formatProbeLine(baseSummary.probe, { botUsernames });
1125
+ if (probeLine) {
1126
+ lines.push(`${label}: ${probeLine}`);
1127
+ continue;
1128
+ }
1129
+ if (configured === true) {
1130
+ lines.push(`${label}: configured`);
1131
+ continue;
1132
+ }
1133
+ lines.push(`${label}: unknown`);
1134
+ }
1135
+ return lines;
1136
+ };
1137
+ async function getHealthSnapshot(params) {
1138
+ const timeoutMs = params?.timeoutMs;
1139
+ const cfg = loadConfig();
1140
+ const { defaultAgentId, ordered } = resolveAgentOrder(cfg);
1141
+ const channelBindings = buildChannelAccountBindings(cfg);
1142
+ const sessionCache = /* @__PURE__ */ new Map();
1143
+ const agents = ordered.map((entry) => {
1144
+ const storePath = resolveStorePath(cfg.session?.store, { agentId: entry.id });
1145
+ const sessions = sessionCache.get(storePath) ?? buildSessionSummary(storePath);
1146
+ sessionCache.set(storePath, sessions);
1147
+ return {
1148
+ agentId: entry.id,
1149
+ name: entry.name,
1150
+ isDefault: entry.id === defaultAgentId,
1151
+ heartbeat: resolveHeartbeatSummary(cfg, entry.id),
1152
+ sessions
1153
+ };
1154
+ });
1155
+ const defaultAgent = agents.find((agent) => agent.isDefault) ?? agents[0];
1156
+ const heartbeatSeconds = defaultAgent?.heartbeat.everyMs ? Math.round(defaultAgent.heartbeat.everyMs / 1e3) : 0;
1157
+ const sessions = defaultAgent?.sessions ?? buildSessionSummary(resolveStorePath(cfg.session?.store, { agentId: defaultAgentId }));
1158
+ const start = Date.now();
1159
+ const cappedTimeout = timeoutMs === void 0 ? DEFAULT_TIMEOUT_MS : Math.max(50, timeoutMs);
1160
+ const doProbe = params?.probe !== false;
1161
+ const channels = {};
1162
+ const channelOrder = listChannelPlugins().map((plugin) => plugin.id);
1163
+ const channelLabels = {};
1164
+ for (const plugin of listChannelPlugins()) {
1165
+ channelLabels[plugin.id] = plugin.meta.label ?? plugin.id;
1166
+ const accountIds = plugin.config.listAccountIds(cfg);
1167
+ const defaultAccountId = resolveChannelDefaultAccountId({
1168
+ plugin,
1169
+ cfg,
1170
+ accountIds
1171
+ });
1172
+ const boundAccounts = channelBindings.get(plugin.id)?.get(defaultAgentId) ?? [];
1173
+ const preferredAccountId = resolvePreferredAccountId({
1174
+ accountIds,
1175
+ defaultAccountId,
1176
+ boundAccounts
1177
+ });
1178
+ const boundAccountIdsAll = Array.from(new Set(Array.from(channelBindings.get(plugin.id)?.values() ?? []).flatMap((ids) => ids)));
1179
+ const accountIdsToProbe = Array.from(new Set([
1180
+ preferredAccountId,
1181
+ defaultAccountId,
1182
+ ...accountIds,
1183
+ ...boundAccountIdsAll
1184
+ ].filter((value) => value && value.trim())));
1185
+ debugHealth("channel", {
1186
+ id: plugin.id,
1187
+ accountIds,
1188
+ defaultAccountId,
1189
+ boundAccounts,
1190
+ preferredAccountId,
1191
+ accountIdsToProbe
1192
+ });
1193
+ const accountSummaries = {};
1194
+ for (const accountId of accountIdsToProbe) {
1195
+ const account = plugin.config.resolveAccount(cfg, accountId);
1196
+ const enabled = plugin.config.isEnabled ? plugin.config.isEnabled(account, cfg) : isAccountEnabled(account);
1197
+ const configured = plugin.config.isConfigured ? await plugin.config.isConfigured(account, cfg) : true;
1198
+ let probe;
1199
+ let lastProbeAt = null;
1200
+ if (enabled && configured && doProbe && plugin.status?.probeAccount) try {
1201
+ probe = await plugin.status.probeAccount({
1202
+ account,
1203
+ timeoutMs: cappedTimeout,
1204
+ cfg
1205
+ });
1206
+ lastProbeAt = Date.now();
1207
+ } catch (err) {
1208
+ probe = {
1209
+ ok: false,
1210
+ error: formatErrorMessage(err)
1211
+ };
1212
+ lastProbeAt = Date.now();
1213
+ }
1214
+ const probeRecord = probe && typeof probe === "object" ? probe : null;
1215
+ const bot = probeRecord && typeof probeRecord.bot === "object" ? probeRecord.bot : null;
1216
+ if (bot?.username) debugHealth("probe.bot", {
1217
+ channel: plugin.id,
1218
+ accountId,
1219
+ username: bot.username
1220
+ });
1221
+ const snapshot = {
1222
+ accountId,
1223
+ enabled,
1224
+ configured
1225
+ };
1226
+ if (probe !== void 0) snapshot.probe = probe;
1227
+ if (lastProbeAt) snapshot.lastProbeAt = lastProbeAt;
1228
+ const summary = plugin.status?.buildChannelSummary ? await plugin.status.buildChannelSummary({
1229
+ account,
1230
+ cfg,
1231
+ defaultAccountId: accountId,
1232
+ snapshot
1233
+ }) : void 0;
1234
+ const record = summary && typeof summary === "object" ? summary : {
1235
+ accountId,
1236
+ configured,
1237
+ probe,
1238
+ lastProbeAt
1239
+ };
1240
+ if (record.configured === void 0) record.configured = configured;
1241
+ if (record.lastProbeAt === void 0 && lastProbeAt) record.lastProbeAt = lastProbeAt;
1242
+ record.accountId = accountId;
1243
+ accountSummaries[accountId] = record;
1244
+ }
1245
+ const fallbackSummary = accountSummaries[preferredAccountId] ?? accountSummaries[defaultAccountId] ?? accountSummaries[accountIdsToProbe[0] ?? preferredAccountId] ?? accountSummaries[Object.keys(accountSummaries)[0]];
1246
+ if (fallbackSummary) channels[plugin.id] = {
1247
+ ...fallbackSummary,
1248
+ accounts: accountSummaries
1249
+ };
1250
+ }
1251
+ return {
1252
+ ok: true,
1253
+ ts: Date.now(),
1254
+ durationMs: Date.now() - start,
1255
+ channels,
1256
+ channelOrder,
1257
+ channelLabels,
1258
+ heartbeatSeconds,
1259
+ defaultAgentId,
1260
+ agents,
1261
+ sessions: {
1262
+ path: sessions.path,
1263
+ count: sessions.count,
1264
+ recent: sessions.recent
1265
+ }
1266
+ };
1267
+ }
1268
+ async function healthCommand(opts, runtime) {
1269
+ const cfg = opts.config ?? loadConfig();
1270
+ const summary = await withProgress({
1271
+ label: "Checking gateway health…",
1272
+ indeterminate: true,
1273
+ enabled: opts.json !== true
1274
+ }, async () => await callGateway({
1275
+ method: "health",
1276
+ params: opts.verbose ? { probe: true } : void 0,
1277
+ timeoutMs: opts.timeoutMs,
1278
+ config: cfg
1279
+ }));
1280
+ if (opts.json) runtime.log(JSON.stringify(summary, null, 2));
1281
+ else {
1282
+ const debugEnabled = isTruthyEnvValue(process.env.REMOTECLAW_DEBUG_HEALTH);
1283
+ const rich = isRich();
1284
+ if (opts.verbose) {
1285
+ const details = buildGatewayConnectionDetails({ config: cfg });
1286
+ runtime.log(info("Gateway connection:"));
1287
+ for (const line of details.message.split("\n")) runtime.log(` ${line}`);
1288
+ }
1289
+ const localAgents = resolveAgentOrder(cfg);
1290
+ const defaultAgentId = summary.defaultAgentId ?? localAgents.defaultAgentId;
1291
+ const agents = Array.isArray(summary.agents) ? summary.agents : [];
1292
+ const fallbackAgents = localAgents.ordered.map((entry) => {
1293
+ const storePath = resolveStorePath(cfg.session?.store, { agentId: entry.id });
1294
+ return {
1295
+ agentId: entry.id,
1296
+ name: entry.name,
1297
+ isDefault: entry.id === localAgents.defaultAgentId,
1298
+ heartbeat: resolveHeartbeatSummary(cfg, entry.id),
1299
+ sessions: buildSessionSummary(storePath)
1300
+ };
1301
+ });
1302
+ const resolvedAgents = agents.length > 0 ? agents : fallbackAgents;
1303
+ const displayAgents = opts.verbose ? resolvedAgents : resolvedAgents.filter((agent) => agent.agentId === defaultAgentId);
1304
+ const channelBindings = buildChannelAccountBindings(cfg);
1305
+ if (debugEnabled) {
1306
+ runtime.log(info("[debug] local channel accounts"));
1307
+ for (const plugin of listChannelPlugins()) {
1308
+ const accountIds = plugin.config.listAccountIds(cfg);
1309
+ const defaultAccountId = resolveChannelDefaultAccountId({
1310
+ plugin,
1311
+ cfg,
1312
+ accountIds
1313
+ });
1314
+ runtime.log(` ${plugin.id}: accounts=${accountIds.join(", ") || "(none)"} default=${defaultAccountId}`);
1315
+ for (const accountId of accountIds) {
1316
+ const account = plugin.config.resolveAccount(cfg, accountId);
1317
+ const record = asRecord(account);
1318
+ const tokenSource = record && typeof record.tokenSource === "string" ? record.tokenSource : void 0;
1319
+ const configured = plugin.config.isConfigured ? await plugin.config.isConfigured(account, cfg) : true;
1320
+ runtime.log(` - ${accountId}: configured=${configured}${tokenSource ? ` tokenSource=${tokenSource}` : ""}`);
1321
+ }
1322
+ }
1323
+ runtime.log(info("[debug] bindings map"));
1324
+ for (const [channelId, byAgent] of channelBindings.entries()) {
1325
+ const entries = Array.from(byAgent.entries()).map(([agentId, ids]) => `${agentId}=[${ids.join(", ")}]`);
1326
+ runtime.log(` ${channelId}: ${entries.join(" ")}`);
1327
+ }
1328
+ runtime.log(info("[debug] gateway channel probes"));
1329
+ for (const [channelId, channelSummary] of Object.entries(summary.channels ?? {})) {
1330
+ const accounts = channelSummary.accounts ?? {};
1331
+ const probes = Object.entries(accounts).map(([accountId, accountSummary]) => {
1332
+ const probe = asRecord(accountSummary.probe);
1333
+ const bot = probe ? asRecord(probe.bot) : null;
1334
+ return `${accountId}=${(bot && typeof bot.username === "string" ? bot.username : null) ?? "(no bot)"}`;
1335
+ });
1336
+ runtime.log(` ${channelId}: ${probes.join(", ") || "(none)"}`);
1337
+ }
1338
+ }
1339
+ const channelAccountFallbacks = Object.fromEntries(listChannelPlugins().map((plugin) => {
1340
+ const accountIds = plugin.config.listAccountIds(cfg);
1341
+ const preferred = resolvePreferredAccountId({
1342
+ accountIds,
1343
+ defaultAccountId: resolveChannelDefaultAccountId({
1344
+ plugin,
1345
+ cfg,
1346
+ accountIds
1347
+ }),
1348
+ boundAccounts: channelBindings.get(plugin.id)?.get(defaultAgentId) ?? []
1349
+ });
1350
+ return [plugin.id, [preferred]];
1351
+ }));
1352
+ const accountIdsByChannel = (() => {
1353
+ const entries = displayAgents.length > 0 ? displayAgents : resolvedAgents;
1354
+ const byChannel = {};
1355
+ for (const [channelId, byAgent] of channelBindings.entries()) {
1356
+ const accountIds = [];
1357
+ for (const agent of entries) {
1358
+ const ids = byAgent.get(agent.agentId) ?? [];
1359
+ for (const id of ids) if (!accountIds.includes(id)) accountIds.push(id);
1360
+ }
1361
+ if (accountIds.length > 0) byChannel[channelId] = accountIds;
1362
+ }
1363
+ for (const [channelId, fallbackIds] of Object.entries(channelAccountFallbacks)) if (!byChannel[channelId] || byChannel[channelId].length === 0) byChannel[channelId] = fallbackIds;
1364
+ return byChannel;
1365
+ })();
1366
+ const channelLines = Object.keys(accountIdsByChannel).length > 0 ? formatHealthChannelLines(summary, {
1367
+ accountMode: opts.verbose ? "all" : "default",
1368
+ accountIdsByChannel
1369
+ }) : formatHealthChannelLines(summary, { accountMode: opts.verbose ? "all" : "default" });
1370
+ for (const line of channelLines) runtime.log(styleHealthChannelLine(line, rich));
1371
+ for (const plugin of listChannelPlugins()) {
1372
+ const channelSummary = summary.channels?.[plugin.id];
1373
+ if (!channelSummary || channelSummary.linked !== true) continue;
1374
+ if (!plugin.status?.logSelfId) continue;
1375
+ const boundAccounts = channelBindings.get(plugin.id)?.get(defaultAgentId) ?? [];
1376
+ const accountIds = plugin.config.listAccountIds(cfg);
1377
+ const accountId = resolvePreferredAccountId({
1378
+ accountIds,
1379
+ defaultAccountId: resolveChannelDefaultAccountId({
1380
+ plugin,
1381
+ cfg,
1382
+ accountIds
1383
+ }),
1384
+ boundAccounts
1385
+ });
1386
+ const account = plugin.config.resolveAccount(cfg, accountId);
1387
+ plugin.status.logSelfId({
1388
+ account,
1389
+ cfg,
1390
+ runtime,
1391
+ includeChannelPrefix: true
1392
+ });
1393
+ }
1394
+ if (resolvedAgents.length > 0) {
1395
+ const agentLabels = resolvedAgents.map((agent) => agent.isDefault ? `${agent.agentId} (default)` : agent.agentId);
1396
+ runtime.log(info(`Agents: ${agentLabels.join(", ")}`));
1397
+ }
1398
+ const heartbeatParts = displayAgents.map((agent) => {
1399
+ const everyMs = agent.heartbeat?.everyMs;
1400
+ return `${everyMs ? formatDurationParts(everyMs) : "disabled"} (${agent.agentId})`;
1401
+ }).filter(Boolean);
1402
+ if (heartbeatParts.length > 0) runtime.log(info(`Heartbeat interval: ${heartbeatParts.join(", ")}`));
1403
+ if (displayAgents.length === 0) {
1404
+ runtime.log(info(`Session store: ${summary.sessions.path} (${summary.sessions.count} entries)`));
1405
+ if (summary.sessions.recent.length > 0) for (const r of summary.sessions.recent) runtime.log(`- ${r.key} (${r.updatedAt ? `${Math.round((Date.now() - r.updatedAt) / 6e4)}m ago` : "no activity"})`);
1406
+ } else for (const agent of displayAgents) {
1407
+ runtime.log(info(`Session store (${agent.agentId}): ${agent.sessions.path} (${agent.sessions.count} entries)`));
1408
+ if (agent.sessions.recent.length > 0) for (const r of agent.sessions.recent) runtime.log(`- ${r.key} (${r.updatedAt ? `${Math.round((Date.now() - r.updatedAt) / 6e4)}m ago` : "no activity"})`);
1409
+ }
1410
+ }
1411
+ }
1412
+
1413
+ //#endregion
1414
+ export { styleHealthChannelLine as a, setHeartbeatsEnabled as c, health_exports as i, startHeartbeatRunner as l, getHealthSnapshot as n, resolveHeartbeatSummaryForAgent as o, healthCommand as r, runHeartbeatOnce as s, formatHealthChannelLines as t };