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.
- package/README.md +9 -7
- package/dist/accounts-A8jZK_v9.js +272 -0
- package/dist/accounts-BegPt5VR.js +36 -0
- package/dist/accounts-BmiimLpP.js +47 -0
- package/dist/accounts-Bomfgw0M.js +32 -0
- package/dist/accounts-Bpk-loA6.js +47 -0
- package/dist/accounts-DAdUdbPk.js +36 -0
- package/dist/accounts-WYyfAiie.js +270 -0
- package/dist/ack-reactions-CMDRj7fJ.js +446 -0
- package/dist/ack-reactions-D7VScSny.js +446 -0
- package/dist/acp-cli-BpMS0SsZ.js +1323 -0
- package/dist/acp-cli-DkXTlCpF.js +1317 -0
- package/dist/active-listener--FT8ewxl.js +37 -0
- package/dist/active-listener-C1StcdIA.js +37 -0
- package/dist/agent-C76P7tEr.js +703 -0
- package/dist/agent-helpers-CK3Obbsi.js +400 -0
- package/dist/agent-helpers-KHUla1K7.js +400 -0
- package/dist/agent-scope-BrDeaWWf.js +116 -0
- package/dist/agent-scope-DxqtYjuJ.js +114 -0
- package/dist/agent-ue8p9AIv.js +704 -0
- package/dist/agents--24oKN80.js +788 -0
- package/dist/agents.config-CWAUoPzG.js +116 -0
- package/dist/agents.config-Ck45E_ce.js +116 -0
- package/dist/audio-B85HoT7E.js +43 -0
- package/dist/audio-BbCUzndz.js +43 -0
- package/dist/audio-preflight-B3f0x3zu.js +69 -0
- package/dist/audio-preflight-Dv76vFTu.js +64 -0
- package/dist/audit-BAbBf2MU.js +3149 -0
- package/dist/audit-g55SYz1m.js +3149 -0
- package/dist/auth-Bq44qPUd.js +448 -0
- package/dist/auth-CVfoI--S.js +281 -0
- package/dist/auth-DTWpZJ1a.js +279 -0
- package/dist/auth-VItd2pwK.js +448 -0
- package/dist/banner-CyPQJybO.js +294 -0
- package/dist/binaries-DbgLoSWv.js +13 -0
- package/dist/bindings-6KojDoIi.js +69 -0
- package/dist/bindings-B6icMMUx.js +69 -0
- package/dist/bonjour-discovery-CQU4QbLK.js +378 -0
- package/dist/bonjour-discovery-D8aOnk3M.js +378 -0
- package/dist/boot/handler.js +42 -69
- package/dist/browser-cli-BH41geGr.js +1693 -0
- package/dist/browser-cli-u4nrjp1h.js +1688 -0
- package/dist/build-info.json +3 -3
- package/dist/call-CMDcRlGW.js +2826 -0
- package/dist/call-D5YKTYSM.js +2827 -0
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/catalog-CUY_iTaG.js +185 -0
- package/dist/catalog-p6W09S2j.js +185 -0
- package/dist/channel-account-context-CA2m93Kt.js +550 -0
- package/dist/channel-account-context-Las-t6RP.js +550 -0
- package/dist/channel-activity-BD603ehL.js +94 -0
- package/dist/channel-activity-CwiF_QMr.js +94 -0
- package/dist/channel-activity-daCpxHdT.js +292 -0
- package/dist/channel-options-CAlClffy.js +33 -0
- package/dist/channel-options-Hl_ep3UG.js +32 -0
- package/dist/channel-selection-CHJ7TumC.js +51 -0
- package/dist/channel-selection-DR7eW8UG.js +51 -0
- package/dist/channel-web-B79j9fSC.js +2134 -0
- package/dist/channel-web-DHTTcipm.js +2136 -0
- package/dist/channels-cli-DeZ95hcx.js +1427 -0
- package/dist/channels-cli-eUCi6jXk.js +1422 -0
- package/dist/channels-status-issues-By77REbh.js +18 -0
- package/dist/channels-status-issues-DXyOO-KH.js +18 -0
- package/dist/chat-envelope-BEDutlnF.js +248 -0
- package/dist/chat-envelope-vJJUdDE7.js +248 -0
- package/dist/chrome-BuAi16Rq.js +1732 -0
- package/dist/chrome-IR-2ukph.js +1733 -0
- package/dist/chunk-C1mQSjas.js +341 -0
- package/dist/chunk-D7VX4pmT.js +341 -0
- package/dist/clack-prompter-BX8SVxtP.js +122 -0
- package/dist/clack-prompter-D6HhVlZW.js +121 -0
- package/dist/cleanup-utils-DNd0wdKZ.js +94 -0
- package/dist/cli/daemon-cli.js +1 -1
- package/dist/cli-CK4Y43rx.js +131 -0
- package/dist/cli-Cha5Uk29.js +126 -0
- package/dist/clipboard-Cbj3McM_.js +31 -0
- package/dist/clipboard-Ne8gaWea.js +31 -0
- package/dist/command-format-D0vKipG9.js +32 -0
- package/dist/command-format-KkslAzwV.js +18 -0
- package/dist/command-logger/handler.js +3 -3
- package/dist/command-registry-07zlvSN8.js +215 -0
- package/dist/commands-DChC3pIF.js +41 -0
- package/dist/commands-DFHMoQgH.js +41 -0
- package/dist/commands-registry-BN04GIlJ.js +891 -0
- package/dist/commands-registry-DbS9NHeX.js +892 -0
- package/dist/common-DHHHAcmR.js +156 -0
- package/dist/common-De-Lakuh.js +156 -0
- package/dist/completion-cli--Jcg794c.js +452 -0
- package/dist/completion-cli-B8n7umme.js +452 -0
- package/dist/config-BupC6eiJ.js +4223 -0
- package/dist/config-CHDaGquZ.js +4225 -0
- package/dist/config-cli-Cu79BThx.js +242 -0
- package/dist/config-cli-DrJtiyW-.js +247 -0
- package/dist/config-guard-BLsqW1qt.js +98 -0
- package/dist/config-guard-NQ7jaYM4.js +75 -0
- package/dist/config-validation-BLllMW0t.js +18 -0
- package/dist/config-validation-DT29VEco.js +18 -0
- package/dist/configure-B25UEQnQ.js +889 -0
- package/dist/configure-CqMUE4Zw.js +891 -0
- package/dist/constants-BbAEYzFC.js +70 -0
- package/dist/constants-tLOgmZZ1.js +70 -0
- package/dist/control-auth-BFbDXKLK.js +397 -0
- package/dist/control-auth-BiiO-FNy.js +397 -0
- package/dist/control-ui/assets/index-CuY3pfh1.js +7716 -0
- package/dist/control-ui/assets/index-CuY3pfh1.js.map +1 -0
- package/dist/control-ui/assets/index-D_fjkN3g.css +1 -0
- package/dist/control-ui/index.html +2 -2
- package/dist/control-ui-assets-BlpSXjlT.js +186 -0
- package/dist/control-ui-assets-eJU2-yvs.js +186 -0
- package/dist/conversation-label-Bn5j3lUT.js +36 -0
- package/dist/conversation-label-L0QTtKji.js +36 -0
- package/dist/cron-cli-BV1o0UgM.js +491 -0
- package/dist/cron-cli-C8j-P8GF.js +496 -0
- package/dist/daemon-cli-BDvU0Xv6.js +1199 -0
- package/dist/daemon-cli-CoNl2Ugf.js +1197 -0
- package/dist/daemon-cli.js +53 -97
- package/dist/daemon-install-BMEnzWwq.js +60 -0
- package/dist/daemon-install-BkUJbdPC.js +55 -0
- package/dist/daemon-install-helpers-B9kMxC1v.js +462 -0
- package/dist/daemon-install-helpers-DoYR5z4H.js +462 -0
- package/dist/deliver-D8P9_nk-.js +481 -0
- package/dist/deliver-F9ed3dhp.js +481 -0
- package/dist/delivery-queue-B6TuHppj.js +244 -0
- package/dist/delivery-queue-BZc3AiGu.js +244 -0
- package/dist/devices-cli-DZgxMNLD.js +322 -0
- package/dist/devices-cli-DlG9ehK0.js +317 -0
- package/dist/diagnostics-CK2HGAFw.js +46 -0
- package/dist/diagnostics-G-C-IuxO.js +46 -0
- package/dist/directory-cli-CY6tHRIZ.js +218 -0
- package/dist/directory-cli-HyvRJ1Ua.js +223 -0
- package/dist/dm-policy-shared-1FdjwGtJ.js +22 -0
- package/dist/dm-policy-shared-CT3er5HI.js +22 -0
- package/dist/dns-cli-Cu-wYvll.js +203 -0
- package/dist/dns-cli-DQdnNJh4.js +198 -0
- package/dist/dock-D038fZZl.js +929 -0
- package/dist/dock-D5pZ3a44.js +928 -0
- package/dist/doctor-completion-BrHnayfU.js +92 -0
- package/dist/doctor-completion-CoZP2KiR.js +92 -0
- package/dist/doctor-config-flow-DJ1nWCTZ.js +1935 -0
- package/dist/doctor-config-flow-DYhXUwEq.js +1934 -0
- package/dist/enable-B5dIjgnm.js +59 -0
- package/dist/enable-FmiEY4ng.js +59 -0
- package/dist/entry.js +14 -16
- package/dist/env-DUb5GiQe.js +60 -0
- package/dist/env-vars-C8WMB8Ix.js +93 -0
- package/dist/errors-CdmXrBic.js +35 -0
- package/dist/errors-DdLfwEVi.js +35 -0
- package/dist/exec-BhkXWg7V.js +164 -0
- package/dist/exec-ClUTXFZ9.js +164 -0
- package/dist/export-html/template.css +0 -36
- package/dist/export-html/template.js +1 -32
- package/dist/extensionAPI.js +1015 -142
- package/dist/fetch-CCuD0LYV.js +67 -0
- package/dist/fetch-JBWLkOpL.js +67 -0
- package/dist/fetch-oku6r8tJ.js +67 -0
- package/dist/file-lock-6NXMPZTT.js +107 -0
- package/dist/file-lock-Ks-RPU6W.js +107 -0
- package/dist/fs-safe-93aDW4mH.js +98 -0
- package/dist/fs-safe-ACrBwOF5.js +88 -0
- package/dist/gateway-cli-CJs4Mxlv.js +23730 -0
- package/dist/gateway-cli-gUVR20v7.js +23725 -0
- package/dist/gateway-rpc-CSdrtPzg.js +28 -0
- package/dist/gateway-rpc-PNA_wUoe.js +28 -0
- package/dist/gmail-setup-utils-DNZEf6T0.js +422 -0
- package/dist/gmail-setup-utils-KPAKWwGy.js +423 -0
- package/dist/health-BCidscV-.js +1417 -0
- package/dist/health-Cw2dr19V.js +1414 -0
- package/dist/health-format-DOhfU1rY.js +28 -0
- package/dist/heartbeat-visibility-C5Vxudi9.js +125 -0
- package/dist/heartbeat-visibility-DHeZ-ko1.js +125 -0
- package/dist/help-format-Ch0EWh7N.js +17 -0
- package/dist/helpers-B4NWktS8.js +10 -0
- package/dist/hook-runner-global-Vj-YQxeR.js +527 -0
- package/dist/hooks-cli---vy0V0j.js +1218 -0
- package/dist/hooks-cli-CX-JUHdJ.js +1223 -0
- package/dist/image-ops-DMl7j7f4.js +354 -0
- package/dist/image-ops-DpkTOzhI.js +354 -0
- package/dist/import-DIjlFm_Y.js +493 -0
- package/dist/import-DdQvVR-_.js +495 -0
- package/dist/inbound-context-CmmmT8IP.js +68 -0
- package/dist/inbound-context-oxIWzEgc.js +68 -0
- package/dist/inbound-path-policy-BdmTOUka.js +90 -0
- package/dist/inbound-path-policy-DYTLjca8.js +90 -0
- package/dist/index.js +106 -105
- package/dist/inspect-C9d1V-lI.js +559 -0
- package/dist/inspect-rHjRqr3W.js +559 -0
- package/dist/installs-QUjSL2ZA.js +325 -0
- package/dist/installs-vT5wnxC4.js +325 -0
- package/dist/ipv4-DdcyK1aU.js +46 -0
- package/dist/ipv4-OHvujh00.js +46 -0
- package/dist/ir-CnMQRFBu.js +940 -0
- package/dist/json-files-BiA_B-xm.js +46 -0
- package/dist/links-CIHbVNO_.js +15 -0
- package/dist/loader-CYigLbch.js +22404 -0
- package/dist/loader-ElWX62xE.js +22401 -0
- package/dist/local-roots-B0QcJDJI.js +313 -0
- package/dist/local-roots-BfXsZRkm.js +314 -0
- package/dist/logger-BtwpYD7c.js +49 -0
- package/dist/logging-CLc3Umm0.js +20 -0
- package/dist/login-C8jHYLxN.js +61 -0
- package/dist/login-D__FYZX9.js +62 -0
- package/dist/login-qr-C0Gd6ybl.js +323 -0
- package/dist/login-qr-D7dw54Yp.js +328 -0
- package/dist/logs-cli-CFOVARdJ.js +234 -0
- package/dist/logs-cli-DtAR__VH.js +239 -0
- package/dist/markdown-tables-ChBqQA_Q.js +29 -0
- package/dist/markdown-tables-xMuH3QnS.js +29 -0
- package/dist/media-CmiNXiOZ.js +10453 -0
- package/dist/media-DYopaoc0.js +940 -0
- package/dist/message-action-names-CACBi-HB.js +2521 -0
- package/dist/message-action-names-CFwlz01T.js +2521 -0
- package/dist/message-channel-DF4I2vOK.js +91 -0
- package/dist/net-COL170MG.js +225 -0
- package/dist/net-QZ8IHNXc.js +225 -0
- package/dist/node-cli-CW8jOcHO.js +24 -0
- package/dist/nodes-cli-B4lvU9N5.js +1349 -0
- package/dist/nodes-cli-B8iTBsI6.js +1344 -0
- package/dist/nodes-screen-CZCXHrWB.js +250 -0
- package/dist/nodes-screen-C_K1vcS5.js +250 -0
- package/dist/note-BVerR3D5.js +92 -0
- package/dist/note-Dk8-EaJg.js +92 -0
- package/dist/npm-registry-spec-Dma0KHft.js +786 -0
- package/dist/npm-registry-spec-vYkxZb6u.js +786 -0
- package/dist/npm-resolution-CcZYnzrL.js +86 -0
- package/dist/npm-resolution-DsATEEGx.js +86 -0
- package/dist/onboard-Csm4bDd_.js +438 -0
- package/dist/onboard-D1b535pC.js +436 -0
- package/dist/onboard-channels-5EIXyDZh.js +2547 -0
- package/dist/onboard-channels-bedB47Hs.js +2548 -0
- package/dist/onboard-config-CcPV3Cqz.js +39 -0
- package/dist/onboard-config-DcTaxmuf.js +39 -0
- package/dist/onboard-helpers-BHNXyhA4.js +364 -0
- package/dist/onboard-helpers-eTUU00t8.js +363 -0
- package/dist/onboard-remote-DwDKQk1K.js +127 -0
- package/dist/onboard-remote-TPbiye5m.js +127 -0
- package/dist/onboarding-D0YGZ_Ux.js +588 -0
- package/dist/onboarding-DCfmKzl2.js +586 -0
- package/dist/onboarding.finalize-BhpsVwME.js +399 -0
- package/dist/onboarding.finalize-CY8vgmi9.js +402 -0
- package/dist/onboarding.gateway-config-C_eqpJ7D.js +192 -0
- package/dist/onboarding.gateway-config-DR1ey6tU.js +199 -0
- package/dist/outbound-Be4BgVqF.js +220 -0
- package/dist/outbound-CXJLn8kn.js +221 -0
- package/dist/outbound-attachment-CbNLn0lk.js +18 -0
- package/dist/outbound-attachment-DNCMF74c.js +18 -0
- package/dist/outbound-attachment-DaStRTGv.js +18 -0
- package/dist/pairing-cli-CxGDUsLT.js +128 -0
- package/dist/pairing-cli-D83T3PG9.js +123 -0
- package/dist/pairing-labels-6f8FqSS5.js +9 -0
- package/dist/pairing-labels-CI5j-OUT.js +9 -0
- package/dist/pairing-store-DnTHRcnO.js +459 -0
- package/dist/pairing-store-ONzqxcNb.js +460 -0
- package/dist/path-env-D7VB7sOO.js +89 -0
- package/dist/path-env-DFiYvvI-.js +89 -0
- package/dist/path-safety-BshBsw4P.js +14 -0
- package/dist/path-safety-CZbhQciI.js +14 -0
- package/dist/plugin-auto-enable-BnCQKkIK.js +302 -0
- package/dist/plugin-auto-enable-CFRs-pcA.js +301 -0
- package/dist/plugin-registry-CV5pfXOU.js +33 -0
- package/dist/plugin-registry-CmG34W0u.js +33 -0
- package/dist/plugin-sdk/agents/agent-helpers.d.ts +0 -1
- package/dist/plugin-sdk/agents/agent-scope.d.ts +10 -0
- package/dist/plugin-sdk/agents/agent-types.d.ts +1 -6
- package/dist/plugin-sdk/agents/agent-utils.d.ts +0 -14
- package/dist/plugin-sdk/agents/provider-utils.d.ts +0 -1
- package/dist/plugin-sdk/agents/subagent-spawn.d.ts +0 -1
- package/dist/plugin-sdk/agents/tools/sessions-helpers.d.ts +0 -1
- package/dist/plugin-sdk/auth/constants.d.ts +16 -0
- package/dist/plugin-sdk/auth/display.d.ts +7 -0
- package/dist/plugin-sdk/auth/doctor.d.ts +8 -0
- package/dist/plugin-sdk/auth/env-injection.d.ts +41 -0
- package/dist/plugin-sdk/auth/index.d.ts +8 -0
- package/dist/plugin-sdk/auth/oauth.d.ts +14 -0
- package/dist/plugin-sdk/auth/provider-auth.d.ts +40 -0
- package/dist/plugin-sdk/auth/session-override.d.ts +18 -0
- package/dist/plugin-sdk/auto-reply/reply/agent-runner-execution.d.ts +0 -1
- package/dist/plugin-sdk/auto-reply/reply/agent-runner-utils.d.ts +0 -2
- package/dist/plugin-sdk/auto-reply/reply/commands-status.d.ts +1 -4
- package/dist/plugin-sdk/auto-reply/reply/commands-types.d.ts +1 -4
- package/dist/plugin-sdk/auto-reply/reply/directive-handling.levels.d.ts +1 -7
- package/dist/plugin-sdk/auto-reply/reply/directive-handling.params.d.ts +1 -4
- package/dist/plugin-sdk/auto-reply/reply/directive-handling.parse.d.ts +1 -7
- package/dist/plugin-sdk/auto-reply/reply/directive-handling.shared.d.ts +1 -4
- package/dist/plugin-sdk/auto-reply/reply/directives.d.ts +3 -15
- package/dist/plugin-sdk/auto-reply/reply/get-reply-directives.d.ts +1 -5
- package/dist/plugin-sdk/auto-reply/reply/get-reply-inline-actions.d.ts +1 -5
- package/dist/plugin-sdk/auto-reply/reply/get-reply-run.d.ts +1 -5
- package/dist/plugin-sdk/auto-reply/reply/queue/types.d.ts +1 -3
- package/dist/plugin-sdk/auto-reply/reply/response-prefix-template.d.ts +4 -6
- package/dist/plugin-sdk/auto-reply/reply/session-run-accounting.d.ts +0 -7
- package/dist/plugin-sdk/auto-reply/reply/session-updates.d.ts +0 -10
- package/dist/plugin-sdk/auto-reply/reply.d.ts +1 -1
- package/dist/plugin-sdk/auto-reply/status.d.ts +2 -6
- package/dist/plugin-sdk/auto-reply/thinking.d.ts +0 -11
- package/dist/plugin-sdk/auto-reply/types.d.ts +1 -2
- package/dist/plugin-sdk/commands/agent/session.d.ts +1 -2
- package/dist/plugin-sdk/config/defaults.d.ts +0 -1
- package/dist/plugin-sdk/config/sessions/types.d.ts +0 -8
- package/dist/plugin-sdk/config/types.agent-defaults.d.ts +28 -112
- package/dist/plugin-sdk/config/types.agents.d.ts +8 -0
- package/dist/plugin-sdk/config/types.messages.d.ts +1 -2
- package/dist/plugin-sdk/config/types.tools.d.ts +1 -1
- package/dist/plugin-sdk/config/zod-schema.agent-defaults.d.ts +9 -66
- package/dist/plugin-sdk/config/zod-schema.agent-runtime.d.ts +5 -13
- package/dist/plugin-sdk/config/zod-schema.agents.d.ts +12 -76
- package/dist/plugin-sdk/config/zod-schema.d.ts +12 -76
- package/dist/plugin-sdk/daemon/constants.d.ts +2 -2
- package/dist/plugin-sdk/gateway/protocol/index.d.ts +1 -3
- package/dist/plugin-sdk/gateway/protocol/schema/sessions.d.ts +0 -2
- package/dist/plugin-sdk/gateway/session-utils.types.d.ts +0 -2
- package/dist/plugin-sdk/index.js +108 -134
- package/dist/plugin-sdk/middleware/auth-key-retry.d.ts +32 -0
- package/dist/plugin-sdk/middleware/channel-bridge.d.ts +4 -0
- package/dist/plugin-sdk/middleware/error-classifier.d.ts +5 -0
- package/dist/plugin-sdk/middleware/media-resolver.d.ts +12 -0
- package/dist/plugin-sdk/middleware/runtime-factory.d.ts +42 -0
- package/dist/plugin-sdk/middleware/types.d.ts +33 -1
- package/dist/plugin-sdk/plugins/types.d.ts +1 -1
- package/dist/plugin-sdk/terminal/palette.d.ts +2 -2
- package/dist/plugins-B4waLB_f.js +453 -0
- package/dist/plugins-D6-JJ1il.js +455 -0
- package/dist/plugins-cli-DG2zHgdP.js +799 -0
- package/dist/plugins-cli-DZvQzkWd.js +794 -0
- package/dist/ports-BcTKFlWl.js +96 -0
- package/dist/ports-DAc2AlZE.js +316 -0
- package/dist/ports-HiuYk3bt.js +96 -0
- package/dist/ports-dEePqmCq.js +370 -0
- package/dist/program-CX-EtQ9W.js +245 -0
- package/dist/program-context-R3wsjl2f.js +474 -0
- package/dist/progress-DQ1drugY.js +124 -0
- package/dist/prompt-edYTUtju.js +21 -0
- package/dist/prompt-select-styled-BzL7v1zQ.js +1647 -0
- package/dist/prompt-select-styled-g5q4srtu.js +1650 -0
- package/dist/prompt-style-CYEpbwXH.js +9 -0
- package/dist/provider-dispatcher-D7qFGoUR.js +660 -0
- package/dist/provider-dispatcher-dB_rm6tV.js +659 -0
- package/dist/push-apns-DQwR-i4_.js +713 -0
- package/dist/push-apns-Dj5RApCY.js +711 -0
- package/dist/pw-ai-DOQMJFB-.js +1911 -0
- package/dist/pw-ai-oqtYDmjQ.js +1907 -0
- package/dist/qr-cli-CBGm_Cik.js +353 -0
- package/dist/qr-cli-D2jZPdW9.js +348 -0
- package/dist/redact-gXuh8MFk.js +191 -0
- package/dist/redact-snapshot-B-2V56Yb.js +2016 -0
- package/dist/redact-snapshot-CD36XSYE.js +2016 -0
- package/dist/register.agent-DLSuiqWE.js +287 -0
- package/dist/register.agent-DcvEt3hG.js +1044 -0
- package/dist/register.configure-3edoYZai.js +131 -0
- package/dist/register.configure-CyOJCmnY.js +125 -0
- package/dist/register.import-Cku0T-PA.js +31 -0
- package/dist/register.import-Dr8TiUVx.js +28 -0
- package/dist/register.maintenance-5aaPQbJk.js +495 -0
- package/dist/register.maintenance-DPSswZDJ.js +498 -0
- package/dist/register.message-BaSVFv92.js +682 -0
- package/dist/register.message-FEI0RiNN.js +687 -0
- package/dist/register.onboard-CO1UZL-9.js +258 -0
- package/dist/register.onboard-DuLKxjXl.js +263 -0
- package/dist/register.setup-CFYYd_Ev.js +115 -0
- package/dist/register.setup-P0UHDBMS.js +110 -0
- package/dist/register.status-health-sessions-D_3vm2yw.js +424 -0
- package/dist/register.status-health-sessions-z9x79dmg.js +665 -0
- package/dist/register.subclis-B-d970d6.js +267 -0
- package/dist/replies-BvarRpHb.js +136 -0
- package/dist/replies-CSzm5168.js +136 -0
- package/dist/reply-CTgksTO1.js +13695 -0
- package/dist/reply-CUyafs4J.js +13692 -0
- package/dist/reply-directives-Caq4zVTg.js +182 -0
- package/dist/reply-directives-D91fapDF.js +182 -0
- package/dist/reply-payloads-te0YnESs.js +527 -0
- package/dist/reply-prefix-Bv8Mv9q8.js +37 -0
- package/dist/reply-prefix-Rk_UEaJa.js +37 -0
- package/dist/resolve-route-BPa6q23t.js +249 -0
- package/dist/resolve-route-CN9BEALz.js +249 -0
- package/dist/response-prefix-template-D-ptXREi.js +134 -0
- package/dist/response-prefix-template-Dckjdftg.js +134 -0
- package/dist/retry-BcZuGfnV.js +77 -0
- package/dist/retry-BzWBtFpP.js +77 -0
- package/dist/run-main-BugUkGES.js +303 -0
- package/dist/runner-CVMXkHe9.js +2295 -0
- package/dist/runner-DOWTBU0-.js +2295 -0
- package/dist/runtime-guard-CXt4yzo-.js +60 -0
- package/dist/secure-random-CBwDBdj1.js +44 -0
- package/dist/security-cli-BQzdzJUp.js +479 -0
- package/dist/security-cli-D2d8RvsT.js +485 -0
- package/dist/send-B3G3I3II.js +349 -0
- package/dist/send-B6IB6ELR.js +547 -0
- package/dist/send-BT8XEvZB.js +332 -0
- package/dist/send-BTupAHVX.js +2245 -0
- package/dist/send-BZCfto_I.js +1174 -0
- package/dist/send-C5EDjThR.js +492 -0
- package/dist/send-CBM54hgN.js +349 -0
- package/dist/send-CPBd6ItT.js +29 -0
- package/dist/send-CzYm7ULP.js +2245 -0
- package/dist/send-D2m_x8xM.js +374 -0
- package/dist/send-DmEBPE2S.js +1779 -0
- package/dist/send-Dt4iCx61.js +426 -0
- package/dist/send-MWjpLHEV.js +11 -0
- package/dist/send-qpwqt34s.js +547 -0
- package/dist/send-rW25uKNz.js +1776 -0
- package/dist/send-uqa6CNuP.js +492 -0
- package/dist/server-BhmYVCED.js +201 -0
- package/dist/server-DaUw1o2B.js +206 -0
- package/dist/server-lifecycle-BeZsBQwF.js +2437 -0
- package/dist/server-lifecycle-C2F1_TE2.js +2437 -0
- package/dist/server-node-events-DoRFbKCT.js +390 -0
- package/dist/server-node-events-jbbbt-4R.js +395 -0
- package/dist/service-BDt-zUvV.js +670 -0
- package/dist/service-Os7W1F2S.js +670 -0
- package/dist/session-B9KGKVrY.js +170 -0
- package/dist/session-DzAupDyj.js +170 -0
- package/dist/session-cost-usage-BYCI739a.js +627 -0
- package/dist/session-cost-usage-DGsPcuMj.js +627 -0
- package/dist/session-dirs-BIg5RHAh.js +947 -0
- package/dist/session-dirs-DwDxjK1p.js +947 -0
- package/dist/session-utils-BgWDCbyx.js +622 -0
- package/dist/session-utils-CxxOeC1M.js +622 -0
- package/dist/sessions-Bwu0l_CG.js +2569 -0
- package/dist/sessions-CiuFFCnt.js +247 -0
- package/dist/shell-env-CsV_IkJj.js +163 -0
- package/dist/shell-env-hZW9j-Uc.js +163 -0
- package/dist/ssrf-B-rF_tZB.js +183 -0
- package/dist/ssrf-D6fl_7ww.js +183 -0
- package/dist/status-BOFm7iyj.js +2065 -0
- package/dist/status-RI2y_M21.js +2061 -0
- package/dist/status.update-DbO7izip.js +79 -0
- package/dist/status.update-wXyvcztI.js +79 -0
- package/dist/store-BLGrRL_E.js +64 -0
- package/dist/store-BYhcsOLr.js +64 -0
- package/dist/store-Dv76bGHg.js +2571 -0
- package/dist/store-Dw93tSB-.js +53 -0
- package/dist/subagent-registry-DWL-tayF.js +4856 -0
- package/dist/subagent-registry-HjR1tO3-.js +4854 -0
- package/dist/subsystem-BCkt9Ocb.js +1079 -0
- package/dist/subsystem-BgxIzx7w.js +1137 -0
- package/dist/system-cli-DtrDDmCt.js +71 -0
- package/dist/system-cli-xDr_Yyaa.js +76 -0
- package/dist/systemd-BlbIQ1PV.js +547 -0
- package/dist/systemd-DzXePo7r.js +547 -0
- package/dist/systemd-linger-mLbBF4pa.js +75 -0
- package/dist/systemd-linger-qlGGW2JB.js +75 -0
- package/dist/table-V_9n7CjP.js +279 -0
- package/dist/tables-Cy3gObW7.js +55 -0
- package/dist/tables-DAuk-Y6F.js +55 -0
- package/dist/tables-DRh09aPZ.js +55 -0
- package/dist/tailnet-BoTa0e2q.js +40 -0
- package/dist/tailnet-Cy0Q27lj.js +40 -0
- package/dist/tailscale-CiWkh0vS.js +230 -0
- package/dist/tailscale-Driw3j8E.js +230 -0
- package/dist/targets-3hewwPvM.js +120 -0
- package/dist/targets-Bkw_co-B.js +220 -0
- package/dist/targets-C1Tt0ZWd.js +2406 -0
- package/dist/targets-CsrqF2M4.js +650 -0
- package/dist/targets-DKriCISG.js +53 -0
- package/dist/targets-DTM2OPnS.js +650 -0
- package/dist/targets-DhhaK2xG.js +53 -0
- package/dist/targets-tDrl_ioQ.js +46 -0
- package/dist/targets-yq1kGK1_.js +2407 -0
- package/dist/thinking-XA5P_zFw.js +88 -0
- package/dist/thinking-l-rrvZwu.js +88 -0
- package/dist/tokens-7ZtWRjA3.js +21 -0
- package/dist/tool-display-AxpSXZVq.js +785 -0
- package/dist/tool-display-D6GD-41Y.js +785 -0
- package/dist/tool-images-D16vIWPg.js +263 -0
- package/dist/tool-images-IVIZ29ID.js +263 -0
- package/dist/trash--8b4GDyV.js +125 -0
- package/dist/trash-ivbG2QWV.js +125 -0
- package/dist/tui-Cbe1EW-B.js +3319 -0
- package/dist/tui-Dj3XrTCV.js +3319 -0
- package/dist/tui-cli-EGqEcdfE.js +64 -0
- package/dist/tui-cli-KKmqnNs2.js +59 -0
- package/dist/update-DruVguh4.js +349 -0
- package/dist/update-cli-C5tdQeGG.js +1371 -0
- package/dist/update-cli-Canq11sh.js +1374 -0
- package/dist/update-y8nz-3OC.js +349 -0
- package/dist/usage-CAuX4vsd.js +5384 -0
- package/dist/utils-C5daYcFn.js +631 -0
- package/dist/web-B9gR_cGR.js +3071 -0
- package/dist/web-DZ8ahrhK.js +77 -0
- package/dist/web-DkYPsnyd.js +71 -0
- package/dist/webhooks-cli-DFqGwW1f.js +329 -0
- package/dist/webhooks-cli-y-E-q0Xo.js +334 -0
- package/dist/whatsapp-actions-BXIe-Uei.js +123 -0
- package/dist/whatsapp-actions-BictxOCB.js +129 -0
- package/dist/widearea-dns-fHQt5-Q3.js +127 -0
- package/dist/workspace-DvbSDgO_.js +449 -0
- package/dist/workspace-zLfKNRwR.js +447 -0
- package/dist/zod-schema-B9RGngMW.js +2696 -0
- package/dist/zod-schema-D3hQ5SKe.js +2696 -0
- package/extensions/matrix/src/matrix/monitor/replies.ts +0 -24
- package/extensions/mattermost/src/mattermost/monitor-helpers.ts +0 -1
- package/package.json +3 -3
- package/dist/accounts-BFy_Z3od.js +0 -272
- package/dist/accounts-BTXSfPWi.js +0 -270
- package/dist/accounts-BxGS70Do.js +0 -36
- package/dist/accounts-CNY1TGj1.js +0 -47
- package/dist/accounts-DBohBlww.js +0 -32
- package/dist/accounts-DqRQ75w3.js +0 -36
- package/dist/accounts-iODF3SK2.js +0 -47
- package/dist/ack-reactions-B11TAC2D.js +0 -446
- package/dist/ack-reactions-BWVjL4H6.js +0 -446
- package/dist/acp-cli-CA1xMmVo.js +0 -1320
- package/dist/acp-cli-CGo6fJVZ.js +0 -1326
- package/dist/active-listener-VzhWW8W6.js +0 -37
- package/dist/active-listener-z0qVEcom.js +0 -37
- package/dist/agent-CTizRPIJ.js +0 -732
- package/dist/agent-D2RVoS5g.js +0 -731
- package/dist/agent-helpers-B6VfZ9_u.js +0 -606
- package/dist/agent-helpers-CTx5KKJu.js +0 -606
- package/dist/agent-scope-BGYzhtWQ.js +0 -121
- package/dist/agent-scope-C50VuLKh.js +0 -119
- package/dist/agents-BuYn-obw.js +0 -788
- package/dist/agents.config-BSTxuTVd.js +0 -116
- package/dist/agents.config-p3V3b9u6.js +0 -116
- package/dist/audio-DPOuhNq7.js +0 -43
- package/dist/audio-VBcVDa08.js +0 -43
- package/dist/audio-preflight-BwmCYeuM.js +0 -64
- package/dist/audio-preflight-co8gjlPX.js +0 -69
- package/dist/audit-oH4urD3G.js +0 -3138
- package/dist/audit-qgtCT3ik.js +0 -3138
- package/dist/auth-CAczFgAO.js +0 -448
- package/dist/auth-Deh9i9Eg.js +0 -448
- package/dist/auth-profiles-BquJGKLC.js +0 -279
- package/dist/auth-profiles-D8vKiBPq.js +0 -281
- package/dist/banner-Cf978khN.js +0 -294
- package/dist/binaries-DXW6oATV.js +0 -13
- package/dist/bindings-CRU_udk8.js +0 -69
- package/dist/bindings-DQZAu8Wv.js +0 -69
- package/dist/bonjour-discovery-DdAk1VyO.js +0 -378
- package/dist/bonjour-discovery-DuhiIZZx.js +0 -378
- package/dist/browser-cli-CZC4h5V4.js +0 -1687
- package/dist/browser-cli-DAgi_aQk.js +0 -1692
- package/dist/call-BbwtB9Y-.js +0 -2828
- package/dist/call-PivL7Uex.js +0 -2829
- package/dist/catalog-BqO6yem_.js +0 -185
- package/dist/catalog-DFmaYwfk.js +0 -185
- package/dist/channel-account-context-CvIDAtHS.js +0 -550
- package/dist/channel-account-context-q-o0pG1A.js +0 -550
- package/dist/channel-activity-BaCNOZpP.js +0 -94
- package/dist/channel-activity-C-G4n9BK.js +0 -292
- package/dist/channel-activity-DTKGf3j5.js +0 -94
- package/dist/channel-options-Cyappik_.js +0 -32
- package/dist/channel-options-DFnypY5S.js +0 -33
- package/dist/channel-selection-BGl53D5K.js +0 -51
- package/dist/channel-selection-NNPbxnyZ.js +0 -51
- package/dist/channel-web-DmhVkWbP.js +0 -2134
- package/dist/channel-web-kRC3UYBJ.js +0 -2136
- package/dist/channels-cli-C5XRkPJl.js +0 -1421
- package/dist/channels-cli-D6TqCI0m.js +0 -1426
- package/dist/channels-status-issues-CUc9mpeW.js +0 -18
- package/dist/channels-status-issues-DwRDzwrV.js +0 -18
- package/dist/chat-envelope-DEZ-5RY8.js +0 -248
- package/dist/chat-envelope-el7Uo-Fe.js +0 -248
- package/dist/chrome-0QaGKb3L.js +0 -1732
- package/dist/chrome-CFeWdP0Y.js +0 -1733
- package/dist/chunk-CSQfUhgF.js +0 -341
- package/dist/chunk-D0Y_w4oX.js +0 -341
- package/dist/clack-prompter-B7tOxhJd.js +0 -122
- package/dist/clack-prompter-CCFnKP_1.js +0 -121
- package/dist/cleanup-utils-CqAVZz2b.js +0 -94
- package/dist/cli-BR2J3c4l.js +0 -125
- package/dist/cli-C1q1vSmN.js +0 -130
- package/dist/clipboard-D7_SKHPK.js +0 -31
- package/dist/clipboard-Dzkx6Q2K.js +0 -31
- package/dist/command-format-CVfo8I5f.js +0 -18
- package/dist/command-format-DgXcqxBt.js +0 -32
- package/dist/command-registry-CYjvOp8W.js +0 -215
- package/dist/commands-CDonBOrw.js +0 -41
- package/dist/commands-D_-bgTlO.js +0 -41
- package/dist/commands-registry-CWJv6xe2.js +0 -892
- package/dist/commands-registry-Ci8_cFk9.js +0 -893
- package/dist/common-CMI-qsF8.js +0 -156
- package/dist/common-DSVmydhm.js +0 -156
- package/dist/completion-cli-8iZJqfmX.js +0 -452
- package/dist/completion-cli-CYDjEZSt.js +0 -452
- package/dist/config-D5XU45KD.js +0 -6953
- package/dist/config-FHu9Bn4R.js +0 -6951
- package/dist/config-cli-Gehy4sav.js +0 -241
- package/dist/config-cli-RC9qMgJq.js +0 -246
- package/dist/config-guard-J-Q_DFWk.js +0 -97
- package/dist/config-guard-cB5a_ANg.js +0 -75
- package/dist/config-validation-BPNyd9_3.js +0 -18
- package/dist/config-validation-BPWuvhVe.js +0 -18
- package/dist/configure-CC2XdRRm.js +0 -891
- package/dist/configure-DxFBJuhZ.js +0 -889
- package/dist/constants-BmRFoHl0.js +0 -67
- package/dist/constants-C9WPAluB.js +0 -67
- package/dist/control-auth-D0tpV3ts.js +0 -397
- package/dist/control-auth-_-0PGRUs.js +0 -397
- package/dist/control-ui/assets/index-B4ZM1lW1.js +0 -7738
- package/dist/control-ui/assets/index-B4ZM1lW1.js.map +0 -1
- package/dist/control-ui/assets/index-PED72sKF.css +0 -1
- package/dist/control-ui-assets-Cx_mw4D0.js +0 -186
- package/dist/control-ui-assets-W1AUuGrO.js +0 -186
- package/dist/conversation-label-C4SDz4sT.js +0 -36
- package/dist/conversation-label-D1frnvYe.js +0 -36
- package/dist/cron-cli-BzERxhr5.js +0 -495
- package/dist/cron-cli-C8j_uslU.js +0 -490
- package/dist/daemon-cli-C95XNbX0.js +0 -1199
- package/dist/daemon-cli-e6sURMqd.js +0 -1197
- package/dist/daemon-install-CcohRvKV.js +0 -55
- package/dist/daemon-install-DDshfT0J.js +0 -60
- package/dist/daemon-install-helpers-CFGAfRlj.js +0 -462
- package/dist/daemon-install-helpers-DIUzSFG1.js +0 -462
- package/dist/defaults-B5KStIBg.js +0 -7
- package/dist/defaults-xUAL2Z-F.js +0 -7
- package/dist/deliver-912khjLK.js +0 -481
- package/dist/deliver-D56J4-1F.js +0 -481
- package/dist/delivery-queue-Cfa9Wmxp.js +0 -244
- package/dist/delivery-queue-CxVRi4tw.js +0 -244
- package/dist/devices-cli-0qDhTgZR.js +0 -316
- package/dist/devices-cli-6SKMR2bV.js +0 -321
- package/dist/diagnostics-99iCgBUh.js +0 -46
- package/dist/diagnostics-VC0cz7kX.js +0 -46
- package/dist/directory-cli-5YXdoVdn.js +0 -217
- package/dist/directory-cli-D3IKCHmn.js +0 -222
- package/dist/dm-policy-shared-4rkjhcrM.js +0 -22
- package/dist/dm-policy-shared-D8lgnmrC.js +0 -22
- package/dist/dns-cli-11CtErVU.js +0 -197
- package/dist/dns-cli-SiEd_1Lq.js +0 -202
- package/dist/dock-BqNINg7k.js +0 -928
- package/dist/dock-CQuu41bw.js +0 -929
- package/dist/doctor-completion-BR1SlAT3.js +0 -92
- package/dist/doctor-completion-CZwpEhIK.js +0 -92
- package/dist/doctor-config-flow-BVkHcvoj.js +0 -1933
- package/dist/doctor-config-flow-DVYRn0An.js +0 -1934
- package/dist/enable-DcJnkzfz.js +0 -59
- package/dist/enable-ibNq4UWy.js +0 -59
- package/dist/env-DeF64iu0.js +0 -60
- package/dist/env-vars-7aZqKPhk.js +0 -93
- package/dist/errors-8F-77i6m.js +0 -35
- package/dist/errors-DZ199hOo.js +0 -35
- package/dist/exec-DbKuYyM1.js +0 -164
- package/dist/exec-DkFE7lqU.js +0 -164
- package/dist/fetch-BFSBLBkA.js +0 -67
- package/dist/fetch-C6XKGA11.js +0 -67
- package/dist/fetch-CEDsOiql.js +0 -67
- package/dist/file-lock-CIvloidc.js +0 -107
- package/dist/file-lock-CzBL_VIx.js +0 -107
- package/dist/fs-safe-DSwT85uK.js +0 -88
- package/dist/fs-safe-DkBhNAc3.js +0 -98
- package/dist/gateway-cli-BEEZhCHv.js +0 -23747
- package/dist/gateway-cli-Nob0g_4y.js +0 -23742
- package/dist/gateway-rpc-CksB-N83.js +0 -28
- package/dist/gateway-rpc-Dq44SkOv.js +0 -28
- package/dist/gmail-setup-utils-Cnx8A5pW.js +0 -422
- package/dist/gmail-setup-utils-nkabbKOE.js +0 -423
- package/dist/health-RT-F3hzT.js +0 -1423
- package/dist/health-SOuaKNRa.js +0 -1420
- package/dist/health-format-BG95OE6N.js +0 -28
- package/dist/heartbeat-visibility-BxkZjE5m.js +0 -125
- package/dist/heartbeat-visibility-CGG-G7px.js +0 -125
- package/dist/help-format-DAxf0l_h.js +0 -17
- package/dist/helpers-kkeXif0Q.js +0 -10
- package/dist/hook-runner-global-DJ14gXFP.js +0 -527
- package/dist/hooks-cli-DyEKryW8.js +0 -1217
- package/dist/hooks-cli-RuEn0-oy.js +0 -1222
- package/dist/image-ops-Bi6JPSkD.js +0 -354
- package/dist/image-ops-DWytvdh_.js +0 -354
- package/dist/import-D8BBZQgl.js +0 -170
- package/dist/import-DQ6NI4Fz.js +0 -168
- package/dist/inbound-context-CPkkQW0i.js +0 -68
- package/dist/inbound-context-DS_kpIYI.js +0 -68
- package/dist/inbound-path-policy-Bg4gZBx-.js +0 -250
- package/dist/inbound-path-policy-sdr5Ji0k.js +0 -250
- package/dist/inspect-Dt8hogS3.js +0 -559
- package/dist/inspect-vYIL1oA0.js +0 -559
- package/dist/installs-aM5dWAyn.js +0 -325
- package/dist/installs-pWdqG8HL.js +0 -325
- package/dist/ipv4--2WXMVtE.js +0 -46
- package/dist/ipv4-CDQpx1A7.js +0 -46
- package/dist/ir-BpaAMTfW.js +0 -940
- package/dist/json-files-DzpTak5i.js +0 -46
- package/dist/links-C3soDNDH.js +0 -15
- package/dist/loader-Ccwsh8Sh.js +0 -22624
- package/dist/loader-y9MhJewT.js +0 -22621
- package/dist/local-roots-BrH0Q63K.js +0 -313
- package/dist/local-roots-nImrw2WR.js +0 -314
- package/dist/logger-Bw3cFE5t.js +0 -49
- package/dist/logging-C-nxX2fn.js +0 -20
- package/dist/login-C_Kt57nO.js +0 -62
- package/dist/login-DOmWDMeP.js +0 -61
- package/dist/login-qr-CXU0wC5K.js +0 -322
- package/dist/login-qr-D0u6fdeO.js +0 -327
- package/dist/logs-cli-CschwP4d.js +0 -238
- package/dist/logs-cli-D7ayUvz_.js +0 -233
- package/dist/markdown-tables-CrmghPAr.js +0 -29
- package/dist/markdown-tables-jrnSPvZ6.js +0 -29
- package/dist/media-CojxZ45J.js +0 -10492
- package/dist/media-DN7yRfrH.js +0 -940
- package/dist/message-action-names-CtEZcmlU.js +0 -2521
- package/dist/message-action-names-WglOO_DT.js +0 -2521
- package/dist/message-channel-DzJqHVZD.js +0 -91
- package/dist/net-Cg8AQeke.js +0 -225
- package/dist/net-D6D0wgcF.js +0 -225
- package/dist/node-cli-Q2-n3Fgv.js +0 -24
- package/dist/nodes-cli-C2SoKfCv.js +0 -1343
- package/dist/nodes-cli-CQmlfx0K.js +0 -1348
- package/dist/nodes-screen-BR9sYoPa.js +0 -250
- package/dist/nodes-screen-Cw7Hv7M2.js +0 -250
- package/dist/note-Dlv4NmlQ.js +0 -92
- package/dist/note-kvWV4xtw.js +0 -92
- package/dist/npm-registry-spec-0qiKawvv.js +0 -786
- package/dist/npm-registry-spec-COvUzy5J.js +0 -786
- package/dist/npm-resolution-6v_Zm-9G.js +0 -86
- package/dist/npm-resolution-BFz7LeoN.js +0 -86
- package/dist/onboard-CgyU-mDL.js +0 -407
- package/dist/onboard-RI4vNTZd.js +0 -405
- package/dist/onboard-channels-DN5JoKPd.js +0 -2548
- package/dist/onboard-channels-DyAd1OZr.js +0 -2547
- package/dist/onboard-config-BCTthQ7J.js +0 -24
- package/dist/onboard-config-y-2cgT0V.js +0 -24
- package/dist/onboard-helpers-BCzZUD0z.js +0 -363
- package/dist/onboard-helpers-sDc2Ky6H.js +0 -362
- package/dist/onboard-remote-CJrMtttl.js +0 -127
- package/dist/onboard-remote-hyQIBguz.js +0 -127
- package/dist/onboarding-DCu1iBTV.js +0 -541
- package/dist/onboarding-zKMitzpb.js +0 -543
- package/dist/onboarding.finalize-ClHhYE2E.js +0 -401
- package/dist/onboarding.finalize-D5JkVJgg.js +0 -398
- package/dist/onboarding.gateway-config-DFh71Ndn.js +0 -198
- package/dist/onboarding.gateway-config-VBk6AP9U.js +0 -191
- package/dist/outbound-BYlZshIw.js +0 -221
- package/dist/outbound-CFfJC1j5.js +0 -220
- package/dist/outbound-attachment-BCNs1u1F.js +0 -18
- package/dist/outbound-attachment-B_0D60Yr.js +0 -18
- package/dist/outbound-attachment-o0seS0CP.js +0 -18
- package/dist/pairing-cli-BeydfoF9.js +0 -122
- package/dist/pairing-cli-DWzX866x.js +0 -127
- package/dist/pairing-labels-B-N8S5Fc.js +0 -9
- package/dist/pairing-labels-B_53dY5L.js +0 -9
- package/dist/pairing-store-BxdqFZGK.js +0 -460
- package/dist/pairing-store-CTkD51uW.js +0 -459
- package/dist/path-env-DR5vn3QL.js +0 -89
- package/dist/path-env-qRJbjJzj.js +0 -89
- package/dist/path-safety-DkT9RmTG.js +0 -14
- package/dist/path-safety-juI2XbO1.js +0 -14
- package/dist/plugin-auto-enable-D23gv7Aw.js +0 -302
- package/dist/plugin-auto-enable-DuPS9XiJ.js +0 -301
- package/dist/plugin-registry-CNu_1KZz.js +0 -33
- package/dist/plugin-registry-DeHwd2jk.js +0 -33
- package/dist/plugin-sdk/agents/agent-helpers/thinking.d.ts +0 -5
- package/dist/plugin-sdk/agents/auth-profiles/constants.d.ts +0 -16
- package/dist/plugin-sdk/agents/auth-profiles/display.d.ts +0 -7
- package/dist/plugin-sdk/agents/auth-profiles/doctor.d.ts +0 -8
- package/dist/plugin-sdk/agents/auth-profiles/oauth.d.ts +0 -14
- package/dist/plugin-sdk/agents/auth-profiles/session-override.d.ts +0 -18
- package/dist/plugin-sdk/agents/auth-profiles.d.ts +0 -8
- package/dist/plugin-sdk/agents/defaults.d.ts +0 -3
- package/dist/plugin-sdk/agents/provider-auth.d.ts +0 -40
- package/dist/plugin-sdk/auto-reply/model-runtime.d.ts +0 -17
- package/dist/plugin-sdk/config/model-input.d.ts +0 -9
- package/dist/plugin-sdk/config/zod-schema.agent-model.d.ts +0 -5
- package/dist/plugin-sdk/sessions/model-overrides.d.ts +0 -14
- package/dist/plugin-sdk/telegram/reasoning-lane-coordinator.d.ts +0 -18
- package/dist/plugins-BflZz0sp.js +0 -453
- package/dist/plugins-cli-DV82scUw.js +0 -798
- package/dist/plugins-cli-Qj1UyIZO.js +0 -793
- package/dist/plugins-woGRXMzU.js +0 -455
- package/dist/ports-DrruB2fK.js +0 -370
- package/dist/ports-GT1yV-Tg.js +0 -96
- package/dist/ports-NPqtlfp0.js +0 -316
- package/dist/ports-QMI4-F9m.js +0 -96
- package/dist/program-CQmIaRUI.js +0 -244
- package/dist/program-context-DEU6ACnL.js +0 -474
- package/dist/progress-CBkSaM6z.js +0 -124
- package/dist/prompt-Bllj1dhc.js +0 -21
- package/dist/prompt-select-styled-BhTN6zE2.js +0 -1650
- package/dist/prompt-select-styled-WopXnjIy.js +0 -1647
- package/dist/prompt-style-DVEm3BZW.js +0 -9
- package/dist/provider-dispatcher-B4QMe-I6.js +0 -659
- package/dist/provider-dispatcher-Bfauw6zz.js +0 -660
- package/dist/push-apns-C0LyG-WB.js +0 -713
- package/dist/push-apns-DuG95AKC.js +0 -711
- package/dist/pw-ai-D9n6-Wa6.js +0 -1906
- package/dist/pw-ai-T280E6Mn.js +0 -1910
- package/dist/qr-cli-DVECWTHN.js +0 -352
- package/dist/qr-cli-hSLixZCe.js +0 -347
- package/dist/redact-eZq1uwNK.js +0 -191
- package/dist/redact-snapshot-BZYLIqe-.js +0 -2028
- package/dist/redact-snapshot-C6hVx_9I.js +0 -2028
- package/dist/register.agent-Dmj-sgEl.js +0 -1043
- package/dist/register.agent-IspcBFeD.js +0 -286
- package/dist/register.configure-BqJEqyGL.js +0 -130
- package/dist/register.configure-PPkU_4Ea.js +0 -124
- package/dist/register.import-Bs-UkOs-.js +0 -27
- package/dist/register.import-DLng8g-e.js +0 -30
- package/dist/register.maintenance-BbpkJil3.js +0 -497
- package/dist/register.maintenance-C5nkOQxa.js +0 -494
- package/dist/register.message-C83Hi1b3.js +0 -681
- package/dist/register.message-D16isu4u.js +0 -686
- package/dist/register.onboard-B8EzX3wY.js +0 -257
- package/dist/register.onboard-CyRbr_0V.js +0 -262
- package/dist/register.setup-DWyoowAz.js +0 -109
- package/dist/register.setup-Dz6GwMnu.js +0 -114
- package/dist/register.status-health-sessions-CbQOfycz.js +0 -423
- package/dist/register.status-health-sessions-DXIWG47y.js +0 -669
- package/dist/register.subclis-DeGP5UPU.js +0 -267
- package/dist/replies-BKrzM0QI.js +0 -136
- package/dist/replies-Cl2gYBVt.js +0 -136
- package/dist/reply-CCu_DY64.js +0 -13900
- package/dist/reply-DSKC8kyS.js +0 -13897
- package/dist/reply-directives-BHJKp1Du.js +0 -182
- package/dist/reply-directives-CD2WycBM.js +0 -182
- package/dist/reply-payloads-D_BM1Anb.js +0 -527
- package/dist/reply-prefix-DBLCYiup.js +0 -38
- package/dist/reply-prefix-Q4DOJSn_.js +0 -38
- package/dist/resolve-route-CBVbY0xS.js +0 -249
- package/dist/resolve-route-DGEgTEif.js +0 -249
- package/dist/response-prefix-template-rVZQOViK.js +0 -136
- package/dist/response-prefix-template-up4REfuR.js +0 -136
- package/dist/retry-BhuXOEVR.js +0 -77
- package/dist/retry-DUjAzOBy.js +0 -77
- package/dist/run-main-Um5xhxla.js +0 -320
- package/dist/runner-yVJ4HB2K.js +0 -2294
- package/dist/runner-z92MWZ3m.js +0 -2294
- package/dist/runtime-guard-DZ_xuCc4.js +0 -60
- package/dist/secure-random-Pl9rPl0l.js +0 -44
- package/dist/security-cli-CdwbWZUj.js +0 -484
- package/dist/security-cli-DP5QJpa5.js +0 -478
- package/dist/send-B1_Ymjb9.js +0 -1778
- package/dist/send-B84axiIa.js +0 -29
- package/dist/send-BN_zYVlx.js +0 -547
- package/dist/send-BqVOxAmK.js +0 -1174
- package/dist/send-Bx9bUGav.js +0 -492
- package/dist/send-C3pdJ6p-.js +0 -2245
- package/dist/send-CBGSXjfD.js +0 -2245
- package/dist/send-CGXyTF22.js +0 -426
- package/dist/send-CKavrhXj.js +0 -11
- package/dist/send-D08Je6DL.js +0 -374
- package/dist/send-D1aYEG-k.js +0 -332
- package/dist/send-DHldI3gf.js +0 -492
- package/dist/send-D_DUQJ6H.js +0 -349
- package/dist/send-Ds63eF4a.js +0 -349
- package/dist/send-YRVDWfSs.js +0 -547
- package/dist/send-xnwty9cY.js +0 -1775
- package/dist/server-BQFoyCRR.js +0 -200
- package/dist/server-DhXw25Jq.js +0 -205
- package/dist/server-lifecycle-BjCCyD3w.js +0 -2437
- package/dist/server-lifecycle-Coyr6Lda.js +0 -2437
- package/dist/server-node-events-De4WZQQD.js +0 -393
- package/dist/server-node-events-dXXayuqY.js +0 -398
- package/dist/service-Bjqii5nW.js +0 -670
- package/dist/service-fp29z5Ww.js +0 -670
- package/dist/session-DBL5nHDy.js +0 -170
- package/dist/session-cost-usage-DX09eTPU.js +0 -627
- package/dist/session-cost-usage-yYi525j3.js +0 -627
- package/dist/session-dirs-Cj5xi7zX.js +0 -947
- package/dist/session-dirs-DdF6TDsE.js +0 -947
- package/dist/session-utils-CEtEq6bi.js +0 -625
- package/dist/session-utils-WmlWAs1r.js +0 -625
- package/dist/session-xKIW6gL2.js +0 -170
- package/dist/sessions--PykPynp.js +0 -2593
- package/dist/sessions-Bw4LRnSr.js +0 -252
- package/dist/ssrf-Ck9HDZpv.js +0 -183
- package/dist/ssrf-m7kFIobZ.js +0 -183
- package/dist/status-CtzYFLLF.js +0 -2072
- package/dist/status-DiN1cq2p.js +0 -2068
- package/dist/status.update-C55QM2xs.js +0 -79
- package/dist/status.update-CBmPXwYN.js +0 -79
- package/dist/store-C3tOpizT.js +0 -64
- package/dist/store-CPJXuhvQ.js +0 -53
- package/dist/store-SusmIfz7.js +0 -2595
- package/dist/store-v3P-OWhi.js +0 -64
- package/dist/subagent-registry-Db4Ho_2Y.js +0 -4858
- package/dist/subagent-registry-Du_j0Fnt.js +0 -4860
- package/dist/subsystem-BUXAJwPD.js +0 -1079
- package/dist/subsystem-COd61u0P.js +0 -1139
- package/dist/system-cli-DYCpLO3T.js +0 -75
- package/dist/system-cli-eAk5wVbP.js +0 -70
- package/dist/systemd-DSnlM3jX.js +0 -547
- package/dist/systemd-TfK8GuTx.js +0 -547
- package/dist/systemd-linger-Axnc1xCb.js +0 -75
- package/dist/systemd-linger-_0_-RY4v.js +0 -75
- package/dist/table-DPTzZyhu.js +0 -279
- package/dist/tables-DI5LGEr1.js +0 -55
- package/dist/tables-PxcSPSO0.js +0 -55
- package/dist/tables-TWiml6b1.js +0 -55
- package/dist/tailnet-CEudzG0i.js +0 -40
- package/dist/tailnet-PnMrjwGT.js +0 -40
- package/dist/tailscale-DTATQxAG.js +0 -230
- package/dist/tailscale-Dbyahx0J.js +0 -230
- package/dist/targets-C1NeMn2J.js +0 -220
- package/dist/targets-CcTME3bp.js +0 -46
- package/dist/targets-CmC5m7Ey.js +0 -53
- package/dist/targets-D-u6Kyio.js +0 -650
- package/dist/targets-D7OKVXMI.js +0 -650
- package/dist/targets-DB4vBpIQ.js +0 -2172
- package/dist/targets-DfqPGOmM.js +0 -2173
- package/dist/targets-DyybKefq.js +0 -53
- package/dist/targets-JCISV-hS.js +0 -120
- package/dist/tokens-DzFOtLlW.js +0 -21
- package/dist/tool-display-Br6mwaJc.js +0 -785
- package/dist/tool-display-sgNwLOBj.js +0 -785
- package/dist/tool-images-BNfIJ_Kj.js +0 -263
- package/dist/tool-images-kloBqxqK.js +0 -263
- package/dist/trash-DPi0aCCQ.js +0 -125
- package/dist/trash-D_Jd_yQZ.js +0 -125
- package/dist/tui-CHc0EfJO.js +0 -3392
- package/dist/tui-CyHwc2uX.js +0 -3392
- package/dist/tui-cli-BvwbrIYO.js +0 -63
- package/dist/tui-cli-C9I18SfW.js +0 -58
- package/dist/update-DxyjwCL2.js +0 -349
- package/dist/update-IX7vdqA8.js +0 -349
- package/dist/update-cli-CBeXUSzq.js +0 -1373
- package/dist/update-cli-DkAWmUrp.js +0 -1370
- package/dist/usage-CYlQW4M2.js +0 -5279
- package/dist/utils-LBKvDoPx.js +0 -631
- package/dist/web-BUYUdnRH.js +0 -3065
- package/dist/web-Dquzwqf4.js +0 -70
- package/dist/web-tS8diboh.js +0 -76
- package/dist/webhooks-cli-B7Vw3CMz.js +0 -333
- package/dist/webhooks-cli-BpZHQlVd.js +0 -328
- package/dist/whatsapp-actions-D5HXezjp.js +0 -128
- package/dist/whatsapp-actions-DaA291Ya.js +0 -122
- package/dist/widearea-dns-DSoaA-eH.js +0 -127
- package/dist/workspace-B4ZvVYT9.js +0 -447
- package/dist/workspace-B8PA8oxJ.js +0 -449
- /package/dist/{account-lookup-0KDSp5Mj.js → account-lookup-BOCzCnir.js} +0 -0
- /package/dist/{account-lookup-zvANGr2x.js → account-lookup-DGscKBsr.js} +0 -0
- /package/dist/{ansi-D04X81yq.js → ansi-aRwLYlzD.js} +0 -0
- /package/dist/{api-BeQMq2iS.js → api-BDff51CS.js} +0 -0
- /package/dist/{api-CxX8-gGz.js → api-qWSMsT8m.js} +0 -0
- /package/dist/{argv-Co-b9Zsc.js → argv-neJY_Hxm.js} +0 -0
- /package/dist/{brew-C4zKZsHX.js → brew-ByYl36Mt.js} +0 -0
- /package/dist/{brew-DbSbN8sD.js → brew-CMSQ5Fek.js} +0 -0
- /package/dist/{chat-type-CYPyHAj-.js → chat-type-BKe459rw.js} +0 -0
- /package/dist/{chat-type-DKb2TlGZ.js → chat-type-DyovJwCt.js} +0 -0
- /package/dist/{cleanup-utils-CwQvD73q.js → cleanup-utils-S_P5Jebv.js} +0 -0
- /package/dist/{cli-name-BicfmwQX.js → cli-name-CRLBidNP.js} +0 -0
- /package/dist/{cli-name-C6rJGl18.js → cli-name-Yv30OygA.js} +0 -0
- /package/dist/{cli-utils-BhXbz2UF.js → cli-utils-C5nQDfa6.js} +0 -0
- /package/dist/{cli-utils-DZe_rVkZ.js → cli-utils-KcEwAsuZ.js} +0 -0
- /package/dist/{client-C61M8zI3.js → client-C7B0uFB0.js} +0 -0
- /package/dist/{client-DdpmATKq.js → client-Cd2HNUX0.js} +0 -0
- /package/dist/{command-options-C4paWSGf.js → command-options-1bi44p_B.js} +0 -0
- /package/dist/{command-options-CA30lfLK.js → command-options-7y5Zrv4M.js} +0 -0
- /package/dist/{config-eval-CjGZtLwx.js → config-eval-CJtk3Msr.js} +0 -0
- /package/dist/{config-eval-H_wlEYIG.js → config-eval-DQIwdWg7.js} +0 -0
- /package/dist/{constants-ChptG3d7.js → constants--3PuQVaS.js} +0 -0
- /package/dist/{constants-DY6b-_Wl.js → constants-DNWjlxZ5.js} +0 -0
- /package/dist/{credentials-BHWUBHMd.js → credentials-BhnauW0K.js} +0 -0
- /package/dist/{credentials-DFsi1_e8.js → credentials-eZcqWNG_.js} +0 -0
- /package/dist/{daemon-runtime-CMnbwryP.js → daemon-runtime-99xh1fGv.js} +0 -0
- /package/dist/{daemon-runtime-CvqE4ysg.js → daemon-runtime-BOcdJaFy.js} +0 -0
- /package/dist/{dangerous-name-matching-BzmiLXmA.js → dangerous-name-matching-YeatnYIA.js} +0 -0
- /package/dist/{dangerous-name-matching-DaVRgwer.js → dangerous-name-matching-oVb1EqYT.js} +0 -0
- /package/dist/{dangerous-tools-BOLoCRv4.js → dangerous-tools-BMt8-6jE.js} +0 -0
- /package/dist/{dangerous-tools-Baq7Q-i6.js → dangerous-tools-CripTfYv.js} +0 -0
- /package/dist/{fetch-timeout-DTIN7CGM.js → fetch-timeout-Db3da8yR.js} +0 -0
- /package/dist/{fetch-timeout-DoySHqfO.js → fetch-timeout-l_6RdoMw.js} +0 -0
- /package/dist/{file-identity-BxlKD8Ys.js → file-identity-Bs9zZOi2.js} +0 -0
- /package/dist/{format-duration-CqUERz51.js → format-duration-Bo-Mxi3E.js} +0 -0
- /package/dist/{format-duration-Ct-yiwkS.js → format-duration-CfrJ5T8k.js} +0 -0
- /package/dist/{format-relative-79_Y1n2Y.js → format-relative-8cNYQsqb.js} +0 -0
- /package/dist/{format-relative-CxLpEQOX.js → format-relative-CZOlQ2pA.js} +0 -0
- /package/dist/{health-format-B_QRD8Si.js → health-format-WMRp1BbP.js} +0 -0
- /package/dist/{heartbeat-wake-LGEgcXjs.js → heartbeat-wake-BtRrOB-t.js} +0 -0
- /package/dist/{heartbeat-wake-Y97geucO.js → heartbeat-wake-eRINROYK.js} +0 -0
- /package/dist/{help-format-NNm_Ov4H.js → help-format-BEb0SPHF.js} +0 -0
- /package/dist/{helpers-BAsMXprO.js → helpers-BJtPtu_2.js} +0 -0
- /package/dist/{helpers-DLgbkcEn.js → helpers-Cj6f8SPZ.js} +0 -0
- /package/dist/{helpers-R7bU5IBz.js → helpers-ryxLx-aM.js} +0 -0
- /package/dist/{host-env-security-szwfmhC4.js → host-env-security-CbiODGvQ.js} +0 -0
- /package/dist/{input-provenance-Bn6thJNm.js → input-provenance-CPhdY-0F.js} +0 -0
- /package/dist/{input-provenance-xUsSMOsz.js → input-provenance-DUNEQoFM.js} +0 -0
- /package/dist/{ip-C9q3Oq20.js → ip-BAhS4rY2.js} +0 -0
- /package/dist/{ip-D0zgNmBV.js → ip-BcdPcLiP.js} +0 -0
- /package/dist/{is-main-DN8-sNR5.js → is-main-KcWqINzy.js} +0 -0
- /package/dist/{json-file-ChO_R9yh.js → json-file-BVvmrQG3.js} +0 -0
- /package/dist/{json-file-B7l5-Xhr.js → json-file-Dbg7nZg1.js} +0 -0
- /package/dist/{json-files-CmpYSF4G.js → json-files-DSKEdz7x.js} +0 -0
- /package/dist/{lanes-ByWMUgrz.js → lanes-Brd-nf-Z.js} +0 -0
- /package/dist/{lanes-cHJ5arWg.js → lanes-COs3zODW.js} +0 -0
- /package/dist/{links-Bz4V7R_p.js → links-gse8sWn-.js} +0 -0
- /package/dist/{location-DBWCGNLq.js → location-D1FM_C63.js} +0 -0
- /package/dist/{location-GbZ0bBRU.js → location-LuzkqHGi.js} +0 -0
- /package/dist/{logger-DyL5G2DO.js → logger-BMP_j_Lx.js} +0 -0
- /package/dist/{logger-BWMPnILd.js → logger-DWbwXLjl.js} +0 -0
- /package/dist/{logger-GvipVDfh.js → logger-DXCDb7qu.js} +0 -0
- /package/dist/{logging-D8-Kozjc.js → logging-CAgCb3n3.js} +0 -0
- /package/dist/{message-channel-uWMAiywE.js → message-channel-D72Bc6Tb.js} +0 -0
- /package/dist/{mime-BS3jhcZE.js → mime-Cqg1jjia.js} +0 -0
- /package/dist/{mime-Cxh_64P6.js → mime-D4bQLMJL.js} +0 -0
- /package/dist/{mutable-allowlist-detectors-DiZDtmlZ.js → mutable-allowlist-detectors-NtI6s4TE.js} +0 -0
- /package/dist/{mutable-allowlist-detectors-U5ThQr9V.js → mutable-allowlist-detectors-nAmo9v5u.js} +0 -0
- /package/dist/{node-cli-Uf6lAntf.js → node-cli-bNJbha3z.js} +0 -0
- /package/dist/{parse-log-line-enq8pduH.js → parse-log-line-BY9Vz72K.js} +0 -0
- /package/dist/{parse-log-line-mz9TG6ig.js → parse-log-line-BrrE4onI.js} +0 -0
- /package/dist/{parse-timeout-BMP8a0_a.js → parse-timeout-Dfyln-4M.js} +0 -0
- /package/dist/{path-guards-CIx4hURU.js → path-guards-D9LU0y9L.js} +0 -0
- /package/dist/{path-guards-CrQOUlsq.js → path-guards-crZaTVvq.js} +0 -0
- /package/dist/plugin-sdk/{agents → auth}/api-key-rotation.d.ts +0 -0
- /package/dist/plugin-sdk/{agents/auth-profiles → auth}/paths.d.ts +0 -0
- /package/dist/plugin-sdk/{agents/auth-profiles → auth}/profiles.d.ts +0 -0
- /package/dist/plugin-sdk/{agents/auth-profiles → auth}/store.d.ts +0 -0
- /package/dist/plugin-sdk/{agents/auth-profiles → auth}/types.d.ts +0 -0
- /package/dist/{plugins-allowlist-BbTQ5Z2k.js → plugins-allowlist-CD4oIJNk.js} +0 -0
- /package/dist/{plugins-allowlist-C20oaESO.js → plugins-allowlist-CUhk3GDh.js} +0 -0
- /package/dist/{polls-B0CCBDeR.js → polls-ChvH1OIW.js} +0 -0
- /package/dist/{polls-CwwHzYBM.js → polls-Dn1C2d1-.js} +0 -0
- /package/dist/{ports-lsof-Wteul3ju.js → ports-lsof-BDQWExpn.js} +0 -0
- /package/dist/{process-scoped-map-CV9kDvfG.js → process-scoped-map-BwUkYFQV.js} +0 -0
- /package/dist/{process-scoped-map-PEvnG75N.js → process-scoped-map-CBWcUvTa.js} +0 -0
- /package/dist/{program-context-jqeI5alP.js → program-context-DtsEOsdM.js} +0 -0
- /package/dist/{progress-C1kUfYL-.js → progress-BjGCAXH7.js} +0 -0
- /package/dist/{prompt-Yn2yClg1.js → prompt-FIISMuNm.js} +0 -0
- /package/dist/{prompt-style-DjEYC_s-.js → prompt-style-DL64_X-p.js} +0 -0
- /package/dist/{provider-utils-3JTMJroG.js → provider-utils-DiLhkKQp.js} +0 -0
- /package/dist/{proxy-DL3MD6-P.js → proxy-DUTF0OYE.js} +0 -0
- /package/dist/{proxy-DpNv2cSV.js → proxy-Dv0sbx6A.js} +0 -0
- /package/dist/{pw-ai-state-CGfLv6nV.js → pw-ai-state-DKhOTqDv.js} +0 -0
- /package/dist/{pw-ai-state-Dynx20hr.js → pw-ai-state-kkp06zyZ.js} +0 -0
- /package/dist/{redact-Dx1Fue21.js → redact-BTeK8lMZ.js} +0 -0
- /package/dist/{redact-identifier-BTIWtaa-.js → redact-identifier-F6t5pklx.js} +0 -0
- /package/dist/{redact-identifier-CAagcfWA.js → redact-identifier-VdOrq-IK.js} +0 -0
- /package/dist/{remoteclaw-root-C2HV2VeC.js → remoteclaw-root-DF8m3X4C.js} +0 -0
- /package/dist/{remoteclaw-root-DybYl8PL.js → remoteclaw-root-rJHOCwzo.js} +0 -0
- /package/dist/{render-CCLsW6Lz.js → render-e7fENCYH.js} +0 -0
- /package/dist/{render-uf6PvGMV.js → render-qcqmrHse.js} +0 -0
- /package/dist/{retry-DnqPAqWp.js → retry-CwZiwLDN.js} +0 -0
- /package/dist/{runtime-DJNp29jv.js → runtime-Ds3E9SqF.js} +0 -0
- /package/dist/{runtime-guard-U-ewY_QH.js → runtime-guard-CdJVmJc0.js} +0 -0
- /package/dist/{secret-equal-BbHdTtqY.js → secret-equal-CDUVxXmp.js} +0 -0
- /package/dist/{secret-equal-CXJEZiWb.js → secret-equal-d3sEnK98.js} +0 -0
- /package/dist/{secure-random-CS2mSdTn.js → secure-random-CJtykx_p.js} +0 -0
- /package/dist/{secure-random-_dzDDlFo.js → secure-random-y6N6Gted.js} +0 -0
- /package/dist/{session-key-5YLnn_qf.js → session-key-BF-9YzxC.js} +0 -0
- /package/dist/{stagger-BXv_apuy.js → stagger-B-_Wnofy.js} +0 -0
- /package/dist/{stagger-MI9gd2rQ.js → stagger-CjkdqPuN.js} +0 -0
- /package/dist/{status-BmtCS3T1.js → status-BFmH9Uge.js} +0 -0
- /package/dist/{status-BrwHRn2B.js → status-BIupzBh9.js} +0 -0
- /package/dist/{strip-inbound-meta-DjKcSFaW.js → strip-inbound-meta-BNXRYvmY.js} +0 -0
- /package/dist/{strip-inbound-meta-jy3bkUab.js → strip-inbound-meta-BtNFmc6V.js} +0 -0
- /package/dist/{table-C1rdyYl9.js → table-Au5EeKD6.js} +0 -0
- /package/dist/{target-errors-BDpPcwh5.js → target-errors-B6YON-5k.js} +0 -0
- /package/dist/{target-errors-DdIAPcMM.js → target-errors-sPHoHj73.js} +0 -0
- /package/dist/{targets-D-qLBpTA.js → targets-BtGRUQMa.js} +0 -0
- /package/dist/{targets-BMenhVHg.js → targets-D3r6Zgic.js} +0 -0
- /package/dist/{targets-C-2xwh9f.js → targets-DDdPVd12.js} +0 -0
- /package/dist/{targets-UncQvCVs.js → targets-Ds5eT_RZ.js} +0 -0
- /package/dist/{targets-D7PT_rdO.js → targets-DtvPW-B8.js} +0 -0
- /package/dist/{text-format-BQ3z_OXA.js → text-format-CFm4X8Ze.js} +0 -0
- /package/dist/{text-format-oWqzVmah.js → text-format-KHU3KzvQ.js} +0 -0
- /package/dist/{tokens-B-jmvNR9.js → tokens-BGw4xHhW.js} +0 -0
- /package/dist/{usage-BdhBT0Vz.js → usage-BEjWlD9A.js} +0 -0
- /package/dist/{usage-format-C3mNLfhI.js → usage-format-Cx3JveFn.js} +0 -0
- /package/dist/{usage-format-DAaPzr_z.js → usage-format-D-ZaYT_e.js} +0 -0
- /package/dist/{usage-BtQcAnf6.js → usage-o8O_TxA-.js} +0 -0
- /package/dist/{widearea-dns-CsmBVbez.js → widearea-dns-DUDYT3z2.js} +0 -0
- /package/dist/{workspace-BzPeZDew.js → workspace-9__vtmnA.js} +0 -0
- /package/dist/{wsl-B_sPlzWw.js → wsl-BLrG__iS.js} +0 -0
- /package/dist/{wsl-BCnYV9O0.js → wsl-C2dudsWt.js} +0 -0
|
@@ -0,0 +1,1174 @@
|
|
|
1
|
+
import { F as expandHomePrefix, l as CONFIG_DIR, t as createSubsystemLogger, v as danger, y as logVerbose } from "./subsystem-BCkt9Ocb.js";
|
|
2
|
+
import { C as loadConfig, J as isTruthyEnvValue, T as writeConfigFile, _ as isGifMedia, g as getFileExtension, q as resolveTelegramAccount, r as markdownToIR, s as resolveMarkdownTableMode, t as loadWebMedia, v as normalizeMimeType, w as readConfigFileSnapshotForWrite, y as mediaKindFromMime } from "./media-CmiNXiOZ.js";
|
|
3
|
+
import { n as normalizeTelegramLookupTarget, r as parseTelegramTarget, t as normalizeTelegramChatId } from "./targets-3hewwPvM.js";
|
|
4
|
+
import { t as resolveFetch } from "./fetch-oku6r8tJ.js";
|
|
5
|
+
import "./retry-BzWBtFpP.js";
|
|
6
|
+
import { a as formatErrorMessage, i as extractErrorCode, o as formatUncaughtError, r as createTelegramRetryRunner, s as redactSensitiveText, t as recordChannelActivity } from "./channel-activity-daCpxHdT.js";
|
|
7
|
+
import { t as renderMarkdownWithMarkers } from "./render-6ahYfPwj.js";
|
|
8
|
+
import fs from "node:fs/promises";
|
|
9
|
+
import os from "node:os";
|
|
10
|
+
import path from "node:path";
|
|
11
|
+
import fsSync, { readFileSync } from "node:fs";
|
|
12
|
+
import JSON5 from "json5";
|
|
13
|
+
import crypto from "node:crypto";
|
|
14
|
+
import * as dns from "node:dns";
|
|
15
|
+
import { Agent, ProxyAgent, fetch, setGlobalDispatcher } from "undici";
|
|
16
|
+
import * as net from "node:net";
|
|
17
|
+
import process$1 from "node:process";
|
|
18
|
+
import { Bot, HttpError, InputFile } from "grammy";
|
|
19
|
+
|
|
20
|
+
//#region src/pairing/pairing-store.ts
|
|
21
|
+
const PAIRING_PENDING_TTL_MS = 3600 * 1e3;
|
|
22
|
+
|
|
23
|
+
//#endregion
|
|
24
|
+
//#region src/media/audio.ts
|
|
25
|
+
const TELEGRAM_VOICE_AUDIO_EXTENSIONS = new Set([
|
|
26
|
+
".oga",
|
|
27
|
+
".ogg",
|
|
28
|
+
".opus",
|
|
29
|
+
".mp3",
|
|
30
|
+
".m4a"
|
|
31
|
+
]);
|
|
32
|
+
/**
|
|
33
|
+
* MIME types compatible with voice messages.
|
|
34
|
+
* Telegram sendVoice supports OGG/Opus, MP3, and M4A.
|
|
35
|
+
* https://core.telegram.org/bots/api#sendvoice
|
|
36
|
+
*/
|
|
37
|
+
const TELEGRAM_VOICE_MIME_TYPES = new Set([
|
|
38
|
+
"audio/ogg",
|
|
39
|
+
"audio/opus",
|
|
40
|
+
"audio/mpeg",
|
|
41
|
+
"audio/mp3",
|
|
42
|
+
"audio/mp4",
|
|
43
|
+
"audio/x-m4a",
|
|
44
|
+
"audio/m4a"
|
|
45
|
+
]);
|
|
46
|
+
function isTelegramVoiceCompatibleAudio(opts) {
|
|
47
|
+
const mime = normalizeMimeType(opts.contentType);
|
|
48
|
+
if (mime && TELEGRAM_VOICE_MIME_TYPES.has(mime)) return true;
|
|
49
|
+
const fileName = opts.fileName?.trim();
|
|
50
|
+
if (!fileName) return false;
|
|
51
|
+
const ext = getFileExtension(fileName);
|
|
52
|
+
if (!ext) return false;
|
|
53
|
+
return TELEGRAM_VOICE_AUDIO_EXTENSIONS.has(ext);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
//#endregion
|
|
57
|
+
//#region src/infra/diagnostic-flags.ts
|
|
58
|
+
const DIAGNOSTICS_ENV = "REMOTECLAW_DIAGNOSTICS";
|
|
59
|
+
function normalizeFlag(value) {
|
|
60
|
+
return value.trim().toLowerCase();
|
|
61
|
+
}
|
|
62
|
+
function parseEnvFlags(raw) {
|
|
63
|
+
if (!raw) return [];
|
|
64
|
+
const trimmed = raw.trim();
|
|
65
|
+
if (!trimmed) return [];
|
|
66
|
+
const lowered = trimmed.toLowerCase();
|
|
67
|
+
if ([
|
|
68
|
+
"0",
|
|
69
|
+
"false",
|
|
70
|
+
"off",
|
|
71
|
+
"none"
|
|
72
|
+
].includes(lowered)) return [];
|
|
73
|
+
if ([
|
|
74
|
+
"1",
|
|
75
|
+
"true",
|
|
76
|
+
"all",
|
|
77
|
+
"*"
|
|
78
|
+
].includes(lowered)) return ["*"];
|
|
79
|
+
return trimmed.split(/[,\s]+/).map(normalizeFlag).filter(Boolean);
|
|
80
|
+
}
|
|
81
|
+
function uniqueFlags(flags) {
|
|
82
|
+
const seen = /* @__PURE__ */ new Set();
|
|
83
|
+
const out = [];
|
|
84
|
+
for (const flag of flags) {
|
|
85
|
+
const normalized = normalizeFlag(flag);
|
|
86
|
+
if (!normalized || seen.has(normalized)) continue;
|
|
87
|
+
seen.add(normalized);
|
|
88
|
+
out.push(normalized);
|
|
89
|
+
}
|
|
90
|
+
return out;
|
|
91
|
+
}
|
|
92
|
+
function resolveDiagnosticFlags(cfg, env = process.env) {
|
|
93
|
+
const configFlags = Array.isArray(cfg?.diagnostics?.flags) ? cfg?.diagnostics?.flags : [];
|
|
94
|
+
const envFlags = parseEnvFlags(env[DIAGNOSTICS_ENV]);
|
|
95
|
+
return uniqueFlags([...configFlags, ...envFlags]);
|
|
96
|
+
}
|
|
97
|
+
function matchesDiagnosticFlag(flag, enabledFlags) {
|
|
98
|
+
const target = normalizeFlag(flag);
|
|
99
|
+
if (!target) return false;
|
|
100
|
+
for (const raw of enabledFlags) {
|
|
101
|
+
const enabled = normalizeFlag(raw);
|
|
102
|
+
if (!enabled) continue;
|
|
103
|
+
if (enabled === "*" || enabled === "all") return true;
|
|
104
|
+
if (enabled.endsWith(".*")) {
|
|
105
|
+
const prefix = enabled.slice(0, -2);
|
|
106
|
+
if (target === prefix || target.startsWith(`${prefix}.`)) return true;
|
|
107
|
+
}
|
|
108
|
+
if (enabled.endsWith("*")) {
|
|
109
|
+
const prefix = enabled.slice(0, -1);
|
|
110
|
+
if (target.startsWith(prefix)) return true;
|
|
111
|
+
}
|
|
112
|
+
if (enabled === target) return true;
|
|
113
|
+
}
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
function isDiagnosticFlagEnabled(flag, cfg, env = process.env) {
|
|
117
|
+
return matchesDiagnosticFlag(flag, resolveDiagnosticFlags(cfg, env));
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
//#endregion
|
|
121
|
+
//#region src/telegram/api-logging.ts
|
|
122
|
+
const fallbackLogger = createSubsystemLogger("telegram/api");
|
|
123
|
+
function resolveTelegramApiLogger(runtime, logger) {
|
|
124
|
+
if (logger) return logger;
|
|
125
|
+
if (runtime?.error) return runtime.error;
|
|
126
|
+
return (message) => fallbackLogger.error(message);
|
|
127
|
+
}
|
|
128
|
+
async function withTelegramApiErrorLogging({ operation, fn, runtime, logger, shouldLog }) {
|
|
129
|
+
try {
|
|
130
|
+
return await fn();
|
|
131
|
+
} catch (err) {
|
|
132
|
+
if (!shouldLog || shouldLog(err)) {
|
|
133
|
+
const errText = formatErrorMessage(err);
|
|
134
|
+
resolveTelegramApiLogger(runtime, logger)(danger(`telegram ${operation} failed: ${errText}`));
|
|
135
|
+
}
|
|
136
|
+
throw err;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
//#endregion
|
|
141
|
+
//#region src/telegram/bot-access.ts
|
|
142
|
+
const log$1 = createSubsystemLogger("telegram/bot-access");
|
|
143
|
+
|
|
144
|
+
//#endregion
|
|
145
|
+
//#region src/telegram/bot/helpers.ts
|
|
146
|
+
const TELEGRAM_GENERAL_TOPIC_ID = 1;
|
|
147
|
+
/**
|
|
148
|
+
* Build thread params for Telegram API calls (messages, media).
|
|
149
|
+
*
|
|
150
|
+
* IMPORTANT: Thread IDs behave differently based on chat type:
|
|
151
|
+
* - DMs (private chats): Include message_thread_id when present (DM topics)
|
|
152
|
+
* - Forum topics: Skip thread_id=1 (General topic), include others
|
|
153
|
+
* - Regular groups: Thread IDs are ignored by Telegram
|
|
154
|
+
*
|
|
155
|
+
* General forum topic (id=1) must be treated like a regular supergroup send:
|
|
156
|
+
* Telegram rejects sendMessage/sendMedia with message_thread_id=1 ("thread not found").
|
|
157
|
+
*
|
|
158
|
+
* @param thread - Thread specification with ID and scope
|
|
159
|
+
* @returns API params object or undefined if thread_id should be omitted
|
|
160
|
+
*/
|
|
161
|
+
function buildTelegramThreadParams(thread) {
|
|
162
|
+
if (thread?.id == null) return;
|
|
163
|
+
const normalized = Math.trunc(thread.id);
|
|
164
|
+
if (thread.scope === "dm") return normalized > 0 ? { message_thread_id: normalized } : void 0;
|
|
165
|
+
if (normalized === TELEGRAM_GENERAL_TOPIC_ID) return;
|
|
166
|
+
return { message_thread_id: normalized };
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
//#endregion
|
|
170
|
+
//#region src/telegram/caption.ts
|
|
171
|
+
const TELEGRAM_MAX_CAPTION_LENGTH = 1024;
|
|
172
|
+
function splitTelegramCaption(text) {
|
|
173
|
+
const trimmed = text?.trim() ?? "";
|
|
174
|
+
if (!trimmed) return {
|
|
175
|
+
caption: void 0,
|
|
176
|
+
followUpText: void 0
|
|
177
|
+
};
|
|
178
|
+
if (trimmed.length > TELEGRAM_MAX_CAPTION_LENGTH) return {
|
|
179
|
+
caption: void 0,
|
|
180
|
+
followUpText: trimmed
|
|
181
|
+
};
|
|
182
|
+
return {
|
|
183
|
+
caption: trimmed,
|
|
184
|
+
followUpText: void 0
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
//#endregion
|
|
189
|
+
//#region src/infra/wsl.ts
|
|
190
|
+
function isWSLEnv() {
|
|
191
|
+
if (process.env.WSL_INTEROP || process.env.WSL_DISTRO_NAME || process.env.WSLENV) return true;
|
|
192
|
+
return false;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Synchronously check if running in WSL.
|
|
196
|
+
* Checks env vars first, then /proc/version.
|
|
197
|
+
*/
|
|
198
|
+
function isWSLSync() {
|
|
199
|
+
if (process.platform !== "linux") return false;
|
|
200
|
+
if (isWSLEnv()) return true;
|
|
201
|
+
try {
|
|
202
|
+
const release = readFileSync("/proc/version", "utf8").toLowerCase();
|
|
203
|
+
return release.includes("microsoft") || release.includes("wsl");
|
|
204
|
+
} catch {
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Synchronously check if running in WSL2.
|
|
210
|
+
*/
|
|
211
|
+
function isWSL2Sync() {
|
|
212
|
+
if (!isWSLSync()) return false;
|
|
213
|
+
try {
|
|
214
|
+
const version = readFileSync("/proc/version", "utf8").toLowerCase();
|
|
215
|
+
return version.includes("wsl2") || version.includes("microsoft-standard");
|
|
216
|
+
} catch {
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
//#endregion
|
|
222
|
+
//#region src/telegram/network-config.ts
|
|
223
|
+
const TELEGRAM_DISABLE_AUTO_SELECT_FAMILY_ENV = "REMOTECLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY";
|
|
224
|
+
const TELEGRAM_ENABLE_AUTO_SELECT_FAMILY_ENV = "REMOTECLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY";
|
|
225
|
+
const TELEGRAM_DNS_RESULT_ORDER_ENV = "REMOTECLAW_TELEGRAM_DNS_RESULT_ORDER";
|
|
226
|
+
let wsl2SyncCache;
|
|
227
|
+
function isWSL2SyncCached() {
|
|
228
|
+
if (typeof wsl2SyncCache === "boolean") return wsl2SyncCache;
|
|
229
|
+
wsl2SyncCache = isWSL2Sync();
|
|
230
|
+
return wsl2SyncCache;
|
|
231
|
+
}
|
|
232
|
+
function resolveTelegramAutoSelectFamilyDecision(params) {
|
|
233
|
+
const env = params?.env ?? process$1.env;
|
|
234
|
+
const nodeMajor = typeof params?.nodeMajor === "number" ? params.nodeMajor : Number(process$1.versions.node.split(".")[0]);
|
|
235
|
+
if (isTruthyEnvValue(env[TELEGRAM_ENABLE_AUTO_SELECT_FAMILY_ENV])) return {
|
|
236
|
+
value: true,
|
|
237
|
+
source: `env:${TELEGRAM_ENABLE_AUTO_SELECT_FAMILY_ENV}`
|
|
238
|
+
};
|
|
239
|
+
if (isTruthyEnvValue(env[TELEGRAM_DISABLE_AUTO_SELECT_FAMILY_ENV])) return {
|
|
240
|
+
value: false,
|
|
241
|
+
source: `env:${TELEGRAM_DISABLE_AUTO_SELECT_FAMILY_ENV}`
|
|
242
|
+
};
|
|
243
|
+
if (typeof params?.network?.autoSelectFamily === "boolean") return {
|
|
244
|
+
value: params.network.autoSelectFamily,
|
|
245
|
+
source: "config"
|
|
246
|
+
};
|
|
247
|
+
if (isWSL2SyncCached()) return {
|
|
248
|
+
value: false,
|
|
249
|
+
source: "default-wsl2"
|
|
250
|
+
};
|
|
251
|
+
if (Number.isFinite(nodeMajor) && nodeMajor >= 22) return {
|
|
252
|
+
value: true,
|
|
253
|
+
source: "default-node22"
|
|
254
|
+
};
|
|
255
|
+
return { value: null };
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Resolve DNS result order setting for Telegram network requests.
|
|
259
|
+
* Some networks/ISPs have issues with IPv6 causing fetch failures.
|
|
260
|
+
* Setting "ipv4first" prioritizes IPv4 addresses in DNS resolution.
|
|
261
|
+
*
|
|
262
|
+
* Priority:
|
|
263
|
+
* 1. Environment variable REMOTECLAW_TELEGRAM_DNS_RESULT_ORDER
|
|
264
|
+
* 2. Config: channels.telegram.network.dnsResultOrder
|
|
265
|
+
* 3. Default: "ipv4first" on Node 22+ (to work around common IPv6 issues)
|
|
266
|
+
*/
|
|
267
|
+
function resolveTelegramDnsResultOrderDecision(params) {
|
|
268
|
+
const env = params?.env ?? process$1.env;
|
|
269
|
+
const nodeMajor = typeof params?.nodeMajor === "number" ? params.nodeMajor : Number(process$1.versions.node.split(".")[0]);
|
|
270
|
+
const envValue = env[TELEGRAM_DNS_RESULT_ORDER_ENV]?.trim().toLowerCase();
|
|
271
|
+
if (envValue === "ipv4first" || envValue === "verbatim") return {
|
|
272
|
+
value: envValue,
|
|
273
|
+
source: `env:${TELEGRAM_DNS_RESULT_ORDER_ENV}`
|
|
274
|
+
};
|
|
275
|
+
const configValue = (params?.network)?.dnsResultOrder?.trim().toLowerCase();
|
|
276
|
+
if (configValue === "ipv4first" || configValue === "verbatim") return {
|
|
277
|
+
value: configValue,
|
|
278
|
+
source: "config"
|
|
279
|
+
};
|
|
280
|
+
if (Number.isFinite(nodeMajor) && nodeMajor >= 22) return {
|
|
281
|
+
value: "ipv4first",
|
|
282
|
+
source: "default-node22"
|
|
283
|
+
};
|
|
284
|
+
return { value: null };
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
//#endregion
|
|
288
|
+
//#region src/telegram/fetch.ts
|
|
289
|
+
let appliedAutoSelectFamily = null;
|
|
290
|
+
let appliedDnsResultOrder = null;
|
|
291
|
+
let appliedGlobalDispatcherAutoSelectFamily = null;
|
|
292
|
+
const log = createSubsystemLogger("telegram/network");
|
|
293
|
+
function applyTelegramNetworkWorkarounds(network) {
|
|
294
|
+
const autoSelectDecision = resolveTelegramAutoSelectFamilyDecision({ network });
|
|
295
|
+
if (autoSelectDecision.value !== null && autoSelectDecision.value !== appliedAutoSelectFamily) {
|
|
296
|
+
if (typeof net.setDefaultAutoSelectFamily === "function") try {
|
|
297
|
+
net.setDefaultAutoSelectFamily(autoSelectDecision.value);
|
|
298
|
+
appliedAutoSelectFamily = autoSelectDecision.value;
|
|
299
|
+
const label = autoSelectDecision.source ? ` (${autoSelectDecision.source})` : "";
|
|
300
|
+
log.info(`autoSelectFamily=${autoSelectDecision.value}${label}`);
|
|
301
|
+
} catch {}
|
|
302
|
+
}
|
|
303
|
+
if (autoSelectDecision.value !== null && autoSelectDecision.value !== appliedGlobalDispatcherAutoSelectFamily) try {
|
|
304
|
+
setGlobalDispatcher(new Agent({ connect: {
|
|
305
|
+
autoSelectFamily: autoSelectDecision.value,
|
|
306
|
+
autoSelectFamilyAttemptTimeout: 300
|
|
307
|
+
} }));
|
|
308
|
+
appliedGlobalDispatcherAutoSelectFamily = autoSelectDecision.value;
|
|
309
|
+
log.info(`global undici dispatcher autoSelectFamily=${autoSelectDecision.value}`);
|
|
310
|
+
} catch {}
|
|
311
|
+
const dnsDecision = resolveTelegramDnsResultOrderDecision({ network });
|
|
312
|
+
if (dnsDecision.value !== null && dnsDecision.value !== appliedDnsResultOrder) {
|
|
313
|
+
if (typeof dns.setDefaultResultOrder === "function") try {
|
|
314
|
+
dns.setDefaultResultOrder(dnsDecision.value);
|
|
315
|
+
appliedDnsResultOrder = dnsDecision.value;
|
|
316
|
+
const label = dnsDecision.source ? ` (${dnsDecision.source})` : "";
|
|
317
|
+
log.info(`dnsResultOrder=${dnsDecision.value}${label}`);
|
|
318
|
+
} catch {}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
function resolveTelegramFetch(proxyFetch, options) {
|
|
322
|
+
applyTelegramNetworkWorkarounds(options?.network);
|
|
323
|
+
if (proxyFetch) return resolveFetch(proxyFetch);
|
|
324
|
+
const fetchImpl = resolveFetch();
|
|
325
|
+
if (!fetchImpl) throw new Error("fetch is not available; set channels.telegram.proxy in config");
|
|
326
|
+
return fetchImpl;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
//#endregion
|
|
330
|
+
//#region src/telegram/format.ts
|
|
331
|
+
function escapeHtml(text) {
|
|
332
|
+
return text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
333
|
+
}
|
|
334
|
+
function escapeHtmlAttr(text) {
|
|
335
|
+
return escapeHtml(text).replace(/"/g, """);
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* File extensions that share TLDs and commonly appear in code/documentation.
|
|
339
|
+
* These are wrapped in <code> tags to prevent Telegram from generating
|
|
340
|
+
* spurious domain registrar previews.
|
|
341
|
+
*
|
|
342
|
+
* Only includes extensions that are:
|
|
343
|
+
* 1. Commonly used as file extensions in code/docs
|
|
344
|
+
* 2. Rarely used as intentional domain references
|
|
345
|
+
*
|
|
346
|
+
* Excluded: .ai, .io, .tv, .fm (popular domain TLDs like x.ai, vercel.io, github.io)
|
|
347
|
+
*/
|
|
348
|
+
const FILE_EXTENSIONS_WITH_TLD = new Set([
|
|
349
|
+
"md",
|
|
350
|
+
"go",
|
|
351
|
+
"py",
|
|
352
|
+
"pl",
|
|
353
|
+
"sh",
|
|
354
|
+
"am",
|
|
355
|
+
"at",
|
|
356
|
+
"be",
|
|
357
|
+
"cc"
|
|
358
|
+
]);
|
|
359
|
+
/** Detects when markdown-it linkify auto-generated a link from a bare filename (e.g. README.md → http://README.md) */
|
|
360
|
+
function isAutoLinkedFileRef(href, label) {
|
|
361
|
+
if (href.replace(/^https?:\/\//i, "") !== label) return false;
|
|
362
|
+
const dotIndex = label.lastIndexOf(".");
|
|
363
|
+
if (dotIndex < 1) return false;
|
|
364
|
+
const ext = label.slice(dotIndex + 1).toLowerCase();
|
|
365
|
+
if (!FILE_EXTENSIONS_WITH_TLD.has(ext)) return false;
|
|
366
|
+
const segments = label.split("/");
|
|
367
|
+
if (segments.length > 1) {
|
|
368
|
+
for (let i = 0; i < segments.length - 1; i++) if (segments[i].includes(".")) return false;
|
|
369
|
+
}
|
|
370
|
+
return true;
|
|
371
|
+
}
|
|
372
|
+
function buildTelegramLink(link, text) {
|
|
373
|
+
const href = link.href.trim();
|
|
374
|
+
if (!href) return null;
|
|
375
|
+
if (link.start === link.end) return null;
|
|
376
|
+
if (isAutoLinkedFileRef(href, text.slice(link.start, link.end))) return null;
|
|
377
|
+
const safeHref = escapeHtmlAttr(href);
|
|
378
|
+
return {
|
|
379
|
+
start: link.start,
|
|
380
|
+
end: link.end,
|
|
381
|
+
open: `<a href="${safeHref}">`,
|
|
382
|
+
close: "</a>"
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
function renderTelegramHtml(ir) {
|
|
386
|
+
return renderMarkdownWithMarkers(ir, {
|
|
387
|
+
styleMarkers: {
|
|
388
|
+
bold: {
|
|
389
|
+
open: "<b>",
|
|
390
|
+
close: "</b>"
|
|
391
|
+
},
|
|
392
|
+
italic: {
|
|
393
|
+
open: "<i>",
|
|
394
|
+
close: "</i>"
|
|
395
|
+
},
|
|
396
|
+
strikethrough: {
|
|
397
|
+
open: "<s>",
|
|
398
|
+
close: "</s>"
|
|
399
|
+
},
|
|
400
|
+
code: {
|
|
401
|
+
open: "<code>",
|
|
402
|
+
close: "</code>"
|
|
403
|
+
},
|
|
404
|
+
code_block: {
|
|
405
|
+
open: "<pre><code>",
|
|
406
|
+
close: "</code></pre>"
|
|
407
|
+
},
|
|
408
|
+
spoiler: {
|
|
409
|
+
open: "<tg-spoiler>",
|
|
410
|
+
close: "</tg-spoiler>"
|
|
411
|
+
},
|
|
412
|
+
blockquote: {
|
|
413
|
+
open: "<blockquote>",
|
|
414
|
+
close: "</blockquote>"
|
|
415
|
+
}
|
|
416
|
+
},
|
|
417
|
+
escapeText: escapeHtml,
|
|
418
|
+
buildLink: buildTelegramLink
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
function markdownToTelegramHtml(markdown, options = {}) {
|
|
422
|
+
const html = renderTelegramHtml(markdownToIR(markdown ?? "", {
|
|
423
|
+
linkify: true,
|
|
424
|
+
enableSpoilers: true,
|
|
425
|
+
headingStyle: "none",
|
|
426
|
+
blockquotePrefix: "",
|
|
427
|
+
tableMode: options.tableMode
|
|
428
|
+
}));
|
|
429
|
+
if (options.wrapFileRefs !== false) return wrapFileReferencesInHtml(html);
|
|
430
|
+
return html;
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Wraps standalone file references (with TLD extensions) in <code> tags.
|
|
434
|
+
* This prevents Telegram from treating them as URLs and generating
|
|
435
|
+
* irrelevant domain registrar previews.
|
|
436
|
+
*
|
|
437
|
+
* Runs AFTER markdown→HTML conversion to avoid modifying HTML attributes.
|
|
438
|
+
* Skips content inside <code>, <pre>, and <a> tags to avoid nesting issues.
|
|
439
|
+
*/
|
|
440
|
+
/** Escape regex metacharacters in a string */
|
|
441
|
+
function escapeRegex(str) {
|
|
442
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
443
|
+
}
|
|
444
|
+
const FILE_EXTENSIONS_PATTERN = Array.from(FILE_EXTENSIONS_WITH_TLD).map(escapeRegex).join("|");
|
|
445
|
+
const AUTO_LINKED_ANCHOR_PATTERN = /<a\s+href="https?:\/\/([^"]+)"[^>]*>\1<\/a>/gi;
|
|
446
|
+
const FILE_REFERENCE_PATTERN = new RegExp(`(^|[^a-zA-Z0-9_\\-/])([a-zA-Z0-9_.\\-./]+\\.(?:${FILE_EXTENSIONS_PATTERN}))(?=$|[^a-zA-Z0-9_\\-/])`, "gi");
|
|
447
|
+
const ORPHANED_TLD_PATTERN = new RegExp(`([^a-zA-Z0-9]|^)([A-Za-z]\\.(?:${FILE_EXTENSIONS_PATTERN}))(?=[^a-zA-Z0-9/]|$)`, "g");
|
|
448
|
+
const HTML_TAG_PATTERN = /(<\/?)([a-zA-Z][a-zA-Z0-9-]*)\b[^>]*?>/gi;
|
|
449
|
+
function wrapStandaloneFileRef(match, prefix, filename) {
|
|
450
|
+
if (filename.startsWith("//")) return match;
|
|
451
|
+
if (/https?:\/\/$/i.test(prefix)) return match;
|
|
452
|
+
return `${prefix}<code>${escapeHtml(filename)}</code>`;
|
|
453
|
+
}
|
|
454
|
+
function wrapSegmentFileRefs(text, codeDepth, preDepth, anchorDepth) {
|
|
455
|
+
if (!text || codeDepth > 0 || preDepth > 0 || anchorDepth > 0) return text;
|
|
456
|
+
return text.replace(FILE_REFERENCE_PATTERN, wrapStandaloneFileRef).replace(ORPHANED_TLD_PATTERN, (match, prefix, tld) => prefix === ">" ? match : `${prefix}<code>${escapeHtml(tld)}</code>`);
|
|
457
|
+
}
|
|
458
|
+
function wrapFileReferencesInHtml(html) {
|
|
459
|
+
AUTO_LINKED_ANCHOR_PATTERN.lastIndex = 0;
|
|
460
|
+
const deLinkified = html.replace(AUTO_LINKED_ANCHOR_PATTERN, (_match, label) => {
|
|
461
|
+
if (!isAutoLinkedFileRef(`http://${label}`, label)) return _match;
|
|
462
|
+
return `<code>${escapeHtml(label)}</code>`;
|
|
463
|
+
});
|
|
464
|
+
let codeDepth = 0;
|
|
465
|
+
let preDepth = 0;
|
|
466
|
+
let anchorDepth = 0;
|
|
467
|
+
let result = "";
|
|
468
|
+
let lastIndex = 0;
|
|
469
|
+
HTML_TAG_PATTERN.lastIndex = 0;
|
|
470
|
+
let match;
|
|
471
|
+
while ((match = HTML_TAG_PATTERN.exec(deLinkified)) !== null) {
|
|
472
|
+
const tagStart = match.index;
|
|
473
|
+
const tagEnd = HTML_TAG_PATTERN.lastIndex;
|
|
474
|
+
const isClosing = match[1] === "</";
|
|
475
|
+
const tagName = match[2].toLowerCase();
|
|
476
|
+
const textBefore = deLinkified.slice(lastIndex, tagStart);
|
|
477
|
+
result += wrapSegmentFileRefs(textBefore, codeDepth, preDepth, anchorDepth);
|
|
478
|
+
if (tagName === "code") codeDepth = isClosing ? Math.max(0, codeDepth - 1) : codeDepth + 1;
|
|
479
|
+
else if (tagName === "pre") preDepth = isClosing ? Math.max(0, preDepth - 1) : preDepth + 1;
|
|
480
|
+
else if (tagName === "a") anchorDepth = isClosing ? Math.max(0, anchorDepth - 1) : anchorDepth + 1;
|
|
481
|
+
result += deLinkified.slice(tagStart, tagEnd);
|
|
482
|
+
lastIndex = tagEnd;
|
|
483
|
+
}
|
|
484
|
+
const remainingText = deLinkified.slice(lastIndex);
|
|
485
|
+
result += wrapSegmentFileRefs(remainingText, codeDepth, preDepth, anchorDepth);
|
|
486
|
+
return result;
|
|
487
|
+
}
|
|
488
|
+
function renderTelegramHtmlText(text, options = {}) {
|
|
489
|
+
if ((options.textMode ?? "markdown") === "html") return text;
|
|
490
|
+
return markdownToTelegramHtml(text, { tableMode: options.tableMode });
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
//#endregion
|
|
494
|
+
//#region src/telegram/network-errors.ts
|
|
495
|
+
const RECOVERABLE_ERROR_CODES = new Set([
|
|
496
|
+
"ECONNRESET",
|
|
497
|
+
"ECONNREFUSED",
|
|
498
|
+
"EPIPE",
|
|
499
|
+
"ETIMEDOUT",
|
|
500
|
+
"ESOCKETTIMEDOUT",
|
|
501
|
+
"ENETUNREACH",
|
|
502
|
+
"EHOSTUNREACH",
|
|
503
|
+
"ENOTFOUND",
|
|
504
|
+
"EAI_AGAIN",
|
|
505
|
+
"UND_ERR_CONNECT_TIMEOUT",
|
|
506
|
+
"UND_ERR_HEADERS_TIMEOUT",
|
|
507
|
+
"UND_ERR_BODY_TIMEOUT",
|
|
508
|
+
"UND_ERR_SOCKET",
|
|
509
|
+
"UND_ERR_ABORTED",
|
|
510
|
+
"ECONNABORTED",
|
|
511
|
+
"ERR_NETWORK"
|
|
512
|
+
]);
|
|
513
|
+
const RECOVERABLE_ERROR_NAMES = new Set([
|
|
514
|
+
"AbortError",
|
|
515
|
+
"TimeoutError",
|
|
516
|
+
"ConnectTimeoutError",
|
|
517
|
+
"HeadersTimeoutError",
|
|
518
|
+
"BodyTimeoutError"
|
|
519
|
+
]);
|
|
520
|
+
const ALWAYS_RECOVERABLE_MESSAGES = new Set(["fetch failed", "typeerror: fetch failed"]);
|
|
521
|
+
const RECOVERABLE_MESSAGE_SNIPPETS = [
|
|
522
|
+
"undici",
|
|
523
|
+
"network error",
|
|
524
|
+
"network request",
|
|
525
|
+
"client network socket disconnected",
|
|
526
|
+
"socket hang up",
|
|
527
|
+
"getaddrinfo",
|
|
528
|
+
"timeout",
|
|
529
|
+
"timed out"
|
|
530
|
+
];
|
|
531
|
+
function normalizeCode(code) {
|
|
532
|
+
return code?.trim().toUpperCase() ?? "";
|
|
533
|
+
}
|
|
534
|
+
function getErrorName(err) {
|
|
535
|
+
if (!err || typeof err !== "object") return "";
|
|
536
|
+
return "name" in err ? String(err.name) : "";
|
|
537
|
+
}
|
|
538
|
+
function getErrorCode(err) {
|
|
539
|
+
const direct = extractErrorCode(err);
|
|
540
|
+
if (direct) return direct;
|
|
541
|
+
if (!err || typeof err !== "object") return;
|
|
542
|
+
const errno = err.errno;
|
|
543
|
+
if (typeof errno === "string") return errno;
|
|
544
|
+
if (typeof errno === "number") return String(errno);
|
|
545
|
+
}
|
|
546
|
+
function collectErrorCandidates(err) {
|
|
547
|
+
const queue = [err];
|
|
548
|
+
const seen = /* @__PURE__ */ new Set();
|
|
549
|
+
const candidates = [];
|
|
550
|
+
while (queue.length > 0) {
|
|
551
|
+
const current = queue.shift();
|
|
552
|
+
if (current == null || seen.has(current)) continue;
|
|
553
|
+
seen.add(current);
|
|
554
|
+
candidates.push(current);
|
|
555
|
+
if (typeof current === "object") {
|
|
556
|
+
const cause = current.cause;
|
|
557
|
+
if (cause && !seen.has(cause)) queue.push(cause);
|
|
558
|
+
const reason = current.reason;
|
|
559
|
+
if (reason && !seen.has(reason)) queue.push(reason);
|
|
560
|
+
const errors = current.errors;
|
|
561
|
+
if (Array.isArray(errors)) {
|
|
562
|
+
for (const nested of errors) if (nested && !seen.has(nested)) queue.push(nested);
|
|
563
|
+
}
|
|
564
|
+
if (getErrorName(current) === "HttpError") {
|
|
565
|
+
const wrappedError = current.error;
|
|
566
|
+
if (wrappedError && !seen.has(wrappedError)) queue.push(wrappedError);
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
return candidates;
|
|
571
|
+
}
|
|
572
|
+
function isRecoverableTelegramNetworkError(err, options = {}) {
|
|
573
|
+
if (!err) return false;
|
|
574
|
+
const allowMessageMatch = typeof options.allowMessageMatch === "boolean" ? options.allowMessageMatch : options.context !== "send";
|
|
575
|
+
for (const candidate of collectErrorCandidates(err)) {
|
|
576
|
+
const code = normalizeCode(getErrorCode(candidate));
|
|
577
|
+
if (code && RECOVERABLE_ERROR_CODES.has(code)) return true;
|
|
578
|
+
const name = getErrorName(candidate);
|
|
579
|
+
if (name && RECOVERABLE_ERROR_NAMES.has(name)) return true;
|
|
580
|
+
const message = formatErrorMessage(candidate).trim().toLowerCase();
|
|
581
|
+
if (message && ALWAYS_RECOVERABLE_MESSAGES.has(message)) return true;
|
|
582
|
+
if (allowMessageMatch && message) {
|
|
583
|
+
if (RECOVERABLE_MESSAGE_SNIPPETS.some((snippet) => message.includes(snippet))) return true;
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
return false;
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
//#endregion
|
|
590
|
+
//#region src/telegram/proxy.ts
|
|
591
|
+
function makeProxyFetch(proxyUrl) {
|
|
592
|
+
const agent = new ProxyAgent(proxyUrl);
|
|
593
|
+
const fetcher = ((input, init) => fetch(input, {
|
|
594
|
+
...init,
|
|
595
|
+
dispatcher: agent
|
|
596
|
+
}));
|
|
597
|
+
return fetcher;
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
//#endregion
|
|
601
|
+
//#region src/telegram/sent-message-cache.ts
|
|
602
|
+
/**
|
|
603
|
+
* In-memory cache of sent message IDs per chat.
|
|
604
|
+
* Used to identify bot's own messages for reaction filtering ("own" mode).
|
|
605
|
+
*/
|
|
606
|
+
const TTL_MS = 1440 * 60 * 1e3;
|
|
607
|
+
const sentMessages = /* @__PURE__ */ new Map();
|
|
608
|
+
function getChatKey(chatId) {
|
|
609
|
+
return String(chatId);
|
|
610
|
+
}
|
|
611
|
+
function cleanupExpired(entry) {
|
|
612
|
+
const now = Date.now();
|
|
613
|
+
for (const [msgId, timestamp] of entry.timestamps) if (now - timestamp > TTL_MS) entry.timestamps.delete(msgId);
|
|
614
|
+
}
|
|
615
|
+
/**
|
|
616
|
+
* Record a message ID as sent by the bot.
|
|
617
|
+
*/
|
|
618
|
+
function recordSentMessage(chatId, messageId) {
|
|
619
|
+
const key = getChatKey(chatId);
|
|
620
|
+
let entry = sentMessages.get(key);
|
|
621
|
+
if (!entry) {
|
|
622
|
+
entry = { timestamps: /* @__PURE__ */ new Map() };
|
|
623
|
+
sentMessages.set(key, entry);
|
|
624
|
+
}
|
|
625
|
+
entry.timestamps.set(messageId, Date.now());
|
|
626
|
+
if (entry.timestamps.size > 100) cleanupExpired(entry);
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
//#endregion
|
|
630
|
+
//#region src/cron/store.ts
|
|
631
|
+
const DEFAULT_CRON_DIR = path.join(CONFIG_DIR, "cron");
|
|
632
|
+
const DEFAULT_CRON_STORE_PATH = path.join(DEFAULT_CRON_DIR, "jobs.json");
|
|
633
|
+
function resolveCronStorePath(storePath) {
|
|
634
|
+
if (storePath?.trim()) {
|
|
635
|
+
const raw = storePath.trim();
|
|
636
|
+
if (raw.startsWith("~")) return path.resolve(expandHomePrefix(raw));
|
|
637
|
+
return path.resolve(raw);
|
|
638
|
+
}
|
|
639
|
+
return DEFAULT_CRON_STORE_PATH;
|
|
640
|
+
}
|
|
641
|
+
async function loadCronStore(storePath) {
|
|
642
|
+
try {
|
|
643
|
+
const raw = await fsSync.promises.readFile(storePath, "utf-8");
|
|
644
|
+
let parsed;
|
|
645
|
+
try {
|
|
646
|
+
parsed = JSON5.parse(raw);
|
|
647
|
+
} catch (err) {
|
|
648
|
+
throw new Error(`Failed to parse cron store at ${storePath}: ${String(err)}`, { cause: err });
|
|
649
|
+
}
|
|
650
|
+
const parsedRecord = parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {};
|
|
651
|
+
return {
|
|
652
|
+
version: 1,
|
|
653
|
+
jobs: (Array.isArray(parsedRecord.jobs) ? parsedRecord.jobs : []).filter(Boolean)
|
|
654
|
+
};
|
|
655
|
+
} catch (err) {
|
|
656
|
+
if (err?.code === "ENOENT") return {
|
|
657
|
+
version: 1,
|
|
658
|
+
jobs: []
|
|
659
|
+
};
|
|
660
|
+
throw err;
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
async function saveCronStore(storePath, store) {
|
|
664
|
+
await fsSync.promises.mkdir(path.dirname(storePath), { recursive: true });
|
|
665
|
+
const { randomBytes } = await import("node:crypto");
|
|
666
|
+
const tmp = `${storePath}.${process.pid}.${randomBytes(8).toString("hex")}.tmp`;
|
|
667
|
+
const json = JSON.stringify(store, null, 2);
|
|
668
|
+
await fsSync.promises.writeFile(tmp, json, "utf-8");
|
|
669
|
+
await fsSync.promises.rename(tmp, storePath);
|
|
670
|
+
try {
|
|
671
|
+
await fsSync.promises.copyFile(storePath, `${storePath}.bak`);
|
|
672
|
+
} catch {}
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
//#endregion
|
|
676
|
+
//#region src/telegram/target-writeback.ts
|
|
677
|
+
const writebackLogger = createSubsystemLogger("telegram/target-writeback");
|
|
678
|
+
function asObjectRecord(value) {
|
|
679
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return null;
|
|
680
|
+
return value;
|
|
681
|
+
}
|
|
682
|
+
function normalizeTelegramLookupTargetForMatch(raw) {
|
|
683
|
+
const normalized = normalizeTelegramLookupTarget(raw);
|
|
684
|
+
if (!normalized) return;
|
|
685
|
+
return normalized.startsWith("@") ? normalized.toLowerCase() : normalized;
|
|
686
|
+
}
|
|
687
|
+
function normalizeTelegramTargetForMatch(raw) {
|
|
688
|
+
const parsed = parseTelegramTarget(raw);
|
|
689
|
+
const normalized = normalizeTelegramLookupTargetForMatch(parsed.chatId);
|
|
690
|
+
if (!normalized) return;
|
|
691
|
+
return `${normalized}|${parsed.messageThreadId == null ? "" : String(parsed.messageThreadId)}`;
|
|
692
|
+
}
|
|
693
|
+
function buildResolvedTelegramTarget(params) {
|
|
694
|
+
const { raw, parsed, resolvedChatId } = params;
|
|
695
|
+
if (parsed.messageThreadId == null) return resolvedChatId;
|
|
696
|
+
return raw.includes(":topic:") ? `${resolvedChatId}:topic:${parsed.messageThreadId}` : `${resolvedChatId}:${parsed.messageThreadId}`;
|
|
697
|
+
}
|
|
698
|
+
function resolveLegacyRewrite(params) {
|
|
699
|
+
const parsed = parseTelegramTarget(params.raw);
|
|
700
|
+
if (normalizeTelegramChatId(parsed.chatId)) return null;
|
|
701
|
+
const normalized = normalizeTelegramLookupTargetForMatch(parsed.chatId);
|
|
702
|
+
if (!normalized) return null;
|
|
703
|
+
return {
|
|
704
|
+
matchKey: `${normalized}|${parsed.messageThreadId == null ? "" : String(parsed.messageThreadId)}`,
|
|
705
|
+
resolvedTarget: buildResolvedTelegramTarget({
|
|
706
|
+
raw: params.raw,
|
|
707
|
+
parsed,
|
|
708
|
+
resolvedChatId: params.resolvedChatId
|
|
709
|
+
})
|
|
710
|
+
};
|
|
711
|
+
}
|
|
712
|
+
function rewriteTargetIfMatch(params) {
|
|
713
|
+
if (typeof params.rawValue !== "string" && typeof params.rawValue !== "number") return null;
|
|
714
|
+
const value = String(params.rawValue).trim();
|
|
715
|
+
if (!value) return null;
|
|
716
|
+
if (normalizeTelegramTargetForMatch(value) !== params.matchKey) return null;
|
|
717
|
+
return params.resolvedTarget;
|
|
718
|
+
}
|
|
719
|
+
function replaceTelegramDefaultToTargets(params) {
|
|
720
|
+
let changed = false;
|
|
721
|
+
const telegram = asObjectRecord(params.cfg.channels?.telegram);
|
|
722
|
+
if (!telegram) return changed;
|
|
723
|
+
const maybeReplace = (holder, key) => {
|
|
724
|
+
const nextTarget = rewriteTargetIfMatch({
|
|
725
|
+
rawValue: holder[key],
|
|
726
|
+
matchKey: params.matchKey,
|
|
727
|
+
resolvedTarget: params.resolvedTarget
|
|
728
|
+
});
|
|
729
|
+
if (!nextTarget) return;
|
|
730
|
+
holder[key] = nextTarget;
|
|
731
|
+
changed = true;
|
|
732
|
+
};
|
|
733
|
+
maybeReplace(telegram, "defaultTo");
|
|
734
|
+
const accounts = asObjectRecord(telegram.accounts);
|
|
735
|
+
if (!accounts) return changed;
|
|
736
|
+
for (const accountId of Object.keys(accounts)) {
|
|
737
|
+
const account = asObjectRecord(accounts[accountId]);
|
|
738
|
+
if (!account) continue;
|
|
739
|
+
maybeReplace(account, "defaultTo");
|
|
740
|
+
}
|
|
741
|
+
return changed;
|
|
742
|
+
}
|
|
743
|
+
async function maybePersistResolvedTelegramTarget(params) {
|
|
744
|
+
const raw = params.rawTarget.trim();
|
|
745
|
+
if (!raw) return;
|
|
746
|
+
const rewrite = resolveLegacyRewrite({
|
|
747
|
+
raw,
|
|
748
|
+
resolvedChatId: params.resolvedChatId
|
|
749
|
+
});
|
|
750
|
+
if (!rewrite) return;
|
|
751
|
+
const { matchKey, resolvedTarget } = rewrite;
|
|
752
|
+
try {
|
|
753
|
+
const { snapshot, writeOptions } = await readConfigFileSnapshotForWrite();
|
|
754
|
+
const nextConfig = structuredClone(snapshot.config ?? {});
|
|
755
|
+
if (replaceTelegramDefaultToTargets({
|
|
756
|
+
cfg: nextConfig,
|
|
757
|
+
matchKey,
|
|
758
|
+
resolvedTarget
|
|
759
|
+
})) {
|
|
760
|
+
await writeConfigFile(nextConfig, writeOptions);
|
|
761
|
+
if (params.verbose) writebackLogger.warn(`resolved Telegram defaultTo target ${raw} -> ${resolvedTarget}`);
|
|
762
|
+
}
|
|
763
|
+
} catch (err) {
|
|
764
|
+
if (params.verbose) writebackLogger.warn(`failed to persist Telegram defaultTo target ${raw}: ${String(err)}`);
|
|
765
|
+
}
|
|
766
|
+
try {
|
|
767
|
+
const storePath = resolveCronStorePath(params.cfg.cron?.store);
|
|
768
|
+
const store = await loadCronStore(storePath);
|
|
769
|
+
let cronChanged = false;
|
|
770
|
+
for (const job of store.jobs) {
|
|
771
|
+
if (job.delivery?.channel !== "telegram") continue;
|
|
772
|
+
const nextTarget = rewriteTargetIfMatch({
|
|
773
|
+
rawValue: job.delivery.to,
|
|
774
|
+
matchKey,
|
|
775
|
+
resolvedTarget
|
|
776
|
+
});
|
|
777
|
+
if (!nextTarget) continue;
|
|
778
|
+
job.delivery.to = nextTarget;
|
|
779
|
+
cronChanged = true;
|
|
780
|
+
}
|
|
781
|
+
if (cronChanged) {
|
|
782
|
+
await saveCronStore(storePath, store);
|
|
783
|
+
if (params.verbose) writebackLogger.warn(`resolved Telegram cron delivery target ${raw} -> ${resolvedTarget}`);
|
|
784
|
+
}
|
|
785
|
+
} catch (err) {
|
|
786
|
+
if (params.verbose) writebackLogger.warn(`failed to persist Telegram cron target ${raw}: ${String(err)}`);
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
//#endregion
|
|
791
|
+
//#region src/telegram/voice.ts
|
|
792
|
+
function resolveTelegramVoiceDecision(opts) {
|
|
793
|
+
if (!opts.wantsVoice) return { useVoice: false };
|
|
794
|
+
if (isTelegramVoiceCompatibleAudio(opts)) return { useVoice: true };
|
|
795
|
+
return {
|
|
796
|
+
useVoice: false,
|
|
797
|
+
reason: `media is ${opts.contentType ?? "unknown"} (${opts.fileName ?? "unknown"})`
|
|
798
|
+
};
|
|
799
|
+
}
|
|
800
|
+
function resolveTelegramVoiceSend(opts) {
|
|
801
|
+
const decision = resolveTelegramVoiceDecision(opts);
|
|
802
|
+
if (decision.reason && opts.logFallback) opts.logFallback(`Telegram voice requested but ${decision.reason}; sending as audio file instead.`);
|
|
803
|
+
return { useVoice: decision.useVoice };
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
//#endregion
|
|
807
|
+
//#region src/telegram/send.ts
|
|
808
|
+
const PARSE_ERR_RE = /can't parse entities|parse entities|find end of the entity/i;
|
|
809
|
+
const THREAD_NOT_FOUND_RE = /400:\s*Bad Request:\s*message thread not found/i;
|
|
810
|
+
const CHAT_NOT_FOUND_RE = /400: Bad Request: chat not found/i;
|
|
811
|
+
const sendLogger = createSubsystemLogger("telegram/send");
|
|
812
|
+
const diagLogger = createSubsystemLogger("telegram/diagnostic");
|
|
813
|
+
function createTelegramHttpLogger(cfg) {
|
|
814
|
+
if (!isDiagnosticFlagEnabled("telegram.http", cfg)) return () => {};
|
|
815
|
+
return (label, err) => {
|
|
816
|
+
if (!(err instanceof HttpError)) return;
|
|
817
|
+
const detail = redactSensitiveText(formatUncaughtError(err.error ?? err));
|
|
818
|
+
diagLogger.warn(`telegram http error (${label}): ${detail}`);
|
|
819
|
+
};
|
|
820
|
+
}
|
|
821
|
+
function resolveTelegramClientOptions(account) {
|
|
822
|
+
const proxyUrl = account.config.proxy?.trim();
|
|
823
|
+
const fetchImpl = resolveTelegramFetch(proxyUrl ? makeProxyFetch(proxyUrl) : void 0, { network: account.config.network });
|
|
824
|
+
const timeoutSeconds = typeof account.config.timeoutSeconds === "number" && Number.isFinite(account.config.timeoutSeconds) ? Math.max(1, Math.floor(account.config.timeoutSeconds)) : void 0;
|
|
825
|
+
return fetchImpl || timeoutSeconds ? {
|
|
826
|
+
...fetchImpl ? { fetch: fetchImpl } : {},
|
|
827
|
+
...timeoutSeconds ? { timeoutSeconds } : {}
|
|
828
|
+
} : void 0;
|
|
829
|
+
}
|
|
830
|
+
function resolveToken(explicit, params) {
|
|
831
|
+
if (explicit?.trim()) return explicit.trim();
|
|
832
|
+
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).`);
|
|
833
|
+
return params.token.trim();
|
|
834
|
+
}
|
|
835
|
+
async function resolveChatId(to, params) {
|
|
836
|
+
const numericChatId = normalizeTelegramChatId(to);
|
|
837
|
+
if (numericChatId) return numericChatId;
|
|
838
|
+
const lookupTarget = normalizeTelegramLookupTarget(to);
|
|
839
|
+
const getChat = params.api.getChat;
|
|
840
|
+
if (!lookupTarget || typeof getChat !== "function") throw new Error("Telegram recipient must be a numeric chat ID");
|
|
841
|
+
try {
|
|
842
|
+
const chat = await getChat.call(params.api, lookupTarget);
|
|
843
|
+
const resolved = normalizeTelegramChatId(String(chat?.id ?? ""));
|
|
844
|
+
if (!resolved) throw new Error(`resolved chat id is not numeric (${String(chat?.id ?? "")})`);
|
|
845
|
+
if (params.verbose) sendLogger.warn(`telegram recipient ${lookupTarget} resolved to numeric chat id ${resolved}`);
|
|
846
|
+
return resolved;
|
|
847
|
+
} catch (err) {
|
|
848
|
+
const detail = formatErrorMessage(err);
|
|
849
|
+
throw new Error(`Telegram recipient ${lookupTarget} could not be resolved to a numeric chat ID (${detail})`, { cause: err });
|
|
850
|
+
}
|
|
851
|
+
}
|
|
852
|
+
async function resolveAndPersistChatId(params) {
|
|
853
|
+
const chatId = await resolveChatId(params.lookupTarget, {
|
|
854
|
+
api: params.api,
|
|
855
|
+
verbose: params.verbose
|
|
856
|
+
});
|
|
857
|
+
await maybePersistResolvedTelegramTarget({
|
|
858
|
+
cfg: params.cfg,
|
|
859
|
+
rawTarget: params.persistTarget,
|
|
860
|
+
resolvedChatId: chatId,
|
|
861
|
+
verbose: params.verbose
|
|
862
|
+
});
|
|
863
|
+
return chatId;
|
|
864
|
+
}
|
|
865
|
+
function isTelegramThreadNotFoundError(err) {
|
|
866
|
+
return THREAD_NOT_FOUND_RE.test(formatErrorMessage(err));
|
|
867
|
+
}
|
|
868
|
+
function hasMessageThreadIdParam(params) {
|
|
869
|
+
if (!params) return false;
|
|
870
|
+
const value = params.message_thread_id;
|
|
871
|
+
if (typeof value === "number") return Number.isFinite(value);
|
|
872
|
+
if (typeof value === "string") return value.trim().length > 0;
|
|
873
|
+
return false;
|
|
874
|
+
}
|
|
875
|
+
function removeMessageThreadIdParam(params) {
|
|
876
|
+
if (!params || !hasMessageThreadIdParam(params)) return params;
|
|
877
|
+
const next = { ...params };
|
|
878
|
+
delete next.message_thread_id;
|
|
879
|
+
return Object.keys(next).length > 0 ? next : void 0;
|
|
880
|
+
}
|
|
881
|
+
function isTelegramHtmlParseError(err) {
|
|
882
|
+
return PARSE_ERR_RE.test(formatErrorMessage(err));
|
|
883
|
+
}
|
|
884
|
+
function buildTelegramThreadReplyParams(params) {
|
|
885
|
+
const messageThreadId = params.messageThreadId != null ? params.messageThreadId : params.targetMessageThreadId;
|
|
886
|
+
const threadScope = params.chatType === "direct" ? "dm" : "forum";
|
|
887
|
+
const threadIdParams = buildTelegramThreadParams(messageThreadId != null ? {
|
|
888
|
+
id: messageThreadId,
|
|
889
|
+
scope: threadScope
|
|
890
|
+
} : void 0);
|
|
891
|
+
const threadParams = threadIdParams ? { ...threadIdParams } : {};
|
|
892
|
+
if (params.replyToMessageId != null) {
|
|
893
|
+
const replyToMessageId = Math.trunc(params.replyToMessageId);
|
|
894
|
+
if (params.quoteText?.trim()) threadParams.reply_parameters = {
|
|
895
|
+
message_id: replyToMessageId,
|
|
896
|
+
quote: params.quoteText.trim()
|
|
897
|
+
};
|
|
898
|
+
else threadParams.reply_to_message_id = replyToMessageId;
|
|
899
|
+
}
|
|
900
|
+
return threadParams;
|
|
901
|
+
}
|
|
902
|
+
async function withTelegramHtmlParseFallback(params) {
|
|
903
|
+
try {
|
|
904
|
+
return await params.requestHtml(params.label);
|
|
905
|
+
} catch (err) {
|
|
906
|
+
if (!isTelegramHtmlParseError(err)) throw err;
|
|
907
|
+
if (params.verbose) sendLogger.warn(`telegram ${params.label} failed with HTML parse error, retrying as plain text: ${formatErrorMessage(err)}`);
|
|
908
|
+
return await params.requestPlain(`${params.label}-plain`);
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
function resolveTelegramApiContext(opts) {
|
|
912
|
+
const cfg = opts.cfg ?? loadConfig();
|
|
913
|
+
const account = resolveTelegramAccount({
|
|
914
|
+
cfg,
|
|
915
|
+
accountId: opts.accountId
|
|
916
|
+
});
|
|
917
|
+
const token = resolveToken(opts.token, account);
|
|
918
|
+
const client = resolveTelegramClientOptions(account);
|
|
919
|
+
return {
|
|
920
|
+
cfg,
|
|
921
|
+
account,
|
|
922
|
+
api: opts.api ?? new Bot(token, client ? { client } : void 0).api
|
|
923
|
+
};
|
|
924
|
+
}
|
|
925
|
+
function createTelegramRequestWithDiag(params) {
|
|
926
|
+
const request = createTelegramRetryRunner({
|
|
927
|
+
retry: params.retry,
|
|
928
|
+
configRetry: params.account.config.retry,
|
|
929
|
+
verbose: params.verbose,
|
|
930
|
+
...params.shouldRetry ? { shouldRetry: params.shouldRetry } : {}
|
|
931
|
+
});
|
|
932
|
+
const logHttpError = createTelegramHttpLogger(params.cfg);
|
|
933
|
+
return (fn, label, options) => {
|
|
934
|
+
const runRequest = () => request(fn, label);
|
|
935
|
+
return (params.useApiErrorLogging === false ? runRequest() : withTelegramApiErrorLogging({
|
|
936
|
+
operation: label ?? "request",
|
|
937
|
+
fn: runRequest,
|
|
938
|
+
...options?.shouldLog ? { shouldLog: options.shouldLog } : {}
|
|
939
|
+
})).catch((err) => {
|
|
940
|
+
logHttpError(label ?? "request", err);
|
|
941
|
+
throw err;
|
|
942
|
+
});
|
|
943
|
+
};
|
|
944
|
+
}
|
|
945
|
+
function wrapTelegramChatNotFoundError(err, params) {
|
|
946
|
+
if (!CHAT_NOT_FOUND_RE.test(formatErrorMessage(err))) return err;
|
|
947
|
+
return new Error([
|
|
948
|
+
`Telegram send failed: chat not found (chat_id=${params.chatId}).`,
|
|
949
|
+
"Likely: bot not started in DM, bot removed from group/channel, group migrated (new -100… id), or wrong bot token.",
|
|
950
|
+
`Input was: ${JSON.stringify(params.input)}.`
|
|
951
|
+
].join(" "));
|
|
952
|
+
}
|
|
953
|
+
async function withTelegramThreadFallback(params, label, verbose, attempt) {
|
|
954
|
+
try {
|
|
955
|
+
return await attempt(params, label);
|
|
956
|
+
} catch (err) {
|
|
957
|
+
if (!hasMessageThreadIdParam(params) || !isTelegramThreadNotFoundError(err)) throw err;
|
|
958
|
+
if (verbose) sendLogger.warn(`telegram ${label} failed with message_thread_id, retrying without thread: ${formatErrorMessage(err)}`);
|
|
959
|
+
return await attempt(removeMessageThreadIdParam(params), `${label}-threadless`);
|
|
960
|
+
}
|
|
961
|
+
}
|
|
962
|
+
function createRequestWithChatNotFound(params) {
|
|
963
|
+
return async (fn, label) => params.requestWithDiag(fn, label).catch((err) => {
|
|
964
|
+
throw wrapTelegramChatNotFoundError(err, {
|
|
965
|
+
chatId: params.chatId,
|
|
966
|
+
input: params.input
|
|
967
|
+
});
|
|
968
|
+
});
|
|
969
|
+
}
|
|
970
|
+
function buildInlineKeyboard(buttons) {
|
|
971
|
+
if (!buttons?.length) return;
|
|
972
|
+
const rows = buttons.map((row) => row.filter((button) => button?.text && button?.callback_data).map((button) => ({
|
|
973
|
+
text: button.text,
|
|
974
|
+
callback_data: button.callback_data,
|
|
975
|
+
...button.style ? { style: button.style } : {}
|
|
976
|
+
}))).filter((row) => row.length > 0);
|
|
977
|
+
if (rows.length === 0) return;
|
|
978
|
+
return { inline_keyboard: rows };
|
|
979
|
+
}
|
|
980
|
+
async function sendMessageTelegram(to, text, opts = {}) {
|
|
981
|
+
const { cfg, account, api } = resolveTelegramApiContext(opts);
|
|
982
|
+
const target = parseTelegramTarget(to);
|
|
983
|
+
const chatId = await resolveAndPersistChatId({
|
|
984
|
+
cfg,
|
|
985
|
+
api,
|
|
986
|
+
lookupTarget: target.chatId,
|
|
987
|
+
persistTarget: to,
|
|
988
|
+
verbose: opts.verbose
|
|
989
|
+
});
|
|
990
|
+
const mediaUrl = opts.mediaUrl?.trim();
|
|
991
|
+
const replyMarkup = buildInlineKeyboard(opts.buttons);
|
|
992
|
+
const threadParams = buildTelegramThreadReplyParams({
|
|
993
|
+
targetMessageThreadId: target.messageThreadId,
|
|
994
|
+
messageThreadId: opts.messageThreadId,
|
|
995
|
+
chatType: target.chatType,
|
|
996
|
+
replyToMessageId: opts.replyToMessageId,
|
|
997
|
+
quoteText: opts.quoteText
|
|
998
|
+
});
|
|
999
|
+
const hasThreadParams = Object.keys(threadParams).length > 0;
|
|
1000
|
+
const requestWithChatNotFound = createRequestWithChatNotFound({
|
|
1001
|
+
requestWithDiag: createTelegramRequestWithDiag({
|
|
1002
|
+
cfg,
|
|
1003
|
+
account,
|
|
1004
|
+
retry: opts.retry,
|
|
1005
|
+
verbose: opts.verbose,
|
|
1006
|
+
shouldRetry: (err) => isRecoverableTelegramNetworkError(err, { context: "send" })
|
|
1007
|
+
}),
|
|
1008
|
+
chatId,
|
|
1009
|
+
input: to
|
|
1010
|
+
});
|
|
1011
|
+
const textMode = opts.textMode ?? "markdown";
|
|
1012
|
+
const tableMode = resolveMarkdownTableMode({
|
|
1013
|
+
cfg,
|
|
1014
|
+
channel: "telegram",
|
|
1015
|
+
accountId: account.accountId
|
|
1016
|
+
});
|
|
1017
|
+
const renderHtmlText = (value) => renderTelegramHtmlText(value, {
|
|
1018
|
+
textMode,
|
|
1019
|
+
tableMode
|
|
1020
|
+
});
|
|
1021
|
+
const linkPreviewOptions = account.config.linkPreview ?? true ? void 0 : { is_disabled: true };
|
|
1022
|
+
const sendTelegramText = async (rawText, params, fallbackText) => {
|
|
1023
|
+
return await withTelegramThreadFallback(params, "message", opts.verbose, async (effectiveParams, label) => {
|
|
1024
|
+
const htmlText = renderHtmlText(rawText);
|
|
1025
|
+
const baseParams = effectiveParams ? { ...effectiveParams } : {};
|
|
1026
|
+
if (linkPreviewOptions) baseParams.link_preview_options = linkPreviewOptions;
|
|
1027
|
+
const hasBaseParams = Object.keys(baseParams).length > 0;
|
|
1028
|
+
const sendParams = {
|
|
1029
|
+
parse_mode: "HTML",
|
|
1030
|
+
...baseParams,
|
|
1031
|
+
...opts.silent === true ? { disable_notification: true } : {}
|
|
1032
|
+
};
|
|
1033
|
+
return await withTelegramHtmlParseFallback({
|
|
1034
|
+
label,
|
|
1035
|
+
verbose: opts.verbose,
|
|
1036
|
+
requestHtml: (retryLabel) => requestWithChatNotFound(() => api.sendMessage(chatId, htmlText, sendParams), retryLabel),
|
|
1037
|
+
requestPlain: (retryLabel) => {
|
|
1038
|
+
const plainParams = hasBaseParams ? baseParams : void 0;
|
|
1039
|
+
return requestWithChatNotFound(() => plainParams ? api.sendMessage(chatId, fallbackText ?? rawText, plainParams) : api.sendMessage(chatId, fallbackText ?? rawText), retryLabel);
|
|
1040
|
+
}
|
|
1041
|
+
});
|
|
1042
|
+
});
|
|
1043
|
+
};
|
|
1044
|
+
if (mediaUrl) {
|
|
1045
|
+
const media = await loadWebMedia(mediaUrl, {
|
|
1046
|
+
maxBytes: opts.maxBytes,
|
|
1047
|
+
localRoots: opts.mediaLocalRoots
|
|
1048
|
+
});
|
|
1049
|
+
const kind = mediaKindFromMime(media.contentType ?? void 0);
|
|
1050
|
+
const isGif = isGifMedia({
|
|
1051
|
+
contentType: media.contentType,
|
|
1052
|
+
fileName: media.fileName
|
|
1053
|
+
});
|
|
1054
|
+
const isVideoNote = kind === "video" && opts.asVideoNote === true;
|
|
1055
|
+
const fileName = media.fileName ?? (isGif ? "animation.gif" : inferFilename(kind)) ?? "file";
|
|
1056
|
+
const file = new InputFile(media.buffer, fileName);
|
|
1057
|
+
let caption;
|
|
1058
|
+
let followUpText;
|
|
1059
|
+
if (isVideoNote) {
|
|
1060
|
+
caption = void 0;
|
|
1061
|
+
followUpText = text.trim() ? text : void 0;
|
|
1062
|
+
} else {
|
|
1063
|
+
const split = splitTelegramCaption(text);
|
|
1064
|
+
caption = split.caption;
|
|
1065
|
+
followUpText = split.followUpText;
|
|
1066
|
+
}
|
|
1067
|
+
const htmlCaption = caption ? renderHtmlText(caption) : void 0;
|
|
1068
|
+
const needsSeparateText = Boolean(followUpText);
|
|
1069
|
+
const baseMediaParams = {
|
|
1070
|
+
...hasThreadParams ? threadParams : {},
|
|
1071
|
+
...!needsSeparateText && replyMarkup ? { reply_markup: replyMarkup } : {}
|
|
1072
|
+
};
|
|
1073
|
+
const mediaParams = {
|
|
1074
|
+
...htmlCaption ? {
|
|
1075
|
+
caption: htmlCaption,
|
|
1076
|
+
parse_mode: "HTML"
|
|
1077
|
+
} : {},
|
|
1078
|
+
...baseMediaParams,
|
|
1079
|
+
...opts.silent === true ? { disable_notification: true } : {}
|
|
1080
|
+
};
|
|
1081
|
+
const sendMedia = async (label, sender) => await withTelegramThreadFallback(mediaParams, label, opts.verbose, async (effectiveParams, retryLabel) => requestWithChatNotFound(() => sender(effectiveParams), retryLabel));
|
|
1082
|
+
const mediaSender = (() => {
|
|
1083
|
+
if (isGif) return {
|
|
1084
|
+
label: "animation",
|
|
1085
|
+
sender: (effectiveParams) => api.sendAnimation(chatId, file, effectiveParams)
|
|
1086
|
+
};
|
|
1087
|
+
if (kind === "image") return {
|
|
1088
|
+
label: "photo",
|
|
1089
|
+
sender: (effectiveParams) => api.sendPhoto(chatId, file, effectiveParams)
|
|
1090
|
+
};
|
|
1091
|
+
if (kind === "video") {
|
|
1092
|
+
if (isVideoNote) return {
|
|
1093
|
+
label: "video_note",
|
|
1094
|
+
sender: (effectiveParams) => api.sendVideoNote(chatId, file, effectiveParams)
|
|
1095
|
+
};
|
|
1096
|
+
return {
|
|
1097
|
+
label: "video",
|
|
1098
|
+
sender: (effectiveParams) => api.sendVideo(chatId, file, effectiveParams)
|
|
1099
|
+
};
|
|
1100
|
+
}
|
|
1101
|
+
if (kind === "audio") {
|
|
1102
|
+
const { useVoice } = resolveTelegramVoiceSend({
|
|
1103
|
+
wantsVoice: opts.asVoice === true,
|
|
1104
|
+
contentType: media.contentType,
|
|
1105
|
+
fileName,
|
|
1106
|
+
logFallback: logVerbose
|
|
1107
|
+
});
|
|
1108
|
+
if (useVoice) return {
|
|
1109
|
+
label: "voice",
|
|
1110
|
+
sender: (effectiveParams) => api.sendVoice(chatId, file, effectiveParams)
|
|
1111
|
+
};
|
|
1112
|
+
return {
|
|
1113
|
+
label: "audio",
|
|
1114
|
+
sender: (effectiveParams) => api.sendAudio(chatId, file, effectiveParams)
|
|
1115
|
+
};
|
|
1116
|
+
}
|
|
1117
|
+
return {
|
|
1118
|
+
label: "document",
|
|
1119
|
+
sender: (effectiveParams) => api.sendDocument(chatId, file, effectiveParams)
|
|
1120
|
+
};
|
|
1121
|
+
})();
|
|
1122
|
+
const result = await sendMedia(mediaSender.label, mediaSender.sender);
|
|
1123
|
+
const mediaMessageId = String(result?.message_id ?? "unknown");
|
|
1124
|
+
const resolvedChatId = String(result?.chat?.id ?? chatId);
|
|
1125
|
+
if (result?.message_id) recordSentMessage(chatId, result.message_id);
|
|
1126
|
+
recordChannelActivity({
|
|
1127
|
+
channel: "telegram",
|
|
1128
|
+
accountId: account.accountId,
|
|
1129
|
+
direction: "outbound"
|
|
1130
|
+
});
|
|
1131
|
+
if (needsSeparateText && followUpText) {
|
|
1132
|
+
const textParams = hasThreadParams || replyMarkup ? {
|
|
1133
|
+
...threadParams,
|
|
1134
|
+
...replyMarkup ? { reply_markup: replyMarkup } : {}
|
|
1135
|
+
} : void 0;
|
|
1136
|
+
const textRes = await sendTelegramText(followUpText, textParams);
|
|
1137
|
+
return {
|
|
1138
|
+
messageId: String(textRes?.message_id ?? mediaMessageId),
|
|
1139
|
+
chatId: resolvedChatId
|
|
1140
|
+
};
|
|
1141
|
+
}
|
|
1142
|
+
return {
|
|
1143
|
+
messageId: mediaMessageId,
|
|
1144
|
+
chatId: resolvedChatId
|
|
1145
|
+
};
|
|
1146
|
+
}
|
|
1147
|
+
if (!text || !text.trim()) throw new Error("Message must be non-empty for Telegram sends");
|
|
1148
|
+
const res = await sendTelegramText(text, hasThreadParams || replyMarkup ? {
|
|
1149
|
+
...threadParams,
|
|
1150
|
+
...replyMarkup ? { reply_markup: replyMarkup } : {}
|
|
1151
|
+
} : void 0, opts.plainText);
|
|
1152
|
+
const messageId = String(res?.message_id ?? "unknown");
|
|
1153
|
+
if (res?.message_id) recordSentMessage(chatId, res.message_id);
|
|
1154
|
+
recordChannelActivity({
|
|
1155
|
+
channel: "telegram",
|
|
1156
|
+
accountId: account.accountId,
|
|
1157
|
+
direction: "outbound"
|
|
1158
|
+
});
|
|
1159
|
+
return {
|
|
1160
|
+
messageId,
|
|
1161
|
+
chatId: String(res?.chat?.id ?? chatId)
|
|
1162
|
+
};
|
|
1163
|
+
}
|
|
1164
|
+
function inferFilename(kind) {
|
|
1165
|
+
switch (kind) {
|
|
1166
|
+
case "image": return "image.jpg";
|
|
1167
|
+
case "video": return "video.mp4";
|
|
1168
|
+
case "audio": return "audio.ogg";
|
|
1169
|
+
default: return "file.bin";
|
|
1170
|
+
}
|
|
1171
|
+
}
|
|
1172
|
+
|
|
1173
|
+
//#endregion
|
|
1174
|
+
export { sendMessageTelegram };
|