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
@@ -1,1775 +0,0 @@
1
- import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
- import { H as CONFIG_DIR, dt as danger, ht as logVerbose, n as isTruthyEnvValue, o as createSubsystemLogger, un as expandHomePrefix } from "./entry.js";
3
- import { i as loadConfig, l as writeConfigFile, nt as resolveTelegramPreviewStreamMode, s as readConfigFileSnapshotForWrite } from "./config-FHu9Bn4R.js";
4
- import { d as resolveTelegramAccount } from "./plugins-BflZz0sp.js";
5
- import { n as redactSensitiveText } from "./redact-Dx1Fue21.js";
6
- import { n as resolveMarkdownTableMode } from "./markdown-tables-jrnSPvZ6.js";
7
- import { i as markdownToIR, r as chunkMarkdownIR, t as loadWebMedia } from "./media-DN7yRfrH.js";
8
- import { t as renderMarkdownWithMarkers } from "./render-uf6PvGMV.js";
9
- import { n as normalizePollInput } from "./polls-CwwHzYBM.js";
10
- import { o as isGifMedia, u as mediaKindFromMime } from "./mime-Cxh_64P6.js";
11
- import { t as isTelegramVoiceCompatibleAudio } from "./audio-VBcVDa08.js";
12
- import { n as formatErrorMessage, r as formatUncaughtError, t as extractErrorCode } from "./errors-DZ199hOo.js";
13
- import { i as readChannelAllowFromStore } from "./pairing-store-CTkD51uW.js";
14
- import { t as resolveFetch } from "./fetch-CEDsOiql.js";
15
- import { i as createTelegramRetryRunner, n as recordChannelActivity } from "./channel-activity-DTKGf3j5.js";
16
- import { n as normalizeTelegramLookupTarget, r as parseTelegramTarget, t as normalizeTelegramChatId } from "./targets-UncQvCVs.js";
17
- import { t as formatLocationText } from "./location-GbZ0bBRU.js";
18
- import { n as isWSL2Sync } from "./wsl-B_sPlzWw.js";
19
- import { t as makeProxyFetch } from "./proxy-DpNv2cSV.js";
20
- import process$1 from "node:process";
21
- import path from "node:path";
22
- import fs from "node:fs";
23
- import JSON5 from "json5";
24
- import * as net$1 from "node:net";
25
- import * as dns from "node:dns";
26
- import { Agent, setGlobalDispatcher } from "undici";
27
- import { Bot, HttpError, InputFile } from "grammy";
28
-
29
- //#region src/infra/diagnostic-flags.ts
30
- const DIAGNOSTICS_ENV = "REMOTECLAW_DIAGNOSTICS";
31
- function normalizeFlag(value) {
32
- return value.trim().toLowerCase();
33
- }
34
- function parseEnvFlags(raw) {
35
- if (!raw) return [];
36
- const trimmed = raw.trim();
37
- if (!trimmed) return [];
38
- const lowered = trimmed.toLowerCase();
39
- if ([
40
- "0",
41
- "false",
42
- "off",
43
- "none"
44
- ].includes(lowered)) return [];
45
- if ([
46
- "1",
47
- "true",
48
- "all",
49
- "*"
50
- ].includes(lowered)) return ["*"];
51
- return trimmed.split(/[,\s]+/).map(normalizeFlag).filter(Boolean);
52
- }
53
- function uniqueFlags(flags) {
54
- const seen = /* @__PURE__ */ new Set();
55
- const out = [];
56
- for (const flag of flags) {
57
- const normalized = normalizeFlag(flag);
58
- if (!normalized || seen.has(normalized)) continue;
59
- seen.add(normalized);
60
- out.push(normalized);
61
- }
62
- return out;
63
- }
64
- function resolveDiagnosticFlags(cfg, env = process.env) {
65
- const configFlags = Array.isArray(cfg?.diagnostics?.flags) ? cfg?.diagnostics?.flags : [];
66
- const envFlags = parseEnvFlags(env[DIAGNOSTICS_ENV]);
67
- return uniqueFlags([...configFlags, ...envFlags]);
68
- }
69
- function matchesDiagnosticFlag(flag, enabledFlags) {
70
- const target = normalizeFlag(flag);
71
- if (!target) return false;
72
- for (const raw of enabledFlags) {
73
- const enabled = normalizeFlag(raw);
74
- if (!enabled) continue;
75
- if (enabled === "*" || enabled === "all") return true;
76
- if (enabled.endsWith(".*")) {
77
- const prefix = enabled.slice(0, -2);
78
- if (target === prefix || target.startsWith(`${prefix}.`)) return true;
79
- }
80
- if (enabled.endsWith("*")) {
81
- const prefix = enabled.slice(0, -1);
82
- if (target.startsWith(prefix)) return true;
83
- }
84
- if (enabled === target) return true;
85
- }
86
- return false;
87
- }
88
- function isDiagnosticFlagEnabled(flag, cfg, env = process.env) {
89
- return matchesDiagnosticFlag(flag, resolveDiagnosticFlags(cfg, env));
90
- }
91
-
92
- //#endregion
93
- //#region src/telegram/api-logging.ts
94
- const fallbackLogger = createSubsystemLogger("telegram/api");
95
- function resolveTelegramApiLogger(runtime, logger) {
96
- if (logger) return logger;
97
- if (runtime?.error) return runtime.error;
98
- return (message) => fallbackLogger.error(message);
99
- }
100
- async function withTelegramApiErrorLogging({ operation, fn, runtime, logger, shouldLog }) {
101
- try {
102
- return await fn();
103
- } catch (err) {
104
- if (!shouldLog || shouldLog(err)) {
105
- const errText = formatErrorMessage(err);
106
- resolveTelegramApiLogger(runtime, logger)(danger(`telegram ${operation} failed: ${errText}`));
107
- }
108
- throw err;
109
- }
110
- }
111
-
112
- //#endregion
113
- //#region src/channels/allow-from.ts
114
- function mergeAllowFromSources(params) {
115
- const storeEntries = params.dmPolicy === "allowlist" ? [] : params.storeAllowFrom ?? [];
116
- return [...params.allowFrom ?? [], ...storeEntries].map((value) => String(value).trim()).filter(Boolean);
117
- }
118
- function firstDefined(...values) {
119
- for (const value of values) if (typeof value !== "undefined") return value;
120
- }
121
- function isSenderIdAllowed(allow, senderId, allowWhenEmpty) {
122
- if (!allow.hasEntries) return allowWhenEmpty;
123
- if (allow.hasWildcard) return true;
124
- if (!senderId) return false;
125
- return allow.entries.includes(senderId);
126
- }
127
-
128
- //#endregion
129
- //#region src/telegram/bot-access.ts
130
- const warnedInvalidEntries = /* @__PURE__ */ new Set();
131
- const log$1 = createSubsystemLogger("telegram/bot-access");
132
- function warnInvalidAllowFromEntries(entries) {
133
- if (process.env.VITEST || false) return;
134
- for (const entry of entries) {
135
- if (warnedInvalidEntries.has(entry)) continue;
136
- warnedInvalidEntries.add(entry);
137
- log$1.warn([
138
- "Invalid allowFrom entry:",
139
- JSON.stringify(entry),
140
- "- allowFrom/groupAllowFrom authorization requires numeric Telegram sender IDs only.",
141
- "If you had \"@username\" entries, re-run onboarding (it resolves @username to IDs) or replace them manually."
142
- ].join(" "));
143
- }
144
- }
145
- const normalizeAllowFrom = (list) => {
146
- const entries = (list ?? []).map((value) => String(value).trim()).filter(Boolean);
147
- const hasWildcard = entries.includes("*");
148
- const normalized = entries.filter((value) => value !== "*").map((value) => value.replace(/^(telegram|tg):/i, ""));
149
- const invalidEntries = normalized.filter((value) => !/^\d+$/.test(value));
150
- if (invalidEntries.length > 0) warnInvalidAllowFromEntries([...new Set(invalidEntries)]);
151
- return {
152
- entries: normalized.filter((value) => /^\d+$/.test(value)),
153
- hasWildcard,
154
- hasEntries: entries.length > 0,
155
- invalidEntries
156
- };
157
- };
158
- const normalizeAllowFromWithStore = (params) => normalizeAllowFrom(mergeAllowFromSources(params));
159
- const isSenderAllowed = (params) => {
160
- const { allow, senderId } = params;
161
- return isSenderIdAllowed(allow, senderId, true);
162
- };
163
- const resolveSenderAllowMatch = (params) => {
164
- const { allow, senderId } = params;
165
- if (allow.hasWildcard) return {
166
- allowed: true,
167
- matchKey: "*",
168
- matchSource: "wildcard"
169
- };
170
- if (!allow.hasEntries) return { allowed: false };
171
- if (senderId && allow.entries.includes(senderId)) return {
172
- allowed: true,
173
- matchKey: senderId,
174
- matchSource: "id"
175
- };
176
- return { allowed: false };
177
- };
178
-
179
- //#endregion
180
- //#region src/telegram/bot/helpers.ts
181
- const TELEGRAM_GENERAL_TOPIC_ID = 1;
182
- async function resolveTelegramGroupAllowFromContext(params) {
183
- const resolvedThreadId = resolveTelegramForumThreadId({
184
- isForum: params.isForum,
185
- messageThreadId: params.messageThreadId
186
- });
187
- const storeAllowFrom = await readChannelAllowFromStore("telegram", process.env, params.accountId).catch(() => []);
188
- const { groupConfig, topicConfig } = params.resolveTelegramGroupConfig(params.chatId, resolvedThreadId);
189
- const groupAllowOverride = firstDefined(topicConfig?.allowFrom, groupConfig?.allowFrom);
190
- return {
191
- resolvedThreadId,
192
- storeAllowFrom,
193
- groupConfig,
194
- topicConfig,
195
- groupAllowOverride,
196
- effectiveGroupAllow: normalizeAllowFromWithStore({
197
- allowFrom: groupAllowOverride ?? params.groupAllowFrom,
198
- storeAllowFrom,
199
- dmPolicy: params.dmPolicy
200
- }),
201
- hasGroupAllowOverride: typeof groupAllowOverride !== "undefined"
202
- };
203
- }
204
- /**
205
- * Resolve the thread ID for Telegram forum topics.
206
- * For non-forum groups, returns undefined even if messageThreadId is present
207
- * (reply threads in regular groups should not create separate sessions).
208
- * For forum groups, returns the topic ID (or General topic ID=1 if unspecified).
209
- */
210
- function resolveTelegramForumThreadId(params) {
211
- if (!params.isForum) return;
212
- if (params.messageThreadId == null) return TELEGRAM_GENERAL_TOPIC_ID;
213
- return params.messageThreadId;
214
- }
215
- function resolveTelegramThreadSpec(params) {
216
- if (params.isGroup) return {
217
- id: resolveTelegramForumThreadId({
218
- isForum: params.isForum,
219
- messageThreadId: params.messageThreadId
220
- }),
221
- scope: params.isForum ? "forum" : "none"
222
- };
223
- if (params.messageThreadId == null) return { scope: "dm" };
224
- return {
225
- id: params.messageThreadId,
226
- scope: "dm"
227
- };
228
- }
229
- /**
230
- * Build thread params for Telegram API calls (messages, media).
231
- *
232
- * IMPORTANT: Thread IDs behave differently based on chat type:
233
- * - DMs (private chats): Include message_thread_id when present (DM topics)
234
- * - Forum topics: Skip thread_id=1 (General topic), include others
235
- * - Regular groups: Thread IDs are ignored by Telegram
236
- *
237
- * General forum topic (id=1) must be treated like a regular supergroup send:
238
- * Telegram rejects sendMessage/sendMedia with message_thread_id=1 ("thread not found").
239
- *
240
- * @param thread - Thread specification with ID and scope
241
- * @returns API params object or undefined if thread_id should be omitted
242
- */
243
- function buildTelegramThreadParams(thread) {
244
- if (thread?.id == null) return;
245
- const normalized = Math.trunc(thread.id);
246
- if (thread.scope === "dm") return normalized > 0 ? { message_thread_id: normalized } : void 0;
247
- if (normalized === TELEGRAM_GENERAL_TOPIC_ID) return;
248
- return { message_thread_id: normalized };
249
- }
250
- /**
251
- * Build thread params for typing indicators (sendChatAction).
252
- * Empirically, General topic (id=1) needs message_thread_id for typing to appear.
253
- */
254
- function buildTypingThreadParams(messageThreadId) {
255
- if (messageThreadId == null) return;
256
- return { message_thread_id: Math.trunc(messageThreadId) };
257
- }
258
- function resolveTelegramStreamMode(telegramCfg) {
259
- return resolveTelegramPreviewStreamMode(telegramCfg);
260
- }
261
- function buildTelegramGroupPeerId(chatId, messageThreadId) {
262
- return messageThreadId != null ? `${chatId}:topic:${messageThreadId}` : String(chatId);
263
- }
264
- function buildTelegramGroupFrom(chatId, messageThreadId) {
265
- return `telegram:group:${buildTelegramGroupPeerId(chatId, messageThreadId)}`;
266
- }
267
- /**
268
- * Build parentPeer for forum topic binding inheritance.
269
- * When a message comes from a forum topic, the peer ID includes the topic suffix
270
- * (e.g., `-1001234567890:topic:99`). To allow bindings configured for the base
271
- * group ID to match, we provide the parent group as `parentPeer` so the routing
272
- * layer can fall back to it when the exact peer doesn't match.
273
- */
274
- function buildTelegramParentPeer(params) {
275
- if (!params.isGroup || params.resolvedThreadId == null) return;
276
- return {
277
- kind: "group",
278
- id: String(params.chatId)
279
- };
280
- }
281
- function buildSenderName(msg) {
282
- return [msg.from?.first_name, msg.from?.last_name].filter(Boolean).join(" ").trim() || msg.from?.username || void 0;
283
- }
284
- function resolveTelegramMediaPlaceholder(msg) {
285
- if (!msg) return;
286
- if (msg.photo) return "<media:image>";
287
- if (msg.video || msg.video_note) return "<media:video>";
288
- if (msg.audio || msg.voice) return "<media:audio>";
289
- if (msg.document) return "<media:document>";
290
- if (msg.sticker) return "<media:sticker>";
291
- }
292
- function buildSenderLabel(msg, senderId) {
293
- const name = buildSenderName(msg);
294
- const username = msg.from?.username ? `@${msg.from.username}` : void 0;
295
- let label = name;
296
- if (name && username) label = `${name} (${username})`;
297
- else if (!name && username) label = username;
298
- const fallbackId = (senderId != null && `${senderId}`.trim() ? `${senderId}`.trim() : void 0) ?? (msg.from?.id != null ? String(msg.from.id) : void 0);
299
- const idPart = fallbackId ? `id:${fallbackId}` : void 0;
300
- if (label && idPart) return `${label} ${idPart}`;
301
- if (label) return label;
302
- return idPart ?? "id:unknown";
303
- }
304
- function buildGroupLabel(msg, chatId, messageThreadId) {
305
- const title = msg.chat?.title;
306
- const topicSuffix = messageThreadId != null ? ` topic:${messageThreadId}` : "";
307
- if (title) return `${title} id:${chatId}${topicSuffix}`;
308
- return `group:${chatId}${topicSuffix}`;
309
- }
310
- function hasBotMention(msg, botUsername) {
311
- if ((msg.text ?? msg.caption ?? "").toLowerCase().includes(`@${botUsername}`)) return true;
312
- const entities = msg.entities ?? msg.caption_entities ?? [];
313
- for (const ent of entities) {
314
- if (ent.type !== "mention") continue;
315
- if ((msg.text ?? msg.caption ?? "").slice(ent.offset, ent.offset + ent.length).toLowerCase() === `@${botUsername}`) return true;
316
- }
317
- return false;
318
- }
319
- function expandTextLinks(text, entities) {
320
- if (!text || !entities?.length) return text;
321
- const textLinks = entities.filter((entity) => entity.type === "text_link" && Boolean(entity.url)).toSorted((a, b) => b.offset - a.offset);
322
- if (textLinks.length === 0) return text;
323
- let result = text;
324
- for (const entity of textLinks) {
325
- const markdown = `[${text.slice(entity.offset, entity.offset + entity.length)}](${entity.url})`;
326
- result = result.slice(0, entity.offset) + markdown + result.slice(entity.offset + entity.length);
327
- }
328
- return result;
329
- }
330
- function resolveTelegramReplyId(raw) {
331
- if (!raw) return;
332
- const parsed = Number(raw);
333
- if (!Number.isFinite(parsed)) return;
334
- return parsed;
335
- }
336
- function describeReplyTarget(msg) {
337
- const reply = msg.reply_to_message;
338
- const externalReply = msg.external_reply;
339
- const quoteText = msg.quote?.text ?? externalReply?.quote?.text;
340
- let body = "";
341
- let kind = "reply";
342
- if (typeof quoteText === "string") {
343
- body = quoteText.trim();
344
- if (body) kind = "quote";
345
- }
346
- const replyLike = reply ?? externalReply;
347
- if (!body && replyLike) {
348
- body = (replyLike.text ?? replyLike.caption ?? "").trim();
349
- if (!body) {
350
- body = resolveTelegramMediaPlaceholder(replyLike) ?? "";
351
- if (!body) {
352
- const locationData = extractTelegramLocation(replyLike);
353
- if (locationData) body = formatLocationText(locationData);
354
- }
355
- }
356
- }
357
- if (!body) return null;
358
- const senderLabel = (replyLike ? buildSenderName(replyLike) : void 0) ?? "unknown sender";
359
- const forwardedFrom = replyLike?.forward_origin ? resolveForwardOrigin(replyLike.forward_origin) ?? void 0 : void 0;
360
- return {
361
- id: replyLike?.message_id ? String(replyLike.message_id) : void 0,
362
- sender: senderLabel,
363
- body,
364
- kind,
365
- forwardedFrom
366
- };
367
- }
368
- function normalizeForwardedUserLabel(user) {
369
- const name = [user.first_name, user.last_name].filter(Boolean).join(" ").trim();
370
- const username = user.username?.trim() || void 0;
371
- const id = String(user.id);
372
- return {
373
- display: (name && username ? `${name} (@${username})` : name || (username ? `@${username}` : void 0)) || `user:${id}`,
374
- name: name || void 0,
375
- username,
376
- id
377
- };
378
- }
379
- function normalizeForwardedChatLabel(chat, fallbackKind) {
380
- const title = chat.title?.trim() || void 0;
381
- const username = chat.username?.trim() || void 0;
382
- const id = String(chat.id);
383
- return {
384
- display: title || (username ? `@${username}` : void 0) || `${fallbackKind}:${id}`,
385
- title,
386
- username,
387
- id
388
- };
389
- }
390
- function buildForwardedContextFromUser(params) {
391
- const { display, name, username, id } = normalizeForwardedUserLabel(params.user);
392
- if (!display) return null;
393
- return {
394
- from: display,
395
- date: params.date,
396
- fromType: params.type,
397
- fromId: id,
398
- fromUsername: username,
399
- fromTitle: name
400
- };
401
- }
402
- function buildForwardedContextFromHiddenName(params) {
403
- const trimmed = params.name?.trim();
404
- if (!trimmed) return null;
405
- return {
406
- from: trimmed,
407
- date: params.date,
408
- fromType: params.type,
409
- fromTitle: trimmed
410
- };
411
- }
412
- function buildForwardedContextFromChat(params) {
413
- const fallbackKind = params.type === "channel" ? "channel" : "chat";
414
- const { display, title, username, id } = normalizeForwardedChatLabel(params.chat, fallbackKind);
415
- if (!display) return null;
416
- const signature = params.signature?.trim() || void 0;
417
- const from = signature ? `${display} (${signature})` : display;
418
- const chatType = params.chat.type?.trim() || void 0;
419
- return {
420
- from,
421
- date: params.date,
422
- fromType: params.type,
423
- fromId: id,
424
- fromUsername: username,
425
- fromTitle: title,
426
- fromSignature: signature,
427
- fromChatType: chatType,
428
- fromMessageId: params.messageId
429
- };
430
- }
431
- function resolveForwardOrigin(origin) {
432
- switch (origin.type) {
433
- case "user": return buildForwardedContextFromUser({
434
- user: origin.sender_user,
435
- date: origin.date,
436
- type: "user"
437
- });
438
- case "hidden_user": return buildForwardedContextFromHiddenName({
439
- name: origin.sender_user_name,
440
- date: origin.date,
441
- type: "hidden_user"
442
- });
443
- case "chat": return buildForwardedContextFromChat({
444
- chat: origin.sender_chat,
445
- date: origin.date,
446
- type: "chat",
447
- signature: origin.author_signature
448
- });
449
- case "channel": return buildForwardedContextFromChat({
450
- chat: origin.chat,
451
- date: origin.date,
452
- type: "channel",
453
- signature: origin.author_signature,
454
- messageId: origin.message_id
455
- });
456
- default: return null;
457
- }
458
- }
459
- /** Extract forwarded message origin info from Telegram message. */
460
- function normalizeForwardedContext(msg) {
461
- if (!msg.forward_origin) return null;
462
- return resolveForwardOrigin(msg.forward_origin);
463
- }
464
- function extractTelegramLocation(msg) {
465
- const { venue, location } = msg;
466
- if (venue) return {
467
- latitude: venue.location.latitude,
468
- longitude: venue.location.longitude,
469
- accuracy: venue.location.horizontal_accuracy,
470
- name: venue.title,
471
- address: venue.address,
472
- source: "place",
473
- isLive: false
474
- };
475
- if (location) {
476
- const isLive = typeof location.live_period === "number" && location.live_period > 0;
477
- return {
478
- latitude: location.latitude,
479
- longitude: location.longitude,
480
- accuracy: location.horizontal_accuracy,
481
- source: isLive ? "live" : "pin",
482
- isLive
483
- };
484
- }
485
- return null;
486
- }
487
-
488
- //#endregion
489
- //#region src/telegram/caption.ts
490
- const TELEGRAM_MAX_CAPTION_LENGTH = 1024;
491
- function splitTelegramCaption(text) {
492
- const trimmed = text?.trim() ?? "";
493
- if (!trimmed) return {
494
- caption: void 0,
495
- followUpText: void 0
496
- };
497
- if (trimmed.length > TELEGRAM_MAX_CAPTION_LENGTH) return {
498
- caption: void 0,
499
- followUpText: trimmed
500
- };
501
- return {
502
- caption: trimmed,
503
- followUpText: void 0
504
- };
505
- }
506
-
507
- //#endregion
508
- //#region src/telegram/network-config.ts
509
- const TELEGRAM_DISABLE_AUTO_SELECT_FAMILY_ENV = "REMOTECLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY";
510
- const TELEGRAM_ENABLE_AUTO_SELECT_FAMILY_ENV = "REMOTECLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY";
511
- const TELEGRAM_DNS_RESULT_ORDER_ENV = "REMOTECLAW_TELEGRAM_DNS_RESULT_ORDER";
512
- let wsl2SyncCache;
513
- function isWSL2SyncCached() {
514
- if (typeof wsl2SyncCache === "boolean") return wsl2SyncCache;
515
- wsl2SyncCache = isWSL2Sync();
516
- return wsl2SyncCache;
517
- }
518
- function resolveTelegramAutoSelectFamilyDecision(params) {
519
- const env = params?.env ?? process$1.env;
520
- const nodeMajor = typeof params?.nodeMajor === "number" ? params.nodeMajor : Number(process$1.versions.node.split(".")[0]);
521
- if (isTruthyEnvValue(env[TELEGRAM_ENABLE_AUTO_SELECT_FAMILY_ENV])) return {
522
- value: true,
523
- source: `env:${TELEGRAM_ENABLE_AUTO_SELECT_FAMILY_ENV}`
524
- };
525
- if (isTruthyEnvValue(env[TELEGRAM_DISABLE_AUTO_SELECT_FAMILY_ENV])) return {
526
- value: false,
527
- source: `env:${TELEGRAM_DISABLE_AUTO_SELECT_FAMILY_ENV}`
528
- };
529
- if (typeof params?.network?.autoSelectFamily === "boolean") return {
530
- value: params.network.autoSelectFamily,
531
- source: "config"
532
- };
533
- if (isWSL2SyncCached()) return {
534
- value: false,
535
- source: "default-wsl2"
536
- };
537
- if (Number.isFinite(nodeMajor) && nodeMajor >= 22) return {
538
- value: true,
539
- source: "default-node22"
540
- };
541
- return { value: null };
542
- }
543
- /**
544
- * Resolve DNS result order setting for Telegram network requests.
545
- * Some networks/ISPs have issues with IPv6 causing fetch failures.
546
- * Setting "ipv4first" prioritizes IPv4 addresses in DNS resolution.
547
- *
548
- * Priority:
549
- * 1. Environment variable REMOTECLAW_TELEGRAM_DNS_RESULT_ORDER
550
- * 2. Config: channels.telegram.network.dnsResultOrder
551
- * 3. Default: "ipv4first" on Node 22+ (to work around common IPv6 issues)
552
- */
553
- function resolveTelegramDnsResultOrderDecision(params) {
554
- const env = params?.env ?? process$1.env;
555
- const nodeMajor = typeof params?.nodeMajor === "number" ? params.nodeMajor : Number(process$1.versions.node.split(".")[0]);
556
- const envValue = env[TELEGRAM_DNS_RESULT_ORDER_ENV]?.trim().toLowerCase();
557
- if (envValue === "ipv4first" || envValue === "verbatim") return {
558
- value: envValue,
559
- source: `env:${TELEGRAM_DNS_RESULT_ORDER_ENV}`
560
- };
561
- const configValue = (params?.network)?.dnsResultOrder?.trim().toLowerCase();
562
- if (configValue === "ipv4first" || configValue === "verbatim") return {
563
- value: configValue,
564
- source: "config"
565
- };
566
- if (Number.isFinite(nodeMajor) && nodeMajor >= 22) return {
567
- value: "ipv4first",
568
- source: "default-node22"
569
- };
570
- return { value: null };
571
- }
572
-
573
- //#endregion
574
- //#region src/telegram/fetch.ts
575
- let appliedAutoSelectFamily = null;
576
- let appliedDnsResultOrder = null;
577
- let appliedGlobalDispatcherAutoSelectFamily = null;
578
- const log = createSubsystemLogger("telegram/network");
579
- function applyTelegramNetworkWorkarounds(network) {
580
- const autoSelectDecision = resolveTelegramAutoSelectFamilyDecision({ network });
581
- if (autoSelectDecision.value !== null && autoSelectDecision.value !== appliedAutoSelectFamily) {
582
- if (typeof net$1.setDefaultAutoSelectFamily === "function") try {
583
- net$1.setDefaultAutoSelectFamily(autoSelectDecision.value);
584
- appliedAutoSelectFamily = autoSelectDecision.value;
585
- const label = autoSelectDecision.source ? ` (${autoSelectDecision.source})` : "";
586
- log.info(`autoSelectFamily=${autoSelectDecision.value}${label}`);
587
- } catch {}
588
- }
589
- if (autoSelectDecision.value !== null && autoSelectDecision.value !== appliedGlobalDispatcherAutoSelectFamily) try {
590
- setGlobalDispatcher(new Agent({ connect: {
591
- autoSelectFamily: autoSelectDecision.value,
592
- autoSelectFamilyAttemptTimeout: 300
593
- } }));
594
- appliedGlobalDispatcherAutoSelectFamily = autoSelectDecision.value;
595
- log.info(`global undici dispatcher autoSelectFamily=${autoSelectDecision.value}`);
596
- } catch {}
597
- const dnsDecision = resolveTelegramDnsResultOrderDecision({ network });
598
- if (dnsDecision.value !== null && dnsDecision.value !== appliedDnsResultOrder) {
599
- if (typeof dns.setDefaultResultOrder === "function") try {
600
- dns.setDefaultResultOrder(dnsDecision.value);
601
- appliedDnsResultOrder = dnsDecision.value;
602
- const label = dnsDecision.source ? ` (${dnsDecision.source})` : "";
603
- log.info(`dnsResultOrder=${dnsDecision.value}${label}`);
604
- } catch {}
605
- }
606
- }
607
- function resolveTelegramFetch(proxyFetch, options) {
608
- applyTelegramNetworkWorkarounds(options?.network);
609
- if (proxyFetch) return resolveFetch(proxyFetch);
610
- const fetchImpl = resolveFetch();
611
- if (!fetchImpl) throw new Error("fetch is not available; set channels.telegram.proxy in config");
612
- return fetchImpl;
613
- }
614
-
615
- //#endregion
616
- //#region src/telegram/format.ts
617
- function escapeHtml(text) {
618
- return text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
619
- }
620
- function escapeHtmlAttr(text) {
621
- return escapeHtml(text).replace(/"/g, "&quot;");
622
- }
623
- /**
624
- * File extensions that share TLDs and commonly appear in code/documentation.
625
- * These are wrapped in <code> tags to prevent Telegram from generating
626
- * spurious domain registrar previews.
627
- *
628
- * Only includes extensions that are:
629
- * 1. Commonly used as file extensions in code/docs
630
- * 2. Rarely used as intentional domain references
631
- *
632
- * Excluded: .ai, .io, .tv, .fm (popular domain TLDs like x.ai, vercel.io, github.io)
633
- */
634
- const FILE_EXTENSIONS_WITH_TLD = new Set([
635
- "md",
636
- "go",
637
- "py",
638
- "pl",
639
- "sh",
640
- "am",
641
- "at",
642
- "be",
643
- "cc"
644
- ]);
645
- /** Detects when markdown-it linkify auto-generated a link from a bare filename (e.g. README.md → http://README.md) */
646
- function isAutoLinkedFileRef(href, label) {
647
- if (href.replace(/^https?:\/\//i, "") !== label) return false;
648
- const dotIndex = label.lastIndexOf(".");
649
- if (dotIndex < 1) return false;
650
- const ext = label.slice(dotIndex + 1).toLowerCase();
651
- if (!FILE_EXTENSIONS_WITH_TLD.has(ext)) return false;
652
- const segments = label.split("/");
653
- if (segments.length > 1) {
654
- for (let i = 0; i < segments.length - 1; i++) if (segments[i].includes(".")) return false;
655
- }
656
- return true;
657
- }
658
- function buildTelegramLink(link, text) {
659
- const href = link.href.trim();
660
- if (!href) return null;
661
- if (link.start === link.end) return null;
662
- if (isAutoLinkedFileRef(href, text.slice(link.start, link.end))) return null;
663
- const safeHref = escapeHtmlAttr(href);
664
- return {
665
- start: link.start,
666
- end: link.end,
667
- open: `<a href="${safeHref}">`,
668
- close: "</a>"
669
- };
670
- }
671
- function renderTelegramHtml(ir) {
672
- return renderMarkdownWithMarkers(ir, {
673
- styleMarkers: {
674
- bold: {
675
- open: "<b>",
676
- close: "</b>"
677
- },
678
- italic: {
679
- open: "<i>",
680
- close: "</i>"
681
- },
682
- strikethrough: {
683
- open: "<s>",
684
- close: "</s>"
685
- },
686
- code: {
687
- open: "<code>",
688
- close: "</code>"
689
- },
690
- code_block: {
691
- open: "<pre><code>",
692
- close: "</code></pre>"
693
- },
694
- spoiler: {
695
- open: "<tg-spoiler>",
696
- close: "</tg-spoiler>"
697
- },
698
- blockquote: {
699
- open: "<blockquote>",
700
- close: "</blockquote>"
701
- }
702
- },
703
- escapeText: escapeHtml,
704
- buildLink: buildTelegramLink
705
- });
706
- }
707
- function markdownToTelegramHtml(markdown, options = {}) {
708
- const html = renderTelegramHtml(markdownToIR(markdown ?? "", {
709
- linkify: true,
710
- enableSpoilers: true,
711
- headingStyle: "none",
712
- blockquotePrefix: "",
713
- tableMode: options.tableMode
714
- }));
715
- if (options.wrapFileRefs !== false) return wrapFileReferencesInHtml(html);
716
- return html;
717
- }
718
- /**
719
- * Wraps standalone file references (with TLD extensions) in <code> tags.
720
- * This prevents Telegram from treating them as URLs and generating
721
- * irrelevant domain registrar previews.
722
- *
723
- * Runs AFTER markdown→HTML conversion to avoid modifying HTML attributes.
724
- * Skips content inside <code>, <pre>, and <a> tags to avoid nesting issues.
725
- */
726
- /** Escape regex metacharacters in a string */
727
- function escapeRegex(str) {
728
- return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
729
- }
730
- const FILE_EXTENSIONS_PATTERN = Array.from(FILE_EXTENSIONS_WITH_TLD).map(escapeRegex).join("|");
731
- const AUTO_LINKED_ANCHOR_PATTERN = /<a\s+href="https?:\/\/([^"]+)"[^>]*>\1<\/a>/gi;
732
- const FILE_REFERENCE_PATTERN = new RegExp(`(^|[^a-zA-Z0-9_\\-/])([a-zA-Z0-9_.\\-./]+\\.(?:${FILE_EXTENSIONS_PATTERN}))(?=$|[^a-zA-Z0-9_\\-/])`, "gi");
733
- const ORPHANED_TLD_PATTERN = new RegExp(`([^a-zA-Z0-9]|^)([A-Za-z]\\.(?:${FILE_EXTENSIONS_PATTERN}))(?=[^a-zA-Z0-9/]|$)`, "g");
734
- const HTML_TAG_PATTERN = /(<\/?)([a-zA-Z][a-zA-Z0-9-]*)\b[^>]*?>/gi;
735
- function wrapStandaloneFileRef(match, prefix, filename) {
736
- if (filename.startsWith("//")) return match;
737
- if (/https?:\/\/$/i.test(prefix)) return match;
738
- return `${prefix}<code>${escapeHtml(filename)}</code>`;
739
- }
740
- function wrapSegmentFileRefs(text, codeDepth, preDepth, anchorDepth) {
741
- if (!text || codeDepth > 0 || preDepth > 0 || anchorDepth > 0) return text;
742
- return text.replace(FILE_REFERENCE_PATTERN, wrapStandaloneFileRef).replace(ORPHANED_TLD_PATTERN, (match, prefix, tld) => prefix === ">" ? match : `${prefix}<code>${escapeHtml(tld)}</code>`);
743
- }
744
- function wrapFileReferencesInHtml(html) {
745
- AUTO_LINKED_ANCHOR_PATTERN.lastIndex = 0;
746
- const deLinkified = html.replace(AUTO_LINKED_ANCHOR_PATTERN, (_match, label) => {
747
- if (!isAutoLinkedFileRef(`http://${label}`, label)) return _match;
748
- return `<code>${escapeHtml(label)}</code>`;
749
- });
750
- let codeDepth = 0;
751
- let preDepth = 0;
752
- let anchorDepth = 0;
753
- let result = "";
754
- let lastIndex = 0;
755
- HTML_TAG_PATTERN.lastIndex = 0;
756
- let match;
757
- while ((match = HTML_TAG_PATTERN.exec(deLinkified)) !== null) {
758
- const tagStart = match.index;
759
- const tagEnd = HTML_TAG_PATTERN.lastIndex;
760
- const isClosing = match[1] === "</";
761
- const tagName = match[2].toLowerCase();
762
- const textBefore = deLinkified.slice(lastIndex, tagStart);
763
- result += wrapSegmentFileRefs(textBefore, codeDepth, preDepth, anchorDepth);
764
- if (tagName === "code") codeDepth = isClosing ? Math.max(0, codeDepth - 1) : codeDepth + 1;
765
- else if (tagName === "pre") preDepth = isClosing ? Math.max(0, preDepth - 1) : preDepth + 1;
766
- else if (tagName === "a") anchorDepth = isClosing ? Math.max(0, anchorDepth - 1) : anchorDepth + 1;
767
- result += deLinkified.slice(tagStart, tagEnd);
768
- lastIndex = tagEnd;
769
- }
770
- const remainingText = deLinkified.slice(lastIndex);
771
- result += wrapSegmentFileRefs(remainingText, codeDepth, preDepth, anchorDepth);
772
- return result;
773
- }
774
- function renderTelegramHtmlText(text, options = {}) {
775
- if ((options.textMode ?? "markdown") === "html") return text;
776
- return markdownToTelegramHtml(text, { tableMode: options.tableMode });
777
- }
778
- function markdownToTelegramChunks(markdown, limit, options = {}) {
779
- return chunkMarkdownIR(markdownToIR(markdown ?? "", {
780
- linkify: true,
781
- enableSpoilers: true,
782
- headingStyle: "none",
783
- blockquotePrefix: "",
784
- tableMode: options.tableMode
785
- }), limit).map((chunk) => ({
786
- html: wrapFileReferencesInHtml(renderTelegramHtml(chunk)),
787
- text: chunk.text
788
- }));
789
- }
790
-
791
- //#endregion
792
- //#region src/telegram/network-errors.ts
793
- const RECOVERABLE_ERROR_CODES = new Set([
794
- "ECONNRESET",
795
- "ECONNREFUSED",
796
- "EPIPE",
797
- "ETIMEDOUT",
798
- "ESOCKETTIMEDOUT",
799
- "ENETUNREACH",
800
- "EHOSTUNREACH",
801
- "ENOTFOUND",
802
- "EAI_AGAIN",
803
- "UND_ERR_CONNECT_TIMEOUT",
804
- "UND_ERR_HEADERS_TIMEOUT",
805
- "UND_ERR_BODY_TIMEOUT",
806
- "UND_ERR_SOCKET",
807
- "UND_ERR_ABORTED",
808
- "ECONNABORTED",
809
- "ERR_NETWORK"
810
- ]);
811
- const RECOVERABLE_ERROR_NAMES = new Set([
812
- "AbortError",
813
- "TimeoutError",
814
- "ConnectTimeoutError",
815
- "HeadersTimeoutError",
816
- "BodyTimeoutError"
817
- ]);
818
- const ALWAYS_RECOVERABLE_MESSAGES = new Set(["fetch failed", "typeerror: fetch failed"]);
819
- const RECOVERABLE_MESSAGE_SNIPPETS = [
820
- "undici",
821
- "network error",
822
- "network request",
823
- "client network socket disconnected",
824
- "socket hang up",
825
- "getaddrinfo",
826
- "timeout",
827
- "timed out"
828
- ];
829
- function normalizeCode(code) {
830
- return code?.trim().toUpperCase() ?? "";
831
- }
832
- function getErrorName(err) {
833
- if (!err || typeof err !== "object") return "";
834
- return "name" in err ? String(err.name) : "";
835
- }
836
- function getErrorCode(err) {
837
- const direct = extractErrorCode(err);
838
- if (direct) return direct;
839
- if (!err || typeof err !== "object") return;
840
- const errno = err.errno;
841
- if (typeof errno === "string") return errno;
842
- if (typeof errno === "number") return String(errno);
843
- }
844
- function collectErrorCandidates(err) {
845
- const queue = [err];
846
- const seen = /* @__PURE__ */ new Set();
847
- const candidates = [];
848
- while (queue.length > 0) {
849
- const current = queue.shift();
850
- if (current == null || seen.has(current)) continue;
851
- seen.add(current);
852
- candidates.push(current);
853
- if (typeof current === "object") {
854
- const cause = current.cause;
855
- if (cause && !seen.has(cause)) queue.push(cause);
856
- const reason = current.reason;
857
- if (reason && !seen.has(reason)) queue.push(reason);
858
- const errors = current.errors;
859
- if (Array.isArray(errors)) {
860
- for (const nested of errors) if (nested && !seen.has(nested)) queue.push(nested);
861
- }
862
- if (getErrorName(current) === "HttpError") {
863
- const wrappedError = current.error;
864
- if (wrappedError && !seen.has(wrappedError)) queue.push(wrappedError);
865
- }
866
- }
867
- }
868
- return candidates;
869
- }
870
- function isRecoverableTelegramNetworkError(err, options = {}) {
871
- if (!err) return false;
872
- const allowMessageMatch = typeof options.allowMessageMatch === "boolean" ? options.allowMessageMatch : options.context !== "send";
873
- for (const candidate of collectErrorCandidates(err)) {
874
- const code = normalizeCode(getErrorCode(candidate));
875
- if (code && RECOVERABLE_ERROR_CODES.has(code)) return true;
876
- const name = getErrorName(candidate);
877
- if (name && RECOVERABLE_ERROR_NAMES.has(name)) return true;
878
- const message = formatErrorMessage(candidate).trim().toLowerCase();
879
- if (message && ALWAYS_RECOVERABLE_MESSAGES.has(message)) return true;
880
- if (allowMessageMatch && message) {
881
- if (RECOVERABLE_MESSAGE_SNIPPETS.some((snippet) => message.includes(snippet))) return true;
882
- }
883
- }
884
- return false;
885
- }
886
-
887
- //#endregion
888
- //#region src/telegram/sent-message-cache.ts
889
- /**
890
- * In-memory cache of sent message IDs per chat.
891
- * Used to identify bot's own messages for reaction filtering ("own" mode).
892
- */
893
- const TTL_MS = 1440 * 60 * 1e3;
894
- const sentMessages = /* @__PURE__ */ new Map();
895
- function getChatKey(chatId) {
896
- return String(chatId);
897
- }
898
- function cleanupExpired(entry) {
899
- const now = Date.now();
900
- for (const [msgId, timestamp] of entry.timestamps) if (now - timestamp > TTL_MS) entry.timestamps.delete(msgId);
901
- }
902
- /**
903
- * Record a message ID as sent by the bot.
904
- */
905
- function recordSentMessage(chatId, messageId) {
906
- const key = getChatKey(chatId);
907
- let entry = sentMessages.get(key);
908
- if (!entry) {
909
- entry = { timestamps: /* @__PURE__ */ new Map() };
910
- sentMessages.set(key, entry);
911
- }
912
- entry.timestamps.set(messageId, Date.now());
913
- if (entry.timestamps.size > 100) cleanupExpired(entry);
914
- }
915
- /**
916
- * Check if a message was sent by the bot.
917
- */
918
- function wasSentByBot(chatId, messageId) {
919
- const key = getChatKey(chatId);
920
- const entry = sentMessages.get(key);
921
- if (!entry) return false;
922
- cleanupExpired(entry);
923
- return entry.timestamps.has(messageId);
924
- }
925
-
926
- //#endregion
927
- //#region src/cron/store.ts
928
- const DEFAULT_CRON_DIR = path.join(CONFIG_DIR, "cron");
929
- const DEFAULT_CRON_STORE_PATH = path.join(DEFAULT_CRON_DIR, "jobs.json");
930
- function resolveCronStorePath(storePath) {
931
- if (storePath?.trim()) {
932
- const raw = storePath.trim();
933
- if (raw.startsWith("~")) return path.resolve(expandHomePrefix(raw));
934
- return path.resolve(raw);
935
- }
936
- return DEFAULT_CRON_STORE_PATH;
937
- }
938
- async function loadCronStore(storePath) {
939
- try {
940
- const raw = await fs.promises.readFile(storePath, "utf-8");
941
- let parsed;
942
- try {
943
- parsed = JSON5.parse(raw);
944
- } catch (err) {
945
- throw new Error(`Failed to parse cron store at ${storePath}: ${String(err)}`, { cause: err });
946
- }
947
- const parsedRecord = parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {};
948
- return {
949
- version: 1,
950
- jobs: (Array.isArray(parsedRecord.jobs) ? parsedRecord.jobs : []).filter(Boolean)
951
- };
952
- } catch (err) {
953
- if (err?.code === "ENOENT") return {
954
- version: 1,
955
- jobs: []
956
- };
957
- throw err;
958
- }
959
- }
960
- async function saveCronStore(storePath, store) {
961
- await fs.promises.mkdir(path.dirname(storePath), { recursive: true });
962
- const { randomBytes } = await import("node:crypto");
963
- const tmp = `${storePath}.${process.pid}.${randomBytes(8).toString("hex")}.tmp`;
964
- const json = JSON.stringify(store, null, 2);
965
- await fs.promises.writeFile(tmp, json, "utf-8");
966
- await fs.promises.rename(tmp, storePath);
967
- try {
968
- await fs.promises.copyFile(storePath, `${storePath}.bak`);
969
- } catch {}
970
- }
971
-
972
- //#endregion
973
- //#region src/telegram/target-writeback.ts
974
- const writebackLogger = createSubsystemLogger("telegram/target-writeback");
975
- function asObjectRecord(value) {
976
- if (!value || typeof value !== "object" || Array.isArray(value)) return null;
977
- return value;
978
- }
979
- function normalizeTelegramLookupTargetForMatch(raw) {
980
- const normalized = normalizeTelegramLookupTarget(raw);
981
- if (!normalized) return;
982
- return normalized.startsWith("@") ? normalized.toLowerCase() : normalized;
983
- }
984
- function normalizeTelegramTargetForMatch(raw) {
985
- const parsed = parseTelegramTarget(raw);
986
- const normalized = normalizeTelegramLookupTargetForMatch(parsed.chatId);
987
- if (!normalized) return;
988
- return `${normalized}|${parsed.messageThreadId == null ? "" : String(parsed.messageThreadId)}`;
989
- }
990
- function buildResolvedTelegramTarget(params) {
991
- const { raw, parsed, resolvedChatId } = params;
992
- if (parsed.messageThreadId == null) return resolvedChatId;
993
- return raw.includes(":topic:") ? `${resolvedChatId}:topic:${parsed.messageThreadId}` : `${resolvedChatId}:${parsed.messageThreadId}`;
994
- }
995
- function resolveLegacyRewrite(params) {
996
- const parsed = parseTelegramTarget(params.raw);
997
- if (normalizeTelegramChatId(parsed.chatId)) return null;
998
- const normalized = normalizeTelegramLookupTargetForMatch(parsed.chatId);
999
- if (!normalized) return null;
1000
- return {
1001
- matchKey: `${normalized}|${parsed.messageThreadId == null ? "" : String(parsed.messageThreadId)}`,
1002
- resolvedTarget: buildResolvedTelegramTarget({
1003
- raw: params.raw,
1004
- parsed,
1005
- resolvedChatId: params.resolvedChatId
1006
- })
1007
- };
1008
- }
1009
- function rewriteTargetIfMatch(params) {
1010
- if (typeof params.rawValue !== "string" && typeof params.rawValue !== "number") return null;
1011
- const value = String(params.rawValue).trim();
1012
- if (!value) return null;
1013
- if (normalizeTelegramTargetForMatch(value) !== params.matchKey) return null;
1014
- return params.resolvedTarget;
1015
- }
1016
- function replaceTelegramDefaultToTargets(params) {
1017
- let changed = false;
1018
- const telegram = asObjectRecord(params.cfg.channels?.telegram);
1019
- if (!telegram) return changed;
1020
- const maybeReplace = (holder, key) => {
1021
- const nextTarget = rewriteTargetIfMatch({
1022
- rawValue: holder[key],
1023
- matchKey: params.matchKey,
1024
- resolvedTarget: params.resolvedTarget
1025
- });
1026
- if (!nextTarget) return;
1027
- holder[key] = nextTarget;
1028
- changed = true;
1029
- };
1030
- maybeReplace(telegram, "defaultTo");
1031
- const accounts = asObjectRecord(telegram.accounts);
1032
- if (!accounts) return changed;
1033
- for (const accountId of Object.keys(accounts)) {
1034
- const account = asObjectRecord(accounts[accountId]);
1035
- if (!account) continue;
1036
- maybeReplace(account, "defaultTo");
1037
- }
1038
- return changed;
1039
- }
1040
- async function maybePersistResolvedTelegramTarget(params) {
1041
- const raw = params.rawTarget.trim();
1042
- if (!raw) return;
1043
- const rewrite = resolveLegacyRewrite({
1044
- raw,
1045
- resolvedChatId: params.resolvedChatId
1046
- });
1047
- if (!rewrite) return;
1048
- const { matchKey, resolvedTarget } = rewrite;
1049
- try {
1050
- const { snapshot, writeOptions } = await readConfigFileSnapshotForWrite();
1051
- const nextConfig = structuredClone(snapshot.config ?? {});
1052
- if (replaceTelegramDefaultToTargets({
1053
- cfg: nextConfig,
1054
- matchKey,
1055
- resolvedTarget
1056
- })) {
1057
- await writeConfigFile(nextConfig, writeOptions);
1058
- if (params.verbose) writebackLogger.warn(`resolved Telegram defaultTo target ${raw} -> ${resolvedTarget}`);
1059
- }
1060
- } catch (err) {
1061
- if (params.verbose) writebackLogger.warn(`failed to persist Telegram defaultTo target ${raw}: ${String(err)}`);
1062
- }
1063
- try {
1064
- const storePath = resolveCronStorePath(params.cfg.cron?.store);
1065
- const store = await loadCronStore(storePath);
1066
- let cronChanged = false;
1067
- for (const job of store.jobs) {
1068
- if (job.delivery?.channel !== "telegram") continue;
1069
- const nextTarget = rewriteTargetIfMatch({
1070
- rawValue: job.delivery.to,
1071
- matchKey,
1072
- resolvedTarget
1073
- });
1074
- if (!nextTarget) continue;
1075
- job.delivery.to = nextTarget;
1076
- cronChanged = true;
1077
- }
1078
- if (cronChanged) {
1079
- await saveCronStore(storePath, store);
1080
- if (params.verbose) writebackLogger.warn(`resolved Telegram cron delivery target ${raw} -> ${resolvedTarget}`);
1081
- }
1082
- } catch (err) {
1083
- if (params.verbose) writebackLogger.warn(`failed to persist Telegram cron target ${raw}: ${String(err)}`);
1084
- }
1085
- }
1086
-
1087
- //#endregion
1088
- //#region src/telegram/voice.ts
1089
- function resolveTelegramVoiceDecision(opts) {
1090
- if (!opts.wantsVoice) return { useVoice: false };
1091
- if (isTelegramVoiceCompatibleAudio(opts)) return { useVoice: true };
1092
- return {
1093
- useVoice: false,
1094
- reason: `media is ${opts.contentType ?? "unknown"} (${opts.fileName ?? "unknown"})`
1095
- };
1096
- }
1097
- function resolveTelegramVoiceSend(opts) {
1098
- const decision = resolveTelegramVoiceDecision(opts);
1099
- if (decision.reason && opts.logFallback) opts.logFallback(`Telegram voice requested but ${decision.reason}; sending as audio file instead.`);
1100
- return { useVoice: decision.useVoice };
1101
- }
1102
-
1103
- //#endregion
1104
- //#region src/telegram/send.ts
1105
- var send_exports = /* @__PURE__ */ __exportAll({
1106
- buildInlineKeyboard: () => buildInlineKeyboard,
1107
- createForumTopicTelegram: () => createForumTopicTelegram,
1108
- deleteMessageTelegram: () => deleteMessageTelegram,
1109
- editMessageTelegram: () => editMessageTelegram,
1110
- reactMessageTelegram: () => reactMessageTelegram,
1111
- sendMessageTelegram: () => sendMessageTelegram,
1112
- sendPollTelegram: () => sendPollTelegram,
1113
- sendStickerTelegram: () => sendStickerTelegram
1114
- });
1115
- const PARSE_ERR_RE = /can't parse entities|parse entities|find end of the entity/i;
1116
- const THREAD_NOT_FOUND_RE = /400:\s*Bad Request:\s*message thread not found/i;
1117
- const MESSAGE_NOT_MODIFIED_RE = /400:\s*Bad Request:\s*message is not modified|MESSAGE_NOT_MODIFIED/i;
1118
- const CHAT_NOT_FOUND_RE = /400: Bad Request: chat not found/i;
1119
- const sendLogger = createSubsystemLogger("telegram/send");
1120
- const diagLogger = createSubsystemLogger("telegram/diagnostic");
1121
- function createTelegramHttpLogger(cfg) {
1122
- if (!isDiagnosticFlagEnabled("telegram.http", cfg)) return () => {};
1123
- return (label, err) => {
1124
- if (!(err instanceof HttpError)) return;
1125
- const detail = redactSensitiveText(formatUncaughtError(err.error ?? err));
1126
- diagLogger.warn(`telegram http error (${label}): ${detail}`);
1127
- };
1128
- }
1129
- function resolveTelegramClientOptions(account) {
1130
- const proxyUrl = account.config.proxy?.trim();
1131
- const fetchImpl = resolveTelegramFetch(proxyUrl ? makeProxyFetch(proxyUrl) : void 0, { network: account.config.network });
1132
- const timeoutSeconds = typeof account.config.timeoutSeconds === "number" && Number.isFinite(account.config.timeoutSeconds) ? Math.max(1, Math.floor(account.config.timeoutSeconds)) : void 0;
1133
- return fetchImpl || timeoutSeconds ? {
1134
- ...fetchImpl ? { fetch: fetchImpl } : {},
1135
- ...timeoutSeconds ? { timeoutSeconds } : {}
1136
- } : void 0;
1137
- }
1138
- function resolveToken(explicit, params) {
1139
- if (explicit?.trim()) return explicit.trim();
1140
- if (!params.token) throw new Error(`Telegram bot token missing for account "${params.accountId}" (set channels.telegram.accounts.${params.accountId}.botToken/tokenFile or TELEGRAM_BOT_TOKEN for default).`);
1141
- return params.token.trim();
1142
- }
1143
- async function resolveChatId(to, params) {
1144
- const numericChatId = normalizeTelegramChatId(to);
1145
- if (numericChatId) return numericChatId;
1146
- const lookupTarget = normalizeTelegramLookupTarget(to);
1147
- const getChat = params.api.getChat;
1148
- if (!lookupTarget || typeof getChat !== "function") throw new Error("Telegram recipient must be a numeric chat ID");
1149
- try {
1150
- const chat = await getChat.call(params.api, lookupTarget);
1151
- const resolved = normalizeTelegramChatId(String(chat?.id ?? ""));
1152
- if (!resolved) throw new Error(`resolved chat id is not numeric (${String(chat?.id ?? "")})`);
1153
- if (params.verbose) sendLogger.warn(`telegram recipient ${lookupTarget} resolved to numeric chat id ${resolved}`);
1154
- return resolved;
1155
- } catch (err) {
1156
- const detail = formatErrorMessage(err);
1157
- throw new Error(`Telegram recipient ${lookupTarget} could not be resolved to a numeric chat ID (${detail})`, { cause: err });
1158
- }
1159
- }
1160
- async function resolveAndPersistChatId(params) {
1161
- const chatId = await resolveChatId(params.lookupTarget, {
1162
- api: params.api,
1163
- verbose: params.verbose
1164
- });
1165
- await maybePersistResolvedTelegramTarget({
1166
- cfg: params.cfg,
1167
- rawTarget: params.persistTarget,
1168
- resolvedChatId: chatId,
1169
- verbose: params.verbose
1170
- });
1171
- return chatId;
1172
- }
1173
- function normalizeMessageId(raw) {
1174
- if (typeof raw === "number" && Number.isFinite(raw)) return Math.trunc(raw);
1175
- if (typeof raw === "string") {
1176
- const value = raw.trim();
1177
- if (!value) throw new Error("Message id is required for Telegram actions");
1178
- const parsed = Number.parseInt(value, 10);
1179
- if (Number.isFinite(parsed)) return parsed;
1180
- }
1181
- throw new Error("Message id is required for Telegram actions");
1182
- }
1183
- function isTelegramThreadNotFoundError(err) {
1184
- return THREAD_NOT_FOUND_RE.test(formatErrorMessage(err));
1185
- }
1186
- function isTelegramMessageNotModifiedError(err) {
1187
- return MESSAGE_NOT_MODIFIED_RE.test(formatErrorMessage(err));
1188
- }
1189
- function hasMessageThreadIdParam(params) {
1190
- if (!params) return false;
1191
- const value = params.message_thread_id;
1192
- if (typeof value === "number") return Number.isFinite(value);
1193
- if (typeof value === "string") return value.trim().length > 0;
1194
- return false;
1195
- }
1196
- function removeMessageThreadIdParam(params) {
1197
- if (!params || !hasMessageThreadIdParam(params)) return params;
1198
- const next = { ...params };
1199
- delete next.message_thread_id;
1200
- return Object.keys(next).length > 0 ? next : void 0;
1201
- }
1202
- function isTelegramHtmlParseError(err) {
1203
- return PARSE_ERR_RE.test(formatErrorMessage(err));
1204
- }
1205
- function buildTelegramThreadReplyParams(params) {
1206
- const messageThreadId = params.messageThreadId != null ? params.messageThreadId : params.targetMessageThreadId;
1207
- const threadScope = params.chatType === "direct" ? "dm" : "forum";
1208
- const threadIdParams = buildTelegramThreadParams(messageThreadId != null ? {
1209
- id: messageThreadId,
1210
- scope: threadScope
1211
- } : void 0);
1212
- const threadParams = threadIdParams ? { ...threadIdParams } : {};
1213
- if (params.replyToMessageId != null) {
1214
- const replyToMessageId = Math.trunc(params.replyToMessageId);
1215
- if (params.quoteText?.trim()) threadParams.reply_parameters = {
1216
- message_id: replyToMessageId,
1217
- quote: params.quoteText.trim()
1218
- };
1219
- else threadParams.reply_to_message_id = replyToMessageId;
1220
- }
1221
- return threadParams;
1222
- }
1223
- async function withTelegramHtmlParseFallback(params) {
1224
- try {
1225
- return await params.requestHtml(params.label);
1226
- } catch (err) {
1227
- if (!isTelegramHtmlParseError(err)) throw err;
1228
- if (params.verbose) sendLogger.warn(`telegram ${params.label} failed with HTML parse error, retrying as plain text: ${formatErrorMessage(err)}`);
1229
- return await params.requestPlain(`${params.label}-plain`);
1230
- }
1231
- }
1232
- function resolveTelegramApiContext(opts) {
1233
- const cfg = opts.cfg ?? loadConfig();
1234
- const account = resolveTelegramAccount({
1235
- cfg,
1236
- accountId: opts.accountId
1237
- });
1238
- const token = resolveToken(opts.token, account);
1239
- const client = resolveTelegramClientOptions(account);
1240
- return {
1241
- cfg,
1242
- account,
1243
- api: opts.api ?? new Bot(token, client ? { client } : void 0).api
1244
- };
1245
- }
1246
- function createTelegramRequestWithDiag(params) {
1247
- const request = createTelegramRetryRunner({
1248
- retry: params.retry,
1249
- configRetry: params.account.config.retry,
1250
- verbose: params.verbose,
1251
- ...params.shouldRetry ? { shouldRetry: params.shouldRetry } : {}
1252
- });
1253
- const logHttpError = createTelegramHttpLogger(params.cfg);
1254
- return (fn, label, options) => {
1255
- const runRequest = () => request(fn, label);
1256
- return (params.useApiErrorLogging === false ? runRequest() : withTelegramApiErrorLogging({
1257
- operation: label ?? "request",
1258
- fn: runRequest,
1259
- ...options?.shouldLog ? { shouldLog: options.shouldLog } : {}
1260
- })).catch((err) => {
1261
- logHttpError(label ?? "request", err);
1262
- throw err;
1263
- });
1264
- };
1265
- }
1266
- function wrapTelegramChatNotFoundError(err, params) {
1267
- if (!CHAT_NOT_FOUND_RE.test(formatErrorMessage(err))) return err;
1268
- return new Error([
1269
- `Telegram send failed: chat not found (chat_id=${params.chatId}).`,
1270
- "Likely: bot not started in DM, bot removed from group/channel, group migrated (new -100… id), or wrong bot token.",
1271
- `Input was: ${JSON.stringify(params.input)}.`
1272
- ].join(" "));
1273
- }
1274
- async function withTelegramThreadFallback(params, label, verbose, attempt) {
1275
- try {
1276
- return await attempt(params, label);
1277
- } catch (err) {
1278
- if (!hasMessageThreadIdParam(params) || !isTelegramThreadNotFoundError(err)) throw err;
1279
- if (verbose) sendLogger.warn(`telegram ${label} failed with message_thread_id, retrying without thread: ${formatErrorMessage(err)}`);
1280
- return await attempt(removeMessageThreadIdParam(params), `${label}-threadless`);
1281
- }
1282
- }
1283
- function createRequestWithChatNotFound(params) {
1284
- return async (fn, label) => params.requestWithDiag(fn, label).catch((err) => {
1285
- throw wrapTelegramChatNotFoundError(err, {
1286
- chatId: params.chatId,
1287
- input: params.input
1288
- });
1289
- });
1290
- }
1291
- function buildInlineKeyboard(buttons) {
1292
- if (!buttons?.length) return;
1293
- const rows = buttons.map((row) => row.filter((button) => button?.text && button?.callback_data).map((button) => ({
1294
- text: button.text,
1295
- callback_data: button.callback_data,
1296
- ...button.style ? { style: button.style } : {}
1297
- }))).filter((row) => row.length > 0);
1298
- if (rows.length === 0) return;
1299
- return { inline_keyboard: rows };
1300
- }
1301
- async function sendMessageTelegram(to, text, opts = {}) {
1302
- const { cfg, account, api } = resolveTelegramApiContext(opts);
1303
- const target = parseTelegramTarget(to);
1304
- const chatId = await resolveAndPersistChatId({
1305
- cfg,
1306
- api,
1307
- lookupTarget: target.chatId,
1308
- persistTarget: to,
1309
- verbose: opts.verbose
1310
- });
1311
- const mediaUrl = opts.mediaUrl?.trim();
1312
- const replyMarkup = buildInlineKeyboard(opts.buttons);
1313
- const threadParams = buildTelegramThreadReplyParams({
1314
- targetMessageThreadId: target.messageThreadId,
1315
- messageThreadId: opts.messageThreadId,
1316
- chatType: target.chatType,
1317
- replyToMessageId: opts.replyToMessageId,
1318
- quoteText: opts.quoteText
1319
- });
1320
- const hasThreadParams = Object.keys(threadParams).length > 0;
1321
- const requestWithChatNotFound = createRequestWithChatNotFound({
1322
- requestWithDiag: createTelegramRequestWithDiag({
1323
- cfg,
1324
- account,
1325
- retry: opts.retry,
1326
- verbose: opts.verbose,
1327
- shouldRetry: (err) => isRecoverableTelegramNetworkError(err, { context: "send" })
1328
- }),
1329
- chatId,
1330
- input: to
1331
- });
1332
- const textMode = opts.textMode ?? "markdown";
1333
- const tableMode = resolveMarkdownTableMode({
1334
- cfg,
1335
- channel: "telegram",
1336
- accountId: account.accountId
1337
- });
1338
- const renderHtmlText = (value) => renderTelegramHtmlText(value, {
1339
- textMode,
1340
- tableMode
1341
- });
1342
- const linkPreviewOptions = account.config.linkPreview ?? true ? void 0 : { is_disabled: true };
1343
- const sendTelegramText = async (rawText, params, fallbackText) => {
1344
- return await withTelegramThreadFallback(params, "message", opts.verbose, async (effectiveParams, label) => {
1345
- const htmlText = renderHtmlText(rawText);
1346
- const baseParams = effectiveParams ? { ...effectiveParams } : {};
1347
- if (linkPreviewOptions) baseParams.link_preview_options = linkPreviewOptions;
1348
- const hasBaseParams = Object.keys(baseParams).length > 0;
1349
- const sendParams = {
1350
- parse_mode: "HTML",
1351
- ...baseParams,
1352
- ...opts.silent === true ? { disable_notification: true } : {}
1353
- };
1354
- return await withTelegramHtmlParseFallback({
1355
- label,
1356
- verbose: opts.verbose,
1357
- requestHtml: (retryLabel) => requestWithChatNotFound(() => api.sendMessage(chatId, htmlText, sendParams), retryLabel),
1358
- requestPlain: (retryLabel) => {
1359
- const plainParams = hasBaseParams ? baseParams : void 0;
1360
- return requestWithChatNotFound(() => plainParams ? api.sendMessage(chatId, fallbackText ?? rawText, plainParams) : api.sendMessage(chatId, fallbackText ?? rawText), retryLabel);
1361
- }
1362
- });
1363
- });
1364
- };
1365
- if (mediaUrl) {
1366
- const media = await loadWebMedia(mediaUrl, {
1367
- maxBytes: opts.maxBytes,
1368
- localRoots: opts.mediaLocalRoots
1369
- });
1370
- const kind = mediaKindFromMime(media.contentType ?? void 0);
1371
- const isGif = isGifMedia({
1372
- contentType: media.contentType,
1373
- fileName: media.fileName
1374
- });
1375
- const isVideoNote = kind === "video" && opts.asVideoNote === true;
1376
- const fileName = media.fileName ?? (isGif ? "animation.gif" : inferFilename(kind)) ?? "file";
1377
- const file = new InputFile(media.buffer, fileName);
1378
- let caption;
1379
- let followUpText;
1380
- if (isVideoNote) {
1381
- caption = void 0;
1382
- followUpText = text.trim() ? text : void 0;
1383
- } else {
1384
- const split = splitTelegramCaption(text);
1385
- caption = split.caption;
1386
- followUpText = split.followUpText;
1387
- }
1388
- const htmlCaption = caption ? renderHtmlText(caption) : void 0;
1389
- const needsSeparateText = Boolean(followUpText);
1390
- const baseMediaParams = {
1391
- ...hasThreadParams ? threadParams : {},
1392
- ...!needsSeparateText && replyMarkup ? { reply_markup: replyMarkup } : {}
1393
- };
1394
- const mediaParams = {
1395
- ...htmlCaption ? {
1396
- caption: htmlCaption,
1397
- parse_mode: "HTML"
1398
- } : {},
1399
- ...baseMediaParams,
1400
- ...opts.silent === true ? { disable_notification: true } : {}
1401
- };
1402
- const sendMedia = async (label, sender) => await withTelegramThreadFallback(mediaParams, label, opts.verbose, async (effectiveParams, retryLabel) => requestWithChatNotFound(() => sender(effectiveParams), retryLabel));
1403
- const mediaSender = (() => {
1404
- if (isGif) return {
1405
- label: "animation",
1406
- sender: (effectiveParams) => api.sendAnimation(chatId, file, effectiveParams)
1407
- };
1408
- if (kind === "image") return {
1409
- label: "photo",
1410
- sender: (effectiveParams) => api.sendPhoto(chatId, file, effectiveParams)
1411
- };
1412
- if (kind === "video") {
1413
- if (isVideoNote) return {
1414
- label: "video_note",
1415
- sender: (effectiveParams) => api.sendVideoNote(chatId, file, effectiveParams)
1416
- };
1417
- return {
1418
- label: "video",
1419
- sender: (effectiveParams) => api.sendVideo(chatId, file, effectiveParams)
1420
- };
1421
- }
1422
- if (kind === "audio") {
1423
- const { useVoice } = resolveTelegramVoiceSend({
1424
- wantsVoice: opts.asVoice === true,
1425
- contentType: media.contentType,
1426
- fileName,
1427
- logFallback: logVerbose
1428
- });
1429
- if (useVoice) return {
1430
- label: "voice",
1431
- sender: (effectiveParams) => api.sendVoice(chatId, file, effectiveParams)
1432
- };
1433
- return {
1434
- label: "audio",
1435
- sender: (effectiveParams) => api.sendAudio(chatId, file, effectiveParams)
1436
- };
1437
- }
1438
- return {
1439
- label: "document",
1440
- sender: (effectiveParams) => api.sendDocument(chatId, file, effectiveParams)
1441
- };
1442
- })();
1443
- const result = await sendMedia(mediaSender.label, mediaSender.sender);
1444
- const mediaMessageId = String(result?.message_id ?? "unknown");
1445
- const resolvedChatId = String(result?.chat?.id ?? chatId);
1446
- if (result?.message_id) recordSentMessage(chatId, result.message_id);
1447
- recordChannelActivity({
1448
- channel: "telegram",
1449
- accountId: account.accountId,
1450
- direction: "outbound"
1451
- });
1452
- if (needsSeparateText && followUpText) {
1453
- const textParams = hasThreadParams || replyMarkup ? {
1454
- ...threadParams,
1455
- ...replyMarkup ? { reply_markup: replyMarkup } : {}
1456
- } : void 0;
1457
- const textRes = await sendTelegramText(followUpText, textParams);
1458
- return {
1459
- messageId: String(textRes?.message_id ?? mediaMessageId),
1460
- chatId: resolvedChatId
1461
- };
1462
- }
1463
- return {
1464
- messageId: mediaMessageId,
1465
- chatId: resolvedChatId
1466
- };
1467
- }
1468
- if (!text || !text.trim()) throw new Error("Message must be non-empty for Telegram sends");
1469
- const res = await sendTelegramText(text, hasThreadParams || replyMarkup ? {
1470
- ...threadParams,
1471
- ...replyMarkup ? { reply_markup: replyMarkup } : {}
1472
- } : void 0, opts.plainText);
1473
- const messageId = String(res?.message_id ?? "unknown");
1474
- if (res?.message_id) recordSentMessage(chatId, res.message_id);
1475
- recordChannelActivity({
1476
- channel: "telegram",
1477
- accountId: account.accountId,
1478
- direction: "outbound"
1479
- });
1480
- return {
1481
- messageId,
1482
- chatId: String(res?.chat?.id ?? chatId)
1483
- };
1484
- }
1485
- async function reactMessageTelegram(chatIdInput, messageIdInput, emoji, opts = {}) {
1486
- const { cfg, account, api } = resolveTelegramApiContext(opts);
1487
- const rawTarget = String(chatIdInput);
1488
- const chatId = await resolveAndPersistChatId({
1489
- cfg,
1490
- api,
1491
- lookupTarget: rawTarget,
1492
- persistTarget: rawTarget,
1493
- verbose: opts.verbose
1494
- });
1495
- const messageId = normalizeMessageId(messageIdInput);
1496
- const requestWithDiag = createTelegramRequestWithDiag({
1497
- cfg,
1498
- account,
1499
- retry: opts.retry,
1500
- verbose: opts.verbose,
1501
- shouldRetry: (err) => isRecoverableTelegramNetworkError(err, { context: "send" })
1502
- });
1503
- const remove = opts.remove === true;
1504
- const trimmedEmoji = emoji.trim();
1505
- const reactions = remove || !trimmedEmoji ? [] : [{
1506
- type: "emoji",
1507
- emoji: trimmedEmoji
1508
- }];
1509
- if (typeof api.setMessageReaction !== "function") throw new Error("Telegram reactions are unavailable in this bot API.");
1510
- try {
1511
- await requestWithDiag(() => api.setMessageReaction(chatId, messageId, reactions), "reaction");
1512
- } catch (err) {
1513
- const msg = err instanceof Error ? err.message : String(err);
1514
- if (/REACTION_INVALID/i.test(msg)) return {
1515
- ok: false,
1516
- warning: `Reaction unavailable: ${trimmedEmoji}`
1517
- };
1518
- throw err;
1519
- }
1520
- return { ok: true };
1521
- }
1522
- async function deleteMessageTelegram(chatIdInput, messageIdInput, opts = {}) {
1523
- const { cfg, account, api } = resolveTelegramApiContext(opts);
1524
- const rawTarget = String(chatIdInput);
1525
- const chatId = await resolveAndPersistChatId({
1526
- cfg,
1527
- api,
1528
- lookupTarget: rawTarget,
1529
- persistTarget: rawTarget,
1530
- verbose: opts.verbose
1531
- });
1532
- const messageId = normalizeMessageId(messageIdInput);
1533
- await createTelegramRequestWithDiag({
1534
- cfg,
1535
- account,
1536
- retry: opts.retry,
1537
- verbose: opts.verbose,
1538
- shouldRetry: (err) => isRecoverableTelegramNetworkError(err, { context: "send" })
1539
- })(() => api.deleteMessage(chatId, messageId), "deleteMessage");
1540
- logVerbose(`[telegram] Deleted message ${messageId} from chat ${chatId}`);
1541
- return { ok: true };
1542
- }
1543
- async function editMessageTelegram(chatIdInput, messageIdInput, text, opts = {}) {
1544
- const { cfg, account, api } = resolveTelegramApiContext({
1545
- ...opts,
1546
- cfg: opts.cfg
1547
- });
1548
- const rawTarget = String(chatIdInput);
1549
- const chatId = await resolveAndPersistChatId({
1550
- cfg,
1551
- api,
1552
- lookupTarget: rawTarget,
1553
- persistTarget: rawTarget,
1554
- verbose: opts.verbose
1555
- });
1556
- const messageId = normalizeMessageId(messageIdInput);
1557
- const requestWithDiag = createTelegramRequestWithDiag({
1558
- cfg,
1559
- account,
1560
- retry: opts.retry,
1561
- verbose: opts.verbose
1562
- });
1563
- const requestWithEditShouldLog = (fn, label, shouldLog) => requestWithDiag(fn, label, shouldLog ? { shouldLog } : void 0);
1564
- const htmlText = renderTelegramHtmlText(text, {
1565
- textMode: opts.textMode ?? "markdown",
1566
- tableMode: resolveMarkdownTableMode({
1567
- cfg,
1568
- channel: "telegram",
1569
- accountId: account.accountId
1570
- })
1571
- });
1572
- const shouldTouchButtons = opts.buttons !== void 0;
1573
- const builtKeyboard = shouldTouchButtons ? buildInlineKeyboard(opts.buttons) : void 0;
1574
- const replyMarkup = shouldTouchButtons ? builtKeyboard ?? { inline_keyboard: [] } : void 0;
1575
- const editParams = { parse_mode: "HTML" };
1576
- if (opts.linkPreview === false) editParams.link_preview_options = { is_disabled: true };
1577
- if (replyMarkup !== void 0) editParams.reply_markup = replyMarkup;
1578
- const plainParams = {};
1579
- if (opts.linkPreview === false) plainParams.link_preview_options = { is_disabled: true };
1580
- if (replyMarkup !== void 0) plainParams.reply_markup = replyMarkup;
1581
- try {
1582
- await withTelegramHtmlParseFallback({
1583
- label: "editMessage",
1584
- verbose: opts.verbose,
1585
- requestHtml: (retryLabel) => requestWithEditShouldLog(() => api.editMessageText(chatId, messageId, htmlText, editParams), retryLabel, (err) => !isTelegramMessageNotModifiedError(err)),
1586
- requestPlain: (retryLabel) => requestWithEditShouldLog(() => Object.keys(plainParams).length > 0 ? api.editMessageText(chatId, messageId, text, plainParams) : api.editMessageText(chatId, messageId, text), retryLabel, (plainErr) => !isTelegramMessageNotModifiedError(plainErr))
1587
- });
1588
- } catch (err) {
1589
- if (isTelegramMessageNotModifiedError(err)) {} else throw err;
1590
- }
1591
- logVerbose(`[telegram] Edited message ${messageId} in chat ${chatId}`);
1592
- return {
1593
- ok: true,
1594
- messageId: String(messageId),
1595
- chatId
1596
- };
1597
- }
1598
- function inferFilename(kind) {
1599
- switch (kind) {
1600
- case "image": return "image.jpg";
1601
- case "video": return "video.mp4";
1602
- case "audio": return "audio.ogg";
1603
- default: return "file.bin";
1604
- }
1605
- }
1606
- /**
1607
- * Send a sticker to a Telegram chat by file_id.
1608
- * @param to - Chat ID or username (e.g., "123456789" or "@username")
1609
- * @param fileId - Telegram file_id of the sticker to send
1610
- * @param opts - Optional configuration
1611
- */
1612
- async function sendStickerTelegram(to, fileId, opts = {}) {
1613
- if (!fileId?.trim()) throw new Error("Telegram sticker file_id is required");
1614
- const { cfg, account, api } = resolveTelegramApiContext(opts);
1615
- const target = parseTelegramTarget(to);
1616
- const chatId = await resolveAndPersistChatId({
1617
- cfg,
1618
- api,
1619
- lookupTarget: target.chatId,
1620
- persistTarget: to,
1621
- verbose: opts.verbose
1622
- });
1623
- const threadParams = buildTelegramThreadReplyParams({
1624
- targetMessageThreadId: target.messageThreadId,
1625
- messageThreadId: opts.messageThreadId,
1626
- chatType: target.chatType,
1627
- replyToMessageId: opts.replyToMessageId
1628
- });
1629
- const hasThreadParams = Object.keys(threadParams).length > 0;
1630
- const requestWithChatNotFound = createRequestWithChatNotFound({
1631
- requestWithDiag: createTelegramRequestWithDiag({
1632
- cfg,
1633
- account,
1634
- retry: opts.retry,
1635
- verbose: opts.verbose,
1636
- useApiErrorLogging: false
1637
- }),
1638
- chatId,
1639
- input: to
1640
- });
1641
- const result = await withTelegramThreadFallback(hasThreadParams ? threadParams : void 0, "sticker", opts.verbose, async (effectiveParams, label) => requestWithChatNotFound(() => api.sendSticker(chatId, fileId.trim(), effectiveParams), label));
1642
- const messageId = String(result?.message_id ?? "unknown");
1643
- const resolvedChatId = String(result?.chat?.id ?? chatId);
1644
- if (result?.message_id) recordSentMessage(chatId, result.message_id);
1645
- recordChannelActivity({
1646
- channel: "telegram",
1647
- accountId: account.accountId,
1648
- direction: "outbound"
1649
- });
1650
- return {
1651
- messageId,
1652
- chatId: resolvedChatId
1653
- };
1654
- }
1655
- /**
1656
- * Send a poll to a Telegram chat.
1657
- * @param to - Chat ID or username (e.g., "123456789" or "@username")
1658
- * @param poll - Poll input with question, options, maxSelections, and optional durationHours
1659
- * @param opts - Optional configuration
1660
- */
1661
- async function sendPollTelegram(to, poll, opts = {}) {
1662
- const { cfg, account, api } = resolveTelegramApiContext(opts);
1663
- const target = parseTelegramTarget(to);
1664
- const chatId = await resolveAndPersistChatId({
1665
- cfg,
1666
- api,
1667
- lookupTarget: target.chatId,
1668
- persistTarget: to,
1669
- verbose: opts.verbose
1670
- });
1671
- const normalizedPoll = normalizePollInput(poll, { maxOptions: 10 });
1672
- const threadParams = buildTelegramThreadReplyParams({
1673
- targetMessageThreadId: target.messageThreadId,
1674
- messageThreadId: opts.messageThreadId,
1675
- chatType: target.chatType,
1676
- replyToMessageId: opts.replyToMessageId
1677
- });
1678
- const pollOptions = normalizedPoll.options;
1679
- const requestWithChatNotFound = createRequestWithChatNotFound({
1680
- requestWithDiag: createTelegramRequestWithDiag({
1681
- cfg,
1682
- account,
1683
- retry: opts.retry,
1684
- verbose: opts.verbose,
1685
- shouldRetry: (err) => isRecoverableTelegramNetworkError(err, { context: "send" })
1686
- }),
1687
- chatId,
1688
- input: to
1689
- });
1690
- const durationSeconds = normalizedPoll.durationSeconds;
1691
- if (durationSeconds === void 0 && normalizedPoll.durationHours !== void 0) throw new Error("Telegram poll durationHours is not supported. Use durationSeconds (5-600) instead.");
1692
- if (durationSeconds !== void 0 && (durationSeconds < 5 || durationSeconds > 600)) throw new Error("Telegram poll durationSeconds must be between 5 and 600");
1693
- const result = await withTelegramThreadFallback({
1694
- allows_multiple_answers: normalizedPoll.maxSelections > 1,
1695
- is_anonymous: opts.isAnonymous ?? true,
1696
- ...durationSeconds !== void 0 ? { open_period: durationSeconds } : {},
1697
- ...Object.keys(threadParams).length > 0 ? threadParams : {},
1698
- ...opts.silent === true ? { disable_notification: true } : {}
1699
- }, "poll", opts.verbose, async (effectiveParams, label) => requestWithChatNotFound(() => api.sendPoll(chatId, normalizedPoll.question, pollOptions, effectiveParams), label));
1700
- const messageId = String(result?.message_id ?? "unknown");
1701
- const resolvedChatId = String(result?.chat?.id ?? chatId);
1702
- const pollId = result?.poll?.id;
1703
- if (result?.message_id) recordSentMessage(chatId, result.message_id);
1704
- recordChannelActivity({
1705
- channel: "telegram",
1706
- accountId: account.accountId,
1707
- direction: "outbound"
1708
- });
1709
- return {
1710
- messageId,
1711
- chatId: resolvedChatId,
1712
- pollId
1713
- };
1714
- }
1715
- /**
1716
- * Create a forum topic in a Telegram supergroup.
1717
- * Requires the bot to have `can_manage_topics` permission.
1718
- *
1719
- * @param chatId - Supergroup chat ID
1720
- * @param name - Topic name (1-128 characters)
1721
- * @param opts - Optional configuration
1722
- */
1723
- async function createForumTopicTelegram(chatId, name, opts = {}) {
1724
- if (!name?.trim()) throw new Error("Forum topic name is required");
1725
- const trimmedName = name.trim();
1726
- if (trimmedName.length > 128) throw new Error("Forum topic name must be 128 characters or fewer");
1727
- const cfg = loadConfig();
1728
- const account = resolveTelegramAccount({
1729
- cfg,
1730
- accountId: opts.accountId
1731
- });
1732
- const token = resolveToken(opts.token, account);
1733
- const client = resolveTelegramClientOptions(account);
1734
- const api = opts.api ?? new Bot(token, client ? { client } : void 0).api;
1735
- const normalizedChatId = await resolveAndPersistChatId({
1736
- cfg,
1737
- api,
1738
- lookupTarget: parseTelegramTarget(chatId).chatId,
1739
- persistTarget: chatId,
1740
- verbose: opts.verbose
1741
- });
1742
- const request = createTelegramRetryRunner({
1743
- retry: opts.retry,
1744
- configRetry: account.config.retry,
1745
- verbose: opts.verbose,
1746
- shouldRetry: (err) => isRecoverableTelegramNetworkError(err, { context: "send" })
1747
- });
1748
- const logHttpError = createTelegramHttpLogger(cfg);
1749
- const requestWithDiag = (fn, label) => withTelegramApiErrorLogging({
1750
- operation: label ?? "request",
1751
- fn: () => request(fn, label)
1752
- }).catch((err) => {
1753
- logHttpError(label ?? "request", err);
1754
- throw err;
1755
- });
1756
- const extra = {};
1757
- if (opts.iconColor != null) extra.icon_color = opts.iconColor;
1758
- if (opts.iconCustomEmojiId?.trim()) extra.icon_custom_emoji_id = opts.iconCustomEmojiId.trim();
1759
- const hasExtra = Object.keys(extra).length > 0;
1760
- const result = await requestWithDiag(() => api.createForumTopic(normalizedChatId, trimmedName, hasExtra ? extra : void 0), "createForumTopic");
1761
- const topicId = result.message_thread_id;
1762
- recordChannelActivity({
1763
- channel: "telegram",
1764
- accountId: account.accountId,
1765
- direction: "outbound"
1766
- });
1767
- return {
1768
- topicId,
1769
- name: result.name ?? trimmedName,
1770
- chatId: normalizedChatId
1771
- };
1772
- }
1773
-
1774
- //#endregion
1775
- export { describeReplyTarget as A, resolveTelegramThreadSpec as B, buildSenderLabel as C, buildTelegramParentPeer as D, buildTelegramGroupPeerId as E, resolveTelegramForumThreadId as F, isSenderIdAllowed as G, normalizeAllowFromWithStore as H, resolveTelegramGroupAllowFromContext as I, mergeAllowFromSources as K, resolveTelegramMediaPlaceholder as L, extractTelegramLocation as M, hasBotMention as N, buildTelegramThreadParams as O, normalizeForwardedContext as P, resolveTelegramReplyId as R, buildGroupLabel as S, buildTelegramGroupFrom as T, resolveSenderAllowMatch as U, isSenderAllowed as V, firstDefined as W, markdownToTelegramHtml as _, reactMessageTelegram as a, resolveTelegramFetch as b, sendStickerTelegram as c, loadCronStore as d, resolveCronStorePath as f, markdownToTelegramChunks as g, isRecoverableTelegramNetworkError as h, editMessageTelegram as i, expandTextLinks as j, buildTypingThreadParams as k, send_exports as l, wasSentByBot as m, createForumTopicTelegram as n, sendMessageTelegram as o, saveCronStore as p, withTelegramApiErrorLogging as q, deleteMessageTelegram as r, sendPollTelegram as s, buildInlineKeyboard as t, resolveTelegramVoiceSend as u, renderTelegramHtmlText as v, buildSenderName as w, splitTelegramCaption as x, wrapFileReferencesInHtml as y, resolveTelegramStreamMode as z };