remoteclaw 0.1.0-next.87fb2cd → 0.1.0-next.8c439ca

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 (1151) hide show
  1. package/README.md +11 -9
  2. package/dist/accounts-BZ2kR_Ij.js +47 -0
  3. package/dist/accounts-Bi4rFQG5.js +272 -0
  4. package/dist/accounts-Bpk-loA6.js +47 -0
  5. package/dist/accounts-CS1a1AD5.js +32 -0
  6. package/dist/accounts-DAdUdbPk.js +36 -0
  7. package/dist/accounts-WYyfAiie.js +270 -0
  8. package/dist/accounts-zQKMwnvt.js +36 -0
  9. package/dist/ack-reactions-BbCUxW2L.js +621 -0
  10. package/dist/ack-reactions-S4b9lzH3.js +621 -0
  11. package/dist/acp-cli-DH4kPFya.js +1316 -0
  12. package/dist/acp-cli-DHZ3GUGT.js +1311 -0
  13. package/dist/active-listener-BfN4RKlA.js +37 -0
  14. package/dist/active-listener-Bq7ckjOV.js +37 -0
  15. package/dist/agent-Co4dCp-2.js +687 -0
  16. package/dist/agent-DZR1ECPq.js +688 -0
  17. package/dist/agent-helpers-D83kfcF9.js +400 -0
  18. package/dist/agent-helpers-D99UiGMX.js +400 -0
  19. package/dist/agent-scope-9Be1jNxb.js +116 -0
  20. package/dist/agent-scope-CJW7vnF8.js +114 -0
  21. package/dist/agents-aJ58xjwk.js +754 -0
  22. package/dist/agents.config-BPe_hkMn.js +116 -0
  23. package/dist/agents.config-C9pGQHu8.js +116 -0
  24. package/dist/ansi-DtaiOnt1.js +107 -0
  25. package/dist/audio-B1lTyRqS.js +43 -0
  26. package/dist/audio-e0dFnrn8.js +43 -0
  27. package/dist/audit-BSDh_qDc.js +3113 -0
  28. package/dist/audit-Ctou59eh.js +3113 -0
  29. package/dist/auth-7Zy-yTlI.js +448 -0
  30. package/dist/auth-C-XX0Tdt.js +314 -0
  31. package/dist/auth-CWvr1cYE.js +315 -0
  32. package/dist/auth-DJ7XEBDO.js +448 -0
  33. package/dist/banner-KXMirpkK.js +294 -0
  34. package/dist/binaries-DoDkEjzl.js +13 -0
  35. package/dist/bindings-BpL4pISF.js +69 -0
  36. package/dist/bindings-rd6Mm9VI.js +69 -0
  37. package/dist/bonjour-discovery-CVJYHT3g.js +378 -0
  38. package/dist/bonjour-discovery-ibPvwrpL.js +378 -0
  39. package/dist/boot/handler.js +30 -73
  40. package/dist/browser-cli-BeEP-z6I.js +1694 -0
  41. package/dist/browser-cli-DzlvxPoa.js +1690 -0
  42. package/dist/build-info.json +3 -3
  43. package/dist/call-Gb1LTyAe.js +518 -0
  44. package/dist/call-VEhcnYzD.js +517 -0
  45. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  46. package/dist/catalog-4u4ACSTC.js +185 -0
  47. package/dist/catalog-CxsZ9WYx.js +185 -0
  48. package/dist/channel-account-context-BLQq9NKz.js +133 -0
  49. package/dist/channel-account-context-CaCzVa76.js +133 -0
  50. package/dist/channel-activity-BatlvP_U.js +292 -0
  51. package/dist/channel-activity-DJC9JcFl.js +94 -0
  52. package/dist/channel-activity-DtRx3b0W.js +94 -0
  53. package/dist/channel-options-BLEv7OIg.js +33 -0
  54. package/dist/channel-options-Ba9RZ7EF.js +32 -0
  55. package/dist/channel-selection-DZ_K0SFN.js +51 -0
  56. package/dist/channel-selection-Xv5UFxOx.js +51 -0
  57. package/dist/channel-web-CTKgavhs.js +2132 -0
  58. package/dist/channel-web-Cv6lzgTm.js +2134 -0
  59. package/dist/channels-cli-BCqLZsuq.js +1439 -0
  60. package/dist/channels-cli-BU1-nWL9.js +1435 -0
  61. package/dist/channels-status-issues-B77y-TLr.js +18 -0
  62. package/dist/channels-status-issues-BS71ijaG.js +18 -0
  63. package/dist/chat-envelope-CY1yvCc-.js +248 -0
  64. package/dist/chat-envelope-DUMcMMB2.js +248 -0
  65. package/dist/chrome-CJbUJxn0.js +1732 -0
  66. package/dist/chrome-z0CtlEqh.js +1733 -0
  67. package/dist/chunk-CrfQ_O--.js +341 -0
  68. package/dist/chunk-lh8BhcD4.js +341 -0
  69. package/dist/clack-prompter-CFNKgQXx.js +122 -0
  70. package/dist/clack-prompter-DDlR2e34.js +121 -0
  71. package/dist/cli/daemon-cli.js +1 -1
  72. package/dist/cli-CTIHwJwj.js +134 -0
  73. package/dist/cli-CxxPE3Fr.js +130 -0
  74. package/dist/client-BJlURnVh.js +2311 -0
  75. package/dist/client-D2d88Uyh.js +2311 -0
  76. package/dist/clipboard-DgcnnFZC.js +31 -0
  77. package/dist/command-format-CMAQa4dB.js +32 -0
  78. package/dist/command-format-KkslAzwV.js +18 -0
  79. package/dist/command-logger/handler.js +1 -1
  80. package/dist/command-registry-CkNLmij0.js +215 -0
  81. package/dist/commands-BlFMVk5m.js +41 -0
  82. package/dist/commands-kZtQfqDl.js +41 -0
  83. package/dist/commands-registry-BMXLgPo_.js +890 -0
  84. package/dist/commands-registry-CWFeirkk.js +891 -0
  85. package/dist/common-BR0gjyMq.js +156 -0
  86. package/dist/completion-cli-B2yjiG_s.js +452 -0
  87. package/dist/completion-cli-_dD9KsqP.js +452 -0
  88. package/dist/config-B39yU2hC.js +4219 -0
  89. package/dist/config-cli-B3LfET2L.js +247 -0
  90. package/dist/config-cli-BMONsDUm.js +243 -0
  91. package/dist/config-guard-Bv3QRLlH.js +99 -0
  92. package/dist/config-guard-PnR6zo3r.js +75 -0
  93. package/dist/config-mhURcpre.js +4221 -0
  94. package/dist/config-validation-Ci1l030f.js +18 -0
  95. package/dist/config-validation-DDqwYSSX.js +18 -0
  96. package/dist/configure-BGoAC8U8.js +889 -0
  97. package/dist/configure-CFRNXEob.js +891 -0
  98. package/dist/constants-DAiBiWlI.js +75 -0
  99. package/dist/constants-DQxqJVLu.js +75 -0
  100. package/dist/control-auth-CJ8E08vS.js +397 -0
  101. package/dist/control-auth-CJ9gN4Bq.js +397 -0
  102. package/dist/control-ui/assets/index-DdiU_ccM.css +1 -0
  103. package/dist/control-ui/assets/index-kVUYi64u.js +7723 -0
  104. package/dist/control-ui/assets/index-kVUYi64u.js.map +1 -0
  105. package/dist/control-ui/index.html +2 -2
  106. package/dist/control-ui-assets-B6WRnrNB.js +186 -0
  107. package/dist/control-ui-assets-DVhkAyhv.js +186 -0
  108. package/dist/conversation-label-HuHoShPF.js +36 -0
  109. package/dist/conversation-label-L0QTtKji.js +36 -0
  110. package/dist/cron-cli--1WQqJtx.js +494 -0
  111. package/dist/cron-cli-CwThzmOA.js +498 -0
  112. package/dist/daemon-cli-DFN-9A_K.js +735 -0
  113. package/dist/daemon-cli-DcrRja5a.js +737 -0
  114. package/dist/daemon-cli.js +79 -195
  115. package/dist/daemon-install-BB1GFaWJ.js +60 -0
  116. package/dist/daemon-install-BEgffqDj.js +56 -0
  117. package/dist/daemon-install-helpers-B82uvJjJ.js +504 -0
  118. package/dist/daemon-install-helpers-BhL2Gh4l.js +504 -0
  119. package/dist/deliver-CNjdsIiw.js +481 -0
  120. package/dist/deliver-Ckw1UpfZ.js +481 -0
  121. package/dist/delivery-queue-CK7VnUJf.js +244 -0
  122. package/dist/delivery-queue-DMeQchpT.js +244 -0
  123. package/dist/devices-cli-BV2nPpMv.js +319 -0
  124. package/dist/devices-cli-CiMJCEyI.js +323 -0
  125. package/dist/diagnostics-BhFwk6F3.js +35 -0
  126. package/dist/diagnostics-CVyj38a3.js +35 -0
  127. package/dist/directory-cli-BvT7Zajo.js +224 -0
  128. package/dist/directory-cli-DZrR9ipr.js +220 -0
  129. package/dist/dispatcher-CwW6NQgz.js +174 -0
  130. package/dist/dispatcher-OQMQkCed.js +173 -0
  131. package/dist/dm-policy-shared-CkFf7bHb.js +22 -0
  132. package/dist/dm-policy-shared-wJb9Toby.js +22 -0
  133. package/dist/dns-cli-34Y5qjYl.js +199 -0
  134. package/dist/dns-cli-Cc5Xn1zs.js +203 -0
  135. package/dist/dock-Ct3nCFH9.js +927 -0
  136. package/dist/dock-nJM0dcsi.js +926 -0
  137. package/dist/doctor-completion-D7gTmHA5.js +92 -0
  138. package/dist/doctor-completion-DXtGPTO2.js +92 -0
  139. package/dist/doctor-config-flow-BgWncf2Z.js +1935 -0
  140. package/dist/doctor-config-flow-_nra8xQV.js +1934 -0
  141. package/dist/enable-CDiG8JKD.js +59 -0
  142. package/dist/enable-DzXMQJ-o.js +59 -0
  143. package/dist/entry.js +61 -4
  144. package/dist/env-ByX2W_NZ.js +60 -0
  145. package/dist/env-vars-CD2_baIP.js +43 -0
  146. package/dist/env-vars-a7S70ba7.js +43 -0
  147. package/dist/errors-_DSePI1C.js +35 -0
  148. package/dist/exec-B46nU089.js +164 -0
  149. package/dist/export-html/template.css +0 -36
  150. package/dist/export-html/template.js +1 -32
  151. package/dist/extensionAPI.js +1310 -242
  152. package/dist/fetch-B3EQXbTa.js +67 -0
  153. package/dist/fetch-CbGTzJ8L.js +281 -0
  154. package/dist/fetch-CfIaWynF.js +67 -0
  155. package/dist/fetch-DOHopEO6.js +281 -0
  156. package/dist/fetch-DkvledRT.js +67 -0
  157. package/dist/file-lock-BHfqppLm.js +107 -0
  158. package/dist/file-lock-CCBpdPM_.js +107 -0
  159. package/dist/fs-safe-BcEpbVjc.js +88 -0
  160. package/dist/fs-safe-S3Zvbabd.js +98 -0
  161. package/dist/gateway-cli-BBFwYjWv.js +24545 -0
  162. package/dist/gateway-cli-DDEPiU3A.js +24549 -0
  163. package/dist/gateway-rpc-CDi5_jx0.js +28 -0
  164. package/dist/gateway-rpc-Dg1MX8E5.js +28 -0
  165. package/dist/gmail-setup-utils-B3h3JoeC.js +423 -0
  166. package/dist/gmail-setup-utils-CqbWr0Kq.js +422 -0
  167. package/dist/health-ClE4NYwj.js +1414 -0
  168. package/dist/health-DlqgIqog.js +1417 -0
  169. package/dist/heartbeat-visibility-Rf5f8ltY.js +125 -0
  170. package/dist/heartbeat-visibility-o6vIBIEw.js +125 -0
  171. package/dist/helpers-CRrn7Err.js +10 -0
  172. package/dist/helpers-p_u0Gnj_.js +10 -0
  173. package/dist/hook-runner-global-wRhkAE0S.js +527 -0
  174. package/dist/hooks-cli-BAf55Qys.js +1226 -0
  175. package/dist/hooks-cli-vWmfl7ai.js +1222 -0
  176. package/dist/host-env-security-BGibnCbS.js +106 -0
  177. package/dist/host-env-security-axRnIi8d.js +106 -0
  178. package/dist/image-ops-GZSuVTHU.js +354 -0
  179. package/dist/import-9vaXEKNT.js +604 -0
  180. package/dist/import-DO5FdEzD.js +606 -0
  181. package/dist/inbound-context-COwswi8z.js +68 -0
  182. package/dist/inbound-context-ChcNR30g.js +68 -0
  183. package/dist/index.js +131 -103
  184. package/dist/inspect-BsS3_z-x.js +286 -0
  185. package/dist/inspect-CLH_9ryS.js +286 -0
  186. package/dist/installs-BKXQfs9W.js +325 -0
  187. package/dist/installs-CpMMdvFf.js +325 -0
  188. package/dist/ipv4-BZGSwnH4.js +46 -0
  189. package/dist/ir-C7oInGkI.js +972 -0
  190. package/dist/json-files-BYH8U7Mx.js +46 -0
  191. package/dist/lifecycle-core-D4J3GGvb.js +476 -0
  192. package/dist/lifecycle-core-DdcfoAN-.js +474 -0
  193. package/dist/loader-BnqlqrLo.js +22413 -0
  194. package/dist/loader-CBLiaYd0.js +22410 -0
  195. package/dist/logger-q1A1W2tk.js +49 -0
  196. package/dist/logging-DJFQvfGD.js +1 -0
  197. package/dist/logging-kuFzZMsG.js +1 -0
  198. package/dist/login-BAAGY0RW.js +62 -0
  199. package/dist/login-Cr3JTVSP.js +61 -0
  200. package/dist/login-qr-CqpttKWF.js +329 -0
  201. package/dist/login-qr-Dt3HLskl.js +325 -0
  202. package/dist/logs-cli-DRzq6o5Z.js +236 -0
  203. package/dist/logs-cli-qPnflPy3.js +240 -0
  204. package/dist/markdown-tables-DL_qhePJ.js +29 -0
  205. package/dist/markdown-tables-DeFSK6aY.js +29 -0
  206. package/dist/media-BD2cZGXT.js +971 -0
  207. package/dist/media-BLtE7C1h.js +10358 -0
  208. package/dist/message-action-names-CCN4z013.js +2520 -0
  209. package/dist/message-action-names-DQEv4TI7.js +2520 -0
  210. package/dist/message-channel-DOyKgFu8.js +91 -0
  211. package/dist/message-channel-zQXY7YeA.js +91 -0
  212. package/dist/mime-1E7nn9IU.js +146 -0
  213. package/dist/mime-mSgQeDnC.js +146 -0
  214. package/dist/net-DMh1m8AZ.js +225 -0
  215. package/dist/node-cli-0bosceyj.js +1458 -0
  216. package/dist/node-cli-Cmi9hWfk.js +1462 -0
  217. package/dist/node-service-CDqFsdcr.js +67 -0
  218. package/dist/node-service-CkwVlcey.js +67 -0
  219. package/dist/nodes-cli-Cw_dHrns.js +1350 -0
  220. package/dist/nodes-cli-W1lL3R_V.js +1346 -0
  221. package/dist/nodes-screen-6pXv1lYa.js +250 -0
  222. package/dist/nodes-screen-CTIZKksn.js +250 -0
  223. package/dist/note-CMELkPJN.js +92 -0
  224. package/dist/note-DHUJACHE.js +92 -0
  225. package/dist/npm-registry-spec-BBFDcD0J.js +786 -0
  226. package/dist/npm-registry-spec-Dza35Ig4.js +786 -0
  227. package/dist/npm-resolution-CWbBQMUO.js +86 -0
  228. package/dist/npm-resolution-Cq8Avhq7.js +86 -0
  229. package/dist/onboard-B8zVUgSw.js +649 -0
  230. package/dist/onboard-CcretRsn.js +647 -0
  231. package/dist/onboard-auth-Ct1oKyIa.js +211 -0
  232. package/dist/onboard-auth-DcVXyd-Z.js +207 -0
  233. package/dist/onboard-channels-ByskrYKL.js +2547 -0
  234. package/dist/onboard-channels-CVr-S-g5.js +2548 -0
  235. package/dist/onboard-config-C9so5ggC.js +39 -0
  236. package/dist/onboard-config-oXID97rS.js +39 -0
  237. package/dist/onboard-helpers-BGcqk1LH.js +363 -0
  238. package/dist/onboard-helpers-DHFTL2W8.js +364 -0
  239. package/dist/onboard-remote-Bxqdgm8F.js +127 -0
  240. package/dist/onboard-remote-C1t675lv.js +127 -0
  241. package/dist/onboarding--lUSgYCj.js +586 -0
  242. package/dist/onboarding-DN3kDSsE.js +588 -0
  243. package/dist/onboarding.finalize-D5AeUPb_.js +404 -0
  244. package/dist/onboarding.finalize-p6qi1PKP.js +402 -0
  245. package/dist/onboarding.gateway-config-B5Gj4VW3.js +201 -0
  246. package/dist/onboarding.gateway-config-D_q9vhlV.js +195 -0
  247. package/dist/outbound-BbVBd3gl.js +221 -0
  248. package/dist/outbound-attachment-DYa1asB5.js +18 -0
  249. package/dist/outbound-attachment-DpK8K1eS.js +18 -0
  250. package/dist/outbound-attachment-DyJSZgC4.js +18 -0
  251. package/dist/outbound-covtE_Vf.js +220 -0
  252. package/dist/pairing-cli-DENdmCI5.js +129 -0
  253. package/dist/pairing-cli-DQNuoD_T.js +125 -0
  254. package/dist/pairing-labels-DRh4udbq.js +9 -0
  255. package/dist/pairing-labels-D_pD8Cag.js +9 -0
  256. package/dist/pairing-store-Bu9pVlkO.js +459 -0
  257. package/dist/pairing-store-C4xKpIcm.js +460 -0
  258. package/dist/path-env-Q14MBkPx.js +89 -0
  259. package/dist/path-env-RsuO6yO-.js +89 -0
  260. package/dist/path-safety-CfiVyVz7.js +14 -0
  261. package/dist/path-safety-D-wLK4pV.js +14 -0
  262. package/dist/plugin-auto-enable-Clf77U_7.js +301 -0
  263. package/dist/plugin-auto-enable-DRQAFGIq.js +302 -0
  264. package/dist/plugin-registry-CfhQH7xA.js +33 -0
  265. package/dist/plugin-registry-Vx_Qsymk.js +33 -0
  266. package/dist/plugin-sdk/agents/agent-helpers.d.ts +0 -1
  267. package/dist/plugin-sdk/agents/agent-scope.d.ts +10 -0
  268. package/dist/plugin-sdk/agents/agent-types.d.ts +1 -6
  269. package/dist/plugin-sdk/agents/agent-utils.d.ts +0 -14
  270. package/dist/plugin-sdk/agents/provider-utils.d.ts +0 -1
  271. package/dist/plugin-sdk/agents/subagent-spawn.d.ts +0 -1
  272. package/dist/plugin-sdk/agents/tools/sessions-helpers.d.ts +0 -1
  273. package/dist/plugin-sdk/auth/constants.d.ts +15 -0
  274. package/dist/plugin-sdk/auth/display.d.ts +7 -0
  275. package/dist/plugin-sdk/auth/doctor.d.ts +8 -0
  276. package/dist/plugin-sdk/auth/env-injection.d.ts +38 -0
  277. package/dist/plugin-sdk/auth/index.d.ts +10 -0
  278. package/dist/plugin-sdk/auth/oauth.d.ts +13 -0
  279. package/dist/plugin-sdk/auth/order.d.ts +8 -0
  280. package/dist/plugin-sdk/auth/paths.d.ts +3 -0
  281. package/dist/plugin-sdk/auth/profiles.d.ts +11 -0
  282. package/dist/plugin-sdk/auth/provider-auth.d.ts +32 -0
  283. package/dist/plugin-sdk/auth/store.d.ts +7 -0
  284. package/dist/plugin-sdk/auth/types.d.ts +45 -0
  285. package/dist/plugin-sdk/auth/usage.d.ts +80 -0
  286. package/dist/plugin-sdk/auto-reply/reply/agent-runner-execution.d.ts +0 -1
  287. package/dist/plugin-sdk/auto-reply/reply/agent-runner-utils.d.ts +3 -36
  288. package/dist/plugin-sdk/auto-reply/reply/commands-status.d.ts +1 -7
  289. package/dist/plugin-sdk/auto-reply/reply/commands-subagents/shared.d.ts +1 -1
  290. package/dist/plugin-sdk/auto-reply/reply/commands-types.d.ts +1 -13
  291. package/dist/plugin-sdk/auto-reply/reply/directive-handling.levels.d.ts +1 -10
  292. package/dist/plugin-sdk/auto-reply/reply/directive-handling.params.d.ts +1 -11
  293. package/dist/plugin-sdk/auto-reply/reply/directive-handling.parse.d.ts +1 -29
  294. package/dist/plugin-sdk/auto-reply/reply/directive-handling.persist.d.ts +0 -3
  295. package/dist/plugin-sdk/auto-reply/reply/directive-handling.shared.d.ts +0 -25
  296. package/dist/plugin-sdk/auto-reply/reply/directives.d.ts +3 -42
  297. package/dist/plugin-sdk/auto-reply/reply/get-reply-directives-apply.d.ts +0 -9
  298. package/dist/plugin-sdk/auto-reply/reply/get-reply-directives-utils.d.ts +0 -1
  299. package/dist/plugin-sdk/auto-reply/reply/get-reply-directives.d.ts +1 -20
  300. package/dist/plugin-sdk/auto-reply/reply/get-reply-inline-actions.d.ts +1 -12
  301. package/dist/plugin-sdk/auto-reply/reply/get-reply-run.d.ts +1 -15
  302. package/dist/plugin-sdk/auto-reply/reply/queue/types.d.ts +1 -17
  303. package/dist/plugin-sdk/auto-reply/reply/response-prefix-template.d.ts +4 -6
  304. package/dist/plugin-sdk/auto-reply/reply/session-run-accounting.d.ts +0 -7
  305. package/dist/plugin-sdk/auto-reply/reply/session-updates.d.ts +0 -10
  306. package/dist/plugin-sdk/auto-reply/reply.d.ts +1 -1
  307. package/dist/plugin-sdk/auto-reply/status.d.ts +3 -12
  308. package/dist/plugin-sdk/auto-reply/templating.d.ts +0 -4
  309. package/dist/plugin-sdk/auto-reply/thinking.d.ts +0 -15
  310. package/dist/plugin-sdk/auto-reply/types.d.ts +1 -2
  311. package/dist/plugin-sdk/channels/dock.d.ts +1 -2
  312. package/dist/plugin-sdk/channels/plugins/types.adapters.d.ts +0 -6
  313. package/dist/plugin-sdk/channels/plugins/types.core.d.ts +1 -0
  314. package/dist/plugin-sdk/channels/plugins/types.d.ts +1 -1
  315. package/dist/plugin-sdk/channels/plugins/types.plugin.d.ts +1 -2
  316. package/dist/plugin-sdk/channels/voice-credentials.d.ts +26 -0
  317. package/dist/plugin-sdk/commands/agent/session.d.ts +1 -2
  318. package/dist/plugin-sdk/commands/onboard-helpers.d.ts +0 -1
  319. package/dist/plugin-sdk/commands/onboard-types.d.ts +2 -1
  320. package/dist/plugin-sdk/config/defaults.d.ts +0 -1
  321. package/dist/plugin-sdk/config/sessions/types.d.ts +0 -17
  322. package/dist/plugin-sdk/config/types.agent-defaults.d.ts +28 -120
  323. package/dist/plugin-sdk/config/types.agents.d.ts +8 -0
  324. package/dist/plugin-sdk/config/types.base.d.ts +0 -1
  325. package/dist/plugin-sdk/config/types.messages.d.ts +1 -6
  326. package/dist/plugin-sdk/config/types.remoteclaw.d.ts +2 -2
  327. package/dist/plugin-sdk/config/types.tools.d.ts +0 -73
  328. package/dist/plugin-sdk/config/types.tts.d.ts +2 -1
  329. package/dist/plugin-sdk/config/zod-schema.agent-defaults.d.ts +9 -70
  330. package/dist/plugin-sdk/config/zod-schema.agent-runtime.d.ts +12 -210
  331. package/dist/plugin-sdk/config/zod-schema.agents.d.ts +14 -86
  332. package/dist/plugin-sdk/config/zod-schema.core.d.ts +6 -234
  333. package/dist/plugin-sdk/config/zod-schema.d.ts +111 -378
  334. package/dist/plugin-sdk/config/zod-schema.providers-core.d.ts +148 -160
  335. package/dist/plugin-sdk/config/zod-schema.providers-whatsapp.d.ts +12 -12
  336. package/dist/plugin-sdk/config/zod-schema.providers.d.ts +88 -96
  337. package/dist/plugin-sdk/config/zod-schema.session.d.ts +4 -10
  338. package/dist/plugin-sdk/daemon/constants.d.ts +2 -2
  339. package/dist/plugin-sdk/gateway/protocol/index.d.ts +10 -17
  340. package/dist/plugin-sdk/gateway/protocol/schema/sessions.d.ts +0 -7
  341. package/dist/plugin-sdk/gateway/server/ws-types.d.ts +2 -0
  342. package/dist/plugin-sdk/gateway/session-utils.types.d.ts +0 -3
  343. package/dist/plugin-sdk/index.js +630 -298
  344. package/dist/plugin-sdk/infra/agent-events.d.ts +1 -1
  345. package/dist/plugin-sdk/infra/provider-usage.auth.d.ts +0 -1
  346. package/dist/plugin-sdk/infra/provider-usage.load.d.ts +0 -1
  347. package/dist/plugin-sdk/line/config-schema.d.ts +4 -4
  348. package/dist/plugin-sdk/logging/levels.d.ts +1 -1
  349. package/dist/plugin-sdk/middleware/auth-key-retry.d.ts +31 -0
  350. package/dist/plugin-sdk/middleware/channel-bridge.d.ts +4 -0
  351. package/dist/plugin-sdk/middleware/cli-runtime-base.d.ts +6 -0
  352. package/dist/plugin-sdk/middleware/error-classifier.d.ts +5 -0
  353. package/dist/plugin-sdk/middleware/media-capability.d.ts +21 -0
  354. package/dist/plugin-sdk/middleware/media-resolver.d.ts +12 -0
  355. package/dist/plugin-sdk/middleware/runtime-factory.d.ts +42 -0
  356. package/dist/plugin-sdk/middleware/runtimes/claude.d.ts +10 -0
  357. package/dist/plugin-sdk/middleware/runtimes/codex.d.ts +5 -0
  358. package/dist/plugin-sdk/middleware/runtimes/gemini.d.ts +11 -0
  359. package/dist/plugin-sdk/middleware/runtimes/opencode.d.ts +5 -0
  360. package/dist/plugin-sdk/middleware/types.d.ts +41 -1
  361. package/dist/plugin-sdk/plugin-sdk/index.d.ts +5 -1
  362. package/dist/plugin-sdk/plugins/manifest-registry.d.ts +2 -0
  363. package/dist/plugin-sdk/plugins/manifest.d.ts +2 -0
  364. package/dist/plugin-sdk/plugins/registry.d.ts +18 -0
  365. package/dist/plugin-sdk/plugins/types.d.ts +5 -1
  366. package/dist/plugin-sdk/stt/defaults.d.ts +2 -0
  367. package/dist/plugin-sdk/stt/preflight.d.ts +14 -0
  368. package/dist/plugin-sdk/stt/providers/deepgram/index.d.ts +2 -0
  369. package/dist/plugin-sdk/stt/providers/google/index.d.ts +2 -0
  370. package/dist/plugin-sdk/stt/providers/groq/index.d.ts +2 -0
  371. package/dist/plugin-sdk/stt/providers/index.d.ts +4 -0
  372. package/dist/plugin-sdk/stt/providers/mistral/index.d.ts +2 -0
  373. package/dist/plugin-sdk/stt/providers/openai/index.d.ts +2 -0
  374. package/dist/plugin-sdk/stt/stt.d.ts +27 -0
  375. package/dist/plugin-sdk/stt/types.d.ts +22 -0
  376. package/dist/plugin-sdk/tts/providers/edge.d.ts +2 -0
  377. package/dist/plugin-sdk/tts/providers/elevenlabs.d.ts +2 -0
  378. package/dist/plugin-sdk/tts/providers/index.d.ts +4 -0
  379. package/dist/plugin-sdk/tts/providers/openai.d.ts +2 -0
  380. package/dist/plugin-sdk/tts/tts.d.ts +13 -5
  381. package/dist/plugin-sdk/tts/types.d.ts +21 -0
  382. package/dist/plugins-B6gxcOlK.js +455 -0
  383. package/dist/plugins-DdMgSc_b.js +453 -0
  384. package/dist/plugins-cli-D5fuoEx8.js +806 -0
  385. package/dist/plugins-cli-DGqrv3uQ.js +802 -0
  386. package/dist/ports-BzQryQcU.js +370 -0
  387. package/dist/ports-DiQFcKUB.js +316 -0
  388. package/dist/ports-Dwh9LKcX.js +96 -0
  389. package/dist/ports-HRurfPIr.js +96 -0
  390. package/dist/preflight-2e11JrsO.js +667 -0
  391. package/dist/preflight-6QRqxWh7.js +667 -0
  392. package/dist/program-By-TLk9x.js +249 -0
  393. package/dist/program-context-D1dYwr2o.js +474 -0
  394. package/dist/progress-ChmZpgvt.js +124 -0
  395. package/dist/prompt-select-styled-B_aCNRqE.js +1669 -0
  396. package/dist/prompt-select-styled-CPEX0OKf.js +1672 -0
  397. package/dist/provider-auth-Bsn4ozya.js +187 -0
  398. package/dist/provider-auth-CfdnLqh3.js +187 -0
  399. package/dist/provider-dispatcher-B_ViAeWF.js +660 -0
  400. package/dist/provider-dispatcher-DPz54XTy.js +659 -0
  401. package/dist/push-apns-BszVkcZK.js +711 -0
  402. package/dist/push-apns-CLBX9Zwm.js +713 -0
  403. package/dist/pw-ai-B0eucAm7.js +1911 -0
  404. package/dist/pw-ai-D0a0l3Mt.js +1908 -0
  405. package/dist/qr-cli-Cl2PXhig.js +349 -0
  406. package/dist/qr-cli-DQ9nX7OP.js +353 -0
  407. package/dist/redact-snapshot-Dw2QKcma.js +1952 -0
  408. package/dist/redact-snapshot-g4-VHB3l.js +1952 -0
  409. package/dist/register.agent-Ci1Gzf7b.js +291 -0
  410. package/dist/register.agent-q_ieLLRc.js +1013 -0
  411. package/dist/register.configure-BfFp-GQu.js +134 -0
  412. package/dist/register.configure-DoR3qtQA.js +129 -0
  413. package/dist/register.import-CIekAduB.js +31 -0
  414. package/dist/register.import-RmTeYEhM.js +29 -0
  415. package/dist/register.maintenance-AobQQ7ek.js +502 -0
  416. package/dist/register.maintenance-DMkYhR3I.js +500 -0
  417. package/dist/register.message-BBTTQZpx.js +686 -0
  418. package/dist/register.message-D8AJTNYG.js +690 -0
  419. package/dist/register.onboard-CTxcV-Ls.js +93 -0
  420. package/dist/register.onboard-DDkP78KC.js +97 -0
  421. package/dist/register.setup-C9h7KD2F.js +113 -0
  422. package/dist/register.setup-DMEj5ZXE.js +117 -0
  423. package/dist/register.status-health-sessions-C_n1u-uW.js +428 -0
  424. package/dist/register.status-health-sessions-D7LHmiXW.js +666 -0
  425. package/dist/register.subclis-huGxK2o9.js +267 -0
  426. package/dist/replies-Bb5DchzZ.js +136 -0
  427. package/dist/replies-CGbEn09s.js +136 -0
  428. package/dist/reply-directives-DQ904djQ.js +182 -0
  429. package/dist/reply-directives-LuKvTSha.js +182 -0
  430. package/dist/reply-fFZaZsO9.js +12371 -0
  431. package/dist/reply-kCJycLPa.js +12374 -0
  432. package/dist/reply-payloads-DASjyaSS.js +527 -0
  433. package/dist/reply-prefix-DDgh77yy.js +37 -0
  434. package/dist/reply-prefix-j1qsWZUy.js +37 -0
  435. package/dist/resolve-route-B73QhBIl.js +249 -0
  436. package/dist/resolve-route-abVgfdrL.js +249 -0
  437. package/dist/response-prefix-template-D6f-kBt3.js +134 -0
  438. package/dist/response-prefix-template-DDvbVpx6.js +134 -0
  439. package/dist/retry-CDrH81GP.js +77 -0
  440. package/dist/run-main-CrbtMykc.js +307 -0
  441. package/dist/runtime-guard-DAHXelsb.js +60 -0
  442. package/dist/runtime-status-CM4rzyfO.js +12 -0
  443. package/dist/runtime-status-DJYthOLz.js +12 -0
  444. package/dist/secure-random-BYhr0N9T.js +44 -0
  445. package/dist/security-cli-B1rovuG3.js +482 -0
  446. package/dist/security-cli-D446C8TF.js +487 -0
  447. package/dist/send-0ekjHM6K.js +349 -0
  448. package/dist/send-B8nNpJ8z.js +492 -0
  449. package/dist/send-BPA-G1N7.js +492 -0
  450. package/dist/send-BegHyWMu.js +374 -0
  451. package/dist/send-ByZGnoWU.js +349 -0
  452. package/dist/send-C6CwEc53.js +2245 -0
  453. package/dist/send-C_Fwv6tK.js +29 -0
  454. package/dist/send-DBrC0vAc.js +332 -0
  455. package/dist/send-DECKQqND.js +11 -0
  456. package/dist/send-DIr-ZqCs.js +426 -0
  457. package/dist/send-DJAFmvBw.js +1779 -0
  458. package/dist/send-DMcm5X4v.js +1178 -0
  459. package/dist/send-DRuTHjnp.js +2245 -0
  460. package/dist/send-DYXj-NCC.js +547 -0
  461. package/dist/send-PrDp6hCg.js +547 -0
  462. package/dist/send-bNHStwva.js +1776 -0
  463. package/dist/server-7jS_nOoM.js +206 -0
  464. package/dist/server-CUW62TII.js +202 -0
  465. package/dist/server-lifecycle-B__EjEKJ.js +2437 -0
  466. package/dist/server-lifecycle-LZUhiCcl.js +2437 -0
  467. package/dist/server-node-events-BsltGTPw.js +390 -0
  468. package/dist/server-node-events-FWVNQAFe.js +394 -0
  469. package/dist/service-D4gZvNfV.js +670 -0
  470. package/dist/service-SRcnA1Am.js +670 -0
  471. package/dist/session-BLcfWX5_.js +170 -0
  472. package/dist/session-CQwkaAs-.js +170 -0
  473. package/dist/session-cost-usage-C-UcrvL4.js +627 -0
  474. package/dist/session-cost-usage-Dg3dzS0E.js +627 -0
  475. package/dist/session-dirs-BndjYGbO.js +318 -0
  476. package/dist/session-dirs-DVsG6e7L.js +318 -0
  477. package/dist/session-utils-BizbTwCq.js +621 -0
  478. package/dist/session-utils-CihXSkMX.js +621 -0
  479. package/dist/sessions-Bh4_6wS4.js +2569 -0
  480. package/dist/sessions-CrzERa3i.js +245 -0
  481. package/dist/shell-env-BJsMNoUW.js +163 -0
  482. package/dist/shell-env-DBS5su07.js +163 -0
  483. package/dist/ssrf-7I3FUHpm.js +183 -0
  484. package/dist/ssrf-DZi4qw5c.js +183 -0
  485. package/dist/status-C484AT5t.js +1947 -0
  486. package/dist/status-DAgOaLbu.js +1943 -0
  487. package/dist/status.update-DquSK3p7.js +449 -0
  488. package/dist/status.update-FROL8x9d.js +449 -0
  489. package/dist/store-BM1TzRvP.js +2571 -0
  490. package/dist/store-CVkGKjWm.js +64 -0
  491. package/dist/store-D_gpBpAW.js +64 -0
  492. package/dist/store-E2nOFKZ2.js +53 -0
  493. package/dist/subagent-registry-BdWwT0NO.js +4856 -0
  494. package/dist/subagent-registry-CB6BnueH.js +4854 -0
  495. package/dist/subsystem-D8kfyEka.js +1195 -0
  496. package/dist/subsystem-DGSHVL8I.js +1081 -0
  497. package/dist/system-cli-AqA8mEDW.js +77 -0
  498. package/dist/system-cli-Db7N_NQ2.js +73 -0
  499. package/dist/systemd-CYo5mGlr.js +547 -0
  500. package/dist/systemd-hints-Dt5zlVvl.js +278 -0
  501. package/dist/systemd-hints-ef7m-7ZH.js +278 -0
  502. package/dist/systemd-linger-CWLgT0Wr.js +75 -0
  503. package/dist/systemd-linger-DAQy4wYB.js +75 -0
  504. package/dist/systemd-tS61V4ao.js +547 -0
  505. package/dist/table-j8Ayarot.js +279 -0
  506. package/dist/tables-CCx-Kfdy.js +55 -0
  507. package/dist/tables-DgwnjXUA.js +55 -0
  508. package/dist/tables-K3rOiGaJ.js +55 -0
  509. package/dist/tailnet-D66Y5zC7.js +40 -0
  510. package/dist/tailscale-BwKRCEk1.js +230 -0
  511. package/dist/targets-5kn-o_0e.js +220 -0
  512. package/dist/targets-By-Qw60Z.js +650 -0
  513. package/dist/targets-C99szk_e.js +114 -0
  514. package/dist/targets-CSEMDhef.js +2607 -0
  515. package/dist/targets-DpmQjetK.js +53 -0
  516. package/dist/targets-Q-YGeAqu.js +650 -0
  517. package/dist/targets-Zb5zZXjb.js +2606 -0
  518. package/dist/targets-rdWlC6Y-.js +53 -0
  519. package/dist/targets-tDrl_ioQ.js +46 -0
  520. package/dist/thinking-4nOZPunr.js +60 -0
  521. package/dist/thinking-CBj4GYK7.js +60 -0
  522. package/dist/tool-display-CLBf5cRa.js +785 -0
  523. package/dist/tool-images-B0s3Yy_h.js +263 -0
  524. package/dist/trash-B32LfX0l.js +125 -0
  525. package/dist/trash-D_rdyBn_.js +125 -0
  526. package/dist/tui-A8Z7ICAm.js +3237 -0
  527. package/dist/tui-BNiSVUMp.js +3237 -0
  528. package/dist/tui-cli-BujRvFwr.js +66 -0
  529. package/dist/tui-cli-DXDqCsC1.js +62 -0
  530. package/dist/update-Bv5AbFJS.js +349 -0
  531. package/dist/update-DX3XKlXV.js +349 -0
  532. package/dist/update-cli-1-Nb18SP.js +1149 -0
  533. package/dist/update-cli-DYak_eFl.js +1147 -0
  534. package/dist/usage-Cu58iS4h.js +5481 -0
  535. package/dist/version-3QUZW8EP.js +52 -0
  536. package/dist/version-CVMnqdzu.js +52 -0
  537. package/dist/voice-credentials-DiZ2BORb.js +46 -0
  538. package/dist/voice-credentials-Dies1m8N.js +46 -0
  539. package/dist/web-BTHNmvKo.js +3051 -0
  540. package/dist/web-D_bDHlA7.js +74 -0
  541. package/dist/web-af4OsajQ.js +79 -0
  542. package/dist/webhooks-cli-BgQ8ZAhm.js +330 -0
  543. package/dist/webhooks-cli-t2JdeK4Z.js +334 -0
  544. package/dist/whatsapp-actions-B3mZkjOa.js +130 -0
  545. package/dist/whatsapp-actions-CvLMNOsJ.js +125 -0
  546. package/dist/workspace-C3_z9qUD.js +447 -0
  547. package/dist/workspace-h4Rszuyn.js +449 -0
  548. package/dist/zod-schema-C752uoFq.js +2719 -0
  549. package/dist/zod-schema-DwrIwN65.js +2719 -0
  550. package/extensions/matrix/src/matrix/monitor/replies.ts +0 -24
  551. package/extensions/mattermost/src/mattermost/monitor-helpers.ts +0 -1
  552. package/extensions/voice-call/index.ts +18 -1
  553. package/package.json +3 -4
  554. package/dist/accounts-B1aJFYXr.js +0 -272
  555. package/dist/accounts-BTXSfPWi.js +0 -270
  556. package/dist/accounts-Bexa80SB.js +0 -32
  557. package/dist/accounts-BxGS70Do.js +0 -36
  558. package/dist/accounts-CNY1TGj1.js +0 -47
  559. package/dist/accounts-Cl_cFv9X.js +0 -47
  560. package/dist/accounts-Dn9h7HHT.js +0 -36
  561. package/dist/ack-reactions-B11TAC2D.js +0 -446
  562. package/dist/ack-reactions-CDUSdN8O.js +0 -446
  563. package/dist/acp-cli-CA1xMmVo.js +0 -1320
  564. package/dist/acp-cli-Dr83tqAg.js +0 -1326
  565. package/dist/active-listener-VzhWW8W6.js +0 -37
  566. package/dist/active-listener-z0qVEcom.js +0 -37
  567. package/dist/agent-CFKgqSEH.js +0 -732
  568. package/dist/agent-D2RVoS5g.js +0 -731
  569. package/dist/agent-helpers-CTx5KKJu.js +0 -606
  570. package/dist/agent-helpers-D_9mS2Ti.js +0 -606
  571. package/dist/agent-scope-9WY5O-KK.js +0 -121
  572. package/dist/agent-scope-C50VuLKh.js +0 -119
  573. package/dist/agents-BBXCuDMp.js +0 -788
  574. package/dist/agents.config-BPGQ3Qyn.js +0 -116
  575. package/dist/agents.config-p3V3b9u6.js +0 -116
  576. package/dist/ansi-D04X81yq.js +0 -14
  577. package/dist/audio-DPOuhNq7.js +0 -43
  578. package/dist/audio-VBcVDa08.js +0 -43
  579. package/dist/audio-preflight-BwmCYeuM.js +0 -64
  580. package/dist/audio-preflight-Dj6hBcFR.js +0 -69
  581. package/dist/audit-DhIKIeXD.js +0 -3138
  582. package/dist/audit-qgtCT3ik.js +0 -3138
  583. package/dist/auth-C6VDYgb7.js +0 -448
  584. package/dist/auth-Deh9i9Eg.js +0 -448
  585. package/dist/auth-profiles-BquJGKLC.js +0 -279
  586. package/dist/auth-profiles-CeDgZz_7.js +0 -281
  587. package/dist/banner-HCssFZcB.js +0 -294
  588. package/dist/binaries-X6FW-wD4.js +0 -13
  589. package/dist/bindings-B582pDIa.js +0 -69
  590. package/dist/bindings-CRU_udk8.js +0 -69
  591. package/dist/bonjour-discovery-BtPaR8vb.js +0 -378
  592. package/dist/bonjour-discovery-DuhiIZZx.js +0 -378
  593. package/dist/browser-cli-HH45lxP0.js +0 -1687
  594. package/dist/browser-cli-TB-GNoZq.js +0 -1692
  595. package/dist/call-BbwtB9Y-.js +0 -2828
  596. package/dist/call-ByOzoLDI.js +0 -2829
  597. package/dist/catalog-BY7OPtnz.js +0 -185
  598. package/dist/catalog-BqO6yem_.js +0 -185
  599. package/dist/channel-account-context-CjXyzMXE.js +0 -550
  600. package/dist/channel-account-context-CvIDAtHS.js +0 -550
  601. package/dist/channel-activity-BeRrcCd8.js +0 -94
  602. package/dist/channel-activity-DTKGf3j5.js +0 -94
  603. package/dist/channel-activity-hPfValKp.js +0 -292
  604. package/dist/channel-options-BLdLu0xk.js +0 -33
  605. package/dist/channel-options-BQ61blla.js +0 -32
  606. package/dist/channel-selection-CJXZTxae.js +0 -51
  607. package/dist/channel-selection-NNPbxnyZ.js +0 -51
  608. package/dist/channel-web-D1_mlyPg.js +0 -2136
  609. package/dist/channel-web-DmhVkWbP.js +0 -2134
  610. package/dist/channels-cli-C4O8pp1S.js +0 -1426
  611. package/dist/channels-cli-DAu1TXTH.js +0 -1421
  612. package/dist/channels-status-issues-BDAHISWe.js +0 -18
  613. package/dist/channels-status-issues-DwRDzwrV.js +0 -18
  614. package/dist/chat-envelope-DEZ-5RY8.js +0 -248
  615. package/dist/chat-envelope-el7Uo-Fe.js +0 -248
  616. package/dist/chrome-CNDtczoM.js +0 -1733
  617. package/dist/chrome-CdcwZN9t.js +0 -1732
  618. package/dist/chunk-CSQfUhgF.js +0 -341
  619. package/dist/chunk-DAjFKt2g.js +0 -341
  620. package/dist/clack-prompter-CCFnKP_1.js +0 -121
  621. package/dist/clack-prompter-CabwzmG4.js +0 -122
  622. package/dist/cli-BuMX-jRY.js +0 -130
  623. package/dist/cli-Ci4DmAyk.js +0 -125
  624. package/dist/clipboard-B2j4qGIl.js +0 -31
  625. package/dist/command-format-CVfo8I5f.js +0 -18
  626. package/dist/command-format-DgXcqxBt.js +0 -32
  627. package/dist/command-registry-DxsFXB5t.js +0 -215
  628. package/dist/commands-C2uNKRTf.js +0 -41
  629. package/dist/commands-CDonBOrw.js +0 -41
  630. package/dist/commands-registry-BvESmXoK.js +0 -893
  631. package/dist/commands-registry-CWJv6xe2.js +0 -892
  632. package/dist/common-Cp3rsBqx.js +0 -156
  633. package/dist/completion-cli-B-X5nwdT.js +0 -452
  634. package/dist/completion-cli-DD3pVpPn.js +0 -452
  635. package/dist/config-BqY7k-L8.js +0 -6953
  636. package/dist/config-FHu9Bn4R.js +0 -6951
  637. package/dist/config-cli-CPH_PfVk.js +0 -241
  638. package/dist/config-cli-Czvt02PC.js +0 -246
  639. package/dist/config-guard-5oI2BiSY.js +0 -97
  640. package/dist/config-guard-cB5a_ANg.js +0 -75
  641. package/dist/config-validation-BPNyd9_3.js +0 -18
  642. package/dist/config-validation-J3cJ0OCa.js +0 -18
  643. package/dist/configure-Bi_9d94n.js +0 -889
  644. package/dist/configure-DiQaHI3s.js +0 -891
  645. package/dist/constants-BmRFoHl0.js +0 -67
  646. package/dist/constants-C9WPAluB.js +0 -67
  647. package/dist/control-auth-D0tpV3ts.js +0 -397
  648. package/dist/control-auth-q4zZXaoS.js +0 -397
  649. package/dist/control-ui/assets/index-B4ZM1lW1.js +0 -7738
  650. package/dist/control-ui/assets/index-B4ZM1lW1.js.map +0 -1
  651. package/dist/control-ui/assets/index-PED72sKF.css +0 -1
  652. package/dist/control-ui-assets-Cx_mw4D0.js +0 -186
  653. package/dist/control-ui-assets-D4yaD8jm.js +0 -186
  654. package/dist/conversation-label-C4SDz4sT.js +0 -36
  655. package/dist/conversation-label-D1frnvYe.js +0 -36
  656. package/dist/cron-cli-Bfh7ftYz.js +0 -495
  657. package/dist/cron-cli-C8j_uslU.js +0 -490
  658. package/dist/daemon-cli-DQFZB1yM.js +0 -1197
  659. package/dist/daemon-cli-lTsfNeDm.js +0 -1199
  660. package/dist/daemon-install-CcohRvKV.js +0 -55
  661. package/dist/daemon-install-DrTvAWhM.js +0 -60
  662. package/dist/daemon-install-helpers-CFGAfRlj.js +0 -462
  663. package/dist/daemon-install-helpers-DIUzSFG1.js +0 -462
  664. package/dist/defaults-B5KStIBg.js +0 -7
  665. package/dist/defaults-xUAL2Z-F.js +0 -7
  666. package/dist/deliver-912khjLK.js +0 -481
  667. package/dist/deliver-D78pwuPC.js +0 -481
  668. package/dist/delivery-queue-Cfa9Wmxp.js +0 -244
  669. package/dist/delivery-queue-CxVRi4tw.js +0 -244
  670. package/dist/devices-cli-0qDhTgZR.js +0 -316
  671. package/dist/devices-cli-CstkYXzr.js +0 -321
  672. package/dist/diagnostics-HGkN467d.js +0 -46
  673. package/dist/diagnostics-VC0cz7kX.js +0 -46
  674. package/dist/directory-cli-5YXdoVdn.js +0 -217
  675. package/dist/directory-cli-duhBZl2c.js +0 -222
  676. package/dist/dm-policy-shared-BBfEyAN1.js +0 -22
  677. package/dist/dm-policy-shared-D8lgnmrC.js +0 -22
  678. package/dist/dns-cli-11CtErVU.js +0 -197
  679. package/dist/dns-cli-Sr6SB9ei.js +0 -202
  680. package/dist/dock-BqNINg7k.js +0 -928
  681. package/dist/dock-O8ArYwed.js +0 -929
  682. package/dist/doctor-completion-B1UlvZFx.js +0 -92
  683. package/dist/doctor-completion-C0j7b_f8.js +0 -92
  684. package/dist/doctor-config-flow-BVkHcvoj.js +0 -1933
  685. package/dist/doctor-config-flow-BiShkCxs.js +0 -1934
  686. package/dist/enable-DMIq6evt.js +0 -59
  687. package/dist/enable-ibNq4UWy.js +0 -59
  688. package/dist/env-Br2Bl6Ht.js +0 -60
  689. package/dist/env-vars-7aZqKPhk.js +0 -93
  690. package/dist/env-vars-CLGbxdpL.js +0 -93
  691. package/dist/errors-BpAidYqH.js +0 -35
  692. package/dist/exec-C6ACg_Mn.js +0 -164
  693. package/dist/fetch-Bmv93nu9.js +0 -67
  694. package/dist/fetch-C6XKGA11.js +0 -67
  695. package/dist/fetch-CEDsOiql.js +0 -67
  696. package/dist/file-lock-CIvloidc.js +0 -107
  697. package/dist/file-lock-CzBL_VIx.js +0 -107
  698. package/dist/fs-safe-DSwT85uK.js +0 -88
  699. package/dist/fs-safe-DkBhNAc3.js +0 -98
  700. package/dist/gateway-cli-D4cDhvZx.js +0 -23747
  701. package/dist/gateway-cli-DuMjB8Ff.js +0 -23742
  702. package/dist/gateway-rpc-B4jTtupy.js +0 -28
  703. package/dist/gateway-rpc-Dq44SkOv.js +0 -28
  704. package/dist/gmail-setup-utils-BPmUIqso.js +0 -423
  705. package/dist/gmail-setup-utils-Cnx8A5pW.js +0 -422
  706. package/dist/health-SOuaKNRa.js +0 -1420
  707. package/dist/health-wr-JDHlc.js +0 -1423
  708. package/dist/heartbeat-visibility-BxkZjE5m.js +0 -125
  709. package/dist/heartbeat-visibility-ossI_l4t.js +0 -125
  710. package/dist/helpers-R7bU5IBz.js +0 -10
  711. package/dist/helpers-kkeXif0Q.js +0 -10
  712. package/dist/hook-runner-global-DJ14gXFP.js +0 -527
  713. package/dist/hooks-cli-BUTtESiX.js +0 -1217
  714. package/dist/hooks-cli-eqPYjw4l.js +0 -1222
  715. package/dist/host-env-security-Bms2_EMV.js +0 -92
  716. package/dist/host-env-security-szwfmhC4.js +0 -92
  717. package/dist/image-ops-DRdKC0uO.js +0 -354
  718. package/dist/import-Be73VPF2.js +0 -170
  719. package/dist/import-DQ6NI4Fz.js +0 -168
  720. package/dist/inbound-context-CPkkQW0i.js +0 -68
  721. package/dist/inbound-context-DS_kpIYI.js +0 -68
  722. package/dist/inbound-path-policy-C_Qo8rqg.js +0 -250
  723. package/dist/inbound-path-policy-sdr5Ji0k.js +0 -250
  724. package/dist/inspect-B1Fq39RC.js +0 -559
  725. package/dist/inspect-Dt8hogS3.js +0 -559
  726. package/dist/installs-C8apg11p.js +0 -325
  727. package/dist/installs-pWdqG8HL.js +0 -325
  728. package/dist/ipv4-CDQpx1A7.js +0 -46
  729. package/dist/ir-Ch9FC9Z_.js +0 -940
  730. package/dist/json-files-DzpTak5i.js +0 -46
  731. package/dist/loader-Cuq-saEl.js +0 -22621
  732. package/dist/loader-u9FC6kYG.js +0 -22624
  733. package/dist/local-roots-BrH0Q63K.js +0 -313
  734. package/dist/local-roots-z2u_s7jG.js +0 -314
  735. package/dist/logger-pznB_IdT.js +0 -49
  736. package/dist/login-CYq-visu.js +0 -62
  737. package/dist/login-DOmWDMeP.js +0 -61
  738. package/dist/login-qr-CXU0wC5K.js +0 -322
  739. package/dist/login-qr-D85vVatX.js +0 -327
  740. package/dist/logs-cli-Cu2S08Y3.js +0 -238
  741. package/dist/logs-cli-D7ayUvz_.js +0 -233
  742. package/dist/markdown-tables-hhOWaw8L.js +0 -29
  743. package/dist/markdown-tables-jrnSPvZ6.js +0 -29
  744. package/dist/media-DN7yRfrH.js +0 -940
  745. package/dist/media-DOQIalam.js +0 -10492
  746. package/dist/message-action-names-Dk9kxwRd.js +0 -2521
  747. package/dist/message-action-names-EsOcuFpq.js +0 -2521
  748. package/dist/message-channel-BlYrtmIp.js +0 -91
  749. package/dist/message-channel-uWMAiywE.js +0 -91
  750. package/dist/mime-BS3jhcZE.js +0 -149
  751. package/dist/mime-Cxh_64P6.js +0 -149
  752. package/dist/net-D6D0wgcF.js +0 -225
  753. package/dist/node-cli-Q2-n3Fgv.js +0 -24
  754. package/dist/node-cli-Uf6lAntf.js +0 -24
  755. package/dist/nodes-cli-BDq-4dHm.js +0 -1348
  756. package/dist/nodes-cli-C2SoKfCv.js +0 -1343
  757. package/dist/nodes-screen-Bmp1l9wY.js +0 -250
  758. package/dist/nodes-screen-Cw7Hv7M2.js +0 -250
  759. package/dist/note-DR8A0G5H.js +0 -92
  760. package/dist/note-Dlv4NmlQ.js +0 -92
  761. package/dist/npm-registry-spec-COvUzy5J.js +0 -786
  762. package/dist/npm-registry-spec-Cobb5KYR.js +0 -786
  763. package/dist/npm-resolution-BmgD7x45.js +0 -86
  764. package/dist/npm-resolution-DNYcV-Br.js +0 -86
  765. package/dist/onboard-Dy0q82Mj.js +0 -405
  766. package/dist/onboard-channels-9QS_7iph.js +0 -2548
  767. package/dist/onboard-channels-EH2wvu6Y.js +0 -2547
  768. package/dist/onboard-config-BCTthQ7J.js +0 -24
  769. package/dist/onboard-config-y-2cgT0V.js +0 -24
  770. package/dist/onboard-helpers-ChPmr3lh.js +0 -363
  771. package/dist/onboard-helpers-Jy3345Jk.js +0 -362
  772. package/dist/onboard-remote-CM6Yl1oL.js +0 -127
  773. package/dist/onboard-remote-Id80PV28.js +0 -127
  774. package/dist/onboard-uvDMehqu.js +0 -407
  775. package/dist/onboarding-BVtzeopT.js +0 -534
  776. package/dist/onboarding-DlXBAIDc.js +0 -532
  777. package/dist/onboarding.finalize-Dve-3p-y.js +0 -398
  778. package/dist/onboarding.finalize-GIK3ktiW.js +0 -401
  779. package/dist/onboarding.gateway-config-BCV5T35-.js +0 -198
  780. package/dist/onboarding.gateway-config-DW-09FX5.js +0 -191
  781. package/dist/outbound-CFfJC1j5.js +0 -220
  782. package/dist/outbound-CjFRpudN.js +0 -221
  783. package/dist/outbound-attachment-BxMSma9v.js +0 -18
  784. package/dist/outbound-attachment-DIiKB_mP.js +0 -18
  785. package/dist/outbound-attachment-o0seS0CP.js +0 -18
  786. package/dist/pairing-cli-BeydfoF9.js +0 -122
  787. package/dist/pairing-cli-GgwzEWJX.js +0 -127
  788. package/dist/pairing-labels-B_53dY5L.js +0 -9
  789. package/dist/pairing-labels-BiSZLitI.js +0 -9
  790. package/dist/pairing-store-BgAv4uN8.js +0 -460
  791. package/dist/pairing-store-CTkD51uW.js +0 -459
  792. package/dist/path-env-ErEKbxOI.js +0 -89
  793. package/dist/path-env-qRJbjJzj.js +0 -89
  794. package/dist/path-safety-DkT9RmTG.js +0 -14
  795. package/dist/path-safety-juI2XbO1.js +0 -14
  796. package/dist/plugin-auto-enable-CloCFyTz.js +0 -302
  797. package/dist/plugin-auto-enable-DuPS9XiJ.js +0 -301
  798. package/dist/plugin-registry-D5QsH-IS.js +0 -33
  799. package/dist/plugin-registry-DnO3azwy.js +0 -33
  800. package/dist/plugin-sdk/agents/agent-helpers/thinking.d.ts +0 -5
  801. package/dist/plugin-sdk/agents/agent-paths.d.ts +0 -1
  802. package/dist/plugin-sdk/agents/auth-profiles/constants.d.ts +0 -16
  803. package/dist/plugin-sdk/agents/auth-profiles/display.d.ts +0 -7
  804. package/dist/plugin-sdk/agents/auth-profiles/doctor.d.ts +0 -8
  805. package/dist/plugin-sdk/agents/auth-profiles/oauth.d.ts +0 -14
  806. package/dist/plugin-sdk/agents/auth-profiles/paths.d.ts +0 -4
  807. package/dist/plugin-sdk/agents/auth-profiles/profiles.d.ts +0 -12
  808. package/dist/plugin-sdk/agents/auth-profiles/session-override.d.ts +0 -18
  809. package/dist/plugin-sdk/agents/auth-profiles/store.d.ts +0 -10
  810. package/dist/plugin-sdk/agents/auth-profiles/types.d.ts +0 -13
  811. package/dist/plugin-sdk/agents/auth-profiles.d.ts +0 -8
  812. package/dist/plugin-sdk/agents/defaults.d.ts +0 -3
  813. package/dist/plugin-sdk/agents/provider-auth.d.ts +0 -40
  814. package/dist/plugin-sdk/auto-reply/model-runtime.d.ts +0 -17
  815. package/dist/plugin-sdk/auto-reply/reply/directive-handling.auth.d.ts +0 -19
  816. package/dist/plugin-sdk/auto-reply/reply/elevated-allowlist-matcher.d.ts +0 -20
  817. package/dist/plugin-sdk/auto-reply/reply/elevated-unavailable.d.ts +0 -8
  818. package/dist/plugin-sdk/auto-reply/reply/reply-elevated.d.ts +0 -16
  819. package/dist/plugin-sdk/config/model-input.d.ts +0 -9
  820. package/dist/plugin-sdk/config/zod-schema.agent-model.d.ts +0 -5
  821. package/dist/plugin-sdk/link-understanding/apply.d.ts +0 -10
  822. package/dist/plugin-sdk/link-understanding/defaults.d.ts +0 -2
  823. package/dist/plugin-sdk/link-understanding/detect.d.ts +0 -3
  824. package/dist/plugin-sdk/link-understanding/format.d.ts +0 -4
  825. package/dist/plugin-sdk/link-understanding/runner.d.ts +0 -11
  826. package/dist/plugin-sdk/media/input-files.d.ts +0 -95
  827. package/dist/plugin-sdk/media-understanding/apply.d.ts +0 -19
  828. package/dist/plugin-sdk/media-understanding/attachments.d.ts +0 -49
  829. package/dist/plugin-sdk/media-understanding/audio-preflight.d.ts +0 -16
  830. package/dist/plugin-sdk/media-understanding/concurrency.d.ts +0 -1
  831. package/dist/plugin-sdk/media-understanding/defaults.d.ts +0 -12
  832. package/dist/plugin-sdk/media-understanding/errors.d.ts +0 -6
  833. package/dist/plugin-sdk/media-understanding/format.d.ts +0 -7
  834. package/dist/plugin-sdk/media-understanding/fs.d.ts +0 -1
  835. package/dist/plugin-sdk/media-understanding/output-extract.d.ts +0 -2
  836. package/dist/plugin-sdk/media-understanding/providers/anthropic/index.d.ts +0 -2
  837. package/dist/plugin-sdk/media-understanding/providers/deepgram/index.d.ts +0 -2
  838. package/dist/plugin-sdk/media-understanding/providers/google/index.d.ts +0 -2
  839. package/dist/plugin-sdk/media-understanding/providers/google/video.d.ts +0 -3
  840. package/dist/plugin-sdk/media-understanding/providers/groq/index.d.ts +0 -2
  841. package/dist/plugin-sdk/media-understanding/providers/index.d.ts +0 -4
  842. package/dist/plugin-sdk/media-understanding/providers/minimax/index.d.ts +0 -2
  843. package/dist/plugin-sdk/media-understanding/providers/mistral/index.d.ts +0 -2
  844. package/dist/plugin-sdk/media-understanding/providers/moonshot/index.d.ts +0 -2
  845. package/dist/plugin-sdk/media-understanding/providers/moonshot/video.d.ts +0 -3
  846. package/dist/plugin-sdk/media-understanding/providers/openai/index.d.ts +0 -2
  847. package/dist/plugin-sdk/media-understanding/providers/zai/index.d.ts +0 -2
  848. package/dist/plugin-sdk/media-understanding/resolve.d.ts +0 -44
  849. package/dist/plugin-sdk/media-understanding/runner.d.ts +0 -34
  850. package/dist/plugin-sdk/media-understanding/runner.entries.d.ts +0 -33
  851. package/dist/plugin-sdk/media-understanding/scope.d.ts +0 -9
  852. package/dist/plugin-sdk/media-understanding/types.d.ts +0 -74
  853. package/dist/plugin-sdk/media-understanding/video.d.ts +0 -2
  854. package/dist/plugin-sdk/sessions/model-overrides.d.ts +0 -14
  855. package/dist/plugin-sdk/telegram/reasoning-lane-coordinator.d.ts +0 -18
  856. package/dist/plugin-sdk/utils/mask-api-key.d.ts +0 -1
  857. package/dist/plugin-sdk/utils/run-with-concurrency.d.ts +0 -11
  858. package/dist/plugins-BXkDApVh.js +0 -455
  859. package/dist/plugins-BflZz0sp.js +0 -453
  860. package/dist/plugins-cli-Cf_RP_bn.js +0 -798
  861. package/dist/plugins-cli-DmbjYnO9.js +0 -793
  862. package/dist/ports-DIYJq-SY.js +0 -370
  863. package/dist/ports-DPL-Pzfh.js +0 -96
  864. package/dist/ports-NPqtlfp0.js +0 -316
  865. package/dist/ports-QMI4-F9m.js +0 -96
  866. package/dist/program-BaATq6CL.js +0 -244
  867. package/dist/program-context-C7b5MQbg.js +0 -474
  868. package/dist/progress--dapuyZA.js +0 -124
  869. package/dist/prompt-select-styled-BAsxl6hj.js +0 -1650
  870. package/dist/prompt-select-styled-aqjxCbwP.js +0 -1647
  871. package/dist/provider-dispatcher-B4QMe-I6.js +0 -659
  872. package/dist/provider-dispatcher-mAkRbPyH.js +0 -660
  873. package/dist/push-apns-CLmNS5AZ.js +0 -713
  874. package/dist/push-apns-DuG95AKC.js +0 -711
  875. package/dist/pw-ai-DuK87zsJ.js +0 -1906
  876. package/dist/pw-ai-ulOU3Ya1.js +0 -1910
  877. package/dist/qr-cli-9WQBnauO.js +0 -352
  878. package/dist/qr-cli-hSLixZCe.js +0 -347
  879. package/dist/redact-snapshot-BZYLIqe-.js +0 -2028
  880. package/dist/redact-snapshot-D2P_lRgf.js +0 -2028
  881. package/dist/register.agent-CquY2yLI.js +0 -286
  882. package/dist/register.agent-DZL_fw2K.js +0 -1043
  883. package/dist/register.configure-C2HjaKO0.js +0 -124
  884. package/dist/register.configure-D7Di47Lb.js +0 -130
  885. package/dist/register.import-Bs-UkOs-.js +0 -27
  886. package/dist/register.import-CaJ0DS1t.js +0 -30
  887. package/dist/register.maintenance-CslelbHK.js +0 -497
  888. package/dist/register.maintenance-Dd4fn6oX.js +0 -494
  889. package/dist/register.message-D2xmx0xB.js +0 -681
  890. package/dist/register.message-_Q8ehgQP.js +0 -686
  891. package/dist/register.onboard-BFSwh5g4.js +0 -262
  892. package/dist/register.onboard-CIupEYmX.js +0 -257
  893. package/dist/register.setup-7pk1r-54.js +0 -114
  894. package/dist/register.setup-Bm1Jtx0c.js +0 -109
  895. package/dist/register.status-health-sessions-C-Pbi-qq.js +0 -669
  896. package/dist/register.status-health-sessions-Cn4yWBWw.js +0 -423
  897. package/dist/register.subclis-DXmLofHX.js +0 -267
  898. package/dist/replies-BKrzM0QI.js +0 -136
  899. package/dist/replies-BkXDql3c.js +0 -136
  900. package/dist/reply-DSKC8kyS.js +0 -13897
  901. package/dist/reply-directives-CBeNSCHL.js +0 -182
  902. package/dist/reply-directives-CD2WycBM.js +0 -182
  903. package/dist/reply-n8KWtBQB.js +0 -13900
  904. package/dist/reply-payloads-CeL_cBnD.js +0 -527
  905. package/dist/reply-prefix-4zLS7A1Y.js +0 -38
  906. package/dist/reply-prefix-DBLCYiup.js +0 -38
  907. package/dist/resolve-route-BDGdM-l3.js +0 -249
  908. package/dist/resolve-route-CBVbY0xS.js +0 -249
  909. package/dist/response-prefix-template-CSxp9HN5.js +0 -136
  910. package/dist/response-prefix-template-up4REfuR.js +0 -136
  911. package/dist/retry-C81p7BZU.js +0 -77
  912. package/dist/run-main-CuA7VmAq.js +0 -320
  913. package/dist/runner-BbLPl1dz.js +0 -2294
  914. package/dist/runner-z92MWZ3m.js +0 -2294
  915. package/dist/runtime-DJNp29jv.js +0 -94
  916. package/dist/runtime-guard-DZ_xuCc4.js +0 -60
  917. package/dist/secure-random-D2IOpBkk.js +0 -44
  918. package/dist/security-cli-BR3Y1FBJ.js +0 -484
  919. package/dist/security-cli-DP5QJpa5.js +0 -478
  920. package/dist/send-0uEtKwU_.js +0 -2245
  921. package/dist/send-B3O7bzYU.js +0 -1174
  922. package/dist/send-BWSo3i3H.js +0 -1778
  923. package/dist/send-BkSUAGj6.js +0 -349
  924. package/dist/send-Bx9bUGav.js +0 -492
  925. package/dist/send-CBGSXjfD.js +0 -2245
  926. package/dist/send-CRS-OcnW.js +0 -29
  927. package/dist/send-DPttDPIR.js +0 -374
  928. package/dist/send-D_DUQJ6H.js +0 -349
  929. package/dist/send-DyftOlFD.js +0 -332
  930. package/dist/send-Lij9A7lk.js +0 -547
  931. package/dist/send-YRVDWfSs.js +0 -547
  932. package/dist/send-dzS4fa9O.js +0 -492
  933. package/dist/send-uchxcHYC.js +0 -11
  934. package/dist/send-xUPOqzUr.js +0 -426
  935. package/dist/send-xnwty9cY.js +0 -1775
  936. package/dist/server-BE5lybcS.js +0 -205
  937. package/dist/server-LdLsvPPw.js +0 -200
  938. package/dist/server-lifecycle-B3Rdmq7-.js +0 -2437
  939. package/dist/server-lifecycle-CFmE_Adm.js +0 -2437
  940. package/dist/server-node-events-De4WZQQD.js +0 -393
  941. package/dist/server-node-events-d7eK4LBW.js +0 -398
  942. package/dist/service-BHos7oX8.js +0 -670
  943. package/dist/service-Bjqii5nW.js +0 -670
  944. package/dist/session-DBL5nHDy.js +0 -170
  945. package/dist/session-aUptxSVD.js +0 -170
  946. package/dist/session-cost-usage-DX09eTPU.js +0 -627
  947. package/dist/session-cost-usage-yYi525j3.js +0 -627
  948. package/dist/session-dirs-BADAi9Iz.js +0 -947
  949. package/dist/session-dirs-DdF6TDsE.js +0 -947
  950. package/dist/session-utils-CEtEq6bi.js +0 -625
  951. package/dist/session-utils-CiXbZkM2.js +0 -625
  952. package/dist/sessions--PykPynp.js +0 -2593
  953. package/dist/sessions-Bw4LRnSr.js +0 -252
  954. package/dist/ssrf-Ck9HDZpv.js +0 -183
  955. package/dist/ssrf-m7kFIobZ.js +0 -183
  956. package/dist/status-CrGLegI6.js +0 -2072
  957. package/dist/status-D_3sszaS.js +0 -2068
  958. package/dist/status.update-C55QM2xs.js +0 -79
  959. package/dist/status.update-CVnonGHu.js +0 -79
  960. package/dist/store-BPZo49zT.js +0 -64
  961. package/dist/store-C6w1sB5x.js +0 -53
  962. package/dist/store-DoOPG3rl.js +0 -2595
  963. package/dist/store-v3P-OWhi.js +0 -64
  964. package/dist/subagent-registry-C-xI2uK4.js +0 -4860
  965. package/dist/subagent-registry-Db4Ho_2Y.js +0 -4858
  966. package/dist/subsystem-CDhxwtDd.js +0 -1079
  967. package/dist/subsystem-CrJCqjAh.js +0 -1139
  968. package/dist/system-cli-CCKzF3uh.js +0 -75
  969. package/dist/system-cli-eAk5wVbP.js +0 -70
  970. package/dist/systemd-B5lyaCc3.js +0 -547
  971. package/dist/systemd-DSnlM3jX.js +0 -547
  972. package/dist/systemd-linger-DRPSEQVw.js +0 -75
  973. package/dist/systemd-linger-_0_-RY4v.js +0 -75
  974. package/dist/table-CpmqqcxJ.js +0 -279
  975. package/dist/tables-DI5LGEr1.js +0 -55
  976. package/dist/tables-D_PTzthR.js +0 -55
  977. package/dist/tables-DcQUNIvB.js +0 -55
  978. package/dist/tailnet-PnMrjwGT.js +0 -40
  979. package/dist/tailscale-Dxyz13fn.js +0 -230
  980. package/dist/targets-B2vBpQdr.js +0 -2173
  981. package/dist/targets-B54vK3wc.js +0 -220
  982. package/dist/targets-CcTME3bp.js +0 -46
  983. package/dist/targets-Cm1X3IyA.js +0 -650
  984. package/dist/targets-CmC5m7Ey.js +0 -53
  985. package/dist/targets-D7OKVXMI.js +0 -650
  986. package/dist/targets-DB4vBpIQ.js +0 -2172
  987. package/dist/targets-DyybKefq.js +0 -53
  988. package/dist/targets-JCISV-hS.js +0 -120
  989. package/dist/tool-display-B-nr7cSF.js +0 -785
  990. package/dist/tool-images-DVrUJEqc.js +0 -263
  991. package/dist/trash-DPi0aCCQ.js +0 -125
  992. package/dist/trash-DzrtBoP1.js +0 -125
  993. package/dist/tui-CyHwc2uX.js +0 -3392
  994. package/dist/tui-cHd20SZm.js +0 -3392
  995. package/dist/tui-cli-C7kQj9ef.js +0 -63
  996. package/dist/tui-cli-C9I18SfW.js +0 -58
  997. package/dist/update-DeQGoaIC.js +0 -349
  998. package/dist/update-IX7vdqA8.js +0 -349
  999. package/dist/update-cli-C52dmo3x.js +0 -1370
  1000. package/dist/update-cli-DY_iE1E5.js +0 -1373
  1001. package/dist/usage-B--dL37U.js +0 -5279
  1002. package/dist/web-CMxp78WA.js +0 -76
  1003. package/dist/web-DMweaNnG.js +0 -3065
  1004. package/dist/web-Dquzwqf4.js +0 -70
  1005. package/dist/webhooks-cli-BpZHQlVd.js +0 -328
  1006. package/dist/webhooks-cli-CqFX8Ywl.js +0 -333
  1007. package/dist/whatsapp-actions-C31Zdwez.js +0 -128
  1008. package/dist/whatsapp-actions-DaA291Ya.js +0 -122
  1009. package/dist/workspace-B4ZvVYT9.js +0 -447
  1010. package/dist/workspace-B8qk__ff.js +0 -449
  1011. /package/dist/{account-lookup-0KDSp5Mj.js → account-lookup-CIY_RKhi.js} +0 -0
  1012. /package/dist/{account-lookup-zvANGr2x.js → account-lookup-DGscKBsr.js} +0 -0
  1013. /package/dist/{api-BeQMq2iS.js → api-D8QQo5bc.js} +0 -0
  1014. /package/dist/{api-CxX8-gGz.js → api-GywrnwRm.js} +0 -0
  1015. /package/dist/{argv-Co-b9Zsc.js → argv-DW4MYBdJ.js} +0 -0
  1016. /package/dist/{brew-DbSbN8sD.js → brew-CBsS-Vq1.js} +0 -0
  1017. /package/dist/{brew-C4zKZsHX.js → brew-Clw9vXhE.js} +0 -0
  1018. /package/dist/{chat-type-CYPyHAj-.js → chat-type-BKe459rw.js} +0 -0
  1019. /package/dist/{chat-type-DKb2TlGZ.js → chat-type-CE6cJOyt.js} +0 -0
  1020. /package/dist/{cleanup-utils-o2MM9xyf.js → cleanup-utils-365rf8YN.js} +0 -0
  1021. /package/dist/{cleanup-utils-CwQvD73q.js → cleanup-utils-rqUXvR3Z.js} +0 -0
  1022. /package/dist/{cli-name-BicfmwQX.js → cli-name-7Gb97Vyl.js} +0 -0
  1023. /package/dist/{cli-name-C6rJGl18.js → cli-name-Yv30OygA.js} +0 -0
  1024. /package/dist/{cli-utils-BhXbz2UF.js → cli-utils-5W6ugvN5.js} +0 -0
  1025. /package/dist/{cli-utils-DZe_rVkZ.js → cli-utils-CZJacPS2.js} +0 -0
  1026. /package/dist/{client-C61M8zI3.js → client-DQ-Nh-rV.js} +0 -0
  1027. /package/dist/{client-DdpmATKq.js → client-Fi2k2G9Z.js} +0 -0
  1028. /package/dist/{clipboard-Dzkx6Q2K.js → clipboard-Com-8GBg.js} +0 -0
  1029. /package/dist/{command-options-C4paWSGf.js → command-options-CXHYeogR.js} +0 -0
  1030. /package/dist/{command-options-CA30lfLK.js → command-options-Cx6evn0x.js} +0 -0
  1031. /package/dist/{common-DSVmydhm.js → common-6D7nhDP-.js} +0 -0
  1032. /package/dist/{config-eval-H_wlEYIG.js → config-eval-DU_v_3lY.js} +0 -0
  1033. /package/dist/{config-eval-CjGZtLwx.js → config-eval-V26Gl6eZ.js} +0 -0
  1034. /package/dist/{constants-ChptG3d7.js → constants-C7gkSGRE.js} +0 -0
  1035. /package/dist/{constants-DY6b-_Wl.js → constants-DOnQraOP.js} +0 -0
  1036. /package/dist/{credentials-DFsi1_e8.js → credentials-DG0tD6-e.js} +0 -0
  1037. /package/dist/{daemon-runtime-CMnbwryP.js → daemon-runtime-B7Tmba31.js} +0 -0
  1038. /package/dist/{daemon-runtime-CvqE4ysg.js → daemon-runtime-KyXiP2ib.js} +0 -0
  1039. /package/dist/{dangerous-name-matching-BzmiLXmA.js → dangerous-name-matching-B4MRPcn-.js} +0 -0
  1040. /package/dist/{dangerous-name-matching-DaVRgwer.js → dangerous-name-matching-BCaPvXy_.js} +0 -0
  1041. /package/dist/{dangerous-tools-BOLoCRv4.js → dangerous-tools-CIPZZJoN.js} +0 -0
  1042. /package/dist/{dangerous-tools-Baq7Q-i6.js → dangerous-tools-D-GNbdpV.js} +0 -0
  1043. /package/dist/{errors-DZ199hOo.js → errors-BfONuT95.js} +0 -0
  1044. /package/dist/{fetch-timeout-DTIN7CGM.js → fetch-timeout-CPe2rPLq.js} +0 -0
  1045. /package/dist/{fetch-timeout-DoySHqfO.js → fetch-timeout-DkT3EnRA.js} +0 -0
  1046. /package/dist/{file-identity-BxlKD8Ys.js → file-identity-C8MIb5lb.js} +0 -0
  1047. /package/dist/{format-duration-CqUERz51.js → format-duration-Cd7SCued.js} +0 -0
  1048. /package/dist/{format-duration-Ct-yiwkS.js → format-duration-Oj8pTbYL.js} +0 -0
  1049. /package/dist/{format-relative-79_Y1n2Y.js → format-relative-8dpVUfzZ.js} +0 -0
  1050. /package/dist/{format-relative-CxLpEQOX.js → format-relative-BMNeqaxW.js} +0 -0
  1051. /package/dist/{health-format-B_QRD8Si.js → health-format-CwLlmYSK.js} +0 -0
  1052. /package/dist/{health-format-Bygse7KA.js → health-format-CycFH5Sj.js} +0 -0
  1053. /package/dist/{heartbeat-wake-LGEgcXjs.js → heartbeat-wake-D6Lt5YUk.js} +0 -0
  1054. /package/dist/{heartbeat-wake-Y97geucO.js → heartbeat-wake-uZkAP-tP.js} +0 -0
  1055. /package/dist/{help-format-sqWgYEdL.js → help-format-B0YIbosn.js} +0 -0
  1056. /package/dist/{help-format-NNm_Ov4H.js → help-format-GeOPYD_A.js} +0 -0
  1057. /package/dist/{helpers-BAsMXprO.js → helpers-6_MYSJEW.js} +0 -0
  1058. /package/dist/{helpers-DLgbkcEn.js → helpers-703bXVlF.js} +0 -0
  1059. /package/dist/{input-provenance-Bn6thJNm.js → input-provenance-C4nlFv5Y.js} +0 -0
  1060. /package/dist/{input-provenance-xUsSMOsz.js → input-provenance-duDehu0D.js} +0 -0
  1061. /package/dist/{ip-C9q3Oq20.js → ip-BFJnbRh9.js} +0 -0
  1062. /package/dist/{ipv4--2WXMVtE.js → ipv4-DsOgHE0B.js} +0 -0
  1063. /package/dist/{is-main-DN8-sNR5.js → is-main-BE1Jih91.js} +0 -0
  1064. /package/dist/{json-file-ChO_R9yh.js → json-file-CsV03dh-.js} +0 -0
  1065. /package/dist/{json-file-B7l5-Xhr.js → json-file-CtQKYRLl.js} +0 -0
  1066. /package/dist/{json-files-CmpYSF4G.js → json-files-B2yMsppu.js} +0 -0
  1067. /package/dist/{lanes-ByWMUgrz.js → lanes-BWL_LwXG.js} +0 -0
  1068. /package/dist/{links-Bz4V7R_p.js → links-BFtUmGLH.js} +0 -0
  1069. /package/dist/{links-Cm43Vcft.js → links-BNjLUJ9U.js} +0 -0
  1070. /package/dist/{location-DBWCGNLq.js → location-BC45kOxc.js} +0 -0
  1071. /package/dist/{location-GbZ0bBRU.js → location-BUhzov-a.js} +0 -0
  1072. /package/dist/{logger-DyL5G2DO.js → logger-1QWMF9Hc.js} +0 -0
  1073. /package/dist/{logger-GvipVDfh.js → logger-Liu31nEU.js} +0 -0
  1074. /package/dist/{logging-D8R0sLY9.js → logging-CtbzyUjs.js} +0 -0
  1075. /package/dist/{logging-D8-Kozjc.js → logging-JiRrQn2_.js} +0 -0
  1076. /package/dist/{mutable-allowlist-detectors-DiZDtmlZ.js → mutable-allowlist-detectors-4m-Kc8Kn.js} +0 -0
  1077. /package/dist/{mutable-allowlist-detectors-U5ThQr9V.js → mutable-allowlist-detectors-BECxOoKX.js} +0 -0
  1078. /package/dist/{parse-log-line-enq8pduH.js → parse-log-line-BtFI563v.js} +0 -0
  1079. /package/dist/{parse-log-line-mz9TG6ig.js → parse-log-line-COptqka7.js} +0 -0
  1080. /package/dist/{parse-timeout-BMP8a0_a.js → parse-timeout-BpphuwYl.js} +0 -0
  1081. /package/dist/{parse-timeout-CDkco8kd.js → parse-timeout-CxYHsZWc.js} +0 -0
  1082. /package/dist/{path-guards-CIx4hURU.js → path-guards-DJteVA0d.js} +0 -0
  1083. /package/dist/{path-guards-CrQOUlsq.js → path-guards-DVRUJZVN.js} +0 -0
  1084. /package/dist/plugin-sdk/{agents → auth}/api-key-rotation.d.ts +0 -0
  1085. /package/dist/plugin-sdk/{media-understanding → stt}/providers/deepgram/audio.d.ts +0 -0
  1086. /package/dist/plugin-sdk/{media-understanding → stt}/providers/google/audio.d.ts +0 -0
  1087. /package/dist/plugin-sdk/{media-understanding → stt}/providers/google/inline-data.d.ts +0 -0
  1088. /package/dist/plugin-sdk/{media-understanding → stt}/providers/openai/audio.d.ts +0 -0
  1089. /package/dist/plugin-sdk/{media-understanding → stt}/providers/shared.d.ts +0 -0
  1090. /package/dist/{plugins-allowlist-BbTQ5Z2k.js → plugins-allowlist-Clt6dsY6.js} +0 -0
  1091. /package/dist/{plugins-allowlist-C20oaESO.js → plugins-allowlist-ptAp-oPY.js} +0 -0
  1092. /package/dist/{polls-B0CCBDeR.js → polls-C5xr-8pM.js} +0 -0
  1093. /package/dist/{polls-CwwHzYBM.js → polls-DXd67TD8.js} +0 -0
  1094. /package/dist/{ports-lsof-Wteul3ju.js → ports-lsof-xWMTWvMQ.js} +0 -0
  1095. /package/dist/{process-scoped-map-CV9kDvfG.js → process-scoped-map-C7KeadUK.js} +0 -0
  1096. /package/dist/{process-scoped-map-PEvnG75N.js → process-scoped-map-CQ1C5MbT.js} +0 -0
  1097. /package/dist/{program-context-jqeI5alP.js → program-context-LuBAPt4y.js} +0 -0
  1098. /package/dist/{progress-C1kUfYL-.js → progress-C-hTn2yV.js} +0 -0
  1099. /package/dist/{prompt-BVZVovoB.js → prompt-BXeXEH0o.js} +0 -0
  1100. /package/dist/{prompt-Yn2yClg1.js → prompt-C31r0R5I.js} +0 -0
  1101. /package/dist/{prompt-style-DjEYC_s-.js → prompt-style-B1740PBl.js} +0 -0
  1102. /package/dist/{prompt-style-D0LUnqXi.js → prompt-style-BcM-VSMx.js} +0 -0
  1103. /package/dist/{provider-utils-3JTMJroG.js → provider-utils-C9kBVF1f.js} +0 -0
  1104. /package/dist/{provider-utils-FaBmofiq.js → provider-utils-DiLhkKQp.js} +0 -0
  1105. /package/dist/{proxy-DL3MD6-P.js → proxy-BdjLhNln.js} +0 -0
  1106. /package/dist/{proxy-DpNv2cSV.js → proxy-dRhp8Ykw.js} +0 -0
  1107. /package/dist/{pw-ai-state-CGfLv6nV.js → pw-ai-state-CjfcKQoO.js} +0 -0
  1108. /package/dist/{pw-ai-state-Dynx20hr.js → pw-ai-state-DfjyEttO.js} +0 -0
  1109. /package/dist/{redact-BsoXOV1y.js → redact-D975G-N6.js} +0 -0
  1110. /package/dist/{redact-identifier-BTIWtaa-.js → redact-identifier-Bqj_YiPd.js} +0 -0
  1111. /package/dist/{redact-identifier-CAagcfWA.js → redact-identifier-HyK89Sod.js} +0 -0
  1112. /package/dist/{remoteclaw-root-DybYl8PL.js → remoteclaw-root-B1iQBmbi.js} +0 -0
  1113. /package/dist/{remoteclaw-root-C2HV2VeC.js → remoteclaw-root-BmYwCzQN.js} +0 -0
  1114. /package/dist/{render-CCLsW6Lz.js → render-BvFSFJZW.js} +0 -0
  1115. /package/dist/{render-uf6PvGMV.js → render-flG67HhW.js} +0 -0
  1116. /package/dist/{retry-DnqPAqWp.js → retry-CByUYDAZ.js} +0 -0
  1117. /package/dist/{retry-CxXVRdes.js → retry-oNE3cBeG.js} +0 -0
  1118. /package/dist/{runtime-guard-U-ewY_QH.js → runtime-guard-CqNug-FG.js} +0 -0
  1119. /package/dist/{secret-equal-BbHdTtqY.js → secret-equal-1-dwi8DL.js} +0 -0
  1120. /package/dist/{secure-random-CS2mSdTn.js → secure-random-Ba4Y5xG5.js} +0 -0
  1121. /package/dist/{secure-random-_dzDDlFo.js → secure-random-C6AVByhV.js} +0 -0
  1122. /package/dist/{session-key-5YLnn_qf.js → session-key-BF-9YzxC.js} +0 -0
  1123. /package/dist/{session-key-C2n-VILA.js → session-key-CgKWfjoZ.js} +0 -0
  1124. /package/dist/{stagger-BXv_apuy.js → stagger-CjeisVRF.js} +0 -0
  1125. /package/dist/{stagger-MI9gd2rQ.js → stagger-vkvpUmOz.js} +0 -0
  1126. /package/dist/{status-BmtCS3T1.js → status-DNLnVQZ4.js} +0 -0
  1127. /package/dist/{status-BrwHRn2B.js → status-DZhl73dM.js} +0 -0
  1128. /package/dist/{strip-inbound-meta-DjKcSFaW.js → strip-inbound-meta-C3Cwe_ZO.js} +0 -0
  1129. /package/dist/{strip-inbound-meta-jy3bkUab.js → strip-inbound-meta-DuDjnGjC.js} +0 -0
  1130. /package/dist/{table-C1rdyYl9.js → table-B9zSN_7D.js} +0 -0
  1131. /package/dist/{tailscale-Dbyahx0J.js → tailscale-DngZHD9L.js} +0 -0
  1132. /package/dist/{target-errors-BDpPcwh5.js → target-errors-ChjvOMuV.js} +0 -0
  1133. /package/dist/{target-errors-DdIAPcMM.js → target-errors-Dn4aykSV.js} +0 -0
  1134. /package/dist/{targets-D-qLBpTA.js → targets-BtGRUQMa.js} +0 -0
  1135. /package/dist/{targets-C-2xwh9f.js → targets-CE4AYRI9.js} +0 -0
  1136. /package/dist/{targets-BMenhVHg.js → targets-D3r6Zgic.js} +0 -0
  1137. /package/dist/{targets-UncQvCVs.js → targets-DlufWCmy.js} +0 -0
  1138. /package/dist/{targets-D7PT_rdO.js → targets-akvAerZF.js} +0 -0
  1139. /package/dist/{text-format-BQ3z_OXA.js → text-format-VSogn9Yq.js} +0 -0
  1140. /package/dist/{text-format-oWqzVmah.js → text-format-xeHt9ywT.js} +0 -0
  1141. /package/dist/{tokens-qLtFu3nT.js → tokens-kTLGxaAF.js} +0 -0
  1142. /package/dist/{usage-BdhBT0Vz.js → usage-CRJFqYf8.js} +0 -0
  1143. /package/dist/{usage-BtQcAnf6.js → usage-Txvb0Iq2.js} +0 -0
  1144. /package/dist/{usage-format-C3mNLfhI.js → usage-format-70DvrseE.js} +0 -0
  1145. /package/dist/{usage-format-DAaPzr_z.js → usage-format-Bs8DkQtr.js} +0 -0
  1146. /package/dist/{widearea-dns-BXGCmXnD.js → widearea-dns-BOgHvO4O.js} +0 -0
  1147. /package/dist/{widearea-dns-CsmBVbez.js → widearea-dns-CGhfClCr.js} +0 -0
  1148. /package/dist/{workspace-DkGLVfOl.js → workspace-BisvA9oA.js} +0 -0
  1149. /package/dist/{workspace-BzPeZDew.js → workspace-DhUqtMK_.js} +0 -0
  1150. /package/dist/{wsl-BCnYV9O0.js → wsl-Cs-gowFJ.js} +0 -0
  1151. /package/dist/{wsl-B_sPlzWw.js → wsl-D28w2jQC.js} +0 -0
