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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1052) hide show
  1. package/README.md +9 -7
  2. package/dist/accounts-A8jZK_v9.js +272 -0
  3. package/dist/accounts-BegPt5VR.js +36 -0
  4. package/dist/accounts-BmiimLpP.js +47 -0
  5. package/dist/accounts-Bomfgw0M.js +32 -0
  6. package/dist/accounts-Bpk-loA6.js +47 -0
  7. package/dist/accounts-DAdUdbPk.js +36 -0
  8. package/dist/accounts-WYyfAiie.js +270 -0
  9. package/dist/ack-reactions-CMDRj7fJ.js +446 -0
  10. package/dist/ack-reactions-D7VScSny.js +446 -0
  11. package/dist/acp-cli-BpMS0SsZ.js +1323 -0
  12. package/dist/acp-cli-DkXTlCpF.js +1317 -0
  13. package/dist/active-listener--FT8ewxl.js +37 -0
  14. package/dist/active-listener-C1StcdIA.js +37 -0
  15. package/dist/agent-C76P7tEr.js +703 -0
  16. package/dist/agent-helpers-CK3Obbsi.js +400 -0
  17. package/dist/agent-helpers-KHUla1K7.js +400 -0
  18. package/dist/agent-scope-BrDeaWWf.js +116 -0
  19. package/dist/agent-scope-DxqtYjuJ.js +114 -0
  20. package/dist/agent-ue8p9AIv.js +704 -0
  21. package/dist/agents--24oKN80.js +788 -0
  22. package/dist/agents.config-CWAUoPzG.js +116 -0
  23. package/dist/agents.config-Ck45E_ce.js +116 -0
  24. package/dist/audio-B85HoT7E.js +43 -0
  25. package/dist/audio-BbCUzndz.js +43 -0
  26. package/dist/audio-preflight-B3f0x3zu.js +69 -0
  27. package/dist/audio-preflight-Dv76vFTu.js +64 -0
  28. package/dist/audit-BAbBf2MU.js +3149 -0
  29. package/dist/audit-g55SYz1m.js +3149 -0
  30. package/dist/auth-Bq44qPUd.js +448 -0
  31. package/dist/auth-CVfoI--S.js +281 -0
  32. package/dist/auth-DTWpZJ1a.js +279 -0
  33. package/dist/auth-VItd2pwK.js +448 -0
  34. package/dist/banner-CyPQJybO.js +294 -0
  35. package/dist/binaries-DbgLoSWv.js +13 -0
  36. package/dist/bindings-6KojDoIi.js +69 -0
  37. package/dist/bindings-B6icMMUx.js +69 -0
  38. package/dist/bonjour-discovery-CQU4QbLK.js +378 -0
  39. package/dist/bonjour-discovery-D8aOnk3M.js +378 -0
  40. package/dist/boot/handler.js +42 -69
  41. package/dist/browser-cli-BH41geGr.js +1693 -0
  42. package/dist/browser-cli-u4nrjp1h.js +1688 -0
  43. package/dist/build-info.json +3 -3
  44. package/dist/call-CMDcRlGW.js +2826 -0
  45. package/dist/call-D5YKTYSM.js +2827 -0
  46. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  47. package/dist/catalog-CUY_iTaG.js +185 -0
  48. package/dist/catalog-p6W09S2j.js +185 -0
  49. package/dist/channel-account-context-CA2m93Kt.js +550 -0
  50. package/dist/channel-account-context-Las-t6RP.js +550 -0
  51. package/dist/channel-activity-BD603ehL.js +94 -0
  52. package/dist/channel-activity-CwiF_QMr.js +94 -0
  53. package/dist/channel-activity-daCpxHdT.js +292 -0
  54. package/dist/channel-options-CAlClffy.js +33 -0
  55. package/dist/channel-options-Hl_ep3UG.js +32 -0
  56. package/dist/channel-selection-CHJ7TumC.js +51 -0
  57. package/dist/channel-selection-DR7eW8UG.js +51 -0
  58. package/dist/channel-web-B79j9fSC.js +2134 -0
  59. package/dist/channel-web-DHTTcipm.js +2136 -0
  60. package/dist/channels-cli-DeZ95hcx.js +1427 -0
  61. package/dist/channels-cli-eUCi6jXk.js +1422 -0
  62. package/dist/channels-status-issues-By77REbh.js +18 -0
  63. package/dist/channels-status-issues-DXyOO-KH.js +18 -0
  64. package/dist/chat-envelope-BEDutlnF.js +248 -0
  65. package/dist/chat-envelope-vJJUdDE7.js +248 -0
  66. package/dist/chrome-BuAi16Rq.js +1732 -0
  67. package/dist/chrome-IR-2ukph.js +1733 -0
  68. package/dist/chunk-C1mQSjas.js +341 -0
  69. package/dist/chunk-D7VX4pmT.js +341 -0
  70. package/dist/clack-prompter-BX8SVxtP.js +122 -0
  71. package/dist/clack-prompter-D6HhVlZW.js +121 -0
  72. package/dist/cleanup-utils-DNd0wdKZ.js +94 -0
  73. package/dist/cli/daemon-cli.js +1 -1
  74. package/dist/cli-CK4Y43rx.js +131 -0
  75. package/dist/cli-Cha5Uk29.js +126 -0
  76. package/dist/clipboard-Cbj3McM_.js +31 -0
  77. package/dist/clipboard-Ne8gaWea.js +31 -0
  78. package/dist/command-format-D0vKipG9.js +32 -0
  79. package/dist/command-format-KkslAzwV.js +18 -0
  80. package/dist/command-logger/handler.js +3 -3
  81. package/dist/command-registry-07zlvSN8.js +215 -0
  82. package/dist/commands-DChC3pIF.js +41 -0
  83. package/dist/commands-DFHMoQgH.js +41 -0
  84. package/dist/commands-registry-BN04GIlJ.js +891 -0
  85. package/dist/commands-registry-DbS9NHeX.js +892 -0
  86. package/dist/common-DHHHAcmR.js +156 -0
  87. package/dist/common-De-Lakuh.js +156 -0
  88. package/dist/completion-cli--Jcg794c.js +452 -0
  89. package/dist/completion-cli-B8n7umme.js +452 -0
  90. package/dist/config-BupC6eiJ.js +4223 -0
  91. package/dist/config-CHDaGquZ.js +4225 -0
  92. package/dist/config-cli-Cu79BThx.js +242 -0
  93. package/dist/config-cli-DrJtiyW-.js +247 -0
  94. package/dist/config-guard-BLsqW1qt.js +98 -0
  95. package/dist/config-guard-NQ7jaYM4.js +75 -0
  96. package/dist/config-validation-BLllMW0t.js +18 -0
  97. package/dist/config-validation-DT29VEco.js +18 -0
  98. package/dist/configure-B25UEQnQ.js +889 -0
  99. package/dist/configure-CqMUE4Zw.js +891 -0
  100. package/dist/constants-BbAEYzFC.js +70 -0
  101. package/dist/constants-tLOgmZZ1.js +70 -0
  102. package/dist/control-auth-BFbDXKLK.js +397 -0
  103. package/dist/control-auth-BiiO-FNy.js +397 -0
  104. package/dist/control-ui/assets/index-CuY3pfh1.js +7716 -0
  105. package/dist/control-ui/assets/index-CuY3pfh1.js.map +1 -0
  106. package/dist/control-ui/assets/index-D_fjkN3g.css +1 -0
  107. package/dist/control-ui/index.html +2 -2
  108. package/dist/control-ui-assets-BlpSXjlT.js +186 -0
  109. package/dist/control-ui-assets-eJU2-yvs.js +186 -0
  110. package/dist/conversation-label-Bn5j3lUT.js +36 -0
  111. package/dist/conversation-label-L0QTtKji.js +36 -0
  112. package/dist/cron-cli-BV1o0UgM.js +491 -0
  113. package/dist/cron-cli-C8j-P8GF.js +496 -0
  114. package/dist/daemon-cli-BDvU0Xv6.js +1199 -0
  115. package/dist/daemon-cli-CoNl2Ugf.js +1197 -0
  116. package/dist/daemon-cli.js +53 -97
  117. package/dist/daemon-install-BMEnzWwq.js +60 -0
  118. package/dist/daemon-install-BkUJbdPC.js +55 -0
  119. package/dist/daemon-install-helpers-B9kMxC1v.js +462 -0
  120. package/dist/daemon-install-helpers-DoYR5z4H.js +462 -0
  121. package/dist/deliver-D8P9_nk-.js +481 -0
  122. package/dist/deliver-F9ed3dhp.js +481 -0
  123. package/dist/delivery-queue-B6TuHppj.js +244 -0
  124. package/dist/delivery-queue-BZc3AiGu.js +244 -0
  125. package/dist/devices-cli-DZgxMNLD.js +322 -0
  126. package/dist/devices-cli-DlG9ehK0.js +317 -0
  127. package/dist/diagnostics-CK2HGAFw.js +46 -0
  128. package/dist/diagnostics-G-C-IuxO.js +46 -0
  129. package/dist/directory-cli-CY6tHRIZ.js +218 -0
  130. package/dist/directory-cli-HyvRJ1Ua.js +223 -0
  131. package/dist/dm-policy-shared-1FdjwGtJ.js +22 -0
  132. package/dist/dm-policy-shared-CT3er5HI.js +22 -0
  133. package/dist/dns-cli-Cu-wYvll.js +203 -0
  134. package/dist/dns-cli-DQdnNJh4.js +198 -0
  135. package/dist/dock-D038fZZl.js +929 -0
  136. package/dist/dock-D5pZ3a44.js +928 -0
  137. package/dist/doctor-completion-BrHnayfU.js +92 -0
  138. package/dist/doctor-completion-CoZP2KiR.js +92 -0
  139. package/dist/doctor-config-flow-DJ1nWCTZ.js +1935 -0
  140. package/dist/doctor-config-flow-DYhXUwEq.js +1934 -0
  141. package/dist/enable-B5dIjgnm.js +59 -0
  142. package/dist/enable-FmiEY4ng.js +59 -0
  143. package/dist/entry.js +14 -16
  144. package/dist/env-DUb5GiQe.js +60 -0
  145. package/dist/env-vars-C8WMB8Ix.js +93 -0
  146. package/dist/errors-CdmXrBic.js +35 -0
  147. package/dist/errors-DdLfwEVi.js +35 -0
  148. package/dist/exec-BhkXWg7V.js +164 -0
  149. package/dist/exec-ClUTXFZ9.js +164 -0
  150. package/dist/export-html/template.css +0 -36
  151. package/dist/export-html/template.js +1 -32
  152. package/dist/extensionAPI.js +1015 -142
  153. package/dist/fetch-CCuD0LYV.js +67 -0
  154. package/dist/fetch-JBWLkOpL.js +67 -0
  155. package/dist/fetch-oku6r8tJ.js +67 -0
  156. package/dist/file-lock-6NXMPZTT.js +107 -0
  157. package/dist/file-lock-Ks-RPU6W.js +107 -0
  158. package/dist/fs-safe-93aDW4mH.js +98 -0
  159. package/dist/fs-safe-ACrBwOF5.js +88 -0
  160. package/dist/gateway-cli-CJs4Mxlv.js +23730 -0
  161. package/dist/gateway-cli-gUVR20v7.js +23725 -0
  162. package/dist/gateway-rpc-CSdrtPzg.js +28 -0
  163. package/dist/gateway-rpc-PNA_wUoe.js +28 -0
  164. package/dist/gmail-setup-utils-DNZEf6T0.js +422 -0
  165. package/dist/gmail-setup-utils-KPAKWwGy.js +423 -0
  166. package/dist/health-BCidscV-.js +1417 -0
  167. package/dist/health-Cw2dr19V.js +1414 -0
  168. package/dist/health-format-DOhfU1rY.js +28 -0
  169. package/dist/heartbeat-visibility-C5Vxudi9.js +125 -0
  170. package/dist/heartbeat-visibility-DHeZ-ko1.js +125 -0
  171. package/dist/help-format-Ch0EWh7N.js +17 -0
  172. package/dist/helpers-B4NWktS8.js +10 -0
  173. package/dist/hook-runner-global-Vj-YQxeR.js +527 -0
  174. package/dist/hooks-cli---vy0V0j.js +1218 -0
  175. package/dist/hooks-cli-CX-JUHdJ.js +1223 -0
  176. package/dist/image-ops-DMl7j7f4.js +354 -0
  177. package/dist/image-ops-DpkTOzhI.js +354 -0
  178. package/dist/import-DIjlFm_Y.js +493 -0
  179. package/dist/import-DdQvVR-_.js +495 -0
  180. package/dist/inbound-context-CmmmT8IP.js +68 -0
  181. package/dist/inbound-context-oxIWzEgc.js +68 -0
  182. package/dist/inbound-path-policy-BdmTOUka.js +90 -0
  183. package/dist/inbound-path-policy-DYTLjca8.js +90 -0
  184. package/dist/index.js +106 -105
  185. package/dist/inspect-C9d1V-lI.js +559 -0
  186. package/dist/inspect-rHjRqr3W.js +559 -0
  187. package/dist/installs-QUjSL2ZA.js +325 -0
  188. package/dist/installs-vT5wnxC4.js +325 -0
  189. package/dist/ipv4-DdcyK1aU.js +46 -0
  190. package/dist/ipv4-OHvujh00.js +46 -0
  191. package/dist/ir-CnMQRFBu.js +940 -0
  192. package/dist/json-files-BiA_B-xm.js +46 -0
  193. package/dist/links-CIHbVNO_.js +15 -0
  194. package/dist/loader-CYigLbch.js +22404 -0
  195. package/dist/loader-ElWX62xE.js +22401 -0
  196. package/dist/local-roots-B0QcJDJI.js +313 -0
  197. package/dist/local-roots-BfXsZRkm.js +314 -0
  198. package/dist/logger-BtwpYD7c.js +49 -0
  199. package/dist/logging-CLc3Umm0.js +20 -0
  200. package/dist/login-C8jHYLxN.js +61 -0
  201. package/dist/login-D__FYZX9.js +62 -0
  202. package/dist/login-qr-C0Gd6ybl.js +323 -0
  203. package/dist/login-qr-D7dw54Yp.js +328 -0
  204. package/dist/logs-cli-CFOVARdJ.js +234 -0
  205. package/dist/logs-cli-DtAR__VH.js +239 -0
  206. package/dist/markdown-tables-ChBqQA_Q.js +29 -0
  207. package/dist/markdown-tables-xMuH3QnS.js +29 -0
  208. package/dist/media-CmiNXiOZ.js +10453 -0
  209. package/dist/media-DYopaoc0.js +940 -0
  210. package/dist/message-action-names-CACBi-HB.js +2521 -0
  211. package/dist/message-action-names-CFwlz01T.js +2521 -0
  212. package/dist/message-channel-DF4I2vOK.js +91 -0
  213. package/dist/net-COL170MG.js +225 -0
  214. package/dist/net-QZ8IHNXc.js +225 -0
  215. package/dist/node-cli-CW8jOcHO.js +24 -0
  216. package/dist/nodes-cli-B4lvU9N5.js +1349 -0
  217. package/dist/nodes-cli-B8iTBsI6.js +1344 -0
  218. package/dist/nodes-screen-CZCXHrWB.js +250 -0
  219. package/dist/nodes-screen-C_K1vcS5.js +250 -0
  220. package/dist/note-BVerR3D5.js +92 -0
  221. package/dist/note-Dk8-EaJg.js +92 -0
  222. package/dist/npm-registry-spec-Dma0KHft.js +786 -0
  223. package/dist/npm-registry-spec-vYkxZb6u.js +786 -0
  224. package/dist/npm-resolution-CcZYnzrL.js +86 -0
  225. package/dist/npm-resolution-DsATEEGx.js +86 -0
  226. package/dist/onboard-Csm4bDd_.js +438 -0
  227. package/dist/onboard-D1b535pC.js +436 -0
  228. package/dist/onboard-channels-5EIXyDZh.js +2547 -0
  229. package/dist/onboard-channels-bedB47Hs.js +2548 -0
  230. package/dist/onboard-config-CcPV3Cqz.js +39 -0
  231. package/dist/onboard-config-DcTaxmuf.js +39 -0
  232. package/dist/onboard-helpers-BHNXyhA4.js +364 -0
  233. package/dist/onboard-helpers-eTUU00t8.js +363 -0
  234. package/dist/onboard-remote-DwDKQk1K.js +127 -0
  235. package/dist/onboard-remote-TPbiye5m.js +127 -0
  236. package/dist/onboarding-D0YGZ_Ux.js +588 -0
  237. package/dist/onboarding-DCfmKzl2.js +586 -0
  238. package/dist/onboarding.finalize-BhpsVwME.js +399 -0
  239. package/dist/onboarding.finalize-CY8vgmi9.js +402 -0
  240. package/dist/onboarding.gateway-config-C_eqpJ7D.js +192 -0
  241. package/dist/onboarding.gateway-config-DR1ey6tU.js +199 -0
  242. package/dist/outbound-Be4BgVqF.js +220 -0
  243. package/dist/outbound-CXJLn8kn.js +221 -0
  244. package/dist/outbound-attachment-CbNLn0lk.js +18 -0
  245. package/dist/outbound-attachment-DNCMF74c.js +18 -0
  246. package/dist/outbound-attachment-DaStRTGv.js +18 -0
  247. package/dist/pairing-cli-CxGDUsLT.js +128 -0
  248. package/dist/pairing-cli-D83T3PG9.js +123 -0
  249. package/dist/pairing-labels-6f8FqSS5.js +9 -0
  250. package/dist/pairing-labels-CI5j-OUT.js +9 -0
  251. package/dist/pairing-store-DnTHRcnO.js +459 -0
  252. package/dist/pairing-store-ONzqxcNb.js +460 -0
  253. package/dist/path-env-D7VB7sOO.js +89 -0
  254. package/dist/path-env-DFiYvvI-.js +89 -0
  255. package/dist/path-safety-BshBsw4P.js +14 -0
  256. package/dist/path-safety-CZbhQciI.js +14 -0
  257. package/dist/plugin-auto-enable-BnCQKkIK.js +302 -0
  258. package/dist/plugin-auto-enable-CFRs-pcA.js +301 -0
  259. package/dist/plugin-registry-CV5pfXOU.js +33 -0
  260. package/dist/plugin-registry-CmG34W0u.js +33 -0
  261. package/dist/plugin-sdk/agents/agent-helpers.d.ts +0 -1
  262. package/dist/plugin-sdk/agents/agent-scope.d.ts +10 -0
  263. package/dist/plugin-sdk/agents/agent-types.d.ts +1 -6
  264. package/dist/plugin-sdk/agents/agent-utils.d.ts +0 -14
  265. package/dist/plugin-sdk/agents/provider-utils.d.ts +0 -1
  266. package/dist/plugin-sdk/agents/subagent-spawn.d.ts +0 -1
  267. package/dist/plugin-sdk/agents/tools/sessions-helpers.d.ts +0 -1
  268. package/dist/plugin-sdk/auth/constants.d.ts +16 -0
  269. package/dist/plugin-sdk/auth/display.d.ts +7 -0
  270. package/dist/plugin-sdk/auth/doctor.d.ts +8 -0
  271. package/dist/plugin-sdk/auth/env-injection.d.ts +41 -0
  272. package/dist/plugin-sdk/auth/index.d.ts +8 -0
  273. package/dist/plugin-sdk/auth/oauth.d.ts +14 -0
  274. package/dist/plugin-sdk/auth/provider-auth.d.ts +40 -0
  275. package/dist/plugin-sdk/auth/session-override.d.ts +18 -0
  276. package/dist/plugin-sdk/auto-reply/reply/agent-runner-execution.d.ts +0 -1
  277. package/dist/plugin-sdk/auto-reply/reply/agent-runner-utils.d.ts +0 -2
  278. package/dist/plugin-sdk/auto-reply/reply/commands-status.d.ts +1 -4
  279. package/dist/plugin-sdk/auto-reply/reply/commands-types.d.ts +1 -4
  280. package/dist/plugin-sdk/auto-reply/reply/directive-handling.levels.d.ts +1 -7
  281. package/dist/plugin-sdk/auto-reply/reply/directive-handling.params.d.ts +1 -4
  282. package/dist/plugin-sdk/auto-reply/reply/directive-handling.parse.d.ts +1 -7
  283. package/dist/plugin-sdk/auto-reply/reply/directive-handling.shared.d.ts +1 -4
  284. package/dist/plugin-sdk/auto-reply/reply/directives.d.ts +3 -15
  285. package/dist/plugin-sdk/auto-reply/reply/get-reply-directives.d.ts +1 -5
  286. package/dist/plugin-sdk/auto-reply/reply/get-reply-inline-actions.d.ts +1 -5
  287. package/dist/plugin-sdk/auto-reply/reply/get-reply-run.d.ts +1 -5
  288. package/dist/plugin-sdk/auto-reply/reply/queue/types.d.ts +1 -3
  289. package/dist/plugin-sdk/auto-reply/reply/response-prefix-template.d.ts +4 -6
  290. package/dist/plugin-sdk/auto-reply/reply/session-run-accounting.d.ts +0 -7
  291. package/dist/plugin-sdk/auto-reply/reply/session-updates.d.ts +0 -10
  292. package/dist/plugin-sdk/auto-reply/reply.d.ts +1 -1
  293. package/dist/plugin-sdk/auto-reply/status.d.ts +2 -6
  294. package/dist/plugin-sdk/auto-reply/thinking.d.ts +0 -11
  295. package/dist/plugin-sdk/auto-reply/types.d.ts +1 -2
  296. package/dist/plugin-sdk/commands/agent/session.d.ts +1 -2
  297. package/dist/plugin-sdk/config/defaults.d.ts +0 -1
  298. package/dist/plugin-sdk/config/sessions/types.d.ts +0 -8
  299. package/dist/plugin-sdk/config/types.agent-defaults.d.ts +28 -112
  300. package/dist/plugin-sdk/config/types.agents.d.ts +8 -0
  301. package/dist/plugin-sdk/config/types.messages.d.ts +1 -2
  302. package/dist/plugin-sdk/config/types.tools.d.ts +1 -1
  303. package/dist/plugin-sdk/config/zod-schema.agent-defaults.d.ts +9 -66
  304. package/dist/plugin-sdk/config/zod-schema.agent-runtime.d.ts +5 -13
  305. package/dist/plugin-sdk/config/zod-schema.agents.d.ts +12 -76
  306. package/dist/plugin-sdk/config/zod-schema.d.ts +12 -76
  307. package/dist/plugin-sdk/daemon/constants.d.ts +2 -2
  308. package/dist/plugin-sdk/gateway/protocol/index.d.ts +1 -3
  309. package/dist/plugin-sdk/gateway/protocol/schema/sessions.d.ts +0 -2
  310. package/dist/plugin-sdk/gateway/session-utils.types.d.ts +0 -2
  311. package/dist/plugin-sdk/index.js +108 -134
  312. package/dist/plugin-sdk/middleware/auth-key-retry.d.ts +32 -0
  313. package/dist/plugin-sdk/middleware/channel-bridge.d.ts +4 -0
  314. package/dist/plugin-sdk/middleware/error-classifier.d.ts +5 -0
  315. package/dist/plugin-sdk/middleware/media-resolver.d.ts +12 -0
  316. package/dist/plugin-sdk/middleware/runtime-factory.d.ts +42 -0
  317. package/dist/plugin-sdk/middleware/types.d.ts +33 -1
  318. package/dist/plugin-sdk/plugins/types.d.ts +1 -1
  319. package/dist/plugin-sdk/terminal/palette.d.ts +2 -2
  320. package/dist/plugins-B4waLB_f.js +453 -0
  321. package/dist/plugins-D6-JJ1il.js +455 -0
  322. package/dist/plugins-cli-DG2zHgdP.js +799 -0
  323. package/dist/plugins-cli-DZvQzkWd.js +794 -0
  324. package/dist/ports-BcTKFlWl.js +96 -0
  325. package/dist/ports-DAc2AlZE.js +316 -0
  326. package/dist/ports-HiuYk3bt.js +96 -0
  327. package/dist/ports-dEePqmCq.js +370 -0
  328. package/dist/program-CX-EtQ9W.js +245 -0
  329. package/dist/program-context-R3wsjl2f.js +474 -0
  330. package/dist/progress-DQ1drugY.js +124 -0
  331. package/dist/prompt-edYTUtju.js +21 -0
  332. package/dist/prompt-select-styled-BzL7v1zQ.js +1647 -0
  333. package/dist/prompt-select-styled-g5q4srtu.js +1650 -0
  334. package/dist/prompt-style-CYEpbwXH.js +9 -0
  335. package/dist/provider-dispatcher-D7qFGoUR.js +660 -0
  336. package/dist/provider-dispatcher-dB_rm6tV.js +659 -0
  337. package/dist/push-apns-DQwR-i4_.js +713 -0
  338. package/dist/push-apns-Dj5RApCY.js +711 -0
  339. package/dist/pw-ai-DOQMJFB-.js +1911 -0
  340. package/dist/pw-ai-oqtYDmjQ.js +1907 -0
  341. package/dist/qr-cli-CBGm_Cik.js +353 -0
  342. package/dist/qr-cli-D2jZPdW9.js +348 -0
  343. package/dist/redact-gXuh8MFk.js +191 -0
  344. package/dist/redact-snapshot-B-2V56Yb.js +2016 -0
  345. package/dist/redact-snapshot-CD36XSYE.js +2016 -0
  346. package/dist/register.agent-DLSuiqWE.js +287 -0
  347. package/dist/register.agent-DcvEt3hG.js +1044 -0
  348. package/dist/register.configure-3edoYZai.js +131 -0
  349. package/dist/register.configure-CyOJCmnY.js +125 -0
  350. package/dist/register.import-Cku0T-PA.js +31 -0
  351. package/dist/register.import-Dr8TiUVx.js +28 -0
  352. package/dist/register.maintenance-5aaPQbJk.js +495 -0
  353. package/dist/register.maintenance-DPSswZDJ.js +498 -0
  354. package/dist/register.message-BaSVFv92.js +682 -0
  355. package/dist/register.message-FEI0RiNN.js +687 -0
  356. package/dist/register.onboard-CO1UZL-9.js +258 -0
  357. package/dist/register.onboard-DuLKxjXl.js +263 -0
  358. package/dist/register.setup-CFYYd_Ev.js +115 -0
  359. package/dist/register.setup-P0UHDBMS.js +110 -0
  360. package/dist/register.status-health-sessions-D_3vm2yw.js +424 -0
  361. package/dist/register.status-health-sessions-z9x79dmg.js +665 -0
  362. package/dist/register.subclis-B-d970d6.js +267 -0
  363. package/dist/replies-BvarRpHb.js +136 -0
  364. package/dist/replies-CSzm5168.js +136 -0
  365. package/dist/reply-CTgksTO1.js +13695 -0
  366. package/dist/reply-CUyafs4J.js +13692 -0
  367. package/dist/reply-directives-Caq4zVTg.js +182 -0
  368. package/dist/reply-directives-D91fapDF.js +182 -0
  369. package/dist/reply-payloads-te0YnESs.js +527 -0
  370. package/dist/reply-prefix-Bv8Mv9q8.js +37 -0
  371. package/dist/reply-prefix-Rk_UEaJa.js +37 -0
  372. package/dist/resolve-route-BPa6q23t.js +249 -0
  373. package/dist/resolve-route-CN9BEALz.js +249 -0
  374. package/dist/response-prefix-template-D-ptXREi.js +134 -0
  375. package/dist/response-prefix-template-Dckjdftg.js +134 -0
  376. package/dist/retry-BcZuGfnV.js +77 -0
  377. package/dist/retry-BzWBtFpP.js +77 -0
  378. package/dist/run-main-BugUkGES.js +303 -0
  379. package/dist/runner-CVMXkHe9.js +2295 -0
  380. package/dist/runner-DOWTBU0-.js +2295 -0
  381. package/dist/runtime-guard-CXt4yzo-.js +60 -0
  382. package/dist/secure-random-CBwDBdj1.js +44 -0
  383. package/dist/security-cli-BQzdzJUp.js +479 -0
  384. package/dist/security-cli-D2d8RvsT.js +485 -0
  385. package/dist/send-B3G3I3II.js +349 -0
  386. package/dist/send-B6IB6ELR.js +547 -0
  387. package/dist/send-BT8XEvZB.js +332 -0
  388. package/dist/send-BTupAHVX.js +2245 -0
  389. package/dist/send-BZCfto_I.js +1174 -0
  390. package/dist/send-C5EDjThR.js +492 -0
  391. package/dist/send-CBM54hgN.js +349 -0
  392. package/dist/send-CPBd6ItT.js +29 -0
  393. package/dist/send-CzYm7ULP.js +2245 -0
  394. package/dist/send-D2m_x8xM.js +374 -0
  395. package/dist/send-DmEBPE2S.js +1779 -0
  396. package/dist/send-Dt4iCx61.js +426 -0
  397. package/dist/send-MWjpLHEV.js +11 -0
  398. package/dist/send-qpwqt34s.js +547 -0
  399. package/dist/send-rW25uKNz.js +1776 -0
  400. package/dist/send-uqa6CNuP.js +492 -0
  401. package/dist/server-BhmYVCED.js +201 -0
  402. package/dist/server-DaUw1o2B.js +206 -0
  403. package/dist/server-lifecycle-BeZsBQwF.js +2437 -0
  404. package/dist/server-lifecycle-C2F1_TE2.js +2437 -0
  405. package/dist/server-node-events-DoRFbKCT.js +390 -0
  406. package/dist/server-node-events-jbbbt-4R.js +395 -0
  407. package/dist/service-BDt-zUvV.js +670 -0
  408. package/dist/service-Os7W1F2S.js +670 -0
  409. package/dist/session-B9KGKVrY.js +170 -0
  410. package/dist/session-DzAupDyj.js +170 -0
  411. package/dist/session-cost-usage-BYCI739a.js +627 -0
  412. package/dist/session-cost-usage-DGsPcuMj.js +627 -0
  413. package/dist/session-dirs-BIg5RHAh.js +947 -0
  414. package/dist/session-dirs-DwDxjK1p.js +947 -0
  415. package/dist/session-utils-BgWDCbyx.js +622 -0
  416. package/dist/session-utils-CxxOeC1M.js +622 -0
  417. package/dist/sessions-Bwu0l_CG.js +2569 -0
  418. package/dist/sessions-CiuFFCnt.js +247 -0
  419. package/dist/shell-env-CsV_IkJj.js +163 -0
  420. package/dist/shell-env-hZW9j-Uc.js +163 -0
  421. package/dist/ssrf-B-rF_tZB.js +183 -0
  422. package/dist/ssrf-D6fl_7ww.js +183 -0
  423. package/dist/status-BOFm7iyj.js +2065 -0
  424. package/dist/status-RI2y_M21.js +2061 -0
  425. package/dist/status.update-DbO7izip.js +79 -0
  426. package/dist/status.update-wXyvcztI.js +79 -0
  427. package/dist/store-BLGrRL_E.js +64 -0
  428. package/dist/store-BYhcsOLr.js +64 -0
  429. package/dist/store-Dv76bGHg.js +2571 -0
  430. package/dist/store-Dw93tSB-.js +53 -0
  431. package/dist/subagent-registry-DWL-tayF.js +4856 -0
  432. package/dist/subagent-registry-HjR1tO3-.js +4854 -0
  433. package/dist/subsystem-BCkt9Ocb.js +1079 -0
  434. package/dist/subsystem-BgxIzx7w.js +1137 -0
  435. package/dist/system-cli-DtrDDmCt.js +71 -0
  436. package/dist/system-cli-xDr_Yyaa.js +76 -0
  437. package/dist/systemd-BlbIQ1PV.js +547 -0
  438. package/dist/systemd-DzXePo7r.js +547 -0
  439. package/dist/systemd-linger-mLbBF4pa.js +75 -0
  440. package/dist/systemd-linger-qlGGW2JB.js +75 -0
  441. package/dist/table-V_9n7CjP.js +279 -0
  442. package/dist/tables-Cy3gObW7.js +55 -0
  443. package/dist/tables-DAuk-Y6F.js +55 -0
  444. package/dist/tables-DRh09aPZ.js +55 -0
  445. package/dist/tailnet-BoTa0e2q.js +40 -0
  446. package/dist/tailnet-Cy0Q27lj.js +40 -0
  447. package/dist/tailscale-CiWkh0vS.js +230 -0
  448. package/dist/tailscale-Driw3j8E.js +230 -0
  449. package/dist/targets-3hewwPvM.js +120 -0
  450. package/dist/targets-Bkw_co-B.js +220 -0
  451. package/dist/targets-C1Tt0ZWd.js +2406 -0
  452. package/dist/targets-CsrqF2M4.js +650 -0
  453. package/dist/targets-DKriCISG.js +53 -0
  454. package/dist/targets-DTM2OPnS.js +650 -0
  455. package/dist/targets-DhhaK2xG.js +53 -0
  456. package/dist/targets-tDrl_ioQ.js +46 -0
  457. package/dist/targets-yq1kGK1_.js +2407 -0
  458. package/dist/thinking-XA5P_zFw.js +88 -0
  459. package/dist/thinking-l-rrvZwu.js +88 -0
  460. package/dist/tokens-7ZtWRjA3.js +21 -0
  461. package/dist/tool-display-AxpSXZVq.js +785 -0
  462. package/dist/tool-display-D6GD-41Y.js +785 -0
  463. package/dist/tool-images-D16vIWPg.js +263 -0
  464. package/dist/tool-images-IVIZ29ID.js +263 -0
  465. package/dist/trash--8b4GDyV.js +125 -0
  466. package/dist/trash-ivbG2QWV.js +125 -0
  467. package/dist/tui-Cbe1EW-B.js +3319 -0
  468. package/dist/tui-Dj3XrTCV.js +3319 -0
  469. package/dist/tui-cli-EGqEcdfE.js +64 -0
  470. package/dist/tui-cli-KKmqnNs2.js +59 -0
  471. package/dist/update-DruVguh4.js +349 -0
  472. package/dist/update-cli-C5tdQeGG.js +1371 -0
  473. package/dist/update-cli-Canq11sh.js +1374 -0
  474. package/dist/update-y8nz-3OC.js +349 -0
  475. package/dist/usage-CAuX4vsd.js +5384 -0
  476. package/dist/utils-C5daYcFn.js +631 -0
  477. package/dist/web-B9gR_cGR.js +3071 -0
  478. package/dist/web-DZ8ahrhK.js +77 -0
  479. package/dist/web-DkYPsnyd.js +71 -0
  480. package/dist/webhooks-cli-DFqGwW1f.js +329 -0
  481. package/dist/webhooks-cli-y-E-q0Xo.js +334 -0
  482. package/dist/whatsapp-actions-BXIe-Uei.js +123 -0
  483. package/dist/whatsapp-actions-BictxOCB.js +129 -0
  484. package/dist/widearea-dns-fHQt5-Q3.js +127 -0
  485. package/dist/workspace-DvbSDgO_.js +449 -0
  486. package/dist/workspace-zLfKNRwR.js +447 -0
  487. package/dist/zod-schema-B9RGngMW.js +2696 -0
  488. package/dist/zod-schema-D3hQ5SKe.js +2696 -0
  489. package/extensions/matrix/src/matrix/monitor/replies.ts +0 -24
  490. package/extensions/mattermost/src/mattermost/monitor-helpers.ts +0 -1
  491. package/package.json +3 -3
  492. package/dist/accounts-BFy_Z3od.js +0 -272
  493. package/dist/accounts-BTXSfPWi.js +0 -270
  494. package/dist/accounts-BxGS70Do.js +0 -36
  495. package/dist/accounts-CNY1TGj1.js +0 -47
  496. package/dist/accounts-DBohBlww.js +0 -32
  497. package/dist/accounts-DqRQ75w3.js +0 -36
  498. package/dist/accounts-iODF3SK2.js +0 -47
  499. package/dist/ack-reactions-B11TAC2D.js +0 -446
  500. package/dist/ack-reactions-BWVjL4H6.js +0 -446
  501. package/dist/acp-cli-CA1xMmVo.js +0 -1320
  502. package/dist/acp-cli-CGo6fJVZ.js +0 -1326
  503. package/dist/active-listener-VzhWW8W6.js +0 -37
  504. package/dist/active-listener-z0qVEcom.js +0 -37
  505. package/dist/agent-CTizRPIJ.js +0 -732
  506. package/dist/agent-D2RVoS5g.js +0 -731
  507. package/dist/agent-helpers-B6VfZ9_u.js +0 -606
  508. package/dist/agent-helpers-CTx5KKJu.js +0 -606
  509. package/dist/agent-scope-BGYzhtWQ.js +0 -121
  510. package/dist/agent-scope-C50VuLKh.js +0 -119
  511. package/dist/agents-BuYn-obw.js +0 -788
  512. package/dist/agents.config-BSTxuTVd.js +0 -116
  513. package/dist/agents.config-p3V3b9u6.js +0 -116
  514. package/dist/audio-DPOuhNq7.js +0 -43
  515. package/dist/audio-VBcVDa08.js +0 -43
  516. package/dist/audio-preflight-BwmCYeuM.js +0 -64
  517. package/dist/audio-preflight-co8gjlPX.js +0 -69
  518. package/dist/audit-oH4urD3G.js +0 -3138
  519. package/dist/audit-qgtCT3ik.js +0 -3138
  520. package/dist/auth-CAczFgAO.js +0 -448
  521. package/dist/auth-Deh9i9Eg.js +0 -448
  522. package/dist/auth-profiles-BquJGKLC.js +0 -279
  523. package/dist/auth-profiles-D8vKiBPq.js +0 -281
  524. package/dist/banner-Cf978khN.js +0 -294
  525. package/dist/binaries-DXW6oATV.js +0 -13
  526. package/dist/bindings-CRU_udk8.js +0 -69
  527. package/dist/bindings-DQZAu8Wv.js +0 -69
  528. package/dist/bonjour-discovery-DdAk1VyO.js +0 -378
  529. package/dist/bonjour-discovery-DuhiIZZx.js +0 -378
  530. package/dist/browser-cli-CZC4h5V4.js +0 -1687
  531. package/dist/browser-cli-DAgi_aQk.js +0 -1692
  532. package/dist/call-BbwtB9Y-.js +0 -2828
  533. package/dist/call-PivL7Uex.js +0 -2829
  534. package/dist/catalog-BqO6yem_.js +0 -185
  535. package/dist/catalog-DFmaYwfk.js +0 -185
  536. package/dist/channel-account-context-CvIDAtHS.js +0 -550
  537. package/dist/channel-account-context-q-o0pG1A.js +0 -550
  538. package/dist/channel-activity-BaCNOZpP.js +0 -94
  539. package/dist/channel-activity-C-G4n9BK.js +0 -292
  540. package/dist/channel-activity-DTKGf3j5.js +0 -94
  541. package/dist/channel-options-Cyappik_.js +0 -32
  542. package/dist/channel-options-DFnypY5S.js +0 -33
  543. package/dist/channel-selection-BGl53D5K.js +0 -51
  544. package/dist/channel-selection-NNPbxnyZ.js +0 -51
  545. package/dist/channel-web-DmhVkWbP.js +0 -2134
  546. package/dist/channel-web-kRC3UYBJ.js +0 -2136
  547. package/dist/channels-cli-C5XRkPJl.js +0 -1421
  548. package/dist/channels-cli-D6TqCI0m.js +0 -1426
  549. package/dist/channels-status-issues-CUc9mpeW.js +0 -18
  550. package/dist/channels-status-issues-DwRDzwrV.js +0 -18
  551. package/dist/chat-envelope-DEZ-5RY8.js +0 -248
  552. package/dist/chat-envelope-el7Uo-Fe.js +0 -248
  553. package/dist/chrome-0QaGKb3L.js +0 -1732
  554. package/dist/chrome-CFeWdP0Y.js +0 -1733
  555. package/dist/chunk-CSQfUhgF.js +0 -341
  556. package/dist/chunk-D0Y_w4oX.js +0 -341
  557. package/dist/clack-prompter-B7tOxhJd.js +0 -122
  558. package/dist/clack-prompter-CCFnKP_1.js +0 -121
  559. package/dist/cleanup-utils-CqAVZz2b.js +0 -94
  560. package/dist/cli-BR2J3c4l.js +0 -125
  561. package/dist/cli-C1q1vSmN.js +0 -130
  562. package/dist/clipboard-D7_SKHPK.js +0 -31
  563. package/dist/clipboard-Dzkx6Q2K.js +0 -31
  564. package/dist/command-format-CVfo8I5f.js +0 -18
  565. package/dist/command-format-DgXcqxBt.js +0 -32
  566. package/dist/command-registry-CYjvOp8W.js +0 -215
  567. package/dist/commands-CDonBOrw.js +0 -41
  568. package/dist/commands-D_-bgTlO.js +0 -41
  569. package/dist/commands-registry-CWJv6xe2.js +0 -892
  570. package/dist/commands-registry-Ci8_cFk9.js +0 -893
  571. package/dist/common-CMI-qsF8.js +0 -156
  572. package/dist/common-DSVmydhm.js +0 -156
  573. package/dist/completion-cli-8iZJqfmX.js +0 -452
  574. package/dist/completion-cli-CYDjEZSt.js +0 -452
  575. package/dist/config-D5XU45KD.js +0 -6953
  576. package/dist/config-FHu9Bn4R.js +0 -6951
  577. package/dist/config-cli-Gehy4sav.js +0 -241
  578. package/dist/config-cli-RC9qMgJq.js +0 -246
  579. package/dist/config-guard-J-Q_DFWk.js +0 -97
  580. package/dist/config-guard-cB5a_ANg.js +0 -75
  581. package/dist/config-validation-BPNyd9_3.js +0 -18
  582. package/dist/config-validation-BPWuvhVe.js +0 -18
  583. package/dist/configure-CC2XdRRm.js +0 -891
  584. package/dist/configure-DxFBJuhZ.js +0 -889
  585. package/dist/constants-BmRFoHl0.js +0 -67
  586. package/dist/constants-C9WPAluB.js +0 -67
  587. package/dist/control-auth-D0tpV3ts.js +0 -397
  588. package/dist/control-auth-_-0PGRUs.js +0 -397
  589. package/dist/control-ui/assets/index-B4ZM1lW1.js +0 -7738
  590. package/dist/control-ui/assets/index-B4ZM1lW1.js.map +0 -1
  591. package/dist/control-ui/assets/index-PED72sKF.css +0 -1
  592. package/dist/control-ui-assets-Cx_mw4D0.js +0 -186
  593. package/dist/control-ui-assets-W1AUuGrO.js +0 -186
  594. package/dist/conversation-label-C4SDz4sT.js +0 -36
  595. package/dist/conversation-label-D1frnvYe.js +0 -36
  596. package/dist/cron-cli-BzERxhr5.js +0 -495
  597. package/dist/cron-cli-C8j_uslU.js +0 -490
  598. package/dist/daemon-cli-C95XNbX0.js +0 -1199
  599. package/dist/daemon-cli-e6sURMqd.js +0 -1197
  600. package/dist/daemon-install-CcohRvKV.js +0 -55
  601. package/dist/daemon-install-DDshfT0J.js +0 -60
  602. package/dist/daemon-install-helpers-CFGAfRlj.js +0 -462
  603. package/dist/daemon-install-helpers-DIUzSFG1.js +0 -462
  604. package/dist/defaults-B5KStIBg.js +0 -7
  605. package/dist/defaults-xUAL2Z-F.js +0 -7
  606. package/dist/deliver-912khjLK.js +0 -481
  607. package/dist/deliver-D56J4-1F.js +0 -481
  608. package/dist/delivery-queue-Cfa9Wmxp.js +0 -244
  609. package/dist/delivery-queue-CxVRi4tw.js +0 -244
  610. package/dist/devices-cli-0qDhTgZR.js +0 -316
  611. package/dist/devices-cli-6SKMR2bV.js +0 -321
  612. package/dist/diagnostics-99iCgBUh.js +0 -46
  613. package/dist/diagnostics-VC0cz7kX.js +0 -46
  614. package/dist/directory-cli-5YXdoVdn.js +0 -217
  615. package/dist/directory-cli-D3IKCHmn.js +0 -222
  616. package/dist/dm-policy-shared-4rkjhcrM.js +0 -22
  617. package/dist/dm-policy-shared-D8lgnmrC.js +0 -22
  618. package/dist/dns-cli-11CtErVU.js +0 -197
  619. package/dist/dns-cli-SiEd_1Lq.js +0 -202
  620. package/dist/dock-BqNINg7k.js +0 -928
  621. package/dist/dock-CQuu41bw.js +0 -929
  622. package/dist/doctor-completion-BR1SlAT3.js +0 -92
  623. package/dist/doctor-completion-CZwpEhIK.js +0 -92
  624. package/dist/doctor-config-flow-BVkHcvoj.js +0 -1933
  625. package/dist/doctor-config-flow-DVYRn0An.js +0 -1934
  626. package/dist/enable-DcJnkzfz.js +0 -59
  627. package/dist/enable-ibNq4UWy.js +0 -59
  628. package/dist/env-DeF64iu0.js +0 -60
  629. package/dist/env-vars-7aZqKPhk.js +0 -93
  630. package/dist/errors-8F-77i6m.js +0 -35
  631. package/dist/errors-DZ199hOo.js +0 -35
  632. package/dist/exec-DbKuYyM1.js +0 -164
  633. package/dist/exec-DkFE7lqU.js +0 -164
  634. package/dist/fetch-BFSBLBkA.js +0 -67
  635. package/dist/fetch-C6XKGA11.js +0 -67
  636. package/dist/fetch-CEDsOiql.js +0 -67
  637. package/dist/file-lock-CIvloidc.js +0 -107
  638. package/dist/file-lock-CzBL_VIx.js +0 -107
  639. package/dist/fs-safe-DSwT85uK.js +0 -88
  640. package/dist/fs-safe-DkBhNAc3.js +0 -98
  641. package/dist/gateway-cli-BEEZhCHv.js +0 -23747
  642. package/dist/gateway-cli-Nob0g_4y.js +0 -23742
  643. package/dist/gateway-rpc-CksB-N83.js +0 -28
  644. package/dist/gateway-rpc-Dq44SkOv.js +0 -28
  645. package/dist/gmail-setup-utils-Cnx8A5pW.js +0 -422
  646. package/dist/gmail-setup-utils-nkabbKOE.js +0 -423
  647. package/dist/health-RT-F3hzT.js +0 -1423
  648. package/dist/health-SOuaKNRa.js +0 -1420
  649. package/dist/health-format-BG95OE6N.js +0 -28
  650. package/dist/heartbeat-visibility-BxkZjE5m.js +0 -125
  651. package/dist/heartbeat-visibility-CGG-G7px.js +0 -125
  652. package/dist/help-format-DAxf0l_h.js +0 -17
  653. package/dist/helpers-kkeXif0Q.js +0 -10
  654. package/dist/hook-runner-global-DJ14gXFP.js +0 -527
  655. package/dist/hooks-cli-DyEKryW8.js +0 -1217
  656. package/dist/hooks-cli-RuEn0-oy.js +0 -1222
  657. package/dist/image-ops-Bi6JPSkD.js +0 -354
  658. package/dist/image-ops-DWytvdh_.js +0 -354
  659. package/dist/import-D8BBZQgl.js +0 -170
  660. package/dist/import-DQ6NI4Fz.js +0 -168
  661. package/dist/inbound-context-CPkkQW0i.js +0 -68
  662. package/dist/inbound-context-DS_kpIYI.js +0 -68
  663. package/dist/inbound-path-policy-Bg4gZBx-.js +0 -250
  664. package/dist/inbound-path-policy-sdr5Ji0k.js +0 -250
  665. package/dist/inspect-Dt8hogS3.js +0 -559
  666. package/dist/inspect-vYIL1oA0.js +0 -559
  667. package/dist/installs-aM5dWAyn.js +0 -325
  668. package/dist/installs-pWdqG8HL.js +0 -325
  669. package/dist/ipv4--2WXMVtE.js +0 -46
  670. package/dist/ipv4-CDQpx1A7.js +0 -46
  671. package/dist/ir-BpaAMTfW.js +0 -940
  672. package/dist/json-files-DzpTak5i.js +0 -46
  673. package/dist/links-C3soDNDH.js +0 -15
  674. package/dist/loader-Ccwsh8Sh.js +0 -22624
  675. package/dist/loader-y9MhJewT.js +0 -22621
  676. package/dist/local-roots-BrH0Q63K.js +0 -313
  677. package/dist/local-roots-nImrw2WR.js +0 -314
  678. package/dist/logger-Bw3cFE5t.js +0 -49
  679. package/dist/logging-C-nxX2fn.js +0 -20
  680. package/dist/login-C_Kt57nO.js +0 -62
  681. package/dist/login-DOmWDMeP.js +0 -61
  682. package/dist/login-qr-CXU0wC5K.js +0 -322
  683. package/dist/login-qr-D0u6fdeO.js +0 -327
  684. package/dist/logs-cli-CschwP4d.js +0 -238
  685. package/dist/logs-cli-D7ayUvz_.js +0 -233
  686. package/dist/markdown-tables-CrmghPAr.js +0 -29
  687. package/dist/markdown-tables-jrnSPvZ6.js +0 -29
  688. package/dist/media-CojxZ45J.js +0 -10492
  689. package/dist/media-DN7yRfrH.js +0 -940
  690. package/dist/message-action-names-CtEZcmlU.js +0 -2521
  691. package/dist/message-action-names-WglOO_DT.js +0 -2521
  692. package/dist/message-channel-DzJqHVZD.js +0 -91
  693. package/dist/net-Cg8AQeke.js +0 -225
  694. package/dist/net-D6D0wgcF.js +0 -225
  695. package/dist/node-cli-Q2-n3Fgv.js +0 -24
  696. package/dist/nodes-cli-C2SoKfCv.js +0 -1343
  697. package/dist/nodes-cli-CQmlfx0K.js +0 -1348
  698. package/dist/nodes-screen-BR9sYoPa.js +0 -250
  699. package/dist/nodes-screen-Cw7Hv7M2.js +0 -250
  700. package/dist/note-Dlv4NmlQ.js +0 -92
  701. package/dist/note-kvWV4xtw.js +0 -92
  702. package/dist/npm-registry-spec-0qiKawvv.js +0 -786
  703. package/dist/npm-registry-spec-COvUzy5J.js +0 -786
  704. package/dist/npm-resolution-6v_Zm-9G.js +0 -86
  705. package/dist/npm-resolution-BFz7LeoN.js +0 -86
  706. package/dist/onboard-CgyU-mDL.js +0 -407
  707. package/dist/onboard-RI4vNTZd.js +0 -405
  708. package/dist/onboard-channels-DN5JoKPd.js +0 -2548
  709. package/dist/onboard-channels-DyAd1OZr.js +0 -2547
  710. package/dist/onboard-config-BCTthQ7J.js +0 -24
  711. package/dist/onboard-config-y-2cgT0V.js +0 -24
  712. package/dist/onboard-helpers-BCzZUD0z.js +0 -363
  713. package/dist/onboard-helpers-sDc2Ky6H.js +0 -362
  714. package/dist/onboard-remote-CJrMtttl.js +0 -127
  715. package/dist/onboard-remote-hyQIBguz.js +0 -127
  716. package/dist/onboarding-DCu1iBTV.js +0 -541
  717. package/dist/onboarding-zKMitzpb.js +0 -543
  718. package/dist/onboarding.finalize-ClHhYE2E.js +0 -401
  719. package/dist/onboarding.finalize-D5JkVJgg.js +0 -398
  720. package/dist/onboarding.gateway-config-DFh71Ndn.js +0 -198
  721. package/dist/onboarding.gateway-config-VBk6AP9U.js +0 -191
  722. package/dist/outbound-BYlZshIw.js +0 -221
  723. package/dist/outbound-CFfJC1j5.js +0 -220
  724. package/dist/outbound-attachment-BCNs1u1F.js +0 -18
  725. package/dist/outbound-attachment-B_0D60Yr.js +0 -18
  726. package/dist/outbound-attachment-o0seS0CP.js +0 -18
  727. package/dist/pairing-cli-BeydfoF9.js +0 -122
  728. package/dist/pairing-cli-DWzX866x.js +0 -127
  729. package/dist/pairing-labels-B-N8S5Fc.js +0 -9
  730. package/dist/pairing-labels-B_53dY5L.js +0 -9
  731. package/dist/pairing-store-BxdqFZGK.js +0 -460
  732. package/dist/pairing-store-CTkD51uW.js +0 -459
  733. package/dist/path-env-DR5vn3QL.js +0 -89
  734. package/dist/path-env-qRJbjJzj.js +0 -89
  735. package/dist/path-safety-DkT9RmTG.js +0 -14
  736. package/dist/path-safety-juI2XbO1.js +0 -14
  737. package/dist/plugin-auto-enable-D23gv7Aw.js +0 -302
  738. package/dist/plugin-auto-enable-DuPS9XiJ.js +0 -301
  739. package/dist/plugin-registry-CNu_1KZz.js +0 -33
  740. package/dist/plugin-registry-DeHwd2jk.js +0 -33
  741. package/dist/plugin-sdk/agents/agent-helpers/thinking.d.ts +0 -5
  742. package/dist/plugin-sdk/agents/auth-profiles/constants.d.ts +0 -16
  743. package/dist/plugin-sdk/agents/auth-profiles/display.d.ts +0 -7
  744. package/dist/plugin-sdk/agents/auth-profiles/doctor.d.ts +0 -8
  745. package/dist/plugin-sdk/agents/auth-profiles/oauth.d.ts +0 -14
  746. package/dist/plugin-sdk/agents/auth-profiles/session-override.d.ts +0 -18
  747. package/dist/plugin-sdk/agents/auth-profiles.d.ts +0 -8
  748. package/dist/plugin-sdk/agents/defaults.d.ts +0 -3
  749. package/dist/plugin-sdk/agents/provider-auth.d.ts +0 -40
  750. package/dist/plugin-sdk/auto-reply/model-runtime.d.ts +0 -17
  751. package/dist/plugin-sdk/config/model-input.d.ts +0 -9
  752. package/dist/plugin-sdk/config/zod-schema.agent-model.d.ts +0 -5
  753. package/dist/plugin-sdk/sessions/model-overrides.d.ts +0 -14
  754. package/dist/plugin-sdk/telegram/reasoning-lane-coordinator.d.ts +0 -18
  755. package/dist/plugins-BflZz0sp.js +0 -453
  756. package/dist/plugins-cli-DV82scUw.js +0 -798
  757. package/dist/plugins-cli-Qj1UyIZO.js +0 -793
  758. package/dist/plugins-woGRXMzU.js +0 -455
  759. package/dist/ports-DrruB2fK.js +0 -370
  760. package/dist/ports-GT1yV-Tg.js +0 -96
  761. package/dist/ports-NPqtlfp0.js +0 -316
  762. package/dist/ports-QMI4-F9m.js +0 -96
  763. package/dist/program-CQmIaRUI.js +0 -244
  764. package/dist/program-context-DEU6ACnL.js +0 -474
  765. package/dist/progress-CBkSaM6z.js +0 -124
  766. package/dist/prompt-Bllj1dhc.js +0 -21
  767. package/dist/prompt-select-styled-BhTN6zE2.js +0 -1650
  768. package/dist/prompt-select-styled-WopXnjIy.js +0 -1647
  769. package/dist/prompt-style-DVEm3BZW.js +0 -9
  770. package/dist/provider-dispatcher-B4QMe-I6.js +0 -659
  771. package/dist/provider-dispatcher-Bfauw6zz.js +0 -660
  772. package/dist/push-apns-C0LyG-WB.js +0 -713
  773. package/dist/push-apns-DuG95AKC.js +0 -711
  774. package/dist/pw-ai-D9n6-Wa6.js +0 -1906
  775. package/dist/pw-ai-T280E6Mn.js +0 -1910
  776. package/dist/qr-cli-DVECWTHN.js +0 -352
  777. package/dist/qr-cli-hSLixZCe.js +0 -347
  778. package/dist/redact-eZq1uwNK.js +0 -191
  779. package/dist/redact-snapshot-BZYLIqe-.js +0 -2028
  780. package/dist/redact-snapshot-C6hVx_9I.js +0 -2028
  781. package/dist/register.agent-Dmj-sgEl.js +0 -1043
  782. package/dist/register.agent-IspcBFeD.js +0 -286
  783. package/dist/register.configure-BqJEqyGL.js +0 -130
  784. package/dist/register.configure-PPkU_4Ea.js +0 -124
  785. package/dist/register.import-Bs-UkOs-.js +0 -27
  786. package/dist/register.import-DLng8g-e.js +0 -30
  787. package/dist/register.maintenance-BbpkJil3.js +0 -497
  788. package/dist/register.maintenance-C5nkOQxa.js +0 -494
  789. package/dist/register.message-C83Hi1b3.js +0 -681
  790. package/dist/register.message-D16isu4u.js +0 -686
  791. package/dist/register.onboard-B8EzX3wY.js +0 -257
  792. package/dist/register.onboard-CyRbr_0V.js +0 -262
  793. package/dist/register.setup-DWyoowAz.js +0 -109
  794. package/dist/register.setup-Dz6GwMnu.js +0 -114
  795. package/dist/register.status-health-sessions-CbQOfycz.js +0 -423
  796. package/dist/register.status-health-sessions-DXIWG47y.js +0 -669
  797. package/dist/register.subclis-DeGP5UPU.js +0 -267
  798. package/dist/replies-BKrzM0QI.js +0 -136
  799. package/dist/replies-Cl2gYBVt.js +0 -136
  800. package/dist/reply-CCu_DY64.js +0 -13900
  801. package/dist/reply-DSKC8kyS.js +0 -13897
  802. package/dist/reply-directives-BHJKp1Du.js +0 -182
  803. package/dist/reply-directives-CD2WycBM.js +0 -182
  804. package/dist/reply-payloads-D_BM1Anb.js +0 -527
  805. package/dist/reply-prefix-DBLCYiup.js +0 -38
  806. package/dist/reply-prefix-Q4DOJSn_.js +0 -38
  807. package/dist/resolve-route-CBVbY0xS.js +0 -249
  808. package/dist/resolve-route-DGEgTEif.js +0 -249
  809. package/dist/response-prefix-template-rVZQOViK.js +0 -136
  810. package/dist/response-prefix-template-up4REfuR.js +0 -136
  811. package/dist/retry-BhuXOEVR.js +0 -77
  812. package/dist/retry-DUjAzOBy.js +0 -77
  813. package/dist/run-main-Um5xhxla.js +0 -320
  814. package/dist/runner-yVJ4HB2K.js +0 -2294
  815. package/dist/runner-z92MWZ3m.js +0 -2294
  816. package/dist/runtime-guard-DZ_xuCc4.js +0 -60
  817. package/dist/secure-random-Pl9rPl0l.js +0 -44
  818. package/dist/security-cli-CdwbWZUj.js +0 -484
  819. package/dist/security-cli-DP5QJpa5.js +0 -478
  820. package/dist/send-B1_Ymjb9.js +0 -1778
  821. package/dist/send-B84axiIa.js +0 -29
  822. package/dist/send-BN_zYVlx.js +0 -547
  823. package/dist/send-BqVOxAmK.js +0 -1174
  824. package/dist/send-Bx9bUGav.js +0 -492
  825. package/dist/send-C3pdJ6p-.js +0 -2245
  826. package/dist/send-CBGSXjfD.js +0 -2245
  827. package/dist/send-CGXyTF22.js +0 -426
  828. package/dist/send-CKavrhXj.js +0 -11
  829. package/dist/send-D08Je6DL.js +0 -374
  830. package/dist/send-D1aYEG-k.js +0 -332
  831. package/dist/send-DHldI3gf.js +0 -492
  832. package/dist/send-D_DUQJ6H.js +0 -349
  833. package/dist/send-Ds63eF4a.js +0 -349
  834. package/dist/send-YRVDWfSs.js +0 -547
  835. package/dist/send-xnwty9cY.js +0 -1775
  836. package/dist/server-BQFoyCRR.js +0 -200
  837. package/dist/server-DhXw25Jq.js +0 -205
  838. package/dist/server-lifecycle-BjCCyD3w.js +0 -2437
  839. package/dist/server-lifecycle-Coyr6Lda.js +0 -2437
  840. package/dist/server-node-events-De4WZQQD.js +0 -393
  841. package/dist/server-node-events-dXXayuqY.js +0 -398
  842. package/dist/service-Bjqii5nW.js +0 -670
  843. package/dist/service-fp29z5Ww.js +0 -670
  844. package/dist/session-DBL5nHDy.js +0 -170
  845. package/dist/session-cost-usage-DX09eTPU.js +0 -627
  846. package/dist/session-cost-usage-yYi525j3.js +0 -627
  847. package/dist/session-dirs-Cj5xi7zX.js +0 -947
  848. package/dist/session-dirs-DdF6TDsE.js +0 -947
  849. package/dist/session-utils-CEtEq6bi.js +0 -625
  850. package/dist/session-utils-WmlWAs1r.js +0 -625
  851. package/dist/session-xKIW6gL2.js +0 -170
  852. package/dist/sessions--PykPynp.js +0 -2593
  853. package/dist/sessions-Bw4LRnSr.js +0 -252
  854. package/dist/ssrf-Ck9HDZpv.js +0 -183
  855. package/dist/ssrf-m7kFIobZ.js +0 -183
  856. package/dist/status-CtzYFLLF.js +0 -2072
  857. package/dist/status-DiN1cq2p.js +0 -2068
  858. package/dist/status.update-C55QM2xs.js +0 -79
  859. package/dist/status.update-CBmPXwYN.js +0 -79
  860. package/dist/store-C3tOpizT.js +0 -64
  861. package/dist/store-CPJXuhvQ.js +0 -53
  862. package/dist/store-SusmIfz7.js +0 -2595
  863. package/dist/store-v3P-OWhi.js +0 -64
  864. package/dist/subagent-registry-Db4Ho_2Y.js +0 -4858
  865. package/dist/subagent-registry-Du_j0Fnt.js +0 -4860
  866. package/dist/subsystem-BUXAJwPD.js +0 -1079
  867. package/dist/subsystem-COd61u0P.js +0 -1139
  868. package/dist/system-cli-DYCpLO3T.js +0 -75
  869. package/dist/system-cli-eAk5wVbP.js +0 -70
  870. package/dist/systemd-DSnlM3jX.js +0 -547
  871. package/dist/systemd-TfK8GuTx.js +0 -547
  872. package/dist/systemd-linger-Axnc1xCb.js +0 -75
  873. package/dist/systemd-linger-_0_-RY4v.js +0 -75
  874. package/dist/table-DPTzZyhu.js +0 -279
  875. package/dist/tables-DI5LGEr1.js +0 -55
  876. package/dist/tables-PxcSPSO0.js +0 -55
  877. package/dist/tables-TWiml6b1.js +0 -55
  878. package/dist/tailnet-CEudzG0i.js +0 -40
  879. package/dist/tailnet-PnMrjwGT.js +0 -40
  880. package/dist/tailscale-DTATQxAG.js +0 -230
  881. package/dist/tailscale-Dbyahx0J.js +0 -230
  882. package/dist/targets-C1NeMn2J.js +0 -220
  883. package/dist/targets-CcTME3bp.js +0 -46
  884. package/dist/targets-CmC5m7Ey.js +0 -53
  885. package/dist/targets-D-u6Kyio.js +0 -650
  886. package/dist/targets-D7OKVXMI.js +0 -650
  887. package/dist/targets-DB4vBpIQ.js +0 -2172
  888. package/dist/targets-DfqPGOmM.js +0 -2173
  889. package/dist/targets-DyybKefq.js +0 -53
  890. package/dist/targets-JCISV-hS.js +0 -120
  891. package/dist/tokens-DzFOtLlW.js +0 -21
  892. package/dist/tool-display-Br6mwaJc.js +0 -785
  893. package/dist/tool-display-sgNwLOBj.js +0 -785
  894. package/dist/tool-images-BNfIJ_Kj.js +0 -263
  895. package/dist/tool-images-kloBqxqK.js +0 -263
  896. package/dist/trash-DPi0aCCQ.js +0 -125
  897. package/dist/trash-D_Jd_yQZ.js +0 -125
  898. package/dist/tui-CHc0EfJO.js +0 -3392
  899. package/dist/tui-CyHwc2uX.js +0 -3392
  900. package/dist/tui-cli-BvwbrIYO.js +0 -63
  901. package/dist/tui-cli-C9I18SfW.js +0 -58
  902. package/dist/update-DxyjwCL2.js +0 -349
  903. package/dist/update-IX7vdqA8.js +0 -349
  904. package/dist/update-cli-CBeXUSzq.js +0 -1373
  905. package/dist/update-cli-DkAWmUrp.js +0 -1370
  906. package/dist/usage-CYlQW4M2.js +0 -5279
  907. package/dist/utils-LBKvDoPx.js +0 -631
  908. package/dist/web-BUYUdnRH.js +0 -3065
  909. package/dist/web-Dquzwqf4.js +0 -70
  910. package/dist/web-tS8diboh.js +0 -76
  911. package/dist/webhooks-cli-B7Vw3CMz.js +0 -333
  912. package/dist/webhooks-cli-BpZHQlVd.js +0 -328
  913. package/dist/whatsapp-actions-D5HXezjp.js +0 -128
  914. package/dist/whatsapp-actions-DaA291Ya.js +0 -122
  915. package/dist/widearea-dns-DSoaA-eH.js +0 -127
  916. package/dist/workspace-B4ZvVYT9.js +0 -447
  917. package/dist/workspace-B8PA8oxJ.js +0 -449
  918. /package/dist/{account-lookup-0KDSp5Mj.js → account-lookup-BOCzCnir.js} +0 -0
  919. /package/dist/{account-lookup-zvANGr2x.js → account-lookup-DGscKBsr.js} +0 -0
  920. /package/dist/{ansi-D04X81yq.js → ansi-aRwLYlzD.js} +0 -0
  921. /package/dist/{api-BeQMq2iS.js → api-BDff51CS.js} +0 -0
  922. /package/dist/{api-CxX8-gGz.js → api-qWSMsT8m.js} +0 -0
  923. /package/dist/{argv-Co-b9Zsc.js → argv-neJY_Hxm.js} +0 -0
  924. /package/dist/{brew-C4zKZsHX.js → brew-ByYl36Mt.js} +0 -0
  925. /package/dist/{brew-DbSbN8sD.js → brew-CMSQ5Fek.js} +0 -0
  926. /package/dist/{chat-type-CYPyHAj-.js → chat-type-BKe459rw.js} +0 -0
  927. /package/dist/{chat-type-DKb2TlGZ.js → chat-type-DyovJwCt.js} +0 -0
  928. /package/dist/{cleanup-utils-CwQvD73q.js → cleanup-utils-S_P5Jebv.js} +0 -0
  929. /package/dist/{cli-name-BicfmwQX.js → cli-name-CRLBidNP.js} +0 -0
  930. /package/dist/{cli-name-C6rJGl18.js → cli-name-Yv30OygA.js} +0 -0
  931. /package/dist/{cli-utils-BhXbz2UF.js → cli-utils-C5nQDfa6.js} +0 -0
  932. /package/dist/{cli-utils-DZe_rVkZ.js → cli-utils-KcEwAsuZ.js} +0 -0
  933. /package/dist/{client-C61M8zI3.js → client-C7B0uFB0.js} +0 -0
  934. /package/dist/{client-DdpmATKq.js → client-Cd2HNUX0.js} +0 -0
  935. /package/dist/{command-options-C4paWSGf.js → command-options-1bi44p_B.js} +0 -0
  936. /package/dist/{command-options-CA30lfLK.js → command-options-7y5Zrv4M.js} +0 -0
  937. /package/dist/{config-eval-CjGZtLwx.js → config-eval-CJtk3Msr.js} +0 -0
  938. /package/dist/{config-eval-H_wlEYIG.js → config-eval-DQIwdWg7.js} +0 -0
  939. /package/dist/{constants-ChptG3d7.js → constants--3PuQVaS.js} +0 -0
  940. /package/dist/{constants-DY6b-_Wl.js → constants-DNWjlxZ5.js} +0 -0
  941. /package/dist/{credentials-BHWUBHMd.js → credentials-BhnauW0K.js} +0 -0
  942. /package/dist/{credentials-DFsi1_e8.js → credentials-eZcqWNG_.js} +0 -0
  943. /package/dist/{daemon-runtime-CMnbwryP.js → daemon-runtime-99xh1fGv.js} +0 -0
  944. /package/dist/{daemon-runtime-CvqE4ysg.js → daemon-runtime-BOcdJaFy.js} +0 -0
  945. /package/dist/{dangerous-name-matching-BzmiLXmA.js → dangerous-name-matching-YeatnYIA.js} +0 -0
  946. /package/dist/{dangerous-name-matching-DaVRgwer.js → dangerous-name-matching-oVb1EqYT.js} +0 -0
  947. /package/dist/{dangerous-tools-BOLoCRv4.js → dangerous-tools-BMt8-6jE.js} +0 -0
  948. /package/dist/{dangerous-tools-Baq7Q-i6.js → dangerous-tools-CripTfYv.js} +0 -0
  949. /package/dist/{fetch-timeout-DTIN7CGM.js → fetch-timeout-Db3da8yR.js} +0 -0
  950. /package/dist/{fetch-timeout-DoySHqfO.js → fetch-timeout-l_6RdoMw.js} +0 -0
  951. /package/dist/{file-identity-BxlKD8Ys.js → file-identity-Bs9zZOi2.js} +0 -0
  952. /package/dist/{format-duration-CqUERz51.js → format-duration-Bo-Mxi3E.js} +0 -0
  953. /package/dist/{format-duration-Ct-yiwkS.js → format-duration-CfrJ5T8k.js} +0 -0
  954. /package/dist/{format-relative-79_Y1n2Y.js → format-relative-8cNYQsqb.js} +0 -0
  955. /package/dist/{format-relative-CxLpEQOX.js → format-relative-CZOlQ2pA.js} +0 -0
  956. /package/dist/{health-format-B_QRD8Si.js → health-format-WMRp1BbP.js} +0 -0
  957. /package/dist/{heartbeat-wake-LGEgcXjs.js → heartbeat-wake-BtRrOB-t.js} +0 -0
  958. /package/dist/{heartbeat-wake-Y97geucO.js → heartbeat-wake-eRINROYK.js} +0 -0
  959. /package/dist/{help-format-NNm_Ov4H.js → help-format-BEb0SPHF.js} +0 -0
  960. /package/dist/{helpers-BAsMXprO.js → helpers-BJtPtu_2.js} +0 -0
  961. /package/dist/{helpers-DLgbkcEn.js → helpers-Cj6f8SPZ.js} +0 -0
  962. /package/dist/{helpers-R7bU5IBz.js → helpers-ryxLx-aM.js} +0 -0
  963. /package/dist/{host-env-security-szwfmhC4.js → host-env-security-CbiODGvQ.js} +0 -0
  964. /package/dist/{input-provenance-Bn6thJNm.js → input-provenance-CPhdY-0F.js} +0 -0
  965. /package/dist/{input-provenance-xUsSMOsz.js → input-provenance-DUNEQoFM.js} +0 -0
  966. /package/dist/{ip-C9q3Oq20.js → ip-BAhS4rY2.js} +0 -0
  967. /package/dist/{ip-D0zgNmBV.js → ip-BcdPcLiP.js} +0 -0
  968. /package/dist/{is-main-DN8-sNR5.js → is-main-KcWqINzy.js} +0 -0
  969. /package/dist/{json-file-ChO_R9yh.js → json-file-BVvmrQG3.js} +0 -0
  970. /package/dist/{json-file-B7l5-Xhr.js → json-file-Dbg7nZg1.js} +0 -0
  971. /package/dist/{json-files-CmpYSF4G.js → json-files-DSKEdz7x.js} +0 -0
  972. /package/dist/{lanes-ByWMUgrz.js → lanes-Brd-nf-Z.js} +0 -0
  973. /package/dist/{lanes-cHJ5arWg.js → lanes-COs3zODW.js} +0 -0
  974. /package/dist/{links-Bz4V7R_p.js → links-gse8sWn-.js} +0 -0
  975. /package/dist/{location-DBWCGNLq.js → location-D1FM_C63.js} +0 -0
  976. /package/dist/{location-GbZ0bBRU.js → location-LuzkqHGi.js} +0 -0
  977. /package/dist/{logger-DyL5G2DO.js → logger-BMP_j_Lx.js} +0 -0
  978. /package/dist/{logger-BWMPnILd.js → logger-DWbwXLjl.js} +0 -0
  979. /package/dist/{logger-GvipVDfh.js → logger-DXCDb7qu.js} +0 -0
  980. /package/dist/{logging-D8-Kozjc.js → logging-CAgCb3n3.js} +0 -0
  981. /package/dist/{message-channel-uWMAiywE.js → message-channel-D72Bc6Tb.js} +0 -0
  982. /package/dist/{mime-BS3jhcZE.js → mime-Cqg1jjia.js} +0 -0
  983. /package/dist/{mime-Cxh_64P6.js → mime-D4bQLMJL.js} +0 -0
  984. /package/dist/{mutable-allowlist-detectors-DiZDtmlZ.js → mutable-allowlist-detectors-NtI6s4TE.js} +0 -0
  985. /package/dist/{mutable-allowlist-detectors-U5ThQr9V.js → mutable-allowlist-detectors-nAmo9v5u.js} +0 -0
  986. /package/dist/{node-cli-Uf6lAntf.js → node-cli-bNJbha3z.js} +0 -0
  987. /package/dist/{parse-log-line-enq8pduH.js → parse-log-line-BY9Vz72K.js} +0 -0
  988. /package/dist/{parse-log-line-mz9TG6ig.js → parse-log-line-BrrE4onI.js} +0 -0
  989. /package/dist/{parse-timeout-BMP8a0_a.js → parse-timeout-Dfyln-4M.js} +0 -0
  990. /package/dist/{path-guards-CIx4hURU.js → path-guards-D9LU0y9L.js} +0 -0
  991. /package/dist/{path-guards-CrQOUlsq.js → path-guards-crZaTVvq.js} +0 -0
  992. /package/dist/plugin-sdk/{agents → auth}/api-key-rotation.d.ts +0 -0
  993. /package/dist/plugin-sdk/{agents/auth-profiles → auth}/paths.d.ts +0 -0
  994. /package/dist/plugin-sdk/{agents/auth-profiles → auth}/profiles.d.ts +0 -0
  995. /package/dist/plugin-sdk/{agents/auth-profiles → auth}/store.d.ts +0 -0
  996. /package/dist/plugin-sdk/{agents/auth-profiles → auth}/types.d.ts +0 -0
  997. /package/dist/{plugins-allowlist-BbTQ5Z2k.js → plugins-allowlist-CD4oIJNk.js} +0 -0
  998. /package/dist/{plugins-allowlist-C20oaESO.js → plugins-allowlist-CUhk3GDh.js} +0 -0
  999. /package/dist/{polls-B0CCBDeR.js → polls-ChvH1OIW.js} +0 -0
  1000. /package/dist/{polls-CwwHzYBM.js → polls-Dn1C2d1-.js} +0 -0
  1001. /package/dist/{ports-lsof-Wteul3ju.js → ports-lsof-BDQWExpn.js} +0 -0
  1002. /package/dist/{process-scoped-map-CV9kDvfG.js → process-scoped-map-BwUkYFQV.js} +0 -0
  1003. /package/dist/{process-scoped-map-PEvnG75N.js → process-scoped-map-CBWcUvTa.js} +0 -0
  1004. /package/dist/{program-context-jqeI5alP.js → program-context-DtsEOsdM.js} +0 -0
  1005. /package/dist/{progress-C1kUfYL-.js → progress-BjGCAXH7.js} +0 -0
  1006. /package/dist/{prompt-Yn2yClg1.js → prompt-FIISMuNm.js} +0 -0
  1007. /package/dist/{prompt-style-DjEYC_s-.js → prompt-style-DL64_X-p.js} +0 -0
  1008. /package/dist/{provider-utils-3JTMJroG.js → provider-utils-DiLhkKQp.js} +0 -0
  1009. /package/dist/{proxy-DL3MD6-P.js → proxy-DUTF0OYE.js} +0 -0
  1010. /package/dist/{proxy-DpNv2cSV.js → proxy-Dv0sbx6A.js} +0 -0
  1011. /package/dist/{pw-ai-state-CGfLv6nV.js → pw-ai-state-DKhOTqDv.js} +0 -0
  1012. /package/dist/{pw-ai-state-Dynx20hr.js → pw-ai-state-kkp06zyZ.js} +0 -0
  1013. /package/dist/{redact-Dx1Fue21.js → redact-BTeK8lMZ.js} +0 -0
  1014. /package/dist/{redact-identifier-BTIWtaa-.js → redact-identifier-F6t5pklx.js} +0 -0
  1015. /package/dist/{redact-identifier-CAagcfWA.js → redact-identifier-VdOrq-IK.js} +0 -0
  1016. /package/dist/{remoteclaw-root-C2HV2VeC.js → remoteclaw-root-DF8m3X4C.js} +0 -0
  1017. /package/dist/{remoteclaw-root-DybYl8PL.js → remoteclaw-root-rJHOCwzo.js} +0 -0
  1018. /package/dist/{render-CCLsW6Lz.js → render-e7fENCYH.js} +0 -0
  1019. /package/dist/{render-uf6PvGMV.js → render-qcqmrHse.js} +0 -0
  1020. /package/dist/{retry-DnqPAqWp.js → retry-CwZiwLDN.js} +0 -0
  1021. /package/dist/{runtime-DJNp29jv.js → runtime-Ds3E9SqF.js} +0 -0
  1022. /package/dist/{runtime-guard-U-ewY_QH.js → runtime-guard-CdJVmJc0.js} +0 -0
  1023. /package/dist/{secret-equal-BbHdTtqY.js → secret-equal-CDUVxXmp.js} +0 -0
  1024. /package/dist/{secret-equal-CXJEZiWb.js → secret-equal-d3sEnK98.js} +0 -0
  1025. /package/dist/{secure-random-CS2mSdTn.js → secure-random-CJtykx_p.js} +0 -0
  1026. /package/dist/{secure-random-_dzDDlFo.js → secure-random-y6N6Gted.js} +0 -0
  1027. /package/dist/{session-key-5YLnn_qf.js → session-key-BF-9YzxC.js} +0 -0
  1028. /package/dist/{stagger-BXv_apuy.js → stagger-B-_Wnofy.js} +0 -0
  1029. /package/dist/{stagger-MI9gd2rQ.js → stagger-CjkdqPuN.js} +0 -0
  1030. /package/dist/{status-BmtCS3T1.js → status-BFmH9Uge.js} +0 -0
  1031. /package/dist/{status-BrwHRn2B.js → status-BIupzBh9.js} +0 -0
  1032. /package/dist/{strip-inbound-meta-DjKcSFaW.js → strip-inbound-meta-BNXRYvmY.js} +0 -0
  1033. /package/dist/{strip-inbound-meta-jy3bkUab.js → strip-inbound-meta-BtNFmc6V.js} +0 -0
  1034. /package/dist/{table-C1rdyYl9.js → table-Au5EeKD6.js} +0 -0
  1035. /package/dist/{target-errors-BDpPcwh5.js → target-errors-B6YON-5k.js} +0 -0
  1036. /package/dist/{target-errors-DdIAPcMM.js → target-errors-sPHoHj73.js} +0 -0
  1037. /package/dist/{targets-D-qLBpTA.js → targets-BtGRUQMa.js} +0 -0
  1038. /package/dist/{targets-BMenhVHg.js → targets-D3r6Zgic.js} +0 -0
  1039. /package/dist/{targets-C-2xwh9f.js → targets-DDdPVd12.js} +0 -0
  1040. /package/dist/{targets-UncQvCVs.js → targets-Ds5eT_RZ.js} +0 -0
  1041. /package/dist/{targets-D7PT_rdO.js → targets-DtvPW-B8.js} +0 -0
  1042. /package/dist/{text-format-BQ3z_OXA.js → text-format-CFm4X8Ze.js} +0 -0
  1043. /package/dist/{text-format-oWqzVmah.js → text-format-KHU3KzvQ.js} +0 -0
  1044. /package/dist/{tokens-B-jmvNR9.js → tokens-BGw4xHhW.js} +0 -0
  1045. /package/dist/{usage-BdhBT0Vz.js → usage-BEjWlD9A.js} +0 -0
  1046. /package/dist/{usage-format-C3mNLfhI.js → usage-format-Cx3JveFn.js} +0 -0
  1047. /package/dist/{usage-format-DAaPzr_z.js → usage-format-D-ZaYT_e.js} +0 -0
  1048. /package/dist/{usage-BtQcAnf6.js → usage-o8O_TxA-.js} +0 -0
  1049. /package/dist/{widearea-dns-CsmBVbez.js → widearea-dns-DUDYT3z2.js} +0 -0
  1050. /package/dist/{workspace-BzPeZDew.js → workspace-9__vtmnA.js} +0 -0
  1051. /package/dist/{wsl-B_sPlzWw.js → wsl-BLrG__iS.js} +0 -0
  1052. /package/dist/{wsl-BCnYV9O0.js → wsl-C2dudsWt.js} +0 -0
