remoteclaw 0.1.0-next.da482d8 → 0.1.0-next.db8a792
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/dist/accounts-BZ2kR_Ij.js +47 -0
- package/dist/accounts-Bi4rFQG5.js +272 -0
- package/dist/accounts-Bpk-loA6.js +47 -0
- package/dist/accounts-D1CBpsaa.js +32 -0
- package/dist/accounts-DAdUdbPk.js +36 -0
- package/dist/accounts-WYyfAiie.js +270 -0
- package/dist/accounts-zQKMwnvt.js +36 -0
- package/dist/ack-reactions-B1l-vKPr.js +621 -0
- package/dist/ack-reactions-BnG0DLMu.js +621 -0
- package/dist/acp-cli-Btx71t69.js +1319 -0
- package/dist/acp-cli-DVQMjl0p.js +1324 -0
- package/dist/active-listener-BfN4RKlA.js +37 -0
- package/dist/active-listener-Bq7ckjOV.js +37 -0
- package/dist/agent-D2IwuL6g.js +688 -0
- package/dist/agent-WaE2mXI1.js +687 -0
- package/dist/agent-helpers-BcaiJFiG.js +400 -0
- package/dist/agent-scope-DVvX_nkQ.js +116 -0
- package/dist/agents-BwnT7jca.js +760 -0
- package/dist/agents.config-Dorm30BQ.js +116 -0
- package/dist/audio-B1lTyRqS.js +43 -0
- package/dist/audio-e0dFnrn8.js +43 -0
- package/dist/audit-DZvqycbG.js +3150 -0
- package/dist/audit-Mit73dYD.js +3150 -0
- package/dist/auth-C-XX0Tdt.js +314 -0
- package/dist/auth-D8--b01l.js +315 -0
- package/dist/auth-DJ7XEBDO.js +448 -0
- package/dist/auth-otyjXf9l.js +448 -0
- package/dist/banner-DSE-i7gH.js +294 -0
- package/dist/binaries-BSjilwX-.js +13 -0
- package/dist/bindings-DFTxQj8x.js +69 -0
- package/dist/bonjour-discovery-BnxTMHRd.js +378 -0
- package/dist/bonjour-discovery-CVJYHT3g.js +378 -0
- package/dist/boot/handler.js +28 -44
- package/dist/browser-cli-BR2pZWTC.js +1694 -0
- package/dist/browser-cli-I0kfR7FV.js +1690 -0
- package/dist/build-info.json +3 -3
- package/dist/call-Ck7ysmEl.js +517 -0
- package/dist/call-MN6mCJEB.js +518 -0
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/catalog-Bt9EM4sK.js +185 -0
- package/dist/catalog-BtUvWKd9.js +185 -0
- package/dist/channel-account-context-BLQq9NKz.js +133 -0
- package/dist/channel-account-context-CaCzVa76.js +133 -0
- package/dist/channel-activity-BatlvP_U.js +292 -0
- package/dist/channel-activity-DHVMMb2x.js +94 -0
- package/dist/channel-activity-DtRx3b0W.js +94 -0
- package/dist/channel-options-C6kT3nXB.js +32 -0
- package/dist/channel-options-CbgR_vsp.js +33 -0
- package/dist/channel-selection-CzbrpDPd.js +51 -0
- package/dist/channel-selection-Xv5UFxOx.js +51 -0
- package/dist/channel-web-DfDokU69.js +2134 -0
- package/dist/channel-web-DtvksSuY.js +2132 -0
- package/dist/channels-cli-BmdCVX6O.js +1435 -0
- package/dist/channels-cli-CrAZpaiN.js +1439 -0
- package/dist/channels-status-issues-B77y-TLr.js +18 -0
- package/dist/channels-status-issues-COECL8nx.js +18 -0
- package/dist/chrome-Cr5wmMk8.js +1733 -0
- package/dist/chrome-YBrnJN-g.js +1732 -0
- package/dist/chunk-CrfQ_O--.js +341 -0
- package/dist/chunk-DFBUmlXU.js +341 -0
- package/dist/clack-prompter-CFNKgQXx.js +122 -0
- package/dist/clack-prompter-DDlR2e34.js +121 -0
- package/dist/cli/daemon-cli.js +1 -1
- package/dist/cli-BbOinSy6.js +130 -0
- package/dist/cli-DuvHXQ5h.js +134 -0
- package/dist/client-BZeatr3g.js +2316 -0
- package/dist/client-Bc9JFAwL.js +2316 -0
- package/dist/clipboard-Com-8GBg.js +31 -0
- package/dist/clipboard-J_9AABIu.js +31 -0
- package/dist/command-format-CMAQa4dB.js +32 -0
- package/dist/command-format-KkslAzwV.js +18 -0
- package/dist/command-logger/handler.js +1 -1
- package/dist/command-registry-BJnVtHo0.js +215 -0
- package/dist/commands-ijxtne0J.js +41 -0
- package/dist/commands-kZtQfqDl.js +41 -0
- package/dist/commands-registry-BrBtH2_B.js +891 -0
- package/dist/commands-registry-xZoSouba.js +892 -0
- package/dist/common-6D7nhDP-.js +156 -0
- package/dist/common-B4cjsvqP.js +156 -0
- package/dist/completion-cli-CpUq9QC3.js +452 -0
- package/dist/completion-cli-De4umD_N.js +452 -0
- package/dist/config-C_WcTz_O.js +4231 -0
- package/dist/config-DfcqHTH-.js +4229 -0
- package/dist/config-cli-C7rq2n_m.js +243 -0
- package/dist/config-cli-VToCKln2.js +247 -0
- package/dist/config-guard-BlAcGEao.js +75 -0
- package/dist/config-guard-C-h_KIeI.js +99 -0
- package/dist/config-validation-C0YXR2dY.js +18 -0
- package/dist/config-validation-DDYBTmxT.js +18 -0
- package/dist/configure-Bkre1zEB.js +891 -0
- package/dist/configure-ifuEamRQ.js +889 -0
- package/dist/control-auth-DK6cIBzl.js +397 -0
- package/dist/control-auth-DQ8bfDMk.js +397 -0
- package/dist/control-ui-assets-DLEWfed6.js +186 -0
- package/dist/control-ui-assets-DVhkAyhv.js +186 -0
- package/dist/conversation-label-HuHoShPF.js +36 -0
- package/dist/conversation-label-L0QTtKji.js +36 -0
- package/dist/cron-cli-DnxnTi83.js +498 -0
- package/dist/cron-cli-yqcBkqZT.js +494 -0
- package/dist/daemon-cli-CmQYq8uO.js +735 -0
- package/dist/daemon-cli-_OIRoswC.js +737 -0
- package/dist/daemon-cli.js +34 -69
- package/dist/daemon-install-BEgffqDj.js +56 -0
- package/dist/daemon-install-DAorzotp.js +60 -0
- package/dist/daemon-install-helpers-B82uvJjJ.js +504 -0
- package/dist/daemon-install-helpers-BhL2Gh4l.js +504 -0
- package/dist/deliver-CCvDBk5c.js +481 -0
- package/dist/deliver-CqKw0wFi.js +481 -0
- package/dist/delivery-queue-CK7VnUJf.js +244 -0
- package/dist/delivery-queue-DMeQchpT.js +244 -0
- package/dist/devices-cli-C6UAfRV_.js +323 -0
- package/dist/devices-cli-Le-isdZB.js +319 -0
- package/dist/diagnostics-BhFwk6F3.js +35 -0
- package/dist/diagnostics-BtaQtaVR.js +35 -0
- package/dist/directory-cli-BqMfX5og.js +220 -0
- package/dist/directory-cli-DD72TTD4.js +224 -0
- package/dist/dispatcher-BLC2WYZv.js +173 -0
- package/dist/dispatcher-Cm2FAG_D.js +174 -0
- package/dist/dm-policy-shared-DOzpxMHC.js +22 -0
- package/dist/dm-policy-shared-DZY0f1bR.js +22 -0
- package/dist/dns-cli-BgsNg-bn.js +203 -0
- package/dist/dns-cli-CdMU5yuG.js +199 -0
- package/dist/dock-ByrYnLiz.js +929 -0
- package/dist/dock-CpNmmysM.js +928 -0
- package/dist/doctor-completion-BPeaRbmd.js +92 -0
- package/dist/doctor-completion-CfOyGJd3.js +92 -0
- package/dist/doctor-config-flow-DMyTycn7.js +1935 -0
- package/dist/doctor-config-flow-DoMu-pTm.js +1934 -0
- package/dist/enable-D5KetMo7.js +59 -0
- package/dist/entry.js +61 -1
- package/dist/env-BJ36dSrx.js +60 -0
- package/dist/errors-BfONuT95.js +35 -0
- package/dist/errors-_DSePI1C.js +35 -0
- package/dist/exec-DkFE7lqU.js +164 -0
- package/dist/exec-mY96dhIg.js +164 -0
- package/dist/extensionAPI.js +112 -76
- package/dist/fetch-B3EQXbTa.js +67 -0
- package/dist/fetch-BPeSHPvr.js +281 -0
- package/dist/fetch-BQ7HvRwe.js +67 -0
- package/dist/fetch-CbGTzJ8L.js +281 -0
- package/dist/fetch-CfIaWynF.js +67 -0
- package/dist/file-lock-BHfqppLm.js +107 -0
- package/dist/file-lock-CCBpdPM_.js +107 -0
- package/dist/fs-safe-BcEpbVjc.js +88 -0
- package/dist/fs-safe-S3Zvbabd.js +98 -0
- package/dist/gateway-cli-BXipRcsU.js +24602 -0
- package/dist/gateway-cli-Bv2K3rXx.js +24606 -0
- package/dist/gateway-rpc-BHnd7P1q.js +28 -0
- package/dist/gateway-rpc-COEQDswS.js +28 -0
- package/dist/gmail-setup-utils-BpdKFe3P.js +423 -0
- package/dist/gmail-setup-utils-CqbWr0Kq.js +422 -0
- package/dist/health-1ero5j64.js +1414 -0
- package/dist/health-ioP2au7j.js +1417 -0
- package/dist/heartbeat-visibility-C88L-_f2.js +125 -0
- package/dist/heartbeat-visibility-Dk_Q02qX.js +125 -0
- package/dist/hook-runner-global-BztoD8lu.js +527 -0
- package/dist/hooks-cli-B8D9DzRR.js +1226 -0
- package/dist/hooks-cli-rZ3GOXag.js +1222 -0
- package/dist/image-ops-Cx1ym2Hi.js +354 -0
- package/dist/image-ops-DWytvdh_.js +354 -0
- package/dist/import-CTUBsy7D.js +604 -0
- package/dist/import-cBp4f62k.js +606 -0
- package/dist/inbound-context-COwswi8z.js +68 -0
- package/dist/inbound-context-ChcNR30g.js +68 -0
- package/dist/index.js +127 -102
- package/dist/inspect-BsS3_z-x.js +286 -0
- package/dist/inspect-drfsUSIW.js +286 -0
- package/dist/installs-BFmmM5Zd.js +325 -0
- package/dist/installs-DA7SG0Tx.js +325 -0
- package/dist/ipv4-BZGSwnH4.js +46 -0
- package/dist/ipv4-DsOgHE0B.js +46 -0
- package/dist/ir-R3Pk8Cv8.js +972 -0
- package/dist/lifecycle-core-BZMeOT7u.js +474 -0
- package/dist/lifecycle-core-C6-_Gts0.js +476 -0
- package/dist/loader-CJ2UHqV7.js +22414 -0
- package/dist/loader-dEFvmwXu.js +22411 -0
- package/dist/logger-9I2fg5mr.js +49 -0
- package/dist/login-D9uJTyEv.js +62 -0
- package/dist/login-DTh702_w.js +61 -0
- package/dist/login-qr-BKsmW6XI.js +325 -0
- package/dist/login-qr-SOXdIR58.js +329 -0
- package/dist/logs-cli-BshJBHZQ.js +236 -0
- package/dist/logs-cli-Ckh-BBTT.js +240 -0
- package/dist/markdown-tables-Cfz7zDXI.js +29 -0
- package/dist/markdown-tables-DeFSK6aY.js +29 -0
- package/dist/media-BD2cZGXT.js +971 -0
- package/dist/media-CjvpnJmQ.js +10388 -0
- package/dist/message-action-names-CZHrHMRE.js +2520 -0
- package/dist/message-action-names-CiZ-0Smk.js +2520 -0
- package/dist/message-channel-EMCYRaxk.js +91 -0
- package/dist/mime-1E7nn9IU.js +146 -0
- package/dist/mime-mSgQeDnC.js +146 -0
- package/dist/net-Cg8AQeke.js +225 -0
- package/dist/net-DMh1m8AZ.js +225 -0
- package/dist/node-cli-BJ5CCbqx.js +1462 -0
- package/dist/node-cli-wYYhAs8x.js +1458 -0
- package/dist/node-service-CkwVlcey.js +67 -0
- package/dist/node-service-DTVW9YJh.js +67 -0
- package/dist/nodes-cli-CMFYLD1o.js +1346 -0
- package/dist/nodes-cli-DC2zUx3f.js +1350 -0
- package/dist/nodes-screen-6pXv1lYa.js +250 -0
- package/dist/nodes-screen-CTIZKksn.js +250 -0
- package/dist/note-CMELkPJN.js +92 -0
- package/dist/npm-registry-spec-BiJI7Rkr.js +786 -0
- package/dist/npm-registry-spec-Dza35Ig4.js +786 -0
- package/dist/npm-resolution-CUQGDty4.js +86 -0
- package/dist/npm-resolution-CwbZK9AI.js +86 -0
- package/dist/onboard-8Qd9lU8x.js +649 -0
- package/dist/onboard-Q3cY65m8.js +647 -0
- package/dist/onboard-auth-BUzYDEqf.js +211 -0
- package/dist/onboard-auth-DcVXyd-Z.js +207 -0
- package/dist/onboard-channels-BFHuA-AU.js +2548 -0
- package/dist/onboard-channels-DVrPP_ie.js +2547 -0
- package/dist/onboard-helpers-B-bBSsyR.js +363 -0
- package/dist/onboard-helpers-YsCa-sAt.js +364 -0
- package/dist/onboard-remote-BWFcuEOD.js +127 -0
- package/dist/onboard-remote-C0THuDTK.js +127 -0
- package/dist/onboarding-B31lnOPp.js +586 -0
- package/dist/onboarding-DmN_qC8e.js +588 -0
- package/dist/onboarding.finalize-DGD0PA-D.js +402 -0
- package/dist/onboarding.finalize-DNIb3meE.js +404 -0
- package/dist/onboarding.gateway-config-BaeIuA62.js +195 -0
- package/dist/onboarding.gateway-config-DMV2Odzr.js +201 -0
- package/dist/outbound-BdxBHDax.js +220 -0
- package/dist/outbound-D-Y9rMgB.js +221 -0
- package/dist/outbound-attachment-CvZ04r5k.js +18 -0
- package/dist/outbound-attachment-DYa1asB5.js +18 -0
- package/dist/outbound-attachment-DgUpk7Uh.js +18 -0
- package/dist/pairing-cli-BxTv78V7.js +125 -0
- package/dist/pairing-cli-CxUCzNUc.js +129 -0
- package/dist/pairing-labels-DVO6NJr0.js +9 -0
- package/dist/pairing-labels-D_pD8Cag.js +9 -0
- package/dist/pairing-store-Bu9pVlkO.js +459 -0
- package/dist/pairing-store-CWaGbAGi.js +460 -0
- package/dist/path-env-RsuO6yO-.js +89 -0
- package/dist/path-env-_my-d_iR.js +89 -0
- package/dist/path-safety-CfiVyVz7.js +14 -0
- package/dist/path-safety-D-wLK4pV.js +14 -0
- package/dist/plugin-auto-enable-CW01H36W.js +301 -0
- package/dist/plugin-auto-enable-CeHhBLCU.js +302 -0
- package/dist/plugin-registry-CWL37HnB.js +33 -0
- package/dist/plugin-registry-ELliiumZ.js +33 -0
- package/dist/plugin-sdk/auth/provider-auth.d.ts +0 -6
- package/dist/plugin-sdk/auto-reply/reply/agent-runner-utils.d.ts +9 -29
- package/dist/plugin-sdk/auto-reply/reply/commands-status.d.ts +0 -2
- package/dist/plugin-sdk/auto-reply/reply/commands-subagents/shared.d.ts +1 -1
- package/dist/plugin-sdk/auto-reply/reply/queue/types.d.ts +0 -2
- package/dist/plugin-sdk/auto-reply/status.d.ts +0 -4
- package/dist/plugin-sdk/auto-reply/templating.d.ts +0 -4
- package/dist/plugin-sdk/config/sessions/types.d.ts +0 -2
- package/dist/plugin-sdk/config/types.tools.d.ts +1 -59
- package/dist/plugin-sdk/config/types.tts.d.ts +2 -1
- package/dist/plugin-sdk/config/zod-schema.agent-runtime.d.ts +0 -177
- package/dist/plugin-sdk/config/zod-schema.core.d.ts +2 -230
- package/dist/plugin-sdk/config/zod-schema.d.ts +3 -192
- package/dist/plugin-sdk/config/zod-schema.providers-core.d.ts +3 -15
- package/dist/plugin-sdk/config/zod-schema.providers.d.ts +2 -10
- package/dist/plugin-sdk/config/zod-schema.session.d.ts +1 -5
- package/dist/plugin-sdk/gateway/protocol/index.d.ts +5 -5
- package/dist/plugin-sdk/index.js +72 -142
- package/dist/plugin-sdk/middleware/cli-runtime-base.d.ts +6 -0
- package/dist/plugin-sdk/middleware/runtimes/claude.d.ts +6 -0
- package/dist/plugin-sdk/middleware/runtimes/codex.d.ts +2 -2
- package/dist/plugin-sdk/plugin-sdk/index.d.ts +2 -0
- package/dist/plugin-sdk/plugins/manifest-registry.d.ts +2 -0
- package/dist/plugin-sdk/plugins/manifest.d.ts +2 -0
- package/dist/plugin-sdk/plugins/registry.d.ts +18 -0
- package/dist/plugin-sdk/plugins/types.d.ts +4 -0
- package/dist/plugin-sdk/stt/preflight.d.ts +2 -4
- package/dist/plugin-sdk/stt/providers/index.d.ts +1 -1
- package/dist/plugin-sdk/stt/providers/shared.d.ts +20 -1
- package/dist/plugin-sdk/tts/providers/edge.d.ts +2 -0
- package/dist/plugin-sdk/tts/providers/elevenlabs.d.ts +2 -0
- package/dist/plugin-sdk/tts/providers/index.d.ts +4 -0
- package/dist/plugin-sdk/tts/providers/openai.d.ts +2 -0
- package/dist/plugin-sdk/tts/tts.d.ts +13 -5
- package/dist/plugin-sdk/tts/types.d.ts +21 -0
- package/dist/plugins-DExsdlTp.js +455 -0
- package/dist/plugins-DdMgSc_b.js +453 -0
- package/dist/plugins-cli-DqBWiT_G.js +806 -0
- package/dist/plugins-cli-KQEzhU6P.js +802 -0
- package/dist/ports-CL0pXAXO.js +96 -0
- package/dist/ports-CRI-HSZx.js +370 -0
- package/dist/ports-DiQFcKUB.js +316 -0
- package/dist/ports-HRurfPIr.js +96 -0
- package/dist/preflight-6QRqxWh7.js +667 -0
- package/dist/preflight-DDZjr5KD.js +667 -0
- package/dist/program-DmhbOJj3.js +249 -0
- package/dist/program-context-PPMzZ6Gu.js +474 -0
- package/dist/prompt-select-styled-CmSWunD8.js +1669 -0
- package/dist/prompt-select-styled-PfxT9zl9.js +1672 -0
- package/dist/provider-auth-CfdnLqh3.js +187 -0
- package/dist/provider-auth-gpHOMUBP.js +187 -0
- package/dist/provider-dispatcher-D4eY8LZW.js +659 -0
- package/dist/provider-dispatcher-D5Q7M15D.js +660 -0
- package/dist/push-apns-BNwVMXX9.js +713 -0
- package/dist/push-apns-BszVkcZK.js +711 -0
- package/dist/pw-ai-Bdb3zrBM.js +1911 -0
- package/dist/pw-ai-BvcvEdGs.js +1908 -0
- package/dist/qr-cli-BBgk2ci1.js +349 -0
- package/dist/qr-cli-BLzVrhia.js +353 -0
- package/dist/redact-snapshot-CyBDcb_a.js +1966 -0
- package/dist/redact-snapshot-D9oPMqA-.js +1966 -0
- package/dist/register.agent-CAhKX3Ft.js +1019 -0
- package/dist/register.agent-RKHXtLLm.js +291 -0
- package/dist/register.configure-CW6XRGxV.js +129 -0
- package/dist/register.configure-dvrKc0j7.js +134 -0
- package/dist/register.import-CRLOolHv.js +31 -0
- package/dist/register.import-dhDEj7Om.js +29 -0
- package/dist/register.maintenance-EAhr1tJ9.js +500 -0
- package/dist/register.maintenance-lWz4v90u.js +502 -0
- package/dist/register.message-DyWkwUIU.js +690 -0
- package/dist/register.message-bl2Khz6c.js +686 -0
- package/dist/register.onboard-BAozmeei.js +97 -0
- package/dist/register.onboard-Da9hWQR1.js +93 -0
- package/dist/register.setup-DVrQWLoF.js +117 -0
- package/dist/register.setup-DbiLuuqg.js +113 -0
- package/dist/register.status-health-sessions-CA8ApUkH.js +668 -0
- package/dist/register.status-health-sessions-lGszs-NJ.js +428 -0
- package/dist/register.subclis-C-lqMygb.js +267 -0
- package/dist/replies-BTC1z8j0.js +136 -0
- package/dist/replies-BhlnuFp0.js +136 -0
- package/dist/reply-DZMooMoq.js +12880 -0
- package/dist/reply-directives-C0-hYyAt.js +182 -0
- package/dist/reply-directives-C_CGXLBJ.js +182 -0
- package/dist/reply-payloads-BospFSPI.js +527 -0
- package/dist/reply-prefix-DDgh77yy.js +37 -0
- package/dist/reply-prefix-DwKZPZyG.js +37 -0
- package/dist/reply-yGEQ0UW4.js +12877 -0
- package/dist/resolve-route-B73QhBIl.js +249 -0
- package/dist/resolve-route-DckdRbW8.js +249 -0
- package/dist/response-prefix-template-x5RBQnEy.js +134 -0
- package/dist/retry-CDrH81GP.js +77 -0
- package/dist/run-main-D869n5qf.js +307 -0
- package/dist/secure-random-CxzxAnMS.js +44 -0
- package/dist/security-cli-CfqosyUf.js +487 -0
- package/dist/security-cli-DMZun6gO.js +482 -0
- package/dist/send-3wvngctD.js +547 -0
- package/dist/send-AY7Fs5ky.js +374 -0
- package/dist/send-BSWD4Kr_.js +2245 -0
- package/dist/send-BT4HhTLm.js +349 -0
- package/dist/send-BvuxToC8.js +2245 -0
- package/dist/send-CaUxFvu0.js +492 -0
- package/dist/send-CiBRE4OY.js +1178 -0
- package/dist/send-Cidd4lQn.js +11 -0
- package/dist/send-Cq_Db9wG.js +1779 -0
- package/dist/send-DBFcxDPm.js +1776 -0
- package/dist/send-DUha0nIz.js +492 -0
- package/dist/send-DgYBI05s.js +332 -0
- package/dist/send-Dnf5bISH.js +426 -0
- package/dist/send-NcQk6UH1.js +547 -0
- package/dist/send-Og0-IMee.js +29 -0
- package/dist/send-oCN80Pl2.js +349 -0
- package/dist/server-DoGGLeP3.js +202 -0
- package/dist/server-V7G9FG2A.js +206 -0
- package/dist/server-lifecycle-CSWpSlvn.js +2437 -0
- package/dist/server-lifecycle-Cal8hBP1.js +2437 -0
- package/dist/server-node-events-DSee6jSG.js +394 -0
- package/dist/server-node-events-DbQWkU3M.js +390 -0
- package/dist/service-Duw0xMJX.js +670 -0
- package/dist/service-SRcnA1Am.js +670 -0
- package/dist/session-BLcfWX5_.js +170 -0
- package/dist/session-CQwkaAs-.js +170 -0
- package/dist/session-cost-usage-C-UcrvL4.js +627 -0
- package/dist/session-cost-usage-Dg3dzS0E.js +627 -0
- package/dist/session-dirs-D6mFEF90.js +318 -0
- package/dist/session-dirs-DVsG6e7L.js +318 -0
- package/dist/session-utils-C6522g3D.js +622 -0
- package/dist/session-utils-Dq2BJyVy.js +622 -0
- package/dist/sessions-CNkj4Eq8.js +247 -0
- package/dist/sessions-DDIoP7Rl.js +2569 -0
- package/dist/shell-env-D8nXPDbP.js +163 -0
- package/dist/ssrf-7I3FUHpm.js +183 -0
- package/dist/ssrf-DZi4qw5c.js +183 -0
- package/dist/status-CrAe8ZYt.js +1983 -0
- package/dist/status-DetRJxvZ.js +1979 -0
- package/dist/status.update-DquSK3p7.js +449 -0
- package/dist/status.update-iABAY3iW.js +449 -0
- package/dist/store-Bnm6zwaq.js +2571 -0
- package/dist/store-CVkGKjWm.js +64 -0
- package/dist/store-D_gpBpAW.js +64 -0
- package/dist/store-mxh63FBa.js +53 -0
- package/dist/subagent-registry-DNAz7Heu.js +4856 -0
- package/dist/subagent-registry-Dhz6HC4Z.js +4854 -0
- package/dist/subsystem-DGSHVL8I.js +1081 -0
- package/dist/subsystem-m7RSGQoR.js +1196 -0
- package/dist/system-cli-ByVDF6p8.js +77 -0
- package/dist/system-cli-CERb89Bl.js +73 -0
- package/dist/systemd-CSUtfsJx.js +547 -0
- package/dist/systemd-hints-BCxkQemJ.js +278 -0
- package/dist/systemd-hints-ef7m-7ZH.js +278 -0
- package/dist/systemd-linger-CWLgT0Wr.js +75 -0
- package/dist/systemd-linger-DT0E7YET.js +75 -0
- package/dist/systemd-tS61V4ao.js +547 -0
- package/dist/tables-DED01JNI.js +55 -0
- package/dist/tables-K3rOiGaJ.js +55 -0
- package/dist/tables-NcsXz3r_.js +55 -0
- package/dist/tailnet-CEudzG0i.js +40 -0
- package/dist/tailnet-D66Y5zC7.js +40 -0
- package/dist/tailscale-DjSRjPA-.js +230 -0
- package/dist/tailscale-DngZHD9L.js +230 -0
- package/dist/targets-BOpYPsGM.js +2545 -0
- package/dist/targets-BVsxzQh1.js +220 -0
- package/dist/targets-C99szk_e.js +114 -0
- package/dist/targets-CA4zx5G4.js +650 -0
- package/dist/targets-CTNm3bJ8.js +2544 -0
- package/dist/targets-DpmQjetK.js +53 -0
- package/dist/targets-Q-YGeAqu.js +650 -0
- package/dist/targets-rdWlC6Y-.js +53 -0
- package/dist/tool-display-Br6mwaJc.js +785 -0
- package/dist/tool-display-CLBf5cRa.js +785 -0
- package/dist/tool-images-DB4f57XK.js +263 -0
- package/dist/tool-images-kloBqxqK.js +263 -0
- package/dist/trash-B32LfX0l.js +125 -0
- package/dist/trash-SlUJxKO7.js +125 -0
- package/dist/tui-CHOtFK6k.js +3282 -0
- package/dist/tui-D4yiSpop.js +3282 -0
- package/dist/tui-cli-CzrjmAMZ.js +66 -0
- package/dist/tui-cli-Dpbs2QW_.js +62 -0
- package/dist/update-B5nYVxpc.js +349 -0
- package/dist/update-Bs3HhSnE.js +349 -0
- package/dist/update-cli-D_yz9Kyz.js +1147 -0
- package/dist/update-cli-DdfwNAsA.js +1149 -0
- package/dist/usage-BVyabt5E.js +5421 -0
- package/dist/voice-credentials-CI4VgB6u.js +46 -0
- package/dist/voice-credentials-l_d_gZiG.js +46 -0
- package/dist/web-B5xSAAH2.js +74 -0
- package/dist/web-Cc4tDVO9.js +3067 -0
- package/dist/web-Cdp9_IUk.js +79 -0
- package/dist/webhooks-cli-BDPcBkZL.js +330 -0
- package/dist/webhooks-cli-sRfsNesg.js +334 -0
- package/dist/whatsapp-actions-BGZXdWiP.js +125 -0
- package/dist/whatsapp-actions-HdmZu8oU.js +130 -0
- package/dist/workspace-D5LAl41l.js +449 -0
- package/dist/workspace-DRYGbrDM.js +447 -0
- package/dist/zod-schema-C8gEV0uz.js +2739 -0
- package/dist/zod-schema-CCUbW_Si.js +2739 -0
- package/package.json +1 -1
- package/dist/accounts-Aqbb2_Fn.js +0 -270
- package/dist/accounts-Bo2bX8jP.js +0 -272
- package/dist/accounts-D3fAPVzU.js +0 -36
- package/dist/accounts-DUEDngp6.js +0 -32
- package/dist/accounts-DZmv4bXS.js +0 -47
- package/dist/accounts-DmB4SVPK.js +0 -47
- package/dist/accounts-DtkyfvwR.js +0 -36
- package/dist/ack-reactions-Bvfy17SM.js +0 -446
- package/dist/ack-reactions-DYU8uhcz.js +0 -446
- package/dist/acp-cli-DVXhDMc6.js +0 -1324
- package/dist/acp-cli-QBL4_qcW.js +0 -1319
- package/dist/active-listener-CwxZ24bZ.js +0 -37
- package/dist/active-listener-v2sItamh.js +0 -37
- package/dist/agent-BisC5WZ6.js +0 -704
- package/dist/agent-Bqdrc0AK.js +0 -703
- package/dist/agent-helpers-BSGqeJr-.js +0 -400
- package/dist/agent-scope-_ND_-bJy.js +0 -116
- package/dist/agents-khSbraAA.js +0 -760
- package/dist/agents.config-D8gLHPWo.js +0 -116
- package/dist/audio-BIvUsncf.js +0 -43
- package/dist/audio-CQ8TfmVN.js +0 -43
- package/dist/audit-C0x7Cm6K.js +0 -3150
- package/dist/audit-CAY-uzWP.js +0 -3150
- package/dist/auth-DGqCLaQq.js +0 -448
- package/dist/auth-DLTRySEi.js +0 -314
- package/dist/auth-Drf91ntw.js +0 -315
- package/dist/auth-ku2khJyQ.js +0 -448
- package/dist/banner-txHC40UW.js +0 -294
- package/dist/binaries-BTvHIrCr.js +0 -13
- package/dist/bindings-DsWJQVKh.js +0 -69
- package/dist/bonjour-discovery-BElR62fH.js +0 -378
- package/dist/bonjour-discovery-C8XyVsjb.js +0 -378
- package/dist/browser-cli-DxJew43l.js +0 -1694
- package/dist/browser-cli-p0nakrjO.js +0 -1690
- package/dist/call-BrTmlOx3.js +0 -518
- package/dist/call-ChdUdwb4.js +0 -517
- package/dist/catalog-DTlcfTT9.js +0 -185
- package/dist/catalog-PixZqhZK.js +0 -185
- package/dist/channel-account-context-BO245Tcn.js +0 -133
- package/dist/channel-account-context-BgK0hm-I.js +0 -133
- package/dist/channel-activity-B0qlUR5e.js +0 -292
- package/dist/channel-activity-C-L6rDrQ.js +0 -94
- package/dist/channel-activity-DdgLBZ7M.js +0 -94
- package/dist/channel-options-CjlvAHSH.js +0 -32
- package/dist/channel-options-DpjP7qQf.js +0 -33
- package/dist/channel-selection-DW21dXB1.js +0 -51
- package/dist/channel-selection-wK_6S2Ku.js +0 -51
- package/dist/channel-web-COTkzJBt.js +0 -2136
- package/dist/channel-web-DUz5bn9h.js +0 -2134
- package/dist/channels-cli-D8RS8g2Q.js +0 -1438
- package/dist/channels-cli-X_8rENR6.js +0 -1434
- package/dist/channels-status-issues-B6I2l7Sm.js +0 -18
- package/dist/channels-status-issues-DhDH2fWp.js +0 -18
- package/dist/chrome-Dqtq7zCc.js +0 -1733
- package/dist/chrome-XeSY99Z_.js +0 -1732
- package/dist/chunk-CWD_zrz_.js +0 -341
- package/dist/chunk-LUabyS9k.js +0 -341
- package/dist/clack-prompter-fAgbvPW4.js +0 -122
- package/dist/clack-prompter-kf9qTN5p.js +0 -121
- package/dist/cli-BjPLpuZR.js +0 -133
- package/dist/cli-fFyOTtkD.js +0 -129
- package/dist/client-B9u3JdT_.js +0 -2316
- package/dist/client-DEEOhx0w.js +0 -2316
- package/dist/clipboard-B2nstLx7.js +0 -31
- package/dist/clipboard-C8QI9fes.js +0 -31
- package/dist/command-format-D0vKipG9.js +0 -32
- package/dist/command-format-LFmgWzKJ.js +0 -18
- package/dist/command-registry-BsPaMI53.js +0 -215
- package/dist/commands-BAYwlS3d.js +0 -41
- package/dist/commands-D842kCjj.js +0 -41
- package/dist/commands-registry-Cg2GTT2J.js +0 -892
- package/dist/commands-registry-Yz-uV5oG.js +0 -891
- package/dist/common-B67cBSew.js +0 -156
- package/dist/common-DEoiTqOr.js +0 -156
- package/dist/completion-cli-BO5mIPLa.js +0 -452
- package/dist/completion-cli-z9a6MVgr.js +0 -452
- package/dist/config-CAa0rZSx.js +0 -4225
- package/dist/config-W0w-gi2j.js +0 -4223
- package/dist/config-cli-DdRue35G.js +0 -243
- package/dist/config-cli-uOwxu5AC.js +0 -247
- package/dist/config-guard-BI85dxHR.js +0 -99
- package/dist/config-guard-DQqnigKh.js +0 -75
- package/dist/config-validation-D-h4LHyA.js +0 -18
- package/dist/config-validation-Df_kroIQ.js +0 -18
- package/dist/configure-B7ChPbXv.js +0 -891
- package/dist/configure-QspkIXME.js +0 -889
- package/dist/control-auth-BrBr2xb8.js +0 -397
- package/dist/control-auth-CehjYKnL.js +0 -397
- package/dist/control-ui-assets-D8F383Mo.js +0 -186
- package/dist/control-ui-assets-DYKtRIm0.js +0 -186
- package/dist/conversation-label-Bn5j3lUT.js +0 -36
- package/dist/conversation-label-CDH4rKMG.js +0 -36
- package/dist/cron-cli-DVzDHzAX.js +0 -494
- package/dist/cron-cli-gkH2qKM4.js +0 -498
- package/dist/daemon-cli-BTdNO1vH.js +0 -737
- package/dist/daemon-cli-DNNqI2LD.js +0 -735
- package/dist/daemon-install-CaEHG92p.js +0 -56
- package/dist/daemon-install-DbpDSDfW.js +0 -60
- package/dist/daemon-install-helpers-DjE_WnlY.js +0 -504
- package/dist/daemon-install-helpers-DocTUxqQ.js +0 -504
- package/dist/deliver-CDcL8ok6.js +0 -481
- package/dist/deliver-CS8JsevV.js +0 -481
- package/dist/delivery-queue-CTaYZQ_8.js +0 -244
- package/dist/delivery-queue-DMZ7mH8P.js +0 -244
- package/dist/devices-cli-BBJ4His-.js +0 -319
- package/dist/devices-cli-DHSJSFW1.js +0 -323
- package/dist/diagnostics-BSvCaLNs.js +0 -35
- package/dist/diagnostics-mWFAsFeo.js +0 -35
- package/dist/directory-cli-C-oHD_XE.js +0 -224
- package/dist/directory-cli-Cw99VGvr.js +0 -220
- package/dist/dispatcher-C8d1NNLZ.js +0 -174
- package/dist/dispatcher-DY6Ga60j.js +0 -173
- package/dist/dm-policy-shared-CRQ-Wr5g.js +0 -22
- package/dist/dm-policy-shared-CXXf2ltd.js +0 -22
- package/dist/dns-cli-BOqx9qo1.js +0 -199
- package/dist/dns-cli-WfqSC3JU.js +0 -203
- package/dist/dock-Big-J2VN.js +0 -929
- package/dist/dock-Cj4PKiUh.js +0 -928
- package/dist/doctor-completion-hYqcZ7IE.js +0 -92
- package/dist/doctor-completion-nxQQ5bEw.js +0 -92
- package/dist/doctor-config-flow-BUuADMDa.js +0 -1935
- package/dist/doctor-config-flow-yOUpQC2B.js +0 -1934
- package/dist/enable-DC9V0nTO.js +0 -59
- package/dist/env-B3zr72vQ.js +0 -60
- package/dist/errors-CdmXrBic.js +0 -35
- package/dist/errors-Cr_NbOb4.js +0 -35
- package/dist/exec-D_s-zAtY.js +0 -164
- package/dist/exec-Zz6eJ6YU.js +0 -164
- package/dist/fetch-BIZkXB5i.js +0 -67
- package/dist/fetch-DRVdxxEj.js +0 -67
- package/dist/fetch-DTR2MlOk.js +0 -67
- package/dist/file-lock-6NXMPZTT.js +0 -107
- package/dist/file-lock-C_KRlR7M.js +0 -107
- package/dist/fs-safe-DZHpH7TI.js +0 -98
- package/dist/fs-safe-vm3JMUkq.js +0 -88
- package/dist/gateway-cli-DEW-Ukmc.js +0 -24351
- package/dist/gateway-cli-DQYcZCOV.js +0 -24347
- package/dist/gateway-rpc-BCFkQPa2.js +0 -28
- package/dist/gateway-rpc-DOgYbsOG.js +0 -28
- package/dist/gmail-setup-utils-DMeA1UM1.js +0 -423
- package/dist/gmail-setup-utils-FHWSAur3.js +0 -422
- package/dist/health-BrLNGkZV.js +0 -1414
- package/dist/health-C8p9mnfl.js +0 -1417
- package/dist/heartbeat-visibility-CJVdaMZF.js +0 -125
- package/dist/heartbeat-visibility-DwK1UL0t.js +0 -125
- package/dist/hook-runner-global-C0DFQmQw.js +0 -527
- package/dist/hooks-cli-DEKi-tbA.js +0 -1221
- package/dist/hooks-cli-FndXPMD3.js +0 -1225
- package/dist/image-ops-B9ofmzSq.js +0 -354
- package/dist/image-ops-CMuvRsMY.js +0 -354
- package/dist/import-BH13F5mT.js +0 -606
- package/dist/import-D8HVcDqO.js +0 -604
- package/dist/inbound-context-BLy-G2Eq.js +0 -68
- package/dist/inbound-context-CmmmT8IP.js +0 -68
- package/dist/inbound-path-policy-BdmTOUka.js +0 -90
- package/dist/inbound-path-policy-BurOAu44.js +0 -90
- package/dist/inspect-nW8LAukU.js +0 -286
- package/dist/inspect-xy2EHy8G.js +0 -286
- package/dist/installs-CpfHmKY1.js +0 -325
- package/dist/installs-DebiMrGj.js +0 -325
- package/dist/ipv4-ysiNGssl.js +0 -46
- package/dist/ipv4-zc_Hfvbp.js +0 -46
- package/dist/ir-CaxTklDC.js +0 -940
- package/dist/lifecycle-core-Z5SScMlU.js +0 -476
- package/dist/lifecycle-core-pPwYSt7m.js +0 -474
- package/dist/loader-BapIdJyx.js +0 -22404
- package/dist/loader-BdAToyDH.js +0 -22401
- package/dist/local-roots-CrJ_Jv_G.js +0 -314
- package/dist/local-roots-n_Y4iYwb.js +0 -313
- package/dist/logger-B8yHnzPl.js +0 -49
- package/dist/login-C99fsB0N.js +0 -61
- package/dist/login-cLvGPjeO.js +0 -62
- package/dist/login-qr-CGqRFwgl.js +0 -329
- package/dist/login-qr-dnY5DC2C.js +0 -325
- package/dist/logs-cli-Bda7xY4N.js +0 -236
- package/dist/logs-cli-HzR-vnpD.js +0 -240
- package/dist/markdown-tables-58Hq__7K.js +0 -29
- package/dist/markdown-tables-GFEX0OR6.js +0 -29
- package/dist/media-CFsyXs3H.js +0 -940
- package/dist/media-Du5SHtnp.js +0 -10452
- package/dist/message-action-names-BfuEvR6j.js +0 -2521
- package/dist/message-action-names-CVBkpOLt.js +0 -2521
- package/dist/message-channel-FMNRI5Ax.js +0 -91
- package/dist/mime-AuIDUZPG.js +0 -149
- package/dist/mime-Cqg1jjia.js +0 -149
- package/dist/net-BEFkF-nI.js +0 -225
- package/dist/net-CNsUGiSw.js +0 -225
- package/dist/node-cli-Bu-InsO9.js +0 -1462
- package/dist/node-cli-DE7Pm7Fr.js +0 -1458
- package/dist/node-service-CumFZc9L.js +0 -67
- package/dist/node-service-DY1gG06I.js +0 -67
- package/dist/nodes-cli-B5aAExN0.js +0 -1350
- package/dist/nodes-cli-eKRqlKuO.js +0 -1346
- package/dist/nodes-screen-B3Sij1uT.js +0 -250
- package/dist/nodes-screen-DEvpoFmH.js +0 -250
- package/dist/note-CPFJCWJJ.js +0 -92
- package/dist/npm-registry-spec-BgMtTHvq.js +0 -786
- package/dist/npm-registry-spec-Dz3z1Zpd.js +0 -786
- package/dist/npm-resolution-Buio63BQ.js +0 -86
- package/dist/npm-resolution-gH1zHW2a.js +0 -86
- package/dist/onboard-BSf6qJWk.js +0 -647
- package/dist/onboard-V-SsZRk-.js +0 -649
- package/dist/onboard-auth-C_wHkop1.js +0 -207
- package/dist/onboard-auth-CkCBLvTg.js +0 -211
- package/dist/onboard-channels-DQTGPC18.js +0 -2548
- package/dist/onboard-channels-DSDQfR0u.js +0 -2547
- package/dist/onboard-helpers-Q7M6vdzh.js +0 -363
- package/dist/onboard-helpers-SCO3k5Y8.js +0 -364
- package/dist/onboard-remote-Co2hv1AD.js +0 -127
- package/dist/onboard-remote-Dl3BFSg2.js +0 -127
- package/dist/onboarding-B0bJfZ20.js +0 -588
- package/dist/onboarding-CeBR9OBi.js +0 -586
- package/dist/onboarding.finalize-BPgfWPB9.js +0 -404
- package/dist/onboarding.finalize-BmfLvNPJ.js +0 -402
- package/dist/onboarding.gateway-config-BL0Q7Wpg.js +0 -201
- package/dist/onboarding.gateway-config-D2QsXMYO.js +0 -195
- package/dist/outbound-CcaPcetn.js +0 -220
- package/dist/outbound-CeiW8z3a.js +0 -221
- package/dist/outbound-attachment-BIvFb3Is.js +0 -18
- package/dist/outbound-attachment-Bfm5-JYe.js +0 -18
- package/dist/outbound-attachment-CZ7zoYxB.js +0 -18
- package/dist/pairing-cli-CgX79ujL.js +0 -125
- package/dist/pairing-cli-DvbbXFgC.js +0 -129
- package/dist/pairing-labels-3wDxaApH.js +0 -9
- package/dist/pairing-labels-DCbWnbWk.js +0 -9
- package/dist/pairing-store-CdY7iRS0.js +0 -459
- package/dist/pairing-store-DykkYpQ7.js +0 -460
- package/dist/path-env-Cqo5LZmw.js +0 -89
- package/dist/path-env-GTM4HXCN.js +0 -89
- package/dist/path-safety-CXKAVpMp.js +0 -14
- package/dist/path-safety-DGB91qBk.js +0 -14
- package/dist/plugin-auto-enable-C6FPGg_-.js +0 -301
- package/dist/plugin-auto-enable-L8eOc8iC.js +0 -302
- package/dist/plugin-registry-CHlaWZD7.js +0 -33
- package/dist/plugin-registry-DQdMze4z.js +0 -33
- package/dist/plugin-sdk/auth/session-override.d.ts +0 -17
- package/dist/plugin-sdk/auto-reply/reply/directive-handling.auth.d.ts +0 -18
- package/dist/plugin-sdk/link-understanding/apply.d.ts +0 -10
- package/dist/plugin-sdk/link-understanding/defaults.d.ts +0 -2
- package/dist/plugin-sdk/link-understanding/detect.d.ts +0 -3
- package/dist/plugin-sdk/link-understanding/format.d.ts +0 -4
- package/dist/plugin-sdk/link-understanding/runner.d.ts +0 -11
- package/dist/plugin-sdk/media/input-files.d.ts +0 -95
- package/dist/plugin-sdk/media-understanding/apply.d.ts +0 -19
- package/dist/plugin-sdk/media-understanding/attachments.d.ts +0 -49
- package/dist/plugin-sdk/media-understanding/concurrency.d.ts +0 -1
- package/dist/plugin-sdk/media-understanding/defaults.d.ts +0 -11
- package/dist/plugin-sdk/media-understanding/errors.d.ts +0 -6
- package/dist/plugin-sdk/media-understanding/format.d.ts +0 -7
- package/dist/plugin-sdk/media-understanding/fs.d.ts +0 -1
- package/dist/plugin-sdk/media-understanding/output-extract.d.ts +0 -2
- package/dist/plugin-sdk/media-understanding/providers/anthropic/index.d.ts +0 -2
- package/dist/plugin-sdk/media-understanding/providers/deepgram/audio.d.ts +0 -1
- package/dist/plugin-sdk/media-understanding/providers/deepgram/index.d.ts +0 -2
- package/dist/plugin-sdk/media-understanding/providers/google/audio.d.ts +0 -1
- package/dist/plugin-sdk/media-understanding/providers/google/index.d.ts +0 -2
- package/dist/plugin-sdk/media-understanding/providers/google/video.d.ts +0 -3
- package/dist/plugin-sdk/media-understanding/providers/groq/index.d.ts +0 -2
- package/dist/plugin-sdk/media-understanding/providers/index.d.ts +0 -4
- package/dist/plugin-sdk/media-understanding/providers/minimax/index.d.ts +0 -2
- package/dist/plugin-sdk/media-understanding/providers/mistral/index.d.ts +0 -2
- package/dist/plugin-sdk/media-understanding/providers/moonshot/index.d.ts +0 -2
- package/dist/plugin-sdk/media-understanding/providers/moonshot/video.d.ts +0 -3
- package/dist/plugin-sdk/media-understanding/providers/openai/audio.d.ts +0 -1
- package/dist/plugin-sdk/media-understanding/providers/openai/index.d.ts +0 -2
- package/dist/plugin-sdk/media-understanding/providers/shared.d.ts +0 -20
- package/dist/plugin-sdk/media-understanding/providers/zai/index.d.ts +0 -2
- package/dist/plugin-sdk/media-understanding/resolve.d.ts +0 -44
- package/dist/plugin-sdk/media-understanding/runner.d.ts +0 -34
- package/dist/plugin-sdk/media-understanding/runner.entries.d.ts +0 -33
- package/dist/plugin-sdk/media-understanding/scope.d.ts +0 -9
- package/dist/plugin-sdk/media-understanding/types.d.ts +0 -59
- package/dist/plugin-sdk/media-understanding/video.d.ts +0 -2
- package/dist/plugin-sdk/utils/mask-api-key.d.ts +0 -1
- package/dist/plugin-sdk/utils/run-with-concurrency.d.ts +0 -11
- package/dist/plugins-7B167wIj.js +0 -453
- package/dist/plugins-BRHOfy1Z.js +0 -455
- package/dist/plugins-cli--I43zIaS.js +0 -797
- package/dist/plugins-cli-DIxMbY9I.js +0 -801
- package/dist/ports-BS8kQkd9.js +0 -96
- package/dist/ports-CAqyeQYZ.js +0 -316
- package/dist/ports-CTUgXF2d.js +0 -96
- package/dist/ports-DqfnVnCw.js +0 -370
- package/dist/preflight-CaRJtknt.js +0 -64
- package/dist/preflight-DeDRKMx4.js +0 -68
- package/dist/program-context-9dv7ClZz.js +0 -474
- package/dist/program-wVSvyiD-.js +0 -248
- package/dist/prompt-select-styled-BE_4W66Z.js +0 -1672
- package/dist/prompt-select-styled-BTPf06Os.js +0 -1669
- package/dist/provider-dispatcher-VZWITjmt.js +0 -660
- package/dist/provider-dispatcher-zYYGo00g.js +0 -659
- package/dist/push-apns-Cj0Ryn18.js +0 -713
- package/dist/push-apns-fFfYCqda.js +0 -711
- package/dist/pw-ai-CnN2sITD.js +0 -1908
- package/dist/pw-ai-fnX3cecw.js +0 -1911
- package/dist/qr-cli-CriPg41m.js +0 -349
- package/dist/qr-cli-DSURqD0D.js +0 -353
- package/dist/redact-snapshot-BecRL_h6.js +0 -2016
- package/dist/redact-snapshot-pTdzSrex.js +0 -2016
- package/dist/register.agent-B5_1XatO.js +0 -290
- package/dist/register.agent-Dba3CYyo.js +0 -1018
- package/dist/register.configure-DmwHGsPG.js +0 -128
- package/dist/register.configure-DrPlgBqB.js +0 -133
- package/dist/register.import-CPQqqdje.js +0 -31
- package/dist/register.import-D1UaH1QV.js +0 -29
- package/dist/register.maintenance-D76tiF4W.js +0 -501
- package/dist/register.maintenance-hUriFBfi.js +0 -499
- package/dist/register.message--VzmF3u4.js +0 -685
- package/dist/register.message-itNWUdvP.js +0 -689
- package/dist/register.onboard-Co8D908b.js +0 -93
- package/dist/register.onboard-q8JzWtuv.js +0 -97
- package/dist/register.setup-Djc6jZTc.js +0 -113
- package/dist/register.setup-hhPii4O7.js +0 -117
- package/dist/register.status-health-sessions-C1FhACQB.js +0 -668
- package/dist/register.status-health-sessions-DcUegHcH.js +0 -428
- package/dist/register.subclis-DAfihpBz.js +0 -267
- package/dist/replies-IpiCq1Ht.js +0 -136
- package/dist/replies-LSx_XhsP.js +0 -136
- package/dist/reply-D0CLqcBY.js +0 -13718
- package/dist/reply-Djq8ghfI.js +0 -13715
- package/dist/reply-directives-Cz7622Qx.js +0 -182
- package/dist/reply-directives-ssnaPNiU.js +0 -182
- package/dist/reply-payloads-CQMtrphw.js +0 -527
- package/dist/reply-prefix-CWcAZKhE.js +0 -37
- package/dist/reply-prefix-Drq7Pf3A.js +0 -37
- package/dist/resolve-route-B8uIc2H3.js +0 -249
- package/dist/resolve-route-C8ooNlI4.js +0 -249
- package/dist/response-prefix-template-DPOggmPO.js +0 -134
- package/dist/retry-BdhJlZQI.js +0 -77
- package/dist/run-main-B-Cb62fC.js +0 -306
- package/dist/runner-DUnmgjJ8.js +0 -2394
- package/dist/runner-EobZIrDt.js +0 -2394
- package/dist/secure-random-B5qmFc3N.js +0 -44
- package/dist/security-cli-05blEYyC.js +0 -482
- package/dist/security-cli-DYbt8duB.js +0 -487
- package/dist/send-7O3-bRtl.js +0 -547
- package/dist/send-9Huf62k3.js +0 -2245
- package/dist/send-B9mIJdUo.js +0 -547
- package/dist/send-Bj0RXr-a.js +0 -492
- package/dist/send-BzkAsn7K.js +0 -29
- package/dist/send-CXFhFLP9.js +0 -11
- package/dist/send-Ce_BDa8P.js +0 -349
- package/dist/send-ChvasRSh.js +0 -1779
- package/dist/send-Cl5BhbnF.js +0 -426
- package/dist/send-CpebTvM6.js +0 -374
- package/dist/send-DWf7BCPe.js +0 -492
- package/dist/send-DX8QSuSI.js +0 -1174
- package/dist/send-DZRn6PT2.js +0 -332
- package/dist/send-Dd2_MykI.js +0 -2245
- package/dist/send-IJaUAa8H.js +0 -1776
- package/dist/send-vvZXksNU.js +0 -349
- package/dist/server-BrzR9JmX.js +0 -206
- package/dist/server-_h27-uP_.js +0 -202
- package/dist/server-lifecycle-CUdA6Far.js +0 -2437
- package/dist/server-lifecycle-DQZWL8iP.js +0 -2437
- package/dist/server-node-events-DgB1z2Cx.js +0 -392
- package/dist/server-node-events-DtvPfM1I.js +0 -396
- package/dist/service-9le8AnC-.js +0 -670
- package/dist/service-Drb0kx6I.js +0 -670
- package/dist/session-BIAOl5QR.js +0 -170
- package/dist/session-Wu00pCn_.js +0 -170
- package/dist/session-cost-usage-7plmOKbs.js +0 -627
- package/dist/session-cost-usage-CPFxBFUg.js +0 -627
- package/dist/session-dirs-CfIrIJxG.js +0 -318
- package/dist/session-dirs-DlPpWt5Q.js +0 -318
- package/dist/session-utils-Sd9w4vc1.js +0 -622
- package/dist/session-utils-iL47hYmZ.js +0 -622
- package/dist/sessions-6pKQ3gN3.js +0 -247
- package/dist/sessions-ZRmCDdj1.js +0 -2569
- package/dist/shell-env-DYZq9PqC.js +0 -163
- package/dist/ssrf-B-rF_tZB.js +0 -183
- package/dist/ssrf-DJW14Wkh.js +0 -183
- package/dist/status-CTRQCXRj.js +0 -1979
- package/dist/status-Y67xsH93.js +0 -1983
- package/dist/status.update-DlBReI5-.js +0 -449
- package/dist/status.update-v7fEQ7R9.js +0 -449
- package/dist/store-B5989JkX.js +0 -64
- package/dist/store-BgtgYJoX.js +0 -53
- package/dist/store-DCrrxHyS.js +0 -2571
- package/dist/store-Ql6vAcsg.js +0 -64
- package/dist/subagent-registry-BGknZEUI.js +0 -4856
- package/dist/subagent-registry-CWeRBjfn.js +0 -4854
- package/dist/subsystem-Ct6qOOqZ.js +0 -1079
- package/dist/subsystem-PQ64_nsu.js +0 -1136
- package/dist/system-cli-CmO-4Rju.js +0 -77
- package/dist/system-cli-VBsa18K6.js +0 -73
- package/dist/systemd-CqFpK30Y.js +0 -547
- package/dist/systemd-fK9AV5bP.js +0 -547
- package/dist/systemd-hints-D3rr0j14.js +0 -278
- package/dist/systemd-hints-DNOSRaqA.js +0 -278
- package/dist/systemd-linger-B907NVVy.js +0 -75
- package/dist/systemd-linger-wYksBbM7.js +0 -75
- package/dist/tables-Boxa9MJH.js +0 -55
- package/dist/tables-CO_kxD0e.js +0 -55
- package/dist/tables-WZp8Vt9n.js +0 -55
- package/dist/tailnet-CfZhpSnt.js +0 -40
- package/dist/tailnet-D0NV0tRJ.js +0 -40
- package/dist/tailscale-B__xvMjA.js +0 -230
- package/dist/tailscale-q_ZrxUCc.js +0 -230
- package/dist/targets-B4rMyQFJ.js +0 -53
- package/dist/targets-BHYLCv06.js +0 -2534
- package/dist/targets-BjWhDMJM.js +0 -650
- package/dist/targets-BnpMZZC_.js +0 -120
- package/dist/targets-CHwGDIgO.js +0 -650
- package/dist/targets-DIDKlfKI.js +0 -220
- package/dist/targets-bqjVeCnF.js +0 -2535
- package/dist/targets-mqj9GNg1.js +0 -53
- package/dist/tool-display-C0hpLmkw.js +0 -785
- package/dist/tool-display-CQTRHo3Z.js +0 -785
- package/dist/tool-images-BYY11Gw3.js +0 -263
- package/dist/tool-images-CnJ0R8Fo.js +0 -263
- package/dist/trash-C0mjnHuW.js +0 -125
- package/dist/trash-Cgwc9mLD.js +0 -125
- package/dist/tui-9cJnR1dN.js +0 -3282
- package/dist/tui-BR3egaFJ.js +0 -3282
- package/dist/tui-cli-BYpkhE6J.js +0 -66
- package/dist/tui-cli-DndeZyup.js +0 -62
- package/dist/update-BJVdkzk7.js +0 -349
- package/dist/update-DjI6KTA5.js +0 -349
- package/dist/update-cli-B7Rl2Qr2.js +0 -1146
- package/dist/update-cli-CFk_jqUm.js +0 -1148
- package/dist/usage-CFv4a1Nf.js +0 -5448
- package/dist/voice-credentials-D59RcLbl.js +0 -45
- package/dist/voice-credentials-fjA7GShF.js +0 -45
- package/dist/web-Bs1td8Qw.js +0 -79
- package/dist/web-CSiw--Px.js +0 -3070
- package/dist/web-jRTtDiNf.js +0 -74
- package/dist/webhooks-cli-0yQha2yj.js +0 -334
- package/dist/webhooks-cli-ula0bTX-.js +0 -330
- package/dist/whatsapp-actions-3NdzsNg1.js +0 -130
- package/dist/whatsapp-actions-y_1vjkYY.js +0 -125
- package/dist/workspace-BT3X-qCZ.js +0 -449
- package/dist/workspace-D5hHXubL.js +0 -447
- package/dist/zod-schema-CbqZAIYy.js +0 -2696
- package/dist/zod-schema-YGQJEcnj.js +0 -2696
- /package/dist/{account-lookup-BOCzCnir.js → account-lookup-CIY_RKhi.js} +0 -0
- /package/dist/{account-lookup-C0ndrpt-.js → account-lookup-DGscKBsr.js} +0 -0
- /package/dist/{agent-helpers-eEHy5uX2.js → agent-helpers-D83kfcF9.js} +0 -0
- /package/dist/{agents.config-BgDBcY4h.js → agents.config-BPe_hkMn.js} +0 -0
- /package/dist/{api-Cd_7aESj.js → api-D8QQo5bc.js} +0 -0
- /package/dist/{api-DJ_oWYus.js → api-GywrnwRm.js} +0 -0
- /package/dist/{argv-BY8EVMTP.js → argv-DW4MYBdJ.js} +0 -0
- /package/dist/{bindings-Dr0bGRst.js → bindings-BpL4pISF.js} +0 -0
- /package/dist/{brew-CmTYeZk1.js → brew-CBsS-Vq1.js} +0 -0
- /package/dist/{brew-V4lMBeE3.js → brew-Clw9vXhE.js} +0 -0
- /package/dist/{chat-envelope-CrM0X4sl.js → chat-envelope-CY1yvCc-.js} +0 -0
- /package/dist/{chat-envelope-BIujl9Cj.js → chat-envelope-DUMcMMB2.js} +0 -0
- /package/dist/{chat-type-CH3W-zKy.js → chat-type-BKe459rw.js} +0 -0
- /package/dist/{chat-type-DyovJwCt.js → chat-type-CE6cJOyt.js} +0 -0
- /package/dist/{cleanup-utils-CNwlTKyR.js → cleanup-utils-365rf8YN.js} +0 -0
- /package/dist/{cleanup-utils-gNzIs9yk.js → cleanup-utils-rqUXvR3Z.js} +0 -0
- /package/dist/{cli-name-3MdfbvIR.js → cli-name-7Gb97Vyl.js} +0 -0
- /package/dist/{cli-name-CRLBidNP.js → cli-name-Yv30OygA.js} +0 -0
- /package/dist/{cli-utils-5ZIfXAfM.js → cli-utils-5W6ugvN5.js} +0 -0
- /package/dist/{cli-utils-BUOtyfnU.js → cli-utils-CZJacPS2.js} +0 -0
- /package/dist/{client-D5m46AuY.js → client-DQ-Nh-rV.js} +0 -0
- /package/dist/{client-DFyI5I0n.js → client-Fi2k2G9Z.js} +0 -0
- /package/dist/{command-options-Cn2fc1Of.js → command-options-CXHYeogR.js} +0 -0
- /package/dist/{command-options-D2nN4AXX.js → command-options-Cx6evn0x.js} +0 -0
- /package/dist/{config-eval-CU2G7a83.js → config-eval-DU_v_3lY.js} +0 -0
- /package/dist/{config-eval-BCKpAS_K.js → config-eval-V26Gl6eZ.js} +0 -0
- /package/dist/{constants-CRGAZ2ow.js → constants-C7gkSGRE.js} +0 -0
- /package/dist/{constants-BAZuhSRm.js → constants-DAiBiWlI.js} +0 -0
- /package/dist/{constants-DoYLsBmv.js → constants-DOnQraOP.js} +0 -0
- /package/dist/{constants-BBVTjb1j.js → constants-DQxqJVLu.js} +0 -0
- /package/dist/{credentials-DMAWNZdV.js → credentials-BHWUBHMd.js} +0 -0
- /package/dist/{credentials-Dmc3H-jd.js → credentials-DG0tD6-e.js} +0 -0
- /package/dist/{daemon-runtime-CzFI2dPw.js → daemon-runtime-B7Tmba31.js} +0 -0
- /package/dist/{daemon-runtime-aQhinwSL.js → daemon-runtime-KyXiP2ib.js} +0 -0
- /package/dist/{dangerous-name-matching-BlTBBZns.js → dangerous-name-matching-B4MRPcn-.js} +0 -0
- /package/dist/{dangerous-tools-BRmbBvRf.js → dangerous-tools-CIPZZJoN.js} +0 -0
- /package/dist/{dangerous-tools-E1i3IoxZ.js → dangerous-tools-D-GNbdpV.js} +0 -0
- /package/dist/{fetch-timeout-DBRRPNBi.js → fetch-timeout-CPe2rPLq.js} +0 -0
- /package/dist/{fetch-timeout-l_6RdoMw.js → fetch-timeout-DkT3EnRA.js} +0 -0
- /package/dist/{file-identity-BnGA6wyc.js → file-identity-C8MIb5lb.js} +0 -0
- /package/dist/{format-duration-B-Uv5nOi.js → format-duration-Cd7SCued.js} +0 -0
- /package/dist/{format-duration-D1M3Zxu6.js → format-duration-Oj8pTbYL.js} +0 -0
- /package/dist/{format-relative-Cywx6ldk.js → format-relative-8dpVUfzZ.js} +0 -0
- /package/dist/{format-relative-DcQZUAYl.js → format-relative-BMNeqaxW.js} +0 -0
- /package/dist/{health-format-CL2Xq92A.js → health-format-CwLlmYSK.js} +0 -0
- /package/dist/{health-format-CVgQD-z9.js → health-format-CycFH5Sj.js} +0 -0
- /package/dist/{heartbeat-wake-DLxQm6-U.js → heartbeat-wake-D6Lt5YUk.js} +0 -0
- /package/dist/{heartbeat-wake-DjsTDzF3.js → heartbeat-wake-uZkAP-tP.js} +0 -0
- /package/dist/{help-format-DM6-OBt-.js → help-format-B0YIbosn.js} +0 -0
- /package/dist/{help-format-CJQ7APRn.js → help-format-GeOPYD_A.js} +0 -0
- /package/dist/{helpers-BER76F_2.js → helpers-6_MYSJEW.js} +0 -0
- /package/dist/{helpers-DSMIGYx2.js → helpers-703bXVlF.js} +0 -0
- /package/dist/{helpers-D-r6yhnI.js → helpers-p_u0Gnj_.js} +0 -0
- /package/dist/{input-provenance-BgfeDgck.js → input-provenance-C4nlFv5Y.js} +0 -0
- /package/dist/{input-provenance-xUsSMOsz.js → input-provenance-duDehu0D.js} +0 -0
- /package/dist/{ip-BAhS4rY2.js → ip-BFJnbRh9.js} +0 -0
- /package/dist/{ip-BUhsZdJu.js → ip-D0zgNmBV.js} +0 -0
- /package/dist/{is-main-BmHYGRhd.js → is-main-BE1Jih91.js} +0 -0
- /package/dist/{json-file-B5WEJJye.js → json-file-CsV03dh-.js} +0 -0
- /package/dist/{json-file-Dbg7nZg1.js → json-file-CtQKYRLl.js} +0 -0
- /package/dist/{json-files-BFGbyEzL.js → json-files-B2yMsppu.js} +0 -0
- /package/dist/{json-files-CfhnuGaC.js → json-files-BYH8U7Mx.js} +0 -0
- /package/dist/{lanes-4FoQemog.js → lanes-BWL_LwXG.js} +0 -0
- /package/dist/{lanes-BhdzrAIa.js → lanes-cHJ5arWg.js} +0 -0
- /package/dist/{links-CwTlzaPe.js → links-BFtUmGLH.js} +0 -0
- /package/dist/{links-D5vtq30Q.js → links-BNjLUJ9U.js} +0 -0
- /package/dist/{location-50gaJF5Z.js → location-BC45kOxc.js} +0 -0
- /package/dist/{location-Qo8Ii1zo.js → location-BUhzov-a.js} +0 -0
- /package/dist/{logger-IA_Dr_BT.js → logger-1QWMF9Hc.js} +0 -0
- /package/dist/{logger-nEdVxm5D.js → logger-BWMPnILd.js} +0 -0
- /package/dist/{logger-O6JX52kK.js → logger-Liu31nEU.js} +0 -0
- /package/dist/{logging-FctZEleJ.js → logging-CtbzyUjs.js} +0 -0
- /package/dist/{logging-BiuZwq5D.js → logging-DJFQvfGD.js} +0 -0
- /package/dist/{logging-Bs1VqVFL.js → logging-JiRrQn2_.js} +0 -0
- /package/dist/{logging-JZEg5nDp.js → logging-kuFzZMsG.js} +0 -0
- /package/dist/{message-channel-tuc9CdEw.js → message-channel-DOyKgFu8.js} +0 -0
- /package/dist/{mutable-allowlist-detectors-CtKavajp.js → mutable-allowlist-detectors-4m-Kc8Kn.js} +0 -0
- /package/dist/{mutable-allowlist-detectors-TCG6mnbz.js → mutable-allowlist-detectors-BECxOoKX.js} +0 -0
- /package/dist/{onboard-config-BxfgUqk6.js → onboard-config-C9so5ggC.js} +0 -0
- /package/dist/{onboard-config-DNzlo8Cg.js → onboard-config-oXID97rS.js} +0 -0
- /package/dist/{parse-log-line-CT0H1-oQ.js → parse-log-line-BtFI563v.js} +0 -0
- /package/dist/{parse-log-line-pij_xhtE.js → parse-log-line-COptqka7.js} +0 -0
- /package/dist/{parse-timeout-CvODy9RC.js → parse-timeout-BpphuwYl.js} +0 -0
- /package/dist/{path-guards-DOpzcMXz.js → path-guards-DJteVA0d.js} +0 -0
- /package/dist/{path-guards-DipYoPVw.js → path-guards-DVRUJZVN.js} +0 -0
- /package/dist/plugin-sdk/{media-understanding → stt}/providers/google/inline-data.d.ts +0 -0
- /package/dist/{plugins-allowlist-Bcqe9Gd8.js → plugins-allowlist-Clt6dsY6.js} +0 -0
- /package/dist/{polls-DQrR-qT3.js → polls-C5xr-8pM.js} +0 -0
- /package/dist/{polls-ybwcqkWt.js → polls-DXd67TD8.js} +0 -0
- /package/dist/{ports-lsof-CDyv5GJd.js → ports-lsof-xWMTWvMQ.js} +0 -0
- /package/dist/{process-scoped-map-BwUkYFQV.js → process-scoped-map-C7KeadUK.js} +0 -0
- /package/dist/{process-scoped-map-_zxf_kLz.js → process-scoped-map-CQ1C5MbT.js} +0 -0
- /package/dist/{program-context-CG-t6Yp-.js → program-context-LuBAPt4y.js} +0 -0
- /package/dist/{progress-DRLmcFiG.js → progress-C-hTn2yV.js} +0 -0
- /package/dist/{progress-BOdRbOHD.js → progress-ChmZpgvt.js} +0 -0
- /package/dist/{prompt-WEkXwIMT.js → prompt-BXeXEH0o.js} +0 -0
- /package/dist/{prompt-BRGfic91.js → prompt-C31r0R5I.js} +0 -0
- /package/dist/{prompt-style-B4Cq4PyQ.js → prompt-style-BcM-VSMx.js} +0 -0
- /package/dist/{proxy-BMJL0Qog.js → proxy-dRhp8Ykw.js} +0 -0
- /package/dist/{pw-ai-state-CwXeO5d0.js → pw-ai-state-CjfcKQoO.js} +0 -0
- /package/dist/{pw-ai-state-DaISdsXY.js → pw-ai-state-DfjyEttO.js} +0 -0
- /package/dist/{redact-gXuh8MFk.js → redact-D975G-N6.js} +0 -0
- /package/dist/{redact-CqWx9rpK.js → redact-Dx1Fue21.js} +0 -0
- /package/dist/{redact-identifier-BJOQDEj0.js → redact-identifier-Bqj_YiPd.js} +0 -0
- /package/dist/{redact-identifier-DR54qsoT.js → redact-identifier-HyK89Sod.js} +0 -0
- /package/dist/{remoteclaw-root-CgNyrbxc.js → remoteclaw-root-B1iQBmbi.js} +0 -0
- /package/dist/{remoteclaw-root-u8dAeHID.js → remoteclaw-root-BmYwCzQN.js} +0 -0
- /package/dist/{render-CDCvpfhh.js → render-BvFSFJZW.js} +0 -0
- /package/dist/{render-CJl4GK1B.js → render-flG67HhW.js} +0 -0
- /package/dist/{response-prefix-template-D3ZcJP4E.js → response-prefix-template-DDvbVpx6.js} +0 -0
- /package/dist/{retry-cXXk2j6_.js → retry-CByUYDAZ.js} +0 -0
- /package/dist/{retry-B19gMxS7.js → retry-oNE3cBeG.js} +0 -0
- /package/dist/{runtime-guard-BS55uiSW.js → runtime-guard-CqNug-FG.js} +0 -0
- /package/dist/{runtime-guard-CK80eucm.js → runtime-guard-DAHXelsb.js} +0 -0
- /package/dist/{runtime-status-BhW7hP_U.js → runtime-status-CM4rzyfO.js} +0 -0
- /package/dist/{runtime-status-hFVEC3wO.js → runtime-status-DJYthOLz.js} +0 -0
- /package/dist/{secret-equal-CJzes24Z.js → secret-equal-1-dwi8DL.js} +0 -0
- /package/dist/{secret-equal-CQAmGfGc.js → secret-equal-CXJEZiWb.js} +0 -0
- /package/dist/{secure-random-B3f7Ri2X.js → secure-random-Ba4Y5xG5.js} +0 -0
- /package/dist/{secure-random-BkZFG9cd.js → secure-random-C6AVByhV.js} +0 -0
- /package/dist/{stagger-B-_Wnofy.js → stagger-CjeisVRF.js} +0 -0
- /package/dist/{stagger-B2ORDHsP.js → stagger-vkvpUmOz.js} +0 -0
- /package/dist/{status-C6YNwimj.js → status-DNLnVQZ4.js} +0 -0
- /package/dist/{status-yrDGXYZM.js → status-DZhl73dM.js} +0 -0
- /package/dist/{strip-inbound-meta-0cvL6itU.js → strip-inbound-meta-C3Cwe_ZO.js} +0 -0
- /package/dist/{strip-inbound-meta-DjKcSFaW.js → strip-inbound-meta-DuDjnGjC.js} +0 -0
- /package/dist/{table-ByMyHTh_.js → table-B9zSN_7D.js} +0 -0
- /package/dist/{table-C-dba-5-.js → table-j8Ayarot.js} +0 -0
- /package/dist/{target-errors-DJVRKFcU.js → target-errors-ChjvOMuV.js} +0 -0
- /package/dist/{target-errors-GZXDqlUu.js → target-errors-Dn4aykSV.js} +0 -0
- /package/dist/{targets-B_d_1z3N.js → targets-BtGRUQMa.js} +0 -0
- /package/dist/{targets-DOJXjN1U.js → targets-CE4AYRI9.js} +0 -0
- /package/dist/{targets-D01MJGnh.js → targets-DlufWCmy.js} +0 -0
- /package/dist/{targets-WSwPflb6.js → targets-akvAerZF.js} +0 -0
- /package/dist/{text-format-DarxU3JH.js → text-format-VSogn9Yq.js} +0 -0
- /package/dist/{text-format-mr5bZq0f.js → text-format-xeHt9ywT.js} +0 -0
- /package/dist/{thinking-BqJmU6Zp.js → thinking-B171Rc3-.js} +0 -0
- /package/dist/{tokens-C8yGxAcR.js → tokens-B-jmvNR9.js} +0 -0
- /package/dist/{tokens-DAFBx5qr.js → tokens-kTLGxaAF.js} +0 -0
- /package/dist/{usage-BXi79Rq6.js → usage-CRJFqYf8.js} +0 -0
- /package/dist/{usage-C1lHaofV.js → usage-Txvb0Iq2.js} +0 -0
- /package/dist/{usage-format-CD5jsZY1.js → usage-format-70DvrseE.js} +0 -0
- /package/dist/{usage-format-CRVpDVj1.js → usage-format-Bs8DkQtr.js} +0 -0
- /package/dist/{widearea-dns-C-0P7TRi.js → widearea-dns-BOgHvO4O.js} +0 -0
- /package/dist/{widearea-dns-DFZMcfLf.js → widearea-dns-CGhfClCr.js} +0 -0
- /package/dist/{workspace-BJCKO8Ns.js → workspace-DhUqtMK_.js} +0 -0
- /package/dist/{wsl-kFaeW76c.js → wsl-Cs-gowFJ.js} +0 -0
|
@@ -1,2521 +0,0 @@
|
|
|
1
|
-
import { i as defaultRuntime } from "./ansi-DtaiOnt1.js";
|
|
2
|
-
import { u as resolveThreadSessionKeys } from "./session-key-CgKWfjoZ.js";
|
|
3
|
-
import { l as resolveSessionAgentId } from "./agent-scope-_ND_-bJy.js";
|
|
4
|
-
import { c as normalizeMessageChannel, f as GATEWAY_CLIENT_MODES, n as isDeliverableMessageChannel, p as GATEWAY_CLIENT_NAMES } from "./message-channel-FMNRI5Ax.js";
|
|
5
|
-
import { t as parseDiscordTarget } from "./targets-BjWhDMJM.js";
|
|
6
|
-
import { i as loadConfig } from "./config-CAa0rZSx.js";
|
|
7
|
-
import { t as getAgentScopedMediaLocalRoots } from "./local-roots-CrJ_Jv_G.js";
|
|
8
|
-
import { n as extensionForMime } from "./mime-Cqg1jjia.js";
|
|
9
|
-
import { C as resolveDiscordAccount, a as isWhatsAppGroupJid, h as resolveSlackAccount, n as listChannelPlugins, o as normalizeWhatsAppTarget, r as normalizeChannelId, t as getChannelPlugin } from "./plugins-BRHOfy1Z.js";
|
|
10
|
-
import { d as normalizeChannelTargetInput, f as normalizeTargetForProvider, u as buildTargetResolverSignature } from "./reply-payloads-CQMtrphw.js";
|
|
11
|
-
import { r as resolveOutboundTarget } from "./targets-bqjVeCnF.js";
|
|
12
|
-
import { t as parseSlackTarget } from "./targets-B4rMyQFJ.js";
|
|
13
|
-
import { c as resolveSignalRecipient, l as resolveSignalSender, o as looksLikeUuid, r as normalizeAllowListLower, s as resolveSignalPeerId } from "./loader-BapIdJyx.js";
|
|
14
|
-
import { t as createSlackWebClient } from "./client-D5m46AuY.js";
|
|
15
|
-
import { m as resolveStorePath } from "./chat-envelope-BIujl9Cj.js";
|
|
16
|
-
import { N as appendAssistantMessageToSessionTranscript, a as recordSessionMetaFromInbound } from "./store-DCrrxHyS.js";
|
|
17
|
-
import { a as randomIdempotencyKey, r as callGatewayLeastPrivilege } from "./call-BrTmlOx3.js";
|
|
18
|
-
import { n as normalizePollInput } from "./polls-DQrR-qT3.js";
|
|
19
|
-
import { i as loadWebMedia } from "./ir-CaxTklDC.js";
|
|
20
|
-
import { d as readStringParam, l as readStringArrayParam, s as readNumberParam } from "./common-B67cBSew.js";
|
|
21
|
-
import { t as parseReplyDirectives } from "./reply-directives-ssnaPNiU.js";
|
|
22
|
-
import { i as resolveTelegramTargetChatType, r as parseTelegramTarget } from "./targets-B_d_1z3N.js";
|
|
23
|
-
import { r as unknownTargetError, t as ambiguousTargetError } from "./target-errors-DJVRKFcU.js";
|
|
24
|
-
import { t as buildAgentSessionKey } from "./resolve-route-C8ooNlI4.js";
|
|
25
|
-
import { E as buildTelegramGroupPeerId } from "./send-ChvasRSh.js";
|
|
26
|
-
import { n as resolveMessageChannelSelection, t as listConfiguredMessageChannels } from "./channel-selection-DW21dXB1.js";
|
|
27
|
-
import { o as normalizeReplyPayloadsForDelivery, s as throwIfAborted, t as deliverOutboundPayloads } from "./deliver-CDcL8ok6.js";
|
|
28
|
-
import { a as normalizeIMessageHandle, o as parseIMessageTarget } from "./send-DWf7BCPe.js";
|
|
29
|
-
import { fileURLToPath } from "node:url";
|
|
30
|
-
import path from "node:path";
|
|
31
|
-
import fs from "node:fs/promises";
|
|
32
|
-
import { Container, Separator, TextDisplay } from "@buape/carbon";
|
|
33
|
-
|
|
34
|
-
//#region src/infra/outbound/directory-cache.ts
|
|
35
|
-
function buildDirectoryCacheKey(key) {
|
|
36
|
-
const signature = key.signature ?? "default";
|
|
37
|
-
return `${key.channel}:${key.accountId ?? "default"}:${key.kind}:${key.source}:${signature}`;
|
|
38
|
-
}
|
|
39
|
-
var DirectoryCache = class {
|
|
40
|
-
constructor(ttlMs, maxSize = 2e3) {
|
|
41
|
-
this.ttlMs = ttlMs;
|
|
42
|
-
this.cache = /* @__PURE__ */ new Map();
|
|
43
|
-
this.lastConfigRef = null;
|
|
44
|
-
this.maxSize = Math.max(1, Math.floor(maxSize));
|
|
45
|
-
}
|
|
46
|
-
get(key, cfg) {
|
|
47
|
-
this.resetIfConfigChanged(cfg);
|
|
48
|
-
this.pruneExpired(Date.now());
|
|
49
|
-
const entry = this.cache.get(key);
|
|
50
|
-
if (!entry) return;
|
|
51
|
-
return entry.value;
|
|
52
|
-
}
|
|
53
|
-
set(key, value, cfg) {
|
|
54
|
-
this.resetIfConfigChanged(cfg);
|
|
55
|
-
const now = Date.now();
|
|
56
|
-
this.pruneExpired(now);
|
|
57
|
-
if (this.cache.has(key)) this.cache.delete(key);
|
|
58
|
-
this.cache.set(key, {
|
|
59
|
-
value,
|
|
60
|
-
fetchedAt: now
|
|
61
|
-
});
|
|
62
|
-
this.evictToMaxSize();
|
|
63
|
-
}
|
|
64
|
-
clearMatching(match) {
|
|
65
|
-
for (const key of this.cache.keys()) if (match(key)) this.cache.delete(key);
|
|
66
|
-
}
|
|
67
|
-
clear(cfg) {
|
|
68
|
-
this.cache.clear();
|
|
69
|
-
if (cfg) this.lastConfigRef = cfg;
|
|
70
|
-
}
|
|
71
|
-
resetIfConfigChanged(cfg) {
|
|
72
|
-
if (this.lastConfigRef && this.lastConfigRef !== cfg) this.cache.clear();
|
|
73
|
-
this.lastConfigRef = cfg;
|
|
74
|
-
}
|
|
75
|
-
pruneExpired(now) {
|
|
76
|
-
if (this.ttlMs <= 0) return;
|
|
77
|
-
for (const [cacheKey, entry] of this.cache.entries()) if (now - entry.fetchedAt > this.ttlMs) this.cache.delete(cacheKey);
|
|
78
|
-
}
|
|
79
|
-
evictToMaxSize() {
|
|
80
|
-
while (this.cache.size > this.maxSize) {
|
|
81
|
-
const oldestKey = this.cache.keys().next().value;
|
|
82
|
-
if (typeof oldestKey !== "string") break;
|
|
83
|
-
this.cache.delete(oldestKey);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
//#endregion
|
|
89
|
-
//#region src/infra/outbound/target-resolver.ts
|
|
90
|
-
async function resolveChannelTarget(params) {
|
|
91
|
-
return resolveMessagingTarget(params);
|
|
92
|
-
}
|
|
93
|
-
const directoryCache = new DirectoryCache(1800 * 1e3);
|
|
94
|
-
function resetDirectoryCache(params) {
|
|
95
|
-
if (!params?.channel) {
|
|
96
|
-
directoryCache.clear();
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
const channelKey = params.channel;
|
|
100
|
-
const accountKey = params.accountId ?? "default";
|
|
101
|
-
directoryCache.clearMatching((key) => {
|
|
102
|
-
if (!key.startsWith(`${channelKey}:`)) return false;
|
|
103
|
-
if (!params.accountId) return true;
|
|
104
|
-
return key.startsWith(`${channelKey}:${accountKey}:`);
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
function normalizeQuery(value) {
|
|
108
|
-
return value.trim().toLowerCase();
|
|
109
|
-
}
|
|
110
|
-
function stripTargetPrefixes(value) {
|
|
111
|
-
return value.replace(/^(channel|user):/i, "").replace(/^[@#]/, "").trim();
|
|
112
|
-
}
|
|
113
|
-
function formatTargetDisplay(params) {
|
|
114
|
-
const plugin = getChannelPlugin(params.channel);
|
|
115
|
-
if (plugin?.messaging?.formatTargetDisplay) return plugin.messaging.formatTargetDisplay({
|
|
116
|
-
target: params.target,
|
|
117
|
-
display: params.display,
|
|
118
|
-
kind: params.kind
|
|
119
|
-
});
|
|
120
|
-
const trimmedTarget = params.target.trim();
|
|
121
|
-
const lowered = trimmedTarget.toLowerCase();
|
|
122
|
-
const display = params.display?.trim();
|
|
123
|
-
const kind = params.kind ?? (lowered.startsWith("user:") ? "user" : lowered.startsWith("channel:") ? "group" : void 0);
|
|
124
|
-
if (display) {
|
|
125
|
-
if (display.startsWith("#") || display.startsWith("@")) return display;
|
|
126
|
-
if (kind === "user") return `@${display}`;
|
|
127
|
-
if (kind === "group" || kind === "channel") return `#${display}`;
|
|
128
|
-
return display;
|
|
129
|
-
}
|
|
130
|
-
if (!trimmedTarget) return trimmedTarget;
|
|
131
|
-
if (trimmedTarget.startsWith("#") || trimmedTarget.startsWith("@")) return trimmedTarget;
|
|
132
|
-
const channelPrefix = `${params.channel}:`;
|
|
133
|
-
const withoutPrefix = (trimmedTarget.toLowerCase().startsWith(channelPrefix) ? trimmedTarget.slice(channelPrefix.length) : trimmedTarget).replace(/^telegram:/i, "");
|
|
134
|
-
if (/^channel:/i.test(withoutPrefix)) return `#${withoutPrefix.replace(/^channel:/i, "")}`;
|
|
135
|
-
if (/^user:/i.test(withoutPrefix)) return `@${withoutPrefix.replace(/^user:/i, "")}`;
|
|
136
|
-
return withoutPrefix;
|
|
137
|
-
}
|
|
138
|
-
function preserveTargetCase(channel, raw, normalized) {
|
|
139
|
-
if (channel !== "slack") return normalized;
|
|
140
|
-
const trimmed = raw.trim();
|
|
141
|
-
if (/^channel:/i.test(trimmed) || /^user:/i.test(trimmed)) return trimmed;
|
|
142
|
-
if (trimmed.startsWith("#")) return `channel:${trimmed.slice(1).trim()}`;
|
|
143
|
-
if (trimmed.startsWith("@")) return `user:${trimmed.slice(1).trim()}`;
|
|
144
|
-
return trimmed;
|
|
145
|
-
}
|
|
146
|
-
function detectTargetKind(channel, raw, preferred) {
|
|
147
|
-
if (preferred) return preferred;
|
|
148
|
-
const trimmed = raw.trim();
|
|
149
|
-
if (!trimmed) return "group";
|
|
150
|
-
if (trimmed.startsWith("@") || /^<@!?/.test(trimmed) || /^user:/i.test(trimmed)) return "user";
|
|
151
|
-
if (trimmed.startsWith("#") || /^channel:/i.test(trimmed)) return "group";
|
|
152
|
-
if ((channel === "bluebubbles" || channel === "imessage") && /^\+?\d{6,}$/.test(trimmed)) return "user";
|
|
153
|
-
return "group";
|
|
154
|
-
}
|
|
155
|
-
function normalizeDirectoryEntryId(channel, entry) {
|
|
156
|
-
return normalizeTargetForProvider(channel, entry.id) ?? entry.id.trim();
|
|
157
|
-
}
|
|
158
|
-
function matchesDirectoryEntry(params) {
|
|
159
|
-
const query = normalizeQuery(params.query);
|
|
160
|
-
if (!query) return false;
|
|
161
|
-
return [
|
|
162
|
-
stripTargetPrefixes(normalizeDirectoryEntryId(params.channel, params.entry)),
|
|
163
|
-
params.entry.name ? stripTargetPrefixes(params.entry.name) : "",
|
|
164
|
-
params.entry.handle ? stripTargetPrefixes(params.entry.handle) : ""
|
|
165
|
-
].map((value) => normalizeQuery(value)).filter(Boolean).some((value) => value === query || value.includes(query));
|
|
166
|
-
}
|
|
167
|
-
function resolveMatch(params) {
|
|
168
|
-
const matches = params.entries.filter((entry) => matchesDirectoryEntry({
|
|
169
|
-
channel: params.channel,
|
|
170
|
-
entry,
|
|
171
|
-
query: params.query
|
|
172
|
-
}));
|
|
173
|
-
if (matches.length === 0) return { kind: "none" };
|
|
174
|
-
if (matches.length === 1) return {
|
|
175
|
-
kind: "single",
|
|
176
|
-
entry: matches[0]
|
|
177
|
-
};
|
|
178
|
-
return {
|
|
179
|
-
kind: "ambiguous",
|
|
180
|
-
entries: matches
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
|
-
async function listDirectoryEntries(params) {
|
|
184
|
-
const directory = getChannelPlugin(params.channel)?.directory;
|
|
185
|
-
if (!directory) return [];
|
|
186
|
-
const runtime = params.runtime ?? defaultRuntime;
|
|
187
|
-
const useLive = params.source === "live";
|
|
188
|
-
const fn = params.kind === "user" ? useLive ? directory.listPeersLive ?? directory.listPeers : directory.listPeers : useLive ? directory.listGroupsLive ?? directory.listGroups : directory.listGroups;
|
|
189
|
-
if (!fn) return [];
|
|
190
|
-
return await fn({
|
|
191
|
-
cfg: params.cfg,
|
|
192
|
-
accountId: params.accountId ?? void 0,
|
|
193
|
-
query: params.query ?? void 0,
|
|
194
|
-
limit: void 0,
|
|
195
|
-
runtime
|
|
196
|
-
});
|
|
197
|
-
}
|
|
198
|
-
async function getDirectoryEntries(params) {
|
|
199
|
-
const signature = buildTargetResolverSignature(params.channel);
|
|
200
|
-
const cacheKey = buildDirectoryCacheKey({
|
|
201
|
-
channel: params.channel,
|
|
202
|
-
accountId: params.accountId,
|
|
203
|
-
kind: params.kind,
|
|
204
|
-
source: "cache",
|
|
205
|
-
signature
|
|
206
|
-
});
|
|
207
|
-
const cached = directoryCache.get(cacheKey, params.cfg);
|
|
208
|
-
if (cached) return cached;
|
|
209
|
-
const entries = await listDirectoryEntries({
|
|
210
|
-
cfg: params.cfg,
|
|
211
|
-
channel: params.channel,
|
|
212
|
-
accountId: params.accountId,
|
|
213
|
-
kind: params.kind,
|
|
214
|
-
query: params.query,
|
|
215
|
-
runtime: params.runtime,
|
|
216
|
-
source: "cache"
|
|
217
|
-
});
|
|
218
|
-
if (entries.length > 0 || !params.preferLiveOnMiss) {
|
|
219
|
-
directoryCache.set(cacheKey, entries, params.cfg);
|
|
220
|
-
return entries;
|
|
221
|
-
}
|
|
222
|
-
const liveKey = buildDirectoryCacheKey({
|
|
223
|
-
channel: params.channel,
|
|
224
|
-
accountId: params.accountId,
|
|
225
|
-
kind: params.kind,
|
|
226
|
-
source: "live",
|
|
227
|
-
signature
|
|
228
|
-
});
|
|
229
|
-
const liveEntries = await listDirectoryEntries({
|
|
230
|
-
cfg: params.cfg,
|
|
231
|
-
channel: params.channel,
|
|
232
|
-
accountId: params.accountId,
|
|
233
|
-
kind: params.kind,
|
|
234
|
-
query: params.query,
|
|
235
|
-
runtime: params.runtime,
|
|
236
|
-
source: "live"
|
|
237
|
-
});
|
|
238
|
-
directoryCache.set(liveKey, liveEntries, params.cfg);
|
|
239
|
-
directoryCache.set(cacheKey, liveEntries, params.cfg);
|
|
240
|
-
return liveEntries;
|
|
241
|
-
}
|
|
242
|
-
function pickAmbiguousMatch(entries, mode) {
|
|
243
|
-
if (entries.length === 0) return null;
|
|
244
|
-
if (mode === "first") return entries[0] ?? null;
|
|
245
|
-
const ranked = entries.map((entry) => ({
|
|
246
|
-
entry,
|
|
247
|
-
rank: typeof entry.rank === "number" ? entry.rank : 0
|
|
248
|
-
}));
|
|
249
|
-
const bestRank = Math.max(...ranked.map((item) => item.rank));
|
|
250
|
-
return ranked.find((item) => item.rank === bestRank)?.entry ?? entries[0] ?? null;
|
|
251
|
-
}
|
|
252
|
-
async function resolveMessagingTarget(params) {
|
|
253
|
-
const raw = normalizeChannelTargetInput(params.input);
|
|
254
|
-
if (!raw) return {
|
|
255
|
-
ok: false,
|
|
256
|
-
error: /* @__PURE__ */ new Error("Target is required")
|
|
257
|
-
};
|
|
258
|
-
const plugin = getChannelPlugin(params.channel);
|
|
259
|
-
const providerLabel = plugin?.meta?.label ?? params.channel;
|
|
260
|
-
const hint = plugin?.messaging?.targetResolver?.hint;
|
|
261
|
-
const kind = detectTargetKind(params.channel, raw, params.preferredKind);
|
|
262
|
-
const normalized = normalizeTargetForProvider(params.channel, raw) ?? raw;
|
|
263
|
-
const looksLikeTargetId = () => {
|
|
264
|
-
const trimmed = raw.trim();
|
|
265
|
-
if (!trimmed) return false;
|
|
266
|
-
const lookup = plugin?.messaging?.targetResolver?.looksLikeId;
|
|
267
|
-
if (lookup) return lookup(trimmed, normalized);
|
|
268
|
-
if (/^(channel|group|user):/i.test(trimmed)) return true;
|
|
269
|
-
if (/^[@#]/.test(trimmed)) return true;
|
|
270
|
-
if (/^\+?\d{6,}$/.test(trimmed)) {
|
|
271
|
-
if (params.channel === "bluebubbles" || params.channel === "imessage") return false;
|
|
272
|
-
return true;
|
|
273
|
-
}
|
|
274
|
-
if (trimmed.includes("@thread")) return true;
|
|
275
|
-
if (/^(conversation|user):/i.test(trimmed)) return true;
|
|
276
|
-
return false;
|
|
277
|
-
};
|
|
278
|
-
if (looksLikeTargetId()) return {
|
|
279
|
-
ok: true,
|
|
280
|
-
target: {
|
|
281
|
-
to: preserveTargetCase(params.channel, raw, normalized),
|
|
282
|
-
kind,
|
|
283
|
-
display: stripTargetPrefixes(raw),
|
|
284
|
-
source: "normalized"
|
|
285
|
-
}
|
|
286
|
-
};
|
|
287
|
-
const query = stripTargetPrefixes(raw);
|
|
288
|
-
const entries = await getDirectoryEntries({
|
|
289
|
-
cfg: params.cfg,
|
|
290
|
-
channel: params.channel,
|
|
291
|
-
accountId: params.accountId,
|
|
292
|
-
kind: kind === "user" ? "user" : "group",
|
|
293
|
-
query,
|
|
294
|
-
runtime: params.runtime,
|
|
295
|
-
preferLiveOnMiss: true
|
|
296
|
-
});
|
|
297
|
-
const match = resolveMatch({
|
|
298
|
-
channel: params.channel,
|
|
299
|
-
entries,
|
|
300
|
-
query
|
|
301
|
-
});
|
|
302
|
-
if (match.kind === "single") {
|
|
303
|
-
const entry = match.entry;
|
|
304
|
-
return {
|
|
305
|
-
ok: true,
|
|
306
|
-
target: {
|
|
307
|
-
to: normalizeDirectoryEntryId(params.channel, entry),
|
|
308
|
-
kind,
|
|
309
|
-
display: entry.name ?? entry.handle ?? stripTargetPrefixes(entry.id),
|
|
310
|
-
source: "directory"
|
|
311
|
-
}
|
|
312
|
-
};
|
|
313
|
-
}
|
|
314
|
-
if (match.kind === "ambiguous") {
|
|
315
|
-
const mode = params.resolveAmbiguous ?? "error";
|
|
316
|
-
if (mode !== "error") {
|
|
317
|
-
const best = pickAmbiguousMatch(match.entries, mode);
|
|
318
|
-
if (best) return {
|
|
319
|
-
ok: true,
|
|
320
|
-
target: {
|
|
321
|
-
to: normalizeDirectoryEntryId(params.channel, best),
|
|
322
|
-
kind,
|
|
323
|
-
display: best.name ?? best.handle ?? stripTargetPrefixes(best.id),
|
|
324
|
-
source: "directory"
|
|
325
|
-
}
|
|
326
|
-
};
|
|
327
|
-
}
|
|
328
|
-
return {
|
|
329
|
-
ok: false,
|
|
330
|
-
error: ambiguousTargetError(providerLabel, raw, hint),
|
|
331
|
-
candidates: match.entries
|
|
332
|
-
};
|
|
333
|
-
}
|
|
334
|
-
if ((params.channel === "bluebubbles" || params.channel === "imessage") && /^\+?\d{6,}$/.test(query)) return {
|
|
335
|
-
ok: true,
|
|
336
|
-
target: {
|
|
337
|
-
to: preserveTargetCase(params.channel, raw, normalized),
|
|
338
|
-
kind,
|
|
339
|
-
display: stripTargetPrefixes(raw),
|
|
340
|
-
source: "normalized"
|
|
341
|
-
}
|
|
342
|
-
};
|
|
343
|
-
return {
|
|
344
|
-
ok: false,
|
|
345
|
-
error: unknownTargetError(providerLabel, raw, hint)
|
|
346
|
-
};
|
|
347
|
-
}
|
|
348
|
-
async function lookupDirectoryDisplay(params) {
|
|
349
|
-
const normalized = normalizeTargetForProvider(params.channel, params.targetId) ?? params.targetId;
|
|
350
|
-
const [groups, users] = await Promise.all([getDirectoryEntries({
|
|
351
|
-
cfg: params.cfg,
|
|
352
|
-
channel: params.channel,
|
|
353
|
-
accountId: params.accountId,
|
|
354
|
-
kind: "group",
|
|
355
|
-
runtime: params.runtime,
|
|
356
|
-
preferLiveOnMiss: false
|
|
357
|
-
}), getDirectoryEntries({
|
|
358
|
-
cfg: params.cfg,
|
|
359
|
-
channel: params.channel,
|
|
360
|
-
accountId: params.accountId,
|
|
361
|
-
kind: "user",
|
|
362
|
-
runtime: params.runtime,
|
|
363
|
-
preferLiveOnMiss: false
|
|
364
|
-
})]);
|
|
365
|
-
const findMatch = (candidates) => candidates.find((candidate) => normalizeDirectoryEntryId(params.channel, candidate) === normalized);
|
|
366
|
-
const entry = findMatch(groups) ?? findMatch(users);
|
|
367
|
-
return entry?.name ?? entry?.handle ?? void 0;
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
//#endregion
|
|
371
|
-
//#region src/infra/outbound/outbound-session.ts
|
|
372
|
-
const SLACK_CHANNEL_TYPE_CACHE = /* @__PURE__ */ new Map();
|
|
373
|
-
function normalizeThreadId(value) {
|
|
374
|
-
if (value == null) return;
|
|
375
|
-
if (typeof value === "number") {
|
|
376
|
-
if (!Number.isFinite(value)) return;
|
|
377
|
-
return String(Math.trunc(value));
|
|
378
|
-
}
|
|
379
|
-
const trimmed = value.trim();
|
|
380
|
-
return trimmed ? trimmed : void 0;
|
|
381
|
-
}
|
|
382
|
-
function stripProviderPrefix(raw, channel) {
|
|
383
|
-
const trimmed = raw.trim();
|
|
384
|
-
const lower = trimmed.toLowerCase();
|
|
385
|
-
const prefix = `${channel.toLowerCase()}:`;
|
|
386
|
-
if (lower.startsWith(prefix)) return trimmed.slice(prefix.length).trim();
|
|
387
|
-
return trimmed;
|
|
388
|
-
}
|
|
389
|
-
function stripKindPrefix(raw) {
|
|
390
|
-
return raw.replace(/^(user|channel|group|conversation|room|dm):/i, "").trim();
|
|
391
|
-
}
|
|
392
|
-
function inferPeerKind(params) {
|
|
393
|
-
const resolvedKind = params.resolvedTarget?.kind;
|
|
394
|
-
if (resolvedKind === "user") return "direct";
|
|
395
|
-
if (resolvedKind === "channel") return "channel";
|
|
396
|
-
if (resolvedKind === "group") {
|
|
397
|
-
const chatTypes = getChannelPlugin(params.channel)?.capabilities?.chatTypes ?? [];
|
|
398
|
-
const supportsChannel = chatTypes.includes("channel");
|
|
399
|
-
const supportsGroup = chatTypes.includes("group");
|
|
400
|
-
if (supportsChannel && !supportsGroup) return "channel";
|
|
401
|
-
return "group";
|
|
402
|
-
}
|
|
403
|
-
return "direct";
|
|
404
|
-
}
|
|
405
|
-
function buildBaseSessionKey(params) {
|
|
406
|
-
return buildAgentSessionKey({
|
|
407
|
-
agentId: params.agentId,
|
|
408
|
-
channel: params.channel,
|
|
409
|
-
accountId: params.accountId,
|
|
410
|
-
peer: params.peer,
|
|
411
|
-
dmScope: params.cfg.session?.dmScope ?? "main",
|
|
412
|
-
identityLinks: params.cfg.session?.identityLinks
|
|
413
|
-
});
|
|
414
|
-
}
|
|
415
|
-
async function resolveSlackChannelType(params) {
|
|
416
|
-
const channelId = params.channelId.trim();
|
|
417
|
-
if (!channelId) return "unknown";
|
|
418
|
-
const cached = SLACK_CHANNEL_TYPE_CACHE.get(`${params.accountId ?? "default"}:${channelId}`);
|
|
419
|
-
if (cached) return cached;
|
|
420
|
-
const account = resolveSlackAccount({
|
|
421
|
-
cfg: params.cfg,
|
|
422
|
-
accountId: params.accountId
|
|
423
|
-
});
|
|
424
|
-
const groupChannels = normalizeAllowListLower(account.dm?.groupChannels);
|
|
425
|
-
const channelIdLower = channelId.toLowerCase();
|
|
426
|
-
if (groupChannels.includes(channelIdLower) || groupChannels.includes(`slack:${channelIdLower}`) || groupChannels.includes(`channel:${channelIdLower}`) || groupChannels.includes(`group:${channelIdLower}`) || groupChannels.includes(`mpim:${channelIdLower}`)) {
|
|
427
|
-
SLACK_CHANNEL_TYPE_CACHE.set(`${account.accountId}:${channelId}`, "group");
|
|
428
|
-
return "group";
|
|
429
|
-
}
|
|
430
|
-
if (Object.keys(account.channels ?? {}).some((key) => {
|
|
431
|
-
const normalized = key.trim().toLowerCase();
|
|
432
|
-
return normalized === channelIdLower || normalized === `channel:${channelIdLower}` || normalized.replace(/^#/, "") === channelIdLower;
|
|
433
|
-
})) {
|
|
434
|
-
SLACK_CHANNEL_TYPE_CACHE.set(`${account.accountId}:${channelId}`, "channel");
|
|
435
|
-
return "channel";
|
|
436
|
-
}
|
|
437
|
-
const token = account.botToken?.trim() || (typeof account.config.userToken === "string" ? account.config.userToken.trim() : "");
|
|
438
|
-
if (!token) {
|
|
439
|
-
SLACK_CHANNEL_TYPE_CACHE.set(`${account.accountId}:${channelId}`, "unknown");
|
|
440
|
-
return "unknown";
|
|
441
|
-
}
|
|
442
|
-
try {
|
|
443
|
-
const channel = (await createSlackWebClient(token).conversations.info({ channel: channelId })).channel;
|
|
444
|
-
const type = channel?.is_im ? "dm" : channel?.is_mpim ? "group" : "channel";
|
|
445
|
-
SLACK_CHANNEL_TYPE_CACHE.set(`${account.accountId}:${channelId}`, type);
|
|
446
|
-
return type;
|
|
447
|
-
} catch {
|
|
448
|
-
SLACK_CHANNEL_TYPE_CACHE.set(`${account.accountId}:${channelId}`, "unknown");
|
|
449
|
-
return "unknown";
|
|
450
|
-
}
|
|
451
|
-
}
|
|
452
|
-
async function resolveSlackSession(params) {
|
|
453
|
-
const parsed = parseSlackTarget(params.target, { defaultKind: "channel" });
|
|
454
|
-
if (!parsed) return null;
|
|
455
|
-
const isDm = parsed.kind === "user";
|
|
456
|
-
let peerKind = isDm ? "direct" : "channel";
|
|
457
|
-
if (!isDm && /^G/i.test(parsed.id)) {
|
|
458
|
-
const channelType = await resolveSlackChannelType({
|
|
459
|
-
cfg: params.cfg,
|
|
460
|
-
accountId: params.accountId,
|
|
461
|
-
channelId: parsed.id
|
|
462
|
-
});
|
|
463
|
-
if (channelType === "group") peerKind = "group";
|
|
464
|
-
if (channelType === "dm") peerKind = "direct";
|
|
465
|
-
}
|
|
466
|
-
const peer = {
|
|
467
|
-
kind: peerKind,
|
|
468
|
-
id: parsed.id
|
|
469
|
-
};
|
|
470
|
-
const baseSessionKey = buildBaseSessionKey({
|
|
471
|
-
cfg: params.cfg,
|
|
472
|
-
agentId: params.agentId,
|
|
473
|
-
channel: "slack",
|
|
474
|
-
accountId: params.accountId,
|
|
475
|
-
peer
|
|
476
|
-
});
|
|
477
|
-
const threadId = normalizeThreadId(params.threadId ?? params.replyToId);
|
|
478
|
-
return {
|
|
479
|
-
sessionKey: resolveThreadSessionKeys({
|
|
480
|
-
baseSessionKey,
|
|
481
|
-
threadId
|
|
482
|
-
}).sessionKey,
|
|
483
|
-
baseSessionKey,
|
|
484
|
-
peer,
|
|
485
|
-
chatType: peerKind === "direct" ? "direct" : "channel",
|
|
486
|
-
from: peerKind === "direct" ? `slack:${parsed.id}` : peerKind === "group" ? `slack:group:${parsed.id}` : `slack:channel:${parsed.id}`,
|
|
487
|
-
to: peerKind === "direct" ? `user:${parsed.id}` : `channel:${parsed.id}`,
|
|
488
|
-
threadId
|
|
489
|
-
};
|
|
490
|
-
}
|
|
491
|
-
function resolveDiscordSession(params) {
|
|
492
|
-
const parsed = parseDiscordTarget(params.target, { defaultKind: "channel" });
|
|
493
|
-
if (!parsed) return null;
|
|
494
|
-
const isDm = parsed.kind === "user";
|
|
495
|
-
const peer = {
|
|
496
|
-
kind: isDm ? "direct" : "channel",
|
|
497
|
-
id: parsed.id
|
|
498
|
-
};
|
|
499
|
-
const baseSessionKey = buildBaseSessionKey({
|
|
500
|
-
cfg: params.cfg,
|
|
501
|
-
agentId: params.agentId,
|
|
502
|
-
channel: "discord",
|
|
503
|
-
accountId: params.accountId,
|
|
504
|
-
peer
|
|
505
|
-
});
|
|
506
|
-
const explicitThreadId = normalizeThreadId(params.threadId);
|
|
507
|
-
return {
|
|
508
|
-
sessionKey: resolveThreadSessionKeys({
|
|
509
|
-
baseSessionKey,
|
|
510
|
-
threadId: explicitThreadId ?? normalizeThreadId(params.replyToId),
|
|
511
|
-
useSuffix: false
|
|
512
|
-
}).sessionKey,
|
|
513
|
-
baseSessionKey,
|
|
514
|
-
peer,
|
|
515
|
-
chatType: isDm ? "direct" : "channel",
|
|
516
|
-
from: isDm ? `discord:${parsed.id}` : `discord:channel:${parsed.id}`,
|
|
517
|
-
to: isDm ? `user:${parsed.id}` : `channel:${parsed.id}`,
|
|
518
|
-
threadId: explicitThreadId ?? void 0
|
|
519
|
-
};
|
|
520
|
-
}
|
|
521
|
-
function resolveTelegramSession(params) {
|
|
522
|
-
const parsed = parseTelegramTarget(params.target);
|
|
523
|
-
const chatId = parsed.chatId.trim();
|
|
524
|
-
if (!chatId) return null;
|
|
525
|
-
const parsedThreadId = parsed.messageThreadId;
|
|
526
|
-
const fallbackThreadId = normalizeThreadId(params.threadId);
|
|
527
|
-
const resolvedThreadId = parsedThreadId ?? (fallbackThreadId ? Number.parseInt(fallbackThreadId, 10) : void 0);
|
|
528
|
-
const chatType = resolveTelegramTargetChatType(params.target);
|
|
529
|
-
const isGroup = chatType === "group" || chatType === "unknown" && params.resolvedTarget?.kind && params.resolvedTarget.kind !== "user";
|
|
530
|
-
const peerId = isGroup ? buildTelegramGroupPeerId(chatId, resolvedThreadId) : chatId;
|
|
531
|
-
const peer = {
|
|
532
|
-
kind: isGroup ? "group" : "direct",
|
|
533
|
-
id: peerId
|
|
534
|
-
};
|
|
535
|
-
const baseSessionKey = buildBaseSessionKey({
|
|
536
|
-
cfg: params.cfg,
|
|
537
|
-
agentId: params.agentId,
|
|
538
|
-
channel: "telegram",
|
|
539
|
-
accountId: params.accountId,
|
|
540
|
-
peer
|
|
541
|
-
});
|
|
542
|
-
return {
|
|
543
|
-
sessionKey: baseSessionKey,
|
|
544
|
-
baseSessionKey,
|
|
545
|
-
peer,
|
|
546
|
-
chatType: isGroup ? "group" : "direct",
|
|
547
|
-
from: isGroup ? `telegram:group:${peerId}` : `telegram:${chatId}`,
|
|
548
|
-
to: `telegram:${chatId}`,
|
|
549
|
-
threadId: resolvedThreadId
|
|
550
|
-
};
|
|
551
|
-
}
|
|
552
|
-
function resolveWhatsAppSession(params) {
|
|
553
|
-
const normalized = normalizeWhatsAppTarget(params.target);
|
|
554
|
-
if (!normalized) return null;
|
|
555
|
-
const isGroup = isWhatsAppGroupJid(normalized);
|
|
556
|
-
const peer = {
|
|
557
|
-
kind: isGroup ? "group" : "direct",
|
|
558
|
-
id: normalized
|
|
559
|
-
};
|
|
560
|
-
const baseSessionKey = buildBaseSessionKey({
|
|
561
|
-
cfg: params.cfg,
|
|
562
|
-
agentId: params.agentId,
|
|
563
|
-
channel: "whatsapp",
|
|
564
|
-
accountId: params.accountId,
|
|
565
|
-
peer
|
|
566
|
-
});
|
|
567
|
-
return {
|
|
568
|
-
sessionKey: baseSessionKey,
|
|
569
|
-
baseSessionKey,
|
|
570
|
-
peer,
|
|
571
|
-
chatType: isGroup ? "group" : "direct",
|
|
572
|
-
from: normalized,
|
|
573
|
-
to: normalized
|
|
574
|
-
};
|
|
575
|
-
}
|
|
576
|
-
function resolveSignalSession(params) {
|
|
577
|
-
const stripped = stripProviderPrefix(params.target, "signal");
|
|
578
|
-
const lowered = stripped.toLowerCase();
|
|
579
|
-
if (lowered.startsWith("group:")) {
|
|
580
|
-
const groupId = stripped.slice(6).trim();
|
|
581
|
-
if (!groupId) return null;
|
|
582
|
-
const peer = {
|
|
583
|
-
kind: "group",
|
|
584
|
-
id: groupId
|
|
585
|
-
};
|
|
586
|
-
const baseSessionKey = buildBaseSessionKey({
|
|
587
|
-
cfg: params.cfg,
|
|
588
|
-
agentId: params.agentId,
|
|
589
|
-
channel: "signal",
|
|
590
|
-
accountId: params.accountId,
|
|
591
|
-
peer
|
|
592
|
-
});
|
|
593
|
-
return {
|
|
594
|
-
sessionKey: baseSessionKey,
|
|
595
|
-
baseSessionKey,
|
|
596
|
-
peer,
|
|
597
|
-
chatType: "group",
|
|
598
|
-
from: `group:${groupId}`,
|
|
599
|
-
to: `group:${groupId}`
|
|
600
|
-
};
|
|
601
|
-
}
|
|
602
|
-
let recipient = stripped.trim();
|
|
603
|
-
if (lowered.startsWith("username:")) recipient = stripped.slice(9).trim();
|
|
604
|
-
else if (lowered.startsWith("u:")) recipient = stripped.slice(2).trim();
|
|
605
|
-
if (!recipient) return null;
|
|
606
|
-
const uuidCandidate = recipient.toLowerCase().startsWith("uuid:") ? recipient.slice(5) : recipient;
|
|
607
|
-
const sender = resolveSignalSender({
|
|
608
|
-
sourceUuid: looksLikeUuid(uuidCandidate) ? uuidCandidate : null,
|
|
609
|
-
sourceNumber: looksLikeUuid(uuidCandidate) ? null : recipient
|
|
610
|
-
});
|
|
611
|
-
const peerId = sender ? resolveSignalPeerId(sender) : recipient;
|
|
612
|
-
const displayRecipient = sender ? resolveSignalRecipient(sender) : recipient;
|
|
613
|
-
const peer = {
|
|
614
|
-
kind: "direct",
|
|
615
|
-
id: peerId
|
|
616
|
-
};
|
|
617
|
-
const baseSessionKey = buildBaseSessionKey({
|
|
618
|
-
cfg: params.cfg,
|
|
619
|
-
agentId: params.agentId,
|
|
620
|
-
channel: "signal",
|
|
621
|
-
accountId: params.accountId,
|
|
622
|
-
peer
|
|
623
|
-
});
|
|
624
|
-
return {
|
|
625
|
-
sessionKey: baseSessionKey,
|
|
626
|
-
baseSessionKey,
|
|
627
|
-
peer,
|
|
628
|
-
chatType: "direct",
|
|
629
|
-
from: `signal:${displayRecipient}`,
|
|
630
|
-
to: `signal:${displayRecipient}`
|
|
631
|
-
};
|
|
632
|
-
}
|
|
633
|
-
function resolveIMessageSession(params) {
|
|
634
|
-
const parsed = parseIMessageTarget(params.target);
|
|
635
|
-
if (parsed.kind === "handle") {
|
|
636
|
-
const handle = normalizeIMessageHandle(parsed.to);
|
|
637
|
-
if (!handle) return null;
|
|
638
|
-
const peer = {
|
|
639
|
-
kind: "direct",
|
|
640
|
-
id: handle
|
|
641
|
-
};
|
|
642
|
-
const baseSessionKey = buildBaseSessionKey({
|
|
643
|
-
cfg: params.cfg,
|
|
644
|
-
agentId: params.agentId,
|
|
645
|
-
channel: "imessage",
|
|
646
|
-
accountId: params.accountId,
|
|
647
|
-
peer
|
|
648
|
-
});
|
|
649
|
-
return {
|
|
650
|
-
sessionKey: baseSessionKey,
|
|
651
|
-
baseSessionKey,
|
|
652
|
-
peer,
|
|
653
|
-
chatType: "direct",
|
|
654
|
-
from: `imessage:${handle}`,
|
|
655
|
-
to: `imessage:${handle}`
|
|
656
|
-
};
|
|
657
|
-
}
|
|
658
|
-
const peerId = parsed.kind === "chat_id" ? String(parsed.chatId) : parsed.kind === "chat_guid" ? parsed.chatGuid : parsed.chatIdentifier;
|
|
659
|
-
if (!peerId) return null;
|
|
660
|
-
const peer = {
|
|
661
|
-
kind: "group",
|
|
662
|
-
id: peerId
|
|
663
|
-
};
|
|
664
|
-
const baseSessionKey = buildBaseSessionKey({
|
|
665
|
-
cfg: params.cfg,
|
|
666
|
-
agentId: params.agentId,
|
|
667
|
-
channel: "imessage",
|
|
668
|
-
accountId: params.accountId,
|
|
669
|
-
peer
|
|
670
|
-
});
|
|
671
|
-
const toPrefix = parsed.kind === "chat_id" ? "chat_id" : parsed.kind === "chat_guid" ? "chat_guid" : "chat_identifier";
|
|
672
|
-
return {
|
|
673
|
-
sessionKey: baseSessionKey,
|
|
674
|
-
baseSessionKey,
|
|
675
|
-
peer,
|
|
676
|
-
chatType: "group",
|
|
677
|
-
from: `imessage:group:${peerId}`,
|
|
678
|
-
to: `${toPrefix}:${peerId}`
|
|
679
|
-
};
|
|
680
|
-
}
|
|
681
|
-
function resolveMatrixSession(params) {
|
|
682
|
-
const stripped = stripProviderPrefix(params.target, "matrix");
|
|
683
|
-
const isUser = params.resolvedTarget?.kind === "user" || stripped.startsWith("@") || /^user:/i.test(stripped);
|
|
684
|
-
const rawId = stripKindPrefix(stripped);
|
|
685
|
-
if (!rawId) return null;
|
|
686
|
-
const peer = {
|
|
687
|
-
kind: isUser ? "direct" : "channel",
|
|
688
|
-
id: rawId
|
|
689
|
-
};
|
|
690
|
-
const baseSessionKey = buildBaseSessionKey({
|
|
691
|
-
cfg: params.cfg,
|
|
692
|
-
agentId: params.agentId,
|
|
693
|
-
channel: "matrix",
|
|
694
|
-
accountId: params.accountId,
|
|
695
|
-
peer
|
|
696
|
-
});
|
|
697
|
-
return {
|
|
698
|
-
sessionKey: baseSessionKey,
|
|
699
|
-
baseSessionKey,
|
|
700
|
-
peer,
|
|
701
|
-
chatType: isUser ? "direct" : "channel",
|
|
702
|
-
from: isUser ? `matrix:${rawId}` : `matrix:channel:${rawId}`,
|
|
703
|
-
to: `room:${rawId}`
|
|
704
|
-
};
|
|
705
|
-
}
|
|
706
|
-
function resolveMSTeamsSession(params) {
|
|
707
|
-
let trimmed = params.target.trim();
|
|
708
|
-
if (!trimmed) return null;
|
|
709
|
-
trimmed = trimmed.replace(/^(msteams|teams):/i, "").trim();
|
|
710
|
-
const isUser = trimmed.toLowerCase().startsWith("user:");
|
|
711
|
-
const rawId = stripKindPrefix(trimmed);
|
|
712
|
-
if (!rawId) return null;
|
|
713
|
-
const conversationId = rawId.split(";")[0] ?? rawId;
|
|
714
|
-
const isChannel = !isUser && /@thread\.tacv2/i.test(conversationId);
|
|
715
|
-
const peer = {
|
|
716
|
-
kind: isUser ? "direct" : isChannel ? "channel" : "group",
|
|
717
|
-
id: conversationId
|
|
718
|
-
};
|
|
719
|
-
const baseSessionKey = buildBaseSessionKey({
|
|
720
|
-
cfg: params.cfg,
|
|
721
|
-
agentId: params.agentId,
|
|
722
|
-
channel: "msteams",
|
|
723
|
-
accountId: params.accountId,
|
|
724
|
-
peer
|
|
725
|
-
});
|
|
726
|
-
return {
|
|
727
|
-
sessionKey: baseSessionKey,
|
|
728
|
-
baseSessionKey,
|
|
729
|
-
peer,
|
|
730
|
-
chatType: isUser ? "direct" : isChannel ? "channel" : "group",
|
|
731
|
-
from: isUser ? `msteams:${conversationId}` : isChannel ? `msteams:channel:${conversationId}` : `msteams:group:${conversationId}`,
|
|
732
|
-
to: isUser ? `user:${conversationId}` : `conversation:${conversationId}`
|
|
733
|
-
};
|
|
734
|
-
}
|
|
735
|
-
function resolveMattermostSession(params) {
|
|
736
|
-
let trimmed = params.target.trim();
|
|
737
|
-
if (!trimmed) return null;
|
|
738
|
-
trimmed = trimmed.replace(/^mattermost:/i, "").trim();
|
|
739
|
-
const isUser = trimmed.toLowerCase().startsWith("user:") || trimmed.startsWith("@");
|
|
740
|
-
if (trimmed.startsWith("@")) trimmed = trimmed.slice(1).trim();
|
|
741
|
-
const rawId = stripKindPrefix(trimmed);
|
|
742
|
-
if (!rawId) return null;
|
|
743
|
-
const peer = {
|
|
744
|
-
kind: isUser ? "direct" : "channel",
|
|
745
|
-
id: rawId
|
|
746
|
-
};
|
|
747
|
-
const baseSessionKey = buildBaseSessionKey({
|
|
748
|
-
cfg: params.cfg,
|
|
749
|
-
agentId: params.agentId,
|
|
750
|
-
channel: "mattermost",
|
|
751
|
-
accountId: params.accountId,
|
|
752
|
-
peer
|
|
753
|
-
});
|
|
754
|
-
const threadId = normalizeThreadId(params.replyToId ?? params.threadId);
|
|
755
|
-
return {
|
|
756
|
-
sessionKey: resolveThreadSessionKeys({
|
|
757
|
-
baseSessionKey,
|
|
758
|
-
threadId
|
|
759
|
-
}).sessionKey,
|
|
760
|
-
baseSessionKey,
|
|
761
|
-
peer,
|
|
762
|
-
chatType: isUser ? "direct" : "channel",
|
|
763
|
-
from: isUser ? `mattermost:${rawId}` : `mattermost:channel:${rawId}`,
|
|
764
|
-
to: isUser ? `user:${rawId}` : `channel:${rawId}`,
|
|
765
|
-
threadId
|
|
766
|
-
};
|
|
767
|
-
}
|
|
768
|
-
function resolveBlueBubblesSession(params) {
|
|
769
|
-
const stripped = stripProviderPrefix(params.target, "bluebubbles");
|
|
770
|
-
const lower = stripped.toLowerCase();
|
|
771
|
-
const isGroup = lower.startsWith("chat_id:") || lower.startsWith("chat_guid:") || lower.startsWith("chat_identifier:") || lower.startsWith("group:");
|
|
772
|
-
const rawPeerId = isGroup ? stripKindPrefix(stripped) : stripped.replace(/^(imessage|sms|auto):/i, "");
|
|
773
|
-
const peerId = isGroup ? rawPeerId.replace(/^(chat_id|chat_guid|chat_identifier):/i, "") : rawPeerId;
|
|
774
|
-
if (!peerId) return null;
|
|
775
|
-
const peer = {
|
|
776
|
-
kind: isGroup ? "group" : "direct",
|
|
777
|
-
id: peerId
|
|
778
|
-
};
|
|
779
|
-
const baseSessionKey = buildBaseSessionKey({
|
|
780
|
-
cfg: params.cfg,
|
|
781
|
-
agentId: params.agentId,
|
|
782
|
-
channel: "bluebubbles",
|
|
783
|
-
accountId: params.accountId,
|
|
784
|
-
peer
|
|
785
|
-
});
|
|
786
|
-
return {
|
|
787
|
-
sessionKey: baseSessionKey,
|
|
788
|
-
baseSessionKey,
|
|
789
|
-
peer,
|
|
790
|
-
chatType: isGroup ? "group" : "direct",
|
|
791
|
-
from: isGroup ? `group:${peerId}` : `bluebubbles:${peerId}`,
|
|
792
|
-
to: `bluebubbles:${stripped}`
|
|
793
|
-
};
|
|
794
|
-
}
|
|
795
|
-
function resolveNextcloudTalkSession(params) {
|
|
796
|
-
let trimmed = params.target.trim();
|
|
797
|
-
if (!trimmed) return null;
|
|
798
|
-
trimmed = trimmed.replace(/^(nextcloud-talk|nc-talk|nc):/i, "").trim();
|
|
799
|
-
trimmed = trimmed.replace(/^room:/i, "").trim();
|
|
800
|
-
if (!trimmed) return null;
|
|
801
|
-
const peer = {
|
|
802
|
-
kind: "group",
|
|
803
|
-
id: trimmed
|
|
804
|
-
};
|
|
805
|
-
const baseSessionKey = buildBaseSessionKey({
|
|
806
|
-
cfg: params.cfg,
|
|
807
|
-
agentId: params.agentId,
|
|
808
|
-
channel: "nextcloud-talk",
|
|
809
|
-
accountId: params.accountId,
|
|
810
|
-
peer
|
|
811
|
-
});
|
|
812
|
-
return {
|
|
813
|
-
sessionKey: baseSessionKey,
|
|
814
|
-
baseSessionKey,
|
|
815
|
-
peer,
|
|
816
|
-
chatType: "group",
|
|
817
|
-
from: `nextcloud-talk:room:${trimmed}`,
|
|
818
|
-
to: `nextcloud-talk:${trimmed}`
|
|
819
|
-
};
|
|
820
|
-
}
|
|
821
|
-
function resolveZaloSession(params) {
|
|
822
|
-
return resolveZaloLikeSession(params, "zalo", /^(zl):/i);
|
|
823
|
-
}
|
|
824
|
-
function resolveZaloLikeSession(params, channel, aliasPrefix) {
|
|
825
|
-
const trimmed = stripProviderPrefix(params.target, channel).replace(aliasPrefix, "").trim();
|
|
826
|
-
if (!trimmed) return null;
|
|
827
|
-
const isGroup = trimmed.toLowerCase().startsWith("group:");
|
|
828
|
-
const peerId = stripKindPrefix(trimmed);
|
|
829
|
-
const peer = {
|
|
830
|
-
kind: isGroup ? "group" : "direct",
|
|
831
|
-
id: peerId
|
|
832
|
-
};
|
|
833
|
-
const baseSessionKey = buildBaseSessionKey({
|
|
834
|
-
cfg: params.cfg,
|
|
835
|
-
agentId: params.agentId,
|
|
836
|
-
channel,
|
|
837
|
-
accountId: params.accountId,
|
|
838
|
-
peer
|
|
839
|
-
});
|
|
840
|
-
return {
|
|
841
|
-
sessionKey: baseSessionKey,
|
|
842
|
-
baseSessionKey,
|
|
843
|
-
peer,
|
|
844
|
-
chatType: isGroup ? "group" : "direct",
|
|
845
|
-
from: isGroup ? `${channel}:group:${peerId}` : `${channel}:${peerId}`,
|
|
846
|
-
to: `${channel}:${peerId}`
|
|
847
|
-
};
|
|
848
|
-
}
|
|
849
|
-
function resolveZalouserSession(params) {
|
|
850
|
-
return resolveZaloLikeSession(params, "zalouser", /^(zlu):/i);
|
|
851
|
-
}
|
|
852
|
-
function resolveNostrSession(params) {
|
|
853
|
-
const trimmed = stripProviderPrefix(params.target, "nostr").trim();
|
|
854
|
-
if (!trimmed) return null;
|
|
855
|
-
const peer = {
|
|
856
|
-
kind: "direct",
|
|
857
|
-
id: trimmed
|
|
858
|
-
};
|
|
859
|
-
const baseSessionKey = buildBaseSessionKey({
|
|
860
|
-
cfg: params.cfg,
|
|
861
|
-
agentId: params.agentId,
|
|
862
|
-
channel: "nostr",
|
|
863
|
-
accountId: params.accountId,
|
|
864
|
-
peer
|
|
865
|
-
});
|
|
866
|
-
return {
|
|
867
|
-
sessionKey: baseSessionKey,
|
|
868
|
-
baseSessionKey,
|
|
869
|
-
peer,
|
|
870
|
-
chatType: "direct",
|
|
871
|
-
from: `nostr:${trimmed}`,
|
|
872
|
-
to: `nostr:${trimmed}`
|
|
873
|
-
};
|
|
874
|
-
}
|
|
875
|
-
function normalizeTlonShip(raw) {
|
|
876
|
-
const trimmed = raw.trim();
|
|
877
|
-
if (!trimmed) return trimmed;
|
|
878
|
-
return trimmed.startsWith("~") ? trimmed : `~${trimmed}`;
|
|
879
|
-
}
|
|
880
|
-
function resolveTlonSession(params) {
|
|
881
|
-
let trimmed = stripProviderPrefix(params.target, "tlon");
|
|
882
|
-
trimmed = trimmed.trim();
|
|
883
|
-
if (!trimmed) return null;
|
|
884
|
-
const lower = trimmed.toLowerCase();
|
|
885
|
-
let isGroup = lower.startsWith("group:") || lower.startsWith("room:") || lower.startsWith("chat/");
|
|
886
|
-
let peerId = trimmed;
|
|
887
|
-
if (lower.startsWith("group:") || lower.startsWith("room:")) {
|
|
888
|
-
peerId = trimmed.replace(/^(group|room):/i, "").trim();
|
|
889
|
-
if (!peerId.startsWith("chat/")) {
|
|
890
|
-
const parts = peerId.split("/").filter(Boolean);
|
|
891
|
-
if (parts.length === 2) peerId = `chat/${normalizeTlonShip(parts[0])}/${parts[1]}`;
|
|
892
|
-
}
|
|
893
|
-
isGroup = true;
|
|
894
|
-
} else if (lower.startsWith("dm:")) {
|
|
895
|
-
peerId = normalizeTlonShip(trimmed.slice(3));
|
|
896
|
-
isGroup = false;
|
|
897
|
-
} else if (lower.startsWith("chat/")) {
|
|
898
|
-
peerId = trimmed;
|
|
899
|
-
isGroup = true;
|
|
900
|
-
} else if (trimmed.includes("/")) {
|
|
901
|
-
const parts = trimmed.split("/").filter(Boolean);
|
|
902
|
-
if (parts.length === 2) {
|
|
903
|
-
peerId = `chat/${normalizeTlonShip(parts[0])}/${parts[1]}`;
|
|
904
|
-
isGroup = true;
|
|
905
|
-
}
|
|
906
|
-
} else peerId = normalizeTlonShip(trimmed);
|
|
907
|
-
const peer = {
|
|
908
|
-
kind: isGroup ? "group" : "direct",
|
|
909
|
-
id: peerId
|
|
910
|
-
};
|
|
911
|
-
const baseSessionKey = buildBaseSessionKey({
|
|
912
|
-
cfg: params.cfg,
|
|
913
|
-
agentId: params.agentId,
|
|
914
|
-
channel: "tlon",
|
|
915
|
-
accountId: params.accountId,
|
|
916
|
-
peer
|
|
917
|
-
});
|
|
918
|
-
return {
|
|
919
|
-
sessionKey: baseSessionKey,
|
|
920
|
-
baseSessionKey,
|
|
921
|
-
peer,
|
|
922
|
-
chatType: isGroup ? "group" : "direct",
|
|
923
|
-
from: isGroup ? `tlon:group:${peerId}` : `tlon:${peerId}`,
|
|
924
|
-
to: `tlon:${peerId}`
|
|
925
|
-
};
|
|
926
|
-
}
|
|
927
|
-
/**
|
|
928
|
-
* Feishu ID formats:
|
|
929
|
-
* - oc_xxx: chat_id (group chat)
|
|
930
|
-
* - ou_xxx: user open_id (DM)
|
|
931
|
-
* - on_xxx: user union_id (DM)
|
|
932
|
-
* - cli_xxx: app_id (not a valid send target)
|
|
933
|
-
*/
|
|
934
|
-
function resolveFeishuSession(params) {
|
|
935
|
-
let trimmed = stripProviderPrefix(params.target, "feishu");
|
|
936
|
-
trimmed = stripProviderPrefix(trimmed, "lark").trim();
|
|
937
|
-
if (!trimmed) return null;
|
|
938
|
-
const lower = trimmed.toLowerCase();
|
|
939
|
-
let isGroup = false;
|
|
940
|
-
if (lower.startsWith("group:") || lower.startsWith("chat:")) {
|
|
941
|
-
trimmed = trimmed.replace(/^(group|chat):/i, "").trim();
|
|
942
|
-
isGroup = true;
|
|
943
|
-
} else if (lower.startsWith("user:") || lower.startsWith("dm:")) {
|
|
944
|
-
trimmed = trimmed.replace(/^(user|dm):/i, "").trim();
|
|
945
|
-
isGroup = false;
|
|
946
|
-
}
|
|
947
|
-
const idLower = trimmed.toLowerCase();
|
|
948
|
-
if (idLower.startsWith("oc_")) isGroup = true;
|
|
949
|
-
else if (idLower.startsWith("ou_") || idLower.startsWith("on_")) isGroup = false;
|
|
950
|
-
const peer = {
|
|
951
|
-
kind: isGroup ? "group" : "direct",
|
|
952
|
-
id: trimmed
|
|
953
|
-
};
|
|
954
|
-
const baseSessionKey = buildBaseSessionKey({
|
|
955
|
-
cfg: params.cfg,
|
|
956
|
-
agentId: params.agentId,
|
|
957
|
-
channel: "feishu",
|
|
958
|
-
accountId: params.accountId,
|
|
959
|
-
peer
|
|
960
|
-
});
|
|
961
|
-
return {
|
|
962
|
-
sessionKey: baseSessionKey,
|
|
963
|
-
baseSessionKey,
|
|
964
|
-
peer,
|
|
965
|
-
chatType: isGroup ? "group" : "direct",
|
|
966
|
-
from: isGroup ? `feishu:group:${trimmed}` : `feishu:${trimmed}`,
|
|
967
|
-
to: trimmed
|
|
968
|
-
};
|
|
969
|
-
}
|
|
970
|
-
function resolveFallbackSession(params) {
|
|
971
|
-
const trimmed = stripProviderPrefix(params.target, params.channel).trim();
|
|
972
|
-
if (!trimmed) return null;
|
|
973
|
-
const peerKind = inferPeerKind({
|
|
974
|
-
channel: params.channel,
|
|
975
|
-
resolvedTarget: params.resolvedTarget
|
|
976
|
-
});
|
|
977
|
-
const peerId = stripKindPrefix(trimmed);
|
|
978
|
-
if (!peerId) return null;
|
|
979
|
-
const peer = {
|
|
980
|
-
kind: peerKind,
|
|
981
|
-
id: peerId
|
|
982
|
-
};
|
|
983
|
-
const baseSessionKey = buildBaseSessionKey({
|
|
984
|
-
cfg: params.cfg,
|
|
985
|
-
agentId: params.agentId,
|
|
986
|
-
channel: params.channel,
|
|
987
|
-
peer
|
|
988
|
-
});
|
|
989
|
-
return {
|
|
990
|
-
sessionKey: baseSessionKey,
|
|
991
|
-
baseSessionKey,
|
|
992
|
-
peer,
|
|
993
|
-
chatType: peerKind === "direct" ? "direct" : peerKind === "channel" ? "channel" : "group",
|
|
994
|
-
from: peerKind === "direct" ? `${params.channel}:${peerId}` : `${params.channel}:${peerKind}:${peerId}`,
|
|
995
|
-
to: `${peerKind === "direct" ? "user" : "channel"}:${peerId}`
|
|
996
|
-
};
|
|
997
|
-
}
|
|
998
|
-
async function resolveOutboundSessionRoute(params) {
|
|
999
|
-
const target = params.target.trim();
|
|
1000
|
-
if (!target) return null;
|
|
1001
|
-
switch (params.channel) {
|
|
1002
|
-
case "slack": return await resolveSlackSession({
|
|
1003
|
-
...params,
|
|
1004
|
-
target
|
|
1005
|
-
});
|
|
1006
|
-
case "discord": return resolveDiscordSession({
|
|
1007
|
-
...params,
|
|
1008
|
-
target
|
|
1009
|
-
});
|
|
1010
|
-
case "telegram": return resolveTelegramSession({
|
|
1011
|
-
...params,
|
|
1012
|
-
target
|
|
1013
|
-
});
|
|
1014
|
-
case "whatsapp": return resolveWhatsAppSession({
|
|
1015
|
-
...params,
|
|
1016
|
-
target
|
|
1017
|
-
});
|
|
1018
|
-
case "signal": return resolveSignalSession({
|
|
1019
|
-
...params,
|
|
1020
|
-
target
|
|
1021
|
-
});
|
|
1022
|
-
case "imessage": return resolveIMessageSession({
|
|
1023
|
-
...params,
|
|
1024
|
-
target
|
|
1025
|
-
});
|
|
1026
|
-
case "matrix": return resolveMatrixSession({
|
|
1027
|
-
...params,
|
|
1028
|
-
target
|
|
1029
|
-
});
|
|
1030
|
-
case "msteams": return resolveMSTeamsSession({
|
|
1031
|
-
...params,
|
|
1032
|
-
target
|
|
1033
|
-
});
|
|
1034
|
-
case "mattermost": return resolveMattermostSession({
|
|
1035
|
-
...params,
|
|
1036
|
-
target
|
|
1037
|
-
});
|
|
1038
|
-
case "bluebubbles": return resolveBlueBubblesSession({
|
|
1039
|
-
...params,
|
|
1040
|
-
target
|
|
1041
|
-
});
|
|
1042
|
-
case "nextcloud-talk": return resolveNextcloudTalkSession({
|
|
1043
|
-
...params,
|
|
1044
|
-
target
|
|
1045
|
-
});
|
|
1046
|
-
case "zalo": return resolveZaloSession({
|
|
1047
|
-
...params,
|
|
1048
|
-
target
|
|
1049
|
-
});
|
|
1050
|
-
case "zalouser": return resolveZalouserSession({
|
|
1051
|
-
...params,
|
|
1052
|
-
target
|
|
1053
|
-
});
|
|
1054
|
-
case "nostr": return resolveNostrSession({
|
|
1055
|
-
...params,
|
|
1056
|
-
target
|
|
1057
|
-
});
|
|
1058
|
-
case "tlon": return resolveTlonSession({
|
|
1059
|
-
...params,
|
|
1060
|
-
target
|
|
1061
|
-
});
|
|
1062
|
-
case "feishu": return resolveFeishuSession({
|
|
1063
|
-
...params,
|
|
1064
|
-
target
|
|
1065
|
-
});
|
|
1066
|
-
default: return resolveFallbackSession({
|
|
1067
|
-
...params,
|
|
1068
|
-
target
|
|
1069
|
-
});
|
|
1070
|
-
}
|
|
1071
|
-
}
|
|
1072
|
-
async function ensureOutboundSessionEntry(params) {
|
|
1073
|
-
const storePath = resolveStorePath(params.cfg.session?.store, { agentId: params.agentId });
|
|
1074
|
-
const ctx = {
|
|
1075
|
-
From: params.route.from,
|
|
1076
|
-
To: params.route.to,
|
|
1077
|
-
SessionKey: params.route.sessionKey,
|
|
1078
|
-
AccountId: params.accountId ?? void 0,
|
|
1079
|
-
ChatType: params.route.chatType,
|
|
1080
|
-
Provider: params.channel,
|
|
1081
|
-
Surface: params.channel,
|
|
1082
|
-
MessageThreadId: params.route.threadId,
|
|
1083
|
-
OriginatingChannel: params.channel,
|
|
1084
|
-
OriginatingTo: params.route.to
|
|
1085
|
-
};
|
|
1086
|
-
try {
|
|
1087
|
-
await recordSessionMetaFromInbound({
|
|
1088
|
-
storePath,
|
|
1089
|
-
sessionKey: params.route.sessionKey,
|
|
1090
|
-
ctx
|
|
1091
|
-
});
|
|
1092
|
-
} catch {}
|
|
1093
|
-
}
|
|
1094
|
-
|
|
1095
|
-
//#endregion
|
|
1096
|
-
//#region src/channels/plugins/message-actions.ts
|
|
1097
|
-
const trustedRequesterRequiredByChannel = { discord: new Set([
|
|
1098
|
-
"timeout",
|
|
1099
|
-
"kick",
|
|
1100
|
-
"ban"
|
|
1101
|
-
]) };
|
|
1102
|
-
function requiresTrustedRequesterSender(ctx) {
|
|
1103
|
-
const actions = trustedRequesterRequiredByChannel[ctx.channel];
|
|
1104
|
-
return Boolean(actions?.has(ctx.action) && ctx.toolContext);
|
|
1105
|
-
}
|
|
1106
|
-
function listChannelMessageActions(cfg) {
|
|
1107
|
-
const actions = new Set(["send", "broadcast"]);
|
|
1108
|
-
for (const plugin of listChannelPlugins()) {
|
|
1109
|
-
const list = plugin.actions?.listActions?.({ cfg });
|
|
1110
|
-
if (!list) continue;
|
|
1111
|
-
for (const action of list) actions.add(action);
|
|
1112
|
-
}
|
|
1113
|
-
return Array.from(actions);
|
|
1114
|
-
}
|
|
1115
|
-
function supportsChannelMessageButtons(cfg) {
|
|
1116
|
-
return supportsMessageFeature(cfg, (actions) => actions?.supportsButtons?.({ cfg }) === true);
|
|
1117
|
-
}
|
|
1118
|
-
function supportsChannelMessageButtonsForChannel(params) {
|
|
1119
|
-
return supportsMessageFeatureForChannel(params, (actions) => actions.supportsButtons?.(params) === true);
|
|
1120
|
-
}
|
|
1121
|
-
function supportsChannelMessageCards(cfg) {
|
|
1122
|
-
return supportsMessageFeature(cfg, (actions) => actions?.supportsCards?.({ cfg }) === true);
|
|
1123
|
-
}
|
|
1124
|
-
function supportsChannelMessageCardsForChannel(params) {
|
|
1125
|
-
return supportsMessageFeatureForChannel(params, (actions) => actions.supportsCards?.(params) === true);
|
|
1126
|
-
}
|
|
1127
|
-
function supportsMessageFeature(cfg, check) {
|
|
1128
|
-
for (const plugin of listChannelPlugins()) if (plugin.actions && check(plugin.actions)) return true;
|
|
1129
|
-
return false;
|
|
1130
|
-
}
|
|
1131
|
-
function supportsMessageFeatureForChannel(params, check) {
|
|
1132
|
-
if (!params.channel) return false;
|
|
1133
|
-
const plugin = getChannelPlugin(params.channel);
|
|
1134
|
-
return plugin?.actions ? check(plugin.actions) : false;
|
|
1135
|
-
}
|
|
1136
|
-
async function dispatchChannelMessageAction(ctx) {
|
|
1137
|
-
if (requiresTrustedRequesterSender(ctx) && !ctx.requesterSenderId?.trim()) throw new Error(`Trusted sender identity is required for ${ctx.channel}:${ctx.action} in tool-driven contexts.`);
|
|
1138
|
-
const plugin = getChannelPlugin(ctx.channel);
|
|
1139
|
-
if (!plugin?.actions?.handleAction) return null;
|
|
1140
|
-
if (plugin.actions.supportsAction && !plugin.actions.supportsAction({ action: ctx.action })) return null;
|
|
1141
|
-
return await plugin.actions.handleAction(ctx);
|
|
1142
|
-
}
|
|
1143
|
-
|
|
1144
|
-
//#endregion
|
|
1145
|
-
//#region src/infra/outbound/message-action-spec.ts
|
|
1146
|
-
const MESSAGE_ACTION_TARGET_MODE = {
|
|
1147
|
-
send: "to",
|
|
1148
|
-
broadcast: "none",
|
|
1149
|
-
poll: "to",
|
|
1150
|
-
react: "to",
|
|
1151
|
-
reactions: "to",
|
|
1152
|
-
read: "to",
|
|
1153
|
-
edit: "to",
|
|
1154
|
-
unsend: "to",
|
|
1155
|
-
reply: "to",
|
|
1156
|
-
sendWithEffect: "to",
|
|
1157
|
-
renameGroup: "to",
|
|
1158
|
-
setGroupIcon: "to",
|
|
1159
|
-
addParticipant: "to",
|
|
1160
|
-
removeParticipant: "to",
|
|
1161
|
-
leaveGroup: "to",
|
|
1162
|
-
sendAttachment: "to",
|
|
1163
|
-
delete: "to",
|
|
1164
|
-
pin: "to",
|
|
1165
|
-
unpin: "to",
|
|
1166
|
-
"list-pins": "to",
|
|
1167
|
-
permissions: "to",
|
|
1168
|
-
"thread-create": "to",
|
|
1169
|
-
"thread-list": "none",
|
|
1170
|
-
"thread-reply": "to",
|
|
1171
|
-
search: "none",
|
|
1172
|
-
sticker: "to",
|
|
1173
|
-
"sticker-search": "none",
|
|
1174
|
-
"member-info": "none",
|
|
1175
|
-
"role-info": "none",
|
|
1176
|
-
"emoji-list": "none",
|
|
1177
|
-
"emoji-upload": "none",
|
|
1178
|
-
"sticker-upload": "none",
|
|
1179
|
-
"role-add": "none",
|
|
1180
|
-
"role-remove": "none",
|
|
1181
|
-
"channel-info": "channelId",
|
|
1182
|
-
"channel-list": "none",
|
|
1183
|
-
"channel-create": "none",
|
|
1184
|
-
"channel-edit": "channelId",
|
|
1185
|
-
"channel-delete": "channelId",
|
|
1186
|
-
"channel-move": "channelId",
|
|
1187
|
-
"category-create": "none",
|
|
1188
|
-
"category-edit": "none",
|
|
1189
|
-
"category-delete": "none",
|
|
1190
|
-
"topic-create": "to",
|
|
1191
|
-
"voice-status": "none",
|
|
1192
|
-
"event-list": "none",
|
|
1193
|
-
"event-create": "none",
|
|
1194
|
-
timeout: "none",
|
|
1195
|
-
kick: "none",
|
|
1196
|
-
ban: "none",
|
|
1197
|
-
"set-presence": "none"
|
|
1198
|
-
};
|
|
1199
|
-
const ACTION_TARGET_ALIASES = {
|
|
1200
|
-
unsend: ["messageId"],
|
|
1201
|
-
edit: ["messageId"],
|
|
1202
|
-
react: [
|
|
1203
|
-
"chatGuid",
|
|
1204
|
-
"chatIdentifier",
|
|
1205
|
-
"chatId"
|
|
1206
|
-
],
|
|
1207
|
-
renameGroup: [
|
|
1208
|
-
"chatGuid",
|
|
1209
|
-
"chatIdentifier",
|
|
1210
|
-
"chatId"
|
|
1211
|
-
],
|
|
1212
|
-
setGroupIcon: [
|
|
1213
|
-
"chatGuid",
|
|
1214
|
-
"chatIdentifier",
|
|
1215
|
-
"chatId"
|
|
1216
|
-
],
|
|
1217
|
-
addParticipant: [
|
|
1218
|
-
"chatGuid",
|
|
1219
|
-
"chatIdentifier",
|
|
1220
|
-
"chatId"
|
|
1221
|
-
],
|
|
1222
|
-
removeParticipant: [
|
|
1223
|
-
"chatGuid",
|
|
1224
|
-
"chatIdentifier",
|
|
1225
|
-
"chatId"
|
|
1226
|
-
],
|
|
1227
|
-
leaveGroup: [
|
|
1228
|
-
"chatGuid",
|
|
1229
|
-
"chatIdentifier",
|
|
1230
|
-
"chatId"
|
|
1231
|
-
]
|
|
1232
|
-
};
|
|
1233
|
-
function actionRequiresTarget(action) {
|
|
1234
|
-
return MESSAGE_ACTION_TARGET_MODE[action] !== "none";
|
|
1235
|
-
}
|
|
1236
|
-
function actionHasTarget(action, params) {
|
|
1237
|
-
if (typeof params.to === "string" ? params.to.trim() : "") return true;
|
|
1238
|
-
if (typeof params.channelId === "string" ? params.channelId.trim() : "") return true;
|
|
1239
|
-
const aliases = ACTION_TARGET_ALIASES[action];
|
|
1240
|
-
if (!aliases) return false;
|
|
1241
|
-
return aliases.some((alias) => {
|
|
1242
|
-
const value = params[alias];
|
|
1243
|
-
if (typeof value === "string") return value.trim().length > 0;
|
|
1244
|
-
if (typeof value === "number") return Number.isFinite(value);
|
|
1245
|
-
return false;
|
|
1246
|
-
});
|
|
1247
|
-
}
|
|
1248
|
-
|
|
1249
|
-
//#endregion
|
|
1250
|
-
//#region src/infra/outbound/channel-target.ts
|
|
1251
|
-
const CHANNEL_TARGET_DESCRIPTION = "Recipient/channel: E.164 for WhatsApp/Signal, Telegram chat id/@username, Discord/Slack channel/user, or iMessage handle/chat_id";
|
|
1252
|
-
const CHANNEL_TARGETS_DESCRIPTION = "Recipient/channel targets (same format as --target); accepts ids or names when the directory is available.";
|
|
1253
|
-
function applyTargetToParams(params) {
|
|
1254
|
-
const target = typeof params.args.target === "string" ? params.args.target.trim() : "";
|
|
1255
|
-
const hasLegacyTo = typeof params.args.to === "string";
|
|
1256
|
-
const hasLegacyChannelId = typeof params.args.channelId === "string";
|
|
1257
|
-
const mode = MESSAGE_ACTION_TARGET_MODE[params.action] ?? "none";
|
|
1258
|
-
if (mode !== "none") {
|
|
1259
|
-
if (hasLegacyTo || hasLegacyChannelId) throw new Error("Use `target` instead of `to`/`channelId`.");
|
|
1260
|
-
} else if (hasLegacyTo) throw new Error("Use `target` for actions that accept a destination.");
|
|
1261
|
-
if (!target) return;
|
|
1262
|
-
if (mode === "channelId") {
|
|
1263
|
-
params.args.channelId = target;
|
|
1264
|
-
return;
|
|
1265
|
-
}
|
|
1266
|
-
if (mode === "to") {
|
|
1267
|
-
params.args.to = target;
|
|
1268
|
-
return;
|
|
1269
|
-
}
|
|
1270
|
-
throw new Error(`Action ${params.action} does not accept a target.`);
|
|
1271
|
-
}
|
|
1272
|
-
|
|
1273
|
-
//#endregion
|
|
1274
|
-
//#region src/infra/outbound/message-action-params.ts
|
|
1275
|
-
function readBooleanParam(params, key) {
|
|
1276
|
-
const raw = params[key];
|
|
1277
|
-
if (typeof raw === "boolean") return raw;
|
|
1278
|
-
if (typeof raw === "string") {
|
|
1279
|
-
const trimmed = raw.trim().toLowerCase();
|
|
1280
|
-
if (trimmed === "true") return true;
|
|
1281
|
-
if (trimmed === "false") return false;
|
|
1282
|
-
}
|
|
1283
|
-
}
|
|
1284
|
-
function resolveSlackAutoThreadId(params) {
|
|
1285
|
-
const context = params.toolContext;
|
|
1286
|
-
if (!context?.currentThreadTs || !context.currentChannelId) return;
|
|
1287
|
-
if (context.replyToMode !== "all" && context.replyToMode !== "first") return;
|
|
1288
|
-
const parsedTarget = parseSlackTarget(params.to, { defaultKind: "channel" });
|
|
1289
|
-
if (!parsedTarget || parsedTarget.kind !== "channel") return;
|
|
1290
|
-
if (parsedTarget.id.toLowerCase() !== context.currentChannelId.toLowerCase()) return;
|
|
1291
|
-
if (context.replyToMode === "first" && context.hasRepliedRef?.value) return;
|
|
1292
|
-
return context.currentThreadTs;
|
|
1293
|
-
}
|
|
1294
|
-
/**
|
|
1295
|
-
* Auto-inject Telegram forum topic thread ID when the message tool targets
|
|
1296
|
-
* the same chat the session originated from. Mirrors the Slack auto-threading
|
|
1297
|
-
* pattern so media, buttons, and other tool-sent messages land in the correct
|
|
1298
|
-
* topic instead of the General Topic.
|
|
1299
|
-
*
|
|
1300
|
-
* Unlike Slack, we do not gate on `replyToMode` here: Telegram forum topics
|
|
1301
|
-
* are persistent sub-channels (not ephemeral reply threads), so auto-injection
|
|
1302
|
-
* should always apply when the target chat matches.
|
|
1303
|
-
*/
|
|
1304
|
-
function resolveTelegramAutoThreadId(params) {
|
|
1305
|
-
const context = params.toolContext;
|
|
1306
|
-
if (!context?.currentThreadTs || !context.currentChannelId) return;
|
|
1307
|
-
const parsedTo = parseTelegramTarget(params.to);
|
|
1308
|
-
const parsedChannel = parseTelegramTarget(context.currentChannelId);
|
|
1309
|
-
if (parsedTo.chatId.toLowerCase() !== parsedChannel.chatId.toLowerCase()) return;
|
|
1310
|
-
return context.currentThreadTs;
|
|
1311
|
-
}
|
|
1312
|
-
function resolveAttachmentMaxBytes(params) {
|
|
1313
|
-
const accountId = typeof params.accountId === "string" ? params.accountId.trim() : "";
|
|
1314
|
-
const channelCfg = params.cfg.channels?.[params.channel];
|
|
1315
|
-
const channelObj = channelCfg && typeof channelCfg === "object" ? channelCfg : void 0;
|
|
1316
|
-
const channelMediaMax = typeof channelObj?.mediaMaxMb === "number" ? channelObj.mediaMaxMb : void 0;
|
|
1317
|
-
const accountsObj = channelObj?.accounts && typeof channelObj.accounts === "object" ? channelObj.accounts : void 0;
|
|
1318
|
-
const accountCfg = accountId && accountsObj ? accountsObj[accountId] : void 0;
|
|
1319
|
-
const accountMediaMax = accountCfg && typeof accountCfg === "object" ? accountCfg.mediaMaxMb : void 0;
|
|
1320
|
-
const limitMb = (typeof accountMediaMax === "number" ? accountMediaMax : void 0) ?? channelMediaMax ?? params.cfg.agents?.defaults?.mediaMaxMb;
|
|
1321
|
-
return typeof limitMb === "number" ? limitMb * 1024 * 1024 : void 0;
|
|
1322
|
-
}
|
|
1323
|
-
function inferAttachmentFilename(params) {
|
|
1324
|
-
const mediaHint = params.mediaHint?.trim();
|
|
1325
|
-
if (mediaHint) try {
|
|
1326
|
-
if (mediaHint.startsWith("file://")) {
|
|
1327
|
-
const filePath = fileURLToPath(mediaHint);
|
|
1328
|
-
const base = path.basename(filePath);
|
|
1329
|
-
if (base) return base;
|
|
1330
|
-
} else if (/^https?:\/\//i.test(mediaHint)) {
|
|
1331
|
-
const url = new URL(mediaHint);
|
|
1332
|
-
const base = path.basename(url.pathname);
|
|
1333
|
-
if (base) return base;
|
|
1334
|
-
} else {
|
|
1335
|
-
const base = path.basename(mediaHint);
|
|
1336
|
-
if (base) return base;
|
|
1337
|
-
}
|
|
1338
|
-
} catch {}
|
|
1339
|
-
const ext = params.contentType ? extensionForMime(params.contentType) : void 0;
|
|
1340
|
-
return ext ? `attachment${ext}` : "attachment";
|
|
1341
|
-
}
|
|
1342
|
-
function normalizeBase64Payload(params) {
|
|
1343
|
-
if (!params.base64) return {
|
|
1344
|
-
base64: params.base64,
|
|
1345
|
-
contentType: params.contentType
|
|
1346
|
-
};
|
|
1347
|
-
const match = /^data:([^;]+);base64,(.*)$/i.exec(params.base64.trim());
|
|
1348
|
-
if (!match) return {
|
|
1349
|
-
base64: params.base64,
|
|
1350
|
-
contentType: params.contentType
|
|
1351
|
-
};
|
|
1352
|
-
const [, mime, payload] = match;
|
|
1353
|
-
return {
|
|
1354
|
-
base64: payload,
|
|
1355
|
-
contentType: params.contentType ?? mime
|
|
1356
|
-
};
|
|
1357
|
-
}
|
|
1358
|
-
function resolveAttachmentMediaPolicy(params) {
|
|
1359
|
-
const sandboxRoot = params.sandboxRoot?.trim();
|
|
1360
|
-
if (sandboxRoot) return {
|
|
1361
|
-
mode: "sandbox",
|
|
1362
|
-
sandboxRoot
|
|
1363
|
-
};
|
|
1364
|
-
return {
|
|
1365
|
-
mode: "host",
|
|
1366
|
-
localRoots: params.mediaLocalRoots
|
|
1367
|
-
};
|
|
1368
|
-
}
|
|
1369
|
-
function buildAttachmentMediaLoadOptions(params) {
|
|
1370
|
-
if (params.policy.mode === "sandbox") return {
|
|
1371
|
-
maxBytes: params.maxBytes,
|
|
1372
|
-
sandboxValidated: true,
|
|
1373
|
-
readFile: (filePath) => fs.readFile(filePath)
|
|
1374
|
-
};
|
|
1375
|
-
return {
|
|
1376
|
-
maxBytes: params.maxBytes,
|
|
1377
|
-
localRoots: params.policy.localRoots
|
|
1378
|
-
};
|
|
1379
|
-
}
|
|
1380
|
-
async function hydrateAttachmentPayload(params) {
|
|
1381
|
-
const contentTypeParam = params.contentTypeParam ?? void 0;
|
|
1382
|
-
const rawBuffer = readStringParam(params.args, "buffer", { trim: false });
|
|
1383
|
-
const normalized = normalizeBase64Payload({
|
|
1384
|
-
base64: rawBuffer,
|
|
1385
|
-
contentType: contentTypeParam ?? void 0
|
|
1386
|
-
});
|
|
1387
|
-
if (normalized.base64 !== rawBuffer && normalized.base64) {
|
|
1388
|
-
params.args.buffer = normalized.base64;
|
|
1389
|
-
if (normalized.contentType && !contentTypeParam) params.args.contentType = normalized.contentType;
|
|
1390
|
-
}
|
|
1391
|
-
const filename = readStringParam(params.args, "filename");
|
|
1392
|
-
const mediaSource = (params.mediaHint ?? void 0) || (params.fileHint ?? void 0);
|
|
1393
|
-
if (!params.dryRun && !readStringParam(params.args, "buffer", { trim: false }) && mediaSource) {
|
|
1394
|
-
const maxBytes = resolveAttachmentMaxBytes({
|
|
1395
|
-
cfg: params.cfg,
|
|
1396
|
-
channel: params.channel,
|
|
1397
|
-
accountId: params.accountId
|
|
1398
|
-
});
|
|
1399
|
-
const media = await loadWebMedia(mediaSource, buildAttachmentMediaLoadOptions({
|
|
1400
|
-
policy: params.mediaPolicy,
|
|
1401
|
-
maxBytes
|
|
1402
|
-
}));
|
|
1403
|
-
params.args.buffer = media.buffer.toString("base64");
|
|
1404
|
-
if (!contentTypeParam && media.contentType) params.args.contentType = media.contentType;
|
|
1405
|
-
if (!filename) params.args.filename = inferAttachmentFilename({
|
|
1406
|
-
mediaHint: media.fileName ?? mediaSource,
|
|
1407
|
-
contentType: media.contentType ?? contentTypeParam ?? void 0
|
|
1408
|
-
});
|
|
1409
|
-
} else if (!filename) params.args.filename = inferAttachmentFilename({
|
|
1410
|
-
mediaHint: mediaSource,
|
|
1411
|
-
contentType: contentTypeParam ?? void 0
|
|
1412
|
-
});
|
|
1413
|
-
}
|
|
1414
|
-
async function normalizeSandboxMediaList(params) {
|
|
1415
|
-
const normalized = [];
|
|
1416
|
-
const seen = /* @__PURE__ */ new Set();
|
|
1417
|
-
for (const value of params.values) {
|
|
1418
|
-
const raw = value?.trim();
|
|
1419
|
-
if (!raw) continue;
|
|
1420
|
-
if (seen.has(raw)) continue;
|
|
1421
|
-
seen.add(raw);
|
|
1422
|
-
normalized.push(raw);
|
|
1423
|
-
}
|
|
1424
|
-
return normalized;
|
|
1425
|
-
}
|
|
1426
|
-
async function hydrateAttachmentActionPayload(params) {
|
|
1427
|
-
const mediaHint = readStringParam(params.args, "media", { trim: false });
|
|
1428
|
-
const fileHint = readStringParam(params.args, "path", { trim: false }) ?? readStringParam(params.args, "filePath", { trim: false });
|
|
1429
|
-
const contentTypeParam = readStringParam(params.args, "contentType") ?? readStringParam(params.args, "mimeType");
|
|
1430
|
-
if (params.allowMessageCaptionFallback) {
|
|
1431
|
-
const caption = readStringParam(params.args, "caption", { allowEmpty: true })?.trim();
|
|
1432
|
-
const message = readStringParam(params.args, "message", { allowEmpty: true })?.trim();
|
|
1433
|
-
if (!caption && message) params.args.caption = message;
|
|
1434
|
-
}
|
|
1435
|
-
await hydrateAttachmentPayload({
|
|
1436
|
-
cfg: params.cfg,
|
|
1437
|
-
channel: params.channel,
|
|
1438
|
-
accountId: params.accountId,
|
|
1439
|
-
args: params.args,
|
|
1440
|
-
dryRun: params.dryRun,
|
|
1441
|
-
contentTypeParam,
|
|
1442
|
-
mediaHint,
|
|
1443
|
-
fileHint,
|
|
1444
|
-
mediaPolicy: params.mediaPolicy
|
|
1445
|
-
});
|
|
1446
|
-
}
|
|
1447
|
-
async function hydrateAttachmentParamsForAction(params) {
|
|
1448
|
-
if (params.action !== "sendAttachment" && params.action !== "setGroupIcon") return;
|
|
1449
|
-
await hydrateAttachmentActionPayload({
|
|
1450
|
-
cfg: params.cfg,
|
|
1451
|
-
channel: params.channel,
|
|
1452
|
-
accountId: params.accountId,
|
|
1453
|
-
args: params.args,
|
|
1454
|
-
dryRun: params.dryRun,
|
|
1455
|
-
mediaPolicy: params.mediaPolicy,
|
|
1456
|
-
allowMessageCaptionFallback: params.action === "sendAttachment"
|
|
1457
|
-
});
|
|
1458
|
-
}
|
|
1459
|
-
function parseButtonsParam(params) {
|
|
1460
|
-
const raw = params.buttons;
|
|
1461
|
-
if (typeof raw !== "string") return;
|
|
1462
|
-
const trimmed = raw.trim();
|
|
1463
|
-
if (!trimmed) {
|
|
1464
|
-
delete params.buttons;
|
|
1465
|
-
return;
|
|
1466
|
-
}
|
|
1467
|
-
try {
|
|
1468
|
-
params.buttons = JSON.parse(trimmed);
|
|
1469
|
-
} catch {
|
|
1470
|
-
throw new Error("--buttons must be valid JSON");
|
|
1471
|
-
}
|
|
1472
|
-
}
|
|
1473
|
-
function parseCardParam(params) {
|
|
1474
|
-
const raw = params.card;
|
|
1475
|
-
if (typeof raw !== "string") return;
|
|
1476
|
-
const trimmed = raw.trim();
|
|
1477
|
-
if (!trimmed) {
|
|
1478
|
-
delete params.card;
|
|
1479
|
-
return;
|
|
1480
|
-
}
|
|
1481
|
-
try {
|
|
1482
|
-
params.card = JSON.parse(trimmed);
|
|
1483
|
-
} catch {
|
|
1484
|
-
throw new Error("--card must be valid JSON");
|
|
1485
|
-
}
|
|
1486
|
-
}
|
|
1487
|
-
function parseComponentsParam(params) {
|
|
1488
|
-
const raw = params.components;
|
|
1489
|
-
if (typeof raw !== "string") return;
|
|
1490
|
-
const trimmed = raw.trim();
|
|
1491
|
-
if (!trimmed) {
|
|
1492
|
-
delete params.components;
|
|
1493
|
-
return;
|
|
1494
|
-
}
|
|
1495
|
-
try {
|
|
1496
|
-
params.components = JSON.parse(trimmed);
|
|
1497
|
-
} catch {
|
|
1498
|
-
throw new Error("--components must be valid JSON");
|
|
1499
|
-
}
|
|
1500
|
-
}
|
|
1501
|
-
|
|
1502
|
-
//#endregion
|
|
1503
|
-
//#region src/discord/ui.ts
|
|
1504
|
-
const DEFAULT_DISCORD_ACCENT_COLOR = "#5865F2";
|
|
1505
|
-
function normalizeDiscordAccentColor(raw) {
|
|
1506
|
-
const trimmed = (raw ?? "").trim();
|
|
1507
|
-
if (!trimmed) return null;
|
|
1508
|
-
const normalized = trimmed.startsWith("#") ? trimmed : `#${trimmed}`;
|
|
1509
|
-
if (!/^#[0-9a-fA-F]{6}$/.test(normalized)) return null;
|
|
1510
|
-
return normalized.toUpperCase();
|
|
1511
|
-
}
|
|
1512
|
-
function resolveDiscordAccentColor(params) {
|
|
1513
|
-
return normalizeDiscordAccentColor(resolveDiscordAccount({
|
|
1514
|
-
cfg: params.cfg,
|
|
1515
|
-
accountId: params.accountId
|
|
1516
|
-
}).config.ui?.components?.accentColor) ?? DEFAULT_DISCORD_ACCENT_COLOR;
|
|
1517
|
-
}
|
|
1518
|
-
var DiscordUiContainer = class extends Container {
|
|
1519
|
-
constructor(params) {
|
|
1520
|
-
const accentColor = normalizeDiscordAccentColor(params.accentColor) ?? resolveDiscordAccentColor({
|
|
1521
|
-
cfg: params.cfg,
|
|
1522
|
-
accountId: params.accountId
|
|
1523
|
-
});
|
|
1524
|
-
super(params.components, {
|
|
1525
|
-
accentColor,
|
|
1526
|
-
spoiler: params.spoiler
|
|
1527
|
-
});
|
|
1528
|
-
}
|
|
1529
|
-
};
|
|
1530
|
-
|
|
1531
|
-
//#endregion
|
|
1532
|
-
//#region src/infra/outbound/channel-adapters.ts
|
|
1533
|
-
var CrossContextContainer = class extends DiscordUiContainer {
|
|
1534
|
-
constructor({ originLabel, message, cfg, accountId }) {
|
|
1535
|
-
const trimmed = message.trim();
|
|
1536
|
-
const components = [];
|
|
1537
|
-
if (trimmed) {
|
|
1538
|
-
components.push(new TextDisplay(message));
|
|
1539
|
-
components.push(new Separator({
|
|
1540
|
-
divider: true,
|
|
1541
|
-
spacing: "small"
|
|
1542
|
-
}));
|
|
1543
|
-
}
|
|
1544
|
-
components.push(new TextDisplay(`*From ${originLabel}*`));
|
|
1545
|
-
super({
|
|
1546
|
-
cfg,
|
|
1547
|
-
accountId,
|
|
1548
|
-
components
|
|
1549
|
-
});
|
|
1550
|
-
}
|
|
1551
|
-
};
|
|
1552
|
-
const DEFAULT_ADAPTER = { supportsComponentsV2: false };
|
|
1553
|
-
const DISCORD_ADAPTER = {
|
|
1554
|
-
supportsComponentsV2: true,
|
|
1555
|
-
buildCrossContextComponents: ({ originLabel, message, cfg, accountId }) => [new CrossContextContainer({
|
|
1556
|
-
originLabel,
|
|
1557
|
-
message,
|
|
1558
|
-
cfg,
|
|
1559
|
-
accountId
|
|
1560
|
-
})]
|
|
1561
|
-
};
|
|
1562
|
-
function getChannelMessageAdapter(channel) {
|
|
1563
|
-
if (channel === "discord") return DISCORD_ADAPTER;
|
|
1564
|
-
return DEFAULT_ADAPTER;
|
|
1565
|
-
}
|
|
1566
|
-
|
|
1567
|
-
//#endregion
|
|
1568
|
-
//#region src/infra/outbound/outbound-policy.ts
|
|
1569
|
-
const CONTEXT_GUARDED_ACTIONS = new Set([
|
|
1570
|
-
"send",
|
|
1571
|
-
"poll",
|
|
1572
|
-
"reply",
|
|
1573
|
-
"sendWithEffect",
|
|
1574
|
-
"sendAttachment",
|
|
1575
|
-
"thread-create",
|
|
1576
|
-
"thread-reply",
|
|
1577
|
-
"sticker"
|
|
1578
|
-
]);
|
|
1579
|
-
const CONTEXT_MARKER_ACTIONS = new Set([
|
|
1580
|
-
"send",
|
|
1581
|
-
"poll",
|
|
1582
|
-
"reply",
|
|
1583
|
-
"sendWithEffect",
|
|
1584
|
-
"sendAttachment",
|
|
1585
|
-
"thread-reply",
|
|
1586
|
-
"sticker"
|
|
1587
|
-
]);
|
|
1588
|
-
function resolveContextGuardTarget(action, params) {
|
|
1589
|
-
if (!CONTEXT_GUARDED_ACTIONS.has(action)) return;
|
|
1590
|
-
if (action === "thread-reply" || action === "thread-create") {
|
|
1591
|
-
if (typeof params.channelId === "string") return params.channelId;
|
|
1592
|
-
if (typeof params.to === "string") return params.to;
|
|
1593
|
-
return;
|
|
1594
|
-
}
|
|
1595
|
-
if (typeof params.to === "string") return params.to;
|
|
1596
|
-
if (typeof params.channelId === "string") return params.channelId;
|
|
1597
|
-
}
|
|
1598
|
-
function normalizeTarget(channel, raw) {
|
|
1599
|
-
return normalizeTargetForProvider(channel, raw) ?? raw.trim();
|
|
1600
|
-
}
|
|
1601
|
-
function isCrossContextTarget(params) {
|
|
1602
|
-
const currentTarget = params.toolContext?.currentChannelId?.trim();
|
|
1603
|
-
if (!currentTarget) return false;
|
|
1604
|
-
const normalizedTarget = normalizeTarget(params.channel, params.target);
|
|
1605
|
-
const normalizedCurrent = normalizeTarget(params.channel, currentTarget);
|
|
1606
|
-
if (!normalizedTarget || !normalizedCurrent) return false;
|
|
1607
|
-
return normalizedTarget !== normalizedCurrent;
|
|
1608
|
-
}
|
|
1609
|
-
function enforceCrossContextPolicy(params) {
|
|
1610
|
-
const currentTarget = params.toolContext?.currentChannelId?.trim();
|
|
1611
|
-
if (!currentTarget) return;
|
|
1612
|
-
if (!CONTEXT_GUARDED_ACTIONS.has(params.action)) return;
|
|
1613
|
-
if (params.cfg.tools?.message?.allowCrossContextSend) return;
|
|
1614
|
-
const currentProvider = params.toolContext?.currentChannelProvider;
|
|
1615
|
-
const allowWithinProvider = params.cfg.tools?.message?.crossContext?.allowWithinProvider !== false;
|
|
1616
|
-
const allowAcrossProviders = params.cfg.tools?.message?.crossContext?.allowAcrossProviders === true;
|
|
1617
|
-
if (currentProvider && currentProvider !== params.channel) {
|
|
1618
|
-
if (!allowAcrossProviders) throw new Error(`Cross-context messaging denied: action=${params.action} target provider "${params.channel}" while bound to "${currentProvider}".`);
|
|
1619
|
-
return;
|
|
1620
|
-
}
|
|
1621
|
-
if (allowWithinProvider) return;
|
|
1622
|
-
const target = resolveContextGuardTarget(params.action, params.args);
|
|
1623
|
-
if (!target) return;
|
|
1624
|
-
if (!isCrossContextTarget({
|
|
1625
|
-
channel: params.channel,
|
|
1626
|
-
target,
|
|
1627
|
-
toolContext: params.toolContext
|
|
1628
|
-
})) return;
|
|
1629
|
-
throw new Error(`Cross-context messaging denied: action=${params.action} target="${target}" while bound to "${currentTarget}" (channel=${params.channel}).`);
|
|
1630
|
-
}
|
|
1631
|
-
async function buildCrossContextDecoration(params) {
|
|
1632
|
-
if (!params.toolContext?.currentChannelId) return null;
|
|
1633
|
-
if (params.toolContext.skipCrossContextDecoration) return null;
|
|
1634
|
-
if (!isCrossContextTarget(params)) return null;
|
|
1635
|
-
const markerConfig = params.cfg.tools?.message?.crossContext?.marker;
|
|
1636
|
-
if (markerConfig?.enabled === false) return null;
|
|
1637
|
-
const currentName = await lookupDirectoryDisplay({
|
|
1638
|
-
cfg: params.cfg,
|
|
1639
|
-
channel: params.channel,
|
|
1640
|
-
targetId: params.toolContext.currentChannelId,
|
|
1641
|
-
accountId: params.accountId ?? void 0
|
|
1642
|
-
}) ?? params.toolContext.currentChannelId;
|
|
1643
|
-
const originLabel = formatTargetDisplay({
|
|
1644
|
-
channel: params.channel,
|
|
1645
|
-
target: params.toolContext.currentChannelId,
|
|
1646
|
-
display: currentName
|
|
1647
|
-
});
|
|
1648
|
-
const prefixTemplate = markerConfig?.prefix ?? "[from {channel}] ";
|
|
1649
|
-
const suffixTemplate = markerConfig?.suffix ?? "";
|
|
1650
|
-
const prefix = prefixTemplate.replaceAll("{channel}", originLabel);
|
|
1651
|
-
const suffix = suffixTemplate.replaceAll("{channel}", originLabel);
|
|
1652
|
-
const adapter = getChannelMessageAdapter(params.channel);
|
|
1653
|
-
return {
|
|
1654
|
-
prefix,
|
|
1655
|
-
suffix,
|
|
1656
|
-
componentsBuilder: adapter.supportsComponentsV2 ? adapter.buildCrossContextComponents ? (message) => adapter.buildCrossContextComponents({
|
|
1657
|
-
originLabel,
|
|
1658
|
-
message,
|
|
1659
|
-
cfg: params.cfg,
|
|
1660
|
-
accountId: params.accountId ?? void 0
|
|
1661
|
-
}) : void 0 : void 0
|
|
1662
|
-
};
|
|
1663
|
-
}
|
|
1664
|
-
function shouldApplyCrossContextMarker(action) {
|
|
1665
|
-
return CONTEXT_MARKER_ACTIONS.has(action);
|
|
1666
|
-
}
|
|
1667
|
-
function applyCrossContextDecoration(params) {
|
|
1668
|
-
if (params.preferComponents && params.decoration.componentsBuilder) return {
|
|
1669
|
-
message: params.message,
|
|
1670
|
-
componentsBuilder: params.decoration.componentsBuilder,
|
|
1671
|
-
usedComponents: true
|
|
1672
|
-
};
|
|
1673
|
-
return {
|
|
1674
|
-
message: `${params.decoration.prefix}${params.message}${params.decoration.suffix}`,
|
|
1675
|
-
usedComponents: false
|
|
1676
|
-
};
|
|
1677
|
-
}
|
|
1678
|
-
|
|
1679
|
-
//#endregion
|
|
1680
|
-
//#region src/infra/outbound/message.ts
|
|
1681
|
-
async function resolveRequiredChannel(params) {
|
|
1682
|
-
const channel = params.channel?.trim() ? normalizeChannelId(params.channel) : (await resolveMessageChannelSelection({ cfg: params.cfg })).channel;
|
|
1683
|
-
if (!channel) throw new Error(`Unknown channel: ${params.channel}`);
|
|
1684
|
-
return channel;
|
|
1685
|
-
}
|
|
1686
|
-
function resolveRequiredPlugin(channel) {
|
|
1687
|
-
const plugin = getChannelPlugin(channel);
|
|
1688
|
-
if (!plugin) throw new Error(`Unknown channel: ${channel}`);
|
|
1689
|
-
return plugin;
|
|
1690
|
-
}
|
|
1691
|
-
function resolveGatewayOptions(opts) {
|
|
1692
|
-
return {
|
|
1693
|
-
url: opts?.mode === GATEWAY_CLIENT_MODES.BACKEND || opts?.clientName === GATEWAY_CLIENT_NAMES.GATEWAY_CLIENT ? void 0 : opts?.url,
|
|
1694
|
-
token: opts?.token,
|
|
1695
|
-
timeoutMs: typeof opts?.timeoutMs === "number" && Number.isFinite(opts.timeoutMs) ? Math.max(1, Math.floor(opts.timeoutMs)) : 1e4,
|
|
1696
|
-
clientName: opts?.clientName ?? GATEWAY_CLIENT_NAMES.CLI,
|
|
1697
|
-
clientDisplayName: opts?.clientDisplayName,
|
|
1698
|
-
mode: opts?.mode ?? GATEWAY_CLIENT_MODES.CLI
|
|
1699
|
-
};
|
|
1700
|
-
}
|
|
1701
|
-
async function callMessageGateway(params) {
|
|
1702
|
-
const gateway = resolveGatewayOptions(params.gateway);
|
|
1703
|
-
return await callGatewayLeastPrivilege({
|
|
1704
|
-
url: gateway.url,
|
|
1705
|
-
token: gateway.token,
|
|
1706
|
-
method: params.method,
|
|
1707
|
-
params: params.params,
|
|
1708
|
-
timeoutMs: gateway.timeoutMs,
|
|
1709
|
-
clientName: gateway.clientName,
|
|
1710
|
-
clientDisplayName: gateway.clientDisplayName,
|
|
1711
|
-
mode: gateway.mode
|
|
1712
|
-
});
|
|
1713
|
-
}
|
|
1714
|
-
async function sendMessage(params) {
|
|
1715
|
-
const cfg = params.cfg ?? loadConfig();
|
|
1716
|
-
const channel = await resolveRequiredChannel({
|
|
1717
|
-
cfg,
|
|
1718
|
-
channel: params.channel
|
|
1719
|
-
});
|
|
1720
|
-
const deliveryMode = resolveRequiredPlugin(channel).outbound?.deliveryMode ?? "direct";
|
|
1721
|
-
const normalizedPayloads = normalizeReplyPayloadsForDelivery([{
|
|
1722
|
-
text: params.content,
|
|
1723
|
-
mediaUrl: params.mediaUrl,
|
|
1724
|
-
mediaUrls: params.mediaUrls
|
|
1725
|
-
}]);
|
|
1726
|
-
const mirrorText = normalizedPayloads.map((payload) => payload.text).filter(Boolean).join("\n");
|
|
1727
|
-
const mirrorMediaUrls = normalizedPayloads.flatMap((payload) => payload.mediaUrls ?? (payload.mediaUrl ? [payload.mediaUrl] : []));
|
|
1728
|
-
const primaryMediaUrl = mirrorMediaUrls[0] ?? params.mediaUrl ?? null;
|
|
1729
|
-
if (params.dryRun) return {
|
|
1730
|
-
channel,
|
|
1731
|
-
to: params.to,
|
|
1732
|
-
via: deliveryMode === "gateway" ? "gateway" : "direct",
|
|
1733
|
-
mediaUrl: primaryMediaUrl,
|
|
1734
|
-
mediaUrls: mirrorMediaUrls.length ? mirrorMediaUrls : void 0,
|
|
1735
|
-
dryRun: true
|
|
1736
|
-
};
|
|
1737
|
-
if (deliveryMode !== "gateway") {
|
|
1738
|
-
const outboundChannel = channel;
|
|
1739
|
-
const resolvedTarget = resolveOutboundTarget({
|
|
1740
|
-
channel: outboundChannel,
|
|
1741
|
-
to: params.to,
|
|
1742
|
-
cfg,
|
|
1743
|
-
accountId: params.accountId,
|
|
1744
|
-
mode: "explicit"
|
|
1745
|
-
});
|
|
1746
|
-
if (!resolvedTarget.ok) throw resolvedTarget.error;
|
|
1747
|
-
const results = await deliverOutboundPayloads({
|
|
1748
|
-
cfg,
|
|
1749
|
-
channel: outboundChannel,
|
|
1750
|
-
to: resolvedTarget.to,
|
|
1751
|
-
agentId: params.agentId,
|
|
1752
|
-
accountId: params.accountId,
|
|
1753
|
-
payloads: normalizedPayloads,
|
|
1754
|
-
replyToId: params.replyToId,
|
|
1755
|
-
threadId: params.threadId,
|
|
1756
|
-
gifPlayback: params.gifPlayback,
|
|
1757
|
-
deps: params.deps,
|
|
1758
|
-
bestEffort: params.bestEffort,
|
|
1759
|
-
abortSignal: params.abortSignal,
|
|
1760
|
-
silent: params.silent,
|
|
1761
|
-
mirror: params.mirror ? {
|
|
1762
|
-
...params.mirror,
|
|
1763
|
-
text: mirrorText || params.content,
|
|
1764
|
-
mediaUrls: mirrorMediaUrls.length ? mirrorMediaUrls : void 0
|
|
1765
|
-
} : void 0
|
|
1766
|
-
});
|
|
1767
|
-
return {
|
|
1768
|
-
channel,
|
|
1769
|
-
to: params.to,
|
|
1770
|
-
via: "direct",
|
|
1771
|
-
mediaUrl: primaryMediaUrl,
|
|
1772
|
-
mediaUrls: mirrorMediaUrls.length ? mirrorMediaUrls : void 0,
|
|
1773
|
-
result: results.at(-1)
|
|
1774
|
-
};
|
|
1775
|
-
}
|
|
1776
|
-
const result = await callMessageGateway({
|
|
1777
|
-
gateway: params.gateway,
|
|
1778
|
-
method: "send",
|
|
1779
|
-
params: {
|
|
1780
|
-
to: params.to,
|
|
1781
|
-
message: params.content,
|
|
1782
|
-
mediaUrl: params.mediaUrl,
|
|
1783
|
-
mediaUrls: mirrorMediaUrls.length ? mirrorMediaUrls : params.mediaUrls,
|
|
1784
|
-
gifPlayback: params.gifPlayback,
|
|
1785
|
-
accountId: params.accountId,
|
|
1786
|
-
channel,
|
|
1787
|
-
sessionKey: params.mirror?.sessionKey,
|
|
1788
|
-
idempotencyKey: params.idempotencyKey ?? randomIdempotencyKey()
|
|
1789
|
-
}
|
|
1790
|
-
});
|
|
1791
|
-
return {
|
|
1792
|
-
channel,
|
|
1793
|
-
to: params.to,
|
|
1794
|
-
via: "gateway",
|
|
1795
|
-
mediaUrl: primaryMediaUrl,
|
|
1796
|
-
mediaUrls: mirrorMediaUrls.length ? mirrorMediaUrls : void 0,
|
|
1797
|
-
result
|
|
1798
|
-
};
|
|
1799
|
-
}
|
|
1800
|
-
async function sendPoll(params) {
|
|
1801
|
-
const channel = await resolveRequiredChannel({
|
|
1802
|
-
cfg: params.cfg ?? loadConfig(),
|
|
1803
|
-
channel: params.channel
|
|
1804
|
-
});
|
|
1805
|
-
const pollInput = {
|
|
1806
|
-
question: params.question,
|
|
1807
|
-
options: params.options,
|
|
1808
|
-
maxSelections: params.maxSelections,
|
|
1809
|
-
durationSeconds: params.durationSeconds,
|
|
1810
|
-
durationHours: params.durationHours
|
|
1811
|
-
};
|
|
1812
|
-
const outbound = resolveRequiredPlugin(channel)?.outbound;
|
|
1813
|
-
if (!outbound?.sendPoll) throw new Error(`Unsupported poll channel: ${channel}`);
|
|
1814
|
-
const normalized = outbound.pollMaxOptions ? normalizePollInput(pollInput, { maxOptions: outbound.pollMaxOptions }) : normalizePollInput(pollInput);
|
|
1815
|
-
if (params.dryRun) return {
|
|
1816
|
-
channel,
|
|
1817
|
-
to: params.to,
|
|
1818
|
-
question: normalized.question,
|
|
1819
|
-
options: normalized.options,
|
|
1820
|
-
maxSelections: normalized.maxSelections,
|
|
1821
|
-
durationSeconds: normalized.durationSeconds ?? null,
|
|
1822
|
-
durationHours: normalized.durationHours ?? null,
|
|
1823
|
-
via: "gateway",
|
|
1824
|
-
dryRun: true
|
|
1825
|
-
};
|
|
1826
|
-
const result = await callMessageGateway({
|
|
1827
|
-
gateway: params.gateway,
|
|
1828
|
-
method: "poll",
|
|
1829
|
-
params: {
|
|
1830
|
-
to: params.to,
|
|
1831
|
-
question: normalized.question,
|
|
1832
|
-
options: normalized.options,
|
|
1833
|
-
maxSelections: normalized.maxSelections,
|
|
1834
|
-
durationSeconds: normalized.durationSeconds,
|
|
1835
|
-
durationHours: normalized.durationHours,
|
|
1836
|
-
threadId: params.threadId,
|
|
1837
|
-
silent: params.silent,
|
|
1838
|
-
isAnonymous: params.isAnonymous,
|
|
1839
|
-
channel,
|
|
1840
|
-
accountId: params.accountId,
|
|
1841
|
-
idempotencyKey: params.idempotencyKey ?? randomIdempotencyKey()
|
|
1842
|
-
}
|
|
1843
|
-
});
|
|
1844
|
-
return {
|
|
1845
|
-
channel,
|
|
1846
|
-
to: params.to,
|
|
1847
|
-
question: normalized.question,
|
|
1848
|
-
options: normalized.options,
|
|
1849
|
-
maxSelections: normalized.maxSelections,
|
|
1850
|
-
durationSeconds: normalized.durationSeconds ?? null,
|
|
1851
|
-
durationHours: normalized.durationHours ?? null,
|
|
1852
|
-
via: "gateway",
|
|
1853
|
-
result
|
|
1854
|
-
};
|
|
1855
|
-
}
|
|
1856
|
-
|
|
1857
|
-
//#endregion
|
|
1858
|
-
//#region src/infra/outbound/tool-payload.ts
|
|
1859
|
-
function extractToolPayload(result) {
|
|
1860
|
-
if (result.details !== void 0) return result.details;
|
|
1861
|
-
const text = (Array.isArray(result.content) ? result.content.find((block) => block && typeof block === "object" && block.type === "text" && typeof block.text === "string") : void 0)?.text;
|
|
1862
|
-
if (text) try {
|
|
1863
|
-
return JSON.parse(text);
|
|
1864
|
-
} catch {
|
|
1865
|
-
return text;
|
|
1866
|
-
}
|
|
1867
|
-
return result.content ?? result;
|
|
1868
|
-
}
|
|
1869
|
-
|
|
1870
|
-
//#endregion
|
|
1871
|
-
//#region src/infra/outbound/outbound-send-service.ts
|
|
1872
|
-
async function tryHandleWithPluginAction(params) {
|
|
1873
|
-
if (params.ctx.dryRun) return null;
|
|
1874
|
-
const mediaLocalRoots = getAgentScopedMediaLocalRoots(params.ctx.cfg, params.ctx.agentId ?? params.ctx.mirror?.agentId);
|
|
1875
|
-
const handled = await dispatchChannelMessageAction({
|
|
1876
|
-
channel: params.ctx.channel,
|
|
1877
|
-
action: params.action,
|
|
1878
|
-
cfg: params.ctx.cfg,
|
|
1879
|
-
params: params.ctx.params,
|
|
1880
|
-
mediaLocalRoots,
|
|
1881
|
-
accountId: params.ctx.accountId ?? void 0,
|
|
1882
|
-
gateway: params.ctx.gateway,
|
|
1883
|
-
toolContext: params.ctx.toolContext,
|
|
1884
|
-
dryRun: params.ctx.dryRun
|
|
1885
|
-
});
|
|
1886
|
-
if (!handled) return null;
|
|
1887
|
-
await params.onHandled?.();
|
|
1888
|
-
return {
|
|
1889
|
-
handledBy: "plugin",
|
|
1890
|
-
payload: extractToolPayload(handled),
|
|
1891
|
-
toolResult: handled
|
|
1892
|
-
};
|
|
1893
|
-
}
|
|
1894
|
-
async function executeSendAction(params) {
|
|
1895
|
-
throwIfAborted(params.ctx.abortSignal);
|
|
1896
|
-
const pluginHandled = await tryHandleWithPluginAction({
|
|
1897
|
-
ctx: params.ctx,
|
|
1898
|
-
action: "send",
|
|
1899
|
-
onHandled: async () => {
|
|
1900
|
-
if (!params.ctx.mirror) return;
|
|
1901
|
-
const mirrorText = params.ctx.mirror.text ?? params.message;
|
|
1902
|
-
const mirrorMediaUrls = params.ctx.mirror.mediaUrls ?? params.mediaUrls ?? (params.mediaUrl ? [params.mediaUrl] : void 0);
|
|
1903
|
-
await appendAssistantMessageToSessionTranscript({
|
|
1904
|
-
agentId: params.ctx.mirror.agentId,
|
|
1905
|
-
sessionKey: params.ctx.mirror.sessionKey,
|
|
1906
|
-
text: mirrorText,
|
|
1907
|
-
mediaUrls: mirrorMediaUrls
|
|
1908
|
-
});
|
|
1909
|
-
}
|
|
1910
|
-
});
|
|
1911
|
-
if (pluginHandled) return pluginHandled;
|
|
1912
|
-
throwIfAborted(params.ctx.abortSignal);
|
|
1913
|
-
const result = await sendMessage({
|
|
1914
|
-
cfg: params.ctx.cfg,
|
|
1915
|
-
to: params.to,
|
|
1916
|
-
content: params.message,
|
|
1917
|
-
agentId: params.ctx.agentId,
|
|
1918
|
-
mediaUrl: params.mediaUrl || void 0,
|
|
1919
|
-
mediaUrls: params.mediaUrls,
|
|
1920
|
-
channel: params.ctx.channel || void 0,
|
|
1921
|
-
accountId: params.ctx.accountId ?? void 0,
|
|
1922
|
-
replyToId: params.replyToId,
|
|
1923
|
-
threadId: params.threadId,
|
|
1924
|
-
gifPlayback: params.gifPlayback,
|
|
1925
|
-
dryRun: params.ctx.dryRun,
|
|
1926
|
-
bestEffort: params.bestEffort ?? void 0,
|
|
1927
|
-
deps: params.ctx.deps,
|
|
1928
|
-
gateway: params.ctx.gateway,
|
|
1929
|
-
mirror: params.ctx.mirror,
|
|
1930
|
-
abortSignal: params.ctx.abortSignal,
|
|
1931
|
-
silent: params.ctx.silent
|
|
1932
|
-
});
|
|
1933
|
-
return {
|
|
1934
|
-
handledBy: "core",
|
|
1935
|
-
payload: result,
|
|
1936
|
-
sendResult: result
|
|
1937
|
-
};
|
|
1938
|
-
}
|
|
1939
|
-
async function executePollAction(params) {
|
|
1940
|
-
const pluginHandled = await tryHandleWithPluginAction({
|
|
1941
|
-
ctx: params.ctx,
|
|
1942
|
-
action: "poll"
|
|
1943
|
-
});
|
|
1944
|
-
if (pluginHandled) return pluginHandled;
|
|
1945
|
-
const result = await sendPoll({
|
|
1946
|
-
cfg: params.ctx.cfg,
|
|
1947
|
-
to: params.to,
|
|
1948
|
-
question: params.question,
|
|
1949
|
-
options: params.options,
|
|
1950
|
-
maxSelections: params.maxSelections,
|
|
1951
|
-
durationSeconds: params.durationSeconds ?? void 0,
|
|
1952
|
-
durationHours: params.durationHours ?? void 0,
|
|
1953
|
-
channel: params.ctx.channel,
|
|
1954
|
-
accountId: params.ctx.accountId ?? void 0,
|
|
1955
|
-
threadId: params.threadId ?? void 0,
|
|
1956
|
-
silent: params.ctx.silent ?? void 0,
|
|
1957
|
-
isAnonymous: params.isAnonymous ?? void 0,
|
|
1958
|
-
dryRun: params.ctx.dryRun,
|
|
1959
|
-
gateway: params.ctx.gateway
|
|
1960
|
-
});
|
|
1961
|
-
return {
|
|
1962
|
-
handledBy: "core",
|
|
1963
|
-
payload: result,
|
|
1964
|
-
pollResult: result
|
|
1965
|
-
};
|
|
1966
|
-
}
|
|
1967
|
-
|
|
1968
|
-
//#endregion
|
|
1969
|
-
//#region src/infra/outbound/message-action-runner.ts
|
|
1970
|
-
function resolveAndApplyOutboundThreadId(params, ctx) {
|
|
1971
|
-
const threadId = readStringParam(params, "threadId");
|
|
1972
|
-
const slackAutoThreadId = ctx.allowSlackAutoThread && ctx.channel === "slack" && !threadId ? resolveSlackAutoThreadId({
|
|
1973
|
-
to: ctx.to,
|
|
1974
|
-
toolContext: ctx.toolContext
|
|
1975
|
-
}) : void 0;
|
|
1976
|
-
const telegramAutoThreadId = ctx.channel === "telegram" && !threadId ? resolveTelegramAutoThreadId({
|
|
1977
|
-
to: ctx.to,
|
|
1978
|
-
toolContext: ctx.toolContext
|
|
1979
|
-
}) : void 0;
|
|
1980
|
-
const resolved = threadId ?? slackAutoThreadId ?? telegramAutoThreadId;
|
|
1981
|
-
if (resolved && !params.threadId) params.threadId = resolved;
|
|
1982
|
-
return resolved ?? void 0;
|
|
1983
|
-
}
|
|
1984
|
-
function getToolResult(result) {
|
|
1985
|
-
return "toolResult" in result ? result.toolResult : void 0;
|
|
1986
|
-
}
|
|
1987
|
-
function applyCrossContextMessageDecoration({ params, message, decoration, preferComponents }) {
|
|
1988
|
-
const applied = applyCrossContextDecoration({
|
|
1989
|
-
message,
|
|
1990
|
-
decoration,
|
|
1991
|
-
preferComponents
|
|
1992
|
-
});
|
|
1993
|
-
params.message = applied.message;
|
|
1994
|
-
if (applied.componentsBuilder) params.components = applied.componentsBuilder;
|
|
1995
|
-
return applied.message;
|
|
1996
|
-
}
|
|
1997
|
-
async function maybeApplyCrossContextMarker(params) {
|
|
1998
|
-
if (!shouldApplyCrossContextMarker(params.action) || !params.toolContext) return params.message;
|
|
1999
|
-
const decoration = await buildCrossContextDecoration({
|
|
2000
|
-
cfg: params.cfg,
|
|
2001
|
-
channel: params.channel,
|
|
2002
|
-
target: params.target,
|
|
2003
|
-
toolContext: params.toolContext,
|
|
2004
|
-
accountId: params.accountId ?? void 0
|
|
2005
|
-
});
|
|
2006
|
-
if (!decoration) return params.message;
|
|
2007
|
-
return applyCrossContextMessageDecoration({
|
|
2008
|
-
params: params.args,
|
|
2009
|
-
message: params.message,
|
|
2010
|
-
decoration,
|
|
2011
|
-
preferComponents: params.preferComponents
|
|
2012
|
-
});
|
|
2013
|
-
}
|
|
2014
|
-
async function resolveChannel(cfg, params) {
|
|
2015
|
-
return (await resolveMessageChannelSelection({
|
|
2016
|
-
cfg,
|
|
2017
|
-
channel: readStringParam(params, "channel")
|
|
2018
|
-
})).channel;
|
|
2019
|
-
}
|
|
2020
|
-
async function resolveActionTarget(params) {
|
|
2021
|
-
let resolvedTarget;
|
|
2022
|
-
const toRaw = typeof params.args.to === "string" ? params.args.to.trim() : "";
|
|
2023
|
-
if (toRaw) {
|
|
2024
|
-
const resolved = await resolveChannelTarget({
|
|
2025
|
-
cfg: params.cfg,
|
|
2026
|
-
channel: params.channel,
|
|
2027
|
-
input: toRaw,
|
|
2028
|
-
accountId: params.accountId ?? void 0
|
|
2029
|
-
});
|
|
2030
|
-
if (resolved.ok) {
|
|
2031
|
-
params.args.to = resolved.target.to;
|
|
2032
|
-
resolvedTarget = resolved.target;
|
|
2033
|
-
} else throw resolved.error;
|
|
2034
|
-
}
|
|
2035
|
-
const channelIdRaw = typeof params.args.channelId === "string" ? params.args.channelId.trim() : "";
|
|
2036
|
-
if (channelIdRaw) {
|
|
2037
|
-
const resolved = await resolveChannelTarget({
|
|
2038
|
-
cfg: params.cfg,
|
|
2039
|
-
channel: params.channel,
|
|
2040
|
-
input: channelIdRaw,
|
|
2041
|
-
accountId: params.accountId ?? void 0,
|
|
2042
|
-
preferredKind: "group"
|
|
2043
|
-
});
|
|
2044
|
-
if (resolved.ok) {
|
|
2045
|
-
if (resolved.target.kind === "user") throw new Error(`Channel id "${channelIdRaw}" resolved to a user target.`);
|
|
2046
|
-
params.args.channelId = resolved.target.to.replace(/^(channel|group):/i, "");
|
|
2047
|
-
} else throw resolved.error;
|
|
2048
|
-
}
|
|
2049
|
-
return resolvedTarget;
|
|
2050
|
-
}
|
|
2051
|
-
function resolveGateway(input) {
|
|
2052
|
-
if (!input.gateway) return;
|
|
2053
|
-
return {
|
|
2054
|
-
url: input.gateway.url,
|
|
2055
|
-
token: input.gateway.token,
|
|
2056
|
-
timeoutMs: input.gateway.timeoutMs,
|
|
2057
|
-
clientName: input.gateway.clientName,
|
|
2058
|
-
clientDisplayName: input.gateway.clientDisplayName,
|
|
2059
|
-
mode: input.gateway.mode
|
|
2060
|
-
};
|
|
2061
|
-
}
|
|
2062
|
-
async function handleBroadcastAction(input, params) {
|
|
2063
|
-
throwIfAborted(input.abortSignal);
|
|
2064
|
-
if (!(input.cfg.tools?.message?.broadcast?.enabled !== false)) throw new Error("Broadcast is disabled. Set tools.message.broadcast.enabled to true.");
|
|
2065
|
-
const rawTargets = readStringArrayParam(params, "targets", { required: true }) ?? [];
|
|
2066
|
-
if (rawTargets.length === 0) throw new Error("Broadcast requires at least one target in --targets.");
|
|
2067
|
-
const channelHint = readStringParam(params, "channel");
|
|
2068
|
-
const configured = await listConfiguredMessageChannels(input.cfg);
|
|
2069
|
-
if (configured.length === 0) throw new Error("Broadcast requires at least one configured channel.");
|
|
2070
|
-
const targetChannels = channelHint && channelHint.trim().toLowerCase() !== "all" ? [await resolveChannel(input.cfg, { channel: channelHint })] : configured;
|
|
2071
|
-
const results = [];
|
|
2072
|
-
const isAbortError = (err) => err instanceof Error && err.name === "AbortError";
|
|
2073
|
-
for (const targetChannel of targetChannels) {
|
|
2074
|
-
throwIfAborted(input.abortSignal);
|
|
2075
|
-
for (const target of rawTargets) {
|
|
2076
|
-
throwIfAborted(input.abortSignal);
|
|
2077
|
-
try {
|
|
2078
|
-
const resolved = await resolveChannelTarget({
|
|
2079
|
-
cfg: input.cfg,
|
|
2080
|
-
channel: targetChannel,
|
|
2081
|
-
input: target
|
|
2082
|
-
});
|
|
2083
|
-
if (!resolved.ok) throw resolved.error;
|
|
2084
|
-
const sendResult = await runMessageAction({
|
|
2085
|
-
...input,
|
|
2086
|
-
action: "send",
|
|
2087
|
-
params: {
|
|
2088
|
-
...params,
|
|
2089
|
-
channel: targetChannel,
|
|
2090
|
-
target: resolved.target.to
|
|
2091
|
-
}
|
|
2092
|
-
});
|
|
2093
|
-
results.push({
|
|
2094
|
-
channel: targetChannel,
|
|
2095
|
-
to: resolved.target.to,
|
|
2096
|
-
ok: true,
|
|
2097
|
-
result: sendResult.kind === "send" ? sendResult.sendResult : void 0
|
|
2098
|
-
});
|
|
2099
|
-
} catch (err) {
|
|
2100
|
-
if (isAbortError(err)) throw err;
|
|
2101
|
-
results.push({
|
|
2102
|
-
channel: targetChannel,
|
|
2103
|
-
to: target,
|
|
2104
|
-
ok: false,
|
|
2105
|
-
error: err instanceof Error ? err.message : String(err)
|
|
2106
|
-
});
|
|
2107
|
-
}
|
|
2108
|
-
}
|
|
2109
|
-
}
|
|
2110
|
-
return {
|
|
2111
|
-
kind: "broadcast",
|
|
2112
|
-
channel: targetChannels[0] ?? "discord",
|
|
2113
|
-
action: "broadcast",
|
|
2114
|
-
handledBy: input.dryRun ? "dry-run" : "core",
|
|
2115
|
-
payload: { results },
|
|
2116
|
-
dryRun: Boolean(input.dryRun)
|
|
2117
|
-
};
|
|
2118
|
-
}
|
|
2119
|
-
async function handleSendAction(ctx) {
|
|
2120
|
-
const { cfg, params, channel, accountId, dryRun, gateway, input, agentId, resolvedTarget, abortSignal } = ctx;
|
|
2121
|
-
throwIfAborted(abortSignal);
|
|
2122
|
-
const action = "send";
|
|
2123
|
-
const to = readStringParam(params, "to", { required: true });
|
|
2124
|
-
const mediaHint = readStringParam(params, "media", { trim: false }) ?? readStringParam(params, "path", { trim: false }) ?? readStringParam(params, "filePath", { trim: false });
|
|
2125
|
-
const hasCard = params.card != null && typeof params.card === "object";
|
|
2126
|
-
const hasComponents = params.components != null && typeof params.components === "object";
|
|
2127
|
-
const caption = readStringParam(params, "caption", { allowEmpty: true }) ?? "";
|
|
2128
|
-
let message = readStringParam(params, "message", {
|
|
2129
|
-
required: !mediaHint && !hasCard && !hasComponents,
|
|
2130
|
-
allowEmpty: true
|
|
2131
|
-
}) ?? "";
|
|
2132
|
-
if (message.includes("\\n")) message = message.replaceAll("\\n", "\n");
|
|
2133
|
-
if (!message.trim() && caption.trim()) message = caption;
|
|
2134
|
-
const parsed = parseReplyDirectives(message);
|
|
2135
|
-
const mergedMediaUrls = [];
|
|
2136
|
-
const seenMedia = /* @__PURE__ */ new Set();
|
|
2137
|
-
const pushMedia = (value) => {
|
|
2138
|
-
const trimmed = value?.trim();
|
|
2139
|
-
if (!trimmed) return;
|
|
2140
|
-
if (seenMedia.has(trimmed)) return;
|
|
2141
|
-
seenMedia.add(trimmed);
|
|
2142
|
-
mergedMediaUrls.push(trimmed);
|
|
2143
|
-
};
|
|
2144
|
-
pushMedia(mediaHint);
|
|
2145
|
-
for (const url of parsed.mediaUrls ?? []) pushMedia(url);
|
|
2146
|
-
pushMedia(parsed.mediaUrl);
|
|
2147
|
-
const normalizedMediaUrls = await normalizeSandboxMediaList({
|
|
2148
|
-
values: mergedMediaUrls,
|
|
2149
|
-
sandboxRoot: input.sandboxRoot
|
|
2150
|
-
});
|
|
2151
|
-
mergedMediaUrls.length = 0;
|
|
2152
|
-
mergedMediaUrls.push(...normalizedMediaUrls);
|
|
2153
|
-
message = parsed.text;
|
|
2154
|
-
params.message = message;
|
|
2155
|
-
if (!params.replyTo && parsed.replyToId) params.replyTo = parsed.replyToId;
|
|
2156
|
-
if (!params.media) params.media = mergedMediaUrls[0] || void 0;
|
|
2157
|
-
message = await maybeApplyCrossContextMarker({
|
|
2158
|
-
cfg,
|
|
2159
|
-
channel,
|
|
2160
|
-
action,
|
|
2161
|
-
target: to,
|
|
2162
|
-
toolContext: input.toolContext,
|
|
2163
|
-
accountId,
|
|
2164
|
-
args: params,
|
|
2165
|
-
message,
|
|
2166
|
-
preferComponents: true
|
|
2167
|
-
});
|
|
2168
|
-
const mediaUrl = readStringParam(params, "media", { trim: false });
|
|
2169
|
-
if (channel === "whatsapp") {
|
|
2170
|
-
message = message.replace(/^(?:[ \t]*\r?\n)+/, "");
|
|
2171
|
-
if (!message.trim()) message = "";
|
|
2172
|
-
}
|
|
2173
|
-
if (!message.trim() && !mediaUrl && mergedMediaUrls.length === 0 && !hasCard && !hasComponents) throw new Error("send requires text or media");
|
|
2174
|
-
params.message = message;
|
|
2175
|
-
const gifPlayback = readBooleanParam(params, "gifPlayback") ?? false;
|
|
2176
|
-
const bestEffort = readBooleanParam(params, "bestEffort");
|
|
2177
|
-
const silent = readBooleanParam(params, "silent");
|
|
2178
|
-
const replyToId = readStringParam(params, "replyTo");
|
|
2179
|
-
const resolvedThreadId = resolveAndApplyOutboundThreadId(params, {
|
|
2180
|
-
channel,
|
|
2181
|
-
to,
|
|
2182
|
-
toolContext: input.toolContext,
|
|
2183
|
-
allowSlackAutoThread: channel === "slack" && !replyToId
|
|
2184
|
-
});
|
|
2185
|
-
const outboundRoute = agentId && !dryRun ? await resolveOutboundSessionRoute({
|
|
2186
|
-
cfg,
|
|
2187
|
-
channel,
|
|
2188
|
-
agentId,
|
|
2189
|
-
accountId,
|
|
2190
|
-
target: to,
|
|
2191
|
-
resolvedTarget,
|
|
2192
|
-
replyToId,
|
|
2193
|
-
threadId: resolvedThreadId
|
|
2194
|
-
}) : null;
|
|
2195
|
-
if (outboundRoute && agentId && !dryRun) await ensureOutboundSessionEntry({
|
|
2196
|
-
cfg,
|
|
2197
|
-
agentId,
|
|
2198
|
-
channel,
|
|
2199
|
-
accountId,
|
|
2200
|
-
route: outboundRoute
|
|
2201
|
-
});
|
|
2202
|
-
if (outboundRoute && !dryRun) params.__sessionKey = outboundRoute.sessionKey;
|
|
2203
|
-
if (agentId) params.__agentId = agentId;
|
|
2204
|
-
const mirrorMediaUrls = mergedMediaUrls.length > 0 ? mergedMediaUrls : mediaUrl ? [mediaUrl] : void 0;
|
|
2205
|
-
throwIfAborted(abortSignal);
|
|
2206
|
-
const send = await executeSendAction({
|
|
2207
|
-
ctx: {
|
|
2208
|
-
cfg,
|
|
2209
|
-
channel,
|
|
2210
|
-
params,
|
|
2211
|
-
agentId,
|
|
2212
|
-
accountId: accountId ?? void 0,
|
|
2213
|
-
gateway,
|
|
2214
|
-
toolContext: input.toolContext,
|
|
2215
|
-
deps: input.deps,
|
|
2216
|
-
dryRun,
|
|
2217
|
-
mirror: outboundRoute && !dryRun ? {
|
|
2218
|
-
sessionKey: outboundRoute.sessionKey,
|
|
2219
|
-
agentId,
|
|
2220
|
-
text: message,
|
|
2221
|
-
mediaUrls: mirrorMediaUrls
|
|
2222
|
-
} : void 0,
|
|
2223
|
-
abortSignal,
|
|
2224
|
-
silent: silent ?? void 0
|
|
2225
|
-
},
|
|
2226
|
-
to,
|
|
2227
|
-
message,
|
|
2228
|
-
mediaUrl: mediaUrl || void 0,
|
|
2229
|
-
mediaUrls: mergedMediaUrls.length ? mergedMediaUrls : void 0,
|
|
2230
|
-
gifPlayback,
|
|
2231
|
-
bestEffort: bestEffort ?? void 0,
|
|
2232
|
-
replyToId: replyToId ?? void 0,
|
|
2233
|
-
threadId: resolvedThreadId ?? void 0
|
|
2234
|
-
});
|
|
2235
|
-
return {
|
|
2236
|
-
kind: "send",
|
|
2237
|
-
channel,
|
|
2238
|
-
action,
|
|
2239
|
-
to,
|
|
2240
|
-
handledBy: send.handledBy,
|
|
2241
|
-
payload: send.payload,
|
|
2242
|
-
toolResult: send.toolResult,
|
|
2243
|
-
sendResult: send.sendResult,
|
|
2244
|
-
dryRun
|
|
2245
|
-
};
|
|
2246
|
-
}
|
|
2247
|
-
async function handlePollAction(ctx) {
|
|
2248
|
-
const { cfg, params, channel, accountId, dryRun, gateway, input, abortSignal } = ctx;
|
|
2249
|
-
throwIfAborted(abortSignal);
|
|
2250
|
-
const action = "poll";
|
|
2251
|
-
const to = readStringParam(params, "to", { required: true });
|
|
2252
|
-
const question = readStringParam(params, "pollQuestion", { required: true });
|
|
2253
|
-
const options = readStringArrayParam(params, "pollOption", { required: true }) ?? [];
|
|
2254
|
-
if (options.length < 2) throw new Error("pollOption requires at least two values");
|
|
2255
|
-
const silent = readBooleanParam(params, "silent");
|
|
2256
|
-
const allowMultiselect = readBooleanParam(params, "pollMulti") ?? false;
|
|
2257
|
-
const pollAnonymous = readBooleanParam(params, "pollAnonymous");
|
|
2258
|
-
const pollPublic = readBooleanParam(params, "pollPublic");
|
|
2259
|
-
if (pollAnonymous && pollPublic) throw new Error("pollAnonymous and pollPublic are mutually exclusive");
|
|
2260
|
-
const isAnonymous = pollAnonymous ? true : pollPublic ? false : void 0;
|
|
2261
|
-
const durationHours = readNumberParam(params, "pollDurationHours", { integer: true });
|
|
2262
|
-
const durationSeconds = readNumberParam(params, "pollDurationSeconds", { integer: true });
|
|
2263
|
-
const maxSelections = allowMultiselect ? Math.max(2, options.length) : 1;
|
|
2264
|
-
if (durationSeconds !== void 0 && channel !== "telegram") throw new Error("pollDurationSeconds is only supported for Telegram polls");
|
|
2265
|
-
if (isAnonymous !== void 0 && channel !== "telegram") throw new Error("pollAnonymous/pollPublic are only supported for Telegram polls");
|
|
2266
|
-
const resolvedThreadId = resolveAndApplyOutboundThreadId(params, {
|
|
2267
|
-
channel,
|
|
2268
|
-
to,
|
|
2269
|
-
toolContext: input.toolContext,
|
|
2270
|
-
allowSlackAutoThread: channel === "slack"
|
|
2271
|
-
});
|
|
2272
|
-
const base = typeof params.message === "string" ? params.message : "";
|
|
2273
|
-
await maybeApplyCrossContextMarker({
|
|
2274
|
-
cfg,
|
|
2275
|
-
channel,
|
|
2276
|
-
action,
|
|
2277
|
-
target: to,
|
|
2278
|
-
toolContext: input.toolContext,
|
|
2279
|
-
accountId,
|
|
2280
|
-
args: params,
|
|
2281
|
-
message: base,
|
|
2282
|
-
preferComponents: false
|
|
2283
|
-
});
|
|
2284
|
-
const poll = await executePollAction({
|
|
2285
|
-
ctx: {
|
|
2286
|
-
cfg,
|
|
2287
|
-
channel,
|
|
2288
|
-
params,
|
|
2289
|
-
accountId: accountId ?? void 0,
|
|
2290
|
-
gateway,
|
|
2291
|
-
toolContext: input.toolContext,
|
|
2292
|
-
dryRun,
|
|
2293
|
-
silent: silent ?? void 0
|
|
2294
|
-
},
|
|
2295
|
-
to,
|
|
2296
|
-
question,
|
|
2297
|
-
options,
|
|
2298
|
-
maxSelections,
|
|
2299
|
-
durationSeconds: durationSeconds ?? void 0,
|
|
2300
|
-
durationHours: durationHours ?? void 0,
|
|
2301
|
-
threadId: resolvedThreadId ?? void 0,
|
|
2302
|
-
isAnonymous
|
|
2303
|
-
});
|
|
2304
|
-
return {
|
|
2305
|
-
kind: "poll",
|
|
2306
|
-
channel,
|
|
2307
|
-
action,
|
|
2308
|
-
to,
|
|
2309
|
-
handledBy: poll.handledBy,
|
|
2310
|
-
payload: poll.payload,
|
|
2311
|
-
toolResult: poll.toolResult,
|
|
2312
|
-
pollResult: poll.pollResult,
|
|
2313
|
-
dryRun
|
|
2314
|
-
};
|
|
2315
|
-
}
|
|
2316
|
-
async function handlePluginAction(ctx) {
|
|
2317
|
-
const { cfg, params, channel, accountId, dryRun, gateway, input, abortSignal } = ctx;
|
|
2318
|
-
throwIfAborted(abortSignal);
|
|
2319
|
-
const action = input.action;
|
|
2320
|
-
if (dryRun) return {
|
|
2321
|
-
kind: "action",
|
|
2322
|
-
channel,
|
|
2323
|
-
action,
|
|
2324
|
-
handledBy: "dry-run",
|
|
2325
|
-
payload: {
|
|
2326
|
-
ok: true,
|
|
2327
|
-
dryRun: true,
|
|
2328
|
-
channel,
|
|
2329
|
-
action
|
|
2330
|
-
},
|
|
2331
|
-
dryRun: true
|
|
2332
|
-
};
|
|
2333
|
-
const handled = await dispatchChannelMessageAction({
|
|
2334
|
-
channel,
|
|
2335
|
-
action,
|
|
2336
|
-
cfg,
|
|
2337
|
-
params,
|
|
2338
|
-
accountId: accountId ?? void 0,
|
|
2339
|
-
requesterSenderId: input.requesterSenderId ?? void 0,
|
|
2340
|
-
gateway,
|
|
2341
|
-
toolContext: input.toolContext,
|
|
2342
|
-
dryRun
|
|
2343
|
-
});
|
|
2344
|
-
if (!handled) throw new Error(`Message action ${action} not supported for channel ${channel}.`);
|
|
2345
|
-
return {
|
|
2346
|
-
kind: "action",
|
|
2347
|
-
channel,
|
|
2348
|
-
action,
|
|
2349
|
-
handledBy: "plugin",
|
|
2350
|
-
payload: extractToolPayload(handled),
|
|
2351
|
-
toolResult: handled,
|
|
2352
|
-
dryRun
|
|
2353
|
-
};
|
|
2354
|
-
}
|
|
2355
|
-
async function runMessageAction(input) {
|
|
2356
|
-
const cfg = input.cfg;
|
|
2357
|
-
const params = { ...input.params };
|
|
2358
|
-
const resolvedAgentId = input.agentId ?? (input.sessionKey ? resolveSessionAgentId({
|
|
2359
|
-
sessionKey: input.sessionKey,
|
|
2360
|
-
config: cfg
|
|
2361
|
-
}) : void 0);
|
|
2362
|
-
parseButtonsParam(params);
|
|
2363
|
-
parseCardParam(params);
|
|
2364
|
-
parseComponentsParam(params);
|
|
2365
|
-
const action = input.action;
|
|
2366
|
-
if (action === "broadcast") return handleBroadcastAction(input, params);
|
|
2367
|
-
const explicitTarget = typeof params.target === "string" ? params.target.trim() : "";
|
|
2368
|
-
const hasLegacyTarget = typeof params.to === "string" && params.to.trim().length > 0 || typeof params.channelId === "string" && params.channelId.trim().length > 0;
|
|
2369
|
-
if (explicitTarget && hasLegacyTarget) {
|
|
2370
|
-
delete params.to;
|
|
2371
|
-
delete params.channelId;
|
|
2372
|
-
}
|
|
2373
|
-
if (!explicitTarget && !hasLegacyTarget && actionRequiresTarget(action) && !actionHasTarget(action, params)) {
|
|
2374
|
-
const inferredTarget = input.toolContext?.currentChannelId?.trim();
|
|
2375
|
-
if (inferredTarget) params.target = inferredTarget;
|
|
2376
|
-
}
|
|
2377
|
-
if (!explicitTarget && actionRequiresTarget(action) && hasLegacyTarget) {
|
|
2378
|
-
const legacyTo = typeof params.to === "string" ? params.to.trim() : "";
|
|
2379
|
-
const legacyChannelId = typeof params.channelId === "string" ? params.channelId.trim() : "";
|
|
2380
|
-
const legacyTarget = legacyTo || legacyChannelId;
|
|
2381
|
-
if (legacyTarget) {
|
|
2382
|
-
params.target = legacyTarget;
|
|
2383
|
-
delete params.to;
|
|
2384
|
-
delete params.channelId;
|
|
2385
|
-
}
|
|
2386
|
-
}
|
|
2387
|
-
if (!(typeof params.channel === "string" ? params.channel.trim() : "")) {
|
|
2388
|
-
const inferredChannel = normalizeMessageChannel(input.toolContext?.currentChannelProvider);
|
|
2389
|
-
if (inferredChannel && isDeliverableMessageChannel(inferredChannel)) params.channel = inferredChannel;
|
|
2390
|
-
}
|
|
2391
|
-
applyTargetToParams({
|
|
2392
|
-
action,
|
|
2393
|
-
args: params
|
|
2394
|
-
});
|
|
2395
|
-
if (actionRequiresTarget(action)) {
|
|
2396
|
-
if (!actionHasTarget(action, params)) throw new Error(`Action ${action} requires a target.`);
|
|
2397
|
-
}
|
|
2398
|
-
const channel = await resolveChannel(cfg, params);
|
|
2399
|
-
const accountId = readStringParam(params, "accountId") ?? input.defaultAccountId;
|
|
2400
|
-
if (accountId) params.accountId = accountId;
|
|
2401
|
-
const dryRun = Boolean(input.dryRun ?? readBooleanParam(params, "dryRun"));
|
|
2402
|
-
const mediaLocalRoots = getAgentScopedMediaLocalRoots(cfg, resolvedAgentId);
|
|
2403
|
-
await hydrateAttachmentParamsForAction({
|
|
2404
|
-
cfg,
|
|
2405
|
-
channel,
|
|
2406
|
-
accountId,
|
|
2407
|
-
args: params,
|
|
2408
|
-
action,
|
|
2409
|
-
dryRun,
|
|
2410
|
-
mediaPolicy: resolveAttachmentMediaPolicy({
|
|
2411
|
-
sandboxRoot: input.sandboxRoot,
|
|
2412
|
-
mediaLocalRoots
|
|
2413
|
-
})
|
|
2414
|
-
});
|
|
2415
|
-
const resolvedTarget = await resolveActionTarget({
|
|
2416
|
-
cfg,
|
|
2417
|
-
channel,
|
|
2418
|
-
action,
|
|
2419
|
-
args: params,
|
|
2420
|
-
accountId
|
|
2421
|
-
});
|
|
2422
|
-
enforceCrossContextPolicy({
|
|
2423
|
-
channel,
|
|
2424
|
-
action,
|
|
2425
|
-
args: params,
|
|
2426
|
-
toolContext: input.toolContext,
|
|
2427
|
-
cfg
|
|
2428
|
-
});
|
|
2429
|
-
const gateway = resolveGateway(input);
|
|
2430
|
-
if (action === "send") return handleSendAction({
|
|
2431
|
-
cfg,
|
|
2432
|
-
params,
|
|
2433
|
-
channel,
|
|
2434
|
-
accountId,
|
|
2435
|
-
dryRun,
|
|
2436
|
-
gateway,
|
|
2437
|
-
input,
|
|
2438
|
-
agentId: resolvedAgentId,
|
|
2439
|
-
resolvedTarget,
|
|
2440
|
-
abortSignal: input.abortSignal
|
|
2441
|
-
});
|
|
2442
|
-
if (action === "poll") return handlePollAction({
|
|
2443
|
-
cfg,
|
|
2444
|
-
params,
|
|
2445
|
-
channel,
|
|
2446
|
-
accountId,
|
|
2447
|
-
dryRun,
|
|
2448
|
-
gateway,
|
|
2449
|
-
input,
|
|
2450
|
-
abortSignal: input.abortSignal
|
|
2451
|
-
});
|
|
2452
|
-
return handlePluginAction({
|
|
2453
|
-
cfg,
|
|
2454
|
-
params,
|
|
2455
|
-
channel,
|
|
2456
|
-
accountId,
|
|
2457
|
-
dryRun,
|
|
2458
|
-
gateway,
|
|
2459
|
-
input,
|
|
2460
|
-
abortSignal: input.abortSignal
|
|
2461
|
-
});
|
|
2462
|
-
}
|
|
2463
|
-
|
|
2464
|
-
//#endregion
|
|
2465
|
-
//#region src/channels/plugins/message-action-names.ts
|
|
2466
|
-
const CHANNEL_MESSAGE_ACTION_NAMES = [
|
|
2467
|
-
"send",
|
|
2468
|
-
"broadcast",
|
|
2469
|
-
"poll",
|
|
2470
|
-
"react",
|
|
2471
|
-
"reactions",
|
|
2472
|
-
"read",
|
|
2473
|
-
"edit",
|
|
2474
|
-
"unsend",
|
|
2475
|
-
"reply",
|
|
2476
|
-
"sendWithEffect",
|
|
2477
|
-
"renameGroup",
|
|
2478
|
-
"setGroupIcon",
|
|
2479
|
-
"addParticipant",
|
|
2480
|
-
"removeParticipant",
|
|
2481
|
-
"leaveGroup",
|
|
2482
|
-
"sendAttachment",
|
|
2483
|
-
"delete",
|
|
2484
|
-
"pin",
|
|
2485
|
-
"unpin",
|
|
2486
|
-
"list-pins",
|
|
2487
|
-
"permissions",
|
|
2488
|
-
"thread-create",
|
|
2489
|
-
"thread-list",
|
|
2490
|
-
"thread-reply",
|
|
2491
|
-
"search",
|
|
2492
|
-
"sticker",
|
|
2493
|
-
"sticker-search",
|
|
2494
|
-
"member-info",
|
|
2495
|
-
"role-info",
|
|
2496
|
-
"emoji-list",
|
|
2497
|
-
"emoji-upload",
|
|
2498
|
-
"sticker-upload",
|
|
2499
|
-
"role-add",
|
|
2500
|
-
"role-remove",
|
|
2501
|
-
"channel-info",
|
|
2502
|
-
"channel-list",
|
|
2503
|
-
"channel-create",
|
|
2504
|
-
"channel-edit",
|
|
2505
|
-
"channel-delete",
|
|
2506
|
-
"channel-move",
|
|
2507
|
-
"category-create",
|
|
2508
|
-
"category-edit",
|
|
2509
|
-
"category-delete",
|
|
2510
|
-
"topic-create",
|
|
2511
|
-
"voice-status",
|
|
2512
|
-
"event-list",
|
|
2513
|
-
"event-create",
|
|
2514
|
-
"timeout",
|
|
2515
|
-
"kick",
|
|
2516
|
-
"ban",
|
|
2517
|
-
"set-presence"
|
|
2518
|
-
];
|
|
2519
|
-
|
|
2520
|
-
//#endregion
|
|
2521
|
-
export { CHANNEL_TARGET_DESCRIPTION as a, supportsChannelMessageButtonsForChannel as c, ensureOutboundSessionEntry as d, resolveOutboundSessionRoute as f, CHANNEL_TARGETS_DESCRIPTION as i, supportsChannelMessageCards as l, resetDirectoryCache as m, getToolResult as n, listChannelMessageActions as o, formatTargetDisplay as p, runMessageAction as r, supportsChannelMessageButtons as s, CHANNEL_MESSAGE_ACTION_NAMES as t, supportsChannelMessageCardsForChannel as u };
|