@@ -1,1420 +0,0 @@
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 { l as resolveAgentIdFromSessionKey, p as toAgentStoreSessionKey, s as normalizeAgentId } from "./session-key-C2n-VILA.js";
4
- import { _ as parseDurationMs, i as loadConfig } from "./config-FHu9Bn4R.js";
5
- import { a as resolveAgentWorkspaceDir, r as resolveAgentConfig, s as resolveDefaultAgentId } from "./agent-scope-C50VuLKh.js";
6
- import { J as resolveAgentMainSessionKey, g as updateSessionStore, l as loadSessionStore, m as saveSessionStore, q as canonicalizeMainSessionAlias } from "./sessions--PykPynp.js";
7
- import { n as listChannelPlugins, t as getChannelPlugin } from "./plugins-BflZz0sp.js";
8
- import { a as resolvePreferredAccountId, t as buildChannelAccountBindings } from "./bindings-CRU_udk8.js";
9
- import { c as resolveSessionFilePath, m as resolveStorePath } from "./chat-envelope-DEZ-5RY8.js";
10
- import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-BbwtB9Y-.js";
11
- import { r as CommandLane } from "./lanes-cHJ5arWg.js";
12
- import { it as getQueueSize } from "./subagent-registry-Db4Ho_2Y.js";
13
- import { a as resolveEffectiveMessagesConfig } from "./response-prefix-template-up4REfuR.js";
14
- import { p as resolveUserTimezone, t as getReplyFromConfig } from "./reply-DSKC8kyS.js";
15
- import { n as formatErrorMessage } from "./errors-DZ199hOo.js";
16
- import { _ as peekSystemEventEntries, n as resolveHeartbeatSenderContext, t as resolveHeartbeatDeliveryTarget } from "./targets-DB4vBpIQ.js";
17
- 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-BxkZjE5m.js";
18
- import { n as withProgress } from "./progress-C1kUfYL-.js";
19
- import { t as resolveChannelDefaultAccountId } from "./helpers-R7bU5IBz.js";
20
- import { t as deliverOutboundPayloads } from "./deliver-912khjLK.js";
21
- import { n as setHeartbeatWakeHandler, r as resolveHeartbeatReasonKind, t as requestHeartbeatNow } from "./heartbeat-wake-LGEgcXjs.js";
22
- import path from "node:path";
23
- import fsp from "node:fs/promises";
24
-
25
- //#region src/infra/heartbeat-active-hours.ts
26
- const ACTIVE_HOURS_TIME_PATTERN = /^(?:([01]\d|2[0-3]):([0-5]\d)|24:00)$/;
27
- function resolveActiveHoursTimezone(cfg, raw) {
28
- const trimmed = raw?.trim();
29
- if (!trimmed || trimmed === "user") return resolveUserTimezone(cfg.agents?.defaults?.userTimezone);
30
- if (trimmed === "local") return Intl.DateTimeFormat().resolvedOptions().timeZone?.trim() || "UTC";
31
- try {
32
- new Intl.DateTimeFormat("en-US", { timeZone: trimmed }).format(/* @__PURE__ */ new Date());
33
- return trimmed;
34
- } catch {
35
- return resolveUserTimezone(cfg.agents?.defaults?.userTimezone);
36
- }
37
- }
38
- function parseActiveHoursTime(opts, raw) {
39
- if (!raw || !ACTIVE_HOURS_TIME_PATTERN.test(raw)) return null;
40
- const [hourStr, minuteStr] = raw.split(":");
41
- const hour = Number(hourStr);
42
- const minute = Number(minuteStr);
43
- if (!Number.isFinite(hour) || !Number.isFinite(minute)) return null;
44
- if (hour === 24) {
45
- if (!opts.allow24 || minute !== 0) return null;
46
- return 1440;
47
- }
48
- return hour * 60 + minute;
49
- }
50
- function resolveMinutesInTimeZone(nowMs, timeZone) {
51
- try {
52
- const parts = new Intl.DateTimeFormat("en-US", {
53
- timeZone,
54
- hour: "2-digit",
55
- minute: "2-digit",
56
- hourCycle: "h23"
57
- }).formatToParts(new Date(nowMs));
58
- const map = {};
59
- for (const part of parts) if (part.type !== "literal") map[part.type] = part.value;
60
- const hour = Number(map.hour);
61
- const minute = Number(map.minute);
62
- if (!Number.isFinite(hour) || !Number.isFinite(minute)) return null;
63
- return hour * 60 + minute;
64
- } catch {
65
- return null;
66
- }
67
- }
68
- function isWithinActiveHours(cfg, heartbeat, nowMs) {
69
- const active = heartbeat?.activeHours;
70
- if (!active) return true;
71
- const startMin = parseActiveHoursTime({ allow24: false }, active.start);
72
- const endMin = parseActiveHoursTime({ allow24: true }, active.end);
73
- if (startMin === null || endMin === null) return true;
74
- if (startMin === endMin) return false;
75
- const timeZone = resolveActiveHoursTimezone(cfg, active.timezone);
76
- const currentMin = resolveMinutesInTimeZone(nowMs ?? Date.now(), timeZone);
77
- if (currentMin === null) return true;
78
- if (endMin > startMin) return currentMin >= startMin && currentMin < endMin;
79
- return currentMin >= startMin || currentMin < endMin;
80
- }
81
-
82
- //#endregion
83
- //#region src/infra/heartbeat-events-filter.ts
84
- function buildCronEventPrompt(pendingEvents, opts) {
85
- const deliverToUser = opts?.deliverToUser ?? true;
86
- const eventText = pendingEvents.join("\n").trim();
87
- if (!eventText) {
88
- 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.";
89
- return "A scheduled cron event was triggered, but no event content was found. Report using the heartbeat_report tool.";
90
- }
91
- 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.";
92
- 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.";
93
- }
94
- function buildExecEventPrompt(opts) {
95
- 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.";
96
- 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.";
97
- }
98
- function isHeartbeatNoiseEvent(evt) {
99
- const lower = evt.trim().toLowerCase();
100
- if (!lower) return false;
101
- return lower.includes("heartbeat poll") || lower.includes("heartbeat wake");
102
- }
103
- function isExecCompletionEvent(evt) {
104
- return evt.toLowerCase().includes("exec finished");
105
- }
106
- function isCronSystemEvent(evt) {
107
- if (!evt.trim()) return false;
108
- return !isHeartbeatNoiseEvent(evt) && !isExecCompletionEvent(evt);
109
- }
110
-
111
- //#endregion
112
- //#region src/infra/heartbeat-runner.ts
113
- const log = createSubsystemLogger("gateway/heartbeat");
114
- let heartbeatsEnabled = true;
115
- function setHeartbeatsEnabled(enabled) {
116
- heartbeatsEnabled = enabled;
117
- }
118
- const DEFAULT_HEARTBEAT_TARGET = "none";
119
- function hasExplicitHeartbeatAgents(cfg) {
120
- return (cfg.agents?.list ?? []).some((entry) => Boolean(entry?.heartbeat));
121
- }
122
- function isHeartbeatEnabledForAgent(cfg, agentId) {
123
- const resolvedAgentId = normalizeAgentId(agentId ?? resolveDefaultAgentId(cfg));
124
- const list = cfg.agents?.list ?? [];
125
- if (hasExplicitHeartbeatAgents(cfg)) return list.some((entry) => Boolean(entry?.heartbeat) && normalizeAgentId(entry?.id) === resolvedAgentId);
126
- return resolvedAgentId === resolveDefaultAgentId(cfg);
127
- }
128
- function resolveHeartbeatConfig(cfg, agentId) {
129
- const defaults = cfg.agents?.defaults?.heartbeat;
130
- if (!agentId) return defaults;
131
- const overrides = resolveAgentConfig(cfg, agentId)?.heartbeat;
132
- if (!defaults && !overrides) return overrides;
133
- return {
134
- ...defaults,
135
- ...overrides
136
- };
137
- }
138
- function resolveHeartbeatSummaryForAgent(cfg, agentId) {
139
- const defaults = cfg.agents?.defaults?.heartbeat;
140
- const overrides = agentId ? resolveAgentConfig(cfg, agentId)?.heartbeat : void 0;
141
- if (!isHeartbeatEnabledForAgent(cfg, agentId)) return {
142
- enabled: false,
143
- every: "disabled",
144
- everyMs: null,
145
- prompt: defaults?.prompt?.trim() || (defaults?.file ? `[file: ${defaults.file}]` : ""),
146
- target: defaults?.target ?? DEFAULT_HEARTBEAT_TARGET,
147
- model: defaults?.model
148
- };
149
- const merged = defaults || overrides ? {
150
- ...defaults,
151
- ...overrides
152
- } : void 0;
153
- const every = merged?.every ?? defaults?.every ?? overrides?.every ?? DEFAULT_HEARTBEAT_EVERY;
154
- const everyMs = resolveHeartbeatIntervalMs(cfg, void 0, merged);
155
- const rawPrompt = merged?.prompt ?? defaults?.prompt ?? overrides?.prompt;
156
- const rawFile = merged?.file ?? defaults?.file ?? overrides?.file;
157
- return {
158
- enabled: true,
159
- every,
160
- everyMs,
161
- prompt: rawPrompt?.trim() || (rawFile ? `[file: ${rawFile}]` : ""),
162
- target: merged?.target ?? defaults?.target ?? overrides?.target ?? DEFAULT_HEARTBEAT_TARGET,
163
- model: merged?.model ?? defaults?.model ?? overrides?.model
164
- };
165
- }
166
- function resolveHeartbeatAgents(cfg) {
167
- const list = cfg.agents?.list ?? [];
168
- if (hasExplicitHeartbeatAgents(cfg)) return list.filter((entry) => entry?.heartbeat).map((entry) => {
169
- const id = normalizeAgentId(entry.id);
170
- return {
171
- agentId: id,
172
- heartbeat: resolveHeartbeatConfig(cfg, id)
173
- };
174
- }).filter((entry) => entry.agentId);
175
- const fallbackId = resolveDefaultAgentId(cfg);
176
- return [{
177
- agentId: fallbackId,
178
- heartbeat: resolveHeartbeatConfig(cfg, fallbackId)
179
- }];
180
- }
181
- function resolveHeartbeatIntervalMs(cfg, overrideEvery, heartbeat) {
182
- const raw = overrideEvery ?? heartbeat?.every ?? cfg.agents?.defaults?.heartbeat?.every ?? DEFAULT_HEARTBEAT_EVERY;
183
- if (!raw) return null;
184
- const trimmed = String(raw).trim();
185
- if (!trimmed) return null;
186
- let ms;
187
- try {
188
- ms = parseDurationMs(trimmed, { defaultUnit: "m" });
189
- } catch {
190
- return null;
191
- }
192
- if (ms <= 0) return null;
193
- return ms;
194
- }
195
- async function resolveHeartbeatPrompt(cfg, heartbeat, agentId) {
196
- const defaults = cfg.agents?.defaults?.heartbeat;
197
- return resolveHeartbeatPrompt$1({
198
- prompt: heartbeat?.prompt ?? defaults?.prompt,
199
- file: heartbeat?.file ?? defaults?.file,
200
- workspaceDir: resolveAgentWorkspaceDir(cfg, agentId ?? resolveDefaultAgentId(cfg))
201
- });
202
- }
203
- function resolveHeartbeatSession(cfg, agentId, heartbeat, forcedSessionKey) {
204
- const sessionCfg = cfg.session;
205
- const scope = sessionCfg?.scope ?? "per-sender";
206
- const resolvedAgentId = normalizeAgentId(agentId ?? resolveDefaultAgentId(cfg));
207
- const mainSessionKey = scope === "global" ? "global" : resolveAgentMainSessionKey({
208
- cfg,
209
- agentId: resolvedAgentId
210
- });
211
- const storeAgentId = scope === "global" ? resolveDefaultAgentId(cfg) : resolvedAgentId;
212
- const storePath = resolveStorePath(sessionCfg?.store, { agentId: storeAgentId });
213
- const store = loadSessionStore(storePath);
214
- const mainEntry = store[mainSessionKey];
215
- if (scope === "global") return {
216
- sessionKey: mainSessionKey,
217
- storePath,
218
- store,
219
- entry: mainEntry
220
- };
221
- const forced = forcedSessionKey?.trim();
222
- if (forced) {
223
- const forcedCanonical = canonicalizeMainSessionAlias({
224
- cfg,
225
- agentId: resolvedAgentId,
226
- sessionKey: toAgentStoreSessionKey({
227
- agentId: resolvedAgentId,
228
- requestKey: forced,
229
- mainKey: cfg.session?.mainKey
230
- })
231
- });
232
- if (forcedCanonical !== "global") {
233
- if (resolveAgentIdFromSessionKey(forcedCanonical) === normalizeAgentId(resolvedAgentId)) return {
234
- sessionKey: forcedCanonical,
235
- storePath,
236
- store,
237
- entry: store[forcedCanonical]
238
- };
239
- }
240
- }
241
- const trimmed = heartbeat?.session?.trim() ?? "";
242
- if (!trimmed) return {
243
- sessionKey: mainSessionKey,
244
- storePath,
245
- store,
246
- entry: mainEntry
247
- };
248
- const normalized = trimmed.toLowerCase();
249
- if (normalized === "main" || normalized === "global") return {
250
- sessionKey: mainSessionKey,
251
- storePath,
252
- store,
253
- entry: mainEntry
254
- };
255
- const canonical = canonicalizeMainSessionAlias({
256
- cfg,
257
- agentId: resolvedAgentId,
258
- sessionKey: toAgentStoreSessionKey({
259
- agentId: resolvedAgentId,
260
- requestKey: trimmed,
261
- mainKey: cfg.session?.mainKey
262
- })
263
- });
264
- if (canonical !== "global") {
265
- if (resolveAgentIdFromSessionKey(canonical) === normalizeAgentId(resolvedAgentId)) return {
266
- sessionKey: canonical,
267
- storePath,
268
- store,
269
- entry: store[canonical]
270
- };
271
- }
272
- return {
273
- sessionKey: mainSessionKey,
274
- storePath,
275
- store,
276
- entry: mainEntry
277
- };
278
- }
279
- function resolveHeartbeatReasoningPayloads(replyResult) {
280
- return (Array.isArray(replyResult) ? replyResult : replyResult ? [replyResult] : []).filter((payload) => {
281
- return (typeof payload.text === "string" ? payload.text : "").trimStart().startsWith("Reasoning:");
282
- });
283
- }
284
- async function restoreHeartbeatUpdatedAt(params) {
285
- const { storePath, sessionKey, updatedAt } = params;
286
- if (typeof updatedAt !== "number") return;
287
- const entry = loadSessionStore(storePath)[sessionKey];
288
- if (!entry) return;
289
- const nextUpdatedAt = Math.max(entry.updatedAt ?? 0, updatedAt);
290
- if (entry.updatedAt === nextUpdatedAt) return;
291
- await updateSessionStore(storePath, (nextStore) => {
292
- const nextEntry = nextStore[sessionKey] ?? entry;
293
- if (!nextEntry) return;
294
- const resolvedUpdatedAt = Math.max(nextEntry.updatedAt ?? 0, updatedAt);
295
- if (nextEntry.updatedAt === resolvedUpdatedAt) return;
296
- nextStore[sessionKey] = {
297
- ...nextEntry,
298
- updatedAt: resolvedUpdatedAt
299
- };
300
- });
301
- }
302
- /**
303
- * Prune heartbeat transcript entries by truncating the file back to a previous size.
304
- * This removes the user+assistant turns that were written during a HEARTBEAT_OK run,
305
- * preventing context pollution from zero-information exchanges.
306
- */
307
- async function pruneHeartbeatTranscript(params) {
308
- const { transcriptPath, preHeartbeatSize } = params;
309
- if (!transcriptPath || typeof preHeartbeatSize !== "number" || preHeartbeatSize < 0) return;
310
- try {
311
- if ((await fsp.stat(transcriptPath)).size > preHeartbeatSize) await fsp.truncate(transcriptPath, preHeartbeatSize);
312
- } catch {}
313
- }
314
- /**
315
- * Get the transcript file path and its current size before a heartbeat run.
316
- * Returns undefined values if the session or transcript doesn't exist yet.
317
- */
318
- async function captureTranscriptState(params) {
319
- const { storePath, sessionKey, agentId } = params;
320
- try {
321
- const entry = loadSessionStore(storePath)[sessionKey];
322
- if (!entry?.sessionId) return {};
323
- const transcriptPath = resolveSessionFilePath(entry.sessionId, entry, {
324
- agentId,
325
- sessionsDir: path.dirname(storePath)
326
- });
327
- return {
328
- transcriptPath,
329
- preHeartbeatSize: (await fsp.stat(transcriptPath)).size
330
- };
331
- } catch {
332
- return {};
333
- }
334
- }
335
- function normalizeHeartbeatReply(payload, responsePrefix) {
336
- const report = payload.heartbeatReport;
337
- const rawText = typeof payload.text === "string" ? payload.text.trim() : "";
338
- const hasMedia = Boolean(payload.mediaUrl || (payload.mediaUrls?.length ?? 0) > 0);
339
- if (report) {
340
- if (!report.anythingDone) return {
341
- shouldSkip: true,
342
- text: report.summary?.trim() ?? "",
343
- hasMedia
344
- };
345
- let finalText = report.summary?.trim() || "Agent performed actions";
346
- if (responsePrefix && finalText && !finalText.startsWith(responsePrefix)) finalText = `${responsePrefix} ${finalText}`;
347
- return {
348
- shouldSkip: false,
349
- text: finalText,
350
- hasMedia
351
- };
352
- }
353
- if (!rawText && !hasMedia) return {
354
- shouldSkip: true,
355
- text: "",
356
- hasMedia
357
- };
358
- let finalText = rawText;
359
- if (responsePrefix && finalText && !finalText.startsWith(responsePrefix)) finalText = `${responsePrefix} ${finalText}`;
360
- return {
361
- shouldSkip: false,
362
- text: finalText,
363
- hasMedia
364
- };
365
- }
366
- function resolveHeartbeatReasonFlags(reason) {
367
- const reasonKind = resolveHeartbeatReasonKind(reason);
368
- return {
369
- isExecEventReason: reasonKind === "exec-event",
370
- isCronEventReason: reasonKind === "cron",
371
- isWakeReason: reasonKind === "wake" || reasonKind === "hook"
372
- };
373
- }
374
- async function resolveHeartbeatPreflight(params) {
375
- const reasonFlags = resolveHeartbeatReasonFlags(params.reason);
376
- const session = resolveHeartbeatSession(params.cfg, params.agentId, params.heartbeat, params.forcedSessionKey);
377
- const pendingEventEntries = peekSystemEventEntries(session.sessionKey);
378
- const hasTaggedCronEvents = pendingEventEntries.some((event) => event.contextKey?.startsWith("cron:"));
379
- const shouldInspectPendingEvents = reasonFlags.isExecEventReason || reasonFlags.isCronEventReason || hasTaggedCronEvents;
380
- return {
381
- ...reasonFlags,
382
- session,
383
- pendingEventEntries,
384
- hasTaggedCronEvents,
385
- shouldInspectPendingEvents
386
- };
387
- }
388
- async function resolveHeartbeatRunPrompt(params) {
389
- const pendingEventEntries = params.preflight.pendingEventEntries;
390
- const pendingEvents = params.preflight.shouldInspectPendingEvents ? pendingEventEntries.map((event) => event.text) : [];
391
- const cronEvents = pendingEventEntries.filter((event) => (params.preflight.isCronEventReason || event.contextKey?.startsWith("cron:")) && isCronSystemEvent(event.text)).map((event) => event.text);
392
- const hasExecCompletion = pendingEvents.some(isExecCompletionEvent);
393
- const hasCronEvents = cronEvents.length > 0;
394
- return {
395
- prompt: hasExecCompletion ? buildExecEventPrompt({ deliverToUser: params.canRelayToUser }) : hasCronEvents ? buildCronEventPrompt(cronEvents, { deliverToUser: params.canRelayToUser }) : await resolveHeartbeatPrompt(params.cfg, params.heartbeat, params.agentId),
396
- hasExecCompletion,
397
- hasCronEvents
398
- };
399
- }
400
- async function runHeartbeatOnce(opts) {
401
- const cfg = opts.cfg ?? loadConfig();
402
- const agentId = normalizeAgentId(opts.agentId ?? resolveDefaultAgentId(cfg));
403
- const heartbeat = opts.heartbeat ?? resolveHeartbeatConfig(cfg, agentId);
404
- if (!heartbeatsEnabled) return {
405
- status: "skipped",
406
- reason: "disabled"
407
- };
408
- if (!isHeartbeatEnabledForAgent(cfg, agentId)) return {
409
- status: "skipped",
410
- reason: "disabled"
411
- };
412
- if (!resolveHeartbeatIntervalMs(cfg, void 0, heartbeat)) return {
413
- status: "skipped",
414
- reason: "disabled"
415
- };
416
- const startedAt = opts.deps?.nowMs?.() ?? Date.now();
417
- if (!isWithinActiveHours(cfg, heartbeat, startedAt)) return {
418
- status: "skipped",
419
- reason: "quiet-hours"
420
- };
421
- if ((opts.deps?.getQueueSize ?? getQueueSize)(CommandLane.Main) > 0) return {
422
- status: "skipped",
423
- reason: "requests-in-flight"
424
- };
425
- const preflight = await resolveHeartbeatPreflight({
426
- cfg,
427
- agentId,
428
- heartbeat,
429
- forcedSessionKey: opts.sessionKey,
430
- reason: opts.reason
431
- });
432
- const { entry, sessionKey, storePath } = preflight.session;
433
- const previousUpdatedAt = entry?.updatedAt;
434
- const delivery = resolveHeartbeatDeliveryTarget({
435
- cfg,
436
- entry,
437
- heartbeat
438
- });
439
- const heartbeatAccountId = heartbeat?.accountId?.trim();
440
- if (delivery.reason === "unknown-account") log.warn("heartbeat: unknown accountId", {
441
- accountId: delivery.accountId ?? heartbeatAccountId ?? null,
442
- target: heartbeat?.target ?? "none"
443
- });
444
- else if (heartbeatAccountId) log.info("heartbeat: using explicit accountId", {
445
- accountId: delivery.accountId ?? heartbeatAccountId,
446
- target: heartbeat?.target ?? "none",
447
- channel: delivery.channel
448
- });
449
- const visibility = delivery.channel !== "none" ? resolveHeartbeatVisibility({
450
- cfg,
451
- channel: delivery.channel,
452
- accountId: delivery.accountId
453
- }) : {
454
- showOk: false,
455
- showAlerts: true,
456
- useIndicator: true
457
- };
458
- const { sender } = resolveHeartbeatSenderContext({
459
- cfg,
460
- entry,
461
- delivery
462
- });
463
- const responsePrefix = resolveEffectiveMessagesConfig(cfg, agentId, {
464
- channel: delivery.channel !== "none" ? delivery.channel : void 0,
465
- accountId: delivery.accountId
466
- }).responsePrefix;
467
- const { prompt, hasExecCompletion, hasCronEvents } = await resolveHeartbeatRunPrompt({
468
- cfg,
469
- agentId,
470
- heartbeat,
471
- preflight,
472
- canRelayToUser: Boolean(delivery.channel !== "none" && delivery.to && visibility.showAlerts)
473
- });
474
- if (!prompt) {
475
- emitHeartbeatEvent({
476
- status: "skipped",
477
- reason: "no-prompt",
478
- durationMs: Date.now() - startedAt
479
- });
480
- return {
481
- status: "skipped",
482
- reason: "no-prompt"
483
- };
484
- }
485
- const ctx = {
486
- Body: appendCronStyleCurrentTimeLine(prompt, cfg, startedAt),
487
- From: sender,
488
- To: sender,
489
- OriginatingChannel: delivery.channel !== "none" ? delivery.channel : void 0,
490
- OriginatingTo: delivery.to,
491
- AccountId: delivery.accountId,
492
- MessageThreadId: delivery.threadId,
493
- Provider: hasExecCompletion ? "exec-event" : hasCronEvents ? "cron-event" : "heartbeat",
494
- SessionKey: sessionKey
495
- };
496
- if (!visibility.showAlerts && !visibility.showOk && !visibility.useIndicator) {
497
- emitHeartbeatEvent({
498
- status: "skipped",
499
- reason: "alerts-disabled",
500
- durationMs: Date.now() - startedAt,
501
- channel: delivery.channel !== "none" ? delivery.channel : void 0,
502
- accountId: delivery.accountId
503
- });
504
- return {
505
- status: "skipped",
506
- reason: "alerts-disabled"
507
- };
508
- }
509
- const maybeSendHeartbeatOkSummary = async (summary) => {
510
- if (!visibility.showOk || delivery.channel === "none" || !delivery.to || !summary.trim()) return false;
511
- const heartbeatPlugin = getChannelPlugin(delivery.channel);
512
- if (heartbeatPlugin?.heartbeat?.checkReady) {
513
- if (!(await heartbeatPlugin.heartbeat.checkReady({
514
- cfg,
515
- accountId: delivery.accountId,
516
- deps: opts.deps
517
- })).ok) return false;
518
- }
519
- await deliverOutboundPayloads({
520
- cfg,
521
- channel: delivery.channel,
522
- to: delivery.to,
523
- accountId: delivery.accountId,
524
- threadId: delivery.threadId,
525
- payloads: [{ text: summary }],
526
- agentId,
527
- deps: opts.deps
528
- });
529
- return true;
530
- };
531
- try {
532
- const transcriptState = await captureTranscriptState({
533
- storePath,
534
- sessionKey,
535
- agentId
536
- });
537
- const heartbeatModelOverride = heartbeat?.model?.trim() || void 0;
538
- const suppressToolErrorWarnings = heartbeat?.suppressToolErrorWarnings === true;
539
- const replyResult = await getReplyFromConfig(ctx, heartbeatModelOverride ? {
540
- isHeartbeat: true,
541
- heartbeatModelOverride,
542
- suppressToolErrorWarnings
543
- } : {
544
- isHeartbeat: true,
545
- suppressToolErrorWarnings
546
- }, cfg);
547
- const replyPayload = resolveHeartbeatReplyPayload(replyResult);
548
- const reasoningPayloads = heartbeat?.includeReasoning === true ? resolveHeartbeatReasoningPayloads(replyResult).filter((payload) => payload !== replyPayload) : [];
549
- if (!replyPayload || !replyPayload.text && !replyPayload.mediaUrl && !replyPayload.mediaUrls?.length && !replyPayload.heartbeatReport) {
550
- await restoreHeartbeatUpdatedAt({
551
- storePath,
552
- sessionKey,
553
- updatedAt: previousUpdatedAt
554
- });
555
- await pruneHeartbeatTranscript(transcriptState);
556
- emitHeartbeatEvent({
557
- status: "ok-empty",
558
- reason: opts.reason,
559
- durationMs: Date.now() - startedAt,
560
- channel: delivery.channel !== "none" ? delivery.channel : void 0,
561
- accountId: delivery.accountId,
562
- silent: true,
563
- indicatorType: visibility.useIndicator ? resolveIndicatorType("ok-empty") : void 0
564
- });
565
- return {
566
- status: "ran",
567
- durationMs: Date.now() - startedAt
568
- };
569
- }
570
- const normalized = normalizeHeartbeatReply(replyPayload, responsePrefix);
571
- if (hasExecCompletion && normalized.shouldSkip && replyPayload.text?.trim()) {
572
- normalized.text = replyPayload.text.trim();
573
- normalized.shouldSkip = false;
574
- }
575
- const shouldSkipMain = normalized.shouldSkip && !normalized.hasMedia && !hasExecCompletion;
576
- if (shouldSkipMain && reasoningPayloads.length === 0) {
577
- await restoreHeartbeatUpdatedAt({
578
- storePath,
579
- sessionKey,
580
- updatedAt: previousUpdatedAt
581
- });
582
- await pruneHeartbeatTranscript(transcriptState);
583
- const okSent = await maybeSendHeartbeatOkSummary(normalized.text);
584
- emitHeartbeatEvent({
585
- status: "ok-token",
586
- reason: opts.reason,
587
- durationMs: Date.now() - startedAt,
588
- channel: delivery.channel !== "none" ? delivery.channel : void 0,
589
- accountId: delivery.accountId,
590
- silent: !okSent,
591
- indicatorType: visibility.useIndicator ? resolveIndicatorType("ok-token") : void 0
592
- });
593
- return {
594
- status: "ran",
595
- durationMs: Date.now() - startedAt
596
- };
597
- }
598
- const mediaUrls = replyPayload.mediaUrls ?? (replyPayload.mediaUrl ? [replyPayload.mediaUrl] : []);
599
- const prevHeartbeatText = typeof entry?.lastHeartbeatText === "string" ? entry.lastHeartbeatText : "";
600
- const prevHeartbeatAt = typeof entry?.lastHeartbeatSentAt === "number" ? entry.lastHeartbeatSentAt : void 0;
601
- if (!shouldSkipMain && !mediaUrls.length && Boolean(prevHeartbeatText.trim()) && normalized.text.trim() === prevHeartbeatText.trim() && typeof prevHeartbeatAt === "number" && startedAt - prevHeartbeatAt < 1440 * 60 * 1e3) {
602
- await restoreHeartbeatUpdatedAt({
603
- storePath,
604
- sessionKey,
605
- updatedAt: previousUpdatedAt
606
- });
607
- await pruneHeartbeatTranscript(transcriptState);
608
- emitHeartbeatEvent({
609
- status: "skipped",
610
- reason: "duplicate",
611
- preview: normalized.text.slice(0, 200),
612
- durationMs: Date.now() - startedAt,
613
- hasMedia: false,
614
- channel: delivery.channel !== "none" ? delivery.channel : void 0,
615
- accountId: delivery.accountId
616
- });
617
- return {
618
- status: "ran",
619
- durationMs: Date.now() - startedAt
620
- };
621
- }
622
- const previewText = shouldSkipMain ? reasoningPayloads.map((payload) => payload.text).filter((text) => Boolean(text?.trim())).join("\n") : normalized.text;
623
- if (delivery.channel === "none" || !delivery.to) {
624
- emitHeartbeatEvent({
625
- status: "skipped",
626
- reason: delivery.reason ?? "no-target",
627
- preview: previewText?.slice(0, 200),
628
- durationMs: Date.now() - startedAt,
629
- hasMedia: mediaUrls.length > 0,
630
- accountId: delivery.accountId
631
- });
632
- return {
633
- status: "ran",
634
- durationMs: Date.now() - startedAt
635
- };
636
- }
637
- if (!visibility.showAlerts) {
638
- await restoreHeartbeatUpdatedAt({
639
- storePath,
640
- sessionKey,
641
- updatedAt: previousUpdatedAt
642
- });
643
- emitHeartbeatEvent({
644
- status: "skipped",
645
- reason: "alerts-disabled",
646
- preview: previewText?.slice(0, 200),
647
- durationMs: Date.now() - startedAt,
648
- channel: delivery.channel,
649
- hasMedia: mediaUrls.length > 0,
650
- accountId: delivery.accountId,
651
- indicatorType: visibility.useIndicator ? resolveIndicatorType("sent") : void 0
652
- });
653
- return {
654
- status: "ran",
655
- durationMs: Date.now() - startedAt
656
- };
657
- }
658
- const deliveryAccountId = delivery.accountId;
659
- const heartbeatPlugin = getChannelPlugin(delivery.channel);
660
- if (heartbeatPlugin?.heartbeat?.checkReady) {
661
- const readiness = await heartbeatPlugin.heartbeat.checkReady({
662
- cfg,
663
- accountId: deliveryAccountId,
664
- deps: opts.deps
665
- });
666
- if (!readiness.ok) {
667
- emitHeartbeatEvent({
668
- status: "skipped",
669
- reason: readiness.reason,
670
- preview: previewText?.slice(0, 200),
671
- durationMs: Date.now() - startedAt,
672
- hasMedia: mediaUrls.length > 0,
673
- channel: delivery.channel,
674
- accountId: delivery.accountId
675
- });
676
- log.info("heartbeat: channel not ready", {
677
- channel: delivery.channel,
678
- reason: readiness.reason
679
- });
680
- return {
681
- status: "skipped",
682
- reason: readiness.reason
683
- };
684
- }
685
- }
686
- await deliverOutboundPayloads({
687
- cfg,
688
- channel: delivery.channel,
689
- to: delivery.to,
690
- accountId: deliveryAccountId,
691
- agentId,
692
- threadId: delivery.threadId,
693
- payloads: [...reasoningPayloads, ...shouldSkipMain ? [] : [{
694
- text: normalized.text,
695
- mediaUrls
696
- }]],
697
- deps: opts.deps
698
- });
699
- if (!shouldSkipMain && normalized.text.trim()) {
700
- const store = loadSessionStore(storePath);
701
- const current = store[sessionKey];
702
- if (current) {
703
- store[sessionKey] = {
704
- ...current,
705
- lastHeartbeatText: normalized.text,
706
- lastHeartbeatSentAt: startedAt
707
- };
708
- await saveSessionStore(storePath, store);
709
- }
710
- }
711
- emitHeartbeatEvent({
712
- status: "sent",
713
- to: delivery.to,
714
- preview: previewText?.slice(0, 200),
715
- durationMs: Date.now() - startedAt,
716
- hasMedia: mediaUrls.length > 0,
717
- channel: delivery.channel,
718
- accountId: delivery.accountId,
719
- indicatorType: visibility.useIndicator ? resolveIndicatorType("sent") : void 0
720
- });
721
- return {
722
- status: "ran",
723
- durationMs: Date.now() - startedAt
724
- };
725
- } catch (err) {
726
- const reason = formatErrorMessage(err);
727
- emitHeartbeatEvent({
728
- status: "failed",
729
- reason,
730
- durationMs: Date.now() - startedAt,
731
- channel: delivery.channel !== "none" ? delivery.channel : void 0,
732
- accountId: delivery.accountId,
733
- indicatorType: visibility.useIndicator ? resolveIndicatorType("failed") : void 0
734
- });
735
- log.error(`heartbeat failed: ${reason}`, { error: reason });
736
- return {
737
- status: "failed",
738
- reason
739
- };
740
- }
741
- }
742
- function startHeartbeatRunner(opts) {
743
- const runtime = opts.runtime ?? defaultRuntime;
744
- const runOnce = opts.runOnce ?? runHeartbeatOnce;
745
- const state = {
746
- cfg: opts.cfg ?? loadConfig(),
747
- runtime,
748
- agents: /* @__PURE__ */ new Map(),
749
- timer: null,
750
- stopped: false
751
- };
752
- let initialized = false;
753
- const resolveNextDue = (now, intervalMs, prevState) => {
754
- if (typeof prevState?.lastRunMs === "number") return prevState.lastRunMs + intervalMs;
755
- if (prevState && prevState.intervalMs === intervalMs && prevState.nextDueMs > now) return prevState.nextDueMs;
756
- return now + intervalMs;
757
- };
758
- const advanceAgentSchedule = (agent, now) => {
759
- agent.lastRunMs = now;
760
- agent.nextDueMs = now + agent.intervalMs;
761
- };
762
- const scheduleNext = () => {
763
- if (state.stopped) return;
764
- if (state.timer) {
765
- clearTimeout(state.timer);
766
- state.timer = null;
767
- }
768
- if (state.agents.size === 0) return;
769
- const now = Date.now();
770
- let nextDue = Number.POSITIVE_INFINITY;
771
- for (const agent of state.agents.values()) if (agent.nextDueMs < nextDue) nextDue = agent.nextDueMs;
772
- if (!Number.isFinite(nextDue)) return;
773
- const delay = Math.max(0, nextDue - now);
774
- state.timer = setTimeout(() => {
775
- state.timer = null;
776
- requestHeartbeatNow({
777
- reason: "interval",
778
- coalesceMs: 0
779
- });
780
- }, delay);
781
- state.timer.unref?.();
782
- };
783
- const updateConfig = (cfg) => {
784
- if (state.stopped) return;
785
- const now = Date.now();
786
- const prevAgents = state.agents;
787
- const prevEnabled = prevAgents.size > 0;
788
- const nextAgents = /* @__PURE__ */ new Map();
789
- const intervals = [];
790
- for (const agent of resolveHeartbeatAgents(cfg)) {
791
- const intervalMs = resolveHeartbeatIntervalMs(cfg, void 0, agent.heartbeat);
792
- if (!intervalMs) continue;
793
- intervals.push(intervalMs);
794
- const prevState = prevAgents.get(agent.agentId);
795
- const nextDueMs = resolveNextDue(now, intervalMs, prevState);
796
- nextAgents.set(agent.agentId, {
797
- agentId: agent.agentId,
798
- heartbeat: agent.heartbeat,
799
- intervalMs,
800
- lastRunMs: prevState?.lastRunMs,
801
- nextDueMs
802
- });
803
- }
804
- state.cfg = cfg;
805
- state.agents = nextAgents;
806
- const nextEnabled = nextAgents.size > 0;
807
- if (!initialized) {
808
- if (!nextEnabled) log.info("heartbeat: disabled", { enabled: false });
809
- else log.info("heartbeat: started", { intervalMs: Math.min(...intervals) });
810
- initialized = true;
811
- } else if (prevEnabled !== nextEnabled) if (!nextEnabled) log.info("heartbeat: disabled", { enabled: false });
812
- else log.info("heartbeat: started", { intervalMs: Math.min(...intervals) });
813
- scheduleNext();
814
- };
815
- const run = async (params) => {
816
- if (state.stopped) return {
817
- status: "skipped",
818
- reason: "disabled"
819
- };
820
- if (!heartbeatsEnabled) return {
821
- status: "skipped",
822
- reason: "disabled"
823
- };
824
- if (state.agents.size === 0) return {
825
- status: "skipped",
826
- reason: "disabled"
827
- };
828
- const reason = params?.reason;
829
- const requestedAgentId = params?.agentId ? normalizeAgentId(params.agentId) : void 0;
830
- const requestedSessionKey = params?.sessionKey?.trim() || void 0;
831
- const isInterval = reason === "interval";
832
- const startedAt = Date.now();
833
- const now = startedAt;
834
- let ran = false;
835
- if (requestedSessionKey || requestedAgentId) {
836
- const targetAgentId = requestedAgentId ?? resolveAgentIdFromSessionKey(requestedSessionKey);
837
- const targetAgent = state.agents.get(targetAgentId);
838
- if (!targetAgent) {
839
- scheduleNext();
840
- return {
841
- status: "skipped",
842
- reason: "disabled"
843
- };
844
- }
845
- try {
846
- const res = await runOnce({
847
- cfg: state.cfg,
848
- agentId: targetAgent.agentId,
849
- heartbeat: targetAgent.heartbeat,
850
- reason,
851
- sessionKey: requestedSessionKey,
852
- deps: { runtime: state.runtime }
853
- });
854
- if (res.status !== "skipped" || res.reason !== "disabled") advanceAgentSchedule(targetAgent, now);
855
- scheduleNext();
856
- return res.status === "ran" ? {
857
- status: "ran",
858
- durationMs: Date.now() - startedAt
859
- } : res;
860
- } catch (err) {
861
- const errMsg = formatErrorMessage(err);
862
- log.error(`heartbeat runner: targeted runOnce threw unexpectedly: ${errMsg}`, { error: errMsg });
863
- advanceAgentSchedule(targetAgent, now);
864
- scheduleNext();
865
- return {
866
- status: "failed",
867
- reason: errMsg
868
- };
869
- }
870
- }
871
- for (const agent of state.agents.values()) {
872
- if (isInterval && now < agent.nextDueMs) continue;
873
- let res;
874
- try {
875
- res = await runOnce({
876
- cfg: state.cfg,
877
- agentId: agent.agentId,
878
- heartbeat: agent.heartbeat,
879
- reason,
880
- deps: { runtime: state.runtime }
881
- });
882
- } catch (err) {
883
- const errMsg = formatErrorMessage(err);
884
- log.error(`heartbeat runner: runOnce threw unexpectedly: ${errMsg}`, { error: errMsg });
885
- advanceAgentSchedule(agent, now);
886
- continue;
887
- }
888
- if (res.status === "skipped" && res.reason === "requests-in-flight") {
889
- advanceAgentSchedule(agent, now);
890
- scheduleNext();
891
- return res;
892
- }
893
- if (res.status !== "skipped" || res.reason !== "disabled") advanceAgentSchedule(agent, now);
894
- if (res.status === "ran") ran = true;
895
- }
896
- scheduleNext();
897
- if (ran) return {
898
- status: "ran",
899
- durationMs: Date.now() - startedAt
900
- };
901
- return {
902
- status: "skipped",
903
- reason: isInterval ? "not-due" : "disabled"
904
- };
905
- };
906
- const wakeHandler = async (params) => run({
907
- reason: params.reason,
908
- agentId: params.agentId,
909
- sessionKey: params.sessionKey
910
- });
911
- const disposeWakeHandler = setHeartbeatWakeHandler(wakeHandler);
912
- updateConfig(state.cfg);
913
- const cleanup = () => {
914
- if (state.stopped) return;
915
- state.stopped = true;
916
- disposeWakeHandler();
917
- if (state.timer) clearTimeout(state.timer);
918
- state.timer = null;
919
- };
920
- opts.abortSignal?.addEventListener("abort", cleanup, { once: true });
921
- return {
922
- stop: cleanup,
923
- updateConfig
924
- };
925
- }
926
-
927
- //#endregion
928
- //#region src/terminal/health-style.ts
929
- function styleHealthChannelLine(line, rich) {
930
- if (!rich) return line;
931
- const colon = line.indexOf(":");
932
- if (colon === -1) return line;
933
- const label = line.slice(0, colon + 1);
934
- const detail = line.slice(colon + 1).trimStart();
935
- const normalized = detail.toLowerCase();
936
- const applyPrefix = (prefix, color) => `${label} ${color(detail.slice(0, prefix.length))}${detail.slice(prefix.length)}`;
937
- if (normalized.startsWith("failed")) return applyPrefix("failed", theme.error);
938
- if (normalized.startsWith("ok")) return applyPrefix("ok", theme.success);
939
- if (normalized.startsWith("linked")) return applyPrefix("linked", theme.success);
940
- if (normalized.startsWith("configured")) return applyPrefix("configured", theme.success);
941
- if (normalized.startsWith("not linked")) return applyPrefix("not linked", theme.warn);
942
- if (normalized.startsWith("not configured")) return applyPrefix("not configured", theme.muted);
943
- if (normalized.startsWith("unknown")) return applyPrefix("unknown", theme.warn);
944
- return line;
945
- }
946
-
947
- //#endregion
948
- //#region src/commands/health.ts
949
- var health_exports = /* @__PURE__ */ __exportAll({
950
- formatHealthChannelLines: () => formatHealthChannelLines,
951
- getHealthSnapshot: () => getHealthSnapshot,
952
- healthCommand: () => healthCommand
953
- });
954
- const DEFAULT_TIMEOUT_MS = 1e4;
955
- const debugHealth = (...args) => {
956
- if (isTruthyEnvValue(process.env.REMOTECLAW_DEBUG_HEALTH)) console.warn("[health:debug]", ...args);
957
- };
958
- const formatDurationParts = (ms) => {
959
- if (!Number.isFinite(ms)) return "unknown";
960
- if (ms < 1e3) return `${Math.max(0, Math.round(ms))}ms`;
961
- const units = [
962
- {
963
- label: "w",
964
- size: 10080 * 60 * 1e3
965
- },
966
- {
967
- label: "d",
968
- size: 1440 * 60 * 1e3
969
- },
970
- {
971
- label: "h",
972
- size: 3600 * 1e3
973
- },
974
- {
975
- label: "m",
976
- size: 60 * 1e3
977
- },
978
- {
979
- label: "s",
980
- size: 1e3
981
- }
982
- ];
983
- let remaining = Math.max(0, Math.floor(ms));
984
- const parts = [];
985
- for (const unit of units) {
986
- const value = Math.floor(remaining / unit.size);
987
- if (value > 0) {
988
- parts.push(`${value}${unit.label}`);
989
- remaining -= value * unit.size;
990
- }
991
- }
992
- if (parts.length === 0) return "0s";
993
- return parts.join(" ");
994
- };
995
- const resolveHeartbeatSummary = (cfg, agentId) => resolveHeartbeatSummaryForAgent(cfg, agentId);
996
- const resolveAgentOrder = (cfg) => {
997
- const defaultAgentId = resolveDefaultAgentId(cfg);
998
- const entries = Array.isArray(cfg.agents?.list) ? cfg.agents.list : [];
999
- const seen = /* @__PURE__ */ new Set();
1000
- const ordered = [];
1001
- for (const entry of entries) {
1002
- if (!entry || typeof entry !== "object") continue;
1003
- if (typeof entry.id !== "string" || !entry.id.trim()) continue;
1004
- const id = normalizeAgentId(entry.id);
1005
- if (!id || seen.has(id)) continue;
1006
- seen.add(id);
1007
- ordered.push({
1008
- id,
1009
- name: typeof entry.name === "string" ? entry.name : void 0
1010
- });
1011
- }
1012
- if (!seen.has(defaultAgentId)) ordered.unshift({ id: defaultAgentId });
1013
- if (ordered.length === 0) ordered.push({ id: defaultAgentId });
1014
- return {
1015
- defaultAgentId,
1016
- ordered
1017
- };
1018
- };
1019
- const buildSessionSummary = (storePath) => {
1020
- const store = loadSessionStore(storePath);
1021
- const sessions = Object.entries(store).filter(([key]) => key !== "global" && key !== "unknown").map(([key, entry]) => ({
1022
- key,
1023
- updatedAt: entry?.updatedAt ?? 0
1024
- })).toSorted((a, b) => b.updatedAt - a.updatedAt);
1025
- const recent = sessions.slice(0, 5).map((s) => ({
1026
- key: s.key,
1027
- updatedAt: s.updatedAt || null,
1028
- age: s.updatedAt ? Date.now() - s.updatedAt : null
1029
- }));
1030
- return {
1031
- path: storePath,
1032
- count: sessions.length,
1033
- recent
1034
- };
1035
- };
1036
- const isAccountEnabled = (account) => {
1037
- if (!account || typeof account !== "object") return true;
1038
- return account.enabled !== false;
1039
- };
1040
- const asRecord = (value) => value && typeof value === "object" ? value : null;
1041
- const formatProbeLine = (probe, opts = {}) => {
1042
- const record = asRecord(probe);
1043
- if (!record) return null;
1044
- const ok = typeof record.ok === "boolean" ? record.ok : void 0;
1045
- if (ok === void 0) return null;
1046
- const elapsedMs = typeof record.elapsedMs === "number" ? record.elapsedMs : null;
1047
- const status = typeof record.status === "number" ? record.status : null;
1048
- const error = typeof record.error === "string" ? record.error : null;
1049
- const bot = asRecord(record.bot);
1050
- const botUsername = bot && typeof bot.username === "string" ? bot.username : null;
1051
- const webhook = asRecord(record.webhook);
1052
- const webhookUrl = webhook && typeof webhook.url === "string" ? webhook.url : null;
1053
- const usernames = /* @__PURE__ */ new Set();
1054
- if (botUsername) usernames.add(botUsername);
1055
- for (const extra of opts.botUsernames ?? []) if (extra) usernames.add(extra);
1056
- if (ok) {
1057
- let label = "ok";
1058
- if (usernames.size > 0) label += ` (@${Array.from(usernames).join(", @")})`;
1059
- if (elapsedMs != null) label += ` (${elapsedMs}ms)`;
1060
- if (webhookUrl) label += ` - webhook ${webhookUrl}`;
1061
- return label;
1062
- }
1063
- let label = `failed (${status ?? "unknown"})`;
1064
- if (error) label += ` - ${error}`;
1065
- return label;
1066
- };
1067
- const formatAccountProbeTiming = (summary) => {
1068
- const probe = asRecord(summary.probe);
1069
- if (!probe) return null;
1070
- const elapsedMs = typeof probe.elapsedMs === "number" ? Math.round(probe.elapsedMs) : null;
1071
- const ok = typeof probe.ok === "boolean" ? probe.ok : null;
1072
- if (elapsedMs == null && ok !== true) return null;
1073
- const accountId = summary.accountId || "default";
1074
- const botRecord = asRecord(probe.bot);
1075
- const botUsername = botRecord && typeof botRecord.username === "string" ? botRecord.username : null;
1076
- return `${botUsername ? `@${botUsername}` : accountId}:${accountId}:${elapsedMs != null ? `${elapsedMs}ms` : "ok"}`;
1077
- };
1078
- const isProbeFailure = (summary) => {
1079
- const probe = asRecord(summary.probe);
1080
- if (!probe) return false;
1081
- return (typeof probe.ok === "boolean" ? probe.ok : null) === false;
1082
- };
1083
- const formatHealthChannelLines = (summary, opts = {}) => {
1084
- const channels = summary.channels ?? {};
1085
- const channelOrder = summary.channelOrder?.length > 0 ? summary.channelOrder : Object.keys(channels);
1086
- const accountMode = opts.accountMode ?? "default";
1087
- const lines = [];
1088
- for (const channelId of channelOrder) {
1089
- const channelSummary = channels[channelId];
1090
- if (!channelSummary) continue;
1091
- const plugin = getChannelPlugin(channelId);
1092
- const label = summary.channelLabels?.[channelId] ?? plugin?.meta.label ?? channelId;
1093
- const accountSummaries = channelSummary.accounts ?? {};
1094
- const accountIds = opts.accountIdsByChannel?.[channelId];
1095
- const filteredSummaries = accountIds && accountIds.length > 0 ? accountIds.map((accountId) => accountSummaries[accountId]).filter((entry) => Boolean(entry)) : void 0;
1096
- const listSummaries = accountMode === "all" ? Object.values(accountSummaries) : filteredSummaries ?? (channelSummary.accounts ? Object.values(accountSummaries) : []);
1097
- const baseSummary = filteredSummaries && filteredSummaries.length > 0 ? filteredSummaries[0] : channelSummary;
1098
- const botUsernames = listSummaries ? listSummaries.map((account) => {
1099
- const probeRecord = asRecord(account.probe);
1100
- const bot = probeRecord ? asRecord(probeRecord.bot) : null;
1101
- return bot && typeof bot.username === "string" ? bot.username : null;
1102
- }).filter((value) => Boolean(value)) : [];
1103
- const linked = typeof baseSummary.linked === "boolean" ? baseSummary.linked : null;
1104
- if (linked !== null) {
1105
- if (linked) {
1106
- const authAgeMs = typeof baseSummary.authAgeMs === "number" ? baseSummary.authAgeMs : null;
1107
- const authLabel = authAgeMs != null ? ` (auth age ${Math.round(authAgeMs / 6e4)}m)` : "";
1108
- lines.push(`${label}: linked${authLabel}`);
1109
- } else lines.push(`${label}: not linked`);
1110
- continue;
1111
- }
1112
- const configured = typeof baseSummary.configured === "boolean" ? baseSummary.configured : null;
1113
- if (configured === false) {
1114
- lines.push(`${label}: not configured`);
1115
- continue;
1116
- }
1117
- const accountTimings = accountMode === "all" ? listSummaries.map((account) => formatAccountProbeTiming(account)).filter((value) => Boolean(value)) : [];
1118
- const failedSummary = listSummaries.find((summary) => isProbeFailure(summary));
1119
- if (failedSummary) {
1120
- const failureLine = formatProbeLine(failedSummary.probe, { botUsernames });
1121
- if (failureLine) {
1122
- lines.push(`${label}: ${failureLine}`);
1123
- continue;
1124
- }
1125
- }
1126
- if (accountTimings.length > 0) {
1127
- lines.push(`${label}: ok (${accountTimings.join(", ")})`);
1128
- continue;
1129
- }
1130
- const probeLine = formatProbeLine(baseSummary.probe, { botUsernames });
1131
- if (probeLine) {
1132
- lines.push(`${label}: ${probeLine}`);
1133
- continue;
1134
- }
1135
- if (configured === true) {
1136
- lines.push(`${label}: configured`);
1137
- continue;
1138
- }
1139
- lines.push(`${label}: unknown`);
1140
- }
1141
- return lines;
1142
- };
1143
- async function getHealthSnapshot(params) {
1144
- const timeoutMs = params?.timeoutMs;
1145
- const cfg = loadConfig();
1146
- const { defaultAgentId, ordered } = resolveAgentOrder(cfg);
1147
- const channelBindings = buildChannelAccountBindings(cfg);
1148
- const sessionCache = /* @__PURE__ */ new Map();
1149
- const agents = ordered.map((entry) => {
1150
- const storePath = resolveStorePath(cfg.session?.store, { agentId: entry.id });
1151
- const sessions = sessionCache.get(storePath) ?? buildSessionSummary(storePath);
1152
- sessionCache.set(storePath, sessions);
1153
- return {
1154
- agentId: entry.id,
1155
- name: entry.name,
1156
- isDefault: entry.id === defaultAgentId,
1157
- heartbeat: resolveHeartbeatSummary(cfg, entry.id),
1158
- sessions
1159
- };
1160
- });
1161
- const defaultAgent = agents.find((agent) => agent.isDefault) ?? agents[0];
1162
- const heartbeatSeconds = defaultAgent?.heartbeat.everyMs ? Math.round(defaultAgent.heartbeat.everyMs / 1e3) : 0;
1163
- const sessions = defaultAgent?.sessions ?? buildSessionSummary(resolveStorePath(cfg.session?.store, { agentId: defaultAgentId }));
1164
- const start = Date.now();
1165
- const cappedTimeout = timeoutMs === void 0 ? DEFAULT_TIMEOUT_MS : Math.max(50, timeoutMs);
1166
- const doProbe = params?.probe !== false;
1167
- const channels = {};
1168
- const channelOrder = listChannelPlugins().map((plugin) => plugin.id);
1169
- const channelLabels = {};
1170
- for (const plugin of listChannelPlugins()) {
1171
- channelLabels[plugin.id] = plugin.meta.label ?? plugin.id;
1172
- const accountIds = plugin.config.listAccountIds(cfg);
1173
- const defaultAccountId = resolveChannelDefaultAccountId({
1174
- plugin,
1175
- cfg,
1176
- accountIds
1177
- });
1178
- const boundAccounts = channelBindings.get(plugin.id)?.get(defaultAgentId) ?? [];
1179
- const preferredAccountId = resolvePreferredAccountId({
1180
- accountIds,
1181
- defaultAccountId,
1182
- boundAccounts
1183
- });
1184
- const boundAccountIdsAll = Array.from(new Set(Array.from(channelBindings.get(plugin.id)?.values() ?? []).flatMap((ids) => ids)));
1185
- const accountIdsToProbe = Array.from(new Set([
1186
- preferredAccountId,
1187
- defaultAccountId,
1188
- ...accountIds,
1189
- ...boundAccountIdsAll
1190
- ].filter((value) => value && value.trim())));
1191
- debugHealth("channel", {
1192
- id: plugin.id,
1193
- accountIds,
1194
- defaultAccountId,
1195
- boundAccounts,
1196
- preferredAccountId,
1197
- accountIdsToProbe
1198
- });
1199
- const accountSummaries = {};
1200
- for (const accountId of accountIdsToProbe) {
1201
- const account = plugin.config.resolveAccount(cfg, accountId);
1202
- const enabled = plugin.config.isEnabled ? plugin.config.isEnabled(account, cfg) : isAccountEnabled(account);
1203
- const configured = plugin.config.isConfigured ? await plugin.config.isConfigured(account, cfg) : true;
1204
- let probe;
1205
- let lastProbeAt = null;
1206
- if (enabled && configured && doProbe && plugin.status?.probeAccount) try {
1207
- probe = await plugin.status.probeAccount({
1208
- account,
1209
- timeoutMs: cappedTimeout,
1210
- cfg
1211
- });
1212
- lastProbeAt = Date.now();
1213
- } catch (err) {
1214
- probe = {
1215
- ok: false,
1216
- error: formatErrorMessage(err)
1217
- };
1218
- lastProbeAt = Date.now();
1219
- }
1220
- const probeRecord = probe && typeof probe === "object" ? probe : null;
1221
- const bot = probeRecord && typeof probeRecord.bot === "object" ? probeRecord.bot : null;
1222
- if (bot?.username) debugHealth("probe.bot", {
1223
- channel: plugin.id,
1224
- accountId,
1225
- username: bot.username
1226
- });
1227
- const snapshot = {
1228
- accountId,
1229
- enabled,
1230
- configured
1231
- };
1232
- if (probe !== void 0) snapshot.probe = probe;
1233
- if (lastProbeAt) snapshot.lastProbeAt = lastProbeAt;
1234
- const summary = plugin.status?.buildChannelSummary ? await plugin.status.buildChannelSummary({
1235
- account,
1236
- cfg,
1237
- defaultAccountId: accountId,
1238
- snapshot
1239
- }) : void 0;
1240
- const record = summary && typeof summary === "object" ? summary : {
1241
- accountId,
1242
- configured,
1243
- probe,
1244
- lastProbeAt
1245
- };
1246
- if (record.configured === void 0) record.configured = configured;
1247
- if (record.lastProbeAt === void 0 && lastProbeAt) record.lastProbeAt = lastProbeAt;
1248
- record.accountId = accountId;
1249
- accountSummaries[accountId] = record;
1250
- }
1251
- const fallbackSummary = accountSummaries[preferredAccountId] ?? accountSummaries[defaultAccountId] ?? accountSummaries[accountIdsToProbe[0] ?? preferredAccountId] ?? accountSummaries[Object.keys(accountSummaries)[0]];
1252
- if (fallbackSummary) channels[plugin.id] = {
1253
- ...fallbackSummary,
1254
- accounts: accountSummaries
1255
- };
1256
- }
1257
- return {
1258
- ok: true,
1259
- ts: Date.now(),
1260
- durationMs: Date.now() - start,
1261
- channels,
1262
- channelOrder,
1263
- channelLabels,
1264
- heartbeatSeconds,
1265
- defaultAgentId,
1266
- agents,
1267
- sessions: {
1268
- path: sessions.path,
1269
- count: sessions.count,
1270
- recent: sessions.recent
1271
- }
1272
- };
1273
- }
1274
- async function healthCommand(opts, runtime) {
1275
- const cfg = opts.config ?? loadConfig();
1276
- const summary = await withProgress({
1277
- label: "Checking gateway health…",
1278
- indeterminate: true,
1279
- enabled: opts.json !== true
1280
- }, async () => await callGateway({
1281
- method: "health",
1282
- params: opts.verbose ? { probe: true } : void 0,
1283
- timeoutMs: opts.timeoutMs,
1284
- config: cfg
1285
- }));
1286
- if (opts.json) runtime.log(JSON.stringify(summary, null, 2));
1287
- else {
1288
- const debugEnabled = isTruthyEnvValue(process.env.REMOTECLAW_DEBUG_HEALTH);
1289
- const rich = isRich();
1290
- if (opts.verbose) {
1291
- const details = buildGatewayConnectionDetails({ config: cfg });
1292
- runtime.log(info("Gateway connection:"));
1293
- for (const line of details.message.split("\n")) runtime.log(` ${line}`);
1294
- }
1295
- const localAgents = resolveAgentOrder(cfg);
1296
- const defaultAgentId = summary.defaultAgentId ?? localAgents.defaultAgentId;
1297
- const agents = Array.isArray(summary.agents) ? summary.agents : [];
1298
- const fallbackAgents = localAgents.ordered.map((entry) => {
1299
- const storePath = resolveStorePath(cfg.session?.store, { agentId: entry.id });
1300
- return {
1301
- agentId: entry.id,
1302
- name: entry.name,
1303
- isDefault: entry.id === localAgents.defaultAgentId,
1304
- heartbeat: resolveHeartbeatSummary(cfg, entry.id),
1305
- sessions: buildSessionSummary(storePath)
1306
- };
1307
- });
1308
- const resolvedAgents = agents.length > 0 ? agents : fallbackAgents;
1309
- const displayAgents = opts.verbose ? resolvedAgents : resolvedAgents.filter((agent) => agent.agentId === defaultAgentId);
1310
- const channelBindings = buildChannelAccountBindings(cfg);
1311
- if (debugEnabled) {
1312
- runtime.log(info("[debug] local channel accounts"));
1313
- for (const plugin of listChannelPlugins()) {
1314
- const accountIds = plugin.config.listAccountIds(cfg);
1315
- const defaultAccountId = resolveChannelDefaultAccountId({
1316
- plugin,
1317
- cfg,
1318
- accountIds
1319
- });
1320
- runtime.log(` ${plugin.id}: accounts=${accountIds.join(", ") || "(none)"} default=${defaultAccountId}`);
1321
- for (const accountId of accountIds) {
1322
- const account = plugin.config.resolveAccount(cfg, accountId);
1323
- const record = asRecord(account);
1324
- const tokenSource = record && typeof record.tokenSource === "string" ? record.tokenSource : void 0;
1325
- const configured = plugin.config.isConfigured ? await plugin.config.isConfigured(account, cfg) : true;
1326
- runtime.log(` - ${accountId}: configured=${configured}${tokenSource ? ` tokenSource=${tokenSource}` : ""}`);
1327
- }
1328
- }
1329
- runtime.log(info("[debug] bindings map"));
1330
- for (const [channelId, byAgent] of channelBindings.entries()) {
1331
- const entries = Array.from(byAgent.entries()).map(([agentId, ids]) => `${agentId}=[${ids.join(", ")}]`);
1332
- runtime.log(` ${channelId}: ${entries.join(" ")}`);
1333
- }
1334
- runtime.log(info("[debug] gateway channel probes"));
1335
- for (const [channelId, channelSummary] of Object.entries(summary.channels ?? {})) {
1336
- const accounts = channelSummary.accounts ?? {};
1337
- const probes = Object.entries(accounts).map(([accountId, accountSummary]) => {
1338
- const probe = asRecord(accountSummary.probe);
1339
- const bot = probe ? asRecord(probe.bot) : null;
1340
- return `${accountId}=${(bot && typeof bot.username === "string" ? bot.username : null) ?? "(no bot)"}`;
1341
- });
1342
- runtime.log(` ${channelId}: ${probes.join(", ") || "(none)"}`);
1343
- }
1344
- }
1345
- const channelAccountFallbacks = Object.fromEntries(listChannelPlugins().map((plugin) => {
1346
- const accountIds = plugin.config.listAccountIds(cfg);
1347
- const preferred = resolvePreferredAccountId({
1348
- accountIds,
1349
- defaultAccountId: resolveChannelDefaultAccountId({
1350
- plugin,
1351
- cfg,
1352
- accountIds
1353
- }),
1354
- boundAccounts: channelBindings.get(plugin.id)?.get(defaultAgentId) ?? []
1355
- });
1356
- return [plugin.id, [preferred]];
1357
- }));
1358
- const accountIdsByChannel = (() => {
1359
- const entries = displayAgents.length > 0 ? displayAgents : resolvedAgents;
1360
- const byChannel = {};
1361
- for (const [channelId, byAgent] of channelBindings.entries()) {
1362
- const accountIds = [];
1363
- for (const agent of entries) {
1364
- const ids = byAgent.get(agent.agentId) ?? [];
1365
- for (const id of ids) if (!accountIds.includes(id)) accountIds.push(id);
1366
- }
1367
- if (accountIds.length > 0) byChannel[channelId] = accountIds;
1368
- }
1369
- for (const [channelId, fallbackIds] of Object.entries(channelAccountFallbacks)) if (!byChannel[channelId] || byChannel[channelId].length === 0) byChannel[channelId] = fallbackIds;
1370
- return byChannel;
1371
- })();
1372
- const channelLines = Object.keys(accountIdsByChannel).length > 0 ? formatHealthChannelLines(summary, {
1373
- accountMode: opts.verbose ? "all" : "default",
1374
- accountIdsByChannel
1375
- }) : formatHealthChannelLines(summary, { accountMode: opts.verbose ? "all" : "default" });
1376
- for (const line of channelLines) runtime.log(styleHealthChannelLine(line, rich));
1377
- for (const plugin of listChannelPlugins()) {
1378
- const channelSummary = summary.channels?.[plugin.id];
1379
- if (!channelSummary || channelSummary.linked !== true) continue;
1380
- if (!plugin.status?.logSelfId) continue;
1381
- const boundAccounts = channelBindings.get(plugin.id)?.get(defaultAgentId) ?? [];
1382
- const accountIds = plugin.config.listAccountIds(cfg);
1383
- const accountId = resolvePreferredAccountId({
1384
- accountIds,
1385
- defaultAccountId: resolveChannelDefaultAccountId({
1386
- plugin,
1387
- cfg,
1388
- accountIds
1389
- }),
1390
- boundAccounts
1391
- });
1392
- const account = plugin.config.resolveAccount(cfg, accountId);
1393
- plugin.status.logSelfId({
1394
- account,
1395
- cfg,
1396
- runtime,
1397
- includeChannelPrefix: true
1398
- });
1399
- }
1400
- if (resolvedAgents.length > 0) {
1401
- const agentLabels = resolvedAgents.map((agent) => agent.isDefault ? `${agent.agentId} (default)` : agent.agentId);
1402
- runtime.log(info(`Agents: ${agentLabels.join(", ")}`));
1403
- }
1404
- const heartbeatParts = displayAgents.map((agent) => {
1405
- const everyMs = agent.heartbeat?.everyMs;
1406
- return `${everyMs ? formatDurationParts(everyMs) : "disabled"} (${agent.agentId})`;
1407
- }).filter(Boolean);
1408
- if (heartbeatParts.length > 0) runtime.log(info(`Heartbeat interval: ${heartbeatParts.join(", ")}`));
1409
- if (displayAgents.length === 0) {
1410
- runtime.log(info(`Session store: ${summary.sessions.path} (${summary.sessions.count} entries)`));
1411
- 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"})`);
1412
- } else for (const agent of displayAgents) {
1413
- runtime.log(info(`Session store (${agent.agentId}): ${agent.sessions.path} (${agent.sessions.count} entries)`));
1414
- 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"})`);
1415
- }
1416
- }
1417
- }
1418
-
1419
- //#endregion
1420
- 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 };