@@ -0,0 +1,3071 @@
1
+ import { C as getChildLogger, g as toWhatsappJid, i as CHAT_CHANNEL_ORDER, t as createSubsystemLogger, u as escapeRegExp } from "./subsystem-BCkt9Ocb.js";
2
+ import { $ as resolveDiscordAccount, A as INTERNAL_MESSAGE_CHANNEL, C as loadConfig, D as mergeInboundPathRoots, E as DEFAULT_IMESSAGE_ATTACHMENT_ROOTS, L as GATEWAY_CLIENT_IDS, R as GATEWAY_CLIENT_MODES, et as normalizeDiscordToken, l as chunkMarkdownTextWithMode, mt as normalizeAccountId, o as getDefaultMediaLocalRoots, pt as DEFAULT_ACCOUNT_ID, rt as formatCliCommand, s as resolveMarkdownTableMode, t as loadWebMedia, u as resolveChunkMode } from "./media-CmiNXiOZ.js";
3
+ import { k as INPUT_PROVENANCE_KIND_VALUES } from "./usage-CAuX4vsd.js";
4
+ import "./accounts-Bomfgw0M.js";
5
+ import { t as generateSecureUuid } from "./secure-random-CBwDBdj1.js";
6
+ import "./targets-3hewwPvM.js";
7
+ import "./fetch-oku6r8tJ.js";
8
+ import "./retry-BzWBtFpP.js";
9
+ import { n as resolveDiscordTarget, t as parseDiscordTarget } from "./targets-Bkw_co-B.js";
10
+ import "./store-Dw93tSB-.js";
11
+ import "./send-CPBd6ItT.js";
12
+ import { n as createDiscordRetryRunner, t as recordChannelActivity } from "./channel-activity-daCpxHdT.js";
13
+ import "./render-6ahYfPwj.js";
14
+ import { t as convertMarkdownTables } from "./tables-DRh09aPZ.js";
15
+ import "./send-BZCfto_I.js";
16
+ import fs from "node:fs/promises";
17
+ import os, { homedir } from "node:os";
18
+ import path, { join } from "node:path";
19
+ import fsSync, { constants, readFileSync } from "node:fs";
20
+ import JSON5 from "json5";
21
+ import { promisify } from "node:util";
22
+ import crypto, { randomUUID } from "node:crypto";
23
+ import { execFile } from "node:child_process";
24
+ import { fileURLToPath } from "node:url";
25
+ import AjvPkg from "ajv";
26
+ import "ws";
27
+ import { Type } from "@sinclair/typebox";
28
+ import process$1 from "node:process";
29
+ import "node-edge-tts";
30
+ import { ChannelType, PermissionFlagsBits, Routes } from "discord-api-types/v10";
31
+ import { Embed, RequestClient, serializePayload } from "@buape/carbon";
32
+ import "discord-api-types/payloads/v10";
33
+ import "@whiskeysockets/baileys";
34
+ import "qrcode-terminal";
35
+
36
+ //#region src/infra/device-identity.ts
37
+ const ED25519_SPKI_PREFIX = Buffer.from("302a300506032b6570032100", "hex");
38
+
39
+ //#endregion
40
+ //#region src/infra/tls/gateway.ts
41
+ const execFileAsync$1 = promisify(execFile);
42
+
43
+ //#endregion
44
+ //#region src/infra/json-files.ts
45
+ function createAsyncLock() {
46
+ let lock = Promise.resolve();
47
+ return async function withLock(fn) {
48
+ const prev = lock;
49
+ let release;
50
+ lock = new Promise((resolve) => {
51
+ release = resolve;
52
+ });
53
+ await prev;
54
+ try {
55
+ return await fn();
56
+ } finally {
57
+ release?.();
58
+ }
59
+ };
60
+ }
61
+
62
+ //#endregion
63
+ //#region src/infra/device-pairing.ts
64
+ const PENDING_TTL_MS = 300 * 1e3;
65
+ const withLock = createAsyncLock();
66
+
67
+ //#endregion
68
+ //#region src/sessions/session-label.ts
69
+ const SESSION_LABEL_MAX_LENGTH = 64;
70
+
71
+ //#endregion
72
+ //#region src/gateway/protocol/schema/primitives.ts
73
+ const NonEmptyString = Type.String({ minLength: 1 });
74
+ const SessionLabelString = Type.String({
75
+ minLength: 1,
76
+ maxLength: SESSION_LABEL_MAX_LENGTH
77
+ });
78
+ const GatewayClientIdSchema = Type.Union(Object.values(GATEWAY_CLIENT_IDS).map((value) => Type.Literal(value)));
79
+ const GatewayClientModeSchema = Type.Union(Object.values(GATEWAY_CLIENT_MODES).map((value) => Type.Literal(value)));
80
+
81
+ //#endregion
82
+ //#region src/gateway/protocol/schema/agent.ts
83
+ const AgentEventSchema = Type.Object({
84
+ runId: NonEmptyString,
85
+ seq: Type.Integer({ minimum: 0 }),
86
+ stream: NonEmptyString,
87
+ ts: Type.Integer({ minimum: 0 }),
88
+ data: Type.Record(Type.String(), Type.Unknown())
89
+ }, { additionalProperties: false });
90
+ const SendParamsSchema = Type.Object({
91
+ to: NonEmptyString,
92
+ message: Type.Optional(Type.String()),
93
+ mediaUrl: Type.Optional(Type.String()),
94
+ mediaUrls: Type.Optional(Type.Array(Type.String())),
95
+ gifPlayback: Type.Optional(Type.Boolean()),
96
+ channel: Type.Optional(Type.String()),
97
+ accountId: Type.Optional(Type.String()),
98
+ threadId: Type.Optional(Type.String()),
99
+ sessionKey: Type.Optional(Type.String()),
100
+ idempotencyKey: NonEmptyString
101
+ }, { additionalProperties: false });
102
+ const PollParamsSchema = Type.Object({
103
+ to: NonEmptyString,
104
+ question: NonEmptyString,
105
+ options: Type.Array(NonEmptyString, {
106
+ minItems: 2,
107
+ maxItems: 12
108
+ }),
109
+ maxSelections: Type.Optional(Type.Integer({
110
+ minimum: 1,
111
+ maximum: 12
112
+ })),
113
+ durationSeconds: Type.Optional(Type.Integer({
114
+ minimum: 1,
115
+ maximum: 604800
116
+ })),
117
+ durationHours: Type.Optional(Type.Integer({ minimum: 1 })),
118
+ silent: Type.Optional(Type.Boolean()),
119
+ isAnonymous: Type.Optional(Type.Boolean()),
120
+ threadId: Type.Optional(Type.String()),
121
+ channel: Type.Optional(Type.String()),
122
+ accountId: Type.Optional(Type.String()),
123
+ idempotencyKey: NonEmptyString
124
+ }, { additionalProperties: false });
125
+ const AgentParamsSchema = Type.Object({
126
+ message: NonEmptyString,
127
+ agentId: Type.Optional(NonEmptyString),
128
+ to: Type.Optional(Type.String()),
129
+ replyTo: Type.Optional(Type.String()),
130
+ sessionId: Type.Optional(Type.String()),
131
+ sessionKey: Type.Optional(Type.String()),
132
+ thinking: Type.Optional(Type.String()),
133
+ deliver: Type.Optional(Type.Boolean()),
134
+ attachments: Type.Optional(Type.Array(Type.Unknown())),
135
+ channel: Type.Optional(Type.String()),
136
+ replyChannel: Type.Optional(Type.String()),
137
+ accountId: Type.Optional(Type.String()),
138
+ replyAccountId: Type.Optional(Type.String()),
139
+ threadId: Type.Optional(Type.String()),
140
+ groupId: Type.Optional(Type.String()),
141
+ groupChannel: Type.Optional(Type.String()),
142
+ groupSpace: Type.Optional(Type.String()),
143
+ timeout: Type.Optional(Type.Integer({ minimum: 0 })),
144
+ bestEffortDeliver: Type.Optional(Type.Boolean()),
145
+ lane: Type.Optional(Type.String()),
146
+ extraSystemPrompt: Type.Optional(Type.String()),
147
+ inputProvenance: Type.Optional(Type.Object({
148
+ kind: Type.String({ enum: [...INPUT_PROVENANCE_KIND_VALUES] }),
149
+ sourceSessionKey: Type.Optional(Type.String()),
150
+ sourceChannel: Type.Optional(Type.String()),
151
+ sourceTool: Type.Optional(Type.String())
152
+ }, { additionalProperties: false })),
153
+ idempotencyKey: NonEmptyString,
154
+ label: Type.Optional(SessionLabelString),
155
+ spawnedBy: Type.Optional(Type.String())
156
+ }, { additionalProperties: false });
157
+ const AgentIdentityParamsSchema = Type.Object({
158
+ agentId: Type.Optional(NonEmptyString),
159
+ sessionKey: Type.Optional(Type.String())
160
+ }, { additionalProperties: false });
161
+ const AgentIdentityResultSchema = Type.Object({
162
+ agentId: NonEmptyString,
163
+ name: Type.Optional(NonEmptyString),
164
+ avatar: Type.Optional(NonEmptyString),
165
+ emoji: Type.Optional(NonEmptyString)
166
+ }, { additionalProperties: false });
167
+ const AgentWaitParamsSchema = Type.Object({
168
+ runId: NonEmptyString,
169
+ timeoutMs: Type.Optional(Type.Integer({ minimum: 0 }))
170
+ }, { additionalProperties: false });
171
+ const WakeParamsSchema = Type.Object({
172
+ mode: Type.Union([Type.Literal("now"), Type.Literal("next-heartbeat")]),
173
+ text: NonEmptyString
174
+ }, { additionalProperties: false });
175
+
176
+ //#endregion
177
+ //#region src/gateway/protocol/schema/agents-models-skills.ts
178
+ const ModelChoiceSchema = Type.Object({
179
+ id: NonEmptyString,
180
+ name: NonEmptyString,
181
+ provider: NonEmptyString,
182
+ contextWindow: Type.Optional(Type.Integer({ minimum: 1 })),
183
+ reasoning: Type.Optional(Type.Boolean())
184
+ }, { additionalProperties: false });
185
+ const AgentSummarySchema = Type.Object({
186
+ id: NonEmptyString,
187
+ name: Type.Optional(NonEmptyString),
188
+ identity: Type.Optional(Type.Object({
189
+ name: Type.Optional(NonEmptyString),
190
+ theme: Type.Optional(NonEmptyString),
191
+ emoji: Type.Optional(NonEmptyString),
192
+ avatar: Type.Optional(NonEmptyString),
193
+ avatarUrl: Type.Optional(NonEmptyString)
194
+ }, { additionalProperties: false }))
195
+ }, { additionalProperties: false });
196
+ const AgentsListParamsSchema = Type.Object({}, { additionalProperties: false });
197
+ const AgentsListResultSchema = Type.Object({
198
+ defaultId: NonEmptyString,
199
+ mainKey: NonEmptyString,
200
+ scope: Type.Union([Type.Literal("per-sender"), Type.Literal("global")]),
201
+ agents: Type.Array(AgentSummarySchema)
202
+ }, { additionalProperties: false });
203
+ const AgentsCreateParamsSchema = Type.Object({
204
+ name: NonEmptyString,
205
+ workspace: NonEmptyString,
206
+ emoji: Type.Optional(Type.String()),
207
+ avatar: Type.Optional(Type.String())
208
+ }, { additionalProperties: false });
209
+ const AgentsCreateResultSchema = Type.Object({
210
+ ok: Type.Literal(true),
211
+ agentId: NonEmptyString,
212
+ name: NonEmptyString,
213
+ workspace: NonEmptyString
214
+ }, { additionalProperties: false });
215
+ const AgentsUpdateParamsSchema = Type.Object({
216
+ agentId: NonEmptyString,
217
+ name: Type.Optional(NonEmptyString),
218
+ workspace: Type.Optional(NonEmptyString),
219
+ model: Type.Optional(NonEmptyString),
220
+ avatar: Type.Optional(Type.String())
221
+ }, { additionalProperties: false });
222
+ const AgentsUpdateResultSchema = Type.Object({
223
+ ok: Type.Literal(true),
224
+ agentId: NonEmptyString
225
+ }, { additionalProperties: false });
226
+ const AgentsDeleteParamsSchema = Type.Object({
227
+ agentId: NonEmptyString,
228
+ deleteFiles: Type.Optional(Type.Boolean())
229
+ }, { additionalProperties: false });
230
+ const AgentsDeleteResultSchema = Type.Object({
231
+ ok: Type.Literal(true),
232
+ agentId: NonEmptyString,
233
+ removedBindings: Type.Integer({ minimum: 0 })
234
+ }, { additionalProperties: false });
235
+ const AgentsFileEntrySchema = Type.Object({
236
+ name: NonEmptyString,
237
+ path: NonEmptyString,
238
+ missing: Type.Boolean(),
239
+ size: Type.Optional(Type.Integer({ minimum: 0 })),
240
+ updatedAtMs: Type.Optional(Type.Integer({ minimum: 0 })),
241
+ content: Type.Optional(Type.String())
242
+ }, { additionalProperties: false });
243
+ const AgentsFilesListParamsSchema = Type.Object({ agentId: NonEmptyString }, { additionalProperties: false });
244
+ const AgentsFilesListResultSchema = Type.Object({
245
+ agentId: NonEmptyString,
246
+ workspace: NonEmptyString,
247
+ files: Type.Array(AgentsFileEntrySchema)
248
+ }, { additionalProperties: false });
249
+ const AgentsFilesGetParamsSchema = Type.Object({
250
+ agentId: NonEmptyString,
251
+ name: NonEmptyString
252
+ }, { additionalProperties: false });
253
+ const AgentsFilesGetResultSchema = Type.Object({
254
+ agentId: NonEmptyString,
255
+ workspace: NonEmptyString,
256
+ file: AgentsFileEntrySchema
257
+ }, { additionalProperties: false });
258
+ const AgentsFilesSetParamsSchema = Type.Object({
259
+ agentId: NonEmptyString,
260
+ name: NonEmptyString,
261
+ content: Type.String()
262
+ }, { additionalProperties: false });
263
+ const AgentsFilesSetResultSchema = Type.Object({
264
+ ok: Type.Literal(true),
265
+ agentId: NonEmptyString,
266
+ workspace: NonEmptyString,
267
+ file: AgentsFileEntrySchema
268
+ }, { additionalProperties: false });
269
+ const ModelsListParamsSchema = Type.Object({}, { additionalProperties: false });
270
+ const ModelsListResultSchema = Type.Object({ models: Type.Array(ModelChoiceSchema) }, { additionalProperties: false });
271
+ const ToolsCatalogParamsSchema = Type.Object({
272
+ agentId: Type.Optional(NonEmptyString),
273
+ includePlugins: Type.Optional(Type.Boolean())
274
+ }, { additionalProperties: false });
275
+ const ToolCatalogProfileSchema = Type.Object({
276
+ id: Type.Union([
277
+ Type.Literal("minimal"),
278
+ Type.Literal("coding"),
279
+ Type.Literal("messaging"),
280
+ Type.Literal("full")
281
+ ]),
282
+ label: NonEmptyString
283
+ }, { additionalProperties: false });
284
+ const ToolCatalogEntrySchema = Type.Object({
285
+ id: NonEmptyString,
286
+ label: NonEmptyString,
287
+ description: Type.String(),
288
+ source: Type.Union([Type.Literal("core"), Type.Literal("plugin")]),
289
+ pluginId: Type.Optional(NonEmptyString),
290
+ optional: Type.Optional(Type.Boolean()),
291
+ defaultProfiles: Type.Array(Type.Union([
292
+ Type.Literal("minimal"),
293
+ Type.Literal("coding"),
294
+ Type.Literal("messaging"),
295
+ Type.Literal("full")
296
+ ]))
297
+ }, { additionalProperties: false });
298
+ const ToolCatalogGroupSchema = Type.Object({
299
+ id: NonEmptyString,
300
+ label: NonEmptyString,
301
+ source: Type.Union([Type.Literal("core"), Type.Literal("plugin")]),
302
+ pluginId: Type.Optional(NonEmptyString),
303
+ tools: Type.Array(ToolCatalogEntrySchema)
304
+ }, { additionalProperties: false });
305
+ const ToolsCatalogResultSchema = Type.Object({
306
+ agentId: NonEmptyString,
307
+ profiles: Type.Array(ToolCatalogProfileSchema),
308
+ groups: Type.Array(ToolCatalogGroupSchema)
309
+ }, { additionalProperties: false });
310
+
311
+ //#endregion
312
+ //#region src/gateway/protocol/schema/channels.ts
313
+ const TalkModeParamsSchema = Type.Object({
314
+ enabled: Type.Boolean(),
315
+ phase: Type.Optional(Type.String())
316
+ }, { additionalProperties: false });
317
+ const TalkConfigParamsSchema = Type.Object({ includeSecrets: Type.Optional(Type.Boolean()) }, { additionalProperties: false });
318
+ const TalkProviderConfigSchema = Type.Object({
319
+ voiceId: Type.Optional(Type.String()),
320
+ voiceAliases: Type.Optional(Type.Record(Type.String(), Type.String())),
321
+ modelId: Type.Optional(Type.String()),
322
+ outputFormat: Type.Optional(Type.String()),
323
+ apiKey: Type.Optional(Type.String())
324
+ }, { additionalProperties: true });
325
+ const TalkConfigResultSchema = Type.Object({ config: Type.Object({
326
+ talk: Type.Optional(Type.Object({
327
+ provider: Type.Optional(Type.String()),
328
+ providers: Type.Optional(Type.Record(Type.String(), TalkProviderConfigSchema)),
329
+ voiceId: Type.Optional(Type.String()),
330
+ voiceAliases: Type.Optional(Type.Record(Type.String(), Type.String())),
331
+ modelId: Type.Optional(Type.String()),
332
+ outputFormat: Type.Optional(Type.String()),
333
+ apiKey: Type.Optional(Type.String()),
334
+ interruptOnSpeech: Type.Optional(Type.Boolean())
335
+ }, { additionalProperties: false })),
336
+ session: Type.Optional(Type.Object({ mainKey: Type.Optional(Type.String()) }, { additionalProperties: false })),
337
+ ui: Type.Optional(Type.Object({ seamColor: Type.Optional(Type.String()) }, { additionalProperties: false }))
338
+ }, { additionalProperties: false }) }, { additionalProperties: false });
339
+ const ChannelsStatusParamsSchema = Type.Object({
340
+ probe: Type.Optional(Type.Boolean()),
341
+ timeoutMs: Type.Optional(Type.Integer({ minimum: 0 }))
342
+ }, { additionalProperties: false });
343
+ const ChannelAccountSnapshotSchema = Type.Object({
344
+ accountId: NonEmptyString,
345
+ name: Type.Optional(Type.String()),
346
+ enabled: Type.Optional(Type.Boolean()),
347
+ configured: Type.Optional(Type.Boolean()),
348
+ linked: Type.Optional(Type.Boolean()),
349
+ running: Type.Optional(Type.Boolean()),
350
+ connected: Type.Optional(Type.Boolean()),
351
+ reconnectAttempts: Type.Optional(Type.Integer({ minimum: 0 })),
352
+ lastConnectedAt: Type.Optional(Type.Integer({ minimum: 0 })),
353
+ lastError: Type.Optional(Type.String()),
354
+ lastStartAt: Type.Optional(Type.Integer({ minimum: 0 })),
355
+ lastStopAt: Type.Optional(Type.Integer({ minimum: 0 })),
356
+ lastInboundAt: Type.Optional(Type.Integer({ minimum: 0 })),
357
+ lastOutboundAt: Type.Optional(Type.Integer({ minimum: 0 })),
358
+ lastProbeAt: Type.Optional(Type.Integer({ minimum: 0 })),
359
+ mode: Type.Optional(Type.String()),
360
+ dmPolicy: Type.Optional(Type.String()),
361
+ allowFrom: Type.Optional(Type.Array(Type.String())),
362
+ tokenSource: Type.Optional(Type.String()),
363
+ botTokenSource: Type.Optional(Type.String()),
364
+ appTokenSource: Type.Optional(Type.String()),
365
+ baseUrl: Type.Optional(Type.String()),
366
+ allowUnmentionedGroups: Type.Optional(Type.Boolean()),
367
+ cliPath: Type.Optional(Type.Union([Type.String(), Type.Null()])),
368
+ dbPath: Type.Optional(Type.Union([Type.String(), Type.Null()])),
369
+ port: Type.Optional(Type.Union([Type.Integer({ minimum: 0 }), Type.Null()])),
370
+ probe: Type.Optional(Type.Unknown()),
371
+ audit: Type.Optional(Type.Unknown()),
372
+ application: Type.Optional(Type.Unknown())
373
+ }, { additionalProperties: true });
374
+ const ChannelUiMetaSchema = Type.Object({
375
+ id: NonEmptyString,
376
+ label: NonEmptyString,
377
+ detailLabel: NonEmptyString,
378
+ systemImage: Type.Optional(Type.String())
379
+ }, { additionalProperties: false });
380
+ const ChannelsStatusResultSchema = Type.Object({
381
+ ts: Type.Integer({ minimum: 0 }),
382
+ channelOrder: Type.Array(NonEmptyString),
383
+ channelLabels: Type.Record(NonEmptyString, NonEmptyString),
384
+ channelDetailLabels: Type.Optional(Type.Record(NonEmptyString, NonEmptyString)),
385
+ channelSystemImages: Type.Optional(Type.Record(NonEmptyString, NonEmptyString)),
386
+ channelMeta: Type.Optional(Type.Array(ChannelUiMetaSchema)),
387
+ channels: Type.Record(NonEmptyString, Type.Unknown()),
388
+ channelAccounts: Type.Record(NonEmptyString, Type.Array(ChannelAccountSnapshotSchema)),
389
+ channelDefaultAccountId: Type.Record(NonEmptyString, NonEmptyString)
390
+ }, { additionalProperties: false });
391
+ const ChannelsLogoutParamsSchema = Type.Object({
392
+ channel: NonEmptyString,
393
+ accountId: Type.Optional(Type.String())
394
+ }, { additionalProperties: false });
395
+ const WebLoginStartParamsSchema = Type.Object({
396
+ force: Type.Optional(Type.Boolean()),
397
+ timeoutMs: Type.Optional(Type.Integer({ minimum: 0 })),
398
+ verbose: Type.Optional(Type.Boolean()),
399
+ accountId: Type.Optional(Type.String())
400
+ }, { additionalProperties: false });
401
+ const WebLoginWaitParamsSchema = Type.Object({
402
+ timeoutMs: Type.Optional(Type.Integer({ minimum: 0 })),
403
+ accountId: Type.Optional(Type.String())
404
+ }, { additionalProperties: false });
405
+
406
+ //#endregion
407
+ //#region src/gateway/protocol/schema/config.ts
408
+ const ConfigGetParamsSchema = Type.Object({}, { additionalProperties: false });
409
+ const ConfigSetParamsSchema = Type.Object({
410
+ raw: NonEmptyString,
411
+ baseHash: Type.Optional(NonEmptyString)
412
+ }, { additionalProperties: false });
413
+ const ConfigApplyLikeParamsSchema = Type.Object({
414
+ raw: NonEmptyString,
415
+ baseHash: Type.Optional(NonEmptyString),
416
+ sessionKey: Type.Optional(Type.String()),
417
+ note: Type.Optional(Type.String()),
418
+ restartDelayMs: Type.Optional(Type.Integer({ minimum: 0 }))
419
+ }, { additionalProperties: false });
420
+ const ConfigApplyParamsSchema = ConfigApplyLikeParamsSchema;
421
+ const ConfigPatchParamsSchema = ConfigApplyLikeParamsSchema;
422
+ const ConfigSchemaParamsSchema = Type.Object({}, { additionalProperties: false });
423
+ const UpdateRunParamsSchema = Type.Object({
424
+ sessionKey: Type.Optional(Type.String()),
425
+ note: Type.Optional(Type.String()),
426
+ restartDelayMs: Type.Optional(Type.Integer({ minimum: 0 })),
427
+ timeoutMs: Type.Optional(Type.Integer({ minimum: 1 }))
428
+ }, { additionalProperties: false });
429
+ const ConfigUiHintSchema = Type.Object({
430
+ label: Type.Optional(Type.String()),
431
+ help: Type.Optional(Type.String()),
432
+ tags: Type.Optional(Type.Array(Type.String())),
433
+ group: Type.Optional(Type.String()),
434
+ order: Type.Optional(Type.Integer()),
435
+ advanced: Type.Optional(Type.Boolean()),
436
+ sensitive: Type.Optional(Type.Boolean()),
437
+ placeholder: Type.Optional(Type.String()),
438
+ itemTemplate: Type.Optional(Type.Unknown())
439
+ }, { additionalProperties: false });
440
+ const ConfigSchemaResponseSchema = Type.Object({
441
+ schema: Type.Unknown(),
442
+ uiHints: Type.Record(Type.String(), ConfigUiHintSchema),
443
+ version: NonEmptyString,
444
+ generatedAt: NonEmptyString
445
+ }, { additionalProperties: false });
446
+
447
+ //#endregion
448
+ //#region src/gateway/protocol/schema/cron.ts
449
+ function cronAgentTurnPayloadSchema(params) {
450
+ return Type.Object({
451
+ kind: Type.Literal("agentTurn"),
452
+ message: params.message,
453
+ model: Type.Optional(Type.String()),
454
+ thinking: Type.Optional(Type.String()),
455
+ timeoutSeconds: Type.Optional(Type.Integer({ minimum: 0 })),
456
+ allowUnsafeExternalContent: Type.Optional(Type.Boolean()),
457
+ deliver: Type.Optional(Type.Boolean()),
458
+ channel: Type.Optional(Type.String()),
459
+ to: Type.Optional(Type.String()),
460
+ bestEffortDeliver: Type.Optional(Type.Boolean())
461
+ }, { additionalProperties: false });
462
+ }
463
+ const CronSessionTargetSchema = Type.Union([Type.Literal("main"), Type.Literal("isolated")]);
464
+ const CronWakeModeSchema = Type.Union([Type.Literal("next-heartbeat"), Type.Literal("now")]);
465
+ const CronRunStatusSchema = Type.Union([
466
+ Type.Literal("ok"),
467
+ Type.Literal("error"),
468
+ Type.Literal("skipped")
469
+ ]);
470
+ const CronSortDirSchema = Type.Union([Type.Literal("asc"), Type.Literal("desc")]);
471
+ const CronJobsEnabledFilterSchema = Type.Union([
472
+ Type.Literal("all"),
473
+ Type.Literal("enabled"),
474
+ Type.Literal("disabled")
475
+ ]);
476
+ const CronJobsSortBySchema = Type.Union([
477
+ Type.Literal("nextRunAtMs"),
478
+ Type.Literal("updatedAtMs"),
479
+ Type.Literal("name")
480
+ ]);
481
+ const CronRunsStatusFilterSchema = Type.Union([
482
+ Type.Literal("all"),
483
+ Type.Literal("ok"),
484
+ Type.Literal("error"),
485
+ Type.Literal("skipped")
486
+ ]);
487
+ const CronRunsStatusValueSchema = Type.Union([
488
+ Type.Literal("ok"),
489
+ Type.Literal("error"),
490
+ Type.Literal("skipped")
491
+ ]);
492
+ const CronDeliveryStatusSchema = Type.Union([
493
+ Type.Literal("delivered"),
494
+ Type.Literal("not-delivered"),
495
+ Type.Literal("unknown"),
496
+ Type.Literal("not-requested")
497
+ ]);
498
+ const CronCommonOptionalFields = {
499
+ agentId: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
500
+ sessionKey: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
501
+ description: Type.Optional(Type.String()),
502
+ enabled: Type.Optional(Type.Boolean()),
503
+ deleteAfterRun: Type.Optional(Type.Boolean())
504
+ };
505
+ function cronIdOrJobIdParams(extraFields) {
506
+ return Type.Union([Type.Object({
507
+ id: NonEmptyString,
508
+ ...extraFields
509
+ }, { additionalProperties: false }), Type.Object({
510
+ jobId: NonEmptyString,
511
+ ...extraFields
512
+ }, { additionalProperties: false })]);
513
+ }
514
+ const CronRunLogJobIdSchema = Type.String({
515
+ minLength: 1,
516
+ pattern: "^[^/\\\\]+$"
517
+ });
518
+ const CronScheduleSchema = Type.Union([
519
+ Type.Object({
520
+ kind: Type.Literal("at"),
521
+ at: NonEmptyString
522
+ }, { additionalProperties: false }),
523
+ Type.Object({
524
+ kind: Type.Literal("every"),
525
+ everyMs: Type.Integer({ minimum: 1 }),
526
+ anchorMs: Type.Optional(Type.Integer({ minimum: 0 }))
527
+ }, { additionalProperties: false }),
528
+ Type.Object({
529
+ kind: Type.Literal("cron"),
530
+ expr: NonEmptyString,
531
+ tz: Type.Optional(Type.String()),
532
+ staggerMs: Type.Optional(Type.Integer({ minimum: 0 }))
533
+ }, { additionalProperties: false })
534
+ ]);
535
+ const CronPayloadSchema = Type.Union([Type.Object({
536
+ kind: Type.Literal("systemEvent"),
537
+ text: NonEmptyString
538
+ }, { additionalProperties: false }), cronAgentTurnPayloadSchema({ message: NonEmptyString })]);
539
+ const CronPayloadPatchSchema = Type.Union([Type.Object({
540
+ kind: Type.Literal("systemEvent"),
541
+ text: Type.Optional(NonEmptyString)
542
+ }, { additionalProperties: false }), cronAgentTurnPayloadSchema({ message: Type.Optional(NonEmptyString) })]);
543
+ const CronDeliverySharedProperties = {
544
+ channel: Type.Optional(Type.Union([Type.Literal("last"), NonEmptyString])),
545
+ bestEffort: Type.Optional(Type.Boolean())
546
+ };
547
+ const CronDeliveryNoopSchema = Type.Object({
548
+ mode: Type.Literal("none"),
549
+ ...CronDeliverySharedProperties,
550
+ to: Type.Optional(Type.String())
551
+ }, { additionalProperties: false });
552
+ const CronDeliveryAnnounceSchema = Type.Object({
553
+ mode: Type.Literal("announce"),
554
+ ...CronDeliverySharedProperties,
555
+ to: Type.Optional(Type.String())
556
+ }, { additionalProperties: false });
557
+ const CronDeliveryWebhookSchema = Type.Object({
558
+ mode: Type.Literal("webhook"),
559
+ ...CronDeliverySharedProperties,
560
+ to: NonEmptyString
561
+ }, { additionalProperties: false });
562
+ const CronDeliverySchema = Type.Union([
563
+ CronDeliveryNoopSchema,
564
+ CronDeliveryAnnounceSchema,
565
+ CronDeliveryWebhookSchema
566
+ ]);
567
+ const CronDeliveryPatchSchema = Type.Object({
568
+ mode: Type.Optional(Type.Union([
569
+ Type.Literal("none"),
570
+ Type.Literal("announce"),
571
+ Type.Literal("webhook")
572
+ ])),
573
+ ...CronDeliverySharedProperties,
574
+ to: Type.Optional(Type.String())
575
+ }, { additionalProperties: false });
576
+ const CronJobStateSchema = Type.Object({
577
+ nextRunAtMs: Type.Optional(Type.Integer({ minimum: 0 })),
578
+ runningAtMs: Type.Optional(Type.Integer({ minimum: 0 })),
579
+ lastRunAtMs: Type.Optional(Type.Integer({ minimum: 0 })),
580
+ lastRunStatus: Type.Optional(CronRunStatusSchema),
581
+ lastStatus: Type.Optional(CronRunStatusSchema),
582
+ lastError: Type.Optional(Type.String()),
583
+ lastDurationMs: Type.Optional(Type.Integer({ minimum: 0 })),
584
+ consecutiveErrors: Type.Optional(Type.Integer({ minimum: 0 })),
585
+ lastDelivered: Type.Optional(Type.Boolean()),
586
+ lastDeliveryStatus: Type.Optional(CronDeliveryStatusSchema),
587
+ lastDeliveryError: Type.Optional(Type.String())
588
+ }, { additionalProperties: false });
589
+ const CronJobSchema = Type.Object({
590
+ id: NonEmptyString,
591
+ agentId: Type.Optional(NonEmptyString),
592
+ sessionKey: Type.Optional(NonEmptyString),
593
+ name: NonEmptyString,
594
+ description: Type.Optional(Type.String()),
595
+ enabled: Type.Boolean(),
596
+ deleteAfterRun: Type.Optional(Type.Boolean()),
597
+ createdAtMs: Type.Integer({ minimum: 0 }),
598
+ updatedAtMs: Type.Integer({ minimum: 0 }),
599
+ schedule: CronScheduleSchema,
600
+ sessionTarget: CronSessionTargetSchema,
601
+ wakeMode: CronWakeModeSchema,
602
+ payload: CronPayloadSchema,
603
+ delivery: Type.Optional(CronDeliverySchema),
604
+ state: CronJobStateSchema
605
+ }, { additionalProperties: false });
606
+ const CronListParamsSchema = Type.Object({
607
+ includeDisabled: Type.Optional(Type.Boolean()),
608
+ limit: Type.Optional(Type.Integer({
609
+ minimum: 1,
610
+ maximum: 200
611
+ })),
612
+ offset: Type.Optional(Type.Integer({ minimum: 0 })),
613
+ query: Type.Optional(Type.String()),
614
+ enabled: Type.Optional(CronJobsEnabledFilterSchema),
615
+ sortBy: Type.Optional(CronJobsSortBySchema),
616
+ sortDir: Type.Optional(CronSortDirSchema)
617
+ }, { additionalProperties: false });
618
+ const CronStatusParamsSchema = Type.Object({}, { additionalProperties: false });
619
+ const CronAddParamsSchema = Type.Object({
620
+ name: NonEmptyString,
621
+ ...CronCommonOptionalFields,
622
+ schedule: CronScheduleSchema,
623
+ sessionTarget: CronSessionTargetSchema,
624
+ wakeMode: CronWakeModeSchema,
625
+ payload: CronPayloadSchema,
626
+ delivery: Type.Optional(CronDeliverySchema)
627
+ }, { additionalProperties: false });
628
+ const CronJobPatchSchema = Type.Object({
629
+ name: Type.Optional(NonEmptyString),
630
+ ...CronCommonOptionalFields,
631
+ schedule: Type.Optional(CronScheduleSchema),
632
+ sessionTarget: Type.Optional(CronSessionTargetSchema),
633
+ wakeMode: Type.Optional(CronWakeModeSchema),
634
+ payload: Type.Optional(CronPayloadPatchSchema),
635
+ delivery: Type.Optional(CronDeliveryPatchSchema),
636
+ state: Type.Optional(Type.Partial(CronJobStateSchema))
637
+ }, { additionalProperties: false });
638
+ const CronUpdateParamsSchema = cronIdOrJobIdParams({ patch: CronJobPatchSchema });
639
+ const CronRemoveParamsSchema = cronIdOrJobIdParams({});
640
+ const CronRunParamsSchema = cronIdOrJobIdParams({ mode: Type.Optional(Type.Union([Type.Literal("due"), Type.Literal("force")])) });
641
+ const CronRunsParamsSchema = Type.Object({
642
+ scope: Type.Optional(Type.Union([Type.Literal("job"), Type.Literal("all")])),
643
+ id: Type.Optional(CronRunLogJobIdSchema),
644
+ jobId: Type.Optional(CronRunLogJobIdSchema),
645
+ limit: Type.Optional(Type.Integer({
646
+ minimum: 1,
647
+ maximum: 200
648
+ })),
649
+ offset: Type.Optional(Type.Integer({ minimum: 0 })),
650
+ statuses: Type.Optional(Type.Array(CronRunsStatusValueSchema, {
651
+ minItems: 1,
652
+ maxItems: 3
653
+ })),
654
+ status: Type.Optional(CronRunsStatusFilterSchema),
655
+ deliveryStatuses: Type.Optional(Type.Array(CronDeliveryStatusSchema, {
656
+ minItems: 1,
657
+ maxItems: 4
658
+ })),
659
+ deliveryStatus: Type.Optional(CronDeliveryStatusSchema),
660
+ query: Type.Optional(Type.String()),
661
+ sortDir: Type.Optional(CronSortDirSchema)
662
+ }, { additionalProperties: false });
663
+ const CronRunLogEntrySchema = Type.Object({
664
+ ts: Type.Integer({ minimum: 0 }),
665
+ jobId: NonEmptyString,
666
+ action: Type.Literal("finished"),
667
+ status: Type.Optional(CronRunStatusSchema),
668
+ error: Type.Optional(Type.String()),
669
+ summary: Type.Optional(Type.String()),
670
+ delivered: Type.Optional(Type.Boolean()),
671
+ deliveryStatus: Type.Optional(CronDeliveryStatusSchema),
672
+ deliveryError: Type.Optional(Type.String()),
673
+ sessionId: Type.Optional(NonEmptyString),
674
+ sessionKey: Type.Optional(NonEmptyString),
675
+ runAtMs: Type.Optional(Type.Integer({ minimum: 0 })),
676
+ durationMs: Type.Optional(Type.Integer({ minimum: 0 })),
677
+ nextRunAtMs: Type.Optional(Type.Integer({ minimum: 0 })),
678
+ model: Type.Optional(Type.String()),
679
+ provider: Type.Optional(Type.String()),
680
+ usage: Type.Optional(Type.Object({
681
+ input_tokens: Type.Optional(Type.Number()),
682
+ output_tokens: Type.Optional(Type.Number()),
683
+ total_tokens: Type.Optional(Type.Number()),
684
+ cache_read_tokens: Type.Optional(Type.Number()),
685
+ cache_write_tokens: Type.Optional(Type.Number())
686
+ }, { additionalProperties: false })),
687
+ jobName: Type.Optional(Type.String())
688
+ }, { additionalProperties: false });
689
+
690
+ //#endregion
691
+ //#region src/gateway/protocol/schema/devices.ts
692
+ const DevicePairListParamsSchema = Type.Object({}, { additionalProperties: false });
693
+ const DevicePairApproveParamsSchema = Type.Object({ requestId: NonEmptyString }, { additionalProperties: false });
694
+ const DevicePairRejectParamsSchema = Type.Object({ requestId: NonEmptyString }, { additionalProperties: false });
695
+ const DevicePairRemoveParamsSchema = Type.Object({ deviceId: NonEmptyString }, { additionalProperties: false });
696
+ const DeviceTokenRotateParamsSchema = Type.Object({
697
+ deviceId: NonEmptyString,
698
+ role: NonEmptyString,
699
+ scopes: Type.Optional(Type.Array(NonEmptyString))
700
+ }, { additionalProperties: false });
701
+ const DeviceTokenRevokeParamsSchema = Type.Object({
702
+ deviceId: NonEmptyString,
703
+ role: NonEmptyString
704
+ }, { additionalProperties: false });
705
+ const DevicePairRequestedEventSchema = Type.Object({
706
+ requestId: NonEmptyString,
707
+ deviceId: NonEmptyString,
708
+ publicKey: NonEmptyString,
709
+ displayName: Type.Optional(NonEmptyString),
710
+ platform: Type.Optional(NonEmptyString),
711
+ clientId: Type.Optional(NonEmptyString),
712
+ clientMode: Type.Optional(NonEmptyString),
713
+ role: Type.Optional(NonEmptyString),
714
+ roles: Type.Optional(Type.Array(NonEmptyString)),
715
+ scopes: Type.Optional(Type.Array(NonEmptyString)),
716
+ remoteIp: Type.Optional(NonEmptyString),
717
+ silent: Type.Optional(Type.Boolean()),
718
+ isRepair: Type.Optional(Type.Boolean()),
719
+ ts: Type.Integer({ minimum: 0 })
720
+ }, { additionalProperties: false });
721
+ const DevicePairResolvedEventSchema = Type.Object({
722
+ requestId: NonEmptyString,
723
+ deviceId: NonEmptyString,
724
+ decision: NonEmptyString,
725
+ ts: Type.Integer({ minimum: 0 })
726
+ }, { additionalProperties: false });
727
+
728
+ //#endregion
729
+ //#region src/gateway/protocol/schema/snapshot.ts
730
+ const PresenceEntrySchema = Type.Object({
731
+ host: Type.Optional(NonEmptyString),
732
+ ip: Type.Optional(NonEmptyString),
733
+ version: Type.Optional(NonEmptyString),
734
+ platform: Type.Optional(NonEmptyString),
735
+ deviceFamily: Type.Optional(NonEmptyString),
736
+ modelIdentifier: Type.Optional(NonEmptyString),
737
+ mode: Type.Optional(NonEmptyString),
738
+ lastInputSeconds: Type.Optional(Type.Integer({ minimum: 0 })),
739
+ reason: Type.Optional(NonEmptyString),
740
+ tags: Type.Optional(Type.Array(NonEmptyString)),
741
+ text: Type.Optional(Type.String()),
742
+ ts: Type.Integer({ minimum: 0 }),
743
+ deviceId: Type.Optional(NonEmptyString),
744
+ roles: Type.Optional(Type.Array(NonEmptyString)),
745
+ scopes: Type.Optional(Type.Array(NonEmptyString)),
746
+ instanceId: Type.Optional(NonEmptyString)
747
+ }, { additionalProperties: false });
748
+ const HealthSnapshotSchema = Type.Any();
749
+ const SessionDefaultsSchema = Type.Object({
750
+ defaultAgentId: NonEmptyString,
751
+ mainKey: NonEmptyString,
752
+ mainSessionKey: NonEmptyString,
753
+ scope: Type.Optional(NonEmptyString)
754
+ }, { additionalProperties: false });
755
+ const StateVersionSchema = Type.Object({
756
+ presence: Type.Integer({ minimum: 0 }),
757
+ health: Type.Integer({ minimum: 0 })
758
+ }, { additionalProperties: false });
759
+ const SnapshotSchema = Type.Object({
760
+ presence: Type.Array(PresenceEntrySchema),
761
+ health: HealthSnapshotSchema,
762
+ stateVersion: StateVersionSchema,
763
+ uptimeMs: Type.Integer({ minimum: 0 }),
764
+ configPath: Type.Optional(NonEmptyString),
765
+ stateDir: Type.Optional(NonEmptyString),
766
+ sessionDefaults: Type.Optional(SessionDefaultsSchema),
767
+ authMode: Type.Optional(Type.Union([
768
+ Type.Literal("none"),
769
+ Type.Literal("token"),
770
+ Type.Literal("password"),
771
+ Type.Literal("trusted-proxy")
772
+ ])),
773
+ updateAvailable: Type.Optional(Type.Object({
774
+ currentVersion: NonEmptyString,
775
+ latestVersion: NonEmptyString,
776
+ channel: NonEmptyString
777
+ }))
778
+ }, { additionalProperties: false });
779
+
780
+ //#endregion
781
+ //#region src/gateway/protocol/schema/frames.ts
782
+ const TickEventSchema = Type.Object({ ts: Type.Integer({ minimum: 0 }) }, { additionalProperties: false });
783
+ const ShutdownEventSchema = Type.Object({
784
+ reason: NonEmptyString,
785
+ restartExpectedMs: Type.Optional(Type.Integer({ minimum: 0 }))
786
+ }, { additionalProperties: false });
787
+ const ConnectParamsSchema = Type.Object({
788
+ minProtocol: Type.Integer({ minimum: 1 }),
789
+ maxProtocol: Type.Integer({ minimum: 1 }),
790
+ client: Type.Object({
791
+ id: GatewayClientIdSchema,
792
+ displayName: Type.Optional(NonEmptyString),
793
+ version: NonEmptyString,
794
+ platform: NonEmptyString,
795
+ deviceFamily: Type.Optional(NonEmptyString),
796
+ modelIdentifier: Type.Optional(NonEmptyString),
797
+ mode: GatewayClientModeSchema,
798
+ instanceId: Type.Optional(NonEmptyString)
799
+ }, { additionalProperties: false }),
800
+ caps: Type.Optional(Type.Array(NonEmptyString, { default: [] })),
801
+ commands: Type.Optional(Type.Array(NonEmptyString)),
802
+ permissions: Type.Optional(Type.Record(NonEmptyString, Type.Boolean())),
803
+ pathEnv: Type.Optional(Type.String()),
804
+ role: Type.Optional(NonEmptyString),
805
+ scopes: Type.Optional(Type.Array(NonEmptyString)),
806
+ device: Type.Optional(Type.Object({
807
+ id: NonEmptyString,
808
+ publicKey: NonEmptyString,
809
+ signature: NonEmptyString,
810
+ signedAt: Type.Integer({ minimum: 0 }),
811
+ nonce: NonEmptyString
812
+ }, { additionalProperties: false })),
813
+ auth: Type.Optional(Type.Object({
814
+ token: Type.Optional(Type.String()),
815
+ deviceToken: Type.Optional(Type.String()),
816
+ password: Type.Optional(Type.String())
817
+ }, { additionalProperties: false })),
818
+ locale: Type.Optional(Type.String()),
819
+ userAgent: Type.Optional(Type.String())
820
+ }, { additionalProperties: false });
821
+ const HelloOkSchema = Type.Object({
822
+ type: Type.Literal("hello-ok"),
823
+ protocol: Type.Integer({ minimum: 1 }),
824
+ server: Type.Object({
825
+ version: NonEmptyString,
826
+ connId: NonEmptyString
827
+ }, { additionalProperties: false }),
828
+ features: Type.Object({
829
+ methods: Type.Array(NonEmptyString),
830
+ events: Type.Array(NonEmptyString)
831
+ }, { additionalProperties: false }),
832
+ snapshot: SnapshotSchema,
833
+ canvasHostUrl: Type.Optional(NonEmptyString),
834
+ auth: Type.Optional(Type.Object({
835
+ deviceToken: NonEmptyString,
836
+ role: NonEmptyString,
837
+ scopes: Type.Array(NonEmptyString),
838
+ issuedAtMs: Type.Optional(Type.Integer({ minimum: 0 }))
839
+ }, { additionalProperties: false })),
840
+ policy: Type.Object({
841
+ maxPayload: Type.Integer({ minimum: 1 }),
842
+ maxBufferedBytes: Type.Integer({ minimum: 1 }),
843
+ tickIntervalMs: Type.Integer({ minimum: 1 })
844
+ }, { additionalProperties: false })
845
+ }, { additionalProperties: false });
846
+ const ErrorShapeSchema = Type.Object({
847
+ code: NonEmptyString,
848
+ message: NonEmptyString,
849
+ details: Type.Optional(Type.Unknown()),
850
+ retryable: Type.Optional(Type.Boolean()),
851
+ retryAfterMs: Type.Optional(Type.Integer({ minimum: 0 }))
852
+ }, { additionalProperties: false });
853
+ const RequestFrameSchema = Type.Object({
854
+ type: Type.Literal("req"),
855
+ id: NonEmptyString,
856
+ method: NonEmptyString,
857
+ params: Type.Optional(Type.Unknown())
858
+ }, { additionalProperties: false });
859
+ const ResponseFrameSchema = Type.Object({
860
+ type: Type.Literal("res"),
861
+ id: NonEmptyString,
862
+ ok: Type.Boolean(),
863
+ payload: Type.Optional(Type.Unknown()),
864
+ error: Type.Optional(ErrorShapeSchema)
865
+ }, { additionalProperties: false });
866
+ const EventFrameSchema = Type.Object({
867
+ type: Type.Literal("event"),
868
+ event: NonEmptyString,
869
+ payload: Type.Optional(Type.Unknown()),
870
+ seq: Type.Optional(Type.Integer({ minimum: 0 })),
871
+ stateVersion: Type.Optional(StateVersionSchema)
872
+ }, { additionalProperties: false });
873
+ const GatewayFrameSchema = Type.Union([
874
+ RequestFrameSchema,
875
+ ResponseFrameSchema,
876
+ EventFrameSchema
877
+ ], { discriminator: "type" });
878
+
879
+ //#endregion
880
+ //#region src/gateway/protocol/schema/logs-chat.ts
881
+ const LogsTailParamsSchema = Type.Object({
882
+ cursor: Type.Optional(Type.Integer({ minimum: 0 })),
883
+ limit: Type.Optional(Type.Integer({
884
+ minimum: 1,
885
+ maximum: 5e3
886
+ })),
887
+ maxBytes: Type.Optional(Type.Integer({
888
+ minimum: 1,
889
+ maximum: 1e6
890
+ }))
891
+ }, { additionalProperties: false });
892
+ const LogsTailResultSchema = Type.Object({
893
+ file: NonEmptyString,
894
+ cursor: Type.Integer({ minimum: 0 }),
895
+ size: Type.Integer({ minimum: 0 }),
896
+ lines: Type.Array(Type.String()),
897
+ truncated: Type.Optional(Type.Boolean()),
898
+ reset: Type.Optional(Type.Boolean())
899
+ }, { additionalProperties: false });
900
+ const ChatHistoryParamsSchema = Type.Object({
901
+ sessionKey: NonEmptyString,
902
+ limit: Type.Optional(Type.Integer({
903
+ minimum: 1,
904
+ maximum: 1e3
905
+ }))
906
+ }, { additionalProperties: false });
907
+ const ChatSendParamsSchema = Type.Object({
908
+ sessionKey: NonEmptyString,
909
+ message: Type.String(),
910
+ thinking: Type.Optional(Type.String()),
911
+ deliver: Type.Optional(Type.Boolean()),
912
+ attachments: Type.Optional(Type.Array(Type.Unknown())),
913
+ timeoutMs: Type.Optional(Type.Integer({ minimum: 0 })),
914
+ idempotencyKey: NonEmptyString
915
+ }, { additionalProperties: false });
916
+ const ChatAbortParamsSchema = Type.Object({
917
+ sessionKey: NonEmptyString,
918
+ runId: Type.Optional(NonEmptyString)
919
+ }, { additionalProperties: false });
920
+ const ChatInjectParamsSchema = Type.Object({
921
+ sessionKey: NonEmptyString,
922
+ message: NonEmptyString,
923
+ label: Type.Optional(Type.String({ maxLength: 100 }))
924
+ }, { additionalProperties: false });
925
+ const ChatEventSchema = Type.Object({
926
+ runId: NonEmptyString,
927
+ sessionKey: NonEmptyString,
928
+ seq: Type.Integer({ minimum: 0 }),
929
+ state: Type.Union([
930
+ Type.Literal("delta"),
931
+ Type.Literal("final"),
932
+ Type.Literal("aborted"),
933
+ Type.Literal("error")
934
+ ]),
935
+ message: Type.Optional(Type.Unknown()),
936
+ errorMessage: Type.Optional(Type.String()),
937
+ usage: Type.Optional(Type.Unknown()),
938
+ stopReason: Type.Optional(Type.String())
939
+ }, { additionalProperties: false });
940
+
941
+ //#endregion
942
+ //#region src/gateway/protocol/schema/nodes.ts
943
+ const NodePairRequestParamsSchema = Type.Object({
944
+ nodeId: NonEmptyString,
945
+ displayName: Type.Optional(NonEmptyString),
946
+ platform: Type.Optional(NonEmptyString),
947
+ version: Type.Optional(NonEmptyString),
948
+ coreVersion: Type.Optional(NonEmptyString),
949
+ uiVersion: Type.Optional(NonEmptyString),
950
+ deviceFamily: Type.Optional(NonEmptyString),
951
+ modelIdentifier: Type.Optional(NonEmptyString),
952
+ caps: Type.Optional(Type.Array(NonEmptyString)),
953
+ commands: Type.Optional(Type.Array(NonEmptyString)),
954
+ remoteIp: Type.Optional(NonEmptyString),
955
+ silent: Type.Optional(Type.Boolean())
956
+ }, { additionalProperties: false });
957
+ const NodePairListParamsSchema = Type.Object({}, { additionalProperties: false });
958
+ const NodePairApproveParamsSchema = Type.Object({ requestId: NonEmptyString }, { additionalProperties: false });
959
+ const NodePairRejectParamsSchema = Type.Object({ requestId: NonEmptyString }, { additionalProperties: false });
960
+ const NodePairVerifyParamsSchema = Type.Object({
961
+ nodeId: NonEmptyString,
962
+ token: NonEmptyString
963
+ }, { additionalProperties: false });
964
+ const NodeRenameParamsSchema = Type.Object({
965
+ nodeId: NonEmptyString,
966
+ displayName: NonEmptyString
967
+ }, { additionalProperties: false });
968
+ const NodeListParamsSchema = Type.Object({}, { additionalProperties: false });
969
+ const NodeDescribeParamsSchema = Type.Object({ nodeId: NonEmptyString }, { additionalProperties: false });
970
+ const NodeInvokeParamsSchema = Type.Object({
971
+ nodeId: NonEmptyString,
972
+ command: NonEmptyString,
973
+ params: Type.Optional(Type.Unknown()),
974
+ timeoutMs: Type.Optional(Type.Integer({ minimum: 0 })),
975
+ idempotencyKey: NonEmptyString
976
+ }, { additionalProperties: false });
977
+ const NodeInvokeResultParamsSchema = Type.Object({
978
+ id: NonEmptyString,
979
+ nodeId: NonEmptyString,
980
+ ok: Type.Boolean(),
981
+ payload: Type.Optional(Type.Unknown()),
982
+ payloadJSON: Type.Optional(Type.String()),
983
+ error: Type.Optional(Type.Object({
984
+ code: Type.Optional(NonEmptyString),
985
+ message: Type.Optional(NonEmptyString)
986
+ }, { additionalProperties: false }))
987
+ }, { additionalProperties: false });
988
+ const NodeEventParamsSchema = Type.Object({
989
+ event: NonEmptyString,
990
+ payload: Type.Optional(Type.Unknown()),
991
+ payloadJSON: Type.Optional(Type.String())
992
+ }, { additionalProperties: false });
993
+ const NodeInvokeRequestEventSchema = Type.Object({
994
+ id: NonEmptyString,
995
+ nodeId: NonEmptyString,
996
+ command: NonEmptyString,
997
+ paramsJSON: Type.Optional(Type.String()),
998
+ timeoutMs: Type.Optional(Type.Integer({ minimum: 0 })),
999
+ idempotencyKey: Type.Optional(NonEmptyString)
1000
+ }, { additionalProperties: false });
1001
+
1002
+ //#endregion
1003
+ //#region src/gateway/protocol/schema/push.ts
1004
+ const ApnsEnvironmentSchema = Type.String({ enum: ["sandbox", "production"] });
1005
+ const PushTestParamsSchema = Type.Object({
1006
+ nodeId: NonEmptyString,
1007
+ title: Type.Optional(Type.String()),
1008
+ body: Type.Optional(Type.String()),
1009
+ environment: Type.Optional(ApnsEnvironmentSchema)
1010
+ }, { additionalProperties: false });
1011
+ const PushTestResultSchema = Type.Object({
1012
+ ok: Type.Boolean(),
1013
+ status: Type.Integer(),
1014
+ apnsId: Type.Optional(Type.String()),
1015
+ reason: Type.Optional(Type.String()),
1016
+ tokenSuffix: Type.String(),
1017
+ topic: Type.String(),
1018
+ environment: ApnsEnvironmentSchema
1019
+ }, { additionalProperties: false });
1020
+
1021
+ //#endregion
1022
+ //#region src/gateway/protocol/schema/sessions.ts
1023
+ const SessionsListParamsSchema = Type.Object({
1024
+ limit: Type.Optional(Type.Integer({ minimum: 1 })),
1025
+ activeMinutes: Type.Optional(Type.Integer({ minimum: 1 })),
1026
+ includeGlobal: Type.Optional(Type.Boolean()),
1027
+ includeUnknown: Type.Optional(Type.Boolean()),
1028
+ includeDerivedTitles: Type.Optional(Type.Boolean()),
1029
+ includeLastMessage: Type.Optional(Type.Boolean()),
1030
+ label: Type.Optional(SessionLabelString),
1031
+ spawnedBy: Type.Optional(NonEmptyString),
1032
+ agentId: Type.Optional(NonEmptyString),
1033
+ search: Type.Optional(Type.String())
1034
+ }, { additionalProperties: false });
1035
+ const SessionsPreviewParamsSchema = Type.Object({
1036
+ keys: Type.Array(NonEmptyString, { minItems: 1 }),
1037
+ limit: Type.Optional(Type.Integer({ minimum: 1 })),
1038
+ maxChars: Type.Optional(Type.Integer({ minimum: 20 }))
1039
+ }, { additionalProperties: false });
1040
+ const SessionsResolveParamsSchema = Type.Object({
1041
+ key: Type.Optional(NonEmptyString),
1042
+ sessionId: Type.Optional(NonEmptyString),
1043
+ label: Type.Optional(SessionLabelString),
1044
+ agentId: Type.Optional(NonEmptyString),
1045
+ spawnedBy: Type.Optional(NonEmptyString),
1046
+ includeGlobal: Type.Optional(Type.Boolean()),
1047
+ includeUnknown: Type.Optional(Type.Boolean())
1048
+ }, { additionalProperties: false });
1049
+ const SessionsPatchParamsSchema = Type.Object({
1050
+ key: NonEmptyString,
1051
+ label: Type.Optional(Type.Union([SessionLabelString, Type.Null()])),
1052
+ verboseLevel: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1053
+ responseUsage: Type.Optional(Type.Union([
1054
+ Type.Literal("off"),
1055
+ Type.Literal("tokens"),
1056
+ Type.Literal("full"),
1057
+ Type.Literal("on"),
1058
+ Type.Null()
1059
+ ])),
1060
+ elevatedLevel: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1061
+ execHost: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1062
+ execSecurity: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1063
+ execAsk: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1064
+ execNode: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1065
+ model: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1066
+ spawnedBy: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1067
+ spawnDepth: Type.Optional(Type.Union([Type.Integer({ minimum: 0 }), Type.Null()])),
1068
+ sendPolicy: Type.Optional(Type.Union([
1069
+ Type.Literal("allow"),
1070
+ Type.Literal("deny"),
1071
+ Type.Null()
1072
+ ])),
1073
+ groupActivation: Type.Optional(Type.Union([
1074
+ Type.Literal("mention"),
1075
+ Type.Literal("always"),
1076
+ Type.Null()
1077
+ ]))
1078
+ }, { additionalProperties: false });
1079
+ const SessionsResetParamsSchema = Type.Object({
1080
+ key: NonEmptyString,
1081
+ reason: Type.Optional(Type.Union([Type.Literal("new"), Type.Literal("reset")]))
1082
+ }, { additionalProperties: false });
1083
+ const SessionsDeleteParamsSchema = Type.Object({
1084
+ key: NonEmptyString,
1085
+ deleteTranscript: Type.Optional(Type.Boolean()),
1086
+ emitLifecycleHooks: Type.Optional(Type.Boolean())
1087
+ }, { additionalProperties: false });
1088
+ const SessionsCompactParamsSchema = Type.Object({
1089
+ key: NonEmptyString,
1090
+ maxLines: Type.Optional(Type.Integer({ minimum: 1 }))
1091
+ }, { additionalProperties: false });
1092
+ const SessionsUsageParamsSchema = Type.Object({
1093
+ key: Type.Optional(NonEmptyString),
1094
+ startDate: Type.Optional(Type.String({ pattern: "^\\d{4}-\\d{2}-\\d{2}$" })),
1095
+ endDate: Type.Optional(Type.String({ pattern: "^\\d{4}-\\d{2}-\\d{2}$" })),
1096
+ mode: Type.Optional(Type.Union([
1097
+ Type.Literal("utc"),
1098
+ Type.Literal("gateway"),
1099
+ Type.Literal("specific")
1100
+ ])),
1101
+ utcOffset: Type.Optional(Type.String({ pattern: "^UTC[+-]\\d{1,2}(?::[0-5]\\d)?$" })),
1102
+ limit: Type.Optional(Type.Integer({ minimum: 1 })),
1103
+ includeContextWeight: Type.Optional(Type.Boolean())
1104
+ }, { additionalProperties: false });
1105
+
1106
+ //#endregion
1107
+ //#region src/gateway/protocol/schema/wizard.ts
1108
+ const WizardRunStatusSchema = Type.Union([
1109
+ Type.Literal("running"),
1110
+ Type.Literal("done"),
1111
+ Type.Literal("cancelled"),
1112
+ Type.Literal("error")
1113
+ ]);
1114
+ const WizardStartParamsSchema = Type.Object({
1115
+ mode: Type.Optional(Type.Union([Type.Literal("local"), Type.Literal("remote")])),
1116
+ workspace: Type.Optional(Type.String())
1117
+ }, { additionalProperties: false });
1118
+ const WizardAnswerSchema = Type.Object({
1119
+ stepId: NonEmptyString,
1120
+ value: Type.Optional(Type.Unknown())
1121
+ }, { additionalProperties: false });
1122
+ const WizardNextParamsSchema = Type.Object({
1123
+ sessionId: NonEmptyString,
1124
+ answer: Type.Optional(WizardAnswerSchema)
1125
+ }, { additionalProperties: false });
1126
+ const WizardSessionIdParamsSchema = Type.Object({ sessionId: NonEmptyString }, { additionalProperties: false });
1127
+ const WizardCancelParamsSchema = WizardSessionIdParamsSchema;
1128
+ const WizardStatusParamsSchema = WizardSessionIdParamsSchema;
1129
+ const WizardStepOptionSchema = Type.Object({
1130
+ value: Type.Unknown(),
1131
+ label: NonEmptyString,
1132
+ hint: Type.Optional(Type.String())
1133
+ }, { additionalProperties: false });
1134
+ const WizardStepSchema = Type.Object({
1135
+ id: NonEmptyString,
1136
+ type: Type.Union([
1137
+ Type.Literal("note"),
1138
+ Type.Literal("select"),
1139
+ Type.Literal("text"),
1140
+ Type.Literal("confirm"),
1141
+ Type.Literal("multiselect"),
1142
+ Type.Literal("progress"),
1143
+ Type.Literal("action")
1144
+ ]),
1145
+ title: Type.Optional(Type.String()),
1146
+ message: Type.Optional(Type.String()),
1147
+ options: Type.Optional(Type.Array(WizardStepOptionSchema)),
1148
+ initialValue: Type.Optional(Type.Unknown()),
1149
+ placeholder: Type.Optional(Type.String()),
1150
+ sensitive: Type.Optional(Type.Boolean()),
1151
+ executor: Type.Optional(Type.Union([Type.Literal("gateway"), Type.Literal("client")]))
1152
+ }, { additionalProperties: false });
1153
+ const WizardResultFields = {
1154
+ done: Type.Boolean(),
1155
+ step: Type.Optional(WizardStepSchema),
1156
+ status: Type.Optional(WizardRunStatusSchema),
1157
+ error: Type.Optional(Type.String())
1158
+ };
1159
+ const WizardNextResultSchema = Type.Object(WizardResultFields, { additionalProperties: false });
1160
+ const WizardStartResultSchema = Type.Object({
1161
+ sessionId: NonEmptyString,
1162
+ ...WizardResultFields
1163
+ }, { additionalProperties: false });
1164
+ const WizardStatusResultSchema = Type.Object({
1165
+ status: WizardRunStatusSchema,
1166
+ error: Type.Optional(Type.String())
1167
+ }, { additionalProperties: false });
1168
+
1169
+ //#endregion
1170
+ //#region src/gateway/protocol/index.ts
1171
+ const ajv = new AjvPkg({
1172
+ allErrors: true,
1173
+ strict: false,
1174
+ removeAdditional: false
1175
+ });
1176
+ const validateConnectParams = ajv.compile(ConnectParamsSchema);
1177
+ const validateRequestFrame = ajv.compile(RequestFrameSchema);
1178
+ const validateResponseFrame = ajv.compile(ResponseFrameSchema);
1179
+ const validateEventFrame = ajv.compile(EventFrameSchema);
1180
+ const validateSendParams = ajv.compile(SendParamsSchema);
1181
+ const validatePollParams = ajv.compile(PollParamsSchema);
1182
+ const validateAgentParams = ajv.compile(AgentParamsSchema);
1183
+ const validateAgentIdentityParams = ajv.compile(AgentIdentityParamsSchema);
1184
+ const validateAgentWaitParams = ajv.compile(AgentWaitParamsSchema);
1185
+ const validateWakeParams = ajv.compile(WakeParamsSchema);
1186
+ const validateAgentsListParams = ajv.compile(AgentsListParamsSchema);
1187
+ const validateAgentsCreateParams = ajv.compile(AgentsCreateParamsSchema);
1188
+ const validateAgentsUpdateParams = ajv.compile(AgentsUpdateParamsSchema);
1189
+ const validateAgentsDeleteParams = ajv.compile(AgentsDeleteParamsSchema);
1190
+ const validateAgentsFilesListParams = ajv.compile(AgentsFilesListParamsSchema);
1191
+ const validateAgentsFilesGetParams = ajv.compile(AgentsFilesGetParamsSchema);
1192
+ const validateAgentsFilesSetParams = ajv.compile(AgentsFilesSetParamsSchema);
1193
+ const validateNodePairRequestParams = ajv.compile(NodePairRequestParamsSchema);
1194
+ const validateNodePairListParams = ajv.compile(NodePairListParamsSchema);
1195
+ const validateNodePairApproveParams = ajv.compile(NodePairApproveParamsSchema);
1196
+ const validateNodePairRejectParams = ajv.compile(NodePairRejectParamsSchema);
1197
+ const validateNodePairVerifyParams = ajv.compile(NodePairVerifyParamsSchema);
1198
+ const validateNodeRenameParams = ajv.compile(NodeRenameParamsSchema);
1199
+ const validateNodeListParams = ajv.compile(NodeListParamsSchema);
1200
+ const validateNodeDescribeParams = ajv.compile(NodeDescribeParamsSchema);
1201
+ const validateNodeInvokeParams = ajv.compile(NodeInvokeParamsSchema);
1202
+ const validateNodeInvokeResultParams = ajv.compile(NodeInvokeResultParamsSchema);
1203
+ const validateNodeEventParams = ajv.compile(NodeEventParamsSchema);
1204
+ const validatePushTestParams = ajv.compile(PushTestParamsSchema);
1205
+ const validateSessionsListParams = ajv.compile(SessionsListParamsSchema);
1206
+ const validateSessionsPreviewParams = ajv.compile(SessionsPreviewParamsSchema);
1207
+ const validateSessionsResolveParams = ajv.compile(SessionsResolveParamsSchema);
1208
+ const validateSessionsPatchParams = ajv.compile(SessionsPatchParamsSchema);
1209
+ const validateSessionsResetParams = ajv.compile(SessionsResetParamsSchema);
1210
+ const validateSessionsDeleteParams = ajv.compile(SessionsDeleteParamsSchema);
1211
+ const validateSessionsCompactParams = ajv.compile(SessionsCompactParamsSchema);
1212
+ const validateSessionsUsageParams = ajv.compile(SessionsUsageParamsSchema);
1213
+ const validateConfigGetParams = ajv.compile(ConfigGetParamsSchema);
1214
+ const validateConfigSetParams = ajv.compile(ConfigSetParamsSchema);
1215
+ const validateConfigApplyParams = ajv.compile(ConfigApplyParamsSchema);
1216
+ const validateConfigPatchParams = ajv.compile(ConfigPatchParamsSchema);
1217
+ const validateConfigSchemaParams = ajv.compile(ConfigSchemaParamsSchema);
1218
+ const validateWizardStartParams = ajv.compile(WizardStartParamsSchema);
1219
+ const validateWizardNextParams = ajv.compile(WizardNextParamsSchema);
1220
+ const validateWizardCancelParams = ajv.compile(WizardCancelParamsSchema);
1221
+ const validateWizardStatusParams = ajv.compile(WizardStatusParamsSchema);
1222
+ const validateTalkModeParams = ajv.compile(TalkModeParamsSchema);
1223
+ const validateTalkConfigParams = ajv.compile(TalkConfigParamsSchema);
1224
+ const validateChannelsStatusParams = ajv.compile(ChannelsStatusParamsSchema);
1225
+ const validateChannelsLogoutParams = ajv.compile(ChannelsLogoutParamsSchema);
1226
+ const validateModelsListParams = ajv.compile(ModelsListParamsSchema);
1227
+ const validateToolsCatalogParams = ajv.compile(ToolsCatalogParamsSchema);
1228
+ const validateCronListParams = ajv.compile(CronListParamsSchema);
1229
+ const validateCronStatusParams = ajv.compile(CronStatusParamsSchema);
1230
+ const validateCronAddParams = ajv.compile(CronAddParamsSchema);
1231
+ const validateCronUpdateParams = ajv.compile(CronUpdateParamsSchema);
1232
+ const validateCronRemoveParams = ajv.compile(CronRemoveParamsSchema);
1233
+ const validateCronRunParams = ajv.compile(CronRunParamsSchema);
1234
+ const validateCronRunsParams = ajv.compile(CronRunsParamsSchema);
1235
+ const validateDevicePairListParams = ajv.compile(DevicePairListParamsSchema);
1236
+ const validateDevicePairApproveParams = ajv.compile(DevicePairApproveParamsSchema);
1237
+ const validateDevicePairRejectParams = ajv.compile(DevicePairRejectParamsSchema);
1238
+ const validateDevicePairRemoveParams = ajv.compile(DevicePairRemoveParamsSchema);
1239
+ const validateDeviceTokenRotateParams = ajv.compile(DeviceTokenRotateParamsSchema);
1240
+ const validateDeviceTokenRevokeParams = ajv.compile(DeviceTokenRevokeParamsSchema);
1241
+ const validateLogsTailParams = ajv.compile(LogsTailParamsSchema);
1242
+ const validateChatHistoryParams = ajv.compile(ChatHistoryParamsSchema);
1243
+ const validateChatSendParams = ajv.compile(ChatSendParamsSchema);
1244
+ const validateChatAbortParams = ajv.compile(ChatAbortParamsSchema);
1245
+ const validateChatInjectParams = ajv.compile(ChatInjectParamsSchema);
1246
+ const validateChatEvent = ajv.compile(ChatEventSchema);
1247
+ const validateUpdateRunParams = ajv.compile(UpdateRunParamsSchema);
1248
+ const validateWebLoginStartParams = ajv.compile(WebLoginStartParamsSchema);
1249
+ const validateWebLoginWaitParams = ajv.compile(WebLoginWaitParamsSchema);
1250
+
1251
+ //#endregion
1252
+ //#region src/gateway/method-scopes.ts
1253
+ const ADMIN_SCOPE = "operator.admin";
1254
+ const READ_SCOPE = "operator.read";
1255
+ const WRITE_SCOPE = "operator.write";
1256
+ const APPROVALS_SCOPE = "operator.approvals";
1257
+ const PAIRING_SCOPE = "operator.pairing";
1258
+ const METHOD_SCOPE_GROUPS = {
1259
+ [APPROVALS_SCOPE]: [
1260
+ "exec.approval.request",
1261
+ "exec.approval.waitDecision",
1262
+ "exec.approval.resolve"
1263
+ ],
1264
+ [PAIRING_SCOPE]: [
1265
+ "node.pair.request",
1266
+ "node.pair.list",
1267
+ "node.pair.approve",
1268
+ "node.pair.reject",
1269
+ "node.pair.verify",
1270
+ "device.pair.list",
1271
+ "device.pair.approve",
1272
+ "device.pair.reject",
1273
+ "device.pair.remove",
1274
+ "device.token.rotate",
1275
+ "device.token.revoke",
1276
+ "node.rename"
1277
+ ],
1278
+ [READ_SCOPE]: [
1279
+ "health",
1280
+ "logs.tail",
1281
+ "channels.status",
1282
+ "status",
1283
+ "usage.status",
1284
+ "usage.cost",
1285
+ "tts.status",
1286
+ "tts.providers",
1287
+ "models.list",
1288
+ "tools.catalog",
1289
+ "plugin:tools:list",
1290
+ "agents.list",
1291
+ "agent.identity.get",
1292
+ "voicewake.get",
1293
+ "sessions.list",
1294
+ "sessions.preview",
1295
+ "sessions.resolve",
1296
+ "sessions.usage",
1297
+ "sessions.usage.timeseries",
1298
+ "sessions.usage.logs",
1299
+ "cron.list",
1300
+ "cron.status",
1301
+ "cron.runs",
1302
+ "system-presence",
1303
+ "last-heartbeat",
1304
+ "node.list",
1305
+ "node.describe",
1306
+ "chat.history",
1307
+ "config.get",
1308
+ "talk.config",
1309
+ "agents.files.list",
1310
+ "agents.files.get"
1311
+ ],
1312
+ [WRITE_SCOPE]: [
1313
+ "send",
1314
+ "poll",
1315
+ "agent",
1316
+ "agent.wait",
1317
+ "wake",
1318
+ "talk.mode",
1319
+ "tts.enable",
1320
+ "tts.disable",
1321
+ "tts.convert",
1322
+ "tts.setProvider",
1323
+ "voicewake.set",
1324
+ "node.invoke",
1325
+ "sessions.spawn",
1326
+ "sessions.subagents",
1327
+ "chat.send",
1328
+ "chat.abort",
1329
+ "browser.request",
1330
+ "push.test",
1331
+ "hooks.tool.before",
1332
+ "hooks.tool.after",
1333
+ "plugin:tools:invoke",
1334
+ "message:send",
1335
+ "message:reply",
1336
+ "message:thread-reply",
1337
+ "message:broadcast",
1338
+ "message:sendAttachment",
1339
+ "message:sendWithEffect"
1340
+ ],
1341
+ [ADMIN_SCOPE]: [
1342
+ "channels.logout",
1343
+ "agents.create",
1344
+ "agents.update",
1345
+ "agents.delete",
1346
+ "cron.add",
1347
+ "cron.update",
1348
+ "cron.remove",
1349
+ "cron.run",
1350
+ "sessions.patch",
1351
+ "sessions.reset",
1352
+ "sessions.delete",
1353
+ "sessions.compact",
1354
+ "connect",
1355
+ "chat.inject",
1356
+ "web.login.start",
1357
+ "web.login.wait",
1358
+ "set-heartbeats",
1359
+ "system-event",
1360
+ "agents.files.set",
1361
+ "message:delete",
1362
+ "message:react",
1363
+ "message:pin",
1364
+ "message:readMessages"
1365
+ ]
1366
+ };
1367
+ const METHOD_SCOPE_BY_NAME = new Map(Object.entries(METHOD_SCOPE_GROUPS).flatMap(([scope, methods]) => methods.map((method) => [method, scope])));
1368
+
1369
+ //#endregion
1370
+ //#region src/logging/diagnostic-session-state.ts
1371
+ const SESSION_STATE_TTL_MS = 1800 * 1e3;
1372
+ const SESSION_STATE_PRUNE_INTERVAL_MS = 60 * 1e3;
1373
+
1374
+ //#endregion
1375
+ //#region src/logging/diagnostic.ts
1376
+ const diag = createSubsystemLogger("diagnostic");
1377
+
1378
+ //#endregion
1379
+ //#region src/infra/outbound/session-binding-service.ts
1380
+ function normalizeConversationRef(ref) {
1381
+ return {
1382
+ channel: ref.channel.trim().toLowerCase(),
1383
+ accountId: normalizeAccountId(ref.accountId),
1384
+ conversationId: ref.conversationId.trim(),
1385
+ parentConversationId: ref.parentConversationId?.trim() || void 0
1386
+ };
1387
+ }
1388
+ function toAdapterKey(params) {
1389
+ return `${params.channel.trim().toLowerCase()}:${normalizeAccountId(params.accountId)}`;
1390
+ }
1391
+ const ADAPTERS_BY_CHANNEL_ACCOUNT = /* @__PURE__ */ new Map();
1392
+ function resolveAdapterForConversation(ref) {
1393
+ const normalized = normalizeConversationRef(ref);
1394
+ const key = toAdapterKey({
1395
+ channel: normalized.channel,
1396
+ accountId: normalized.accountId
1397
+ });
1398
+ return ADAPTERS_BY_CHANNEL_ACCOUNT.get(key) ?? null;
1399
+ }
1400
+ function dedupeBindings(records) {
1401
+ const byId = /* @__PURE__ */ new Map();
1402
+ for (const record of records) {
1403
+ if (!record?.bindingId) continue;
1404
+ byId.set(record.bindingId, record);
1405
+ }
1406
+ return [...byId.values()];
1407
+ }
1408
+ function createDefaultSessionBindingService() {
1409
+ return {
1410
+ bind: async (input) => {
1411
+ const normalizedConversation = normalizeConversationRef(input.conversation);
1412
+ const adapter = resolveAdapterForConversation(normalizedConversation);
1413
+ if (!adapter?.bind) throw new Error(`Session binding adapter unavailable for ${normalizedConversation.channel}:${normalizedConversation.accountId}`);
1414
+ const bound = await adapter.bind({
1415
+ ...input,
1416
+ conversation: normalizedConversation
1417
+ });
1418
+ if (!bound) throw new Error("Session binding adapter failed to bind target conversation");
1419
+ return bound;
1420
+ },
1421
+ listBySession: (targetSessionKey) => {
1422
+ const key = targetSessionKey.trim();
1423
+ if (!key) return [];
1424
+ const results = [];
1425
+ for (const adapter of ADAPTERS_BY_CHANNEL_ACCOUNT.values()) {
1426
+ const entries = adapter.listBySession(key);
1427
+ if (entries.length > 0) results.push(...entries);
1428
+ }
1429
+ return dedupeBindings(results);
1430
+ },
1431
+ resolveByConversation: (ref) => {
1432
+ const normalized = normalizeConversationRef(ref);
1433
+ if (!normalized.channel || !normalized.conversationId) return null;
1434
+ const adapter = resolveAdapterForConversation(normalized);
1435
+ if (!adapter) return null;
1436
+ return adapter.resolveByConversation(normalized);
1437
+ },
1438
+ touch: (bindingId, at) => {
1439
+ const normalizedBindingId = bindingId.trim();
1440
+ if (!normalizedBindingId) return;
1441
+ for (const adapter of ADAPTERS_BY_CHANNEL_ACCOUNT.values()) adapter.touch?.(normalizedBindingId, at);
1442
+ },
1443
+ unbind: async (input) => {
1444
+ const removed = [];
1445
+ for (const adapter of ADAPTERS_BY_CHANNEL_ACCOUNT.values()) {
1446
+ if (!adapter.unbind) continue;
1447
+ const entries = await adapter.unbind(input);
1448
+ if (entries.length > 0) removed.push(...entries);
1449
+ }
1450
+ return dedupeBindings(removed);
1451
+ }
1452
+ };
1453
+ }
1454
+ const DEFAULT_SESSION_BINDING_SERVICE = createDefaultSessionBindingService();
1455
+
1456
+ //#endregion
1457
+ //#region src/agents/tool-display.json
1458
+ var tool_display_default = {
1459
+ version: 1,
1460
+ fallback: {
1461
+ "emoji": "🧩",
1462
+ "detailKeys": [
1463
+ "command",
1464
+ "path",
1465
+ "url",
1466
+ "targetUrl",
1467
+ "targetId",
1468
+ "ref",
1469
+ "element",
1470
+ "node",
1471
+ "nodeId",
1472
+ "id",
1473
+ "requestId",
1474
+ "to",
1475
+ "channelId",
1476
+ "guildId",
1477
+ "userId",
1478
+ "name",
1479
+ "query",
1480
+ "pattern",
1481
+ "messageId"
1482
+ ]
1483
+ },
1484
+ tools: {
1485
+ "attach": {
1486
+ "emoji": "📎",
1487
+ "title": "Attach",
1488
+ "detailKeys": [
1489
+ "path",
1490
+ "url",
1491
+ "fileName"
1492
+ ]
1493
+ },
1494
+ "browser": {
1495
+ "emoji": "🌐",
1496
+ "title": "Browser",
1497
+ "actions": {
1498
+ "status": { "label": "status" },
1499
+ "start": { "label": "start" },
1500
+ "stop": { "label": "stop" },
1501
+ "tabs": { "label": "tabs" },
1502
+ "open": {
1503
+ "label": "open",
1504
+ "detailKeys": ["targetUrl"]
1505
+ },
1506
+ "focus": {
1507
+ "label": "focus",
1508
+ "detailKeys": ["targetId"]
1509
+ },
1510
+ "close": {
1511
+ "label": "close",
1512
+ "detailKeys": ["targetId"]
1513
+ },
1514
+ "snapshot": {
1515
+ "label": "snapshot",
1516
+ "detailKeys": [
1517
+ "targetUrl",
1518
+ "targetId",
1519
+ "ref",
1520
+ "element",
1521
+ "format"
1522
+ ]
1523
+ },
1524
+ "screenshot": {
1525
+ "label": "screenshot",
1526
+ "detailKeys": [
1527
+ "targetUrl",
1528
+ "targetId",
1529
+ "ref",
1530
+ "element"
1531
+ ]
1532
+ },
1533
+ "navigate": {
1534
+ "label": "navigate",
1535
+ "detailKeys": ["targetUrl", "targetId"]
1536
+ },
1537
+ "console": {
1538
+ "label": "console",
1539
+ "detailKeys": ["level", "targetId"]
1540
+ },
1541
+ "pdf": {
1542
+ "label": "pdf",
1543
+ "detailKeys": ["targetId"]
1544
+ },
1545
+ "upload": {
1546
+ "label": "upload",
1547
+ "detailKeys": [
1548
+ "paths",
1549
+ "ref",
1550
+ "inputRef",
1551
+ "element",
1552
+ "targetId"
1553
+ ]
1554
+ },
1555
+ "dialog": {
1556
+ "label": "dialog",
1557
+ "detailKeys": [
1558
+ "accept",
1559
+ "promptText",
1560
+ "targetId"
1561
+ ]
1562
+ },
1563
+ "act": {
1564
+ "label": "act",
1565
+ "detailKeys": [
1566
+ "request.kind",
1567
+ "request.ref",
1568
+ "request.selector",
1569
+ "request.text",
1570
+ "request.value"
1571
+ ]
1572
+ }
1573
+ }
1574
+ },
1575
+ "canvas": {
1576
+ "emoji": "🖼️",
1577
+ "title": "Canvas",
1578
+ "actions": {
1579
+ "present": {
1580
+ "label": "present",
1581
+ "detailKeys": [
1582
+ "target",
1583
+ "node",
1584
+ "nodeId"
1585
+ ]
1586
+ },
1587
+ "hide": {
1588
+ "label": "hide",
1589
+ "detailKeys": ["node", "nodeId"]
1590
+ },
1591
+ "navigate": {
1592
+ "label": "navigate",
1593
+ "detailKeys": [
1594
+ "url",
1595
+ "node",
1596
+ "nodeId"
1597
+ ]
1598
+ },
1599
+ "eval": {
1600
+ "label": "eval",
1601
+ "detailKeys": [
1602
+ "javaScript",
1603
+ "node",
1604
+ "nodeId"
1605
+ ]
1606
+ },
1607
+ "snapshot": {
1608
+ "label": "snapshot",
1609
+ "detailKeys": [
1610
+ "format",
1611
+ "node",
1612
+ "nodeId"
1613
+ ]
1614
+ },
1615
+ "a2ui_push": {
1616
+ "label": "A2UI push",
1617
+ "detailKeys": [
1618
+ "jsonlPath",
1619
+ "node",
1620
+ "nodeId"
1621
+ ]
1622
+ },
1623
+ "a2ui_reset": {
1624
+ "label": "A2UI reset",
1625
+ "detailKeys": ["node", "nodeId"]
1626
+ }
1627
+ }
1628
+ },
1629
+ "nodes": {
1630
+ "emoji": "📱",
1631
+ "title": "Nodes",
1632
+ "actions": {
1633
+ "status": { "label": "status" },
1634
+ "describe": {
1635
+ "label": "describe",
1636
+ "detailKeys": ["node", "nodeId"]
1637
+ },
1638
+ "pending": { "label": "pending" },
1639
+ "approve": {
1640
+ "label": "approve",
1641
+ "detailKeys": ["requestId"]
1642
+ },
1643
+ "reject": {
1644
+ "label": "reject",
1645
+ "detailKeys": ["requestId"]
1646
+ },
1647
+ "notify": {
1648
+ "label": "notify",
1649
+ "detailKeys": [
1650
+ "node",
1651
+ "nodeId",
1652
+ "title",
1653
+ "body"
1654
+ ]
1655
+ },
1656
+ "camera_snap": {
1657
+ "label": "camera snap",
1658
+ "detailKeys": [
1659
+ "node",
1660
+ "nodeId",
1661
+ "facing",
1662
+ "deviceId"
1663
+ ]
1664
+ },
1665
+ "camera_list": {
1666
+ "label": "camera list",
1667
+ "detailKeys": ["node", "nodeId"]
1668
+ },
1669
+ "camera_clip": {
1670
+ "label": "camera clip",
1671
+ "detailKeys": [
1672
+ "node",
1673
+ "nodeId",
1674
+ "facing",
1675
+ "duration",
1676
+ "durationMs"
1677
+ ]
1678
+ },
1679
+ "screen_record": {
1680
+ "label": "screen record",
1681
+ "detailKeys": [
1682
+ "node",
1683
+ "nodeId",
1684
+ "duration",
1685
+ "durationMs",
1686
+ "fps",
1687
+ "screenIndex"
1688
+ ]
1689
+ }
1690
+ }
1691
+ },
1692
+ "cron": {
1693
+ "emoji": "⏰",
1694
+ "title": "Cron",
1695
+ "actions": {
1696
+ "status": { "label": "status" },
1697
+ "list": { "label": "list" },
1698
+ "add": {
1699
+ "label": "add",
1700
+ "detailKeys": [
1701
+ "job.name",
1702
+ "job.id",
1703
+ "job.schedule",
1704
+ "job.cron"
1705
+ ]
1706
+ },
1707
+ "update": {
1708
+ "label": "update",
1709
+ "detailKeys": ["id"]
1710
+ },
1711
+ "remove": {
1712
+ "label": "remove",
1713
+ "detailKeys": ["id"]
1714
+ },
1715
+ "run": {
1716
+ "label": "run",
1717
+ "detailKeys": ["id"]
1718
+ },
1719
+ "runs": {
1720
+ "label": "runs",
1721
+ "detailKeys": ["id"]
1722
+ },
1723
+ "wake": {
1724
+ "label": "wake",
1725
+ "detailKeys": ["text", "mode"]
1726
+ }
1727
+ }
1728
+ },
1729
+ "gateway": {
1730
+ "emoji": "🔌",
1731
+ "title": "Gateway",
1732
+ "actions": { "restart": {
1733
+ "label": "restart",
1734
+ "detailKeys": ["reason", "delayMs"]
1735
+ } }
1736
+ },
1737
+ "message": {
1738
+ "emoji": "✉️",
1739
+ "title": "Message",
1740
+ "actions": {
1741
+ "send": {
1742
+ "label": "send",
1743
+ "detailKeys": [
1744
+ "provider",
1745
+ "to",
1746
+ "media",
1747
+ "replyTo",
1748
+ "threadId"
1749
+ ]
1750
+ },
1751
+ "poll": {
1752
+ "label": "poll",
1753
+ "detailKeys": [
1754
+ "provider",
1755
+ "to",
1756
+ "pollQuestion"
1757
+ ]
1758
+ },
1759
+ "react": {
1760
+ "label": "react",
1761
+ "detailKeys": [
1762
+ "provider",
1763
+ "to",
1764
+ "messageId",
1765
+ "emoji",
1766
+ "remove"
1767
+ ]
1768
+ },
1769
+ "reactions": {
1770
+ "label": "reactions",
1771
+ "detailKeys": [
1772
+ "provider",
1773
+ "to",
1774
+ "messageId",
1775
+ "limit"
1776
+ ]
1777
+ },
1778
+ "read": {
1779
+ "label": "read",
1780
+ "detailKeys": [
1781
+ "provider",
1782
+ "to",
1783
+ "limit"
1784
+ ]
1785
+ },
1786
+ "edit": {
1787
+ "label": "edit",
1788
+ "detailKeys": [
1789
+ "provider",
1790
+ "to",
1791
+ "messageId"
1792
+ ]
1793
+ },
1794
+ "delete": {
1795
+ "label": "delete",
1796
+ "detailKeys": [
1797
+ "provider",
1798
+ "to",
1799
+ "messageId"
1800
+ ]
1801
+ },
1802
+ "pin": {
1803
+ "label": "pin",
1804
+ "detailKeys": [
1805
+ "provider",
1806
+ "to",
1807
+ "messageId"
1808
+ ]
1809
+ },
1810
+ "unpin": {
1811
+ "label": "unpin",
1812
+ "detailKeys": [
1813
+ "provider",
1814
+ "to",
1815
+ "messageId"
1816
+ ]
1817
+ },
1818
+ "list-pins": {
1819
+ "label": "list pins",
1820
+ "detailKeys": ["provider", "to"]
1821
+ },
1822
+ "permissions": {
1823
+ "label": "permissions",
1824
+ "detailKeys": [
1825
+ "provider",
1826
+ "channelId",
1827
+ "to"
1828
+ ]
1829
+ },
1830
+ "thread-create": {
1831
+ "label": "thread create",
1832
+ "detailKeys": [
1833
+ "provider",
1834
+ "channelId",
1835
+ "threadName"
1836
+ ]
1837
+ },
1838
+ "thread-list": {
1839
+ "label": "thread list",
1840
+ "detailKeys": [
1841
+ "provider",
1842
+ "guildId",
1843
+ "channelId"
1844
+ ]
1845
+ },
1846
+ "thread-reply": {
1847
+ "label": "thread reply",
1848
+ "detailKeys": [
1849
+ "provider",
1850
+ "channelId",
1851
+ "messageId"
1852
+ ]
1853
+ },
1854
+ "search": {
1855
+ "label": "search",
1856
+ "detailKeys": [
1857
+ "provider",
1858
+ "guildId",
1859
+ "query"
1860
+ ]
1861
+ },
1862
+ "sticker": {
1863
+ "label": "sticker",
1864
+ "detailKeys": [
1865
+ "provider",
1866
+ "to",
1867
+ "stickerId"
1868
+ ]
1869
+ },
1870
+ "member-info": {
1871
+ "label": "member",
1872
+ "detailKeys": [
1873
+ "provider",
1874
+ "guildId",
1875
+ "userId"
1876
+ ]
1877
+ },
1878
+ "role-info": {
1879
+ "label": "roles",
1880
+ "detailKeys": ["provider", "guildId"]
1881
+ },
1882
+ "emoji-list": {
1883
+ "label": "emoji list",
1884
+ "detailKeys": ["provider", "guildId"]
1885
+ },
1886
+ "emoji-upload": {
1887
+ "label": "emoji upload",
1888
+ "detailKeys": [
1889
+ "provider",
1890
+ "guildId",
1891
+ "emojiName"
1892
+ ]
1893
+ },
1894
+ "sticker-upload": {
1895
+ "label": "sticker upload",
1896
+ "detailKeys": [
1897
+ "provider",
1898
+ "guildId",
1899
+ "stickerName"
1900
+ ]
1901
+ },
1902
+ "role-add": {
1903
+ "label": "role add",
1904
+ "detailKeys": [
1905
+ "provider",
1906
+ "guildId",
1907
+ "userId",
1908
+ "roleId"
1909
+ ]
1910
+ },
1911
+ "role-remove": {
1912
+ "label": "role remove",
1913
+ "detailKeys": [
1914
+ "provider",
1915
+ "guildId",
1916
+ "userId",
1917
+ "roleId"
1918
+ ]
1919
+ },
1920
+ "channel-info": {
1921
+ "label": "channel",
1922
+ "detailKeys": ["provider", "channelId"]
1923
+ },
1924
+ "channel-list": {
1925
+ "label": "channels",
1926
+ "detailKeys": ["provider", "guildId"]
1927
+ },
1928
+ "voice-status": {
1929
+ "label": "voice",
1930
+ "detailKeys": [
1931
+ "provider",
1932
+ "guildId",
1933
+ "userId"
1934
+ ]
1935
+ },
1936
+ "event-list": {
1937
+ "label": "events",
1938
+ "detailKeys": ["provider", "guildId"]
1939
+ },
1940
+ "event-create": {
1941
+ "label": "event create",
1942
+ "detailKeys": [
1943
+ "provider",
1944
+ "guildId",
1945
+ "eventName"
1946
+ ]
1947
+ },
1948
+ "timeout": {
1949
+ "label": "timeout",
1950
+ "detailKeys": [
1951
+ "provider",
1952
+ "guildId",
1953
+ "userId"
1954
+ ]
1955
+ },
1956
+ "kick": {
1957
+ "label": "kick",
1958
+ "detailKeys": [
1959
+ "provider",
1960
+ "guildId",
1961
+ "userId"
1962
+ ]
1963
+ },
1964
+ "ban": {
1965
+ "label": "ban",
1966
+ "detailKeys": [
1967
+ "provider",
1968
+ "guildId",
1969
+ "userId"
1970
+ ]
1971
+ }
1972
+ }
1973
+ },
1974
+ "agents_list": {
1975
+ "emoji": "🧭",
1976
+ "title": "Agents",
1977
+ "detailKeys": []
1978
+ },
1979
+ "sessions_list": {
1980
+ "emoji": "🗂️",
1981
+ "title": "Sessions",
1982
+ "detailKeys": [
1983
+ "kinds",
1984
+ "limit",
1985
+ "activeMinutes",
1986
+ "messageLimit"
1987
+ ]
1988
+ },
1989
+ "sessions_history": {
1990
+ "emoji": "🧾",
1991
+ "title": "Session History",
1992
+ "detailKeys": [
1993
+ "sessionKey",
1994
+ "limit",
1995
+ "includeTools"
1996
+ ]
1997
+ },
1998
+ "sessions_send": {
1999
+ "emoji": "📨",
2000
+ "title": "Session Send",
2001
+ "detailKeys": [
2002
+ "label",
2003
+ "sessionKey",
2004
+ "agentId",
2005
+ "timeoutSeconds"
2006
+ ]
2007
+ },
2008
+ "sessions_spawn": {
2009
+ "emoji": "🧑‍🔧",
2010
+ "title": "Sub-agent",
2011
+ "detailKeys": [
2012
+ "label",
2013
+ "task",
2014
+ "agentId",
2015
+ "model",
2016
+ "thinking",
2017
+ "runTimeoutSeconds",
2018
+ "cleanup"
2019
+ ]
2020
+ },
2021
+ "subagents": {
2022
+ "emoji": "🤖",
2023
+ "title": "Subagents",
2024
+ "actions": {
2025
+ "list": {
2026
+ "label": "list",
2027
+ "detailKeys": ["recentMinutes"]
2028
+ },
2029
+ "kill": {
2030
+ "label": "kill",
2031
+ "detailKeys": ["target"]
2032
+ },
2033
+ "steer": {
2034
+ "label": "steer",
2035
+ "detailKeys": ["target"]
2036
+ }
2037
+ }
2038
+ },
2039
+ "session_status": {
2040
+ "emoji": "📊",
2041
+ "title": "Session Status",
2042
+ "detailKeys": ["sessionKey", "model"]
2043
+ },
2044
+ "whatsapp_login": {
2045
+ "emoji": "🟢",
2046
+ "title": "WhatsApp Login",
2047
+ "actions": {
2048
+ "start": { "label": "start" },
2049
+ "wait": { "label": "wait" }
2050
+ }
2051
+ }
2052
+ }
2053
+ };
2054
+
2055
+ //#endregion
2056
+ //#region src/agents/tool-display.ts
2057
+ const TOOL_DISPLAY_CONFIG = tool_display_default;
2058
+ const FALLBACK = TOOL_DISPLAY_CONFIG.fallback ?? { emoji: "🧩" };
2059
+ const TOOL_MAP = TOOL_DISPLAY_CONFIG.tools ?? {};
2060
+
2061
+ //#endregion
2062
+ //#region src/agents/subagent-announce.ts
2063
+ const FAST_TEST_MODE = process.env.REMOTECLAW_TEST_FAST === "1";
2064
+
2065
+ //#endregion
2066
+ //#region src/agents/subagent-registry.ts
2067
+ /**
2068
+ * Announce entries older than this are force-expired even if delivery never
2069
+ * succeeded. Guards against stale registry entries surviving gateway restarts.
2070
+ */
2071
+ const ANNOUNCE_EXPIRY_MS = 5 * 6e4;
2072
+
2073
+ //#endregion
2074
+ //#region src/web/auto-reply/constants.ts
2075
+ const DEFAULT_WEB_MEDIA_BYTES = 5 * 1024 * 1024;
2076
+
2077
+ //#endregion
2078
+ //#region src/media-understanding/defaults.ts
2079
+ const MB = 1024 * 1024;
2080
+ const DEFAULT_MAX_BYTES = {
2081
+ image: 10 * MB,
2082
+ audio: 20 * MB,
2083
+ video: 50 * MB
2084
+ };
2085
+ const DEFAULT_VIDEO_MAX_BASE64_BYTES = 70 * MB;
2086
+ const CLI_OUTPUT_MAX_BUFFER = 5 * MB;
2087
+
2088
+ //#endregion
2089
+ //#region src/media/input-files.ts
2090
+ const DEFAULT_INPUT_IMAGE_MAX_BYTES = 10 * 1024 * 1024;
2091
+ const DEFAULT_INPUT_FILE_MAX_BYTES = 5 * 1024 * 1024;
2092
+
2093
+ //#endregion
2094
+ //#region src/media-understanding/attachments.ts
2095
+ const DEFAULT_LOCAL_PATH_ROOTS = mergeInboundPathRoots(getDefaultMediaLocalRoots(), DEFAULT_IMESSAGE_ATTACHMENT_ROOTS);
2096
+
2097
+ //#endregion
2098
+ //#region src/tts/tts-core.ts
2099
+ const TEMP_FILE_CLEANUP_DELAY_MS = 300 * 1e3;
2100
+
2101
+ //#endregion
2102
+ //#region src/auto-reply/reply/commands-export-session.ts
2103
+ const EXPORT_HTML_DIR = path.join(path.dirname(fileURLToPath(import.meta.url)), "export-html");
2104
+
2105
+ //#endregion
2106
+ //#region src/discord/monitor/thread-bindings.types.ts
2107
+ const DEFAULT_THREAD_BINDING_TTL_MS = 1440 * 60 * 1e3;
2108
+
2109
+ //#endregion
2110
+ //#region src/discord/monitor/thread-bindings.state.ts
2111
+ const THREAD_BINDINGS_STATE_KEY = "__remoteclawDiscordThreadBindingsState";
2112
+ function createThreadBindingsGlobalState() {
2113
+ return {
2114
+ managersByAccountId: /* @__PURE__ */ new Map(),
2115
+ bindingsByThreadId: /* @__PURE__ */ new Map(),
2116
+ bindingsBySessionKey: /* @__PURE__ */ new Map(),
2117
+ tokensByAccountId: /* @__PURE__ */ new Map(),
2118
+ recentUnboundWebhookEchoesByBindingKey: /* @__PURE__ */ new Map(),
2119
+ reusableWebhooksByAccountChannel: /* @__PURE__ */ new Map(),
2120
+ persistByAccountId: /* @__PURE__ */ new Map(),
2121
+ loadedBindings: false
2122
+ };
2123
+ }
2124
+ function resolveThreadBindingsGlobalState() {
2125
+ const runtimeGlobal = globalThis;
2126
+ if (!runtimeGlobal[THREAD_BINDINGS_STATE_KEY]) runtimeGlobal[THREAD_BINDINGS_STATE_KEY] = createThreadBindingsGlobalState();
2127
+ return runtimeGlobal[THREAD_BINDINGS_STATE_KEY];
2128
+ }
2129
+ const THREAD_BINDINGS_STATE = resolveThreadBindingsGlobalState();
2130
+ const MANAGERS_BY_ACCOUNT_ID = THREAD_BINDINGS_STATE.managersByAccountId;
2131
+ const BINDINGS_BY_THREAD_ID = THREAD_BINDINGS_STATE.bindingsByThreadId;
2132
+ const BINDINGS_BY_SESSION_KEY = THREAD_BINDINGS_STATE.bindingsBySessionKey;
2133
+ const TOKENS_BY_ACCOUNT_ID = THREAD_BINDINGS_STATE.tokensByAccountId;
2134
+ const RECENT_UNBOUND_WEBHOOK_ECHOES_BY_BINDING_KEY = THREAD_BINDINGS_STATE.recentUnboundWebhookEchoesByBindingKey;
2135
+ const REUSABLE_WEBHOOKS_BY_ACCOUNT_CHANNEL = THREAD_BINDINGS_STATE.reusableWebhooksByAccountChannel;
2136
+ const PERSIST_BY_ACCOUNT_ID = THREAD_BINDINGS_STATE.persistByAccountId;
2137
+
2138
+ //#endregion
2139
+ //#region src/discord/client.ts
2140
+ function resolveToken(params) {
2141
+ const explicit = normalizeDiscordToken(params.explicit);
2142
+ if (explicit) return explicit;
2143
+ const fallback = normalizeDiscordToken(params.fallbackToken);
2144
+ if (!fallback) throw new Error(`Discord bot token missing for account "${params.accountId}" (set discord.accounts.${params.accountId}.token or DISCORD_BOT_TOKEN for default).`);
2145
+ return fallback;
2146
+ }
2147
+ function resolveRest(token, rest) {
2148
+ return rest ?? new RequestClient(token);
2149
+ }
2150
+ function createDiscordRestClient(opts, cfg = loadConfig()) {
2151
+ const account = resolveDiscordAccount({
2152
+ cfg,
2153
+ accountId: opts.accountId
2154
+ });
2155
+ const token = resolveToken({
2156
+ explicit: opts.token,
2157
+ accountId: account.accountId,
2158
+ fallbackToken: account.token
2159
+ });
2160
+ return {
2161
+ token,
2162
+ rest: resolveRest(token, opts.rest),
2163
+ account
2164
+ };
2165
+ }
2166
+ function createDiscordClient(opts, cfg = loadConfig()) {
2167
+ const { token, rest, account } = createDiscordRestClient(opts, cfg);
2168
+ return {
2169
+ token,
2170
+ rest,
2171
+ request: createDiscordRetryRunner({
2172
+ retry: opts.retry,
2173
+ configRetry: account.config.retry,
2174
+ verbose: opts.verbose
2175
+ })
2176
+ };
2177
+ }
2178
+ function resolveDiscordRest(opts) {
2179
+ return createDiscordRestClient(opts).rest;
2180
+ }
2181
+
2182
+ //#endregion
2183
+ //#region src/discord/chunk.ts
2184
+ const DEFAULT_MAX_CHARS = 2e3;
2185
+ const DEFAULT_MAX_LINES = 17;
2186
+ const FENCE_RE = /^( {0,3})(`{3,}|~{3,})(.*)$/;
2187
+ function countLines(text) {
2188
+ if (!text) return 0;
2189
+ return text.split("\n").length;
2190
+ }
2191
+ function parseFenceLine(line) {
2192
+ const match = line.match(FENCE_RE);
2193
+ if (!match) return null;
2194
+ const indent = match[1] ?? "";
2195
+ const marker = match[2] ?? "";
2196
+ return {
2197
+ indent,
2198
+ markerChar: marker[0] ?? "`",
2199
+ markerLen: marker.length,
2200
+ openLine: line
2201
+ };
2202
+ }
2203
+ function closeFenceLine(openFence) {
2204
+ return `${openFence.indent}${openFence.markerChar.repeat(openFence.markerLen)}`;
2205
+ }
2206
+ function closeFenceIfNeeded(text, openFence) {
2207
+ if (!openFence) return text;
2208
+ const closeLine = closeFenceLine(openFence);
2209
+ if (!text) return closeLine;
2210
+ if (!text.endsWith("\n")) return `${text}\n${closeLine}`;
2211
+ return `${text}${closeLine}`;
2212
+ }
2213
+ function splitLongLine(line, maxChars, opts) {
2214
+ const limit = Math.max(1, Math.floor(maxChars));
2215
+ if (line.length <= limit) return [line];
2216
+ const out = [];
2217
+ let remaining = line;
2218
+ while (remaining.length > limit) {
2219
+ if (opts.preserveWhitespace) {
2220
+ out.push(remaining.slice(0, limit));
2221
+ remaining = remaining.slice(limit);
2222
+ continue;
2223
+ }
2224
+ const window = remaining.slice(0, limit);
2225
+ let breakIdx = -1;
2226
+ for (let i = window.length - 1; i >= 0; i--) if (/\s/.test(window[i])) {
2227
+ breakIdx = i;
2228
+ break;
2229
+ }
2230
+ if (breakIdx <= 0) breakIdx = limit;
2231
+ out.push(remaining.slice(0, breakIdx));
2232
+ remaining = remaining.slice(breakIdx);
2233
+ }
2234
+ if (remaining.length) out.push(remaining);
2235
+ return out;
2236
+ }
2237
+ /**
2238
+ * Chunks outbound Discord text by both character count and (soft) line count,
2239
+ * while keeping fenced code blocks balanced across chunks.
2240
+ */
2241
+ function chunkDiscordText(text, opts = {}) {
2242
+ const maxChars = Math.max(1, Math.floor(opts.maxChars ?? DEFAULT_MAX_CHARS));
2243
+ const maxLines = Math.max(1, Math.floor(opts.maxLines ?? DEFAULT_MAX_LINES));
2244
+ const body = text ?? "";
2245
+ if (!body) return [];
2246
+ if (body.length <= maxChars && countLines(body) <= maxLines) return [body];
2247
+ const lines = body.split("\n");
2248
+ const chunks = [];
2249
+ let current = "";
2250
+ let currentLines = 0;
2251
+ let openFence = null;
2252
+ const flush = () => {
2253
+ if (!current) return;
2254
+ const payload = closeFenceIfNeeded(current, openFence);
2255
+ if (payload.trim().length) chunks.push(payload);
2256
+ current = "";
2257
+ currentLines = 0;
2258
+ if (openFence) {
2259
+ current = openFence.openLine;
2260
+ currentLines = 1;
2261
+ }
2262
+ };
2263
+ for (const originalLine of lines) {
2264
+ const fenceInfo = parseFenceLine(originalLine);
2265
+ const wasInsideFence = openFence !== null;
2266
+ let nextOpenFence = openFence;
2267
+ if (fenceInfo) {
2268
+ if (!openFence) nextOpenFence = fenceInfo;
2269
+ else if (openFence.markerChar === fenceInfo.markerChar && fenceInfo.markerLen >= openFence.markerLen) nextOpenFence = null;
2270
+ }
2271
+ const reserveChars = nextOpenFence ? closeFenceLine(nextOpenFence).length + 1 : 0;
2272
+ const reserveLines = nextOpenFence ? 1 : 0;
2273
+ const effectiveMaxChars = maxChars - reserveChars;
2274
+ const effectiveMaxLines = maxLines - reserveLines;
2275
+ const charLimit = effectiveMaxChars > 0 ? effectiveMaxChars : maxChars;
2276
+ const lineLimit = effectiveMaxLines > 0 ? effectiveMaxLines : maxLines;
2277
+ const prefixLen = current.length > 0 ? current.length + 1 : 0;
2278
+ const segments = splitLongLine(originalLine, Math.max(1, charLimit - prefixLen), { preserveWhitespace: wasInsideFence });
2279
+ for (let segIndex = 0; segIndex < segments.length; segIndex++) {
2280
+ const segment = segments[segIndex];
2281
+ const isLineContinuation = segIndex > 0;
2282
+ const addition = `${isLineContinuation ? "" : current.length > 0 ? "\n" : ""}${segment}`;
2283
+ const nextLen = current.length + addition.length;
2284
+ const nextLines = currentLines + (isLineContinuation ? 0 : 1);
2285
+ if ((nextLen > charLimit || nextLines > lineLimit) && current.length > 0) flush();
2286
+ if (current.length > 0) {
2287
+ current += addition;
2288
+ if (!isLineContinuation) currentLines += 1;
2289
+ } else {
2290
+ current = segment;
2291
+ currentLines = 1;
2292
+ }
2293
+ }
2294
+ openFence = nextOpenFence;
2295
+ }
2296
+ if (current.length) {
2297
+ const payload = closeFenceIfNeeded(current, openFence);
2298
+ if (payload.trim().length) chunks.push(payload);
2299
+ }
2300
+ return rebalanceReasoningItalics(text, chunks);
2301
+ }
2302
+ function chunkDiscordTextWithMode(text, opts) {
2303
+ if ((opts.chunkMode ?? "length") !== "newline") return chunkDiscordText(text, opts);
2304
+ const lineChunks = chunkMarkdownTextWithMode(text, Math.max(1, Math.floor(opts.maxChars ?? DEFAULT_MAX_CHARS)), "newline");
2305
+ const chunks = [];
2306
+ for (const line of lineChunks) {
2307
+ const nested = chunkDiscordText(line, opts);
2308
+ if (!nested.length && line) {
2309
+ chunks.push(line);
2310
+ continue;
2311
+ }
2312
+ chunks.push(...nested);
2313
+ }
2314
+ return chunks;
2315
+ }
2316
+ function rebalanceReasoningItalics(source, chunks) {
2317
+ if (chunks.length <= 1) return chunks;
2318
+ if (!(source.startsWith("Reasoning:\n_") && source.trimEnd().endsWith("_"))) return chunks;
2319
+ const adjusted = [...chunks];
2320
+ for (let i = 0; i < adjusted.length; i++) {
2321
+ const isLast = i === adjusted.length - 1;
2322
+ const current = adjusted[i];
2323
+ if (!current.trimEnd().endsWith("_")) adjusted[i] = `${current}_`;
2324
+ if (isLast) break;
2325
+ const next = adjusted[i + 1];
2326
+ const leadingWhitespaceLen = next.length - next.trimStart().length;
2327
+ const leadingWhitespace = next.slice(0, leadingWhitespaceLen);
2328
+ const nextBody = next.slice(leadingWhitespaceLen);
2329
+ if (!nextBody.startsWith("_")) adjusted[i + 1] = `${leadingWhitespace}_${nextBody}`;
2330
+ }
2331
+ return adjusted;
2332
+ }
2333
+
2334
+ //#endregion
2335
+ //#region src/discord/send.permissions.ts
2336
+ const PERMISSION_ENTRIES = Object.entries(PermissionFlagsBits).filter(([, value]) => typeof value === "bigint");
2337
+ const ALL_PERMISSIONS = PERMISSION_ENTRIES.reduce((acc, [, value]) => acc | value, 0n);
2338
+ const ADMINISTRATOR_BIT = PermissionFlagsBits.Administrator;
2339
+ function addPermissionBits(base, add) {
2340
+ if (!add) return base;
2341
+ return base | BigInt(add);
2342
+ }
2343
+ function removePermissionBits(base, deny) {
2344
+ if (!deny) return base;
2345
+ return base & ~BigInt(deny);
2346
+ }
2347
+ function bitfieldToPermissions(bitfield) {
2348
+ return PERMISSION_ENTRIES.filter(([, value]) => (bitfield & value) === value).map(([name]) => name).toSorted();
2349
+ }
2350
+ function hasAdministrator(bitfield) {
2351
+ return (bitfield & ADMINISTRATOR_BIT) === ADMINISTRATOR_BIT;
2352
+ }
2353
+ function isThreadChannelType(channelType) {
2354
+ return channelType === ChannelType.GuildNewsThread || channelType === ChannelType.GuildPublicThread || channelType === ChannelType.GuildPrivateThread;
2355
+ }
2356
+ async function fetchBotUserId(rest) {
2357
+ const me = await rest.get(Routes.user("@me"));
2358
+ if (!me?.id) throw new Error("Failed to resolve bot user id");
2359
+ return me.id;
2360
+ }
2361
+ async function fetchChannelPermissionsDiscord(channelId, opts = {}) {
2362
+ const rest = resolveDiscordRest(opts);
2363
+ const channel = await rest.get(Routes.channel(channelId));
2364
+ const channelType = "type" in channel ? channel.type : void 0;
2365
+ const guildId = "guild_id" in channel ? channel.guild_id : void 0;
2366
+ if (!guildId) return {
2367
+ channelId,
2368
+ permissions: [],
2369
+ raw: "0",
2370
+ isDm: true,
2371
+ channelType
2372
+ };
2373
+ const botId = await fetchBotUserId(rest);
2374
+ const [guild, member] = await Promise.all([rest.get(Routes.guild(guildId)), rest.get(Routes.guildMember(guildId, botId))]);
2375
+ const rolesById = new Map((guild.roles ?? []).map((role) => [role.id, role]));
2376
+ const everyoneRole = rolesById.get(guildId);
2377
+ let base = 0n;
2378
+ if (everyoneRole?.permissions) base = addPermissionBits(base, everyoneRole.permissions);
2379
+ for (const roleId of member.roles ?? []) {
2380
+ const role = rolesById.get(roleId);
2381
+ if (role?.permissions) base = addPermissionBits(base, role.permissions);
2382
+ }
2383
+ if (hasAdministrator(base)) return {
2384
+ channelId,
2385
+ guildId,
2386
+ permissions: bitfieldToPermissions(ALL_PERMISSIONS),
2387
+ raw: ALL_PERMISSIONS.toString(),
2388
+ isDm: false,
2389
+ channelType
2390
+ };
2391
+ let permissions = base;
2392
+ const overwrites = "permission_overwrites" in channel ? channel.permission_overwrites ?? [] : [];
2393
+ for (const overwrite of overwrites) if (overwrite.id === guildId) {
2394
+ permissions = removePermissionBits(permissions, overwrite.deny ?? "0");
2395
+ permissions = addPermissionBits(permissions, overwrite.allow ?? "0");
2396
+ }
2397
+ for (const overwrite of overwrites) if (member.roles?.includes(overwrite.id)) {
2398
+ permissions = removePermissionBits(permissions, overwrite.deny ?? "0");
2399
+ permissions = addPermissionBits(permissions, overwrite.allow ?? "0");
2400
+ }
2401
+ for (const overwrite of overwrites) if (overwrite.id === botId) {
2402
+ permissions = removePermissionBits(permissions, overwrite.deny ?? "0");
2403
+ permissions = addPermissionBits(permissions, overwrite.allow ?? "0");
2404
+ }
2405
+ return {
2406
+ channelId,
2407
+ guildId,
2408
+ permissions: bitfieldToPermissions(permissions),
2409
+ raw: permissions.toString(),
2410
+ isDm: false,
2411
+ channelType
2412
+ };
2413
+ }
2414
+
2415
+ //#endregion
2416
+ //#region src/discord/send.types.ts
2417
+ var DiscordSendError = class extends Error {
2418
+ constructor(message, opts) {
2419
+ super(message);
2420
+ this.name = "DiscordSendError";
2421
+ if (opts) Object.assign(this, opts);
2422
+ }
2423
+ toString() {
2424
+ return this.message;
2425
+ }
2426
+ };
2427
+ const DISCORD_MAX_EMOJI_BYTES = 256 * 1024;
2428
+ const DISCORD_MAX_STICKER_BYTES = 512 * 1024;
2429
+
2430
+ //#endregion
2431
+ //#region src/discord/send.shared.ts
2432
+ const DISCORD_TEXT_LIMIT = 2e3;
2433
+ const DISCORD_MISSING_PERMISSIONS = 50013;
2434
+ const DISCORD_CANNOT_DM = 50007;
2435
+ /**
2436
+ * Parse and resolve Discord recipient, including username lookup.
2437
+ * This enables sending DMs by username (e.g., "john.doe") by querying
2438
+ * the Discord directory to resolve usernames to user IDs.
2439
+ *
2440
+ * @param raw - The recipient string (username, ID, or known format)
2441
+ * @param accountId - Discord account ID to use for directory lookup
2442
+ * @returns Parsed DiscordRecipient with resolved user ID if applicable
2443
+ */
2444
+ async function parseAndResolveRecipient(raw, accountId) {
2445
+ const cfg = loadConfig();
2446
+ const accountInfo = resolveDiscordAccount({
2447
+ cfg,
2448
+ accountId
2449
+ });
2450
+ const trimmed = raw.trim();
2451
+ const parseOptions = { ambiguousMessage: `Ambiguous Discord recipient "${trimmed}". Use "user:${trimmed}" for DMs or "channel:${trimmed}" for channel messages.` };
2452
+ const resolved = await resolveDiscordTarget(raw, {
2453
+ cfg,
2454
+ accountId: accountInfo.accountId
2455
+ }, parseOptions);
2456
+ if (resolved) return {
2457
+ kind: resolved.kind,
2458
+ id: resolved.id
2459
+ };
2460
+ const parsed = parseDiscordTarget(raw, parseOptions);
2461
+ if (!parsed) throw new Error("Recipient is required for Discord sends");
2462
+ return {
2463
+ kind: parsed.kind,
2464
+ id: parsed.id
2465
+ };
2466
+ }
2467
+ function getDiscordErrorCode(err) {
2468
+ if (!err || typeof err !== "object") return;
2469
+ const candidate = "code" in err && err.code !== void 0 ? err.code : "rawError" in err && err.rawError && typeof err.rawError === "object" ? err.rawError.code : void 0;
2470
+ if (typeof candidate === "number") return candidate;
2471
+ if (typeof candidate === "string" && /^\d+$/.test(candidate)) return Number(candidate);
2472
+ }
2473
+ async function buildDiscordSendError(err, ctx) {
2474
+ if (err instanceof DiscordSendError) return err;
2475
+ const code = getDiscordErrorCode(err);
2476
+ if (code === DISCORD_CANNOT_DM) return new DiscordSendError("discord dm failed: user blocks dms or privacy settings disallow it", { kind: "dm-blocked" });
2477
+ if (code !== DISCORD_MISSING_PERMISSIONS) return err;
2478
+ let missing = [];
2479
+ try {
2480
+ const permissions = await fetchChannelPermissionsDiscord(ctx.channelId, {
2481
+ rest: ctx.rest,
2482
+ token: ctx.token
2483
+ });
2484
+ const current = new Set(permissions.permissions);
2485
+ const required = ["ViewChannel", "SendMessages"];
2486
+ if (isThreadChannelType(permissions.channelType)) required.push("SendMessagesInThreads");
2487
+ if (ctx.hasMedia) required.push("AttachFiles");
2488
+ missing = required.filter((permission) => !current.has(permission));
2489
+ } catch {}
2490
+ return new DiscordSendError(`${missing.length ? `missing permissions in channel ${ctx.channelId}: ${missing.join(", ")}` : `missing permissions in channel ${ctx.channelId}`}. bot might be muted or blocked by role/channel overrides`, {
2491
+ kind: "missing-permissions",
2492
+ channelId: ctx.channelId,
2493
+ missingPermissions: missing
2494
+ });
2495
+ }
2496
+ async function resolveChannelId(rest, recipient, request) {
2497
+ if (recipient.kind === "channel") return { channelId: recipient.id };
2498
+ const dmChannel = await request(() => rest.post(Routes.userChannels(), { body: { recipient_id: recipient.id } }), "dm-channel");
2499
+ if (!dmChannel?.id) throw new Error("Failed to create Discord DM channel");
2500
+ return {
2501
+ channelId: dmChannel.id,
2502
+ dm: true
2503
+ };
2504
+ }
2505
+ async function resolveDiscordChannelType(rest, channelId) {
2506
+ try {
2507
+ return (await rest.get(Routes.channel(channelId)))?.type;
2508
+ } catch {
2509
+ return;
2510
+ }
2511
+ }
2512
+ const SUPPRESS_NOTIFICATIONS_FLAG = 4096;
2513
+ function buildDiscordTextChunks(text, opts = {}) {
2514
+ if (!text) return [];
2515
+ const chunks = chunkDiscordTextWithMode(text, {
2516
+ maxChars: opts.maxChars ?? DISCORD_TEXT_LIMIT,
2517
+ maxLines: opts.maxLinesPerMessage,
2518
+ chunkMode: opts.chunkMode
2519
+ });
2520
+ if (!chunks.length && text) chunks.push(text);
2521
+ return chunks;
2522
+ }
2523
+ function hasV2Components(components) {
2524
+ return Boolean(components?.some((component) => "isV2" in component && component.isV2));
2525
+ }
2526
+ function resolveDiscordSendComponents(params) {
2527
+ if (!params.components || !params.isFirst) return;
2528
+ return typeof params.components === "function" ? params.components(params.text) : params.components;
2529
+ }
2530
+ function normalizeDiscordEmbeds(embeds) {
2531
+ if (!embeds?.length) return;
2532
+ return embeds.map((embed) => embed instanceof Embed ? embed : new Embed(embed));
2533
+ }
2534
+ function resolveDiscordSendEmbeds(params) {
2535
+ if (!params.embeds || !params.isFirst) return;
2536
+ return normalizeDiscordEmbeds(params.embeds);
2537
+ }
2538
+ function buildDiscordMessagePayload(params) {
2539
+ const payload = {};
2540
+ const hasV2 = hasV2Components(params.components);
2541
+ const trimmed = params.text.trim();
2542
+ if (!hasV2 && trimmed) payload.content = params.text;
2543
+ if (params.components?.length) payload.components = params.components;
2544
+ if (!hasV2 && params.embeds?.length) payload.embeds = params.embeds;
2545
+ if (params.flags !== void 0) payload.flags = params.flags;
2546
+ if (params.files?.length) payload.files = params.files;
2547
+ return payload;
2548
+ }
2549
+ function stripUndefinedFields(value) {
2550
+ return Object.fromEntries(Object.entries(value).filter(([, entry]) => entry !== void 0));
2551
+ }
2552
+ function toDiscordFileBlob(data) {
2553
+ if (data instanceof Blob) return data;
2554
+ const arrayBuffer = new ArrayBuffer(data.byteLength);
2555
+ new Uint8Array(arrayBuffer).set(data);
2556
+ return new Blob([arrayBuffer]);
2557
+ }
2558
+ async function sendDiscordText(rest, channelId, text, replyTo, request, maxLinesPerMessage, components, embeds, chunkMode, silent) {
2559
+ if (!text.trim()) throw new Error("Message must be non-empty for Discord sends");
2560
+ const messageReference = replyTo ? {
2561
+ message_id: replyTo,
2562
+ fail_if_not_exists: false
2563
+ } : void 0;
2564
+ const flags = silent ? SUPPRESS_NOTIFICATIONS_FLAG : void 0;
2565
+ const chunks = buildDiscordTextChunks(text, {
2566
+ maxLinesPerMessage,
2567
+ chunkMode
2568
+ });
2569
+ const sendChunk = async (chunk, isFirst) => {
2570
+ const body = stripUndefinedFields({
2571
+ ...serializePayload(buildDiscordMessagePayload({
2572
+ text: chunk,
2573
+ components: resolveDiscordSendComponents({
2574
+ components,
2575
+ text: chunk,
2576
+ isFirst
2577
+ }),
2578
+ embeds: resolveDiscordSendEmbeds({
2579
+ embeds,
2580
+ isFirst
2581
+ }),
2582
+ flags
2583
+ })),
2584
+ ...messageReference ? { message_reference: messageReference } : {}
2585
+ });
2586
+ return await request(() => rest.post(Routes.channelMessages(channelId), { body }), "text");
2587
+ };
2588
+ if (chunks.length === 1) return await sendChunk(chunks[0], true);
2589
+ let last = null;
2590
+ for (const [index, chunk] of chunks.entries()) last = await sendChunk(chunk, index === 0);
2591
+ if (!last) throw new Error("Discord send failed (empty chunk result)");
2592
+ return last;
2593
+ }
2594
+ async function sendDiscordMedia(rest, channelId, text, mediaUrl, mediaLocalRoots, replyTo, request, maxLinesPerMessage, components, embeds, chunkMode, silent) {
2595
+ const media = await loadWebMedia(mediaUrl, { localRoots: mediaLocalRoots });
2596
+ const chunks = text ? buildDiscordTextChunks(text, {
2597
+ maxLinesPerMessage,
2598
+ chunkMode
2599
+ }) : [];
2600
+ const caption = chunks[0] ?? "";
2601
+ const messageReference = replyTo ? {
2602
+ message_id: replyTo,
2603
+ fail_if_not_exists: false
2604
+ } : void 0;
2605
+ const flags = silent ? SUPPRESS_NOTIFICATIONS_FLAG : void 0;
2606
+ const fileData = toDiscordFileBlob(media.buffer);
2607
+ const payload = buildDiscordMessagePayload({
2608
+ text: caption,
2609
+ components: resolveDiscordSendComponents({
2610
+ components,
2611
+ text: caption,
2612
+ isFirst: true
2613
+ }),
2614
+ embeds: resolveDiscordSendEmbeds({
2615
+ embeds,
2616
+ isFirst: true
2617
+ }),
2618
+ flags,
2619
+ files: [{
2620
+ data: fileData,
2621
+ name: media.fileName ?? "upload"
2622
+ }]
2623
+ });
2624
+ const res = await request(() => rest.post(Routes.channelMessages(channelId), { body: stripUndefinedFields({
2625
+ ...serializePayload(payload),
2626
+ ...messageReference ? { message_reference: messageReference } : {}
2627
+ }) }), "media");
2628
+ for (const chunk of chunks.slice(1)) {
2629
+ if (!chunk.trim()) continue;
2630
+ await sendDiscordText(rest, channelId, chunk, replyTo, request, maxLinesPerMessage, void 0, void 0, chunkMode, silent);
2631
+ }
2632
+ return res;
2633
+ }
2634
+
2635
+ //#endregion
2636
+ //#region src/discord/voice-message.ts
2637
+ /**
2638
+ * Discord Voice Message Support
2639
+ *
2640
+ * Implements sending voice messages via Discord's API.
2641
+ * Voice messages require:
2642
+ * - OGG/Opus format audio
2643
+ * - Waveform data (base64 encoded, up to 256 samples, 0-255 values)
2644
+ * - Duration in seconds
2645
+ * - Message flag 8192 (IS_VOICE_MESSAGE)
2646
+ * - No other content (text, embeds, etc.)
2647
+ */
2648
+ const execFileAsync = promisify(execFile);
2649
+
2650
+ //#endregion
2651
+ //#region src/discord/send.outbound.ts
2652
+ async function sendDiscordThreadTextChunks(params) {
2653
+ for (const chunk of params.chunks) await sendDiscordText(params.rest, params.threadId, chunk, void 0, params.request, params.maxLinesPerMessage, void 0, void 0, params.chunkMode, params.silent);
2654
+ }
2655
+ /** Discord thread names are capped at 100 characters. */
2656
+ const DISCORD_THREAD_NAME_LIMIT = 100;
2657
+ /** Derive a thread title from the first non-empty line of the message text. */
2658
+ function deriveForumThreadName(text) {
2659
+ return (text.split("\n").find((l) => l.trim())?.trim() ?? "").slice(0, DISCORD_THREAD_NAME_LIMIT) || (/* @__PURE__ */ new Date()).toISOString().slice(0, 16);
2660
+ }
2661
+ /** Forum/Media channels cannot receive regular messages; detect them here. */
2662
+ function isForumLikeType(channelType) {
2663
+ return channelType === ChannelType.GuildForum || channelType === ChannelType.GuildMedia;
2664
+ }
2665
+ function toDiscordSendResult(result, fallbackChannelId) {
2666
+ return {
2667
+ messageId: result.id ? String(result.id) : "unknown",
2668
+ channelId: String(result.channel_id ?? fallbackChannelId)
2669
+ };
2670
+ }
2671
+ async function sendMessageDiscord(to, text, opts = {}) {
2672
+ const cfg = loadConfig();
2673
+ const accountInfo = resolveDiscordAccount({
2674
+ cfg,
2675
+ accountId: opts.accountId
2676
+ });
2677
+ const tableMode = resolveMarkdownTableMode({
2678
+ cfg,
2679
+ channel: "discord",
2680
+ accountId: accountInfo.accountId
2681
+ });
2682
+ const chunkMode = resolveChunkMode(cfg, "discord", accountInfo.accountId);
2683
+ const textWithTables = convertMarkdownTables(text ?? "", tableMode);
2684
+ const { token, rest, request } = createDiscordClient(opts, cfg);
2685
+ const { channelId } = await resolveChannelId(rest, await parseAndResolveRecipient(to, opts.accountId), request);
2686
+ if (isForumLikeType(await resolveDiscordChannelType(rest, channelId))) {
2687
+ const threadName = deriveForumThreadName(textWithTables);
2688
+ const chunks = buildDiscordTextChunks(textWithTables, {
2689
+ maxLinesPerMessage: accountInfo.config.maxLinesPerMessage,
2690
+ chunkMode
2691
+ });
2692
+ const starterContent = chunks[0]?.trim() ? chunks[0] : threadName;
2693
+ const starterPayload = buildDiscordMessagePayload({
2694
+ text: starterContent,
2695
+ components: resolveDiscordSendComponents({
2696
+ components: opts.components,
2697
+ text: starterContent,
2698
+ isFirst: true
2699
+ }),
2700
+ embeds: resolveDiscordSendEmbeds({
2701
+ embeds: opts.embeds,
2702
+ isFirst: true
2703
+ }),
2704
+ flags: opts.silent ? 4096 : void 0
2705
+ });
2706
+ let threadRes;
2707
+ try {
2708
+ threadRes = await request(() => rest.post(Routes.threads(channelId), { body: {
2709
+ name: threadName,
2710
+ message: stripUndefinedFields(serializePayload(starterPayload))
2711
+ } }), "forum-thread");
2712
+ } catch (err) {
2713
+ throw await buildDiscordSendError(err, {
2714
+ channelId,
2715
+ rest,
2716
+ token,
2717
+ hasMedia: Boolean(opts.mediaUrl)
2718
+ });
2719
+ }
2720
+ const threadId = threadRes.id;
2721
+ const messageId = threadRes.message?.id ?? threadId;
2722
+ const resultChannelId = threadRes.message?.channel_id ?? threadId;
2723
+ const remainingChunks = chunks.slice(1);
2724
+ try {
2725
+ if (opts.mediaUrl) {
2726
+ const [mediaCaption, ...afterMediaChunks] = remainingChunks;
2727
+ await sendDiscordMedia(rest, threadId, mediaCaption ?? "", opts.mediaUrl, opts.mediaLocalRoots, void 0, request, accountInfo.config.maxLinesPerMessage, void 0, void 0, chunkMode, opts.silent);
2728
+ await sendDiscordThreadTextChunks({
2729
+ rest,
2730
+ threadId,
2731
+ chunks: afterMediaChunks,
2732
+ request,
2733
+ maxLinesPerMessage: accountInfo.config.maxLinesPerMessage,
2734
+ chunkMode,
2735
+ silent: opts.silent
2736
+ });
2737
+ } else await sendDiscordThreadTextChunks({
2738
+ rest,
2739
+ threadId,
2740
+ chunks: remainingChunks,
2741
+ request,
2742
+ maxLinesPerMessage: accountInfo.config.maxLinesPerMessage,
2743
+ chunkMode,
2744
+ silent: opts.silent
2745
+ });
2746
+ } catch (err) {
2747
+ throw await buildDiscordSendError(err, {
2748
+ channelId: threadId,
2749
+ rest,
2750
+ token,
2751
+ hasMedia: Boolean(opts.mediaUrl)
2752
+ });
2753
+ }
2754
+ recordChannelActivity({
2755
+ channel: "discord",
2756
+ accountId: accountInfo.accountId,
2757
+ direction: "outbound"
2758
+ });
2759
+ return toDiscordSendResult({
2760
+ id: messageId,
2761
+ channel_id: resultChannelId
2762
+ }, channelId);
2763
+ }
2764
+ let result;
2765
+ try {
2766
+ if (opts.mediaUrl) result = await sendDiscordMedia(rest, channelId, textWithTables, opts.mediaUrl, opts.mediaLocalRoots, opts.replyTo, request, accountInfo.config.maxLinesPerMessage, opts.components, opts.embeds, chunkMode, opts.silent);
2767
+ else result = await sendDiscordText(rest, channelId, textWithTables, opts.replyTo, request, accountInfo.config.maxLinesPerMessage, opts.components, opts.embeds, chunkMode, opts.silent);
2768
+ } catch (err) {
2769
+ throw await buildDiscordSendError(err, {
2770
+ channelId,
2771
+ rest,
2772
+ token,
2773
+ hasMedia: Boolean(opts.mediaUrl)
2774
+ });
2775
+ }
2776
+ recordChannelActivity({
2777
+ channel: "discord",
2778
+ accountId: accountInfo.accountId,
2779
+ direction: "outbound"
2780
+ });
2781
+ return toDiscordSendResult(result, channelId);
2782
+ }
2783
+
2784
+ //#endregion
2785
+ //#region src/discord/components-registry.ts
2786
+ const DEFAULT_COMPONENT_TTL_MS = 1800 * 1e3;
2787
+
2788
+ //#endregion
2789
+ //#region src/discord/send.components.ts
2790
+ const DISCORD_FORUM_LIKE_TYPES = new Set([ChannelType.GuildForum, ChannelType.GuildMedia]);
2791
+
2792
+ //#endregion
2793
+ //#region src/infra/restart.ts
2794
+ const restartLog = createSubsystemLogger("restart");
2795
+
2796
+ //#endregion
2797
+ //#region src/auto-reply/reply/elevated-allowlist-matcher.ts
2798
+ const SENDER_PREFIXES = [
2799
+ ...CHAT_CHANNEL_ORDER,
2800
+ INTERNAL_MESSAGE_CHANNEL,
2801
+ "user",
2802
+ "group",
2803
+ "channel"
2804
+ ];
2805
+ const SENDER_PREFIX_RE = new RegExp(`^(${SENDER_PREFIXES.join("|")}):`, "i");
2806
+
2807
+ //#endregion
2808
+ //#region src/auth/env-injection.ts
2809
+ const log$3 = createSubsystemLogger("auth-env");
2810
+
2811
+ //#endregion
2812
+ //#region src/middleware/auth-key-retry.ts
2813
+ const log$2 = createSubsystemLogger("auth-retry");
2814
+
2815
+ //#endregion
2816
+ //#region src/infra/session-maintenance-warning.ts
2817
+ const log$1 = createSubsystemLogger("session-maintenance-warning");
2818
+
2819
+ //#endregion
2820
+ //#region src/auto-reply/reply/session.ts
2821
+ const log = createSubsystemLogger("session-init");
2822
+
2823
+ //#endregion
2824
+ //#region src/logging/redact-identifier.ts
2825
+ function sha256HexPrefix(value, len = 12) {
2826
+ const safeLen = Number.isFinite(len) ? Math.max(1, Math.floor(len)) : 12;
2827
+ return crypto.createHash("sha256").update(value).digest("hex").slice(0, safeLen);
2828
+ }
2829
+ function redactIdentifier(value, opts) {
2830
+ const trimmed = value?.trim();
2831
+ if (!trimmed) return "-";
2832
+ return `sha256:${sha256HexPrefix(trimmed, opts?.len ?? 12)}`;
2833
+ }
2834
+
2835
+ //#endregion
2836
+ //#region src/markdown/whatsapp.ts
2837
+ /**
2838
+ * Convert standard Markdown formatting to WhatsApp-compatible markup.
2839
+ *
2840
+ * WhatsApp uses its own formatting syntax:
2841
+ * bold: *text*
2842
+ * italic: _text_
2843
+ * strikethrough: ~text~
2844
+ * monospace: ```text```
2845
+ *
2846
+ * Standard Markdown uses:
2847
+ * bold: **text** or __text__
2848
+ * italic: *text* or _text_
2849
+ * strikethrough: ~~text~~
2850
+ * code: `text` (inline) or ```text``` (block)
2851
+ *
2852
+ * The conversion preserves fenced code blocks and inline code,
2853
+ * then converts bold and strikethrough markers.
2854
+ */
2855
+ /** Placeholder tokens used during conversion to protect code spans. */
2856
+ const FENCE_PLACEHOLDER = "\0FENCE";
2857
+ const INLINE_CODE_PLACEHOLDER = "\0CODE";
2858
+ /**
2859
+ * Convert standard Markdown bold/italic/strikethrough to WhatsApp formatting.
2860
+ *
2861
+ * Order of operations matters:
2862
+ * 1. Protect fenced code blocks (```...```) — already WhatsApp-compatible
2863
+ * 2. Protect inline code (`...`) — leave as-is
2864
+ * 3. Convert **bold** → *bold* and __bold__ → *bold*
2865
+ * 4. Convert ~~strike~~ → ~strike~
2866
+ * 5. Restore protected spans
2867
+ *
2868
+ * Italic *text* and _text_ are left alone since WhatsApp uses _text_ for italic
2869
+ * and single * is already WhatsApp bold — no conversion needed for single markers.
2870
+ */
2871
+ function markdownToWhatsApp(text) {
2872
+ if (!text) return text;
2873
+ const fences = [];
2874
+ let result = text.replace(/```[\s\S]*?```/g, (match) => {
2875
+ fences.push(match);
2876
+ return `${FENCE_PLACEHOLDER}${fences.length - 1}`;
2877
+ });
2878
+ const inlineCodes = [];
2879
+ result = result.replace(/`[^`\n]+`/g, (match) => {
2880
+ inlineCodes.push(match);
2881
+ return `${INLINE_CODE_PLACEHOLDER}${inlineCodes.length - 1}`;
2882
+ });
2883
+ result = result.replace(/\*\*(.+?)\*\*/g, "*$1*");
2884
+ result = result.replace(/__(.+?)__/g, "*$1*");
2885
+ result = result.replace(/~~(.+?)~~/g, "~$1~");
2886
+ result = result.replace(new RegExp(`${escapeRegExp(INLINE_CODE_PLACEHOLDER)}(\\d+)`, "g"), (_, idx) => inlineCodes[Number(idx)] ?? "");
2887
+ result = result.replace(new RegExp(`${escapeRegExp(FENCE_PLACEHOLDER)}(\\d+)`, "g"), (_, idx) => fences[Number(idx)] ?? "");
2888
+ return result;
2889
+ }
2890
+
2891
+ //#endregion
2892
+ //#region src/web/active-listener.ts
2893
+ const listeners = /* @__PURE__ */ new Map();
2894
+ function resolveWebAccountId(accountId) {
2895
+ return (accountId ?? "").trim() || DEFAULT_ACCOUNT_ID;
2896
+ }
2897
+ function requireActiveWebListener(accountId) {
2898
+ const id = resolveWebAccountId(accountId);
2899
+ const listener = listeners.get(id) ?? null;
2900
+ if (!listener) throw new Error(`No active WhatsApp Web listener (account: ${id}). Start the gateway, then link WhatsApp with: ${formatCliCommand(`remoteclaw channels login --channel whatsapp --account ${id}`)}.`);
2901
+ return {
2902
+ accountId: id,
2903
+ listener
2904
+ };
2905
+ }
2906
+
2907
+ //#endregion
2908
+ //#region src/web/outbound.ts
2909
+ const outboundLog = createSubsystemLogger("gateway/channels/whatsapp").child("outbound");
2910
+ async function sendMessageWhatsApp(to, body, options) {
2911
+ let text = body;
2912
+ const correlationId = generateSecureUuid();
2913
+ const startedAt = Date.now();
2914
+ const { listener: active, accountId: resolvedAccountId } = requireActiveWebListener(options.accountId);
2915
+ const tableMode = resolveMarkdownTableMode({
2916
+ cfg: loadConfig(),
2917
+ channel: "whatsapp",
2918
+ accountId: resolvedAccountId ?? options.accountId
2919
+ });
2920
+ text = convertMarkdownTables(text ?? "", tableMode);
2921
+ text = markdownToWhatsApp(text);
2922
+ const redactedTo = redactIdentifier(to);
2923
+ const logger = getChildLogger({
2924
+ module: "web-outbound",
2925
+ correlationId,
2926
+ to: redactedTo
2927
+ });
2928
+ try {
2929
+ const jid = toWhatsappJid(to);
2930
+ const redactedJid = redactIdentifier(jid);
2931
+ let mediaBuffer;
2932
+ let mediaType;
2933
+ let documentFileName;
2934
+ if (options.mediaUrl) {
2935
+ const media = await loadWebMedia(options.mediaUrl, { localRoots: options.mediaLocalRoots });
2936
+ const caption = text || void 0;
2937
+ mediaBuffer = media.buffer;
2938
+ mediaType = media.contentType;
2939
+ if (media.kind === "audio") mediaType = media.contentType === "audio/ogg" ? "audio/ogg; codecs=opus" : media.contentType ?? "application/octet-stream";
2940
+ else if (media.kind === "video") text = caption ?? "";
2941
+ else if (media.kind === "image") text = caption ?? "";
2942
+ else {
2943
+ text = caption ?? "";
2944
+ documentFileName = media.fileName;
2945
+ }
2946
+ }
2947
+ outboundLog.info(`Sending message -> ${redactedJid}${options.mediaUrl ? " (media)" : ""}`);
2948
+ logger.info({
2949
+ jid: redactedJid,
2950
+ hasMedia: Boolean(options.mediaUrl)
2951
+ }, "sending message");
2952
+ await active.sendComposingTo(to);
2953
+ const accountId = Boolean(options.accountId?.trim()) ? resolvedAccountId : void 0;
2954
+ const sendOptions = options.gifPlayback || accountId || documentFileName ? {
2955
+ ...options.gifPlayback ? { gifPlayback: true } : {},
2956
+ ...documentFileName ? { fileName: documentFileName } : {},
2957
+ accountId
2958
+ } : void 0;
2959
+ const messageId = (sendOptions ? await active.sendMessage(to, text, mediaBuffer, mediaType, sendOptions) : await active.sendMessage(to, text, mediaBuffer, mediaType))?.messageId ?? "unknown";
2960
+ const durationMs = Date.now() - startedAt;
2961
+ outboundLog.info(`Sent message ${messageId} -> ${redactedJid}${options.mediaUrl ? " (media)" : ""} (${durationMs}ms)`);
2962
+ logger.info({
2963
+ jid: redactedJid,
2964
+ messageId
2965
+ }, "sent message");
2966
+ return {
2967
+ messageId,
2968
+ toJid: jid
2969
+ };
2970
+ } catch (err) {
2971
+ logger.error({
2972
+ err: String(err),
2973
+ to: redactedTo,
2974
+ hasMedia: Boolean(options.mediaUrl)
2975
+ }, "failed to send via web session");
2976
+ throw err;
2977
+ }
2978
+ }
2979
+
2980
+ //#endregion
2981
+ //#region src/web/session.ts
2982
+ let credsSaveQueue = Promise.resolve();
2983
+
2984
+ //#endregion
2985
+ //#region src/web/auto-reply/loggers.ts
2986
+ const whatsappLog = createSubsystemLogger("gateway/channels/whatsapp");
2987
+ const whatsappInboundLog = whatsappLog.child("inbound");
2988
+ const whatsappOutboundLog = whatsappLog.child("outbound");
2989
+ const whatsappHeartbeatLog = whatsappLog.child("heartbeat");
2990
+
2991
+ //#endregion
2992
+ //#region src/infra/map-size.ts
2993
+ function pruneMapToMaxSize(map, maxSize) {
2994
+ const limit = Math.max(0, Math.floor(maxSize));
2995
+ if (limit <= 0) {
2996
+ map.clear();
2997
+ return;
2998
+ }
2999
+ while (map.size > limit) {
3000
+ const oldest = map.keys().next();
3001
+ if (oldest.done) break;
3002
+ map.delete(oldest.value);
3003
+ }
3004
+ }
3005
+
3006
+ //#endregion
3007
+ //#region src/infra/dedupe.ts
3008
+ function createDedupeCache(options) {
3009
+ const ttlMs = Math.max(0, options.ttlMs);
3010
+ const maxSize = Math.max(0, Math.floor(options.maxSize));
3011
+ const cache = /* @__PURE__ */ new Map();
3012
+ const touch = (key, now) => {
3013
+ cache.delete(key);
3014
+ cache.set(key, now);
3015
+ };
3016
+ const prune = (now) => {
3017
+ const cutoff = ttlMs > 0 ? now - ttlMs : void 0;
3018
+ if (cutoff !== void 0) {
3019
+ for (const [entryKey, entryTs] of cache) if (entryTs < cutoff) cache.delete(entryKey);
3020
+ }
3021
+ if (maxSize <= 0) {
3022
+ cache.clear();
3023
+ return;
3024
+ }
3025
+ pruneMapToMaxSize(cache, maxSize);
3026
+ };
3027
+ const hasUnexpired = (key, now, touchOnRead) => {
3028
+ const existing = cache.get(key);
3029
+ if (existing === void 0) return false;
3030
+ if (ttlMs > 0 && now - existing >= ttlMs) {
3031
+ cache.delete(key);
3032
+ return false;
3033
+ }
3034
+ if (touchOnRead) touch(key, now);
3035
+ return true;
3036
+ };
3037
+ return {
3038
+ check: (key, now = Date.now()) => {
3039
+ if (!key) return false;
3040
+ if (hasUnexpired(key, now, true)) return true;
3041
+ touch(key, now);
3042
+ prune(now);
3043
+ return false;
3044
+ },
3045
+ peek: (key, now = Date.now()) => {
3046
+ if (!key) return false;
3047
+ return hasUnexpired(key, now, false);
3048
+ },
3049
+ clear: () => {
3050
+ cache.clear();
3051
+ },
3052
+ size: () => cache.size
3053
+ };
3054
+ }
3055
+
3056
+ //#endregion
3057
+ //#region src/web/inbound/dedupe.ts
3058
+ const recentInboundMessages = createDedupeCache({
3059
+ ttlMs: 20 * 6e4,
3060
+ maxSize: 5e3
3061
+ });
3062
+
3063
+ //#endregion
3064
+ //#region src/auto-reply/reply/inbound-dedupe.ts
3065
+ const inboundDedupeCache = createDedupeCache({
3066
+ ttlMs: 20 * 6e4,
3067
+ maxSize: 5e3
3068
+ });
3069
+
3070
+ //#endregion
3071
+ export { DiscordSendError as n, fetchChannelPermissionsDiscord as r, sendMessageWhatsApp, sendMessageDiscord as t };