stableclaw 2026.4.6 → 2026.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -290
- package/package.json +1 -73
- package/dist/.buildstamp +0 -1
- package/dist/abort-C9luPDzM.js +0 -192
- package/dist/abort-cutoff-B1ws4nOb.js +0 -56
- package/dist/abort-cutoff.runtime-DyRUNN6p.js +0 -20
- package/dist/abort-cutoff.runtime.js +0 -1
- package/dist/abort-primitives-CGyFwJ93.js +0 -92
- package/dist/abort-signal-CrrraMAi.js +0 -13
- package/dist/abort.runtime-oBiooAFx.js +0 -2
- package/dist/abort.runtime.js +0 -1
- package/dist/access-DIqrGWVo.js +0 -81
- package/dist/access-control-DfV6HWO9.js +0 -152
- package/dist/account-action-gate-eHi2MB4J.js +0 -12
- package/dist/account-core-DOelA7Wl.js +0 -26
- package/dist/account-helpers-CafpxP7V.js +0 -1
- package/dist/account-helpers-jJOgsae3.js +0 -102
- package/dist/account-id-DXal1kRJ.js +0 -1
- package/dist/account-inspect-CfagweUE.js +0 -158
- package/dist/account-inspect-DOt4IDX6.js +0 -92
- package/dist/account-inspect-pnXre-7b.js +0 -81
- package/dist/account-lookup-CLJxpfHr.js +0 -17
- package/dist/account-resolution-CbKUJkzG.js +0 -30
- package/dist/account-selection-B8a_DqXo.js +0 -222
- package/dist/account-snapshot-fields-mr-1u321.js +0 -130
- package/dist/account-summary-DA6ds0Hk.js +0 -36
- package/dist/accounts-CO-lK8jJ.js +0 -150
- package/dist/accounts-D419O6Gq.js +0 -2
- package/dist/accounts-DKMLcV4g.js +0 -132
- package/dist/accounts-DdiZwn14.js +0 -57
- package/dist/accounts-SWhOQhoA.js +0 -58
- package/dist/accounts-iR2U_Vs4.js +0 -41
- package/dist/accounts-jsSym1md.js +0 -102
- package/dist/accounts-p4Eir-wB.js +0 -107
- package/dist/accounts-uAWNlC7q.js +0 -94
- package/dist/accounts-x23pAGjm.js +0 -137
- package/dist/accounts.runtime-PJOhs60R.js +0 -2
- package/dist/accounts.runtime.js +0 -1
- package/dist/ack-reactions-fcKs7CQ_.js +0 -43
- package/dist/acp-cli-ByWTIhFx.js +0 -2207
- package/dist/acp-runtime-D7wrReOP.js +0 -8
- package/dist/acp-stateful-target-driver-DY2EfkQt.js +0 -60
- package/dist/action-runtime-BdRtmydq.js +0 -318
- package/dist/action-runtime-DvNB5A61.js +0 -72
- package/dist/action-runtime-api-BnVs42oX.js +0 -1028
- package/dist/actions-CUYHtUqe.js +0 -531
- package/dist/actions.runtime-BBrSlYkH.js +0 -18
- package/dist/actions.runtime-DB4aKmBO.js +0 -5
- package/dist/actions.runtime-bdKprwSE.js +0 -2
- package/dist/actions.runtime.js +0 -1
- package/dist/active-listener-SB9ihcaC.js +0 -46
- package/dist/agent-command-C_MGil8o.js +0 -1457
- package/dist/agent-list-MRXQwyo0.js +0 -52
- package/dist/agent-media-payload-DDTSvr-n.js +0 -17
- package/dist/agent-paths-D711oayD.js +0 -12
- package/dist/agent-runner-utils-DEYzwZHa.js +0 -182
- package/dist/agent-runner.runtime-v2uIsAVy.js +0 -2218
- package/dist/agent-runner.runtime.js +0 -1
- package/dist/agent-runtime-Cz19IsmJ.js +0 -142
- package/dist/agent-s4m0Xp6V.js +0 -2
- package/dist/agent-scope-rWWUivuC.js +0 -215
- package/dist/agent-tools-login-DU1gQC9-.js +0 -57
- package/dist/agents/auth-profiles.runtime.js +0 -7
- package/dist/agents/pi-model-discovery-runtime.js +0 -2
- package/dist/agents-B2W3IoEe.js +0 -888
- package/dist/agents-DmE3LRim.js +0 -5
- package/dist/agents.config-D6XoJFQ-.js +0 -3
- package/dist/agents.config-Ui_tQc3C.js +0 -121
- package/dist/allow-from-Bj0HDNYh.js +0 -20
- package/dist/allow-from-CJwSUt_K.js +0 -9
- package/dist/allow-from-xOap1t02.js +0 -62
- package/dist/allow-list-DeRUbyj4.js +0 -319
- package/dist/allowed-updates-aOgPxM0g.js +0 -31
- package/dist/allowlist-config-edit-Ch2EvAYo.js +0 -279
- package/dist/allowlist-match-Dm6AqFEs.js +0 -63
- package/dist/ansi-B_0KjIJj.js +0 -54
- package/dist/anthropic-vertex-Stff_3_3.js +0 -21
- package/dist/anthropic-vertex-stream-DgR8-m-G.js +0 -653
- package/dist/api-7Pf2fGBp.js +0 -11
- package/dist/api-B80kCRiV.js +0 -11
- package/dist/api-B8_Wwelx.js +0 -2
- package/dist/api-BLI24uxW.js +0 -2
- package/dist/api-BLSg8PM8.js +0 -2
- package/dist/api-BRy2h4ZA.js +0 -2
- package/dist/api-BU_YBaOK.js +0 -3
- package/dist/api-BXQjqvPC.js +0 -2
- package/dist/api-BY9iT-AK.js +0 -106
- package/dist/api-BipiQQoS.js +0 -2
- package/dist/api-Bk5mFOju.js +0 -10
- package/dist/api-BrsLZRXn.js +0 -3
- package/dist/api-C16j1Xno.js +0 -2
- package/dist/api-CGtiPyfv.js +0 -8358
- package/dist/api-CHIsf5Wl.js +0 -21
- package/dist/api-CP9q4gi6.js +0 -19
- package/dist/api-CWPDpJCM.js +0 -2
- package/dist/api-CaMdAP9T.js +0 -2
- package/dist/api-CftMlodx.js +0 -5
- package/dist/api-Cpj_QQAF.js +0 -5
- package/dist/api-D13mhDzE.js +0 -33
- package/dist/api-DGcbqpSh.js +0 -2
- package/dist/api-DIGFhGqm.js +0 -30
- package/dist/api-DNxTJAiA.js +0 -5
- package/dist/api-DasNTWRo.js +0 -2
- package/dist/api-Dn7n2sWC.js +0 -74
- package/dist/api-Drq06O1M2.js +0 -6
- package/dist/api-OOJHubHS.js +0 -77
- package/dist/api-XH46JouJ.js +0 -2
- package/dist/api-builder-uuKvRs_O.js +0 -66
- package/dist/api-e3cIcFaV.js +0 -1
- package/dist/api-fetch-CvBBI8q8.js +0 -35
- package/dist/api-key-rotation-BCssmYGp.js +0 -150
- package/dist/api-rPpH8518.js +0 -322
- package/dist/api-w-46PN0B.js +0 -2
- package/dist/apply-DfjUTAkv.js +0 -485
- package/dist/apply.runtime-B-srtEUl.js +0 -2
- package/dist/apply.runtime-DOG87kW8.js +0 -166
- package/dist/apply.runtime.js +0 -1
- package/dist/approval-native-CI9-iVJa.js +0 -79
- package/dist/approval-native-runtime-2AVlvrdL.js +0 -399
- package/dist/approval-renderers-BTKeDNRo.js +0 -87
- package/dist/approval-runtime-DIA8ohXa.js +0 -262
- package/dist/archive-BaCqqQP1.js +0 -537
- package/dist/arg-split-get0R_Yr.js +0 -38
- package/dist/artifacts-DXKlQp1z.js +0 -52
- package/dist/assistant-error-format-CFSPB8qt.js +0 -109
- package/dist/async-lock-QqhPYwhW.js +0 -19
- package/dist/attachment-normalize-CMMyswNa.js +0 -921
- package/dist/audio-BxqNDSFq.js +0 -53
- package/dist/audio-DZWA6M9B.js +0 -41
- package/dist/audit-86J-sIQq.js +0 -54
- package/dist/audit-D9O3O-41.js +0 -86
- package/dist/audit-DwAT-Kzg.js +0 -892
- package/dist/audit-channel.allow-from.runtime-DmuUvr2f.js +0 -5
- package/dist/audit-channel.allow-from.runtime.js +0 -1
- package/dist/audit-channel.collect.runtime-B76LAkrF.js +0 -528
- package/dist/audit-channel.collect.runtime.js +0 -1
- package/dist/audit-channel.discord.runtime-qM5u1Hnl.js +0 -5
- package/dist/audit-channel.discord.runtime.js +0 -1
- package/dist/audit-channel.telegram.runtime-DpwmRUPy.js +0 -8
- package/dist/audit-channel.telegram.runtime.js +0 -1
- package/dist/audit-channel.zalouser.runtime-CzlFZYsv.js +0 -5
- package/dist/audit-channel.zalouser.runtime.js +0 -1
- package/dist/audit-extra.async-BupKW2BB.js +0 -820
- package/dist/audit-fs-B3GdTjId.js +0 -375
- package/dist/audit-membership-runtime-n195y1jy.js +0 -55
- package/dist/audit.deep.runtime-2gZPpwj8.js +0 -2
- package/dist/audit.deep.runtime.js +0 -1
- package/dist/audit.nondeep.runtime-6MT8p_25.js +0 -831
- package/dist/audit.nondeep.runtime.js +0 -1
- package/dist/audit.runtime-jdG0-1Bq.js +0 -7
- package/dist/audit.runtime.js +0 -1
- package/dist/auth-CmL8nlqP.js +0 -371
- package/dist/auth-Zya_1BCc.js +0 -181
- package/dist/auth-choice-CSSk-2VN.js +0 -69
- package/dist/auth-choice-Uyll2O8p.js +0 -341
- package/dist/auth-choice-legacy-5XgU4yCZ.js +0 -44
- package/dist/auth-choice-options-DTRb6fq4.js +0 -98
- package/dist/auth-choice-prompt-BAQTSD2R.js +0 -36
- package/dist/auth-choice-prompt-D6qkTw8h.js +0 -2
- package/dist/auth-choice-x5Cm9EXp.js +0 -3
- package/dist/auth-choice.apply-helpers-CtKCiOT4.js +0 -2
- package/dist/auth-choice.plugin-providers.runtime-BVH7Kq_W.js +0 -11
- package/dist/auth-choice.plugin-providers.runtime.js +0 -1
- package/dist/auth-health-BBleirOY.js +0 -165
- package/dist/auth-mode-policy-BD7_M2AG.js +0 -18
- package/dist/auth-profiles-B0SpzBJv.js +0 -440
- package/dist/auth-rate-limit-OkMcM1wH.js +0 -119
- package/dist/auth-store-Bro-SY1-.js +0 -242
- package/dist/avatar-policy-pho6U35i.js +0 -67
- package/dist/backend-config-CNAjcjho.js +0 -311
- package/dist/backoff-nvVV-tHk.js +0 -18
- package/dist/backup-create-CkkM1HNg.js +0 -462
- package/dist/backup-health-BWSliymu.js +0 -59
- package/dist/banner-DPWatUan.js +0 -370
- package/dist/banner-lDKgB6uE.js +0 -2
- package/dist/base-session-key-CRSigEPk.js +0 -14
- package/dist/binaries-CWBYavgU.js +0 -2
- package/dist/binaries-sPf-9aLM.js +0 -11
- package/dist/binding-registry-BkSvI4jO.js +0 -520
- package/dist/binding-targets-CdIq3brX.js +0 -99
- package/dist/bindings-AuReyzvX.js +0 -21
- package/dist/bindings-CYhLRcr8.js +0 -69
- package/dist/block-reply-pipeline-GSCCinHx.js +0 -266
- package/dist/block-streaming-4outFa6R.js +0 -107
- package/dist/bluebubbles-CorTCHc9.js +0 -64
- package/dist/bluebubbles-D2WymlOg.js +0 -235
- package/dist/bluebubbles-policy-C3d8eqhQ.js +0 -13
- package/dist/bonjour-cache-cleanup-BZJ-GrdX.js +0 -126
- package/dist/boolean-BEhDlAk_.js +0 -29
- package/dist/boolean-param-B807dWHx.js +0 -13
- package/dist/bot-BM1bybV7.js +0 -4268
- package/dist/bot-message-context-CdedyAq_.js +0 -2
- package/dist/bot-message-context-DKGx6N8p.js +0 -1175
- package/dist/bot-message-context.runtime-ClW1x1V5.js +0 -7
- package/dist/bot-message-context.runtime.js +0 -1
- package/dist/bot-message-context.session.runtime-BWjdkRuf.js +0 -12
- package/dist/bot-message-context.session.runtime.js +0 -1
- package/dist/bot-native-commands.delivery.runtime-CgfbR-Nj.js +0 -3
- package/dist/bot-native-commands.delivery.runtime.js +0 -1
- package/dist/bot-native-commands.runtime-DCz7w0aK.js +0 -11
- package/dist/bot-native-commands.runtime.js +0 -1
- package/dist/boundary-file-read-DB4ibbUg.js +0 -192
- package/dist/brave-web-search-provider-B7m_Mprt.js +0 -441
- package/dist/brew-B9JEV5Jj.js +0 -44
- package/dist/browser-config-D_OlwMzh.js +0 -226
- package/dist/browser-open-C9FOO4U_.js +0 -94
- package/dist/browser-runtime-CnWZ_eLQ.js +0 -185
- package/dist/browser-support-Cdp2Gr_6.js +0 -34
- package/dist/btw-command-CPUGSdlD.js +0 -16
- package/dist/build-info.json +0 -5
- package/dist/bundle-lsp-CCIAK1od.js +0 -93
- package/dist/bundled/boot-md/HOOK.md +0 -20
- package/dist/bundled/boot-md/handler.js +0 -180
- package/dist/bundled/bootstrap-extra-files/HOOK.md +0 -53
- package/dist/bundled/bootstrap-extra-files/handler.js +0 -42
- package/dist/bundled/command-logger/HOOK.md +0 -122
- package/dist/bundled/command-logger/handler.js +0 -56
- package/dist/bundled/session-memory/HOOK.md +0 -108
- package/dist/bundled/session-memory/handler.js +0 -196
- package/dist/bundled/workflow-summary/HOOK.md +0 -123
- package/dist/bundled/workflow-summary/handler.js +0 -115
- package/dist/bundled-capability-metadata-BpPgIy_5.js +0 -40
- package/dist/bundled-compat-BLlVmkDi.js +0 -64
- package/dist/bundled-sources-BQTCt2mJ.js +0 -53
- package/dist/button-types-B3_mzf8P.js +0 -54
- package/dist/cache-controls-DBdT4I-H.js +0 -40
- package/dist/call-dy-GwrXS.js +0 -649
- package/dist/call-ti-nPnzT.js +0 -2
- package/dist/canvas-host/a2ui/.bundle.hash +0 -1
- package/dist/canvas-host/a2ui/a2ui.bundle.js +0 -14896
- package/dist/canvas-host/a2ui/index.html +0 -307
- package/dist/capability-provider-runtime-CFUC5NbJ.js +0 -40
- package/dist/catalog-5PPtilI5.js +0 -274
- package/dist/channel-2EW4xzvV.js +0 -788
- package/dist/channel-BiRtGLF8.js +0 -1135
- package/dist/channel-C3AVw0Nl.js +0 -883
- package/dist/channel-CPe2XmyD.js +0 -1217
- package/dist/channel-CVFWRvjf.js +0 -337
- package/dist/channel-Cs0onQ6d.js +0 -4976
- package/dist/channel-D18v9r53.js +0 -1661
- package/dist/channel-D2n2s8Le.js +0 -208
- package/dist/channel-DWKApPW2.js +0 -454
- package/dist/channel-Depm5C-f.js +0 -800
- package/dist/channel-DwTcZxFU.js +0 -1129
- package/dist/channel-LT5vI3EK.js +0 -361
- package/dist/channel-XgThIGmf.js +0 -698
- package/dist/channel-account-context-CWd3uN_m.js +0 -104
- package/dist/channel-actions-DSvaYD1T.js +0 -39
- package/dist/channel-bQKtZIt6.js +0 -599
- package/dist/channel-catalog.json +0 -3
- package/dist/channel-config-D0eO5f5m.js +0 -115
- package/dist/channel-config-helpers-CLFL8FLU.js +0 -482
- package/dist/channel-config-primitives-DwsP66Ak.js +0 -3
- package/dist/channel-config-schema-DsguzRfd.js +0 -6
- package/dist/channel-config-writes-DQZOOZZ8.js +0 -1
- package/dist/channel-configured-B6WgvouH.js +0 -108
- package/dist/channel-feedback-DiLm9hqS.js +0 -257
- package/dist/channel-inbound-CXD3aSAK.js +0 -30
- package/dist/channel-issues-C-49e607.js +0 -13
- package/dist/channel-lifecycle-BnjeZxB6.js +0 -286
- package/dist/channel-lifecycle.core-Cn3zeU0h.js +0 -69
- package/dist/channel-options-DXJ7b7Ye.js +0 -39
- package/dist/channel-pairing-Byr3MFbN.js +0 -68
- package/dist/channel-plugin-common-D2EFcTg8.js +0 -4
- package/dist/channel-plugin-ids-DiOSWlnO.js +0 -56
- package/dist/channel-plugin-resolution-SMHmHx5v.js +0 -144
- package/dist/channel-policy-B-XKjrjK.js +0 -32
- package/dist/channel-reply-pipeline-BtBcBCNu.js +0 -16
- package/dist/channel-resolution-Du3EtWh1.js +0 -60
- package/dist/channel-runtime-F8_51GPp.js +0 -9
- package/dist/channel-selection-Bz3pl14y.js +0 -125
- package/dist/channel-send-result-CyfDCXJG.js +0 -40
- package/dist/channel-setup-yWpuHwhm.js +0 -51
- package/dist/channel-shared-gHcJ8n-f.js +0 -58
- package/dist/channel-status-CyoeLEnj.js +0 -2
- package/dist/channel-summary-5zHt-z1E.js +0 -139
- package/dist/channel-summary-B_fbXZ3l.js +0 -2
- package/dist/channel-target-DHO43h-I.js +0 -157
- package/dist/channel-targets-C8ZPfJmV.js +0 -18
- package/dist/channel-y-bXwYi3.js +0 -783
- package/dist/channel.runtime-B2SEUCf0.js +0 -14
- package/dist/channel.runtime-BF5qdBeA.js +0 -5
- package/dist/channel.runtime-BPaq6EO_.js +0 -108
- package/dist/channel.runtime-BV8FGxyb.js +0 -373
- package/dist/channel.runtime-CGnamSTC.js +0 -125
- package/dist/channel.runtime-CRNf20Ct.js +0 -80
- package/dist/channel.runtime-CRSWVexY.js +0 -335
- package/dist/channel.runtime-Cg6DmoTp.js +0 -783
- package/dist/channel.runtime-CpHTHeFR.js +0 -309
- package/dist/channel.runtime-ZdhCn8XI.js +0 -3315
- package/dist/channel.runtime-cXufT2kW.js +0 -61
- package/dist/channel.runtime.js +0 -1
- package/dist/channel.setup-Bq1vgxXZ.js +0 -279
- package/dist/channels-BZC2kp_G.js +0 -409
- package/dist/channels-CMeYB3bY.js +0 -1134
- package/dist/channels-cli-BIzqRmuu.js +0 -246
- package/dist/channels-status-issues-DqTdy1lq.js +0 -17
- package/dist/chat-envelope-DlGbh8k2.js +0 -158
- package/dist/chat-meta-wVbKo1sw.js +0 -700
- package/dist/chat-target-prefixes-DCF8a_Lp.js +0 -156
- package/dist/chat-type-DXjGtE-S.js +0 -10
- package/dist/chunk-CW-a7Cfh.js +0 -334
- package/dist/chunk-CrysgU_F.js +0 -36
- package/dist/chutes-oauth-Bh3BTMMG.js +0 -127
- package/dist/cjk-chars-Dl_Ko7yI.js +0 -50
- package/dist/clack-prompter-C5PtKpUH.js +0 -112
- package/dist/clawbot-cli-CgHyabtp.js +0 -9
- package/dist/clawhub-CDs2LE11.js +0 -263
- package/dist/clawhub-CO6YnoQZ.js +0 -163
- package/dist/cli/daemon-cli.js +0 -9
- package/dist/cli-CoOwN-V4.js +0 -164
- package/dist/cli-CpOL_jWZ.js +0 -152
- package/dist/cli-DCp06hI2.js +0 -2
- package/dist/cli-DVSDSUQm.js +0 -695
- package/dist/cli-backend-B20k67rv.js +0 -44
- package/dist/cli-backend-CcuyEMrq.js +0 -1
- package/dist/cli-backend-DMTxL8mq.js +0 -40
- package/dist/cli-backend-M4CTb3mq.js +0 -49
- package/dist/cli-migration-BwqQvUer.js +0 -100
- package/dist/cli-name-C3PA6Rhs.js +0 -21
- package/dist/cli-runner-8SNo1pKS.js +0 -1014
- package/dist/cli-runtime-ChUqI2f-.js +0 -3
- package/dist/cli-shared-01J1LZRE.js +0 -72
- package/dist/cli-startup-metadata.json +0 -14
- package/dist/cli-utils-eYXt_xAg.js +0 -40
- package/dist/cli-watchdog-defaults-Dff-MFUz.js +0 -14
- package/dist/cli.runtime-WWGaX6X6.js +0 -547
- package/dist/cli.runtime.js +0 -1
- package/dist/client-BFxjGELJ.js +0 -5
- package/dist/client-C8_DsF-r.js +0 -7
- package/dist/client-bootstrap-BiVps8T6.js +0 -2
- package/dist/client-bootstrap-CFGCltAu.js +0 -121
- package/dist/client-lEilgam1.js +0 -87
- package/dist/cmd-argv-BbyQhzAC.js +0 -68
- package/dist/code-execution-CPcuE0sX.js +0 -142
- package/dist/codex-native-web-search-CyrsDBZ2.js +0 -155
- package/dist/codex-native-web-search-PFJu8fcM.js +0 -2
- package/dist/collection-runtime-DJjFReXJ.js +0 -1
- package/dist/command-auth-BAkZv3cP.js +0 -356
- package/dist/command-auth-native-Bsp5Doyd.js +0 -3
- package/dist/command-auth-tqFmaIaJ.js +0 -64
- package/dist/command-detection-BV7Ipg_0.js +0 -49
- package/dist/command-detection-DyqWl5Nq.js +0 -2
- package/dist/command-format-CX1xXtgB.js +0 -22
- package/dist/command-format-DwYoemR9.js +0 -2
- package/dist/command-gating-NyDk7t84.js +0 -40
- package/dist/command-options-BUoAEXAi.js +0 -25
- package/dist/command-poll-backoff-B7RiSvcV.js +0 -56
- package/dist/command-poll-backoff.runtime-DX9gobB0.js +0 -7
- package/dist/command-poll-backoff.runtime.js +0 -1
- package/dist/command-queue-CxEmvSGT.js +0 -253
- package/dist/command-registry-CaJXKNoO.js +0 -3
- package/dist/command-registry-Ct0qor9d.js +0 -199
- package/dist/command-secret-gateway-43O-1Hnf.js +0 -2
- package/dist/command-secret-gateway-C39SFGHd.js +0 -442
- package/dist/command-secret-targets-Bns-l1xV.js +0 -2
- package/dist/command-secret-targets-CTrFghcj.js +0 -87
- package/dist/command-surface-CfP1vask.js +0 -2
- package/dist/commands/status.summary.runtime.js +0 -146
- package/dist/commands-BxWe27p0.js +0 -42
- package/dist/commands-CiyPyNRY.js +0 -194
- package/dist/commands-acp-BeCm2Wnq.js +0 -990
- package/dist/commands-context-DbfMrVv4.js +0 -33
- package/dist/commands-core-CEmQydIV.js +0 -241
- package/dist/commands-core.runtime-BYooAQbc.js +0 -2
- package/dist/commands-core.runtime.js +0 -1
- package/dist/commands-handlers.runtime-CEAP4Yv2.js +0 -3707
- package/dist/commands-handlers.runtime.js +0 -1
- package/dist/commands-info-COwAtIWb.js +0 -651
- package/dist/commands-models-B4EJh5Fy.js +0 -395
- package/dist/commands-o21Y9Xck.js +0 -4
- package/dist/commands-registry-DgMc5_jk.js +0 -295
- package/dist/commands-registry.data-5O2FOeZl.js +0 -935
- package/dist/commands-registry.runtime-CT_YXpwM.js +0 -2
- package/dist/commands-registry.runtime.js +0 -1
- package/dist/commands-status.runtime-D4F4iVUh.js +0 -2
- package/dist/commands-status.runtime.js +0 -1
- package/dist/commands.runtime-_ALsMFcS.js +0 -4
- package/dist/commands.runtime.js +0 -1
- package/dist/common-Dbmo0I1E.js +0 -206
- package/dist/compact.runtime-CBfyBJbR.js +0 -7
- package/dist/compact.runtime.js +0 -1
- package/dist/completion-cli-COhEd9CF.js +0 -2
- package/dist/completion-cli-DHe4Rit5.js +0 -466
- package/dist/components-CamLdbbq.js +0 -797
- package/dist/components-DPbtLC3x.js +0 -2
- package/dist/config-CKJA2kAO.js +0 -53
- package/dist/config-D7-9dK3i.js +0 -138
- package/dist/config-DJ29sg5U.js +0 -475
- package/dist/config-DJNI2tTK.js +0 -136
- package/dist/config-Dr2GRT3y.js +0 -135
- package/dist/config-DsqKYjeo.js +0 -421
- package/dist/config-Q9kc32gz.js +0 -41
- package/dist/config-RUefx-_1.js +0 -8
- package/dist/config-cli-BqlYHmPA.js +0 -945
- package/dist/config-error-handler-BKRR0_j_.js +0 -197
- package/dist/config-error-handler-CT1igiX6.js +0 -2
- package/dist/config-eval-hTWq4IVy.js +0 -100
- package/dist/config-guard-Bk3_wSTH.js +0 -113
- package/dist/config-helpers-DLVbtn1B.js +0 -117
- package/dist/config-paths-BKYh__Ga.js +0 -8
- package/dist/config-paths-DP5yXXo2.js +0 -102
- package/dist/config-presence-omlqvhAQ.js +0 -79
- package/dist/config-regex-CvZFnWkO.js +0 -39
- package/dist/config-runtime-ngoccXmP.js +0 -13
- package/dist/config-schema-B3sQY5B_.js +0 -133
- package/dist/config-schema-B_2MhEQY.js +0 -71
- package/dist/config-schema-BpIXBNbc.js +0 -202
- package/dist/config-schema-BtfQOmdV.js +0 -115
- package/dist/config-schema-Bw-Xbo_T.js +0 -85
- package/dist/config-schema-Cqj-Mugi.js +0 -105
- package/dist/config-schema-DQSj_ZL_.js +0 -29
- package/dist/config-schema-Pe1Vn9kb.js +0 -17
- package/dist/config-schema-f7nntJMh.js +0 -25
- package/dist/config-schema-lBqODOnr.js +0 -25
- package/dist/config-schema-mfJ91WLf.js +0 -65
- package/dist/config-secret-input.runtime-B_HyRtgE.js +0 -3
- package/dist/config-secret-input.runtime.js +0 -1
- package/dist/config-state-DfIk9ME6.js +0 -289
- package/dist/config-status-Bnobp1-p.js +0 -2
- package/dist/config-status-Db93sFQB.js +0 -109
- package/dist/config-update-B_S0YQ_Y.js +0 -3
- package/dist/config-update-CK4EDDeD.js +0 -127
- package/dist/config-validation-Bh_sg7RW.js +0 -276
- package/dist/config-value-CMTdBw5q.js +0 -25
- package/dist/configure-CGDY1YR7.js +0 -1140
- package/dist/configure-V8jejRHr.js +0 -2
- package/dist/configured-provider-fallback-DWYDg0L7.js +0 -15
- package/dist/connection-auth-CKM60o55.js +0 -30
- package/dist/connection-details-DyVOoGG6.js +0 -56
- package/dist/constants-Bq55qi82.js +0 -71
- package/dist/constants-CimYBSye.js +0 -4
- package/dist/content-blocks-DuKJNUtm.js +0 -785
- package/dist/context-D-9a98Zk.js +0 -227
- package/dist/context-visibility-DTMZdcAH.js +0 -14
- package/dist/context-visibility-vOvLMUrZ.js +0 -35
- package/dist/context-window-guard-WE0ENAeQ.js +0 -46
- package/dist/control-ui-assets-DVYAF-2p.js +0 -240
- package/dist/control-ui-shared-BKXkFsA7.js +0 -29
- package/dist/conversation-binding-C2nuZ3Eg.js +0 -520
- package/dist/conversation-binding-input-CBwdWDC4.js +0 -250
- package/dist/conversation-bindings-Cq4z4vhr.js +0 -210
- package/dist/conversation-id-4JeHag0a.js +0 -168
- package/dist/conversation-id-CXuzm-Ub.js +0 -116
- package/dist/conversation-id-DCTwJCZF.js +0 -43
- package/dist/conversation-label-C2xTELop.js +0 -32
- package/dist/conversation-runtime-bArk0IjJ.js +0 -85
- package/dist/core-DaMVvavf.js +0 -195
- package/dist/core-api-D0U2iGRK.js +0 -670
- package/dist/core-command-descriptors-DxRm2H1p.js +0 -91
- package/dist/create-client-BOKOxyiu.js +0 -58
- package/dist/create-client-Bzn467Jo.js +0 -2
- package/dist/credentials-BGPs1gIX.js +0 -242
- package/dist/credentials-DUoYFiLk.js +0 -22
- package/dist/credentials-read-CDYtvkBt.js +0 -74
- package/dist/credentials-read-KB395CbD.js +0 -2
- package/dist/credentials-write.runtime-Bx7mKj4E.js +0 -9
- package/dist/credentials-write.runtime.js +0 -1
- package/dist/creds-files-CTtTs6zG.js +0 -19
- package/dist/cron-cli-Di3TakVa.js +0 -644
- package/dist/crypto-node.runtime-DI0fQ6wI.js +0 -5
- package/dist/crypto-node.runtime.js +0 -1
- package/dist/crypto-runtime-Bc-jKPlv.js +0 -1036
- package/dist/current-time--aIDbABZ.js +0 -20
- package/dist/daemon-cli-Cnry1ft1.js +0 -370
- package/dist/daemon-install-de_bWPuS.js +0 -63
- package/dist/daemon-install-plan.shared-u00bwv47.js +0 -222
- package/dist/daemon-runtime-DPejcJWG.js +0 -12
- package/dist/dangerous-name-matching-DnCDaXzP.js +0 -48
- package/dist/dangerous-name-runtime-Dinw00TZ.js +0 -1
- package/dist/dangerous-tools-C3RlQe7u.js +0 -38
- package/dist/date-time-DRQ0-oaw.js +0 -118
- package/dist/ddg-search-provider-B0zLjcDN.js +0 -182
- package/dist/dedupe-DZbQYOSD.js +0 -59
- package/dist/default-account-warnings-BCrmijcz.js +0 -15
- package/dist/default-models-Br0v8QOH.js +0 -35
- package/dist/defaults-DAt--D9n.js +0 -6
- package/dist/defaults-D_Y_lvUP.js +0 -7
- package/dist/defaults-MkMfnGzi.js +0 -7
- package/dist/delegate-CLP7zDS_.js +0 -43
- package/dist/deliver-CIUEKe4q.js +0 -954
- package/dist/deliver-LN-Yg8wS.js +0 -3
- package/dist/deliver-reply-DL-CSF43.js +0 -238
- package/dist/deliver-runtime-CoqXhxlS.js +0 -2
- package/dist/delivery-CL_3vFSl.js +0 -834
- package/dist/delivery-context-CoAL-jTI.js +0 -106
- package/dist/delivery-info-DTAUApso.js +0 -40
- package/dist/delivery-queue-DBW69jH4.js +0 -2
- package/dist/delivery-queue-DMubgaLa.js +0 -289
- package/dist/deps-34N0Nmbl.js +0 -67
- package/dist/deps-BVogrCia.js +0 -2
- package/dist/deps-DZJpA4XG.js +0 -153
- package/dist/detect-Zrcrs8SP.js +0 -12
- package/dist/detect-binary-CEX186X6.js +0 -30
- package/dist/device-auth-D_0GUMYY.js +0 -19
- package/dist/device-bootstrap-Bnn4K3fQ.js +0 -3
- package/dist/device-bootstrap-bwpHYQhY.js +0 -176
- package/dist/device-health-B3q7Cmqn.js +0 -2
- package/dist/device-health-DhmPD0gq.js +0 -16
- package/dist/device-identity-Cak311si.js +0 -2
- package/dist/device-identity-Doxo0HJx.js +0 -140
- package/dist/device-metadata-normalization-B5_zplC_.js +0 -21
- package/dist/device-pairing-BCpR-Vtb.js +0 -520
- package/dist/devices-cli-DYPkfzsG.js +0 -328
- package/dist/diagnostic-DfKz60Xk.js +0 -311
- package/dist/diagnostic-events-CUSmY-rn.js +0 -48
- package/dist/diagnostic-flags-DLDDycUv.js +0 -64
- package/dist/diagnostic-runtime-ZQC4AswI.js +0 -1
- package/dist/diagnostics-Cxl1bFGj.js +0 -33
- package/dist/diagnostics-GjF7wpY9.js +0 -2
- package/dist/diagnostics-otel-C2RQUlQT.js +0 -3
- package/dist/diffs-DsHt689X.js +0 -2
- package/dist/direct-dm-ByuWacLn.js +0 -139
- package/dist/direct-management-DEtuCcDL.js +0 -2
- package/dist/direct-management-DMp7MOnt.js +0 -300
- package/dist/direct-room-ARYWsCbX.js +0 -2
- package/dist/direct-room-DYlSJOU_.js +0 -67
- package/dist/directive-handling.defaults-BMh2DXTA.js +0 -19
- package/dist/directive-handling.fast-lane-CBX4jbax.js +0 -2
- package/dist/directive-handling.fast-lane-DRvycpgg.js +0 -64
- package/dist/directive-handling.impl-BKJf5Ltu.js +0 -672
- package/dist/directive-handling.impl-BkdGnm-T.js +0 -2
- package/dist/directive-handling.levels-BHOBnnn8.js +0 -2
- package/dist/directive-handling.levels-CecoBNlK.js +0 -12
- package/dist/directive-handling.parse-BuTiWmrT.js +0 -375
- package/dist/directive-handling.persist-D9RYevoA.js +0 -133
- package/dist/directive-handling.persist.runtime-Cb_unTVH.js +0 -2
- package/dist/directive-handling.persist.runtime.js +0 -1
- package/dist/directive-handling.shared-_Zvt3-ej.js +0 -158
- package/dist/directive-tags-Cm0H6Dn_.js +0 -109
- package/dist/directives-f-UxcP8D.js +0 -209
- package/dist/directory-cache-CM_EUchr.js +0 -62
- package/dist/directory-cli-D6N59tzr.js +0 -238
- package/dist/directory-config-helpers-BCrssKbI.js +0 -141
- package/dist/directory-runtime-CAabZ_XW.js +0 -20
- package/dist/directory.static-TKo2MeNR.js +0 -45
- package/dist/discord-BOpl5w4U.js +0 -5
- package/dist/discord-account-wyFuLDq_.js +0 -11
- package/dist/discord-core-BpzKxDZ7.js +0 -5
- package/dist/discord-lOPvIxp4.js +0 -11
- package/dist/discord-runtime-surface-Dm5WUtCV.js +0 -67
- package/dist/discord-session-key-DaPto1yr.js +0 -11
- package/dist/discord-surface-Cg_Mu9MI.js +0 -30
- package/dist/discord-thread-bindings-zIOp1Tj4.js +0 -29
- package/dist/discord-timeouts-Di5n5LAU.js +0 -12
- package/dist/discovery-DLbFJLD_.js +0 -171
- package/dist/dispatch-C4gGGYZt.js +0 -858
- package/dist/dispatch-acp.runtime-DUHj6bP-.js +0 -884
- package/dist/dispatch-acp.runtime.js +0 -1
- package/dist/dist-7JNqoGV7.js +0 -3
- package/dist/dist-BqJPEiV8.js +0 -14245
- package/dist/dist-DdE56Pmi.js +0 -503
- package/dist/dist-shQCTuJB.js +0 -1239
- package/dist/dm-policy-shared-C99GNVxp.js +0 -188
- package/dist/dns-cli-vQBAzTmg.js +0 -192
- package/dist/docker-BN7sQKCb.js +0 -789
- package/dist/docs-cli-Br6cfKoS.js +0 -156
- package/dist/doctor-completion-Cf0GcTXR.js +0 -90
- package/dist/doctor-config-preflight-C2cKYiKe.js +0 -2
- package/dist/doctor-config-preflight-DNbO-_N8.js +0 -148
- package/dist/doctor-state-migrations-BXkbeSFy.js +0 -2
- package/dist/doctor-state-migrations-G3shZ-W_.js +0 -3
- package/dist/dotenv-CelghjA4.js +0 -11
- package/dist/dotenv-Csg1Xj8n.js +0 -113
- package/dist/embedding-provider-Aey9VsDb.js +0 -129
- package/dist/enable-BgSxsKp_.js +0 -57
- package/dist/encryption-guidance-62xAQFP4.js +0 -33
- package/dist/entry-status-3ymZYX2l.js +0 -172
- package/dist/entry.js +0 -209
- package/dist/env-CK3eZNIX.js +0 -40
- package/dist/env-overrides-CcDOWo0Y.js +0 -346
- package/dist/env-overrides.runtime-CKb7-Q72.js +0 -7
- package/dist/env-overrides.runtime.js +0 -1
- package/dist/env-substitution-UhJwb0ys.js +0 -136
- package/dist/envelope-CrC9AdBL.js +0 -137
- package/dist/error-runtime-D-gKufd_.js +0 -2
- package/dist/error-text-BC9WfvfX.js +0 -24
- package/dist/errors-Bs2h5H8p.js +0 -71
- package/dist/errors-CjFsF-QY.js +0 -9
- package/dist/exa-web-search-provider-DUUlmDcV.js +0 -355
- package/dist/exec-BO6vYjRf.js +0 -368
- package/dist/exec-CD7C9g-b.js +0 -2
- package/dist/exec-approval-reply-CFOEcmIv.js +0 -189
- package/dist/exec-approval-session-target-BbsAlD1Q.js +0 -159
- package/dist/exec-approvals-3UDrE7Q9.js +0 -1565
- package/dist/exec-approvals-CW5axvaY.js +0 -121
- package/dist/exec-approvals-cli-BPYvtJv-.js +0 -483
- package/dist/exec-approvals-effective-DbLJfkpe.js +0 -140
- package/dist/exec-safe-bin-runtime-policy-218hHVyc.js +0 -90
- package/dist/exec-safety-XzKkUSvE.js +0 -24
- package/dist/export-html/template.css +0 -1060
- package/dist/export-html/template.html +0 -88
- package/dist/export-html/template.js +0 -1875
- package/dist/export-html/vendor/highlight.min.js +0 -1213
- package/dist/export-html/vendor/marked.min.js +0 -6
- package/dist/extension-shared-V_4IXpRU.js +0 -74
- package/dist/extensionAPI.js +0 -17
- package/dist/extensions/acpx/index.js +0 -1855
- package/dist/extensions/acpx/mcp-proxy.mjs +0 -151
- package/dist/extensions/acpx/openclaw.plugin.json +0 -132
- package/dist/extensions/acpx/package.json +0 -14
- package/dist/extensions/acpx/runtime-api.js +0 -5
- package/dist/extensions/acpx/skills/acp-router/SKILL.md +0 -245
- package/dist/extensions/aicq-chat/index.js +0 -284
- package/dist/extensions/aicq-chat/openclaw.plugin.json +0 -30
- package/dist/extensions/amazon-bedrock/api.js +0 -3
- package/dist/extensions/amazon-bedrock/discovery.js +0 -2
- package/dist/extensions/amazon-bedrock/index.js +0 -65
- package/dist/extensions/amazon-bedrock/openclaw.plugin.json +0 -44
- package/dist/extensions/amazon-bedrock/package.json +0 -23
- package/dist/extensions/anthropic/api.js +0 -3
- package/dist/extensions/anthropic/cli-backend.js +0 -2
- package/dist/extensions/anthropic/cli-migration.js +0 -2
- package/dist/extensions/anthropic/cli-shared.js +0 -2
- package/dist/extensions/anthropic/index.js +0 -357
- package/dist/extensions/anthropic/media-understanding-provider.js +0 -2
- package/dist/extensions/anthropic/openclaw.plugin.json +0 -64
- package/dist/extensions/anthropic/package.json +0 -12
- package/dist/extensions/anthropic/stream-wrappers.js +0 -2
- package/dist/extensions/anthropic/test-api.js +0 -2
- package/dist/extensions/anthropic-vertex/api.js +0 -4
- package/dist/extensions/anthropic-vertex/index.js +0 -36
- package/dist/extensions/anthropic-vertex/openclaw.plugin.json +0 -12
- package/dist/extensions/anthropic-vertex/package.json +0 -12
- package/dist/extensions/anthropic-vertex/provider-catalog.js +0 -2
- package/dist/extensions/anthropic-vertex/region.js +0 -2
- package/dist/extensions/bluebubbles/api.js +0 -5
- package/dist/extensions/bluebubbles/channel-config-api.js +0 -2
- package/dist/extensions/bluebubbles/index.js +0 -13
- package/dist/extensions/bluebubbles/openclaw.plugin.json +0 -11
- package/dist/extensions/bluebubbles/package.json +0 -48
- package/dist/extensions/bluebubbles/runtime-api.js +0 -2
- package/dist/extensions/bluebubbles/setup-entry.js +0 -26
- package/dist/extensions/brave/index.js +0 -13
- package/dist/extensions/brave/openclaw.plugin.json +0 -50
- package/dist/extensions/brave/package.json +0 -12
- package/dist/extensions/brave/test-api.js +0 -2
- package/dist/extensions/brave/web-search-provider.js +0 -2
- package/dist/extensions/browser/browser-runtime-api.js +0 -4
- package/dist/extensions/browser/index.js +0 -20
- package/dist/extensions/browser/openclaw.plugin.json +0 -9
- package/dist/extensions/browser/package.json +0 -12
- package/dist/extensions/browser/runtime-api.js +0 -6
- package/dist/extensions/browser/test-support.js +0 -50
- package/dist/extensions/byteplus/api.js +0 -3
- package/dist/extensions/byteplus/index.js +0 -63
- package/dist/extensions/byteplus/models.js +0 -2
- package/dist/extensions/byteplus/openclaw.plugin.json +0 -33
- package/dist/extensions/byteplus/package.json +0 -12
- package/dist/extensions/byteplus/provider-catalog.js +0 -2
- package/dist/extensions/chutes/api.js +0 -3
- package/dist/extensions/chutes/index.js +0 -143
- package/dist/extensions/chutes/models.js +0 -2
- package/dist/extensions/chutes/onboard.js +0 -3
- package/dist/extensions/chutes/openclaw.plugin.json +0 -44
- package/dist/extensions/chutes/package.json +0 -12
- package/dist/extensions/chutes/provider-catalog.js +0 -2
- package/dist/extensions/cloudflare-ai-gateway/api.js +0 -3
- package/dist/extensions/cloudflare-ai-gateway/index.js +0 -188
- package/dist/extensions/cloudflare-ai-gateway/models.js +0 -2
- package/dist/extensions/cloudflare-ai-gateway/onboard.js +0 -2
- package/dist/extensions/cloudflare-ai-gateway/openclaw.plugin.json +0 -33
- package/dist/extensions/cloudflare-ai-gateway/package.json +0 -12
- package/dist/extensions/copilot-proxy/index.js +0 -125
- package/dist/extensions/copilot-proxy/openclaw.plugin.json +0 -27
- package/dist/extensions/copilot-proxy/package.json +0 -12
- package/dist/extensions/copilot-proxy/runtime-api.js +0 -3
- package/dist/extensions/deepgram/audio.js +0 -2
- package/dist/extensions/deepgram/index.js +0 -13
- package/dist/extensions/deepgram/media-understanding-provider.js +0 -2
- package/dist/extensions/deepgram/openclaw.plugin.json +0 -13
- package/dist/extensions/deepgram/package.json +0 -12
- package/dist/extensions/deepseek/api.js +0 -3
- package/dist/extensions/deepseek/index.js +0 -33
- package/dist/extensions/deepseek/models.js +0 -2
- package/dist/extensions/deepseek/onboard.js +0 -2
- package/dist/extensions/deepseek/openclaw.plugin.json +0 -32
- package/dist/extensions/deepseek/package.json +0 -12
- package/dist/extensions/deepseek/provider-catalog.js +0 -2
- package/dist/extensions/device-pair/api.js +0 -10
- package/dist/extensions/device-pair/index.js +0 -483
- package/dist/extensions/device-pair/notify.js +0 -2
- package/dist/extensions/device-pair/openclaw.plugin.json +0 -21
- package/dist/extensions/device-pair/qr-image.js +0 -3
- package/dist/extensions/diagnostics-otel/api.js +0 -6
- package/dist/extensions/diagnostics-otel/index.js +0 -485
- package/dist/extensions/diagnostics-otel/openclaw.plugin.json +0 -8
- package/dist/extensions/diagnostics-otel/package.json +0 -27
- package/dist/extensions/diffs/api.js +0 -4
- package/dist/extensions/diffs/assets/viewer-runtime.js +0 -1888
- package/dist/extensions/diffs/index.js +0 -2058
- package/dist/extensions/diffs/openclaw.plugin.json +0 -226
- package/dist/extensions/diffs/package.json +0 -24
- package/dist/extensions/diffs/runtime-api.js +0 -3
- package/dist/extensions/diffs/skills/diffs/SKILL.md +0 -23
- package/dist/extensions/discord/action-runtime-api.js +0 -2
- package/dist/extensions/discord/api.js +0 -14
- package/dist/extensions/discord/channel-config-api.js +0 -2
- package/dist/extensions/discord/index.js +0 -612
- package/dist/extensions/discord/openclaw.plugin.json +0 -11
- package/dist/extensions/discord/package.json +0 -52
- package/dist/extensions/discord/runtime-api.js +0 -230
- package/dist/extensions/discord/session-key-api.js +0 -2
- package/dist/extensions/discord/setup-entry.js +0 -10
- package/dist/extensions/discord/test-api.js +0 -45
- package/dist/extensions/discord/timeouts.js +0 -2
- package/dist/extensions/duckduckgo/index.js +0 -13
- package/dist/extensions/duckduckgo/openclaw.plugin.json +0 -41
- package/dist/extensions/duckduckgo/package.json +0 -12
- package/dist/extensions/duckduckgo/web-search-provider.js +0 -2
- package/dist/extensions/elevenlabs/index.js +0 -13
- package/dist/extensions/elevenlabs/openclaw.plugin.json +0 -13
- package/dist/extensions/elevenlabs/package.json +0 -12
- package/dist/extensions/elevenlabs/speech-provider.js +0 -2
- package/dist/extensions/elevenlabs/test-api.js +0 -2
- package/dist/extensions/elevenlabs/tts.js +0 -2
- package/dist/extensions/exa/index.js +0 -13
- package/dist/extensions/exa/openclaw.plugin.json +0 -39
- package/dist/extensions/exa/package.json +0 -12
- package/dist/extensions/exa/web-search-provider.js +0 -2
- package/dist/extensions/fal/image-generation-provider.js +0 -2
- package/dist/extensions/fal/index.js +0 -45
- package/dist/extensions/fal/onboard.js +0 -2
- package/dist/extensions/fal/openclaw.plugin.json +0 -40
- package/dist/extensions/fal/package.json +0 -12
- package/dist/extensions/feishu/api.js +0 -7
- package/dist/extensions/feishu/index.js +0 -2531
- package/dist/extensions/feishu/openclaw.plugin.json +0 -14
- package/dist/extensions/feishu/package.json +0 -52
- package/dist/extensions/feishu/runtime-api.js +0 -34
- package/dist/extensions/feishu/session-key-api.js +0 -2
- package/dist/extensions/feishu/setup-api.js +0 -2
- package/dist/extensions/feishu/setup-entry.js +0 -6
- package/dist/extensions/feishu/skills/feishu-doc/SKILL.md +0 -211
- package/dist/extensions/feishu/skills/feishu-doc/references/block-types.md +0 -103
- package/dist/extensions/feishu/skills/feishu-drive/SKILL.md +0 -97
- package/dist/extensions/feishu/skills/feishu-perm/SKILL.md +0 -119
- package/dist/extensions/feishu/skills/feishu-wiki/SKILL.md +0 -111
- package/dist/extensions/firecrawl/api.js +0 -33
- package/dist/extensions/firecrawl/index.js +0 -184
- package/dist/extensions/firecrawl/openclaw.plugin.json +0 -87
- package/dist/extensions/firecrawl/package.json +0 -12
- package/dist/extensions/firecrawl/web-search-provider.js +0 -2
- package/dist/extensions/github-copilot/api.js +0 -2
- package/dist/extensions/github-copilot/index.js +0 -138
- package/dist/extensions/github-copilot/login.js +0 -2
- package/dist/extensions/github-copilot/models-defaults.js +0 -38
- package/dist/extensions/github-copilot/models.js +0 -2
- package/dist/extensions/github-copilot/openclaw.plugin.json +0 -31
- package/dist/extensions/github-copilot/package.json +0 -12
- package/dist/extensions/github-copilot/token.js +0 -3
- package/dist/extensions/github-copilot/usage.js +0 -2
- package/dist/extensions/google/api.js +0 -3
- package/dist/extensions/google/cli-backend.js +0 -2
- package/dist/extensions/google/gemini-cli-provider.js +0 -110
- package/dist/extensions/google/google-shared.test-helpers.js +0 -92
- package/dist/extensions/google/image-generation-provider.js +0 -162
- package/dist/extensions/google/index.js +0 -213
- package/dist/extensions/google/media-understanding-provider.js +0 -104
- package/dist/extensions/google/model-id.js +0 -2
- package/dist/extensions/google/oauth.credentials.js +0 -2
- package/dist/extensions/google/oauth.flow.js +0 -2
- package/dist/extensions/google/oauth.http.js +0 -2
- package/dist/extensions/google/oauth.js +0 -3
- package/dist/extensions/google/oauth.project.js +0 -2
- package/dist/extensions/google/oauth.runtime.js +0 -2
- package/dist/extensions/google/oauth.shared.js +0 -2
- package/dist/extensions/google/oauth.token.js +0 -2
- package/dist/extensions/google/openclaw.plugin.json +0 -89
- package/dist/extensions/google/package.json +0 -12
- package/dist/extensions/google/provider-models.js +0 -2
- package/dist/extensions/google/runtime-api.js +0 -4
- package/dist/extensions/google/test-api.js +0 -2
- package/dist/extensions/google/web-search-provider.js +0 -2
- package/dist/extensions/googlechat/api.js +0 -2
- package/dist/extensions/googlechat/channel-config-api.js +0 -7
- package/dist/extensions/googlechat/index.js +0 -13
- package/dist/extensions/googlechat/openclaw.plugin.json +0 -11
- package/dist/extensions/googlechat/package.json +0 -48
- package/dist/extensions/googlechat/runtime-api.js +0 -39
- package/dist/extensions/googlechat/setup-entry.js +0 -6
- package/dist/extensions/googlechat/test-api.js +0 -3
- package/dist/extensions/groq/index.js +0 -13
- package/dist/extensions/groq/media-understanding-provider.js +0 -2
- package/dist/extensions/groq/openclaw.plugin.json +0 -13
- package/dist/extensions/groq/package.json +0 -12
- package/dist/extensions/huggingface/api.js +0 -4
- package/dist/extensions/huggingface/index.js +0 -54
- package/dist/extensions/huggingface/models.js +0 -2
- package/dist/extensions/huggingface/onboard.js +0 -2
- package/dist/extensions/huggingface/openclaw.plugin.json +0 -34
- package/dist/extensions/huggingface/package.json +0 -12
- package/dist/extensions/huggingface/provider-catalog.js +0 -3
- package/dist/extensions/imessage/api.js +0 -4
- package/dist/extensions/imessage/channel-config-api.js +0 -2
- package/dist/extensions/imessage/index.js +0 -211
- package/dist/extensions/imessage/openclaw.plugin.json +0 -11
- package/dist/extensions/imessage/package.json +0 -26
- package/dist/extensions/imessage/runtime-api.js +0 -11
- package/dist/extensions/imessage/setup-entry.js +0 -13
- package/dist/extensions/irc/api.js +0 -2
- package/dist/extensions/irc/channel-config-api.js +0 -2
- package/dist/extensions/irc/index.js +0 -12
- package/dist/extensions/irc/openclaw.plugin.json +0 -11
- package/dist/extensions/irc/package.json +0 -28
- package/dist/extensions/irc/setup-entry.js +0 -6
- package/dist/extensions/kilocode/api.js +0 -3
- package/dist/extensions/kilocode/index.js +0 -37
- package/dist/extensions/kilocode/onboard.js +0 -3
- package/dist/extensions/kilocode/openclaw.plugin.json +0 -33
- package/dist/extensions/kilocode/package.json +0 -12
- package/dist/extensions/kilocode/provider-catalog.js +0 -2
- package/dist/extensions/kilocode/provider-models.js +0 -2
- package/dist/extensions/kilocode/shared.js +0 -2
- package/dist/extensions/kimi-coding/api.js +0 -3
- package/dist/extensions/kimi-coding/index.js +0 -81
- package/dist/extensions/kimi-coding/onboard.js +0 -2
- package/dist/extensions/kimi-coding/openclaw.plugin.json +0 -38
- package/dist/extensions/kimi-coding/package.json +0 -12
- package/dist/extensions/kimi-coding/provider-catalog.js +0 -2
- package/dist/extensions/kimi-coding/stream.js +0 -2
- package/dist/extensions/line/api.js +0 -13
- package/dist/extensions/line/index.js +0 -815
- package/dist/extensions/line/openclaw.plugin.json +0 -11
- package/dist/extensions/line/package.json +0 -41
- package/dist/extensions/line/runtime-api.js +0 -11
- package/dist/extensions/line/setup-api.js +0 -3
- package/dist/extensions/line/setup-entry.js +0 -15
- package/dist/extensions/litellm/api.js +0 -2
- package/dist/extensions/litellm/index.js +0 -36
- package/dist/extensions/litellm/onboard.js +0 -2
- package/dist/extensions/litellm/openclaw.plugin.json +0 -33
- package/dist/extensions/litellm/package.json +0 -12
- package/dist/extensions/litellm/provider-catalog.js +0 -2
- package/dist/extensions/llm-task/api.js +0 -6
- package/dist/extensions/llm-task/index.js +0 -156
- package/dist/extensions/llm-task/openclaw.plugin.json +0 -33
- package/dist/extensions/llm-task/package.json +0 -16
- package/dist/extensions/lobster/index.js +0 -232
- package/dist/extensions/lobster/openclaw.plugin.json +0 -10
- package/dist/extensions/lobster/package.json +0 -17
- package/dist/extensions/lobster/runtime-api.js +0 -4
- package/dist/extensions/matrix/api.js +0 -10
- package/dist/extensions/matrix/helper-api.js +0 -3
- package/dist/extensions/matrix/index.js +0 -44
- package/dist/extensions/matrix/legacy-crypto-inspector.js +0 -41
- package/dist/extensions/matrix/openclaw.plugin.json +0 -11
- package/dist/extensions/matrix/package.json +0 -53
- package/dist/extensions/matrix/plugin-entry.handlers.runtime.js +0 -48
- package/dist/extensions/matrix/runtime-api.js +0 -25
- package/dist/extensions/matrix/setup-entry.js +0 -6
- package/dist/extensions/matrix/test-api.js +0 -3
- package/dist/extensions/matrix/thread-bindings-runtime.js +0 -2
- package/dist/extensions/mattermost/api.js +0 -2
- package/dist/extensions/mattermost/index.js +0 -15
- package/dist/extensions/mattermost/openclaw.plugin.json +0 -11
- package/dist/extensions/mattermost/package.json +0 -41
- package/dist/extensions/mattermost/runtime-api.js +0 -41
- package/dist/extensions/mattermost/setup-entry.js +0 -6
- package/dist/extensions/memory-core/api.js +0 -1
- package/dist/extensions/memory-core/index.js +0 -440
- package/dist/extensions/memory-core/openclaw.plugin.json +0 -9
- package/dist/extensions/memory-core/package.json +0 -23
- package/dist/extensions/memory-core/runtime-api.js +0 -3
- package/dist/extensions/memory-lancedb/api.js +0 -4
- package/dist/extensions/memory-lancedb/config.js +0 -2
- package/dist/extensions/memory-lancedb/index.js +0 -7037
- package/dist/extensions/memory-lancedb/lancedb-runtime.js +0 -2
- package/dist/extensions/memory-lancedb/openclaw.plugin.json +0 -92
- package/dist/extensions/memory-lancedb/package.json +0 -24
- package/dist/extensions/microsoft/index.js +0 -13
- package/dist/extensions/microsoft/openclaw.plugin.json +0 -13
- package/dist/extensions/microsoft/package.json +0 -15
- package/dist/extensions/microsoft/speech-provider.js +0 -2
- package/dist/extensions/microsoft/test-api.js +0 -2
- package/dist/extensions/microsoft/tts.js +0 -2
- package/dist/extensions/microsoft-foundry/auth.js +0 -2
- package/dist/extensions/microsoft-foundry/cli.js +0 -2
- package/dist/extensions/microsoft-foundry/index.js +0 -13
- package/dist/extensions/microsoft-foundry/onboard.js +0 -3
- package/dist/extensions/microsoft-foundry/openclaw.plugin.json +0 -39
- package/dist/extensions/microsoft-foundry/package.json +0 -12
- package/dist/extensions/microsoft-foundry/provider.js +0 -2
- package/dist/extensions/microsoft-foundry/runtime.js +0 -2
- package/dist/extensions/microsoft-foundry/shared-runtime.js +0 -3
- package/dist/extensions/microsoft-foundry/shared.js +0 -2
- package/dist/extensions/minimax/api.js +0 -6
- package/dist/extensions/minimax/image-generation-provider.js +0 -2
- package/dist/extensions/minimax/index.js +0 -219
- package/dist/extensions/minimax/media-understanding-provider.js +0 -2
- package/dist/extensions/minimax/model-definitions.js +0 -2
- package/dist/extensions/minimax/oauth.js +0 -2
- package/dist/extensions/minimax/oauth.runtime.js +0 -2
- package/dist/extensions/minimax/onboard.js +0 -2
- package/dist/extensions/minimax/openclaw.plugin.json +0 -98
- package/dist/extensions/minimax/package.json +0 -12
- package/dist/extensions/minimax/provider-catalog.js +0 -2
- package/dist/extensions/minimax/provider-models.js +0 -2
- package/dist/extensions/mistral/api.js +0 -5
- package/dist/extensions/mistral/index.js +0 -79
- package/dist/extensions/mistral/media-understanding-provider.js +0 -2
- package/dist/extensions/mistral/model-definitions.js +0 -2
- package/dist/extensions/mistral/onboard.js +0 -2
- package/dist/extensions/mistral/openclaw.plugin.json +0 -37
- package/dist/extensions/mistral/package.json +0 -12
- package/dist/extensions/mistral/provider-catalog.js +0 -2
- package/dist/extensions/modelstudio/api.js +0 -4
- package/dist/extensions/modelstudio/index.js +0 -111
- package/dist/extensions/modelstudio/model-definitions.js +0 -2
- package/dist/extensions/modelstudio/models.js +0 -2
- package/dist/extensions/modelstudio/onboard.js +0 -3
- package/dist/extensions/modelstudio/openclaw.plugin.json +0 -75
- package/dist/extensions/modelstudio/package.json +0 -12
- package/dist/extensions/modelstudio/provider-catalog.js +0 -2
- package/dist/extensions/moonshot/api.js +0 -4
- package/dist/extensions/moonshot/index.js +0 -58
- package/dist/extensions/moonshot/media-understanding-provider.js +0 -2
- package/dist/extensions/moonshot/onboard.js +0 -2
- package/dist/extensions/moonshot/openclaw.plugin.json +0 -87
- package/dist/extensions/moonshot/package.json +0 -12
- package/dist/extensions/moonshot/provider-catalog.js +0 -2
- package/dist/extensions/moonshot/test-api.js +0 -2
- package/dist/extensions/moonshot/web-search-provider.js +0 -2
- package/dist/extensions/msteams/api.js +0 -2
- package/dist/extensions/msteams/channel-config-api.js +0 -2
- package/dist/extensions/msteams/index.js +0 -13
- package/dist/extensions/msteams/openclaw.plugin.json +0 -11
- package/dist/extensions/msteams/package.json +0 -48
- package/dist/extensions/msteams/runtime-api.js +0 -47
- package/dist/extensions/msteams/setup-entry.js +0 -6
- package/dist/extensions/msteams/test-api.js +0 -2
- package/dist/extensions/nextcloud-talk/api.js +0 -2
- package/dist/extensions/nextcloud-talk/index.js +0 -12
- package/dist/extensions/nextcloud-talk/openclaw.plugin.json +0 -11
- package/dist/extensions/nextcloud-talk/package.json +0 -45
- package/dist/extensions/nextcloud-talk/runtime-api.js +0 -35
- package/dist/extensions/nextcloud-talk/setup-entry.js +0 -6
- package/dist/extensions/nostr/api.js +0 -15
- package/dist/extensions/nostr/index.js +0 -559
- package/dist/extensions/nostr/openclaw.plugin.json +0 -11
- package/dist/extensions/nostr/package.json +0 -44
- package/dist/extensions/nostr/runtime-api.js +0 -15
- package/dist/extensions/nostr/setup-api.js +0 -2
- package/dist/extensions/nostr/setup-entry.js +0 -6
- package/dist/extensions/nostr/test-api.js +0 -2
- package/dist/extensions/nvidia/api.js +0 -2
- package/dist/extensions/nvidia/index.js +0 -16
- package/dist/extensions/nvidia/openclaw.plugin.json +0 -17
- package/dist/extensions/nvidia/package.json +0 -12
- package/dist/extensions/nvidia/provider-catalog.js +0 -2
- package/dist/extensions/ollama/api.js +0 -3
- package/dist/extensions/ollama/index.js +0 -139
- package/dist/extensions/ollama/openclaw.plugin.json +0 -29
- package/dist/extensions/ollama/package.json +0 -12
- package/dist/extensions/ollama/runtime-api.js +0 -3
- package/dist/extensions/open-prose/index.js +0 -10
- package/dist/extensions/open-prose/openclaw.plugin.json +0 -13
- package/dist/extensions/open-prose/package.json +0 -12
- package/dist/extensions/open-prose/runtime-api.js +0 -3
- package/dist/extensions/open-prose/skills/prose/LICENSE +0 -21
- package/dist/extensions/open-prose/skills/prose/SKILL.md +0 -323
- package/dist/extensions/open-prose/skills/prose/alt-borges.md +0 -141
- package/dist/extensions/open-prose/skills/prose/alts/arabian-nights.md +0 -229
- package/dist/extensions/open-prose/skills/prose/alts/borges.md +0 -360
- package/dist/extensions/open-prose/skills/prose/alts/folk.md +0 -322
- package/dist/extensions/open-prose/skills/prose/alts/homer.md +0 -217
- package/dist/extensions/open-prose/skills/prose/alts/kafka.md +0 -373
- package/dist/extensions/open-prose/skills/prose/alts/shared-appendix.md +0 -35
- package/dist/extensions/open-prose/skills/prose/compiler.md +0 -2971
- package/dist/extensions/open-prose/skills/prose/examples/01-hello-world.prose +0 -4
- package/dist/extensions/open-prose/skills/prose/examples/02-research-and-summarize.prose +0 -6
- package/dist/extensions/open-prose/skills/prose/examples/03-code-review.prose +0 -17
- package/dist/extensions/open-prose/skills/prose/examples/04-write-and-refine.prose +0 -14
- package/dist/extensions/open-prose/skills/prose/examples/05-debug-issue.prose +0 -20
- package/dist/extensions/open-prose/skills/prose/examples/06-explain-codebase.prose +0 -17
- package/dist/extensions/open-prose/skills/prose/examples/07-refactor.prose +0 -20
- package/dist/extensions/open-prose/skills/prose/examples/08-blog-post.prose +0 -20
- package/dist/extensions/open-prose/skills/prose/examples/09-research-with-agents.prose +0 -25
- package/dist/extensions/open-prose/skills/prose/examples/10-code-review-agents.prose +0 -32
- package/dist/extensions/open-prose/skills/prose/examples/11-skills-and-imports.prose +0 -27
- package/dist/extensions/open-prose/skills/prose/examples/12-secure-agent-permissions.prose +0 -43
- package/dist/extensions/open-prose/skills/prose/examples/13-variables-and-context.prose +0 -51
- package/dist/extensions/open-prose/skills/prose/examples/14-composition-blocks.prose +0 -48
- package/dist/extensions/open-prose/skills/prose/examples/15-inline-sequences.prose +0 -23
- package/dist/extensions/open-prose/skills/prose/examples/16-parallel-reviews.prose +0 -19
- package/dist/extensions/open-prose/skills/prose/examples/17-parallel-research.prose +0 -19
- package/dist/extensions/open-prose/skills/prose/examples/18-mixed-parallel-sequential.prose +0 -36
- package/dist/extensions/open-prose/skills/prose/examples/19-advanced-parallel.prose +0 -71
- package/dist/extensions/open-prose/skills/prose/examples/20-fixed-loops.prose +0 -20
- package/dist/extensions/open-prose/skills/prose/examples/21-pipeline-operations.prose +0 -35
- package/dist/extensions/open-prose/skills/prose/examples/22-error-handling.prose +0 -51
- package/dist/extensions/open-prose/skills/prose/examples/23-retry-with-backoff.prose +0 -63
- package/dist/extensions/open-prose/skills/prose/examples/24-choice-blocks.prose +0 -86
- package/dist/extensions/open-prose/skills/prose/examples/25-conditionals.prose +0 -114
- package/dist/extensions/open-prose/skills/prose/examples/26-parameterized-blocks.prose +0 -100
- package/dist/extensions/open-prose/skills/prose/examples/27-string-interpolation.prose +0 -105
- package/dist/extensions/open-prose/skills/prose/examples/28-automated-pr-review.prose +0 -37
- package/dist/extensions/open-prose/skills/prose/examples/28-gas-town.prose +0 -1572
- package/dist/extensions/open-prose/skills/prose/examples/29-captains-chair.prose +0 -218
- package/dist/extensions/open-prose/skills/prose/examples/30-captains-chair-simple.prose +0 -42
- package/dist/extensions/open-prose/skills/prose/examples/31-captains-chair-with-memory.prose +0 -145
- package/dist/extensions/open-prose/skills/prose/examples/33-pr-review-autofix.prose +0 -168
- package/dist/extensions/open-prose/skills/prose/examples/34-content-pipeline.prose +0 -204
- package/dist/extensions/open-prose/skills/prose/examples/35-feature-factory.prose +0 -296
- package/dist/extensions/open-prose/skills/prose/examples/36-bug-hunter.prose +0 -237
- package/dist/extensions/open-prose/skills/prose/examples/37-the-forge.prose +0 -1474
- package/dist/extensions/open-prose/skills/prose/examples/38-skill-scan.prose +0 -455
- package/dist/extensions/open-prose/skills/prose/examples/39-architect-by-simulation.prose +0 -277
- package/dist/extensions/open-prose/skills/prose/examples/40-rlm-self-refine.prose +0 -32
- package/dist/extensions/open-prose/skills/prose/examples/41-rlm-divide-conquer.prose +0 -38
- package/dist/extensions/open-prose/skills/prose/examples/42-rlm-filter-recurse.prose +0 -46
- package/dist/extensions/open-prose/skills/prose/examples/43-rlm-pairwise.prose +0 -50
- package/dist/extensions/open-prose/skills/prose/examples/44-run-endpoint-ux-test.prose +0 -261
- package/dist/extensions/open-prose/skills/prose/examples/45-plugin-release.prose +0 -159
- package/dist/extensions/open-prose/skills/prose/examples/45-run-endpoint-ux-test-with-remediation.prose +0 -637
- package/dist/extensions/open-prose/skills/prose/examples/46-run-endpoint-ux-test-fast.prose +0 -148
- package/dist/extensions/open-prose/skills/prose/examples/46-workflow-crystallizer.prose +0 -225
- package/dist/extensions/open-prose/skills/prose/examples/47-language-self-improvement.prose +0 -356
- package/dist/extensions/open-prose/skills/prose/examples/48-habit-miner.prose +0 -445
- package/dist/extensions/open-prose/skills/prose/examples/49-prose-run-retrospective.prose +0 -210
- package/dist/extensions/open-prose/skills/prose/examples/README.md +0 -391
- package/dist/extensions/open-prose/skills/prose/examples/roadmap/README.md +0 -22
- package/dist/extensions/open-prose/skills/prose/examples/roadmap/iterative-refinement.prose +0 -20
- package/dist/extensions/open-prose/skills/prose/examples/roadmap/parallel-review.prose +0 -18
- package/dist/extensions/open-prose/skills/prose/examples/roadmap/simple-pipeline.prose +0 -17
- package/dist/extensions/open-prose/skills/prose/examples/roadmap/syntax/open-prose-syntax.prose +0 -223
- package/dist/extensions/open-prose/skills/prose/guidance/antipatterns.md +0 -951
- package/dist/extensions/open-prose/skills/prose/guidance/patterns.md +0 -700
- package/dist/extensions/open-prose/skills/prose/guidance/system-prompt.md +0 -180
- package/dist/extensions/open-prose/skills/prose/help.md +0 -144
- package/dist/extensions/open-prose/skills/prose/lib/README.md +0 -108
- package/dist/extensions/open-prose/skills/prose/lib/calibrator.prose +0 -215
- package/dist/extensions/open-prose/skills/prose/lib/cost-analyzer.prose +0 -174
- package/dist/extensions/open-prose/skills/prose/lib/error-forensics.prose +0 -250
- package/dist/extensions/open-prose/skills/prose/lib/inspector.prose +0 -196
- package/dist/extensions/open-prose/skills/prose/lib/profiler.prose +0 -460
- package/dist/extensions/open-prose/skills/prose/lib/program-improver.prose +0 -275
- package/dist/extensions/open-prose/skills/prose/lib/project-memory.prose +0 -118
- package/dist/extensions/open-prose/skills/prose/lib/user-memory.prose +0 -93
- package/dist/extensions/open-prose/skills/prose/lib/vm-improver.prose +0 -243
- package/dist/extensions/open-prose/skills/prose/primitives/session.md +0 -593
- package/dist/extensions/open-prose/skills/prose/prose.md +0 -1237
- package/dist/extensions/open-prose/skills/prose/state/filesystem.md +0 -498
- package/dist/extensions/open-prose/skills/prose/state/in-context.md +0 -384
- package/dist/extensions/open-prose/skills/prose/state/postgres.md +0 -880
- package/dist/extensions/open-prose/skills/prose/state/sqlite.md +0 -531
- package/dist/extensions/openai/api.js +0 -4
- package/dist/extensions/openai/cli-backend.js +0 -2
- package/dist/extensions/openai/default-models.js +0 -2
- package/dist/extensions/openai/image-generation-provider.js +0 -2
- package/dist/extensions/openai/index.js +0 -24
- package/dist/extensions/openai/media-understanding-provider.js +0 -2
- package/dist/extensions/openai/openai-codex-auth-identity.js +0 -2
- package/dist/extensions/openai/openai-codex-catalog.js +0 -2
- package/dist/extensions/openai/openai-codex-provider.js +0 -2
- package/dist/extensions/openai/openai-codex-provider.runtime.js +0 -14
- package/dist/extensions/openai/openai-provider.js +0 -2
- package/dist/extensions/openai/openclaw.plugin.json +0 -61
- package/dist/extensions/openai/package.json +0 -12
- package/dist/extensions/openai/shared.js +0 -4
- package/dist/extensions/openai/speech-provider.js +0 -2
- package/dist/extensions/openai/test-api.js +0 -5
- package/dist/extensions/openai/tts.js +0 -2
- package/dist/extensions/opencode/api.js +0 -3
- package/dist/extensions/opencode/index.js +0 -63
- package/dist/extensions/opencode/onboard.js +0 -2
- package/dist/extensions/opencode/openclaw.plugin.json +0 -33
- package/dist/extensions/opencode/package.json +0 -12
- package/dist/extensions/opencode-go/api.js +0 -3
- package/dist/extensions/opencode-go/index.js +0 -54
- package/dist/extensions/opencode-go/onboard.js +0 -2
- package/dist/extensions/opencode-go/openclaw.plugin.json +0 -33
- package/dist/extensions/opencode-go/package.json +0 -12
- package/dist/extensions/openrouter/api.js +0 -3
- package/dist/extensions/openrouter/index.js +0 -121
- package/dist/extensions/openrouter/media-understanding-provider.js +0 -2
- package/dist/extensions/openrouter/onboard.js +0 -2
- package/dist/extensions/openrouter/openclaw.plugin.json +0 -37
- package/dist/extensions/openrouter/package.json +0 -12
- package/dist/extensions/openrouter/provider-catalog.js +0 -2
- package/dist/extensions/openshell/index.js +0 -919
- package/dist/extensions/openshell/openclaw.plugin.json +0 -118
- package/dist/extensions/openshell/package.json +0 -12
- package/dist/extensions/perplexity/index.js +0 -13
- package/dist/extensions/perplexity/openclaw.plugin.json +0 -54
- package/dist/extensions/perplexity/package.json +0 -12
- package/dist/extensions/perplexity/test-api.js +0 -2
- package/dist/extensions/perplexity/web-search-provider.js +0 -2
- package/dist/extensions/phone-control/index.js +0 -283
- package/dist/extensions/phone-control/openclaw.plugin.json +0 -11
- package/dist/extensions/phone-control/runtime-api.js +0 -3
- package/dist/extensions/qianfan/api.js +0 -3
- package/dist/extensions/qianfan/index.js +0 -26
- package/dist/extensions/qianfan/onboard.js +0 -2
- package/dist/extensions/qianfan/openclaw.plugin.json +0 -32
- package/dist/extensions/qianfan/package.json +0 -12
- package/dist/extensions/qianfan/provider-catalog.js +0 -2
- package/dist/extensions/qqbot/api.js +0 -173
- package/dist/extensions/qqbot/index.js +0 -445
- package/dist/extensions/qqbot/openclaw.plugin.json +0 -257
- package/dist/extensions/qqbot/package.json +0 -52
- package/dist/extensions/qqbot/runtime-api.js +0 -2
- package/dist/extensions/qqbot/setup-entry.js +0 -6
- package/dist/extensions/qqbot/skills/qqbot-channel/SKILL.md +0 -262
- package/dist/extensions/qqbot/skills/qqbot-channel/references/api_references.md +0 -521
- package/dist/extensions/qqbot/skills/qqbot-media/SKILL.md +0 -36
- package/dist/extensions/qqbot/skills/qqbot-remind/SKILL.md +0 -149
- package/dist/extensions/searxng/index.js +0 -13
- package/dist/extensions/searxng/openclaw.plugin.json +0 -46
- package/dist/extensions/searxng/package.json +0 -12
- package/dist/extensions/searxng/web-search-provider.js +0 -2
- package/dist/extensions/sglang/api.js +0 -4
- package/dist/extensions/sglang/defaults.js +0 -2
- package/dist/extensions/sglang/index.js +0 -77
- package/dist/extensions/sglang/models.js +0 -2
- package/dist/extensions/sglang/openclaw.plugin.json +0 -29
- package/dist/extensions/sglang/package.json +0 -12
- package/dist/extensions/signal/api.js +0 -7
- package/dist/extensions/signal/channel-config-api.js +0 -2
- package/dist/extensions/signal/index.js +0 -319
- package/dist/extensions/signal/openclaw.plugin.json +0 -11
- package/dist/extensions/signal/package.json +0 -24
- package/dist/extensions/signal/reaction-runtime-api.js +0 -2
- package/dist/extensions/signal/runtime-api.js +0 -24
- package/dist/extensions/signal/setup-entry.js +0 -13
- package/dist/extensions/signal/test-api.js +0 -111
- package/dist/extensions/slack/api.js +0 -10
- package/dist/extensions/slack/channel-config-api.js +0 -2
- package/dist/extensions/slack/index.js +0 -12
- package/dist/extensions/slack/openclaw.plugin.json +0 -11
- package/dist/extensions/slack/package.json +0 -31
- package/dist/extensions/slack/runtime-api.js +0 -110
- package/dist/extensions/slack/setup-entry.js +0 -12
- package/dist/extensions/slack/test-api.js +0 -47
- package/dist/extensions/stepfun/index.js +0 -163
- package/dist/extensions/stepfun/onboard.js +0 -3
- package/dist/extensions/stepfun/openclaw.plugin.json +0 -83
- package/dist/extensions/stepfun/package.json +0 -12
- package/dist/extensions/stepfun/provider-catalog.js +0 -2
- package/dist/extensions/synology-chat/index.js +0 -12
- package/dist/extensions/synology-chat/openclaw.plugin.json +0 -11
- package/dist/extensions/synology-chat/package.json +0 -26
- package/dist/extensions/synology-chat/setup-api.js +0 -2
- package/dist/extensions/synology-chat/setup-entry.js +0 -6
- package/dist/extensions/synthetic/api.js +0 -4
- package/dist/extensions/synthetic/index.js +0 -27
- package/dist/extensions/synthetic/models.js +0 -2
- package/dist/extensions/synthetic/onboard.js +0 -3
- package/dist/extensions/synthetic/openclaw.plugin.json +0 -32
- package/dist/extensions/synthetic/package.json +0 -12
- package/dist/extensions/synthetic/provider-catalog.js +0 -2
- package/dist/extensions/talk-voice/api.js +0 -3
- package/dist/extensions/talk-voice/index.js +0 -160
- package/dist/extensions/talk-voice/openclaw.plugin.json +0 -11
- package/dist/extensions/tavily/index.js +0 -128
- package/dist/extensions/tavily/openclaw.plugin.json +0 -53
- package/dist/extensions/tavily/package.json +0 -12
- package/dist/extensions/tavily/skills/tavily/SKILL.md +0 -94
- package/dist/extensions/tavily/web-search-provider.js +0 -2
- package/dist/extensions/telegram/allow-from.js +0 -2
- package/dist/extensions/telegram/api.js +0 -14
- package/dist/extensions/telegram/channel-config-api.js +0 -2
- package/dist/extensions/telegram/index.js +0 -12
- package/dist/extensions/telegram/openclaw.plugin.json +0 -11
- package/dist/extensions/telegram/package.json +0 -37
- package/dist/extensions/telegram/runtime-api.js +0 -25
- package/dist/extensions/telegram/session-key-api.js +0 -2
- package/dist/extensions/telegram/setup-entry.js +0 -13
- package/dist/extensions/telegram/test-api.js +0 -88
- package/dist/extensions/telegram/test-support.js +0 -46
- package/dist/extensions/telegram/update-offset-runtime-api.js +0 -2
- package/dist/extensions/thread-ownership/api.js +0 -5
- package/dist/extensions/thread-ownership/index.js +0 -82
- package/dist/extensions/thread-ownership/openclaw.plugin.json +0 -30
- package/dist/extensions/tlon/api.js +0 -14
- package/dist/extensions/tlon/index.js +0 -150
- package/dist/extensions/tlon/openclaw.plugin.json +0 -12
- package/dist/extensions/tlon/package.json +0 -44
- package/dist/extensions/tlon/runtime-api.js +0 -14
- package/dist/extensions/tlon/setup-api.js +0 -3
- package/dist/extensions/tlon/setup-entry.js +0 -6
- package/dist/extensions/tlon/test-api.js +0 -2
- package/dist/extensions/together/api.js +0 -3
- package/dist/extensions/together/index.js +0 -26
- package/dist/extensions/together/models.js +0 -2
- package/dist/extensions/together/onboard.js +0 -2
- package/dist/extensions/together/openclaw.plugin.json +0 -32
- package/dist/extensions/together/package.json +0 -12
- package/dist/extensions/together/provider-catalog.js +0 -2
- package/dist/extensions/twitch/api.js +0 -9
- package/dist/extensions/twitch/index.js +0 -1090
- package/dist/extensions/twitch/openclaw.plugin.json +0 -11
- package/dist/extensions/twitch/package.json +0 -29
- package/dist/extensions/twitch/runtime-api.js +0 -9
- package/dist/extensions/venice/api.js +0 -3
- package/dist/extensions/venice/index.js +0 -55
- package/dist/extensions/venice/models.js +0 -2
- package/dist/extensions/venice/onboard.js +0 -3
- package/dist/extensions/venice/openclaw.plugin.json +0 -32
- package/dist/extensions/venice/package.json +0 -12
- package/dist/extensions/venice/provider-catalog.js +0 -2
- package/dist/extensions/vercel-ai-gateway/api.js +0 -4
- package/dist/extensions/vercel-ai-gateway/index.js +0 -30
- package/dist/extensions/vercel-ai-gateway/models.js +0 -2
- package/dist/extensions/vercel-ai-gateway/onboard.js +0 -2
- package/dist/extensions/vercel-ai-gateway/openclaw.plugin.json +0 -32
- package/dist/extensions/vercel-ai-gateway/package.json +0 -12
- package/dist/extensions/vercel-ai-gateway/provider-catalog.js +0 -2
- package/dist/extensions/vllm/api.js +0 -4
- package/dist/extensions/vllm/defaults.js +0 -2
- package/dist/extensions/vllm/index.js +0 -78
- package/dist/extensions/vllm/models.js +0 -2
- package/dist/extensions/vllm/openclaw.plugin.json +0 -29
- package/dist/extensions/vllm/package.json +0 -12
- package/dist/extensions/voice-call/api.js +0 -7
- package/dist/extensions/voice-call/index.js +0 -698
- package/dist/extensions/voice-call/openclaw.plugin.json +0 -700
- package/dist/extensions/voice-call/package.json +0 -33
- package/dist/extensions/voice-call/runtime-api.js +0 -7
- package/dist/extensions/voice-call/runtime-entry.js +0 -2
- package/dist/extensions/volcengine/api.js +0 -3
- package/dist/extensions/volcengine/index.js +0 -63
- package/dist/extensions/volcengine/models.js +0 -2
- package/dist/extensions/volcengine/openclaw.plugin.json +0 -33
- package/dist/extensions/volcengine/package.json +0 -12
- package/dist/extensions/volcengine/provider-catalog.js +0 -2
- package/dist/extensions/whatsapp/action-runtime-api.js +0 -2
- package/dist/extensions/whatsapp/action-runtime.runtime.js +0 -2
- package/dist/extensions/whatsapp/api.js +0 -8
- package/dist/extensions/whatsapp/auth-presence.js +0 -2
- package/dist/extensions/whatsapp/channel-config-api.js +0 -2
- package/dist/extensions/whatsapp/constants.js +0 -2
- package/dist/extensions/whatsapp/index.js +0 -12
- package/dist/extensions/whatsapp/light-runtime-api.js +0 -5
- package/dist/extensions/whatsapp/login-qr-api.js +0 -2
- package/dist/extensions/whatsapp/openclaw.plugin.json +0 -11
- package/dist/extensions/whatsapp/package.json +0 -45
- package/dist/extensions/whatsapp/runtime-api.js +0 -334
- package/dist/extensions/whatsapp/setup-entry.js +0 -23
- package/dist/extensions/whatsapp/test-api.js +0 -76
- package/dist/extensions/xai/api.js +0 -6
- package/dist/extensions/xai/code-execution.js +0 -2
- package/dist/extensions/xai/index.js +0 -122
- package/dist/extensions/xai/model-definitions.js +0 -2
- package/dist/extensions/xai/model-id.js +0 -2
- package/dist/extensions/xai/onboard.js +0 -2
- package/dist/extensions/xai/openclaw.plugin.json +0 -157
- package/dist/extensions/xai/package.json +0 -12
- package/dist/extensions/xai/provider-catalog.js +0 -2
- package/dist/extensions/xai/provider-models.js +0 -2
- package/dist/extensions/xai/stream.js +0 -2
- package/dist/extensions/xai/web-search.js +0 -2
- package/dist/extensions/xai/x-search.js +0 -2
- package/dist/extensions/xiaomi/api.js +0 -3
- package/dist/extensions/xiaomi/index.js +0 -37
- package/dist/extensions/xiaomi/onboard.js +0 -2
- package/dist/extensions/xiaomi/openclaw.plugin.json +0 -32
- package/dist/extensions/xiaomi/package.json +0 -12
- package/dist/extensions/xiaomi/provider-catalog.js +0 -2
- package/dist/extensions/zai/api.js +0 -3
- package/dist/extensions/zai/detect.js +0 -2
- package/dist/extensions/zai/index.js +0 -239
- package/dist/extensions/zai/media-understanding-provider.js +0 -2
- package/dist/extensions/zai/model-definitions.js +0 -2
- package/dist/extensions/zai/onboard.js +0 -2
- package/dist/extensions/zai/openclaw.plugin.json +0 -94
- package/dist/extensions/zai/package.json +0 -12
- package/dist/extensions/zai/runtime-api.js +0 -3
- package/dist/extensions/zalo/api.js +0 -3
- package/dist/extensions/zalo/index.js +0 -13
- package/dist/extensions/zalo/openclaw.plugin.json +0 -11
- package/dist/extensions/zalo/package.json +0 -47
- package/dist/extensions/zalo/runtime-api.js +0 -38
- package/dist/extensions/zalo/setup-entry.js +0 -6
- package/dist/extensions/zalo/test-api.js +0 -2
- package/dist/extensions/zalouser/api.js +0 -2
- package/dist/extensions/zalouser/index.js +0 -599
- package/dist/extensions/zalouser/openclaw.plugin.json +0 -11
- package/dist/extensions/zalouser/package.json +0 -48
- package/dist/extensions/zalouser/runtime-api.js +0 -30
- package/dist/extensions/zalouser/setup-entry.js +0 -13
- package/dist/extensions/zalouser/test-api.js +0 -5
- package/dist/external-content-DtoRY-d1.js +0 -242
- package/dist/facade-runtime-Bpi4Gy-u.js +0 -263
- package/dist/failover-error-BrdBIFg2.js +0 -180
- package/dist/feishu-81Iv8tqF.js +0 -18
- package/dist/feishu-conversation-NmEqAxSA.js +0 -17
- package/dist/feishu-setup-DXAK6GqE.js +0 -12
- package/dist/fetch-7dbKQPT5.js +0 -256
- package/dist/fetch-BjiGl865.js +0 -418
- package/dist/fetch-Bp23aO5S.js +0 -65
- package/dist/fetch-guard-BnhVFBtf.js +0 -150
- package/dist/fetch-mock-WghRRNpK.js +0 -6
- package/dist/fetch-runtime-DfFmkkZH.js +0 -4
- package/dist/fetch-timeout-BKMGkHu9.js +0 -58
- package/dist/file-identity-DPm-6kp0.js +0 -567
- package/dist/file-lock-CH0V9dhL.js +0 -141
- package/dist/file-lock-D292sbfa.js +0 -2
- package/dist/firecrawl-client-GOGPuEeg.js +0 -338
- package/dist/firecrawl-search-provider-ptp7GNAt.js +0 -47
- package/dist/format-BwzSM9vY.js +0 -24
- package/dist/format-D38w0aKT.js +0 -817
- package/dist/format-DCFsK8oa.js +0 -19
- package/dist/format-datetime-Bl6-b7G1.js +0 -73
- package/dist/format-duration-DqcpDYkZ.js +0 -57
- package/dist/format-relative-CYrRyrT7.js +0 -54
- package/dist/frontmatter-Ba2Hn11b.js +0 -45
- package/dist/frontmatter-Cjxy4vX8.js +0 -210
- package/dist/fs-safe-BQ59ttjX.js +0 -999
- package/dist/gateway-CWPyH-P7.js +0 -2575
- package/dist/gateway-cli-BmPBPCcJ.js +0 -1572
- package/dist/gateway-discovery-targets--oNzWOVw.js +0 -430
- package/dist/gateway-install-token-tyQyR2ED.js +0 -230
- package/dist/gateway-lock-BbUQuUet.js +0 -292
- package/dist/gateway-presence-BVCIm1hy.js +0 -15
- package/dist/gateway-registry-tQcIThkV.js +0 -74
- package/dist/gateway-rpc-BXdoSPN7.js +0 -26
- package/dist/gateway-runtime-C7EhkU_c.js +0 -12
- package/dist/gaxios-fetch-compat-D4gl5582.js +0 -180
- package/dist/gemini-auth-Dlpcd9MB.js +0 -29
- package/dist/gemini-web-search-provider-CkNEl2du.js +0 -162
- package/dist/get-reply-from-config.runtime-vBmBttxw.js +0 -2
- package/dist/get-reply-from-config.runtime.js +0 -1
- package/dist/git-commit-BS28SZVT.js +0 -2
- package/dist/git-commit-ChiOoWyK.js +0 -177
- package/dist/github-copilot-login-B8s4OVQ4.js +0 -11
- package/dist/github-copilot-token-BwXtH-ZJ.js +0 -2
- package/dist/github-copilot-token-D81Wvm8b.js +0 -2
- package/dist/github-copilot-token-beHjQGOp.js +0 -91
- package/dist/global-singleton-54zT3rCn.js +0 -13
- package/dist/global-singleton-iOq2_-p8.js +0 -1
- package/dist/global-state-DUuMGgts.js +0 -17
- package/dist/globals-CDtV0ht8.js +0 -25
- package/dist/gmail-setup-utils-CxXfU7cy.js +0 -421
- package/dist/google-Cx1_z3Q3.js +0 -24
- package/dist/googlechat-CoiMNDC2.js +0 -37
- package/dist/graph-users-BmZWavVH.js +0 -917
- package/dist/group-access-BZZ3FNmb.js +0 -32
- package/dist/group-access-BjveEAjz.js +0 -113
- package/dist/group-access-owHLoCWX.js +0 -119
- package/dist/group-activation-ClEb7qwj.js +0 -22
- package/dist/group-id-CcsUNOct.js +0 -11
- package/dist/group-policy-Bb8dxOpM.js +0 -25
- package/dist/group-policy-G9GcSyph.js +0 -201
- package/dist/group-policy-wS9F8Y_i.js +0 -51
- package/dist/group-policy-warnings-CL2gHsXM.js +0 -196
- package/dist/groups.runtime-K758xQFV.js +0 -6
- package/dist/groups.runtime.js +0 -1
- package/dist/handle-action-CE4vpa7G.js +0 -500
- package/dist/health-D_KQbqQY.js +0 -577
- package/dist/health-a1VPtSyV.js +0 -2
- package/dist/health-format-COR93f8W.js +0 -26
- package/dist/heartbeat-C_TrErgd.js +0 -122
- package/dist/heartbeat-reply-payload-C7Ac3fOZ.js +0 -13
- package/dist/heartbeat-summary-v5gPj5bd.js +0 -57
- package/dist/heartbeat-visibility-CHMO4pmJ.js +0 -102
- package/dist/help-CyR1Oo4X.js +0 -81
- package/dist/help-format-l1phKNA8.js +0 -15
- package/dist/helpers-COHnQbWX.js +0 -32
- package/dist/helpers-DNpD7VMo.js +0 -24
- package/dist/history-B4mW8GfY.js +0 -102
- package/dist/home-dir-n9onX5PG.js +0 -83
- package/dist/hook-runner-global-C9GhdBtf.js +0 -632
- package/dist/hook-runner-global-Cr_Pthp4.js +0 -2
- package/dist/hook-runtime-DK8QF-2x.js +0 -3
- package/dist/hooks-cli-XCo-7nz9.js +0 -353
- package/dist/hooks-policy-BmULXBcp.js +0 -20
- package/dist/hooks-status-D_ZxRD0H.js +0 -86
- package/dist/host-env-security-SlXI58bc.js +0 -290
- package/dist/host-runtime-BGHb06HN.js +0 -1
- package/dist/hostname-BRYLr_mh.js +0 -8
- package/dist/http-body-CfdQSEp0.js +0 -238
- package/dist/http-client-_3i4-nw5.js +0 -294
- package/dist/http-registry-ZGSBfYSe.js +0 -54
- package/dist/http-route-overlap-C8lbolN5.js +0 -101
- package/dist/identity-BoQQh6Y8.js +0 -26
- package/dist/identity-D64Wfv_s.js +0 -29
- package/dist/identity-DvwF6Yix.js +0 -84
- package/dist/identity-avatar-DPBgVwpU.js +0 -86
- package/dist/identity-file-BtIJI4dn.js +0 -60
- package/dist/image-C4V19x9x.js +0 -152
- package/dist/image-generation-BbOnazXi.js +0 -1
- package/dist/image-generation-provider-CQK8HA0O.js +0 -136
- package/dist/image-generation-provider-CWUvRxmv.js +0 -131
- package/dist/image-generation-provider-F2sfNjcr.js +0 -281
- package/dist/image-ops-BJKjhMAu.js +0 -476
- package/dist/image-runtime-DodXcK2e.js +0 -7
- package/dist/imessage-2ukkzufG.js +0 -19
- package/dist/inbound-context-Cxvd3JHZ.js +0 -59
- package/dist/inbound-context-Czd3FdNb.js +0 -52
- package/dist/inbound-debounce-CI7l3R36.js +0 -159
- package/dist/inbound-envelope-LyHTUTue.js +0 -61
- package/dist/inbound-reply-dispatch-BdeY6N-k.js +0 -73
- package/dist/inbound-text-CacimZtw.js +0 -14
- package/dist/inbound.runtime-CqX3n132.js +0 -3
- package/dist/inbound.runtime.js +0 -1
- package/dist/includes-Ccr-Q5DB.js +0 -188
- package/dist/includes-scan-DVvYLj4S.js +0 -55
- package/dist/index.js +0 -56
- package/dist/infra/warning-filter.js +0 -2
- package/dist/infra-runtime-Cl0iZpRS.js +0 -22
- package/dist/input-files-PZC6ZR4W.js +0 -251
- package/dist/input-provenance-8GBFuk0Q.js +0 -44
- package/dist/inspect-B8dw6NVJ.js +0 -286
- package/dist/install-Bk7XyvtC.js +0 -590
- package/dist/install-package-dir-C2ba2toB.js +0 -284
- package/dist/install-safe-path-CkCd0rWS.js +0 -69
- package/dist/install-security-scan-C02VaEU9.js +0 -22
- package/dist/install-security-scan.runtime-CDUuS6Dl.js +0 -299
- package/dist/install-security-scan.runtime.js +0 -1
- package/dist/install-source-utils-2tdWQmwI.js +0 -167
- package/dist/install-target-CBNysuiP.js +0 -175
- package/dist/install.runtime-D_zKCpnB.js +0 -11
- package/dist/install.runtime-DjQozvMe.js +0 -27
- package/dist/install.runtime.js +0 -1
- package/dist/installs-BnAbQ70v.js +0 -28
- package/dist/interactive-CEnsu1RT.js +0 -8
- package/dist/interactive-runtime-Bxq5ztle.js +0 -1
- package/dist/internal-Lk0wFTNq.js +0 -411
- package/dist/internal-hooks-C3ziA7w_.js +0 -155
- package/dist/io-BUxKr33U.js +0 -2236
- package/dist/io-BuMkfjp3.js +0 -4
- package/dist/ip-BZP18dDl.js +0 -208
- package/dist/ipv4-Xiyu1rvD.js +0 -82
- package/dist/irc-DXfYh-Sd.js +0 -14
- package/dist/irc-surface-Di-joPuc.js +0 -15
- package/dist/is-main-Bv5ej4lF.js +0 -27
- package/dist/issue-format-8Eylt-2O.js +0 -2
- package/dist/issue-format-DLZczJ0U.js +0 -31
- package/dist/json-file-5xJqyXrK.js +0 -23
- package/dist/json-files-C4lsZ_HR.js +0 -72
- package/dist/json-mode-4O1xL2fT.js +0 -34
- package/dist/json-pointer-C30cknnZ.js +0 -43
- package/dist/json-store-FUgu1pyj.js +0 -37
- package/dist/keyed-async-queue-BTOTBE8n.js +0 -32
- package/dist/kill-tree-CIfAbzdN.js +0 -2
- package/dist/kill-tree-CUPpLbeq.js +0 -82
- package/dist/kimi-web-search-provider-Cb3F9_Da.js +0 -224
- package/dist/known-users-DjerpGCB.js +0 -167
- package/dist/lancedb-runtime-DTb_mDUG.js +0 -201
- package/dist/launchd-cp98MUhz.js +0 -517
- package/dist/lazy-runtime-C6LCAM-L.js +0 -29
- package/dist/lazy-runtime-yh_WT4on.js +0 -1
- package/dist/lazy-service-module-CeifO9oo.js +0 -24
- package/dist/legacy-crypto-restore-CsHmLVjY.js +0 -85
- package/dist/legacy-names-CFo8Oe-2.js +0 -9
- package/dist/legacy-web-search-Bn8F2jrN.js +0 -140
- package/dist/legacy.shared-oZM32end.js +0 -45
- package/dist/level-overrides-gqc8xfh2.js +0 -36
- package/dist/library-ChjjeniJ.js +0 -44
- package/dist/lifecycle-core-Ce_ZEvjl.js +0 -402
- package/dist/line-Be0jY3CU.js +0 -4
- package/dist/line-runtime-B0ZGTK81.js +0 -60
- package/dist/line-surface-BTopinac.js +0 -27
- package/dist/links-D7o22Ygt.js +0 -17
- package/dist/listeners-_47QWN8-.js +0 -14
- package/dist/llm-slug-generator-Dv-sLOW9.js +0 -68
- package/dist/llm-slug-generator.js +0 -2
- package/dist/llm-task-BDA3i86A.js +0 -3
- package/dist/load-BXSzQ8YA.js +0 -28
- package/dist/load-options-BqszWkkN.js +0 -36
- package/dist/loader-DsZDoLQ6.js +0 -2519
- package/dist/local-file-access-PajXzDdK.js +0 -49
- package/dist/local-roots-DrpNBv4b.js +0 -46
- package/dist/location-CtMHXE-d.js +0 -42
- package/dist/logger-Bc2lC3X3.js +0 -79
- package/dist/logger-CIV9WBoa.js +0 -11
- package/dist/logger-DdGvppaE.js +0 -75
- package/dist/logger-MWEZrHUL.js +0 -582
- package/dist/logging-B1QD0DRq.js +0 -2
- package/dist/logging-CAfgK7sj.js +0 -3
- package/dist/logging-ColPHIDT.js +0 -16
- package/dist/logging-D4xyCEzZ.js +0 -85
- package/dist/logging-Dt_aiHur.js +0 -13
- package/dist/logging-Dywye6yZ.js +0 -2
- package/dist/logging-core-hw7Df6Hl.js +0 -3
- package/dist/login-BrqdQcNh.js +0 -108
- package/dist/login-DSqrZNW-.js +0 -2333
- package/dist/login-qr-Dm3iC25_.js +0 -212
- package/dist/login-qr-api-BxRDJKkp.js +0 -16
- package/dist/logs-cli-CxjV80As.js +0 -221
- package/dist/magic-string.es-CVHNyqW1.js +0 -1011
- package/dist/main-session-BbO0A-No.js +0 -38
- package/dist/manager-c_fEco8X.js +0 -2773
- package/dist/manager-runtime-Vy_F8ORR.js +0 -2
- package/dist/manager.runtime-Bm1Knq-3.js +0 -670
- package/dist/manager.runtime.js +0 -1
- package/dist/manifest-f_gihArl.js +0 -237
- package/dist/manifest-registry-Kx5Z2lJL.js +0 -1069
- package/dist/map-size-BBQq2RPq.js +0 -15
- package/dist/markdown-table-runtime-Dx12DQTq.js +0 -2
- package/dist/markdown-tables-CSlyhQVP.js +0 -31
- package/dist/mask-api-key-BYVFDQdo.js +0 -10
- package/dist/matrix-NDa-FoaE.js +0 -351
- package/dist/matrix-config-helpers-D0D-oL7I.js +0 -153
- package/dist/matrix-helper-DioFIiaO.js +0 -20
- package/dist/matrix-migration-snapshot-DAOFFSgM.js +0 -714
- package/dist/matrix-ouiFsVI1.js +0 -39
- package/dist/matrix-runtime-heavy-KUEg_MfD.js +0 -4
- package/dist/matrix-runtime-shared-B6aE5Uu6.js +0 -1
- package/dist/matrix-runtime-surface-R78Hde6Q.js +0 -12
- package/dist/matrix-surface-B-nU-e0B.js +0 -13
- package/dist/matrix-thread-bindings-B77Krs8r.js +0 -12
- package/dist/mattermost-Cg2PI71s.js +0 -18
- package/dist/mcp/plugin-tools-serve.js +0 -105
- package/dist/mcp-cli-BMNT4RIm.js +0 -768
- package/dist/mcp-config-3y1z3N2x.js +0 -118
- package/dist/media-CUdiVhEt.js +0 -1691
- package/dist/media-limits-DmcT5KnO.js +0 -14
- package/dist/media-runtime-8QR_uTs0.js +0 -295
- package/dist/media-understanding-CpMkSmKj.js +0 -51
- package/dist/media-understanding-provider-C0xVBaas.js +0 -11
- package/dist/media-understanding-provider-C8RSrdEy.js +0 -16
- package/dist/media-understanding-provider-CCB6_bwc2.js +0 -9
- package/dist/media-understanding-provider-CZ83ep6L.js +0 -16
- package/dist/media-understanding-provider-Cmcg82YY.js +0 -28
- package/dist/media-understanding-provider-D1_z5Kwx.js +0 -11
- package/dist/media-understanding-provider-DC9bhcFj.js +0 -11
- package/dist/media-understanding-provider-DbMV-bHu.js +0 -17
- package/dist/media-understanding-provider-Drg3Vyoe.js +0 -86
- package/dist/media-understanding-runtime-JIhXSD7e.js +0 -15
- package/dist/media-understanding.runtime-2Muvvak4.js +0 -7
- package/dist/media-understanding.runtime.js +0 -1
- package/dist/memory-DPYsR3Cn.js +0 -228
- package/dist/memory-core-engine-runtime-DP_nzKMm.js +0 -14
- package/dist/memory-core-host-engine-embeddings-BhsmnP-6.js +0 -1370
- package/dist/memory-core-host-engine-foundation-CtFD8jpc.js +0 -10
- package/dist/memory-core-host-engine-qmd-DCvmid82.js +0 -375
- package/dist/memory-core-host-engine-storage-N3YflxjF.js +0 -109
- package/dist/memory-core-host-multimodal-BVd6eEE3.js +0 -1
- package/dist/memory-core-host-query-Bxzu0mAD.js +0 -2
- package/dist/memory-core-host-runtime-cli-nz5fxbbn.js +0 -10
- package/dist/memory-core-host-runtime-core-BcGQFQUw.js +0 -8
- package/dist/memory-core-host-runtime-files-DO5A0pY5.js +0 -3
- package/dist/memory-core-host-secret-CQAiTACg.js +0 -1
- package/dist/memory-core-host-status-0g2XexDn.js +0 -44
- package/dist/memory-embedding-providers-BOMS0u3X.js +0 -34
- package/dist/memory-lancedb-kZBcB07O.js +0 -2
- package/dist/memory-runtime-BIGGpmaC.js +0 -2
- package/dist/memory-runtime-XyiDon5w.js +0 -34
- package/dist/memory-search-CQFSugEg.js +0 -2
- package/dist/memory-search-DpAYXyjc.js +0 -202
- package/dist/memory-state-DDJh6L4-.js +0 -41
- package/dist/mention-gating-_kzByrvM.js +0 -25
- package/dist/mentions-BCBF5Klg.js +0 -65
- package/dist/mentions-BKYgZd-C.js +0 -155
- package/dist/merge-patch-CtvE2OP0.js +0 -65
- package/dist/message-Dna6Vsdg.js +0 -205
- package/dist/message-action-discovery-CPTCAl8K.js +0 -133
- package/dist/message-action-runner-Byldnjex.js +0 -1703
- package/dist/message-channel-bEWdw4ul.js +0 -105
- package/dist/message-handler-C9TRy9hy.js +0 -1771
- package/dist/message-hook-mappers-CzwFvq_c.js +0 -255
- package/dist/messages-CQT2FDZ3.js +0 -270
- package/dist/method-scopes-B6e_KuRU.js +0 -2663
- package/dist/migrate-cli-C_iDle77.js +0 -500
- package/dist/migration-snapshot.runtime-DAzTUgU-.js +0 -3
- package/dist/migration-snapshot.runtime.js +0 -1
- package/dist/mime-DkaKoCVP.js +0 -156
- package/dist/min-host-version-CIhgRq0c.js +0 -349
- package/dist/minimax-vlm-Dh6g-MLh.js +0 -512
- package/dist/model-auth-DcCyGs_6.js +0 -377
- package/dist/model-auth-env-OT6ucjoP.js +0 -63
- package/dist/model-auth-label-fGtOs2u-.js +0 -45
- package/dist/model-auth-markers-D2z_AIuC.js +0 -70
- package/dist/model-auth-runtime-shared-DnhseQ_3.js +0 -18
- package/dist/model-buttons-zQ-cRhqo.js +0 -187
- package/dist/model-catalog-f9zO4b6C.js +0 -208
- package/dist/model-catalog.runtime-iRu_OMJS.js +0 -2
- package/dist/model-catalog.runtime.js +0 -1
- package/dist/model-definitions-BGWurJeM.js +0 -49
- package/dist/model-definitions-C-e07VgA.js +0 -255
- package/dist/model-definitions-DUANiLUG.js +0 -126
- package/dist/model-definitions-DrxdjAkB.js +0 -202
- package/dist/model-id-9W_sHLHy.js +0 -12
- package/dist/model-id-DEv7HEyl.js +0 -20
- package/dist/model-input-DwbpFRYm.js +0 -20
- package/dist/model-overrides-BaecXmMv.js +0 -84
- package/dist/model-overrides-UUODi1G1.js +0 -91
- package/dist/model-param-b-BHlbSl5R.js +0 -15
- package/dist/model-picker-BgVMnja3.js +0 -439
- package/dist/model-picker-D8elZqN_.js +0 -3
- package/dist/model-picker.runtime-BUfgRpvT.js +0 -15
- package/dist/model-picker.runtime.js +0 -1
- package/dist/model-runtime-CkjgxQmB.js +0 -1772
- package/dist/model-selection-DXY5nwui.js +0 -407
- package/dist/model-selection-Dx6Ag-ZE.js +0 -505
- package/dist/model-suppression-C8XSEnsv.js +0 -24
- package/dist/model-suppression.runtime-Dqra9AAF.js +0 -7
- package/dist/model-suppression.runtime.js +0 -1
- package/dist/models--Ze_o5z6.js +0 -193
- package/dist/models-7_w_ynp7.js +0 -35
- package/dist/models-BMmB_oQc.js +0 -130
- package/dist/models-B_TKM4gG.js +0 -18
- package/dist/models-B_UROL5b.js +0 -3
- package/dist/models-BmDGSZCK.js +0 -31
- package/dist/models-BywIyTzh.js +0 -126
- package/dist/models-C5GB-E7D.js +0 -154
- package/dist/models-DU3Lv10g.js +0 -754
- package/dist/models-VgpjMiqM.js +0 -138
- package/dist/models-_DZVZ2Na.js +0 -18
- package/dist/models-bBe0FFJe.js +0 -2550
- package/dist/models-cli-kZR11PgM.js +0 -197
- package/dist/models-config-D6j7jkCN.js +0 -2
- package/dist/models-config-lYKxSxLo.js +0 -1106
- package/dist/models-config.runtime-D2tdVUsi.js +0 -2
- package/dist/models-config.runtime.js +0 -1
- package/dist/models-emJUoDsF.js +0 -40
- package/dist/models-gPCm0Fco.js +0 -122
- package/dist/models-mi7nu17U.js +0 -99
- package/dist/models-nUP9ZPV8.js +0 -552
- package/dist/models-provider-runtime-DfIZ0cvV.js +0 -2
- package/dist/monitor-BEjwRY59.js +0 -3622
- package/dist/monitor-BiwufaF7.js +0 -718
- package/dist/monitor-BqwlHm94.js +0 -3660
- package/dist/monitor-Cj6Atk8I.js +0 -676
- package/dist/monitor-D2qBnOYz.js +0 -666
- package/dist/monitor-DZmBV1Nj2.js +0 -2
- package/dist/monitor-RMoB6sGQ.js +0 -4067
- package/dist/monitor-auth-EvlH1zbN.js +0 -192
- package/dist/monitor-lbUydC5_.js +0 -1525
- package/dist/monitor-polling.runtime-O6ZG6yYv.js +0 -307
- package/dist/monitor-polling.runtime.js +0 -1
- package/dist/monitor-provider-x4TUmYNN.js +0 -1782
- package/dist/monitor-vE0skDM1.js +0 -687
- package/dist/monitor-webhook.runtime-DoTv_oZv.js +0 -297
- package/dist/monitor-webhook.runtime.js +0 -1
- package/dist/moonshot-stream-wrappers-Csssd6kW.js +0 -24
- package/dist/moonshot-thinking-stream-wrappers-D3j6Q9Yk.js +0 -69
- package/dist/msteams-DsFLaFEV.js +0 -33
- package/dist/multimodal-DoXQtvBl.js +0 -66
- package/dist/mutable-allowlist-detectors-CbFK2eTK.js +0 -62
- package/dist/native-command-registry-B4BAqmAW.js +0 -2
- package/dist/native-command-session-targets-DfUCBY63.js +0 -10
- package/dist/net-DjzoSxQo.js +0 -265
- package/dist/network-discovery-display-h8MqTMCI.js +0 -48
- package/dist/network-mode-QjJNOXMa.js +0 -17
- package/dist/nextcloud-talk-COZ5YrPY.js +0 -18
- package/dist/node-cli-z8LHYl1w.js +0 -2323
- package/dist/node-command-policy-DoeXKD1V.js +0 -205
- package/dist/node-commands-ycnRypMq.js +0 -11
- package/dist/node-require-BgDD9bTi.js +0 -14
- package/dist/node-resolve-Drr1RIcN.js +0 -110
- package/dist/node-service-Nyf8eLc4.js +0 -68
- package/dist/node-startup-env-CVMjxAUF.js +0 -50
- package/dist/nodes-cli-BMyafV_R.js +0 -1044
- package/dist/nodes-screen-oyGHNlY5.js +0 -219
- package/dist/nodes.helpers-DKBA9twS.js +0 -203
- package/dist/normalize-C46CugdT.js +0 -35
- package/dist/normalize-reply-VrMa_PA2.js +0 -500
- package/dist/normalize-secret-input-CC9iFcnK.js +0 -32
- package/dist/nostr-DGfd-Skj.js +0 -19
- package/dist/note-B5R9zt2K.js +0 -109
- package/dist/notify-CKEt6MKY.js +0 -298
- package/dist/npm-registry-spec-dWUFCqDk.js +0 -100
- package/dist/oauth-BBIy_OBl.js +0 -152
- package/dist/oauth-DzMUt9ZO.js +0 -56
- package/dist/oauth.credentials-CKrXIXPf.js +0 -119
- package/dist/oauth.flow-Dd6MZcHS.js +0 -122
- package/dist/oauth.http-CZlbXoZD.js +0 -23
- package/dist/oauth.project-DAVNbct7.js +0 -125
- package/dist/oauth.shared-D1_wwlyt.js +0 -26
- package/dist/oauth.token-CnB-w_v2.js +0 -42
- package/dist/ollama-EE_SvO8P.js +0 -26
- package/dist/onboard-2otvb4-n.js +0 -307
- package/dist/onboard-72nGEzpd.js +0 -25
- package/dist/onboard-B14oDS4M.js +0 -23
- package/dist/onboard-BH5hcOyK.js +0 -39
- package/dist/onboard-BRkQIFt_.js +0 -25
- package/dist/onboard-BSArlkkq.js +0 -73
- package/dist/onboard-Bau_HSmO.js +0 -36
- package/dist/onboard-BsqpQhXj.js +0 -591
- package/dist/onboard-CBa7u1iZ.js +0 -25
- package/dist/onboard-CLKZrJow.js +0 -29
- package/dist/onboard-COaMJ5wS.js +0 -28
- package/dist/onboard-CbTQZti9.js +0 -48
- package/dist/onboard-Ce3rcBNR.js +0 -29
- package/dist/onboard-CiMzgSvO.js +0 -67
- package/dist/onboard-DNuWjUOg.js +0 -17
- package/dist/onboard-DY3JtOcX.js +0 -47
- package/dist/onboard-Dd_eFJ7g.js +0 -25
- package/dist/onboard-DgMI-C3P.js +0 -24
- package/dist/onboard-Dj3Kkl9C.js +0 -49
- package/dist/onboard-Djne8OY8.js +0 -34
- package/dist/onboard-DnNU28xK.js +0 -48
- package/dist/onboard-MFS79j1I.js +0 -23
- package/dist/onboard-REHqRyQm.js +0 -26
- package/dist/onboard-VVnzyvuh.js +0 -46
- package/dist/onboard-channels-B8UocRdo.js +0 -705
- package/dist/onboard-channels-Ci5QQyQ0.js +0 -2
- package/dist/onboard-config-7edS4yYd.js +0 -2
- package/dist/onboard-config-C-6p2HNL.js +0 -29
- package/dist/onboard-custom-BREC7K0s.js +0 -2
- package/dist/onboard-custom-D7oXiV6u.js +0 -646
- package/dist/onboard-helpers-BCIfy96O.js +0 -4
- package/dist/onboard-helpers-CLedS83g.js +0 -227
- package/dist/onboard-hooks-DW0gav3i.js +0 -52
- package/dist/onboard-lh38uUOa.js +0 -25
- package/dist/onboard-rH_HA9v-.js +0 -34
- package/dist/onboard-remote-DG5Rb2y7.js +0 -2
- package/dist/onboard-remote-DgDwHLCW.js +0 -193
- package/dist/onboard-search-Bz78SAON.js +0 -339
- package/dist/onboard-skills-BK1iF6NI.js +0 -2
- package/dist/onboard-skills-Cfs4Gz-d.js +0 -134
- package/dist/openai-B3atWWiZ.js +0 -21
- package/dist/openai-codex-auth-identity-blYgqX5I.js +0 -40
- package/dist/openai-codex-catalog-DQoW5ntP.js +0 -11
- package/dist/openai-codex-provider-BeX3_fQL.js +0 -254
- package/dist/openai-provider-DfSRc815.js +0 -272
- package/dist/openai-stream-wrappers-Cmn9nSYj.js +0 -338
- package/dist/openclaw-exec-env-DnTrPIdx.js +0 -17
- package/dist/openclaw-root-F1SOdmJ0.js +0 -88
- package/dist/openclaw-tools.runtime-Dx73yE1V.js +0 -2
- package/dist/openclaw-tools.runtime.js +0 -1
- package/dist/operator-approvals-client-NQtGN5k_.js +0 -33
- package/dist/order-DNBhjW6F.js +0 -744
- package/dist/origin-routing-BC2EzQqM.js +0 -15
- package/dist/origin-routing-BVUTLJGu.js +0 -2
- package/dist/os-summary-CdlXkpL1.js +0 -26
- package/dist/outbound-adapter-D6WGzS7P.js +0 -183
- package/dist/outbound-ek4CqhT2.js +0 -2
- package/dist/outbound-hgMEZIU9.js +0 -2739
- package/dist/outbound-media-B2ZrkOxl.js +0 -15
- package/dist/outbound-runtime-CtDmQy3z.js +0 -2
- package/dist/outbound-send-deps-COPf3lwV.js +0 -7
- package/dist/outbound-session-DHKvttsz.js +0 -41
- package/dist/pairing-challenge-O7jo1Q5R.js +0 -33
- package/dist/pairing-cli-BEUxC5EH.js +0 -116
- package/dist/pairing-labels-Cj1fFxG9.js +0 -7
- package/dist/pairing-message-FaqHPEFk.js +0 -4
- package/dist/pairing-messages-DxLpe0GE.js +0 -23
- package/dist/pairing-pending-DGyUpmjC.js +0 -14
- package/dist/pairing-store-B171dUVa.js +0 -617
- package/dist/pairing-token-CnyXOU__.js +0 -88
- package/dist/param-readers-CqAoT2n2.js +0 -2
- package/dist/parse-duration-D9q1V0xx.js +0 -41
- package/dist/parse-finite-number-CzdLC_gQ.js +0 -30
- package/dist/parse-json-compat-DfjRYtKX.js +0 -11
- package/dist/parse-log-line-Cd0JHPGg.js +0 -43
- package/dist/parse-port-BFmNhrtE.js +0 -8
- package/dist/parse-timeout-bktz0495.js +0 -27
- package/dist/path-alias-guards-BeOn9PZR.js +0 -40
- package/dist/path-env-C2F1kvna.js +0 -87
- package/dist/path-safety-2mfHCe0n.js +0 -12
- package/dist/paths-Bw8Ci57u.js +0 -2
- package/dist/paths-GWMNxnBn.js +0 -201
- package/dist/paths-xpks599B.js +0 -180
- package/dist/payload-S8niBCaz.js +0 -90
- package/dist/pdf-extract-Cm83kt2M.js +0 -73
- package/dist/perplexity-web-search-provider-Cgr2BYVk.js +0 -423
- package/dist/persistent-bindings.lifecycle-CAOm8v8I.js +0 -159
- package/dist/persistent-dedupe-DoNHVMWs.js +0 -116
- package/dist/pi-embedded-DEAtCIdT.js +0 -40616
- package/dist/pi-embedded-helpers-BVjvCsor.js +0 -1733
- package/dist/pi-embedded.runtime-Ctj3QFs-.js +0 -4
- package/dist/pi-embedded.runtime.js +0 -1
- package/dist/pi-model-discovery-KjI5xf8m.js +0 -188
- package/dist/pi-settings-BJzoHYF9.js +0 -57
- package/dist/pi-tools.before-tool-call.runtime-DJ6s0GDV.js +0 -354
- package/dist/pi-tools.before-tool-call.runtime.js +0 -1
- package/dist/plugin-auto-enable-BZvicayR.js +0 -400
- package/dist/plugin-entry-D0vhddM4.js +0 -25
- package/dist/plugin-entry.runtime-Xd644UDA.js +0 -112
- package/dist/plugin-entry.runtime.js +0 -1
- package/dist/plugin-error-boundary-RI4ByQoA.js +0 -55
- package/dist/plugin-error-handler-DWUTf_UF.js +0 -109
- package/dist/plugin-health-checker-2c6LyJwr.js +0 -125
- package/dist/plugin-hot-reload-CA3__dZN.js +0 -215
- package/dist/plugin-install-BjVLwj7-.js +0 -230
- package/dist/plugin-install-CjwMt13j.js +0 -2
- package/dist/plugin-install-config-policy-MApev-w-.js +0 -93
- package/dist/plugin-install-path-warnings-BkBH-k4n.js +0 -40
- package/dist/plugin-install-plan-0fWhyVBN.js +0 -50
- package/dist/plugin-registry-CORVyKHv.js +0 -74
- package/dist/plugin-registry-Dl1iIh7W.js +0 -2
- package/dist/plugin-runtime-Dd1YN95W.js +0 -6
- package/dist/plugin-sdk/account-core.js +0 -8
- package/dist/plugin-sdk/account-helpers.js +0 -4
- package/dist/plugin-sdk/account-id.js +0 -3
- package/dist/plugin-sdk/account-resolution.js +0 -12
- package/dist/plugin-sdk/acp-runtime.js +0 -3
- package/dist/plugin-sdk/agent-config-primitives.js +0 -3
- package/dist/plugin-sdk/agent-runtime.js +0 -29
- package/dist/plugin-sdk/allow-from.js +0 -5
- package/dist/plugin-sdk/allowlist-config-edit.js +0 -2
- package/dist/plugin-sdk/amazon-bedrock.js +0 -15
- package/dist/plugin-sdk/anthropic-vertex.js +0 -2
- package/dist/plugin-sdk/approval-runtime.js +0 -8
- package/dist/plugin-sdk/bluebubbles-policy.js +0 -2
- package/dist/plugin-sdk/bluebubbles.js +0 -39
- package/dist/plugin-sdk/boolean-param.js +0 -2
- package/dist/plugin-sdk/browser-runtime.js +0 -3
- package/dist/plugin-sdk/browser-support.js +0 -44
- package/dist/plugin-sdk/browser.js +0 -15
- package/dist/plugin-sdk/byteplus.js +0 -17
- package/dist/plugin-sdk/channel-actions.js +0 -3
- package/dist/plugin-sdk/channel-config-helpers.js +0 -2
- package/dist/plugin-sdk/channel-config-primitives.js +0 -4
- package/dist/plugin-sdk/channel-config-schema.js +0 -7
- package/dist/plugin-sdk/channel-config-writes.js +0 -3
- package/dist/plugin-sdk/channel-contract.js +0 -1
- package/dist/plugin-sdk/channel-feedback.js +0 -5
- package/dist/plugin-sdk/channel-inbound.js +0 -10
- package/dist/plugin-sdk/channel-lifecycle.js +0 -3
- package/dist/plugin-sdk/channel-pairing.js +0 -2
- package/dist/plugin-sdk/channel-policy.js +0 -6
- package/dist/plugin-sdk/channel-reply-pipeline.js +0 -2
- package/dist/plugin-sdk/channel-runtime.js +0 -16
- package/dist/plugin-sdk/channel-send-result.js +0 -2
- package/dist/plugin-sdk/channel-setup.js +0 -5
- package/dist/plugin-sdk/channel-status.js +0 -5
- package/dist/plugin-sdk/channel-targets.js +0 -5
- package/dist/plugin-sdk/chutes.js +0 -20
- package/dist/plugin-sdk/cli-backend.js +0 -3
- package/dist/plugin-sdk/cli-runtime.js +0 -7
- package/dist/plugin-sdk/cloudflare-ai-gateway.js +0 -18
- package/dist/plugin-sdk/collection-runtime.js +0 -3
- package/dist/plugin-sdk/command-auth-native.js +0 -6
- package/dist/plugin-sdk/command-auth.js +0 -14
- package/dist/plugin-sdk/command-detection.js +0 -3
- package/dist/plugin-sdk/command-surface.js +0 -3
- package/dist/plugin-sdk/compat.js +0 -35
- package/dist/plugin-sdk/config-runtime.js +0 -25
- package/dist/plugin-sdk/conversation-runtime.js +0 -15
- package/dist/plugin-sdk/core.js +0 -22
- package/dist/plugin-sdk/dangerous-name-runtime.js +0 -3
- package/dist/plugin-sdk/deepseek.js +0 -14
- package/dist/plugin-sdk/device-bootstrap.js +0 -4
- package/dist/plugin-sdk/diagnostic-runtime.js +0 -4
- package/dist/plugin-sdk/diagnostics-otel.js +0 -6
- package/dist/plugin-sdk/diffs.js +0 -4
- package/dist/plugin-sdk/direct-dm.js +0 -2
- package/dist/plugin-sdk/directory-runtime.js +0 -5
- package/dist/plugin-sdk/discord-account.js +0 -2
- package/dist/plugin-sdk/discord-core.js +0 -9
- package/dist/plugin-sdk/discord-runtime-surface.js +0 -2
- package/dist/plugin-sdk/discord-session-key.js +0 -2
- package/dist/plugin-sdk/discord-surface.js +0 -2
- package/dist/plugin-sdk/discord-thread-bindings.js +0 -2
- package/dist/plugin-sdk/discord-timeouts.js +0 -2
- package/dist/plugin-sdk/discord.js +0 -21
- package/dist/plugin-sdk/error-runtime.js +0 -3
- package/dist/plugin-sdk/extension-shared.js +0 -3
- package/dist/plugin-sdk/feishu-conversation.js +0 -2
- package/dist/plugin-sdk/feishu-setup.js +0 -2
- package/dist/plugin-sdk/feishu.js +0 -34
- package/dist/plugin-sdk/fetch-runtime.js +0 -7
- package/dist/plugin-sdk/file-lock.js +0 -2
- package/dist/plugin-sdk/gateway-runtime.js +0 -4
- package/dist/plugin-sdk/github-copilot-login.js +0 -2
- package/dist/plugin-sdk/github-copilot-token.js +0 -3
- package/dist/plugin-sdk/global-singleton.js +0 -4
- package/dist/plugin-sdk/google.js +0 -2
- package/dist/plugin-sdk/googlechat.js +0 -38
- package/dist/plugin-sdk/group-access.js +0 -2
- package/dist/plugin-sdk/hook-runtime.js +0 -4
- package/dist/plugin-sdk/host-runtime.js +0 -4
- package/dist/plugin-sdk/huggingface.js +0 -18
- package/dist/plugin-sdk/image-generation-core.js +0 -63
- package/dist/plugin-sdk/image-generation.js +0 -2
- package/dist/plugin-sdk/index.js +0 -5
- package/dist/plugin-sdk/infra-runtime.js +0 -45
- package/dist/plugin-sdk/interactive-runtime.js +0 -4
- package/dist/plugin-sdk/irc-surface.js +0 -2
- package/dist/plugin-sdk/irc.js +0 -30
- package/dist/plugin-sdk/json-store.js +0 -3
- package/dist/plugin-sdk/keyed-async-queue.js +0 -2
- package/dist/plugin-sdk/kilocode.js +0 -23
- package/dist/plugin-sdk/kimi-coding.js +0 -11
- package/dist/plugin-sdk/lazy-runtime.js +0 -3
- package/dist/plugin-sdk/line-core.js +0 -6
- package/dist/plugin-sdk/line-runtime.js +0 -2
- package/dist/plugin-sdk/line-surface.js +0 -2
- package/dist/plugin-sdk/line.js +0 -9
- package/dist/plugin-sdk/llm-task.js +0 -6
- package/dist/plugin-sdk/logging-core.js +0 -5
- package/dist/plugin-sdk/markdown-table-runtime.js +0 -3
- package/dist/plugin-sdk/matrix-helper.js +0 -2
- package/dist/plugin-sdk/matrix-runtime-heavy.js +0 -5
- package/dist/plugin-sdk/matrix-runtime-shared.js +0 -3
- package/dist/plugin-sdk/matrix-runtime-surface.js +0 -2
- package/dist/plugin-sdk/matrix-surface.js +0 -2
- package/dist/plugin-sdk/matrix-thread-bindings.js +0 -2
- package/dist/plugin-sdk/matrix.js +0 -53
- package/dist/plugin-sdk/mattermost-policy.js +0 -11
- package/dist/plugin-sdk/mattermost.js +0 -41
- package/dist/plugin-sdk/media-runtime.js +0 -17
- package/dist/plugin-sdk/media-understanding-runtime.js +0 -2
- package/dist/plugin-sdk/media-understanding.js +0 -3
- package/dist/plugin-sdk/memory-core-engine-runtime.js +0 -2
- package/dist/plugin-sdk/memory-core-host-engine-embeddings.js +0 -6
- package/dist/plugin-sdk/memory-core-host-engine-foundation.js +0 -17
- package/dist/plugin-sdk/memory-core-host-engine-qmd.js +0 -3
- package/dist/plugin-sdk/memory-core-host-engine-storage.js +0 -4
- package/dist/plugin-sdk/memory-core-host-multimodal.js +0 -3
- package/dist/plugin-sdk/memory-core-host-query.js +0 -3
- package/dist/plugin-sdk/memory-core-host-runtime-cli.js +0 -12
- package/dist/plugin-sdk/memory-core-host-runtime-core.js +0 -14
- package/dist/plugin-sdk/memory-core-host-runtime-files.js +0 -4
- package/dist/plugin-sdk/memory-core-host-secret.js +0 -3
- package/dist/plugin-sdk/memory-core-host-status.js +0 -2
- package/dist/plugin-sdk/memory-core.js +0 -29
- package/dist/plugin-sdk/memory-lancedb.js +0 -4
- package/dist/plugin-sdk/minimax.js +0 -24
- package/dist/plugin-sdk/mistral.js +0 -17
- package/dist/plugin-sdk/models-provider-runtime.js +0 -3
- package/dist/plugin-sdk/modelstudio-definitions.js +0 -19
- package/dist/plugin-sdk/modelstudio.js +0 -24
- package/dist/plugin-sdk/moonshot.js +0 -17
- package/dist/plugin-sdk/msteams.js +0 -46
- package/dist/plugin-sdk/native-command-registry.js +0 -3
- package/dist/plugin-sdk/nextcloud-talk.js +0 -35
- package/dist/plugin-sdk/nostr.js +0 -14
- package/dist/plugin-sdk/nvidia.js +0 -11
- package/dist/plugin-sdk/ollama-surface.js +0 -24
- package/dist/plugin-sdk/ollama.js +0 -2
- package/dist/plugin-sdk/openai.js +0 -2
- package/dist/plugin-sdk/opencode-go.js +0 -14
- package/dist/plugin-sdk/opencode.js +0 -15
- package/dist/plugin-sdk/outbound-runtime.js +0 -5
- package/dist/plugin-sdk/param-readers.js +0 -3
- package/dist/plugin-sdk/plugin-entry.js +0 -3
- package/dist/plugin-sdk/plugin-runtime.js +0 -8
- package/dist/plugin-sdk/process-runtime.js +0 -3
- package/dist/plugin-sdk/provider-auth-api-key.js +0 -9
- package/dist/plugin-sdk/provider-auth-login.js +0 -2
- package/dist/plugin-sdk/provider-auth-result.js +0 -2
- package/dist/plugin-sdk/provider-auth-runtime.js +0 -5
- package/dist/plugin-sdk/provider-auth.js +0 -17
- package/dist/plugin-sdk/provider-catalog-shared.js +0 -2
- package/dist/plugin-sdk/provider-entry.js +0 -2
- package/dist/plugin-sdk/provider-env-vars.js +0 -3
- package/dist/plugin-sdk/provider-http.js +0 -6
- package/dist/plugin-sdk/provider-model-shared.js +0 -5
- package/dist/plugin-sdk/provider-moonshot.js +0 -3
- package/dist/plugin-sdk/provider-onboard.js +0 -3
- package/dist/plugin-sdk/provider-setup.js +0 -3
- package/dist/plugin-sdk/provider-stream.js +0 -4
- package/dist/plugin-sdk/provider-tools.js +0 -2
- package/dist/plugin-sdk/provider-usage.js +0 -3
- package/dist/plugin-sdk/provider-web-fetch.js +0 -6
- package/dist/plugin-sdk/provider-web-search.js +0 -7
- package/dist/plugin-sdk/provider-zai-endpoint.js +0 -2
- package/dist/plugin-sdk/qianfan.js +0 -13
- package/dist/plugin-sdk/reply-chunking.js +0 -4
- package/dist/plugin-sdk/reply-dispatch-runtime.js +0 -5
- package/dist/plugin-sdk/reply-history.js +0 -3
- package/dist/plugin-sdk/reply-payload.js +0 -2
- package/dist/plugin-sdk/reply-runtime.js +0 -14
- package/dist/plugin-sdk/request-url.js +0 -2
- package/dist/plugin-sdk/retry-runtime.js +0 -4
- package/dist/plugin-sdk/root-alias.cjs +0 -347
- package/dist/plugin-sdk/routing.js +0 -9
- package/dist/plugin-sdk/runtime-config-snapshot.js +0 -3
- package/dist/plugin-sdk/runtime-env.js +0 -17
- package/dist/plugin-sdk/runtime-group-policy.js +0 -3
- package/dist/plugin-sdk/runtime-store.js +0 -2
- package/dist/plugin-sdk/runtime.js +0 -9
- package/dist/plugin-sdk/sandbox.js +0 -6
- package/dist/plugin-sdk/secret-input.js +0 -4
- package/dist/plugin-sdk/security-runtime.js +0 -6
- package/dist/plugin-sdk/self-hosted-provider-setup.js +0 -2
- package/dist/plugin-sdk/session-store-runtime.js +0 -4
- package/dist/plugin-sdk/setup-adapter-runtime.js +0 -3
- package/dist/plugin-sdk/setup-runtime.js +0 -6
- package/dist/plugin-sdk/setup-tools.js +0 -6
- package/dist/plugin-sdk/setup.js +0 -13
- package/dist/plugin-sdk/sglang.js +0 -15
- package/dist/plugin-sdk/signal-account.js +0 -2
- package/dist/plugin-sdk/signal-surface.js +0 -2
- package/dist/plugin-sdk/signal.js +0 -24
- package/dist/plugin-sdk/skill-commands-runtime.js +0 -3
- package/dist/plugin-sdk/slack-account.js +0 -2
- package/dist/plugin-sdk/slack-core.js +0 -7
- package/dist/plugin-sdk/slack-runtime-surface.js +0 -2
- package/dist/plugin-sdk/slack-surface.js +0 -2
- package/dist/plugin-sdk/slack-target-parser.js +0 -2
- package/dist/plugin-sdk/slack-targets.js +0 -3
- package/dist/plugin-sdk/slack.js +0 -20
- package/dist/plugin-sdk/speech-core.js +0 -4
- package/dist/plugin-sdk/speech-runtime.js +0 -2
- package/dist/plugin-sdk/speech.js +0 -5
- package/dist/plugin-sdk/ssrf-runtime.js +0 -6
- package/dist/plugin-sdk/state-paths.js +0 -3
- package/dist/plugin-sdk/status-helpers.js +0 -4
- package/dist/plugin-sdk/string-normalization-runtime.js +0 -3
- package/dist/plugin-sdk/synthetic.js +0 -17
- package/dist/plugin-sdk/telegram-account.js +0 -2
- package/dist/plugin-sdk/telegram-allow-from.js +0 -12
- package/dist/plugin-sdk/telegram-command-config.js +0 -3
- package/dist/plugin-sdk/telegram-core.js +0 -18
- package/dist/plugin-sdk/telegram-surface.js +0 -42
- package/dist/plugin-sdk/temp-path.js +0 -4
- package/dist/plugin-sdk/testing.js +0 -11
- package/dist/plugin-sdk/text-runtime.js +0 -19
- package/dist/plugin-sdk/thread-bindings-runtime.js +0 -4
- package/dist/plugin-sdk/thread-ownership.js +0 -5
- package/dist/plugin-sdk/tlon.js +0 -13
- package/dist/plugin-sdk/together.js +0 -16
- package/dist/plugin-sdk/tool-send.js +0 -2
- package/dist/plugin-sdk/twitch.js +0 -8
- package/dist/plugin-sdk/venice.js +0 -16
- package/dist/plugin-sdk/vllm.js +0 -15
- package/dist/plugin-sdk/voice-call.js +0 -7
- package/dist/plugin-sdk/volcengine.js +0 -17
- package/dist/plugin-sdk/web-media.js +0 -4
- package/dist/plugin-sdk/webhook-ingress.js +0 -9
- package/dist/plugin-sdk/webhook-path.js +0 -2
- package/dist/plugin-sdk/webhook-request-guards.js +0 -3
- package/dist/plugin-sdk/whatsapp-auth-presence.js +0 -2
- package/dist/plugin-sdk/whatsapp-core.js +0 -11
- package/dist/plugin-sdk/whatsapp-shared.js +0 -5
- package/dist/plugin-sdk/whatsapp-surface.js +0 -2
- package/dist/plugin-sdk/whatsapp-targets.js +0 -2
- package/dist/plugin-sdk/windows-spawn.js +0 -2
- package/dist/plugin-sdk/xai.js +0 -27
- package/dist/plugin-sdk/zalo-setup.js +0 -2
- package/dist/plugin-sdk/zalo.js +0 -38
- package/dist/plugin-sdk/zalouser.js +0 -29
- package/dist/plugin-sdk/zod.js +0 -3
- package/dist/plugins/build-smoke-entry.js +0 -4
- package/dist/plugins/provider-runtime.runtime.js +0 -2
- package/dist/plugins/runtime/index.js +0 -2
- package/dist/plugins/runtime/runtime-line.contract.js +0 -23
- package/dist/plugins-DcjzAZWt.js +0 -5
- package/dist/plugins-allowlist-DoZlIC4p.js +0 -14
- package/dist/plugins-cli-G6GhHHD0.js +0 -561
- package/dist/plugins-command-helpers-CIYzoC65.js +0 -116
- package/dist/plugins-install-persist-C5-bJdRb.js +0 -121
- package/dist/plugins-update-command-CsT_saJm.js +0 -974
- package/dist/plugins-w6xUzHby.js +0 -40
- package/dist/pluralkit-B_DWQnc5.js +0 -21
- package/dist/pluralkit-Bez5QVFC.js +0 -2
- package/dist/policy-D6OQdw73.js +0 -173
- package/dist/policy-DXeeH8B2.js +0 -147
- package/dist/poll-params-DTVSSuok.js +0 -52
- package/dist/polls-CMmT0F_y.js +0 -35
- package/dist/port-defaults-Dajs4Obu.js +0 -30
- package/dist/ports-DuU-A86K.js +0 -262
- package/dist/ports-ZA1n2It7.js +0 -432
- package/dist/ports-lsof-Cw_6T7ru.js +0 -25
- package/dist/ports-probe-DeuK48Pq.js +0 -14
- package/dist/preflight-audio-DTSBExi8.js +0 -48
- package/dist/preflight-audio.runtime-BJRLyBvf.js +0 -7
- package/dist/preflight-audio.runtime.js +0 -1
- package/dist/prepare-BQBndJUC.js +0 -1301
- package/dist/probe-BO4hbHvs.js +0 -435
- package/dist/probe-DPv2pfj5.js +0 -1868
- package/dist/probe-DlO2Q9rN.js +0 -170
- package/dist/probe-RbbTQOHx.js +0 -178
- package/dist/probe-auth-Bl9MHtlP.js +0 -2
- package/dist/probe-auth-CUfEH7di.js +0 -63
- package/dist/probe-eYLpFww_.js +0 -137
- package/dist/probe-kfBMuOWF.js +0 -2
- package/dist/probe-wktb4WTP.js +0 -349
- package/dist/probe.runtime-BhbUesak.js +0 -2
- package/dist/probe.runtime.js +0 -1
- package/dist/process-runtime-CBFMzhIk.js +0 -2
- package/dist/process-scoped-map-C7IoOrV-.js +0 -61
- package/dist/profile-B5n9yLlB.js +0 -2
- package/dist/profile-CmsqnPsu.js +0 -107
- package/dist/profile-update-D6f10CZk.js +0 -67
- package/dist/profile-utils-C7uzTwgJ.js +0 -15
- package/dist/profiles-BoNergZo.js +0 -79
- package/dist/program-BuKG0Ntx.js +0 -158
- package/dist/program-context-DDmlbmbl.js +0 -2
- package/dist/program-context-DQOnR5c_.js +0 -10
- package/dist/progress-DQvXYKne.js +0 -132
- package/dist/prompt-COzf5LIJ.js +0 -2
- package/dist/prompt-OSmU-o7R.js +0 -20
- package/dist/prompt-select-styled-yYL3el77.js +0 -6432
- package/dist/prompt-style-DekFM6h7.js +0 -7
- package/dist/prompts-MtRTsZpw.js +0 -9
- package/dist/prototype-keys-DrjhYNcz.js +0 -11
- package/dist/provider-BWTXmDq3.js +0 -3685
- package/dist/provider-BrmcrkEe.js +0 -70
- package/dist/provider-ByBRbhW5.js +0 -7216
- package/dist/provider-api-key-auth-BcyipSdy.js +0 -109
- package/dist/provider-api-key-auth.runtime-BRu_8L4m.js +0 -14
- package/dist/provider-api-key-auth.runtime.js +0 -1
- package/dist/provider-attribution-DMVujx9B.js +0 -285
- package/dist/provider-auth-DK2UmYsZ.js +0 -43
- package/dist/provider-auth-api-key-99KxscjW.js +0 -5
- package/dist/provider-auth-choice-GbHta8Bp.js +0 -134
- package/dist/provider-auth-choice-helpers-CO2MnSGR.js +0 -58
- package/dist/provider-auth-choice-preference-DvAqSMGK.js +0 -44
- package/dist/provider-auth-choice.runtime-B8R63sLq.js +0 -14
- package/dist/provider-auth-choice.runtime-DypTKgMQ.js +0 -2
- package/dist/provider-auth-choice.runtime.js +0 -1
- package/dist/provider-auth-choices-n-JV1XgU.js +0 -65
- package/dist/provider-auth-guidance-DAB9sGGR.js +0 -35
- package/dist/provider-auth-helpers-gmTAji1W.js +0 -92
- package/dist/provider-auth-input-GgY_tjJh.js +0 -116
- package/dist/provider-auth-login-BYbccnB1.js +0 -8
- package/dist/provider-auth-login.runtime-DnSxCwqU.js +0 -196
- package/dist/provider-auth-login.runtime.js +0 -1
- package/dist/provider-auth-mode-Dbja5LLX.js +0 -20
- package/dist/provider-auth-ref-BErMfwCd.js +0 -171
- package/dist/provider-auth-ref-DEF_hE2R.js +0 -2
- package/dist/provider-auth-result-DiUxDF1G.js +0 -31
- package/dist/provider-auth-runtime-BwMq9oMD.js +0 -32
- package/dist/provider-catalog--Qc0q0I-.js +0 -26
- package/dist/provider-catalog-A_s8JQaq.js +0 -18
- package/dist/provider-catalog-B-EcLvBI.js +0 -11
- package/dist/provider-catalog-Bte-HucL.js +0 -44
- package/dist/provider-catalog-C63Rfat7.js +0 -11
- package/dist/provider-catalog-C7q0Vb3S.js +0 -95
- package/dist/provider-catalog-CCnuf8d3.js +0 -49
- package/dist/provider-catalog-CYQ7k_Db.js +0 -48
- package/dist/provider-catalog-CnlB2mMZ.js +0 -11
- package/dist/provider-catalog-CoyAbDZX.js +0 -56
- package/dist/provider-catalog-CtqhFopw.js +0 -48
- package/dist/provider-catalog-CyGxB_aR.js +0 -18
- package/dist/provider-catalog-D1pmWiDQ.js +0 -48
- package/dist/provider-catalog-DGgsalJv.js +0 -12
- package/dist/provider-catalog-DLdTTMmW.js +0 -11
- package/dist/provider-catalog-DZzX7Vwk.js +0 -54
- package/dist/provider-catalog-J2dZciKS.js +0 -11
- package/dist/provider-catalog-LVrcrz-W.js +0 -36
- package/dist/provider-catalog-aIN0QojF.js +0 -11
- package/dist/provider-catalog-shared-Db9nbr1B.js +0 -28
- package/dist/provider-discovery.runtime-BCUAsMMz.js +0 -10
- package/dist/provider-discovery.runtime.js +0 -1
- package/dist/provider-dispatcher-COxXbow_.js +0 -22
- package/dist/provider-entry-CT_YeII_.js +0 -86
- package/dist/provider-env-vars-4Bon7Y2X.js +0 -121
- package/dist/provider-env-vars-Np7qkDjC.js +0 -2
- package/dist/provider-flow-Dlg1GcXQ.js +0 -93
- package/dist/provider-http-DQQ317hc.js +0 -3
- package/dist/provider-id-CHzLB538.js +0 -30
- package/dist/provider-model-defaults-dSPzPas0.js +0 -5
- package/dist/provider-model-primary-D8SgLcOd.js +0 -26
- package/dist/provider-model-shared-GO1WT2fY.js +0 -104
- package/dist/provider-models-BG8YwJaY.js +0 -117
- package/dist/provider-models-BVVCdM8F.js +0 -22
- package/dist/provider-models-D2UZvTo3.js +0 -46
- package/dist/provider-moonshot-Cl8urWHL.js +0 -2
- package/dist/provider-oauth-flow-Bu2gIeX6.js +0 -33
- package/dist/provider-onboard-CTEHTjfw.js +0 -264
- package/dist/provider-openai-codex-oauth-tls-DdLUDuIM.js +0 -101
- package/dist/provider-registry-Ljtt6CKE.js +0 -49
- package/dist/provider-request-config-CIrbwAnR.js +0 -209
- package/dist/provider-runtime-BBFXlsU0.js +0 -2
- package/dist/provider-runtime-D_itmv9t.js +0 -291
- package/dist/provider-runtime.runtime-B_oC992d.js +0 -26
- package/dist/provider-runtime.runtime.js +0 -1
- package/dist/provider-self-hosted-setup-BlNrSREL.js +0 -272
- package/dist/provider-session.runtime-DQyRV-t3.js +0 -7
- package/dist/provider-session.runtime.js +0 -1
- package/dist/provider-setup-CSrOyU04.js +0 -2
- package/dist/provider-stream-m5D8QZPz.js +0 -289
- package/dist/provider-tools-NuJzTqa1.js +0 -37
- package/dist/provider-usage-BB5mQ8Fg.js +0 -3
- package/dist/provider-usage-CbPs3eFQ.js +0 -2
- package/dist/provider-usage-DG1gff_M.js +0 -375
- package/dist/provider-usage.fetch-DHWQ4YZu.js +0 -633
- package/dist/provider-web-fetch-QzED2vth.js +0 -5
- package/dist/provider-web-search-CVMEZcl8.js +0 -306
- package/dist/provider-wizard-B0ocsg3q.js +0 -209
- package/dist/provider-zai-endpoint-DoIy5HQf.js +0 -116
- package/dist/provider.runtime-jHt6447e.js +0 -2
- package/dist/provider.runtime.js +0 -1
- package/dist/providers-DUy2TaM-.js +0 -59
- package/dist/providers.runtime-Bz0X8DZ2.js +0 -60
- package/dist/providers.runtime.js +0 -1
- package/dist/proxy-env-D4H9qI5l.js +0 -40
- package/dist/proxy-fetch-DiyTLcAR.js +0 -55
- package/dist/proxy-hcRRmsDd.js +0 -121
- package/dist/pw-ai-Cp64-UGh.js +0 -2037
- package/dist/qmd-manager-D2rMomsU.js +0 -1740
- package/dist/qr-cli-DuANCi-n.js +0 -2
- package/dist/qr-cli-lr5CcLr8.js +0 -367
- package/dist/qr-image-DOcoqAUw.js +0 -2
- package/dist/query-expansion-85HlYbKD.js +0 -633
- package/dist/queue-CtO0M_P1.js +0 -663
- package/dist/reaction-runtime-api-B4KmfKtJ.js +0 -114
- package/dist/reactions-5N2KSGJ2.js +0 -258
- package/dist/read-only-account-inspect-Y_ijOKJ3.js +0 -9
- package/dist/read-only-account-inspect.telegram-BSjjDWnM.js +0 -202
- package/dist/reasoning-tags-CAmbBXLr.js +0 -77
- package/dist/recovery-key-store-DqgdfMc7.js +0 -283
- package/dist/redact-BDinS1q9.js +0 -102
- package/dist/redact-identifier-S69DDJn1.js +0 -13
- package/dist/redact-sensitive-url-CAJSZ_7g.js +0 -50
- package/dist/redirect-headers-CGxONG_L.js +0 -25
- package/dist/ref-contract-CC5BLDoS.js +0 -53
- package/dist/region-BFGEM88n.js +0 -62
- package/dist/register-lazy-command-D6EEI-zz.js +0 -43
- package/dist/register.agent-D1eKwVU7.js +0 -239
- package/dist/register.backup-S8hwHpZL.js +0 -236
- package/dist/register.configure-CJrQ3u9y.js +0 -15
- package/dist/register.maintenance-BrKWl7_D.js +0 -449
- package/dist/register.message-BCWJfH2h.js +0 -642
- package/dist/register.onboard-zzNq0pJS.js +0 -79
- package/dist/register.setup-BLQwDKzc.js +0 -104
- package/dist/register.status-health-sessions-B4TUEudf.js +0 -1206
- package/dist/register.subclis-B0pG22H2.js +0 -295
- package/dist/register.subclis-BEM0mzJb.js +0 -3
- package/dist/registry-ByjnKj3u.js +0 -219
- package/dist/registry-CuFNdbH5.js +0 -60
- package/dist/registry-DvqOrcbF.js +0 -675
- package/dist/registry-mVzzlPf7.js +0 -50
- package/dist/repair-IMBZnz-L.js +0 -112
- package/dist/replies-BCoZ2HxY.js +0 -118
- package/dist/reply-D8bUQd-Q.js +0 -3176
- package/dist/reply-blocks-CjCUTZru.js +0 -103
- package/dist/reply-chunking-CxFd5izq.js +0 -3
- package/dist/reply-dispatch-runtime-Bk9RDzB9.js +0 -3
- package/dist/reply-history-DtTaPEgt.js +0 -2
- package/dist/reply-payload-CRYI4jIB.js +0 -232
- package/dist/reply-payloads-CQXH7ury.js +0 -116
- package/dist/reply-payloads-dedupe-BKObDjVe.js +0 -135
- package/dist/reply-payloads-dedupe.runtime-SbVNMvEs.js +0 -2
- package/dist/reply-payloads-dedupe.runtime.js +0 -1
- package/dist/reply-prefix-Eema_xXG.js +0 -39
- package/dist/reply-runtime-DUrpJTzu.js +0 -123
- package/dist/reply.runtime-Cdb_6NI1.js +0 -2
- package/dist/reply.runtime.js +0 -1
- package/dist/request-url-B8k-YRRH.js +0 -10
- package/dist/resolve-C3pJ2gj_.js +0 -174
- package/dist/resolve-C_pCWwC0.js +0 -619
- package/dist/resolve-allowlist-HrJ_3icS.js +0 -147
- package/dist/resolve-cbCi7mbs.js +0 -2
- package/dist/resolve-channels-BTyErRev.js +0 -226
- package/dist/resolve-channels-DvV-fUQv.js +0 -263
- package/dist/resolve-configured-secret-input-string-BasQGOd9.js +0 -112
- package/dist/resolve-route-EE8E7OAF.js +0 -486
- package/dist/resolve-system-bin-TC907QYo.js +0 -120
- package/dist/resolve-targets-B1MvBWpT.js +0 -280
- package/dist/resolve-users-BfVoBZG_.js +0 -145
- package/dist/resolve-utils-ClmKSkEQ.js +0 -102
- package/dist/response-generator-ACP21F1j.js +0 -153
- package/dist/response-prefix-template-Cp4tg6Qw.js +0 -50
- package/dist/restart-sentinel-B3EigRIb.js +0 -70
- package/dist/restart-stale-pids-dsB3eE6_.js +0 -187
- package/dist/retry-CIAqcw7C.js +0 -76
- package/dist/retry-policy-BJ5Q68It.js +0 -58
- package/dist/retry-runtime-Cbu5zDnX.js +0 -3
- package/dist/rooms-B1IyUfuR.js +0 -325
- package/dist/root-help-Bwa-vlhy.js +0 -53
- package/dist/route-reply-bC07YRDb.js +0 -133
- package/dist/route-reply.runtime-dS2XMwkv.js +0 -2
- package/dist/route-reply.runtime.js +0 -1
- package/dist/route-resolution-DQHmIfWN.js +0 -461
- package/dist/routes-CWXihJFR.js +0 -6884
- package/dist/routing-BVt9nMN-.js +0 -16
- package/dist/rpc-5eaI-FsF.js +0 -67
- package/dist/rpc-context-Dimdo4io.js +0 -155
- package/dist/run-command-2jxKF1a6.js +0 -32
- package/dist/run-main-BKeNUaXq.js +0 -425
- package/dist/run-with-concurrency-DGLkItan.js +0 -41
- package/dist/runner-COmi-bB0.js +0 -1479
- package/dist/runs-CX-70k4f.js +0 -616
- package/dist/runtime-1phb9iVo.js +0 -6
- package/dist/runtime-B8hqEtu6.js +0 -181
- package/dist/runtime-BpHrcXgA.js +0 -5
- package/dist/runtime-BscSIjIL.js +0 -126
- package/dist/runtime-C8qvwPYG.js +0 -286
- package/dist/runtime-CBX_rq4O.js +0 -18
- package/dist/runtime-CC1YDOst.js +0 -5
- package/dist/runtime-CIE7xJwu.js +0 -5
- package/dist/runtime-CNZi_czi.js +0 -42
- package/dist/runtime-CPw-0dWW.js +0 -5
- package/dist/runtime-DXdxDbJm.js +0 -102
- package/dist/runtime-DofOSZ5U.js +0 -2153
- package/dist/runtime-api-B4Zb5p1_.js +0 -2
- package/dist/runtime-api-BB2RZPnq.js +0 -2
- package/dist/runtime-api-BJnw1_pK.js +0 -2
- package/dist/runtime-api-BTf2rLCn.js +0 -2
- package/dist/runtime-api-BTgAUySz.js +0 -2
- package/dist/runtime-api-BVftCkYc.js +0 -2484
- package/dist/runtime-api-BWaVsvsK.js +0 -14
- package/dist/runtime-api-BXlE282E.js +0 -2
- package/dist/runtime-api-Ba7wWBWO.js +0 -1
- package/dist/runtime-api-BfZqvwkY.js +0 -2
- package/dist/runtime-api-Bja3afzd.js +0 -3676
- package/dist/runtime-api-C7cX3f2r.js +0 -2
- package/dist/runtime-api-CCKblcQO.js +0 -81
- package/dist/runtime-api-CEmQSooZ.js +0 -2
- package/dist/runtime-api-CWQMIahu.js +0 -241
- package/dist/runtime-api-Ch1E1gvT.js +0 -2
- package/dist/runtime-api-CjgyJEjn.js +0 -2
- package/dist/runtime-api-CuqnElJG.js +0 -3
- package/dist/runtime-api-DOyNJNHi.js +0 -2
- package/dist/runtime-api-DUbp7oPz.js +0 -2
- package/dist/runtime-api-DZDDizAj.js +0 -1
- package/dist/runtime-api-DZcQIyI0.js +0 -1
- package/dist/runtime-api-Di-XE7J4.js +0 -3
- package/dist/runtime-api-Dq7rdsm6.js +0 -2
- package/dist/runtime-api-DxO7sIvA.js +0 -120
- package/dist/runtime-api-Dzz1aWyq.js +0 -29
- package/dist/runtime-api-_dg5Me1l.js +0 -2
- package/dist/runtime-config-snapshot-DqWNFIej.js +0 -2
- package/dist/runtime-d8L2hZ57.js +0 -5
- package/dist/runtime-discord-ops.runtime-C2o0995d.js +0 -25
- package/dist/runtime-discord-ops.runtime.js +0 -1
- package/dist/runtime-embedded-pi.runtime-Bk8vHdbc.js +0 -2
- package/dist/runtime-embedded-pi.runtime.js +0 -1
- package/dist/runtime-entry-BypP0hpR.js +0 -4925
- package/dist/runtime-env-SHKgcATc.js +0 -9
- package/dist/runtime-forwarders-ev8FdVyV.js +0 -44
- package/dist/runtime-group-policy-DXJJCWpk.js +0 -1
- package/dist/runtime-group-policy-zTp8fKRK.js +0 -59
- package/dist/runtime-guard-78ESz4Qy.js +0 -70
- package/dist/runtime-kS8e4c6-.js +0 -125
- package/dist/runtime-media-understanding.runtime-CpPWzWdQ.js +0 -2
- package/dist/runtime-media-understanding.runtime.js +0 -1
- package/dist/runtime-model-auth.runtime-1Gsp1j1n.js +0 -2
- package/dist/runtime-model-auth.runtime.js +0 -1
- package/dist/runtime-parse-vvG9x7Ps.js +0 -83
- package/dist/runtime-paths-NiQSNveu.js +0 -305
- package/dist/runtime-plugin-boundary-CzRNh2jW.js +0 -65
- package/dist/runtime-schema-uKXWjWrD.js +0 -14440
- package/dist/runtime-slack-ops.runtime-MQwSRdp3.js +0 -15
- package/dist/runtime-slack-ops.runtime.js +0 -1
- package/dist/runtime-status-2omGgKaM.js +0 -109
- package/dist/runtime-status-Cc383GkB.js +0 -15
- package/dist/runtime-store-CT3yRBe_.js +0 -22
- package/dist/runtime-tts.runtime-DTfPYn3H.js +0 -2
- package/dist/runtime-tts.runtime.js +0 -1
- package/dist/runtime-uvckmk15.js +0 -68
- package/dist/runtime-web-tools-Cf6BXnCm.js +0 -2042
- package/dist/runtime-whatsapp-boundary-Bs8RrKxP.js +0 -139
- package/dist/runtime-whatsapp-boundary-C5mx67ac.js +0 -2
- package/dist/safe-regex-tLlDZYfM.js +0 -244
- package/dist/safe-text-DhIQbZid.js +0 -16
- package/dist/sandbox-DkZ4-LBj.js +0 -4
- package/dist/sandbox-cli-Cho_k3dA.js +0 -443
- package/dist/sandbox-f4-hZNCj.js +0 -2710
- package/dist/sandbox-paths-Br54mtAJ.js +0 -146
- package/dist/sanitize-env-vars-BpNLWkzd.js +0 -82
- package/dist/scan-paths-Bln7l19-.js +0 -28
- package/dist/schema-validator-DofqBvJi.js +0 -176
- package/dist/scoped-expiring-id-cache-C8wyKEV-.js +0 -35
- package/dist/scp-host-B9NPcVwn.js +0 -62
- package/dist/sdk-Ba91_ru8.js +0 -1108
- package/dist/searxng-search-provider-CUEJoeaQ.js +0 -220
- package/dist/secret-equal-fMR1DjSl.js +0 -9
- package/dist/secret-file-BNKBIds0.js +0 -11
- package/dist/secret-file-DwDmPLSX.js +0 -92
- package/dist/secret-input-4MqmO__N.js +0 -13
- package/dist/secret-input-Bqf5ho4v.js +0 -38
- package/dist/secret-input-DyzcNLLY.js +0 -2
- package/dist/secrets-cli-DAP4hi4r.js +0 -2112
- package/dist/secure-random-Diy9rj1m.js +0 -20
- package/dist/security-cli-2WQVKZ3w.js +0 -477
- package/dist/security-runtime-BSQDlFPi.js +0 -55
- package/dist/semver-compare-DkYCMcwG.js +0 -53
- package/dist/send--GwzHbbI.js +0 -100
- package/dist/send-4ZItW1GB.js +0 -3
- package/dist/send-B1YVZR_q.js +0 -1076
- package/dist/send-B6AgLKhw.js +0 -178
- package/dist/send-CAosrV3E.js +0 -2
- package/dist/send-CTHiX-WN.js +0 -442
- package/dist/send-CywIIzow.js +0 -318
- package/dist/send-DZ2VaVTD.js +0 -856
- package/dist/send-deps-Cuc-dTy5.js +0 -19
- package/dist/send-policy-Dz5lteoO.js +0 -60
- package/dist/send-q09VUMe3.js +0 -532
- package/dist/send.components-Cbi5ixnJ.js +0 -844
- package/dist/send.components-dLe6ppiS.js +0 -2
- package/dist/server-BRW1HQ2M.js +0 -67
- package/dist/server-Clq20rV8.js +0 -27990
- package/dist/server-middleware-Ubw3OFd1.js +0 -108
- package/dist/server-node-events-kgWhdE2I.js +0 -454
- package/dist/server-startup-matrix-migration-DJZgJiUa.js +0 -1348
- package/dist/service-2O78fADl.js +0 -867
- package/dist/service-BCUDr0mF.js +0 -2
- package/dist/session-BIwHn1FL.js +0 -137
- package/dist/session-BJudz6Rb.js +0 -50
- package/dist/session-archive.runtime-8FrIp7MP.js +0 -2
- package/dist/session-archive.runtime.js +0 -1
- package/dist/session-binding-service-D7bUc7mS.js +0 -421
- package/dist/session-context-DbS6R7x0.js +0 -23
- package/dist/session-conversation-5Z-WApq_.js +0 -15
- package/dist/session-conversation-BC-SPGma.js +0 -135
- package/dist/session-conversation-D-Olnomz.js +0 -27
- package/dist/session-cost-usage-5iS5N1Rs.js +0 -651
- package/dist/session-cost-usage-ibiGeH7Z.js +0 -2
- package/dist/session-envelope-RE_1D3fZ.js +0 -18
- package/dist/session-errors-CoC2qhLC.js +0 -63
- package/dist/session-file-CnTnoAyl.js +0 -120
- package/dist/session-fork.runtime-Bb9nNLwX.js +0 -50
- package/dist/session-fork.runtime.js +0 -1
- package/dist/session-hooks-D4zcaOKV.js +0 -109
- package/dist/session-key-CQMUjsSp.js +0 -52
- package/dist/session-key-Do__tq1E.js +0 -279
- package/dist/session-key-normalization-BamCBtxj.js +0 -22
- package/dist/session-override-CHm5auQy.js +0 -100
- package/dist/session-reset-model.runtime-DD5SooaH.js +0 -119
- package/dist/session-reset-model.runtime.js +0 -1
- package/dist/session-route-O1Pb7Oid.js +0 -91
- package/dist/session-store-runtime-ePmbOWO1.js +0 -2
- package/dist/session-subagent-reactivation.runtime-BwUDVflj.js +0 -2
- package/dist/session-subagent-reactivation.runtime.js +0 -1
- package/dist/session-transcript-files.fs-CyBs2u56.js +0 -149
- package/dist/session-updates-C33bkLCm.js +0 -222
- package/dist/session-updates.runtime-BHLQJ71D.js +0 -2
- package/dist/session-updates.runtime.js +0 -1
- package/dist/session-utils-C0HJP9m_.js +0 -1743
- package/dist/session-write-lock-C7svKLqX.js +0 -343
- package/dist/sessions-CkaONOVi.js +0 -224
- package/dist/sessions-Dqj9fL_x.js +0 -2
- package/dist/sessions-j2hbBGOS.js +0 -443
- package/dist/setup-0GrDtpRN.js +0 -427
- package/dist/setup-BrOJEPVN.js +0 -15
- package/dist/setup-adapter-runtime-CyIIvoms.js +0 -2
- package/dist/setup-api-1P88M5pV.js +0 -2
- package/dist/setup-binary-CXmsVXWb.js +0 -2
- package/dist/setup-bootstrap-QdrIAyis.js +0 -54
- package/dist/setup-core-BqPbreVF.js +0 -256
- package/dist/setup-core-CFzSqpD7.js +0 -256
- package/dist/setup-core-DJHWTJKX.js +0 -383
- package/dist/setup-core-DT1fK9yD.js +0 -146
- package/dist/setup-core-kjYyNYvv.js +0 -48
- package/dist/setup-core-t03VZdcn.js +0 -160
- package/dist/setup-group-access-BQbnTk8B.js +0 -70
- package/dist/setup-helpers-0yWIq2cW.js +0 -390
- package/dist/setup-runtime-BChXvJOO.js +0 -4
- package/dist/setup-surface-B8loJ-nJ.js +0 -272
- package/dist/setup-surface-BKizDP2g.js +0 -237
- package/dist/setup-surface-BOd4V0w5.js +0 -261
- package/dist/setup-surface-BaLQtvFW.js +0 -353
- package/dist/setup-surface-Bha7U86Z.js +0 -72
- package/dist/setup-surface-BkHkduRm.js +0 -450
- package/dist/setup-surface-CDfudYpT2.js +0 -261
- package/dist/setup-surface-CT-Erp53.js +0 -346
- package/dist/setup-surface-Co1jSLDk.js +0 -656
- package/dist/setup-surface-D0joW4q1.js +0 -333
- package/dist/setup-surface-D9rWJb4Z.js +0 -1447
- package/dist/setup-surface-D_CJfyJ1.js +0 -381
- package/dist/setup-surface-DbVJ8CAj.js +0 -484
- package/dist/setup-surface-Di1q12ha.js +0 -97
- package/dist/setup-surface-LWupQ_eL.js +0 -304
- package/dist/setup-tools-Cb6PLN3L.js +0 -4
- package/dist/setup-wizard-helpers-CA5yiprq.js +0 -841
- package/dist/setup-wizard-proxy-bmMo6OPA.js +0 -127
- package/dist/setup.finalize-DvGlwfbU.js +0 -443
- package/dist/setup.gateway-config-D_eSo_Jz.js +0 -246
- package/dist/setup.secret-input-BAQnay16.js +0 -25
- package/dist/shared-1nXP7RAM.js +0 -78
- package/dist/shared-6u4-kP5J.js +0 -221
- package/dist/shared-BnSR7joQ.js +0 -144
- package/dist/shared-BsLpgVLV.js +0 -37
- package/dist/shared-C-PSF7Rv.js +0 -64
- package/dist/shared-C1MrVu4M.js +0 -180
- package/dist/shared-CA8QQ_O5.js +0 -94
- package/dist/shared-CCV62W5K.js +0 -2
- package/dist/shared-CHJjz6Zz.js +0 -72
- package/dist/shared-CK49TKED.js +0 -50
- package/dist/shared-CL7I4ij0.js +0 -160
- package/dist/shared-Cr7ijuS4.js +0 -198
- package/dist/shared-D61IX915.js +0 -10
- package/dist/shared-Dr9OQu4c.js +0 -64
- package/dist/shared-DwxV-O-g.js +0 -136
- package/dist/shared-dWHdeoyy.js +0 -126
- package/dist/shared-runtime-yV5uP0IO.js +0 -7
- package/dist/shell-argv-B9p91CMW.js +0 -72
- package/dist/shell-env-BTztt4a1.js +0 -181
- package/dist/signal-B1kD3iF3.js +0 -46
- package/dist/signal-DP8FUJOa.js +0 -6
- package/dist/signal-Dvmeol77.js +0 -13
- package/dist/signal-account-CYKnyxZK.js +0 -11
- package/dist/signal-cli-install-DcmsRDbB.js +0 -188
- package/dist/signal-surface-AbofIH7s.js +0 -21
- package/dist/simple-completion-transport-Dl5DzRWP.js +0 -24
- package/dist/skill-commands-CH4lfyW8.js +0 -77
- package/dist/skill-commands-base-CvVjZByy.js +0 -60
- package/dist/skill-commands-runtime-zpWkVBay.js +0 -2
- package/dist/skill-commands.runtime-BKa5oyH-.js +0 -2
- package/dist/skill-commands.runtime.js +0 -1
- package/dist/skill-scanner-bqroDZTs.js +0 -354
- package/dist/skills-D0K7gu2V.js +0 -972
- package/dist/skills-DFTLIGCd.js +0 -4
- package/dist/skills-clawhub-KJGw0uGT.js +0 -274
- package/dist/skills-cli-DziAPxba.js +0 -369
- package/dist/skills-install-CQeO3Sll.js +0 -819
- package/dist/skills-remote-BojLLDxp.js +0 -584
- package/dist/skills-status-BINZ_svK.js +0 -2
- package/dist/skills-status-CdQUttuP.js +0 -170
- package/dist/slack-BuMSbx3k.js +0 -6
- package/dist/slack-DMg3O5YT.js +0 -9
- package/dist/slack-account-LEbfbXys.js +0 -11
- package/dist/slack-core-oqCiyGw8.js +0 -4
- package/dist/slack-runtime-surface-CyaeT7yk.js +0 -18
- package/dist/slack-surface-1yTIS5Q8.js +0 -44
- package/dist/slack-target-parser-CruIJ5w5.js +0 -12
- package/dist/slack-targets-ukxuKR1I.js +0 -45
- package/dist/slash-commands-CRuXC74L.js +0 -672
- package/dist/slash-commands.runtime-F6b9KUnh.js +0 -20
- package/dist/slash-commands.runtime.js +0 -1
- package/dist/slash-dispatch.runtime-CItGyoBF.js +0 -38
- package/dist/slash-dispatch.runtime.js +0 -1
- package/dist/slash-skill-commands.runtime-Caw0oNvV.js +0 -8
- package/dist/slash-skill-commands.runtime.js +0 -1
- package/dist/slots-Dq-2eIRb.js +0 -93
- package/dist/speech-Ceb4ISD4.js +0 -46
- package/dist/speech-provider-BHjDbut-.js +0 -190
- package/dist/speech-provider-D45m9grJ.js +0 -154
- package/dist/speech-provider-DM1ZXsz2.js +0 -385
- package/dist/speech-runtime-CNvOkPw4.js +0 -34
- package/dist/src-Dn1TYXp6.js +0 -2739
- package/dist/ssh-config-C1ipLHgq.js +0 -77
- package/dist/ssh-tunnel-BwMCLc2e.js +0 -159
- package/dist/ssh-tunnel-D5YdH2SQ.js +0 -2
- package/dist/ssrf-Duye12M_.js +0 -246
- package/dist/ssrf-policy-5L7qS2kK.js +0 -69
- package/dist/ssrf-runtime-bpDM5Bgo.js +0 -5
- package/dist/stable-node-path-n7TARbHZ.js +0 -32
- package/dist/stage-sandbox-media.runtime-Tlgx4F6M.js +0 -229
- package/dist/stage-sandbox-media.runtime.js +0 -1
- package/dist/stagger-Cs-6sySM.js +0 -54
- package/dist/startup-verification-DS8Rlwfj.js +0 -131
- package/dist/state-migrations-ssGF0Trg.js +0 -845
- package/dist/state-paths-LoYjHd5L.js +0 -2
- package/dist/status-B7yRr4OV.js +0 -3
- package/dist/status-BM1Lyqo6.js +0 -261
- package/dist/status-BekOC_tW.js +0 -650
- package/dist/status-CxodlqzZ.js +0 -2
- package/dist/status-DHbl5eIj.js +0 -608
- package/dist/status-PsQV2sfU.js +0 -44
- package/dist/status-all-C53a3881.js +0 -798
- package/dist/status-helpers-CCJSSrVJ.js +0 -170
- package/dist/status-issues-M-RUxHvm.js +0 -336
- package/dist/status-issues-qWKbW6r2.js +0 -187
- package/dist/status-json-B66tF12J.js +0 -86
- package/dist/status.agent-local-B8Sw_p6M.js +0 -59
- package/dist/status.command.text-runtime-csZS5yHm.js +0 -18
- package/dist/status.daemon-D0GzvHft.js +0 -25
- package/dist/status.format-C1VNrTBi.js +0 -44
- package/dist/status.gateway-probe-4INUEsUo.js +0 -15
- package/dist/status.link-channel-CJtR5UX6.js +0 -35
- package/dist/status.node-mode-Bva3wbBI.js +0 -2
- package/dist/status.node-mode-CneoXHPW.js +0 -32
- package/dist/status.scan-t1kfm4e0.js +0 -264
- package/dist/status.scan.deps.runtime-CCaTJlzV.js +0 -18
- package/dist/status.scan.deps.runtime.js +0 -1
- package/dist/status.scan.fast-json-DmzN3HuU.js +0 -97
- package/dist/status.scan.fast-json-gu6uL_BR.js +0 -2
- package/dist/status.scan.json-core-JjMIy9YZ.js +0 -254
- package/dist/status.scan.runtime-r_5mTC8f.js +0 -9
- package/dist/status.scan.runtime.js +0 -1
- package/dist/status.service-summary-DnbDBXMs.js +0 -32
- package/dist/status.summary-CbEhZE0h.js +0 -210
- package/dist/status.summary-SLm6uT22.js +0 -2
- package/dist/status.update-Bw9CvcCc.js +0 -2
- package/dist/status.update-CLnevxJb.js +0 -79
- package/dist/sticker-cache-C_FrWgaA.js +0 -1573
- package/dist/sticker-vision.runtime-DR7e08nD.js +0 -16
- package/dist/sticker-vision.runtime.js +0 -1
- package/dist/storage-CPQLpmgN.js +0 -234
- package/dist/storage-paths-DvC4vQo1.js +0 -51
- package/dist/store-8ONMiMTI.js +0 -365
- package/dist/store-DQJZr0Yf.js +0 -767
- package/dist/store-Dxcm2vsw.js +0 -140
- package/dist/store-_OZh8RrM.js +0 -1343
- package/dist/store-read-JHUhrL0Z.js +0 -16
- package/dist/store.runtime-Dmqv-8M7.js +0 -2
- package/dist/store.runtime.js +0 -1
- package/dist/stream-CGrFe0j0.js +0 -123
- package/dist/stream-D9HOuZmn.js +0 -633
- package/dist/stream-Di_JOWoE.js +0 -180
- package/dist/stream-wrappers-D-DlMIYG.js +0 -136
- package/dist/string-normalization-Ddc4JXRe.js +0 -19
- package/dist/string-normalization-runtime-CCsvs1ds.js +0 -1
- package/dist/string-sample-BIWt11jp.js +0 -11
- package/dist/strip-inbound-meta-DvHTlpJG.js +0 -155
- package/dist/subagent-orphan-recovery-Do8Az2RD.js +0 -206
- package/dist/subagent-registry-runtime-D5PNyCsh.js +0 -2
- package/dist/subcli-descriptors-Dasenv4J.js +0 -151
- package/dist/subsystem-C9VSlEcV.js +0 -582
- package/dist/supervisor-log.runtime-CZe76kAj.js +0 -8
- package/dist/supervisor-log.runtime.js +0 -1
- package/dist/system-cli-2-HDh_Ev.js +0 -58
- package/dist/system-events-5SDw3lix.js +0 -93
- package/dist/system-events-BuGmSpuG.js +0 -34
- package/dist/system-message-0oem5MWV.js +0 -16
- package/dist/system-run-command-BmlO5dn2.js +0 -301
- package/dist/systemd-B2HBHMpF.js +0 -588
- package/dist/systemd-hints-DkRlAuPR.js +0 -325
- package/dist/systemd-linger-BBPBJSm0.js +0 -68
- package/dist/systemd-linger-DiWO9n2E.js +0 -2
- package/dist/table-CY2XIg3l.js +0 -305
- package/dist/tables-D6qL6k4d.js +0 -832
- package/dist/tailnet-CZMxMuGK.js +0 -76
- package/dist/tailscale-mpS_cTve.js +0 -238
- package/dist/tailscale-status-Dg2Iov5f.js +0 -71
- package/dist/target-errors-ThNFqo8X.js +0 -26
- package/dist/target-ids-O3O6piTN.js +0 -76
- package/dist/target-parsing-Boyj_2v0.js +0 -41
- package/dist/target-registry-BHJcVSo1.js +0 -1269
- package/dist/targets-C7I_wjs2.js +0 -283
- package/dist/targets-CZA632lq.js +0 -39
- package/dist/targets-Dz1dx4G8.js +0 -78
- package/dist/targets-Zd0-pJu7.js +0 -748
- package/dist/targets-krmeAAxz.js +0 -70
- package/dist/task-registry-delivery-runtime-BnkUa6Mp.js +0 -2
- package/dist/task-registry.audit-DbCRt5MR.js +0 -320
- package/dist/task-registry.audit.shared-SH4MOLKM.js +0 -18
- package/dist/task-registry.maintenance-DfZmDWog.js +0 -2
- package/dist/task-registry.summary-SoFiECCc.js +0 -44
- package/dist/tavily-search-provider-BCY1kfQB.js +0 -227
- package/dist/telegram/audit.js +0 -2
- package/dist/telegram/token.js +0 -2
- package/dist/telegram-Cq20PSxw.js +0 -23
- package/dist/telegram-account-vRRwyfuA.js +0 -11
- package/dist/telegram-command-config-BiHhXScJ.js +0 -1
- package/dist/telegram-core-DTJayyAj.js +0 -6
- package/dist/telegram-custom-commands-C-nv8yoB.js +0 -75
- package/dist/temp-download-Ccatr7zI.js +0 -62
- package/dist/temp-path-JU2kkd64.js +0 -2
- package/dist/templating-Bu436Euy.js +0 -24
- package/dist/testing-BrrgubIp.js +0 -690
- package/dist/text-chunking-BTs2yTSd.js +0 -12
- package/dist/text-chunking-ByXwyFNP.js +0 -20
- package/dist/text-format-lEYRGxj5.js +0 -8
- package/dist/text-runtime-D9ApM_8O.js +0 -398
- package/dist/theme-Bb-qluq6.js +0 -2
- package/dist/theme-wBMZmJzz.js +0 -34
- package/dist/thinking-Dga2zdtd.js +0 -68
- package/dist/thinking.shared-D6IkoLJU.js +0 -243
- package/dist/thread-bindings-BMnz7w-V.js +0 -219
- package/dist/thread-bindings-BbQWOcMr.js +0 -352
- package/dist/thread-bindings-Bv0I9sBY.js +0 -534
- package/dist/thread-bindings-C3jMrVvp.js +0 -778
- package/dist/thread-bindings-policy-Br8s4hQ6.js +0 -172
- package/dist/thread-bindings-runtime-CbG63N4N.js +0 -2
- package/dist/thread-bindings-shared-DjSYaoHi.js +0 -95
- package/dist/thread-bindings.discord-api-NFR5qsWt.js +0 -487
- package/dist/thread-ownership-DG810AQi.js +0 -3
- package/dist/threading-1Z_3y_Dp.js +0 -2
- package/dist/threading-Hl8nWez6.js +0 -832
- package/dist/threading-helpers-BpqyeyAU.js +0 -14
- package/dist/threading-tool-context-DxV30qIW.js +0 -157
- package/dist/timeouts-B1NiHSGi.js +0 -74
- package/dist/tlon-C54Qojl0.js +0 -20
- package/dist/tmp-openclaw-dir-B44_vmJv.js +0 -102
- package/dist/token-BlUJQi_X.js +0 -2
- package/dist/token-CDYFJvj8.js +0 -82
- package/dist/token-kCjtGElJ.js +0 -45
- package/dist/tokens-C2f9Klbt.js +0 -66
- package/dist/tool-actions.runtime-aB0DgLk7.js +0 -532
- package/dist/tool-actions.runtime.js +0 -1
- package/dist/tool-display-C7h9IZa_.js +0 -1607
- package/dist/tool-images-BDUvc_pd.js +0 -270
- package/dist/tool-mutation-DIBpIegg.js +0 -140
- package/dist/tool-policy-FUm_F19C.js +0 -515
- package/dist/tool-policy-match-CCFHTsu9.js +0 -49
- package/dist/tool-send-DClM4vsZ.js +0 -16
- package/dist/tools-54j1hYBv.js +0 -123
- package/dist/tools-effective-inventory-C09suj6-.js +0 -148
- package/dist/tools.runtime-VBFxIXC8.js +0 -4
- package/dist/tools.runtime.js +0 -1
- package/dist/transcript-events-Dc7U5QmQ.js +0 -29
- package/dist/transport-ready-Cje3USX4.js +0 -36
- package/dist/tts-CTM9C09A.js +0 -2
- package/dist/tts-Ck_K3tIi.js +0 -84
- package/dist/tts-auto-mode-bD-u2biE.js +0 -14
- package/dist/tts-bTuorllO.js +0 -102
- package/dist/tts-eOLiJF6d.js +0 -29
- package/dist/tts.runtime-ChTwy0yH.js +0 -3
- package/dist/tts.runtime.js +0 -1
- package/dist/tui-CrM-Bz3i.js +0 -3899
- package/dist/tui-cli-aVL5aPGw.js +0 -31
- package/dist/twitch-CFFlkhYG.js +0 -15
- package/dist/typebox-DmerPHaM.js +0 -22
- package/dist/types-BzNSmNk3.js +0 -12
- package/dist/types-DAzqpvqD.js +0 -83
- package/dist/types-DVJVELY7.js +0 -471
- package/dist/types-DqNppUoh.js +0 -15
- package/dist/types.secrets-BpcqHPAv.js +0 -80
- package/dist/types.tools-BTQL6INB.js +0 -22
- package/dist/typing-BnCchGtL.js +0 -8
- package/dist/typing-Bugg5LPP.js +0 -68
- package/dist/typing-J_ktpWeA.js +0 -2
- package/dist/typing-mode-DDYL_0TG.js +0 -75
- package/dist/typing-policy-CaZhrM-F.js +0 -11
- package/dist/typing-start-guard-Cgjgzy5e.js +0 -73
- package/dist/ui-BLDY9-7R.js +0 -212
- package/dist/undici-global-dispatcher-CcNdQ7Dt.js +0 -99
- package/dist/unhandled-rejections-CA_e1R-O.js +0 -2
- package/dist/unhandled-rejections-V7U9keRG.js +0 -241
- package/dist/update-CcALvtl_.js +0 -1253
- package/dist/update-channels-Dn1F57Kf.js +0 -78
- package/dist/update-check-CoDVxy35.js +0 -354
- package/dist/update-cli-BWOYy_Mp.js +0 -1447
- package/dist/update-offset-store-BLZmshZE.js +0 -75
- package/dist/usage-CC7-wLUi.js +0 -39
- package/dist/usage-format-C7nMV1jc.js +0 -513
- package/dist/utils-CN_F_3Qg.js +0 -243
- package/dist/utils-Cgw9Y0-Q.js +0 -2
- package/dist/validation-BNNAUmDO.js +0 -18521
- package/dist/verification-B4ogZ29M.js +0 -130
- package/dist/verification-B99uVIxo.js +0 -2
- package/dist/version-BNzJ37Re.js +0 -79
- package/dist/version-Dw0eJ-1F.js +0 -2
- package/dist/voice-call-Dt6m6oA3.js +0 -4
- package/dist/wait-YXJvtMmp.js +0 -7
- package/dist/warning-filter-GX8LpGKz.js +0 -57
- package/dist/web-fetch-utils-CoVia2ez.js +0 -413
- package/dist/web-media-D9opLz21.js +0 -2
- package/dist/web-media-DHlguFej.js +0 -339
- package/dist/web-search-BcSDWJK9.js +0 -169
- package/dist/web-search-providers-CqY6CVp3.js +0 -21
- package/dist/web-search-providers.runtime-BHjzPQW-.js +0 -113
- package/dist/web-search-providers.runtime.js +0 -1
- package/dist/web-search-providers.shared-CMeQec8y.js +0 -421
- package/dist/web-search-shared-B5mHm7QD.js +0 -87
- package/dist/webhook-ingress-CTl81NUR.js +0 -164
- package/dist/webhook-memory-guards-B6k3g-po.js +0 -129
- package/dist/webhook-path-CklCw5kp.js +0 -22
- package/dist/webhook-request-guards-CxDPmU9e.js +0 -178
- package/dist/webhook-shared-Bw9wLe6L.js +0 -370
- package/dist/webhooks-cli-DPRITERU.js +0 -326
- package/dist/whatsapp-CSzf1Nu0.js +0 -5
- package/dist/whatsapp-D18Otn45.js +0 -30
- package/dist/whatsapp-auth-presence-B5GZUgTA.js +0 -41
- package/dist/whatsapp-core-Be0P_p4R.js +0 -7
- package/dist/whatsapp-heartbeat-a2-OB01n.js +0 -85
- package/dist/whatsapp-shared-ChjLiMDw.js +0 -56
- package/dist/whatsapp-shared-FR_Jw-NH.js +0 -4
- package/dist/whatsapp-surface-Dwrfi_SD.js +0 -26
- package/dist/whatsapp-targets-59A3BDBi.js +0 -13
- package/dist/widearea-dns-CfQt6b3q.js +0 -125
- package/dist/windows-argv-DDAf3waz.js +0 -345
- package/dist/windows-install-roots-XI3CvO9O.js +0 -149
- package/dist/windows-spawn-DKvkg_66.js +0 -154
- package/dist/with-timeout-B2smrGj0.js +0 -214
- package/dist/with-timeout-BmJKiOMd.js +0 -13
- package/dist/workflow-summary-BMvffn8D.js +0 -2
- package/dist/workflow-summary-NvN5lUvK.js +0 -167
- package/dist/workspace-D5P9nuJd.js +0 -479
- package/dist/workspace-D5UiPYKk.js +0 -306
- package/dist/workspace-dirs-CRv8Jwfz.js +0 -13
- package/dist/ws-97FEIc7w.js +0 -11
- package/dist/ws-log-BaAOgG9m.js +0 -281
- package/dist/ws-logging-M92fgmyp.js +0 -10
- package/dist/wsl-ytdRZp54.js +0 -57
- package/dist/x-search-FsMNZ7d0.js +0 -166
- package/dist/x-search-shared-D0tVMJk9.js +0 -124
- package/dist/zalo-CNoa7XH7.js +0 -13
- package/dist/zalo-js-HktBGDbg.js +0 -1156
- package/dist/zalo-setup-BT-xGElf.js +0 -14
- package/dist/zalouser-TwyfhIYz.js +0 -22
- package/dist/zod-1Wegy5nx.js +0 -7
- package/dist/zod-parse-HlGwTZP3.js +0 -14
- package/dist/zod-schema.agent-runtime-DFC7a3eV.js +0 -602
- package/dist/zod-schema.core-C1Ewlj9j.js +0 -520
- package/dist/zod-schema.providers-core-Bmbs-R4l.js +0 -1541
- package/dist/zod-schema.providers-whatsapp-CanJPkvb.js +0 -132
- package/dist/zod-schema.sensitive-DEzKzMxI.js +0 -5
package/dist/monitor-BEjwRY59.js
DELETED
|
@@ -1,3622 +0,0 @@
|
|
|
1
|
-
import { d as resolveThreadSessionKeys, u as resolveAgentIdFromSessionKey } from "./session-key-Do__tq1E.js";
|
|
2
|
-
import { n as formatAllowlistMatchMeta } from "./allowlist-match-Dm6AqFEs.js";
|
|
3
|
-
import { n as writeJsonFileAtomically, t as readJsonFileWithFallback } from "./json-store-FUgu1pyj.js";
|
|
4
|
-
import { r as getSessionBindingService } from "./session-binding-service-D7bUc7mS.js";
|
|
5
|
-
import { a as warnMissingProviderGroupPolicyFallbackOnce, n as resolveAllowlistProviderRuntimeGroupPolicy, r as resolveDefaultGroupPolicy, t as GROUP_POLICY_BLOCKED_LABEL } from "./runtime-group-policy-zTp8fKRK.js";
|
|
6
|
-
import { t as resolveAckReaction } from "./identity-DvwF6Yix.js";
|
|
7
|
-
import { a as buildExecApprovalPendingReplyPayload, c as getExecApprovalApproverDmNoticeText } from "./exec-approval-reply-CFOEcmIv.js";
|
|
8
|
-
import { r as getAgentScopedMediaLocalRoots } from "./local-roots-DrpNBv4b.js";
|
|
9
|
-
import { n as deriveLastRoutePolicy } from "./resolve-route-EE8E7OAF.js";
|
|
10
|
-
import { c as resolveThreadBindingIdleTimeoutMsForChannel, d as resolveThreadBindingMaxAgeMsForChannel } from "./thread-bindings-policy-Br8s4hQ6.js";
|
|
11
|
-
import "./routing-BVt9nMN-.js";
|
|
12
|
-
import { n as resolveControlCommandGate } from "./command-gating-NyDk7t84.js";
|
|
13
|
-
import { a as patchAllowlistUsersInConfigEntries, n as buildAllowlistResolutionSummary, o as summarizeMapping, r as canonicalizeAllowlistWithResolvedIds, t as addAllowlistUserEntriesFromConfigEntry } from "./resolve-utils-ClmKSkEQ.js";
|
|
14
|
-
import { o as resolveExecApprovalCommandDisplay } from "./exec-approval-session-target-BbsAlD1Q.js";
|
|
15
|
-
import "./approval-runtime-DIA8ohXa.js";
|
|
16
|
-
import { t as createChannelNativeApprovalRuntime } from "./approval-native-runtime-2AVlvrdL.js";
|
|
17
|
-
import { t as resolveChannelContextVisibilityMode } from "./context-visibility-DTMZdcAH.js";
|
|
18
|
-
import "./config-runtime-ngoccXmP.js";
|
|
19
|
-
import { n as createReplyPrefixOptions } from "./reply-prefix-Eema_xXG.js";
|
|
20
|
-
import { t as createTypingCallbacks } from "./typing-Bugg5LPP.js";
|
|
21
|
-
import "./infra-runtime-Cl0iZpRS.js";
|
|
22
|
-
import "./conversation-runtime-bArk0IjJ.js";
|
|
23
|
-
import { i as resolveConfiguredAcpBindingRecord, t as ensureConfiguredAcpBindingReady } from "./persistent-bindings.lifecycle-CAOm8v8I.js";
|
|
24
|
-
import "./security-runtime-BSQDlFPi.js";
|
|
25
|
-
import { t as evaluateSupplementalContextVisibility } from "./context-visibility-vOvLMUrZ.js";
|
|
26
|
-
import { n as logInboundDrop, r as logTypingFailure } from "./logging-ColPHIDT.js";
|
|
27
|
-
import "./command-auth-tqFmaIaJ.js";
|
|
28
|
-
import { n as toLocationContext, t as formatLocationText } from "./location-CtMHXE-d.js";
|
|
29
|
-
import { c as createDraftStreamLoop } from "./channel-lifecycle-BnjeZxB6.js";
|
|
30
|
-
import { s as resolveMatrixAccountConfig } from "./config-paths-DP5yXXo2.js";
|
|
31
|
-
import { t as getMatrixRuntime } from "./runtime-CC1YDOst.js";
|
|
32
|
-
import { i as resolveMatrixAccount, n as resolveConfiguredMatrixBotUserIds } from "./accounts-CO-lK8jJ.js";
|
|
33
|
-
import "./runtime-api-Dzz1aWyq.js";
|
|
34
|
-
import { a as shouldHandleMatrixExecApprovalRequest, c as normalizeMatrixUserId, i as isMatrixExecApprovalClientEnabled, l as resolveMatrixAllowListMatch, r as matrixNativeApprovalAdapter, s as normalizeMatrixAllowList, t as resolveMatrixRoomConfig } from "./rooms-B1IyUfuR.js";
|
|
35
|
-
import { a as resolveMatrixTargetIdentity, t as isMatrixQualifiedUserId } from "./target-ids-O3O6piTN.js";
|
|
36
|
-
import { t as isBunRuntime } from "./runtime-1phb9iVo.js";
|
|
37
|
-
import { n as resolveMatrixAuth, r as resolveMatrixAuthContext } from "./config-DJ29sg5U.js";
|
|
38
|
-
import { n as resolveMatrixStateFilePath } from "./storage-CPQLpmgN.js";
|
|
39
|
-
import { n as LogService } from "./logger-Bc2lC3X3.js";
|
|
40
|
-
import { i as resolveSharedMatrixClient, n as releaseSharedClientInstance } from "./shared-C1MrVu4M.js";
|
|
41
|
-
import "./client-BFxjGELJ.js";
|
|
42
|
-
import { t as resolveMatrixTargets } from "./resolve-targets-B1MvBWpT.js";
|
|
43
|
-
import { a as sendMessageMatrix, c as sendSingleTextMessageMatrix, g as isPollStartType, h as isPollEventType, i as reactMatrixMessage, l as sendTypingMatrix, n as editMessageMatrix, p as formatPollAsText, r as prepareMatrixSingleText, s as sendReadReceiptMatrix, t as chunkMatrixText, v as parsePollStartContent } from "./send-B1YVZR_q.js";
|
|
44
|
-
import { c as MATRIX_REACTION_EVENT_TYPE, d as extractMatrixReactionAnnotation, i as repairMatrixDirectRooms, r as promoteMatrixDirectRoomCandidate } from "./direct-management-DMp7MOnt.js";
|
|
45
|
-
import { o as readJoinedMatrixMembers, r as isStrictDirectMembership, t as hasDirectMatrixMemberFlag } from "./direct-room-DYlSJOU_.js";
|
|
46
|
-
import { t as createMatrixThreadBindingManager } from "./thread-bindings-BbQWOcMr.js";
|
|
47
|
-
import { i as setActiveMatrixClient } from "./client-bootstrap-CFGCltAu.js";
|
|
48
|
-
import { t as formatMatrixEncryptedEventDisabledWarning } from "./encryption-guidance-62xAQFP4.js";
|
|
49
|
-
import { c as formatMatrixMediaUnavailableText, d as resolveMatrixMessageBody, l as formatMatrixMessageText, n as editMatrixMessage, p as fetchMatrixPollSnapshot, t as deleteMatrixMessage, u as resolveMatrixMessageAttachment } from "./messages-CQT2FDZ3.js";
|
|
50
|
-
import { t as isMatrixNotFoundError } from "./errors-CjFsF-QY.js";
|
|
51
|
-
import { t as createAsyncLock } from "./async-lock-QqhPYwhW.js";
|
|
52
|
-
import { format } from "node:util";
|
|
53
|
-
//#region extensions/matrix/src/exec-approvals-handler.ts
|
|
54
|
-
function isHandlerConfigured(params) {
|
|
55
|
-
return isMatrixExecApprovalClientEnabled(params);
|
|
56
|
-
}
|
|
57
|
-
function normalizeThreadId(value) {
|
|
58
|
-
return (value == null ? "" : String(value).trim()) || void 0;
|
|
59
|
-
}
|
|
60
|
-
function buildPendingApprovalText(params) {
|
|
61
|
-
return buildExecApprovalPendingReplyPayload({
|
|
62
|
-
approvalId: params.request.id,
|
|
63
|
-
approvalSlug: params.request.id.slice(0, 8),
|
|
64
|
-
approvalCommandId: params.request.id,
|
|
65
|
-
ask: params.request.request.ask ?? void 0,
|
|
66
|
-
agentId: params.request.request.agentId ?? void 0,
|
|
67
|
-
allowedDecisions: params.request.request.allowedDecisions,
|
|
68
|
-
command: resolveExecApprovalCommandDisplay(params.request.request).commandText,
|
|
69
|
-
cwd: params.request.request.cwd ?? void 0,
|
|
70
|
-
host: params.request.request.host === "node" ? "node" : "gateway",
|
|
71
|
-
nodeId: params.request.request.nodeId ?? void 0,
|
|
72
|
-
sessionKey: params.request.request.sessionKey ?? void 0,
|
|
73
|
-
expiresAtMs: params.request.expiresAtMs,
|
|
74
|
-
nowMs: params.nowMs
|
|
75
|
-
}).text;
|
|
76
|
-
}
|
|
77
|
-
function buildResolvedApprovalText(params) {
|
|
78
|
-
const command = resolveExecApprovalCommandDisplay(params.request.request).commandText;
|
|
79
|
-
return [
|
|
80
|
-
`Exec approval: ${params.resolved.decision === "allow-once" ? "Allowed once" : params.resolved.decision === "allow-always" ? "Allowed always" : "Denied"}`,
|
|
81
|
-
"",
|
|
82
|
-
"Command",
|
|
83
|
-
"```",
|
|
84
|
-
command,
|
|
85
|
-
"```"
|
|
86
|
-
].join("\n");
|
|
87
|
-
}
|
|
88
|
-
var MatrixExecApprovalHandler = class {
|
|
89
|
-
constructor(opts, deps = {}) {
|
|
90
|
-
this.opts = opts;
|
|
91
|
-
this.nowMs = deps.nowMs ?? Date.now;
|
|
92
|
-
this.sendMessage = deps.sendMessage ?? sendMessageMatrix;
|
|
93
|
-
this.editMessage = deps.editMessage ?? editMatrixMessage;
|
|
94
|
-
this.deleteMessage = deps.deleteMessage ?? deleteMatrixMessage;
|
|
95
|
-
this.repairDirectRooms = deps.repairDirectRooms ?? repairMatrixDirectRooms;
|
|
96
|
-
this.runtime = createChannelNativeApprovalRuntime({
|
|
97
|
-
label: "matrix/exec-approvals",
|
|
98
|
-
clientDisplayName: `Matrix Exec Approvals (${this.opts.accountId})`,
|
|
99
|
-
cfg: this.opts.cfg,
|
|
100
|
-
accountId: this.opts.accountId,
|
|
101
|
-
gatewayUrl: this.opts.gatewayUrl,
|
|
102
|
-
eventKinds: ["exec"],
|
|
103
|
-
nowMs: this.nowMs,
|
|
104
|
-
nativeAdapter: matrixNativeApprovalAdapter.native,
|
|
105
|
-
isConfigured: () => isHandlerConfigured({
|
|
106
|
-
cfg: this.opts.cfg,
|
|
107
|
-
accountId: this.opts.accountId
|
|
108
|
-
}),
|
|
109
|
-
shouldHandle: (request) => shouldHandleMatrixExecApprovalRequest({
|
|
110
|
-
cfg: this.opts.cfg,
|
|
111
|
-
accountId: this.opts.accountId,
|
|
112
|
-
request
|
|
113
|
-
}),
|
|
114
|
-
buildPendingContent: ({ request, nowMs }) => buildPendingApprovalText({
|
|
115
|
-
request,
|
|
116
|
-
nowMs
|
|
117
|
-
}),
|
|
118
|
-
sendOriginNotice: async ({ originTarget }) => {
|
|
119
|
-
const preparedTarget = await this.prepareTarget(originTarget);
|
|
120
|
-
if (!preparedTarget) return;
|
|
121
|
-
await this.sendMessage(preparedTarget.to, getExecApprovalApproverDmNoticeText(), {
|
|
122
|
-
cfg: this.opts.cfg,
|
|
123
|
-
accountId: this.opts.accountId,
|
|
124
|
-
client: this.opts.client,
|
|
125
|
-
threadId: preparedTarget.threadId
|
|
126
|
-
});
|
|
127
|
-
},
|
|
128
|
-
prepareTarget: async ({ plannedTarget }) => {
|
|
129
|
-
const preparedTarget = await this.prepareTarget(plannedTarget.target);
|
|
130
|
-
if (!preparedTarget) return null;
|
|
131
|
-
return {
|
|
132
|
-
dedupeKey: `${preparedTarget.roomId}:${preparedTarget.threadId ?? ""}`,
|
|
133
|
-
target: preparedTarget
|
|
134
|
-
};
|
|
135
|
-
},
|
|
136
|
-
deliverTarget: async ({ preparedTarget, pendingContent }) => {
|
|
137
|
-
const result = await this.sendMessage(preparedTarget.to, pendingContent, {
|
|
138
|
-
cfg: this.opts.cfg,
|
|
139
|
-
accountId: this.opts.accountId,
|
|
140
|
-
client: this.opts.client,
|
|
141
|
-
threadId: preparedTarget.threadId
|
|
142
|
-
});
|
|
143
|
-
return {
|
|
144
|
-
roomId: result.roomId,
|
|
145
|
-
messageId: result.messageId
|
|
146
|
-
};
|
|
147
|
-
},
|
|
148
|
-
finalizeResolved: async ({ request, resolved, entries }) => {
|
|
149
|
-
await this.finalizeResolved(request, resolved, entries);
|
|
150
|
-
},
|
|
151
|
-
finalizeExpired: async ({ entries }) => {
|
|
152
|
-
await this.clearPending(entries);
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
async start() {
|
|
157
|
-
await this.runtime.start();
|
|
158
|
-
}
|
|
159
|
-
async stop() {
|
|
160
|
-
await this.runtime.stop();
|
|
161
|
-
}
|
|
162
|
-
async handleRequested(request) {
|
|
163
|
-
await this.runtime.handleRequested(request);
|
|
164
|
-
}
|
|
165
|
-
async handleResolved(resolved) {
|
|
166
|
-
await this.runtime.handleResolved(resolved);
|
|
167
|
-
}
|
|
168
|
-
async prepareTarget(rawTarget) {
|
|
169
|
-
const target = resolveMatrixTargetIdentity(rawTarget.to);
|
|
170
|
-
if (!target) return null;
|
|
171
|
-
const threadId = normalizeThreadId(rawTarget.threadId);
|
|
172
|
-
if (target.kind === "user") {
|
|
173
|
-
const account = resolveMatrixAccount({
|
|
174
|
-
cfg: this.opts.cfg,
|
|
175
|
-
accountId: this.opts.accountId
|
|
176
|
-
});
|
|
177
|
-
const repaired = await this.repairDirectRooms({
|
|
178
|
-
client: this.opts.client,
|
|
179
|
-
remoteUserId: target.id,
|
|
180
|
-
encrypted: account.config.encryption === true
|
|
181
|
-
});
|
|
182
|
-
if (!repaired.activeRoomId) return null;
|
|
183
|
-
return {
|
|
184
|
-
to: `room:${repaired.activeRoomId}`,
|
|
185
|
-
roomId: repaired.activeRoomId,
|
|
186
|
-
threadId
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
return {
|
|
190
|
-
to: `room:${target.id}`,
|
|
191
|
-
roomId: target.id,
|
|
192
|
-
threadId
|
|
193
|
-
};
|
|
194
|
-
}
|
|
195
|
-
async finalizeResolved(request, resolved, entries) {
|
|
196
|
-
const text = buildResolvedApprovalText({
|
|
197
|
-
request,
|
|
198
|
-
resolved
|
|
199
|
-
});
|
|
200
|
-
await Promise.allSettled(entries.map(async (entry) => {
|
|
201
|
-
await this.editMessage(entry.roomId, entry.messageId, text, {
|
|
202
|
-
cfg: this.opts.cfg,
|
|
203
|
-
accountId: this.opts.accountId,
|
|
204
|
-
client: this.opts.client
|
|
205
|
-
});
|
|
206
|
-
}));
|
|
207
|
-
}
|
|
208
|
-
async clearPending(entries) {
|
|
209
|
-
await Promise.allSettled(entries.map(async (entry) => {
|
|
210
|
-
await this.deleteMessage(entry.roomId, entry.messageId, {
|
|
211
|
-
cfg: this.opts.cfg,
|
|
212
|
-
accountId: this.opts.accountId,
|
|
213
|
-
client: this.opts.client,
|
|
214
|
-
reason: "approval expired"
|
|
215
|
-
});
|
|
216
|
-
}));
|
|
217
|
-
}
|
|
218
|
-
};
|
|
219
|
-
//#endregion
|
|
220
|
-
//#region extensions/matrix/src/matrix/monitor/auto-join.ts
|
|
221
|
-
function registerMatrixAutoJoin(params) {
|
|
222
|
-
const { client, accountConfig, runtime } = params;
|
|
223
|
-
const core = getMatrixRuntime();
|
|
224
|
-
const logVerbose = (message) => {
|
|
225
|
-
if (!core.logging.shouldLogVerbose()) return;
|
|
226
|
-
runtime.log?.(message);
|
|
227
|
-
};
|
|
228
|
-
const autoJoin = accountConfig.autoJoin ?? "off";
|
|
229
|
-
const rawAllowlist = (accountConfig.autoJoinAllowlist ?? []).map((entry) => String(entry).trim()).filter(Boolean);
|
|
230
|
-
const autoJoinAllowlist = new Set(rawAllowlist);
|
|
231
|
-
const allowedRoomIds = new Set(rawAllowlist.filter((entry) => entry.startsWith("!")));
|
|
232
|
-
const allowedAliases = rawAllowlist.filter((entry) => entry.startsWith("#"));
|
|
233
|
-
const resolvedAliasRoomIds = /* @__PURE__ */ new Map();
|
|
234
|
-
if (autoJoin === "off") return;
|
|
235
|
-
if (autoJoin === "always") logVerbose("matrix: auto-join enabled for all invites");
|
|
236
|
-
else logVerbose("matrix: auto-join enabled for allowlist invites");
|
|
237
|
-
const resolveAllowedAliasRoomId = async (alias) => {
|
|
238
|
-
if (resolvedAliasRoomIds.has(alias)) return resolvedAliasRoomIds.get(alias) ?? null;
|
|
239
|
-
const resolved = await params.client.resolveRoom(alias);
|
|
240
|
-
if (resolved) resolvedAliasRoomIds.set(alias, resolved);
|
|
241
|
-
return resolved;
|
|
242
|
-
};
|
|
243
|
-
const resolveAllowedAliasRoomIds = async () => {
|
|
244
|
-
return (await Promise.all(allowedAliases.map(async (alias) => {
|
|
245
|
-
try {
|
|
246
|
-
return await resolveAllowedAliasRoomId(alias);
|
|
247
|
-
} catch (err) {
|
|
248
|
-
runtime.error?.(`matrix: failed resolving allowlisted alias ${alias}: ${String(err)}`);
|
|
249
|
-
return null;
|
|
250
|
-
}
|
|
251
|
-
}))).filter((roomId) => Boolean(roomId));
|
|
252
|
-
};
|
|
253
|
-
client.on("room.invite", async (roomId, _inviteEvent) => {
|
|
254
|
-
if (autoJoin === "allowlist") {
|
|
255
|
-
const allowedAliasRoomIds = await resolveAllowedAliasRoomIds();
|
|
256
|
-
if (!(autoJoinAllowlist.has("*") || allowedRoomIds.has(roomId) || allowedAliasRoomIds.some((resolvedRoomId) => resolvedRoomId === roomId))) {
|
|
257
|
-
logVerbose(`matrix: invite ignored (not in allowlist) room=${roomId}`);
|
|
258
|
-
return;
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
try {
|
|
262
|
-
await client.joinRoom(roomId);
|
|
263
|
-
logVerbose(`matrix: joined room ${roomId}`);
|
|
264
|
-
} catch (err) {
|
|
265
|
-
runtime.error?.(`matrix: failed to join room ${roomId}: ${String(err)}`);
|
|
266
|
-
}
|
|
267
|
-
});
|
|
268
|
-
}
|
|
269
|
-
//#endregion
|
|
270
|
-
//#region extensions/matrix/src/matrix/monitor/config.ts
|
|
271
|
-
function normalizeMatrixUserLookupEntry(raw) {
|
|
272
|
-
return raw.replace(/^matrix:/i, "").replace(/^user:/i, "").trim();
|
|
273
|
-
}
|
|
274
|
-
function normalizeMatrixRoomLookupEntry(raw) {
|
|
275
|
-
return raw.replace(/^matrix:/i, "").replace(/^(room|channel):/i, "").trim();
|
|
276
|
-
}
|
|
277
|
-
function filterResolvedMatrixAllowlistEntries(entries) {
|
|
278
|
-
return entries.filter((entry) => {
|
|
279
|
-
const trimmed = entry.trim();
|
|
280
|
-
if (!trimmed) return false;
|
|
281
|
-
if (trimmed === "*") return true;
|
|
282
|
-
return isMatrixQualifiedUserId(normalizeMatrixUserLookupEntry(trimmed));
|
|
283
|
-
});
|
|
284
|
-
}
|
|
285
|
-
function sanitizeMatrixRoomUserAllowlists(entries) {
|
|
286
|
-
const nextEntries = { ...entries };
|
|
287
|
-
for (const [roomKey, roomConfig] of Object.entries(entries)) {
|
|
288
|
-
const users = roomConfig?.users;
|
|
289
|
-
if (!Array.isArray(users)) continue;
|
|
290
|
-
nextEntries[roomKey] = {
|
|
291
|
-
...roomConfig,
|
|
292
|
-
users: filterResolvedMatrixAllowlistEntries(users.map(String))
|
|
293
|
-
};
|
|
294
|
-
}
|
|
295
|
-
return nextEntries;
|
|
296
|
-
}
|
|
297
|
-
async function resolveMatrixMonitorUserEntries(params) {
|
|
298
|
-
const directMatches = [];
|
|
299
|
-
const pending = [];
|
|
300
|
-
for (const entry of params.entries) {
|
|
301
|
-
const input = String(entry).trim();
|
|
302
|
-
if (!input) continue;
|
|
303
|
-
const query = normalizeMatrixUserLookupEntry(input);
|
|
304
|
-
if (!query || query === "*") continue;
|
|
305
|
-
if (isMatrixQualifiedUserId(query)) {
|
|
306
|
-
directMatches.push({
|
|
307
|
-
input,
|
|
308
|
-
resolved: true,
|
|
309
|
-
id: normalizeMatrixUserId(query)
|
|
310
|
-
});
|
|
311
|
-
continue;
|
|
312
|
-
}
|
|
313
|
-
pending.push({
|
|
314
|
-
input,
|
|
315
|
-
query
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
(pending.length === 0 ? [] : await params.resolveTargets({
|
|
319
|
-
cfg: params.cfg,
|
|
320
|
-
accountId: params.accountId,
|
|
321
|
-
inputs: pending.map((entry) => entry.query),
|
|
322
|
-
kind: "user",
|
|
323
|
-
runtime: params.runtime
|
|
324
|
-
})).forEach((entry, index) => {
|
|
325
|
-
const source = pending[index];
|
|
326
|
-
if (!source) return;
|
|
327
|
-
directMatches.push({
|
|
328
|
-
input: source.input,
|
|
329
|
-
resolved: entry.resolved,
|
|
330
|
-
id: entry.id ? normalizeMatrixUserId(entry.id) : void 0
|
|
331
|
-
});
|
|
332
|
-
});
|
|
333
|
-
return buildAllowlistResolutionSummary(directMatches);
|
|
334
|
-
}
|
|
335
|
-
async function resolveMatrixMonitorUserAllowlist(params) {
|
|
336
|
-
const allowList = (params.list ?? []).map(String);
|
|
337
|
-
if (allowList.length === 0) return allowList;
|
|
338
|
-
const resolution = await resolveMatrixMonitorUserEntries({
|
|
339
|
-
cfg: params.cfg,
|
|
340
|
-
accountId: params.accountId,
|
|
341
|
-
entries: allowList,
|
|
342
|
-
runtime: params.runtime,
|
|
343
|
-
resolveTargets: params.resolveTargets
|
|
344
|
-
});
|
|
345
|
-
const canonicalized = canonicalizeAllowlistWithResolvedIds({
|
|
346
|
-
existing: allowList,
|
|
347
|
-
resolvedMap: resolution.resolvedMap
|
|
348
|
-
});
|
|
349
|
-
summarizeMapping(params.label, resolution.mapping, resolution.unresolved, params.runtime);
|
|
350
|
-
if (resolution.unresolved.length > 0) params.runtime.log?.(`${params.label} entries must be full Matrix IDs (example: @user:server). Unresolved entries are ignored.`);
|
|
351
|
-
return filterResolvedMatrixAllowlistEntries(canonicalized);
|
|
352
|
-
}
|
|
353
|
-
async function resolveMatrixMonitorRoomsConfig(params) {
|
|
354
|
-
const roomsConfig = params.roomsConfig;
|
|
355
|
-
if (!roomsConfig || Object.keys(roomsConfig).length === 0) return roomsConfig;
|
|
356
|
-
const mapping = [];
|
|
357
|
-
const unresolved = [];
|
|
358
|
-
const nextRooms = {};
|
|
359
|
-
if (roomsConfig["*"]) nextRooms["*"] = roomsConfig["*"];
|
|
360
|
-
const pending = [];
|
|
361
|
-
for (const [entry, roomConfig] of Object.entries(roomsConfig)) {
|
|
362
|
-
if (entry === "*") continue;
|
|
363
|
-
const input = entry.trim();
|
|
364
|
-
if (!input) continue;
|
|
365
|
-
const cleaned = normalizeMatrixRoomLookupEntry(input);
|
|
366
|
-
if (!cleaned) {
|
|
367
|
-
unresolved.push(entry);
|
|
368
|
-
continue;
|
|
369
|
-
}
|
|
370
|
-
if (cleaned.startsWith("!") && cleaned.includes(":")) {
|
|
371
|
-
if (!nextRooms[cleaned]) nextRooms[cleaned] = roomConfig;
|
|
372
|
-
if (cleaned !== input) mapping.push(`${input}→${cleaned}`);
|
|
373
|
-
continue;
|
|
374
|
-
}
|
|
375
|
-
pending.push({
|
|
376
|
-
input,
|
|
377
|
-
query: cleaned,
|
|
378
|
-
config: roomConfig
|
|
379
|
-
});
|
|
380
|
-
}
|
|
381
|
-
if (pending.length > 0) (await params.resolveTargets({
|
|
382
|
-
cfg: params.cfg,
|
|
383
|
-
accountId: params.accountId,
|
|
384
|
-
inputs: pending.map((entry) => entry.query),
|
|
385
|
-
kind: "group",
|
|
386
|
-
runtime: params.runtime
|
|
387
|
-
})).forEach((entry, index) => {
|
|
388
|
-
const source = pending[index];
|
|
389
|
-
if (!source) return;
|
|
390
|
-
if (entry.resolved && entry.id) {
|
|
391
|
-
const roomKey = normalizeMatrixRoomLookupEntry(entry.id);
|
|
392
|
-
if (!nextRooms[roomKey]) nextRooms[roomKey] = source.config;
|
|
393
|
-
mapping.push(`${source.input}→${roomKey}`);
|
|
394
|
-
} else unresolved.push(source.input);
|
|
395
|
-
});
|
|
396
|
-
summarizeMapping("matrix rooms", mapping, unresolved, params.runtime);
|
|
397
|
-
if (unresolved.length > 0) params.runtime.log?.("matrix rooms must be room IDs or aliases (example: !room:server or #alias:server). Unresolved entries are ignored.");
|
|
398
|
-
const roomUsers = /* @__PURE__ */ new Set();
|
|
399
|
-
for (const roomConfig of Object.values(nextRooms)) addAllowlistUserEntriesFromConfigEntry(roomUsers, roomConfig);
|
|
400
|
-
if (roomUsers.size === 0) return nextRooms;
|
|
401
|
-
const resolution = await resolveMatrixMonitorUserEntries({
|
|
402
|
-
cfg: params.cfg,
|
|
403
|
-
accountId: params.accountId,
|
|
404
|
-
entries: Array.from(roomUsers),
|
|
405
|
-
runtime: params.runtime,
|
|
406
|
-
resolveTargets: params.resolveTargets
|
|
407
|
-
});
|
|
408
|
-
summarizeMapping("matrix room users", resolution.mapping, resolution.unresolved, params.runtime);
|
|
409
|
-
if (resolution.unresolved.length > 0) params.runtime.log?.("matrix room users entries must be full Matrix IDs (example: @user:server). Unresolved entries are ignored.");
|
|
410
|
-
return sanitizeMatrixRoomUserAllowlists(patchAllowlistUsersInConfigEntries({
|
|
411
|
-
entries: nextRooms,
|
|
412
|
-
resolvedMap: resolution.resolvedMap,
|
|
413
|
-
strategy: "canonicalize"
|
|
414
|
-
}));
|
|
415
|
-
}
|
|
416
|
-
async function resolveMatrixMonitorConfig(params) {
|
|
417
|
-
const resolveTargets = params.resolveTargets ?? resolveMatrixTargets;
|
|
418
|
-
const [allowFrom, groupAllowFrom, roomsConfig] = await Promise.all([
|
|
419
|
-
resolveMatrixMonitorUserAllowlist({
|
|
420
|
-
cfg: params.cfg,
|
|
421
|
-
accountId: params.accountId,
|
|
422
|
-
label: "matrix dm allowlist",
|
|
423
|
-
list: params.allowFrom,
|
|
424
|
-
runtime: params.runtime,
|
|
425
|
-
resolveTargets
|
|
426
|
-
}),
|
|
427
|
-
resolveMatrixMonitorUserAllowlist({
|
|
428
|
-
cfg: params.cfg,
|
|
429
|
-
accountId: params.accountId,
|
|
430
|
-
label: "matrix group allowlist",
|
|
431
|
-
list: params.groupAllowFrom,
|
|
432
|
-
runtime: params.runtime,
|
|
433
|
-
resolveTargets
|
|
434
|
-
}),
|
|
435
|
-
resolveMatrixMonitorRoomsConfig({
|
|
436
|
-
cfg: params.cfg,
|
|
437
|
-
accountId: params.accountId,
|
|
438
|
-
roomsConfig: params.roomsConfig,
|
|
439
|
-
runtime: params.runtime,
|
|
440
|
-
resolveTargets
|
|
441
|
-
})
|
|
442
|
-
]);
|
|
443
|
-
return {
|
|
444
|
-
allowFrom,
|
|
445
|
-
groupAllowFrom,
|
|
446
|
-
roomsConfig
|
|
447
|
-
};
|
|
448
|
-
}
|
|
449
|
-
//#endregion
|
|
450
|
-
//#region extensions/matrix/src/matrix/monitor/direct.ts
|
|
451
|
-
const DM_CACHE_TTL_MS = 3e4;
|
|
452
|
-
const RECENT_INVITE_TTL_MS = 3e4;
|
|
453
|
-
const MAX_TRACKED_DM_ROOMS = 1024;
|
|
454
|
-
const MAX_TRACKED_DM_MEMBER_FLAGS = 2048;
|
|
455
|
-
function rememberBounded$1(map, key, value, maxSize = MAX_TRACKED_DM_ROOMS) {
|
|
456
|
-
map.set(key, value);
|
|
457
|
-
if (map.size > maxSize) {
|
|
458
|
-
const oldest = map.keys().next().value;
|
|
459
|
-
if (typeof oldest === "string") map.delete(oldest);
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
function createDirectRoomTracker(client, opts = {}) {
|
|
463
|
-
const log = opts.log ?? (() => {});
|
|
464
|
-
let lastDmUpdateMs = 0;
|
|
465
|
-
let hasSeededDmCache = false;
|
|
466
|
-
let cachedSelfUserId = null;
|
|
467
|
-
const joinedMembersCache = /* @__PURE__ */ new Map();
|
|
468
|
-
const directMemberFlagCache = /* @__PURE__ */ new Map();
|
|
469
|
-
const recentInviteCandidates = /* @__PURE__ */ new Map();
|
|
470
|
-
const locallyPromotedDirectRooms = /* @__PURE__ */ new Map();
|
|
471
|
-
const ensureSelfUserId = async () => {
|
|
472
|
-
if (cachedSelfUserId) return cachedSelfUserId;
|
|
473
|
-
try {
|
|
474
|
-
cachedSelfUserId = await client.getUserId();
|
|
475
|
-
} catch {
|
|
476
|
-
cachedSelfUserId = null;
|
|
477
|
-
}
|
|
478
|
-
return cachedSelfUserId;
|
|
479
|
-
};
|
|
480
|
-
const refreshDmCache = async () => {
|
|
481
|
-
const now = Date.now();
|
|
482
|
-
if (now - lastDmUpdateMs < DM_CACHE_TTL_MS) return;
|
|
483
|
-
lastDmUpdateMs = now;
|
|
484
|
-
hasSeededDmCache = await client.dms.update() || hasSeededDmCache;
|
|
485
|
-
};
|
|
486
|
-
const resolveJoinedMembers = async (roomId) => {
|
|
487
|
-
const cached = joinedMembersCache.get(roomId);
|
|
488
|
-
const now = Date.now();
|
|
489
|
-
if (cached && now - cached.ts < DM_CACHE_TTL_MS) return cached.members;
|
|
490
|
-
try {
|
|
491
|
-
const normalized = await readJoinedMatrixMembers(client, roomId);
|
|
492
|
-
if (!normalized) throw new Error("membership unavailable");
|
|
493
|
-
rememberBounded$1(joinedMembersCache, roomId, {
|
|
494
|
-
members: normalized,
|
|
495
|
-
ts: now
|
|
496
|
-
});
|
|
497
|
-
return normalized;
|
|
498
|
-
} catch (err) {
|
|
499
|
-
log(`matrix: dm member lookup failed room=${roomId} (${String(err)})`);
|
|
500
|
-
return null;
|
|
501
|
-
}
|
|
502
|
-
};
|
|
503
|
-
const resolveDirectMemberFlag = async (roomId, userId) => {
|
|
504
|
-
const normalizedUserId = userId?.trim();
|
|
505
|
-
if (!normalizedUserId) return null;
|
|
506
|
-
const cacheKey = `${roomId}\n${normalizedUserId}`;
|
|
507
|
-
const cached = directMemberFlagCache.get(cacheKey);
|
|
508
|
-
const now = Date.now();
|
|
509
|
-
if (cached && now - cached.ts < DM_CACHE_TTL_MS) return cached.isDirect;
|
|
510
|
-
const isDirect = await hasDirectMatrixMemberFlag(client, roomId, normalizedUserId);
|
|
511
|
-
rememberBounded$1(directMemberFlagCache, cacheKey, {
|
|
512
|
-
isDirect,
|
|
513
|
-
ts: now
|
|
514
|
-
}, MAX_TRACKED_DM_MEMBER_FLAGS);
|
|
515
|
-
return isDirect;
|
|
516
|
-
};
|
|
517
|
-
const hasRecentInviteCandidate = (roomId, remoteUserId) => {
|
|
518
|
-
const normalizedRemoteUserId = remoteUserId?.trim();
|
|
519
|
-
if (!normalizedRemoteUserId) return false;
|
|
520
|
-
const cached = recentInviteCandidates.get(roomId);
|
|
521
|
-
if (!cached) return false;
|
|
522
|
-
if (Date.now() - cached.ts >= RECENT_INVITE_TTL_MS) {
|
|
523
|
-
recentInviteCandidates.delete(roomId);
|
|
524
|
-
return false;
|
|
525
|
-
}
|
|
526
|
-
return cached.remoteUserId === normalizedRemoteUserId;
|
|
527
|
-
};
|
|
528
|
-
const canPromoteRecentInvite = async (roomId) => {
|
|
529
|
-
try {
|
|
530
|
-
return await opts.canPromoteRecentInvite?.(roomId) ?? true;
|
|
531
|
-
} catch (err) {
|
|
532
|
-
log(`matrix: recent invite promotion veto failed room=${roomId} (${String(err)})`);
|
|
533
|
-
return false;
|
|
534
|
-
}
|
|
535
|
-
};
|
|
536
|
-
const shouldKeepLocallyPromotedDirectRoom = async (roomId) => {
|
|
537
|
-
try {
|
|
538
|
-
return await opts.shouldKeepLocallyPromotedDirectRoom?.(roomId);
|
|
539
|
-
} catch (err) {
|
|
540
|
-
log(`matrix: local promotion keep-check failed room=${roomId} (${String(err)})`);
|
|
541
|
-
return;
|
|
542
|
-
}
|
|
543
|
-
};
|
|
544
|
-
const hasLocallyPromotedDirectRoom = (roomId, remoteUserId) => {
|
|
545
|
-
const normalizedRemoteUserId = remoteUserId?.trim();
|
|
546
|
-
if (!normalizedRemoteUserId) return false;
|
|
547
|
-
return locallyPromotedDirectRooms.get(roomId)?.remoteUserId === normalizedRemoteUserId;
|
|
548
|
-
};
|
|
549
|
-
const rememberLocallyPromotedDirectRoom = (roomId, remoteUserId) => {
|
|
550
|
-
const normalizedRemoteUserId = remoteUserId.trim();
|
|
551
|
-
if (!normalizedRemoteUserId) return;
|
|
552
|
-
rememberBounded$1(locallyPromotedDirectRooms, roomId, { remoteUserId: normalizedRemoteUserId });
|
|
553
|
-
};
|
|
554
|
-
return {
|
|
555
|
-
invalidateRoom: (roomId) => {
|
|
556
|
-
joinedMembersCache.delete(roomId);
|
|
557
|
-
for (const key of directMemberFlagCache.keys()) if (key.startsWith(`${roomId}\n`)) directMemberFlagCache.delete(key);
|
|
558
|
-
lastDmUpdateMs = 0;
|
|
559
|
-
log(`matrix: invalidated dm cache room=${roomId}`);
|
|
560
|
-
},
|
|
561
|
-
rememberInvite: (roomId, remoteUserId) => {
|
|
562
|
-
const normalizedRemoteUserId = remoteUserId.trim();
|
|
563
|
-
if (!normalizedRemoteUserId) return;
|
|
564
|
-
rememberBounded$1(recentInviteCandidates, roomId, {
|
|
565
|
-
remoteUserId: normalizedRemoteUserId,
|
|
566
|
-
ts: Date.now()
|
|
567
|
-
});
|
|
568
|
-
log(`matrix: remembered invite candidate room=${roomId} sender=${normalizedRemoteUserId}`);
|
|
569
|
-
},
|
|
570
|
-
isDirectMessage: async (params) => {
|
|
571
|
-
const { roomId, senderId } = params;
|
|
572
|
-
const selfUserId = params.selfUserId ?? await ensureSelfUserId();
|
|
573
|
-
const joinedMembers = await resolveJoinedMembers(roomId);
|
|
574
|
-
const strictDirectMembership = isStrictDirectMembership({
|
|
575
|
-
selfUserId,
|
|
576
|
-
remoteUserId: senderId,
|
|
577
|
-
joinedMembers
|
|
578
|
-
});
|
|
579
|
-
try {
|
|
580
|
-
await refreshDmCache();
|
|
581
|
-
} catch (err) {
|
|
582
|
-
log(`matrix: dm cache refresh failed (${String(err)})`);
|
|
583
|
-
}
|
|
584
|
-
if (client.dms.isDm(roomId)) {
|
|
585
|
-
if (strictDirectMembership) {
|
|
586
|
-
log(`matrix: dm detected via m.direct room=${roomId}`);
|
|
587
|
-
return true;
|
|
588
|
-
}
|
|
589
|
-
log(`matrix: ignoring stale m.direct classification room=${roomId}`);
|
|
590
|
-
}
|
|
591
|
-
if (strictDirectMembership) {
|
|
592
|
-
const directViaSelf = await resolveDirectMemberFlag(roomId, selfUserId);
|
|
593
|
-
if (directViaSelf === true) {
|
|
594
|
-
log(`matrix: dm detected via member state room=${roomId}`);
|
|
595
|
-
return true;
|
|
596
|
-
}
|
|
597
|
-
if (directViaSelf === false) {
|
|
598
|
-
log(`matrix: dm rejected via member state room=${roomId}`);
|
|
599
|
-
return false;
|
|
600
|
-
}
|
|
601
|
-
if (!hasSeededDmCache) {
|
|
602
|
-
log(`matrix: dm detected via exact 2-member fallback before dm cache seed room=${roomId}`);
|
|
603
|
-
return true;
|
|
604
|
-
}
|
|
605
|
-
if (hasLocallyPromotedDirectRoom(roomId, senderId)) {
|
|
606
|
-
if (await shouldKeepLocallyPromotedDirectRoom(roomId) !== false) {
|
|
607
|
-
log(`matrix: dm detected via local promotion room=${roomId}`);
|
|
608
|
-
return true;
|
|
609
|
-
}
|
|
610
|
-
locallyPromotedDirectRooms.delete(roomId);
|
|
611
|
-
log(`matrix: local promotion cleared room=${roomId}`);
|
|
612
|
-
}
|
|
613
|
-
if (hasRecentInviteCandidate(roomId, senderId) && await canPromoteRecentInvite(roomId)) {
|
|
614
|
-
const promotion = await promoteMatrixDirectRoomCandidate({
|
|
615
|
-
client,
|
|
616
|
-
remoteUserId: senderId ?? "",
|
|
617
|
-
roomId,
|
|
618
|
-
selfUserId
|
|
619
|
-
});
|
|
620
|
-
if (promotion.classifyAsDirect) {
|
|
621
|
-
rememberLocallyPromotedDirectRoom(roomId, senderId ?? "");
|
|
622
|
-
log(`matrix: dm detected via recent invite room=${roomId} reason=${promotion.reason} repaired=${String(promotion.repaired)}`);
|
|
623
|
-
return true;
|
|
624
|
-
}
|
|
625
|
-
}
|
|
626
|
-
}
|
|
627
|
-
log(`matrix: dm check room=${roomId} result=group members=${joinedMembers?.length ?? "unknown"}`);
|
|
628
|
-
return false;
|
|
629
|
-
}
|
|
630
|
-
};
|
|
631
|
-
}
|
|
632
|
-
//#endregion
|
|
633
|
-
//#region extensions/matrix/src/matrix/monitor/types.ts
|
|
634
|
-
const EventType = {
|
|
635
|
-
RoomMessage: "m.room.message",
|
|
636
|
-
RoomMessageEncrypted: "m.room.encrypted",
|
|
637
|
-
RoomMember: "m.room.member",
|
|
638
|
-
Location: "m.location",
|
|
639
|
-
Reaction: MATRIX_REACTION_EVENT_TYPE
|
|
640
|
-
};
|
|
641
|
-
const RelationType = {
|
|
642
|
-
Replace: "m.replace",
|
|
643
|
-
Thread: "m.thread"
|
|
644
|
-
};
|
|
645
|
-
//#endregion
|
|
646
|
-
//#region extensions/matrix/src/matrix/monitor/access-state.ts
|
|
647
|
-
function resolveMatrixMonitorAccessState(params) {
|
|
648
|
-
const effectiveAllowFrom = normalizeMatrixAllowList([...params.allowFrom, ...params.storeAllowFrom]);
|
|
649
|
-
const effectiveGroupAllowFrom = normalizeMatrixAllowList(params.groupAllowFrom);
|
|
650
|
-
const effectiveRoomUsers = normalizeMatrixAllowList(params.roomUsers);
|
|
651
|
-
const directAllowMatch = resolveMatrixAllowListMatch({
|
|
652
|
-
allowList: effectiveAllowFrom,
|
|
653
|
-
userId: params.senderId
|
|
654
|
-
});
|
|
655
|
-
const roomUserMatch = params.isRoom && effectiveRoomUsers.length > 0 ? resolveMatrixAllowListMatch({
|
|
656
|
-
allowList: effectiveRoomUsers,
|
|
657
|
-
userId: params.senderId
|
|
658
|
-
}) : null;
|
|
659
|
-
const groupAllowMatch = effectiveGroupAllowFrom.length > 0 ? resolveMatrixAllowListMatch({
|
|
660
|
-
allowList: effectiveGroupAllowFrom,
|
|
661
|
-
userId: params.senderId
|
|
662
|
-
}) : null;
|
|
663
|
-
return {
|
|
664
|
-
effectiveAllowFrom,
|
|
665
|
-
effectiveGroupAllowFrom,
|
|
666
|
-
effectiveRoomUsers,
|
|
667
|
-
groupAllowConfigured: effectiveGroupAllowFrom.length > 0,
|
|
668
|
-
directAllowMatch,
|
|
669
|
-
roomUserMatch,
|
|
670
|
-
groupAllowMatch,
|
|
671
|
-
commandAuthorizers: [
|
|
672
|
-
{
|
|
673
|
-
configured: effectiveAllowFrom.length > 0,
|
|
674
|
-
allowed: directAllowMatch.allowed
|
|
675
|
-
},
|
|
676
|
-
{
|
|
677
|
-
configured: effectiveRoomUsers.length > 0,
|
|
678
|
-
allowed: roomUserMatch?.allowed ?? false
|
|
679
|
-
},
|
|
680
|
-
{
|
|
681
|
-
configured: effectiveGroupAllowFrom.length > 0,
|
|
682
|
-
allowed: groupAllowMatch?.allowed ?? false
|
|
683
|
-
}
|
|
684
|
-
]
|
|
685
|
-
};
|
|
686
|
-
}
|
|
687
|
-
//#endregion
|
|
688
|
-
//#region extensions/matrix/src/matrix/monitor/verification-utils.ts
|
|
689
|
-
const VERIFICATION_EVENT_PREFIX = "m.key.verification.";
|
|
690
|
-
const VERIFICATION_REQUEST_MSGTYPE = "m.key.verification.request";
|
|
691
|
-
const VERIFICATION_NOTICE_PREFIXES = [
|
|
692
|
-
"Matrix verification request received from ",
|
|
693
|
-
"Matrix verification is ready with ",
|
|
694
|
-
"Matrix verification started with ",
|
|
695
|
-
"Matrix verification completed with ",
|
|
696
|
-
"Matrix verification cancelled by ",
|
|
697
|
-
"Matrix verification SAS with "
|
|
698
|
-
];
|
|
699
|
-
function trimMaybeString$1(input) {
|
|
700
|
-
return typeof input === "string" ? input.trim() : "";
|
|
701
|
-
}
|
|
702
|
-
function isMatrixVerificationEventType(type) {
|
|
703
|
-
return trimMaybeString$1(type).startsWith(VERIFICATION_EVENT_PREFIX);
|
|
704
|
-
}
|
|
705
|
-
function isMatrixVerificationRequestMsgType(msgtype) {
|
|
706
|
-
return trimMaybeString$1(msgtype) === VERIFICATION_REQUEST_MSGTYPE;
|
|
707
|
-
}
|
|
708
|
-
function isMatrixVerificationNoticeBody(body) {
|
|
709
|
-
const text = trimMaybeString$1(body);
|
|
710
|
-
return VERIFICATION_NOTICE_PREFIXES.some((prefix) => text.startsWith(prefix));
|
|
711
|
-
}
|
|
712
|
-
function isMatrixVerificationRoomMessage(content) {
|
|
713
|
-
return isMatrixVerificationRequestMsgType(content.msgtype) || trimMaybeString$1(content.msgtype) === "m.notice" && isMatrixVerificationNoticeBody(content.body);
|
|
714
|
-
}
|
|
715
|
-
const matrixVerificationConstants = {
|
|
716
|
-
eventPrefix: VERIFICATION_EVENT_PREFIX,
|
|
717
|
-
requestMsgtype: VERIFICATION_REQUEST_MSGTYPE
|
|
718
|
-
};
|
|
719
|
-
//#endregion
|
|
720
|
-
//#region extensions/matrix/src/matrix/monitor/verification-events.ts
|
|
721
|
-
const MAX_TRACKED_VERIFICATION_EVENTS = 1024;
|
|
722
|
-
const SAS_NOTICE_RETRY_DELAY_MS = 750;
|
|
723
|
-
const VERIFICATION_EVENT_STARTUP_GRACE_MS = 3e4;
|
|
724
|
-
let matrixDirectRoomDepsPromise;
|
|
725
|
-
async function loadMatrixDirectRoomDeps() {
|
|
726
|
-
matrixDirectRoomDepsPromise ??= Promise.all([import("./direct-management-DEtuCcDL.js"), import("./direct-room-ARYWsCbX.js")]).then(([directManagementModule, directRoomModule]) => ({
|
|
727
|
-
inspectMatrixDirectRooms: directManagementModule.inspectMatrixDirectRooms,
|
|
728
|
-
isStrictDirectRoom: directRoomModule.isStrictDirectRoom
|
|
729
|
-
}));
|
|
730
|
-
return await matrixDirectRoomDepsPromise;
|
|
731
|
-
}
|
|
732
|
-
function trimMaybeString(input) {
|
|
733
|
-
if (typeof input !== "string") return null;
|
|
734
|
-
const trimmed = input.trim();
|
|
735
|
-
return trimmed.length > 0 ? trimmed : null;
|
|
736
|
-
}
|
|
737
|
-
function readVerificationSignal(event) {
|
|
738
|
-
const type = trimMaybeString(event?.type) ?? "";
|
|
739
|
-
const content = event?.content ?? {};
|
|
740
|
-
const msgtype = trimMaybeString(content.msgtype) ?? "";
|
|
741
|
-
const relatedEventId = trimMaybeString(content["m.relates_to"]?.event_id);
|
|
742
|
-
const transactionId = trimMaybeString(content.transaction_id);
|
|
743
|
-
if (type === EventType.RoomMessage && isMatrixVerificationRequestMsgType(msgtype)) return {
|
|
744
|
-
stage: "request",
|
|
745
|
-
flowId: trimMaybeString(event.event_id) ?? transactionId ?? relatedEventId
|
|
746
|
-
};
|
|
747
|
-
if (!isMatrixVerificationEventType(type)) return null;
|
|
748
|
-
const flowId = transactionId ?? relatedEventId ?? trimMaybeString(event.event_id);
|
|
749
|
-
if (type === `${matrixVerificationConstants.eventPrefix}request`) return {
|
|
750
|
-
stage: "request",
|
|
751
|
-
flowId
|
|
752
|
-
};
|
|
753
|
-
if (type === `${matrixVerificationConstants.eventPrefix}ready`) return {
|
|
754
|
-
stage: "ready",
|
|
755
|
-
flowId
|
|
756
|
-
};
|
|
757
|
-
if (type === "m.key.verification.start") return {
|
|
758
|
-
stage: "start",
|
|
759
|
-
flowId
|
|
760
|
-
};
|
|
761
|
-
if (type === "m.key.verification.cancel") return {
|
|
762
|
-
stage: "cancel",
|
|
763
|
-
flowId
|
|
764
|
-
};
|
|
765
|
-
if (type === "m.key.verification.done") return {
|
|
766
|
-
stage: "done",
|
|
767
|
-
flowId
|
|
768
|
-
};
|
|
769
|
-
return {
|
|
770
|
-
stage: "other",
|
|
771
|
-
flowId
|
|
772
|
-
};
|
|
773
|
-
}
|
|
774
|
-
function formatVerificationStageNotice(params) {
|
|
775
|
-
const { stage, senderId, event } = params;
|
|
776
|
-
const content = event.content;
|
|
777
|
-
switch (stage) {
|
|
778
|
-
case "request": return `Matrix verification request received from ${senderId}. Open "Verify by emoji" in your Matrix client to continue.`;
|
|
779
|
-
case "ready": return `Matrix verification is ready with ${senderId}. Choose "Verify by emoji" to reveal the emoji sequence.`;
|
|
780
|
-
case "start": return `Matrix verification started with ${senderId}.`;
|
|
781
|
-
case "done": return `Matrix verification completed with ${senderId}.`;
|
|
782
|
-
case "cancel": {
|
|
783
|
-
const code = trimMaybeString(content.code);
|
|
784
|
-
const reason = trimMaybeString(content.reason);
|
|
785
|
-
if (code && reason) return `Matrix verification cancelled by ${senderId} (${code}: ${reason}).`;
|
|
786
|
-
if (reason) return `Matrix verification cancelled by ${senderId} (${reason}).`;
|
|
787
|
-
return `Matrix verification cancelled by ${senderId}.`;
|
|
788
|
-
}
|
|
789
|
-
default: return null;
|
|
790
|
-
}
|
|
791
|
-
}
|
|
792
|
-
function formatVerificationSasNotice(summary) {
|
|
793
|
-
const sas = summary.sas;
|
|
794
|
-
if (!sas) return null;
|
|
795
|
-
const emojiLine = Array.isArray(sas.emoji) && sas.emoji.length > 0 ? `SAS emoji: ${sas.emoji.map(([emoji, name]) => `${trimMaybeString(emoji) ?? "?"} ${trimMaybeString(name) ?? "?"}`).join(" | ")}` : null;
|
|
796
|
-
const decimalLine = Array.isArray(sas.decimal) && sas.decimal.length === 3 ? `SAS decimal: ${sas.decimal.join(" ")}` : null;
|
|
797
|
-
if (!emojiLine && !decimalLine) return null;
|
|
798
|
-
const lines = [`Matrix verification SAS with ${summary.otherUserId}:`];
|
|
799
|
-
if (emojiLine) lines.push(emojiLine);
|
|
800
|
-
if (decimalLine) lines.push(decimalLine);
|
|
801
|
-
lines.push("If both sides match, choose 'They match' in your Matrix app.");
|
|
802
|
-
return lines.join("\n");
|
|
803
|
-
}
|
|
804
|
-
function resolveVerificationFlowCandidates(params) {
|
|
805
|
-
const { event, flowId } = params;
|
|
806
|
-
const content = event.content;
|
|
807
|
-
const candidates = /* @__PURE__ */ new Set();
|
|
808
|
-
const add = (value) => {
|
|
809
|
-
const normalized = trimMaybeString(value);
|
|
810
|
-
if (normalized) candidates.add(normalized);
|
|
811
|
-
};
|
|
812
|
-
add(flowId);
|
|
813
|
-
add(event.event_id);
|
|
814
|
-
add(content.transaction_id);
|
|
815
|
-
add(content["m.relates_to"]?.event_id);
|
|
816
|
-
return Array.from(candidates);
|
|
817
|
-
}
|
|
818
|
-
function resolveSummaryRecency(summary) {
|
|
819
|
-
const ts = Date.parse(summary.updatedAt ?? "");
|
|
820
|
-
return Number.isFinite(ts) ? ts : 0;
|
|
821
|
-
}
|
|
822
|
-
function isActiveVerificationSummary(summary) {
|
|
823
|
-
if (summary.completed === true) return false;
|
|
824
|
-
if (summary.phaseName === "cancelled" || summary.phaseName === "done") return false;
|
|
825
|
-
if (typeof summary.phase === "number" && summary.phase >= 4) return false;
|
|
826
|
-
return true;
|
|
827
|
-
}
|
|
828
|
-
async function resolveVerificationSummaryForSignal(client, params) {
|
|
829
|
-
if (!client.crypto) return null;
|
|
830
|
-
await client.crypto.ensureVerificationDmTracked({
|
|
831
|
-
roomId: params.roomId,
|
|
832
|
-
userId: params.senderId
|
|
833
|
-
}).catch(() => null);
|
|
834
|
-
const list = await client.crypto.listVerifications();
|
|
835
|
-
if (list.length === 0) return null;
|
|
836
|
-
const candidates = resolveVerificationFlowCandidates({
|
|
837
|
-
event: params.event,
|
|
838
|
-
flowId: params.flowId
|
|
839
|
-
});
|
|
840
|
-
const byTransactionId = list.find((entry) => candidates.some((candidate) => entry.transactionId === candidate));
|
|
841
|
-
if (byTransactionId) return byTransactionId;
|
|
842
|
-
const { inspectMatrixDirectRooms, isStrictDirectRoom } = await loadMatrixDirectRoomDeps();
|
|
843
|
-
const activeRoomId = trimMaybeString((await inspectMatrixDirectRooms({
|
|
844
|
-
client,
|
|
845
|
-
remoteUserId: params.senderId
|
|
846
|
-
}).catch(() => null))?.activeRoomId);
|
|
847
|
-
if (activeRoomId) {
|
|
848
|
-
if (activeRoomId !== params.roomId) return null;
|
|
849
|
-
} else if (!await isStrictDirectRoom({
|
|
850
|
-
client,
|
|
851
|
-
roomId: params.roomId,
|
|
852
|
-
remoteUserId: params.senderId
|
|
853
|
-
})) return null;
|
|
854
|
-
const activeByUser = list.filter((entry) => entry.otherUserId === params.senderId && isActiveVerificationSummary(entry)).sort((a, b) => resolveSummaryRecency(b) - resolveSummaryRecency(a));
|
|
855
|
-
const activeInRoom = activeByUser.filter((entry) => {
|
|
856
|
-
return trimMaybeString(entry.roomId) === params.roomId;
|
|
857
|
-
});
|
|
858
|
-
if (activeInRoom.length > 0) return activeInRoom[0] ?? null;
|
|
859
|
-
return activeByUser[0] ?? null;
|
|
860
|
-
}
|
|
861
|
-
async function resolveVerificationSasNoticeForSignal(client, params) {
|
|
862
|
-
const summary = await resolveVerificationSummaryForSignal(client, params);
|
|
863
|
-
const immediateNotice = summary && isActiveVerificationSummary(summary) ? formatVerificationSasNotice(summary) : null;
|
|
864
|
-
if (immediateNotice || params.stage !== "ready" && params.stage !== "start") return {
|
|
865
|
-
summary,
|
|
866
|
-
sasNotice: immediateNotice
|
|
867
|
-
};
|
|
868
|
-
await new Promise((resolve) => setTimeout(resolve, SAS_NOTICE_RETRY_DELAY_MS));
|
|
869
|
-
const retriedSummary = await resolveVerificationSummaryForSignal(client, params);
|
|
870
|
-
return {
|
|
871
|
-
summary: retriedSummary,
|
|
872
|
-
sasNotice: retriedSummary && isActiveVerificationSummary(retriedSummary) ? formatVerificationSasNotice(retriedSummary) : null
|
|
873
|
-
};
|
|
874
|
-
}
|
|
875
|
-
function trackBounded(set, value) {
|
|
876
|
-
if (!value || set.has(value)) return false;
|
|
877
|
-
set.add(value);
|
|
878
|
-
if (set.size > MAX_TRACKED_VERIFICATION_EVENTS) {
|
|
879
|
-
const oldest = set.values().next().value;
|
|
880
|
-
if (typeof oldest === "string") set.delete(oldest);
|
|
881
|
-
}
|
|
882
|
-
return true;
|
|
883
|
-
}
|
|
884
|
-
async function sendVerificationNotice(params) {
|
|
885
|
-
const roomId = trimMaybeString(params.roomId);
|
|
886
|
-
if (!roomId) return;
|
|
887
|
-
try {
|
|
888
|
-
await params.client.sendMessage(roomId, {
|
|
889
|
-
msgtype: "m.notice",
|
|
890
|
-
body: params.body
|
|
891
|
-
});
|
|
892
|
-
} catch (err) {
|
|
893
|
-
params.logVerboseMessage(`matrix: failed sending verification notice room=${roomId}: ${String(err)}`);
|
|
894
|
-
}
|
|
895
|
-
}
|
|
896
|
-
async function isVerificationNoticeAuthorized(params) {
|
|
897
|
-
if (!params.dmEnabled || params.dmPolicy === "disabled") {
|
|
898
|
-
params.logVerboseMessage(`matrix: blocked verification sender ${params.senderId} (dmPolicy=${params.dmPolicy}, dmEnabled=${String(params.dmEnabled)})`);
|
|
899
|
-
return false;
|
|
900
|
-
}
|
|
901
|
-
if (params.dmPolicy === "open") return true;
|
|
902
|
-
const storeAllowFrom = await params.readStoreAllowFrom();
|
|
903
|
-
if (resolveMatrixMonitorAccessState({
|
|
904
|
-
allowFrom: params.allowFrom,
|
|
905
|
-
storeAllowFrom,
|
|
906
|
-
groupAllowFrom: [],
|
|
907
|
-
roomUsers: [],
|
|
908
|
-
senderId: params.senderId,
|
|
909
|
-
isRoom: false
|
|
910
|
-
}).directAllowMatch.allowed) return true;
|
|
911
|
-
params.logVerboseMessage(`matrix: blocked verification sender ${params.senderId} (dmPolicy=${params.dmPolicy})`);
|
|
912
|
-
return false;
|
|
913
|
-
}
|
|
914
|
-
function createMatrixVerificationEventRouter(params) {
|
|
915
|
-
const routerStartedAtMs = Date.now();
|
|
916
|
-
const routedVerificationEvents = /* @__PURE__ */ new Set();
|
|
917
|
-
const routedVerificationSasFingerprints = /* @__PURE__ */ new Set();
|
|
918
|
-
const routedVerificationStageNotices = /* @__PURE__ */ new Set();
|
|
919
|
-
const verificationFlowRooms = /* @__PURE__ */ new Map();
|
|
920
|
-
const verificationUserRooms = /* @__PURE__ */ new Map();
|
|
921
|
-
async function resolveActiveDirectRoomId(remoteUserId) {
|
|
922
|
-
const { inspectMatrixDirectRooms } = await loadMatrixDirectRoomDeps();
|
|
923
|
-
return trimMaybeString((await inspectMatrixDirectRooms({
|
|
924
|
-
client: params.client,
|
|
925
|
-
remoteUserId
|
|
926
|
-
}).catch(() => null))?.activeRoomId);
|
|
927
|
-
}
|
|
928
|
-
function shouldEmitVerificationEventNotice(event) {
|
|
929
|
-
const eventTs = typeof event.origin_server_ts === "number" && Number.isFinite(event.origin_server_ts) ? event.origin_server_ts : null;
|
|
930
|
-
if (eventTs === null) return true;
|
|
931
|
-
return eventTs >= routerStartedAtMs - VERIFICATION_EVENT_STARTUP_GRACE_MS;
|
|
932
|
-
}
|
|
933
|
-
function rememberVerificationRoom(roomId, event, flowId) {
|
|
934
|
-
for (const candidate of resolveVerificationFlowCandidates({
|
|
935
|
-
event,
|
|
936
|
-
flowId
|
|
937
|
-
})) {
|
|
938
|
-
verificationFlowRooms.set(candidate, roomId);
|
|
939
|
-
if (verificationFlowRooms.size > MAX_TRACKED_VERIFICATION_EVENTS) {
|
|
940
|
-
const oldest = verificationFlowRooms.keys().next().value;
|
|
941
|
-
if (typeof oldest === "string") verificationFlowRooms.delete(oldest);
|
|
942
|
-
}
|
|
943
|
-
}
|
|
944
|
-
}
|
|
945
|
-
function rememberVerificationUserRoom(remoteUserId, roomId) {
|
|
946
|
-
const normalizedUserId = trimMaybeString(remoteUserId);
|
|
947
|
-
const normalizedRoomId = trimMaybeString(roomId);
|
|
948
|
-
if (!normalizedUserId || !normalizedRoomId) return;
|
|
949
|
-
verificationUserRooms.delete(normalizedUserId);
|
|
950
|
-
verificationUserRooms.set(normalizedUserId, normalizedRoomId);
|
|
951
|
-
if (verificationUserRooms.size > MAX_TRACKED_VERIFICATION_EVENTS) {
|
|
952
|
-
const oldest = verificationUserRooms.keys().next().value;
|
|
953
|
-
if (typeof oldest === "string") verificationUserRooms.delete(oldest);
|
|
954
|
-
}
|
|
955
|
-
}
|
|
956
|
-
async function resolveSummaryRoomId(summary) {
|
|
957
|
-
const mappedRoomId = trimMaybeString(summary.roomId) ?? trimMaybeString(summary.transactionId ? verificationFlowRooms.get(summary.transactionId) : null) ?? trimMaybeString(verificationFlowRooms.get(summary.id));
|
|
958
|
-
if (mappedRoomId) return mappedRoomId;
|
|
959
|
-
const remoteUserId = trimMaybeString(summary.otherUserId);
|
|
960
|
-
if (!remoteUserId) return null;
|
|
961
|
-
const recentRoomId = trimMaybeString(verificationUserRooms.get(remoteUserId));
|
|
962
|
-
const activeRoomId = await resolveActiveDirectRoomId(remoteUserId);
|
|
963
|
-
if (recentRoomId && activeRoomId && recentRoomId === activeRoomId) return recentRoomId;
|
|
964
|
-
if (activeRoomId) return activeRoomId;
|
|
965
|
-
if (recentRoomId && await (await loadMatrixDirectRoomDeps()).isStrictDirectRoom({
|
|
966
|
-
client: params.client,
|
|
967
|
-
roomId: recentRoomId,
|
|
968
|
-
remoteUserId
|
|
969
|
-
})) return recentRoomId;
|
|
970
|
-
return null;
|
|
971
|
-
}
|
|
972
|
-
async function routeVerificationSummary(summary) {
|
|
973
|
-
const roomId = await resolveSummaryRoomId(summary);
|
|
974
|
-
if (!roomId || !isActiveVerificationSummary(summary)) return;
|
|
975
|
-
if (!await (await loadMatrixDirectRoomDeps()).isStrictDirectRoom({
|
|
976
|
-
client: params.client,
|
|
977
|
-
roomId,
|
|
978
|
-
remoteUserId: summary.otherUserId
|
|
979
|
-
})) {
|
|
980
|
-
params.logVerboseMessage(`matrix: ignoring verification summary outside strict DM room=${roomId} sender=${summary.otherUserId}`);
|
|
981
|
-
return;
|
|
982
|
-
}
|
|
983
|
-
if (!await isVerificationNoticeAuthorized({
|
|
984
|
-
senderId: summary.otherUserId,
|
|
985
|
-
allowFrom: params.allowFrom,
|
|
986
|
-
dmEnabled: params.dmEnabled,
|
|
987
|
-
dmPolicy: params.dmPolicy,
|
|
988
|
-
readStoreAllowFrom: params.readStoreAllowFrom,
|
|
989
|
-
logVerboseMessage: params.logVerboseMessage
|
|
990
|
-
})) return;
|
|
991
|
-
const sasNotice = formatVerificationSasNotice(summary);
|
|
992
|
-
if (!sasNotice) return;
|
|
993
|
-
if (!trackBounded(routedVerificationSasFingerprints, `${summary.id}:${JSON.stringify(summary.sas)}`)) return;
|
|
994
|
-
await sendVerificationNotice({
|
|
995
|
-
client: params.client,
|
|
996
|
-
roomId,
|
|
997
|
-
body: sasNotice,
|
|
998
|
-
logVerboseMessage: params.logVerboseMessage
|
|
999
|
-
});
|
|
1000
|
-
}
|
|
1001
|
-
function routeVerificationEvent(roomId, event) {
|
|
1002
|
-
const senderId = trimMaybeString(event?.sender);
|
|
1003
|
-
if (!senderId) return false;
|
|
1004
|
-
const signal = readVerificationSignal(event);
|
|
1005
|
-
if (!signal) return false;
|
|
1006
|
-
rememberVerificationRoom(roomId, event, signal.flowId);
|
|
1007
|
-
(async () => {
|
|
1008
|
-
if (!shouldEmitVerificationEventNotice(event)) {
|
|
1009
|
-
params.logVerboseMessage(`matrix: ignoring historical verification event room=${roomId} id=${event.event_id ?? "unknown"} type=${event.type ?? "unknown"}`);
|
|
1010
|
-
return;
|
|
1011
|
-
}
|
|
1012
|
-
const flowId = signal.flowId;
|
|
1013
|
-
const sourceFingerprint = trimMaybeString(event?.event_id) ?? `${senderId}:${event.type}:${flowId ?? "none"}`;
|
|
1014
|
-
if (!await (await loadMatrixDirectRoomDeps()).isStrictDirectRoom({
|
|
1015
|
-
client: params.client,
|
|
1016
|
-
roomId,
|
|
1017
|
-
remoteUserId: senderId
|
|
1018
|
-
})) {
|
|
1019
|
-
params.logVerboseMessage(`matrix: ignoring verification event outside strict DM room=${roomId} sender=${senderId}`);
|
|
1020
|
-
return;
|
|
1021
|
-
}
|
|
1022
|
-
if (!await isVerificationNoticeAuthorized({
|
|
1023
|
-
senderId,
|
|
1024
|
-
allowFrom: params.allowFrom,
|
|
1025
|
-
dmEnabled: params.dmEnabled,
|
|
1026
|
-
dmPolicy: params.dmPolicy,
|
|
1027
|
-
readStoreAllowFrom: params.readStoreAllowFrom,
|
|
1028
|
-
logVerboseMessage: params.logVerboseMessage
|
|
1029
|
-
})) return;
|
|
1030
|
-
rememberVerificationUserRoom(senderId, roomId);
|
|
1031
|
-
if (!trackBounded(routedVerificationEvents, sourceFingerprint)) return;
|
|
1032
|
-
const stageNotice = formatVerificationStageNotice({
|
|
1033
|
-
stage: signal.stage,
|
|
1034
|
-
senderId,
|
|
1035
|
-
event
|
|
1036
|
-
});
|
|
1037
|
-
const { summary, sasNotice } = await resolveVerificationSasNoticeForSignal(params.client, {
|
|
1038
|
-
roomId,
|
|
1039
|
-
event,
|
|
1040
|
-
senderId,
|
|
1041
|
-
flowId,
|
|
1042
|
-
stage: signal.stage
|
|
1043
|
-
}).catch(() => ({
|
|
1044
|
-
summary: null,
|
|
1045
|
-
sasNotice: null
|
|
1046
|
-
}));
|
|
1047
|
-
const notices = [];
|
|
1048
|
-
if (stageNotice) {
|
|
1049
|
-
if (trackBounded(routedVerificationStageNotices, `${roomId}:${senderId}:${flowId ?? sourceFingerprint}:${signal.stage}`)) notices.push(stageNotice);
|
|
1050
|
-
}
|
|
1051
|
-
if (summary && sasNotice) {
|
|
1052
|
-
if (trackBounded(routedVerificationSasFingerprints, `${summary.id}:${JSON.stringify(summary.sas)}`)) notices.push(sasNotice);
|
|
1053
|
-
}
|
|
1054
|
-
if (notices.length === 0) return;
|
|
1055
|
-
for (const body of notices) await sendVerificationNotice({
|
|
1056
|
-
client: params.client,
|
|
1057
|
-
roomId,
|
|
1058
|
-
body,
|
|
1059
|
-
logVerboseMessage: params.logVerboseMessage
|
|
1060
|
-
});
|
|
1061
|
-
})().catch((err) => {
|
|
1062
|
-
params.logVerboseMessage(`matrix: failed routing verification event: ${String(err)}`);
|
|
1063
|
-
});
|
|
1064
|
-
return true;
|
|
1065
|
-
}
|
|
1066
|
-
return {
|
|
1067
|
-
routeVerificationEvent,
|
|
1068
|
-
routeVerificationSummary
|
|
1069
|
-
};
|
|
1070
|
-
}
|
|
1071
|
-
//#endregion
|
|
1072
|
-
//#region extensions/matrix/src/matrix/monitor/events.ts
|
|
1073
|
-
function formatMatrixSelfDecryptionHint(accountId) {
|
|
1074
|
-
return `matrix: failed to decrypt a message from this same Matrix user. This usually means another Matrix device did not share the room key, or another OpenClaw runtime is using the same account. Check 'openclaw matrix verify status --verbose --account ${accountId}' and 'openclaw matrix devices list --account ${accountId}'.`;
|
|
1075
|
-
}
|
|
1076
|
-
async function resolveMatrixSelfUserId(client, logVerboseMessage) {
|
|
1077
|
-
if (typeof client.getUserId !== "function") return null;
|
|
1078
|
-
try {
|
|
1079
|
-
return await client.getUserId() ?? null;
|
|
1080
|
-
} catch (err) {
|
|
1081
|
-
logVerboseMessage(`matrix: failed resolving self user id for decrypt warning: ${String(err)}`);
|
|
1082
|
-
return null;
|
|
1083
|
-
}
|
|
1084
|
-
}
|
|
1085
|
-
function registerMatrixMonitorEvents(params) {
|
|
1086
|
-
const { cfg, client, auth, allowFrom, dmEnabled, dmPolicy, readStoreAllowFrom, directTracker, logVerboseMessage, warnedEncryptedRooms, warnedCryptoMissingRooms, logger, formatNativeDependencyHint, onRoomMessage } = params;
|
|
1087
|
-
const { routeVerificationEvent, routeVerificationSummary } = createMatrixVerificationEventRouter({
|
|
1088
|
-
client,
|
|
1089
|
-
allowFrom,
|
|
1090
|
-
dmEnabled,
|
|
1091
|
-
dmPolicy,
|
|
1092
|
-
readStoreAllowFrom,
|
|
1093
|
-
logVerboseMessage
|
|
1094
|
-
});
|
|
1095
|
-
client.on("room.message", (roomId, event) => {
|
|
1096
|
-
if (routeVerificationEvent(roomId, event)) return;
|
|
1097
|
-
onRoomMessage(roomId, event);
|
|
1098
|
-
});
|
|
1099
|
-
client.on("room.encrypted_event", (roomId, event) => {
|
|
1100
|
-
const eventId = event?.event_id ?? "unknown";
|
|
1101
|
-
logVerboseMessage(`matrix: encrypted event room=${roomId} type=${event?.type ?? "unknown"} id=${eventId}`);
|
|
1102
|
-
});
|
|
1103
|
-
client.on("room.decrypted_event", (roomId, event) => {
|
|
1104
|
-
const eventId = event?.event_id ?? "unknown";
|
|
1105
|
-
logVerboseMessage(`matrix: decrypted event room=${roomId} type=${event?.type ?? "unknown"} id=${eventId}`);
|
|
1106
|
-
});
|
|
1107
|
-
client.on("room.failed_decryption", async (roomId, event, error) => {
|
|
1108
|
-
const selfUserId = await resolveMatrixSelfUserId(client, logVerboseMessage);
|
|
1109
|
-
const sender = typeof event.sender === "string" ? event.sender : null;
|
|
1110
|
-
const senderMatchesOwnUser = Boolean(selfUserId && sender && selfUserId === sender);
|
|
1111
|
-
logger.warn("Failed to decrypt message", {
|
|
1112
|
-
roomId,
|
|
1113
|
-
eventId: event.event_id,
|
|
1114
|
-
sender,
|
|
1115
|
-
senderMatchesOwnUser,
|
|
1116
|
-
error: error.message
|
|
1117
|
-
});
|
|
1118
|
-
if (senderMatchesOwnUser) logger.warn(formatMatrixSelfDecryptionHint(auth.accountId), {
|
|
1119
|
-
roomId,
|
|
1120
|
-
eventId: event.event_id,
|
|
1121
|
-
sender
|
|
1122
|
-
});
|
|
1123
|
-
logVerboseMessage(`matrix: failed decrypt room=${roomId} id=${event.event_id ?? "unknown"} error=${error.message}`);
|
|
1124
|
-
});
|
|
1125
|
-
client.on("verification.summary", (summary) => {
|
|
1126
|
-
routeVerificationSummary(summary);
|
|
1127
|
-
});
|
|
1128
|
-
client.on("room.invite", (roomId, event) => {
|
|
1129
|
-
directTracker?.invalidateRoom(roomId);
|
|
1130
|
-
const eventId = event?.event_id ?? "unknown";
|
|
1131
|
-
const sender = event?.sender ?? "unknown";
|
|
1132
|
-
const invitee = typeof event?.state_key === "string" ? event.state_key.trim() : "";
|
|
1133
|
-
const senderIsInvitee = typeof event?.sender === "string" && invitee && event.sender.trim() === invitee;
|
|
1134
|
-
const isDirect = (event?.content)?.is_direct === true;
|
|
1135
|
-
if (typeof event?.sender === "string" && event.sender.trim() && !senderIsInvitee) directTracker?.rememberInvite?.(roomId, event.sender);
|
|
1136
|
-
logVerboseMessage(`matrix: invite room=${roomId} sender=${sender} direct=${String(isDirect)} id=${eventId}`);
|
|
1137
|
-
});
|
|
1138
|
-
client.on("room.join", (roomId, event) => {
|
|
1139
|
-
directTracker?.invalidateRoom(roomId);
|
|
1140
|
-
logVerboseMessage(`matrix: join room=${roomId} id=${event?.event_id ?? "unknown"}`);
|
|
1141
|
-
});
|
|
1142
|
-
client.on("room.event", (roomId, event) => {
|
|
1143
|
-
const eventType = event?.type ?? "unknown";
|
|
1144
|
-
if (eventType === EventType.RoomMessageEncrypted) {
|
|
1145
|
-
logVerboseMessage(`matrix: encrypted raw event room=${roomId} id=${event?.event_id ?? "unknown"}`);
|
|
1146
|
-
if (auth.encryption !== true && !warnedEncryptedRooms.has(roomId)) {
|
|
1147
|
-
warnedEncryptedRooms.add(roomId);
|
|
1148
|
-
const warning = formatMatrixEncryptedEventDisabledWarning(cfg, auth.accountId);
|
|
1149
|
-
logger.warn(warning, { roomId });
|
|
1150
|
-
}
|
|
1151
|
-
if (auth.encryption === true && !client.crypto && !warnedCryptoMissingRooms.has(roomId)) {
|
|
1152
|
-
warnedCryptoMissingRooms.add(roomId);
|
|
1153
|
-
const warning = `matrix: encryption enabled but crypto is unavailable; ${formatNativeDependencyHint({
|
|
1154
|
-
packageName: "@matrix-org/matrix-sdk-crypto-nodejs",
|
|
1155
|
-
manager: "pnpm",
|
|
1156
|
-
downloadCommand: "node node_modules/@matrix-org/matrix-sdk-crypto-nodejs/download-lib.js"
|
|
1157
|
-
})}`;
|
|
1158
|
-
logger.warn(warning, { roomId });
|
|
1159
|
-
}
|
|
1160
|
-
return;
|
|
1161
|
-
}
|
|
1162
|
-
if (eventType === EventType.RoomMember) {
|
|
1163
|
-
directTracker?.invalidateRoom(roomId);
|
|
1164
|
-
const membership = (event?.content)?.membership;
|
|
1165
|
-
logVerboseMessage(`matrix: member event room=${roomId} stateKey=${event.state_key ?? ""} membership=${membership ?? "unknown"}`);
|
|
1166
|
-
}
|
|
1167
|
-
if (eventType === EventType.Reaction) {
|
|
1168
|
-
onRoomMessage(roomId, event);
|
|
1169
|
-
return;
|
|
1170
|
-
}
|
|
1171
|
-
routeVerificationEvent(roomId, event);
|
|
1172
|
-
});
|
|
1173
|
-
}
|
|
1174
|
-
//#endregion
|
|
1175
|
-
//#region extensions/matrix/src/matrix/draft-stream.ts
|
|
1176
|
-
const DEFAULT_THROTTLE_MS = 1e3;
|
|
1177
|
-
function createMatrixDraftStream(params) {
|
|
1178
|
-
const { roomId, client, cfg, threadId, accountId, log } = params;
|
|
1179
|
-
let currentEventId;
|
|
1180
|
-
let lastSentText = "";
|
|
1181
|
-
let stopped = false;
|
|
1182
|
-
let sendFailed = false;
|
|
1183
|
-
let finalizeInPlaceBlocked = false;
|
|
1184
|
-
let replyToId = params.replyToId;
|
|
1185
|
-
const sendOrEdit = async (text) => {
|
|
1186
|
-
const trimmed = text.trimEnd();
|
|
1187
|
-
if (!trimmed) return false;
|
|
1188
|
-
const preparedText = prepareMatrixSingleText(trimmed, {
|
|
1189
|
-
cfg,
|
|
1190
|
-
accountId
|
|
1191
|
-
});
|
|
1192
|
-
if (!preparedText.fitsInSingleEvent) {
|
|
1193
|
-
finalizeInPlaceBlocked = true;
|
|
1194
|
-
if (!currentEventId) sendFailed = true;
|
|
1195
|
-
stopped = true;
|
|
1196
|
-
log?.(`draft-stream: preview exceeded single-event limit (${preparedText.convertedText.length} > ${preparedText.singleEventLimit})`);
|
|
1197
|
-
return false;
|
|
1198
|
-
}
|
|
1199
|
-
if (sendFailed) return false;
|
|
1200
|
-
if (preparedText.trimmedText === lastSentText) return true;
|
|
1201
|
-
try {
|
|
1202
|
-
if (!currentEventId) {
|
|
1203
|
-
currentEventId = (await sendSingleTextMessageMatrix(roomId, preparedText.trimmedText, {
|
|
1204
|
-
client,
|
|
1205
|
-
cfg,
|
|
1206
|
-
replyToId,
|
|
1207
|
-
threadId,
|
|
1208
|
-
accountId
|
|
1209
|
-
})).messageId;
|
|
1210
|
-
lastSentText = preparedText.trimmedText;
|
|
1211
|
-
log?.(`draft-stream: created message ${currentEventId}`);
|
|
1212
|
-
} else {
|
|
1213
|
-
await editMessageMatrix(roomId, currentEventId, preparedText.trimmedText, {
|
|
1214
|
-
client,
|
|
1215
|
-
cfg,
|
|
1216
|
-
threadId,
|
|
1217
|
-
accountId
|
|
1218
|
-
});
|
|
1219
|
-
lastSentText = preparedText.trimmedText;
|
|
1220
|
-
}
|
|
1221
|
-
return true;
|
|
1222
|
-
} catch (err) {
|
|
1223
|
-
log?.(`draft-stream: send/edit failed: ${String(err)}`);
|
|
1224
|
-
if (err instanceof Error && err.message.startsWith("Matrix single-message text exceeds limit")) finalizeInPlaceBlocked = true;
|
|
1225
|
-
if (!currentEventId) sendFailed = true;
|
|
1226
|
-
stopped = true;
|
|
1227
|
-
return false;
|
|
1228
|
-
}
|
|
1229
|
-
};
|
|
1230
|
-
const loop = createDraftStreamLoop({
|
|
1231
|
-
throttleMs: DEFAULT_THROTTLE_MS,
|
|
1232
|
-
isStopped: () => stopped,
|
|
1233
|
-
sendOrEditStreamMessage: sendOrEdit
|
|
1234
|
-
});
|
|
1235
|
-
log?.(`draft-stream: ready (throttleMs=${DEFAULT_THROTTLE_MS})`);
|
|
1236
|
-
const stop = async () => {
|
|
1237
|
-
await loop.flush();
|
|
1238
|
-
stopped = true;
|
|
1239
|
-
return currentEventId;
|
|
1240
|
-
};
|
|
1241
|
-
const reset = () => {
|
|
1242
|
-
replyToId = params.preserveReplyId ? params.replyToId : void 0;
|
|
1243
|
-
currentEventId = void 0;
|
|
1244
|
-
lastSentText = "";
|
|
1245
|
-
stopped = false;
|
|
1246
|
-
sendFailed = false;
|
|
1247
|
-
finalizeInPlaceBlocked = false;
|
|
1248
|
-
loop.resetPending();
|
|
1249
|
-
loop.resetThrottleWindow();
|
|
1250
|
-
};
|
|
1251
|
-
return {
|
|
1252
|
-
update: (text) => {
|
|
1253
|
-
if (stopped) return;
|
|
1254
|
-
loop.update(text);
|
|
1255
|
-
},
|
|
1256
|
-
flush: loop.flush,
|
|
1257
|
-
stop,
|
|
1258
|
-
reset,
|
|
1259
|
-
eventId: () => currentEventId,
|
|
1260
|
-
lastSentText: () => lastSentText,
|
|
1261
|
-
mustDeliverFinalNormally: () => sendFailed || finalizeInPlaceBlocked
|
|
1262
|
-
};
|
|
1263
|
-
}
|
|
1264
|
-
//#endregion
|
|
1265
|
-
//#region extensions/matrix/src/matrix/monitor/ack-config.ts
|
|
1266
|
-
function resolveMatrixAckReactionConfig(params) {
|
|
1267
|
-
const matrixConfig = params.cfg.channels?.matrix;
|
|
1268
|
-
const accountConfig = resolveMatrixAccountConfig({
|
|
1269
|
-
cfg: params.cfg,
|
|
1270
|
-
accountId: params.accountId
|
|
1271
|
-
});
|
|
1272
|
-
return {
|
|
1273
|
-
ackReaction: resolveAckReaction(params.cfg, params.agentId, {
|
|
1274
|
-
channel: "matrix",
|
|
1275
|
-
accountId: params.accountId ?? void 0
|
|
1276
|
-
}).trim(),
|
|
1277
|
-
ackReactionScope: accountConfig.ackReactionScope ?? matrixConfig?.ackReactionScope ?? params.cfg.messages?.ackReactionScope ?? "group-mentions"
|
|
1278
|
-
};
|
|
1279
|
-
}
|
|
1280
|
-
//#endregion
|
|
1281
|
-
//#region extensions/matrix/src/matrix/monitor/location.ts
|
|
1282
|
-
function parseGeoUri(value) {
|
|
1283
|
-
const trimmed = value.trim();
|
|
1284
|
-
if (!trimmed) return null;
|
|
1285
|
-
if (!trimmed.toLowerCase().startsWith("geo:")) return null;
|
|
1286
|
-
const [coordsPart, ...paramParts] = trimmed.slice(4).split(";");
|
|
1287
|
-
const coords = coordsPart.split(",");
|
|
1288
|
-
if (coords.length < 2) return null;
|
|
1289
|
-
const latitude = Number.parseFloat(coords[0] ?? "");
|
|
1290
|
-
const longitude = Number.parseFloat(coords[1] ?? "");
|
|
1291
|
-
if (!Number.isFinite(latitude) || !Number.isFinite(longitude)) return null;
|
|
1292
|
-
const params = /* @__PURE__ */ new Map();
|
|
1293
|
-
for (const part of paramParts) {
|
|
1294
|
-
const segment = part.trim();
|
|
1295
|
-
if (!segment) continue;
|
|
1296
|
-
const eqIndex = segment.indexOf("=");
|
|
1297
|
-
const rawKey = eqIndex === -1 ? segment : segment.slice(0, eqIndex);
|
|
1298
|
-
const rawValue = eqIndex === -1 ? "" : segment.slice(eqIndex + 1);
|
|
1299
|
-
const key = rawKey.trim().toLowerCase();
|
|
1300
|
-
if (!key) continue;
|
|
1301
|
-
const valuePart = rawValue.trim();
|
|
1302
|
-
params.set(key, valuePart ? decodeURIComponent(valuePart) : "");
|
|
1303
|
-
}
|
|
1304
|
-
const accuracyRaw = params.get("u");
|
|
1305
|
-
const accuracy = accuracyRaw ? Number.parseFloat(accuracyRaw) : void 0;
|
|
1306
|
-
return {
|
|
1307
|
-
latitude,
|
|
1308
|
-
longitude,
|
|
1309
|
-
accuracy: Number.isFinite(accuracy) ? accuracy : void 0
|
|
1310
|
-
};
|
|
1311
|
-
}
|
|
1312
|
-
function resolveMatrixLocation(params) {
|
|
1313
|
-
const { eventType, content } = params;
|
|
1314
|
-
if (!(eventType === EventType.Location || eventType === EventType.RoomMessage && content.msgtype === EventType.Location)) return null;
|
|
1315
|
-
const geoUri = typeof content.geo_uri === "string" ? content.geo_uri.trim() : "";
|
|
1316
|
-
if (!geoUri) return null;
|
|
1317
|
-
const parsed = parseGeoUri(geoUri);
|
|
1318
|
-
if (!parsed) return null;
|
|
1319
|
-
const caption = typeof content.body === "string" ? content.body.trim() : "";
|
|
1320
|
-
const location = {
|
|
1321
|
-
latitude: parsed.latitude,
|
|
1322
|
-
longitude: parsed.longitude,
|
|
1323
|
-
accuracy: parsed.accuracy,
|
|
1324
|
-
caption: caption || void 0,
|
|
1325
|
-
source: "pin",
|
|
1326
|
-
isLive: false
|
|
1327
|
-
};
|
|
1328
|
-
return {
|
|
1329
|
-
text: formatLocationText(location),
|
|
1330
|
-
context: toLocationContext(location)
|
|
1331
|
-
};
|
|
1332
|
-
}
|
|
1333
|
-
//#endregion
|
|
1334
|
-
//#region extensions/matrix/src/matrix/monitor/media.ts
|
|
1335
|
-
const MATRIX_MEDIA_DOWNLOAD_IDLE_TIMEOUT_MS = 3e4;
|
|
1336
|
-
async function fetchMatrixMediaBuffer(params) {
|
|
1337
|
-
try {
|
|
1338
|
-
return { buffer: await params.client.downloadContent(params.mxcUrl, {
|
|
1339
|
-
maxBytes: params.maxBytes,
|
|
1340
|
-
readIdleTimeoutMs: MATRIX_MEDIA_DOWNLOAD_IDLE_TIMEOUT_MS
|
|
1341
|
-
}) };
|
|
1342
|
-
} catch (err) {
|
|
1343
|
-
throw new Error(`Matrix media download failed: ${String(err)}`, { cause: err });
|
|
1344
|
-
}
|
|
1345
|
-
}
|
|
1346
|
-
/**
|
|
1347
|
-
* Download and decrypt encrypted media from a Matrix room.
|
|
1348
|
-
* Uses the Matrix crypto adapter's decryptMedia helper.
|
|
1349
|
-
*/
|
|
1350
|
-
async function fetchEncryptedMediaBuffer(params) {
|
|
1351
|
-
if (!params.client.crypto) throw new Error("Cannot decrypt media: crypto not enabled");
|
|
1352
|
-
const decrypted = await params.client.crypto.decryptMedia(params.file, {
|
|
1353
|
-
maxBytes: params.maxBytes,
|
|
1354
|
-
readIdleTimeoutMs: MATRIX_MEDIA_DOWNLOAD_IDLE_TIMEOUT_MS
|
|
1355
|
-
});
|
|
1356
|
-
if (decrypted.byteLength > params.maxBytes) throw new Error("Matrix media exceeds configured size limit");
|
|
1357
|
-
return { buffer: decrypted };
|
|
1358
|
-
}
|
|
1359
|
-
async function downloadMatrixMedia(params) {
|
|
1360
|
-
let fetched;
|
|
1361
|
-
if (typeof params.sizeBytes === "number" && params.sizeBytes > params.maxBytes) throw new Error("Matrix media exceeds configured size limit");
|
|
1362
|
-
if (params.file) fetched = await fetchEncryptedMediaBuffer({
|
|
1363
|
-
client: params.client,
|
|
1364
|
-
file: params.file,
|
|
1365
|
-
maxBytes: params.maxBytes
|
|
1366
|
-
});
|
|
1367
|
-
else fetched = await fetchMatrixMediaBuffer({
|
|
1368
|
-
client: params.client,
|
|
1369
|
-
mxcUrl: params.mxcUrl,
|
|
1370
|
-
maxBytes: params.maxBytes
|
|
1371
|
-
});
|
|
1372
|
-
if (!fetched) return null;
|
|
1373
|
-
const headerType = params.contentType ?? void 0;
|
|
1374
|
-
const saved = await getMatrixRuntime().channel.media.saveMediaBuffer(fetched.buffer, headerType, "inbound", params.maxBytes, params.originalFilename);
|
|
1375
|
-
return {
|
|
1376
|
-
path: saved.path,
|
|
1377
|
-
contentType: saved.contentType,
|
|
1378
|
-
placeholder: "[matrix media]"
|
|
1379
|
-
};
|
|
1380
|
-
}
|
|
1381
|
-
//#endregion
|
|
1382
|
-
//#region extensions/matrix/src/matrix/monitor/mentions.ts
|
|
1383
|
-
const HTML_ENTITY_REPLACEMENTS = {
|
|
1384
|
-
amp: "&",
|
|
1385
|
-
apos: "'",
|
|
1386
|
-
gt: ">",
|
|
1387
|
-
lt: "<",
|
|
1388
|
-
nbsp: " ",
|
|
1389
|
-
quot: "\""
|
|
1390
|
-
};
|
|
1391
|
-
const MAX_UNICODE_SCALAR_VALUE = 1114111;
|
|
1392
|
-
function decodeNumericHtmlEntity(match, rawValue, radix) {
|
|
1393
|
-
const codePoint = Number.parseInt(rawValue, radix);
|
|
1394
|
-
if (!Number.isSafeInteger(codePoint) || codePoint < 0 || codePoint > MAX_UNICODE_SCALAR_VALUE || codePoint >= 55296 && codePoint <= 57343) return match;
|
|
1395
|
-
return String.fromCodePoint(codePoint);
|
|
1396
|
-
}
|
|
1397
|
-
function decodeHtmlEntities(value) {
|
|
1398
|
-
return value.replace(/&(#x?[0-9a-f]+|\w+);/gi, (match, entity) => {
|
|
1399
|
-
const normalized = entity.toLowerCase();
|
|
1400
|
-
if (normalized.startsWith("#x")) return decodeNumericHtmlEntity(match, normalized.slice(2), 16);
|
|
1401
|
-
if (normalized.startsWith("#")) return decodeNumericHtmlEntity(match, normalized.slice(1), 10);
|
|
1402
|
-
return HTML_ENTITY_REPLACEMENTS[normalized] ?? match;
|
|
1403
|
-
});
|
|
1404
|
-
}
|
|
1405
|
-
function normalizeVisibleMentionText(value) {
|
|
1406
|
-
return decodeHtmlEntities(value.replace(/<[^>]+>/g, " ").replace(/[\u200b-\u200f\u202a-\u202e\u2060-\u206f]/g, "")).replace(/\s+/g, " ").trim().toLowerCase();
|
|
1407
|
-
}
|
|
1408
|
-
function extractVisibleMentionText(value) {
|
|
1409
|
-
return normalizeVisibleMentionText(value ?? "");
|
|
1410
|
-
}
|
|
1411
|
-
function resolveMatrixUserLocalpart(userId) {
|
|
1412
|
-
const trimmed = userId.trim();
|
|
1413
|
-
if (!trimmed.startsWith("@")) return null;
|
|
1414
|
-
const colonIndex = trimmed.indexOf(":");
|
|
1415
|
-
if (colonIndex <= 1) return null;
|
|
1416
|
-
return trimmed.slice(1, colonIndex).trim() || null;
|
|
1417
|
-
}
|
|
1418
|
-
function isVisibleMentionLabel(params) {
|
|
1419
|
-
const cleaned = extractVisibleMentionText(params.text);
|
|
1420
|
-
if (!cleaned) return false;
|
|
1421
|
-
if (params.mentionRegexes.some((pattern) => pattern.test(cleaned))) return true;
|
|
1422
|
-
const localpart = resolveMatrixUserLocalpart(params.userId);
|
|
1423
|
-
return [
|
|
1424
|
-
extractVisibleMentionText(params.userId),
|
|
1425
|
-
localpart ? extractVisibleMentionText(localpart) : null,
|
|
1426
|
-
localpart ? extractVisibleMentionText(`@${localpart}`) : null,
|
|
1427
|
-
params.displayName ? extractVisibleMentionText(params.displayName) : null
|
|
1428
|
-
].filter((value) => Boolean(value)).includes(cleaned);
|
|
1429
|
-
}
|
|
1430
|
-
function hasVisibleRoomMention(value) {
|
|
1431
|
-
const cleaned = extractVisibleMentionText(value);
|
|
1432
|
-
return /(^|[^a-z0-9_])@room\b/i.test(cleaned);
|
|
1433
|
-
}
|
|
1434
|
-
/**
|
|
1435
|
-
* Check if formatted_body contains a matrix.to link whose visible label still
|
|
1436
|
-
* looks like a real mention for the given user. Do not trust href alone, since
|
|
1437
|
-
* senders can hide arbitrary matrix.to links behind unrelated link text.
|
|
1438
|
-
* Many Matrix clients (including Element) use HTML links in formatted_body instead of
|
|
1439
|
-
* or in addition to the m.mentions field.
|
|
1440
|
-
*/
|
|
1441
|
-
function checkFormattedBodyMention(params) {
|
|
1442
|
-
if (!params.formattedBody || !params.userId) return false;
|
|
1443
|
-
for (const match of params.formattedBody.matchAll(/<a\b[^>]*href=(["'])(https:\/\/matrix\.to\/#[^"']+)\1[^>]*>(.*?)<\/a>/gis)) {
|
|
1444
|
-
const href = match[2];
|
|
1445
|
-
const visibleLabel = match[3] ?? "";
|
|
1446
|
-
if (!href) continue;
|
|
1447
|
-
try {
|
|
1448
|
-
const parsed = new URL(href);
|
|
1449
|
-
if (decodeURIComponent(parsed.hash.replace(/^#\/?/, "").trim()) !== params.userId.trim()) continue;
|
|
1450
|
-
if (isVisibleMentionLabel({
|
|
1451
|
-
text: visibleLabel,
|
|
1452
|
-
userId: params.userId,
|
|
1453
|
-
mentionRegexes: params.mentionRegexes,
|
|
1454
|
-
displayName: params.displayName
|
|
1455
|
-
})) return true;
|
|
1456
|
-
} catch {
|
|
1457
|
-
continue;
|
|
1458
|
-
}
|
|
1459
|
-
}
|
|
1460
|
-
return false;
|
|
1461
|
-
}
|
|
1462
|
-
function resolveMentions(params) {
|
|
1463
|
-
const mentions = params.content["m.mentions"];
|
|
1464
|
-
const mentionedUsers = Array.isArray(mentions?.user_ids) ? new Set(mentions.user_ids) : /* @__PURE__ */ new Set();
|
|
1465
|
-
const textMentioned = getMatrixRuntime().channel.mentions.matchesMentionPatterns(params.text ?? "", params.mentionRegexes);
|
|
1466
|
-
const visibleRoomMention = hasVisibleRoomMention(params.text) || hasVisibleRoomMention(params.content.formatted_body);
|
|
1467
|
-
const mentionedInFormattedBody = params.userId ? checkFormattedBodyMention({
|
|
1468
|
-
formattedBody: params.content.formatted_body,
|
|
1469
|
-
userId: params.userId,
|
|
1470
|
-
displayName: params.displayName,
|
|
1471
|
-
mentionRegexes: params.mentionRegexes
|
|
1472
|
-
}) : false;
|
|
1473
|
-
const metadataBackedUserMention = Boolean(params.userId && mentionedUsers.has(params.userId) && (mentionedInFormattedBody || textMentioned));
|
|
1474
|
-
const metadataBackedRoomMention = Boolean(mentions?.room) && visibleRoomMention;
|
|
1475
|
-
const explicitMention = mentionedInFormattedBody || metadataBackedUserMention || metadataBackedRoomMention;
|
|
1476
|
-
return {
|
|
1477
|
-
wasMentioned: explicitMention || textMentioned || visibleRoomMention,
|
|
1478
|
-
hasExplicitMention: explicitMention
|
|
1479
|
-
};
|
|
1480
|
-
}
|
|
1481
|
-
//#endregion
|
|
1482
|
-
//#region extensions/matrix/src/matrix/monitor/threads.ts
|
|
1483
|
-
function resolveMatrixThreadSessionKeys(params) {
|
|
1484
|
-
return resolveThreadSessionKeys({
|
|
1485
|
-
...params,
|
|
1486
|
-
normalizeThreadId: (threadId) => threadId
|
|
1487
|
-
});
|
|
1488
|
-
}
|
|
1489
|
-
function resolveMatrixRelatedReplyToEventId(relates) {
|
|
1490
|
-
if (!relates || typeof relates !== "object") return;
|
|
1491
|
-
if ("m.in_reply_to" in relates && typeof relates["m.in_reply_to"] === "object" && relates["m.in_reply_to"] && "event_id" in relates["m.in_reply_to"] && typeof relates["m.in_reply_to"].event_id === "string") return relates["m.in_reply_to"].event_id;
|
|
1492
|
-
}
|
|
1493
|
-
function resolveMatrixThreadRouting(params) {
|
|
1494
|
-
const effectiveThreadReplies = params.isDirectMessage && params.dmThreadReplies !== void 0 ? params.dmThreadReplies : params.threadReplies;
|
|
1495
|
-
const messageId = params.messageId.trim();
|
|
1496
|
-
const threadRootId = params.threadRootId?.trim();
|
|
1497
|
-
const inboundThreadId = threadRootId && threadRootId !== messageId ? threadRootId : void 0;
|
|
1498
|
-
return { threadId: effectiveThreadReplies === "off" ? void 0 : effectiveThreadReplies === "inbound" ? inboundThreadId : inboundThreadId ?? (messageId || void 0) };
|
|
1499
|
-
}
|
|
1500
|
-
function resolveMatrixThreadRootId(params) {
|
|
1501
|
-
const relates = params.content["m.relates_to"];
|
|
1502
|
-
if (!relates || typeof relates !== "object") return;
|
|
1503
|
-
if ("rel_type" in relates && relates.rel_type === RelationType.Thread) {
|
|
1504
|
-
if ("event_id" in relates && typeof relates.event_id === "string") return relates.event_id;
|
|
1505
|
-
return resolveMatrixRelatedReplyToEventId(relates);
|
|
1506
|
-
}
|
|
1507
|
-
}
|
|
1508
|
-
function resolveMatrixReplyToEventId(content) {
|
|
1509
|
-
return resolveMatrixRelatedReplyToEventId(content["m.relates_to"]);
|
|
1510
|
-
}
|
|
1511
|
-
//#endregion
|
|
1512
|
-
//#region extensions/matrix/src/matrix/monitor/route.ts
|
|
1513
|
-
function resolveMatrixInboundRoute(params) {
|
|
1514
|
-
const baseRoute = params.resolveAgentRoute({
|
|
1515
|
-
cfg: params.cfg,
|
|
1516
|
-
channel: "matrix",
|
|
1517
|
-
accountId: params.accountId,
|
|
1518
|
-
peer: {
|
|
1519
|
-
kind: params.isDirectMessage ? "direct" : "channel",
|
|
1520
|
-
id: params.isDirectMessage ? params.senderId : params.roomId
|
|
1521
|
-
},
|
|
1522
|
-
parentPeer: params.isDirectMessage ? {
|
|
1523
|
-
kind: "channel",
|
|
1524
|
-
id: params.roomId
|
|
1525
|
-
} : void 0
|
|
1526
|
-
});
|
|
1527
|
-
const bindingConversationId = params.threadId ?? params.roomId;
|
|
1528
|
-
const bindingParentConversationId = params.threadId ? params.roomId : void 0;
|
|
1529
|
-
const runtimeBinding = getSessionBindingService().resolveByConversation({
|
|
1530
|
-
channel: "matrix",
|
|
1531
|
-
accountId: params.accountId,
|
|
1532
|
-
conversationId: bindingConversationId,
|
|
1533
|
-
parentConversationId: bindingParentConversationId
|
|
1534
|
-
});
|
|
1535
|
-
const boundSessionKey = runtimeBinding?.targetSessionKey?.trim();
|
|
1536
|
-
if (runtimeBinding && boundSessionKey) return {
|
|
1537
|
-
route: {
|
|
1538
|
-
...baseRoute,
|
|
1539
|
-
sessionKey: boundSessionKey,
|
|
1540
|
-
agentId: resolveAgentIdFromSessionKey(boundSessionKey) || baseRoute.agentId,
|
|
1541
|
-
lastRoutePolicy: deriveLastRoutePolicy({
|
|
1542
|
-
sessionKey: boundSessionKey,
|
|
1543
|
-
mainSessionKey: baseRoute.mainSessionKey
|
|
1544
|
-
}),
|
|
1545
|
-
matchedBy: "binding.channel"
|
|
1546
|
-
},
|
|
1547
|
-
configuredBinding: null,
|
|
1548
|
-
runtimeBindingId: runtimeBinding.bindingId
|
|
1549
|
-
};
|
|
1550
|
-
const configuredBinding = runtimeBinding == null ? resolveConfiguredAcpBindingRecord({
|
|
1551
|
-
cfg: params.cfg,
|
|
1552
|
-
channel: "matrix",
|
|
1553
|
-
accountId: params.accountId,
|
|
1554
|
-
conversationId: bindingConversationId,
|
|
1555
|
-
parentConversationId: bindingParentConversationId
|
|
1556
|
-
}) : null;
|
|
1557
|
-
const configuredSessionKey = configuredBinding?.record.targetSessionKey?.trim();
|
|
1558
|
-
const effectiveRoute = configuredBinding && configuredSessionKey ? {
|
|
1559
|
-
...baseRoute,
|
|
1560
|
-
sessionKey: configuredSessionKey,
|
|
1561
|
-
agentId: resolveAgentIdFromSessionKey(configuredSessionKey) || configuredBinding.spec.agentId || baseRoute.agentId,
|
|
1562
|
-
lastRoutePolicy: deriveLastRoutePolicy({
|
|
1563
|
-
sessionKey: configuredSessionKey,
|
|
1564
|
-
mainSessionKey: baseRoute.mainSessionKey
|
|
1565
|
-
}),
|
|
1566
|
-
matchedBy: "binding.channel"
|
|
1567
|
-
} : baseRoute;
|
|
1568
|
-
if (!configuredBinding && !configuredSessionKey && params.threadId) {
|
|
1569
|
-
const threadKeys = resolveMatrixThreadSessionKeys({
|
|
1570
|
-
baseSessionKey: effectiveRoute.sessionKey,
|
|
1571
|
-
threadId: params.threadId,
|
|
1572
|
-
parentSessionKey: effectiveRoute.sessionKey
|
|
1573
|
-
});
|
|
1574
|
-
return {
|
|
1575
|
-
route: {
|
|
1576
|
-
...effectiveRoute,
|
|
1577
|
-
sessionKey: threadKeys.sessionKey,
|
|
1578
|
-
mainSessionKey: threadKeys.parentSessionKey ?? effectiveRoute.sessionKey,
|
|
1579
|
-
lastRoutePolicy: deriveLastRoutePolicy({
|
|
1580
|
-
sessionKey: threadKeys.sessionKey,
|
|
1581
|
-
mainSessionKey: threadKeys.parentSessionKey ?? effectiveRoute.sessionKey
|
|
1582
|
-
})
|
|
1583
|
-
},
|
|
1584
|
-
configuredBinding,
|
|
1585
|
-
runtimeBindingId: null
|
|
1586
|
-
};
|
|
1587
|
-
}
|
|
1588
|
-
return {
|
|
1589
|
-
route: effectiveRoute,
|
|
1590
|
-
configuredBinding,
|
|
1591
|
-
runtimeBindingId: null
|
|
1592
|
-
};
|
|
1593
|
-
}
|
|
1594
|
-
//#endregion
|
|
1595
|
-
//#region extensions/matrix/src/matrix/monitor/reaction-events.ts
|
|
1596
|
-
function resolveMatrixReactionNotificationMode(params) {
|
|
1597
|
-
const matrixConfig = params.cfg.channels?.matrix;
|
|
1598
|
-
return resolveMatrixAccountConfig({
|
|
1599
|
-
cfg: params.cfg,
|
|
1600
|
-
accountId: params.accountId
|
|
1601
|
-
}).reactionNotifications ?? matrixConfig?.reactionNotifications ?? "own";
|
|
1602
|
-
}
|
|
1603
|
-
async function handleInboundMatrixReaction(params) {
|
|
1604
|
-
const notificationMode = resolveMatrixReactionNotificationMode({
|
|
1605
|
-
cfg: params.cfg,
|
|
1606
|
-
accountId: params.accountId
|
|
1607
|
-
});
|
|
1608
|
-
if (notificationMode === "off") return;
|
|
1609
|
-
const reaction = extractMatrixReactionAnnotation(params.event.content);
|
|
1610
|
-
if (!reaction?.eventId) return;
|
|
1611
|
-
const targetEvent = await params.client.getEvent(params.roomId, reaction.eventId).catch((err) => {
|
|
1612
|
-
params.logVerboseMessage(`matrix: failed resolving reaction target room=${params.roomId} id=${reaction.eventId}: ${String(err)}`);
|
|
1613
|
-
return null;
|
|
1614
|
-
});
|
|
1615
|
-
const targetSender = targetEvent && typeof targetEvent.sender === "string" ? targetEvent.sender.trim() : "";
|
|
1616
|
-
if (!targetSender) return;
|
|
1617
|
-
if (notificationMode === "own" && targetSender !== params.selfUserId) return;
|
|
1618
|
-
const targetContent = targetEvent && targetEvent.content && typeof targetEvent.content === "object" ? targetEvent.content : void 0;
|
|
1619
|
-
const threadRootId = targetContent ? resolveMatrixThreadRootId({
|
|
1620
|
-
event: targetEvent,
|
|
1621
|
-
content: targetContent
|
|
1622
|
-
}) : void 0;
|
|
1623
|
-
const accountConfig = resolveMatrixAccountConfig({
|
|
1624
|
-
cfg: params.cfg,
|
|
1625
|
-
accountId: params.accountId
|
|
1626
|
-
});
|
|
1627
|
-
const thread = resolveMatrixThreadRouting({
|
|
1628
|
-
isDirectMessage: params.isDirectMessage,
|
|
1629
|
-
threadReplies: accountConfig.threadReplies ?? "inbound",
|
|
1630
|
-
dmThreadReplies: accountConfig.dm?.threadReplies,
|
|
1631
|
-
messageId: reaction.eventId,
|
|
1632
|
-
threadRootId
|
|
1633
|
-
});
|
|
1634
|
-
const { route, runtimeBindingId } = resolveMatrixInboundRoute({
|
|
1635
|
-
cfg: params.cfg,
|
|
1636
|
-
accountId: params.accountId,
|
|
1637
|
-
roomId: params.roomId,
|
|
1638
|
-
senderId: params.senderId,
|
|
1639
|
-
isDirectMessage: params.isDirectMessage,
|
|
1640
|
-
threadId: thread.threadId,
|
|
1641
|
-
eventTs: params.event.origin_server_ts,
|
|
1642
|
-
resolveAgentRoute: params.core.channel.routing.resolveAgentRoute
|
|
1643
|
-
});
|
|
1644
|
-
if (runtimeBindingId) getSessionBindingService().touch(runtimeBindingId, params.event.origin_server_ts);
|
|
1645
|
-
const text = `Matrix reaction added: ${reaction.key} by ${params.senderLabel} on msg ${reaction.eventId}`;
|
|
1646
|
-
params.core.system.enqueueSystemEvent(text, {
|
|
1647
|
-
sessionKey: route.sessionKey,
|
|
1648
|
-
contextKey: `matrix:reaction:add:${params.roomId}:${reaction.eventId}:${params.senderId}:${reaction.key}`
|
|
1649
|
-
});
|
|
1650
|
-
params.logVerboseMessage(`matrix: reaction event enqueued room=${params.roomId} target=${reaction.eventId} sender=${params.senderId} emoji=${reaction.key}`);
|
|
1651
|
-
}
|
|
1652
|
-
//#endregion
|
|
1653
|
-
//#region extensions/matrix/src/matrix/monitor/replies.ts
|
|
1654
|
-
const THINKING_TAG_RE = /<\s*\/?\s*(?:think(?:ing)?|thought|antthinking)\b[^<>]*>/gi;
|
|
1655
|
-
const THINKING_BLOCK_RE = /<\s*(?:think(?:ing)?|thought|antthinking)\b[^<>]*>[\s\S]*?<\s*\/\s*(?:think(?:ing)?|thought|antthinking)\s*>/gi;
|
|
1656
|
-
function shouldSuppressReasoningReplyText(text) {
|
|
1657
|
-
if (typeof text !== "string") return false;
|
|
1658
|
-
const trimmedStart = text.trimStart();
|
|
1659
|
-
if (!trimmedStart) return false;
|
|
1660
|
-
if (trimmedStart.toLowerCase().startsWith("reasoning:")) return true;
|
|
1661
|
-
THINKING_TAG_RE.lastIndex = 0;
|
|
1662
|
-
if (!THINKING_TAG_RE.test(text)) return false;
|
|
1663
|
-
THINKING_BLOCK_RE.lastIndex = 0;
|
|
1664
|
-
const withoutThinkingBlocks = text.replace(THINKING_BLOCK_RE, "");
|
|
1665
|
-
THINKING_TAG_RE.lastIndex = 0;
|
|
1666
|
-
return !withoutThinkingBlocks.replace(THINKING_TAG_RE, "").trim();
|
|
1667
|
-
}
|
|
1668
|
-
async function deliverMatrixReplies(params) {
|
|
1669
|
-
const core = getMatrixRuntime();
|
|
1670
|
-
const tableMode = params.tableMode ?? core.channel.text.resolveMarkdownTableMode({
|
|
1671
|
-
cfg: params.cfg,
|
|
1672
|
-
channel: "matrix",
|
|
1673
|
-
accountId: params.accountId
|
|
1674
|
-
});
|
|
1675
|
-
const logVerbose = (message) => {
|
|
1676
|
-
if (core.logging.shouldLogVerbose()) params.runtime.log?.(message);
|
|
1677
|
-
};
|
|
1678
|
-
let hasReplied = false;
|
|
1679
|
-
for (const reply of params.replies) {
|
|
1680
|
-
if (reply.isReasoning === true || shouldSuppressReasoningReplyText(reply.text)) {
|
|
1681
|
-
logVerbose("matrix reply suppressed as reasoning-only");
|
|
1682
|
-
continue;
|
|
1683
|
-
}
|
|
1684
|
-
const hasMedia = Boolean(reply?.mediaUrl) || (reply?.mediaUrls?.length ?? 0) > 0;
|
|
1685
|
-
if (!reply?.text && !hasMedia) {
|
|
1686
|
-
if (reply?.audioAsVoice) {
|
|
1687
|
-
logVerbose("matrix reply has audioAsVoice without media/text; skipping");
|
|
1688
|
-
continue;
|
|
1689
|
-
}
|
|
1690
|
-
params.runtime.error?.("matrix reply missing text/media");
|
|
1691
|
-
continue;
|
|
1692
|
-
}
|
|
1693
|
-
const replyToIdRaw = reply.replyToId?.trim();
|
|
1694
|
-
const replyToId = params.threadId || params.replyToMode === "off" ? void 0 : replyToIdRaw;
|
|
1695
|
-
const rawText = reply.text ?? "";
|
|
1696
|
-
const mediaList = reply.mediaUrls?.length ? reply.mediaUrls : reply.mediaUrl ? [reply.mediaUrl] : [];
|
|
1697
|
-
const shouldIncludeReply = (id) => Boolean(id) && (params.replyToMode === "all" || !hasReplied);
|
|
1698
|
-
const replyToIdForReply = shouldIncludeReply(replyToId) ? replyToId : void 0;
|
|
1699
|
-
if (mediaList.length === 0) {
|
|
1700
|
-
let sentTextChunk = false;
|
|
1701
|
-
const { chunks } = chunkMatrixText(rawText, {
|
|
1702
|
-
cfg: params.cfg,
|
|
1703
|
-
accountId: params.accountId,
|
|
1704
|
-
tableMode
|
|
1705
|
-
});
|
|
1706
|
-
for (const chunk of chunks) {
|
|
1707
|
-
const trimmed = chunk.trim();
|
|
1708
|
-
if (!trimmed) continue;
|
|
1709
|
-
await sendMessageMatrix(params.roomId, trimmed, {
|
|
1710
|
-
client: params.client,
|
|
1711
|
-
cfg: params.cfg,
|
|
1712
|
-
replyToId: replyToIdForReply,
|
|
1713
|
-
threadId: params.threadId,
|
|
1714
|
-
accountId: params.accountId
|
|
1715
|
-
});
|
|
1716
|
-
sentTextChunk = true;
|
|
1717
|
-
}
|
|
1718
|
-
if (replyToIdForReply && !hasReplied && sentTextChunk) hasReplied = true;
|
|
1719
|
-
continue;
|
|
1720
|
-
}
|
|
1721
|
-
let first = true;
|
|
1722
|
-
for (const mediaUrl of mediaList) {
|
|
1723
|
-
const caption = first ? rawText : "";
|
|
1724
|
-
await sendMessageMatrix(params.roomId, caption, {
|
|
1725
|
-
client: params.client,
|
|
1726
|
-
cfg: params.cfg,
|
|
1727
|
-
mediaUrl,
|
|
1728
|
-
mediaLocalRoots: params.mediaLocalRoots,
|
|
1729
|
-
replyToId: replyToIdForReply,
|
|
1730
|
-
threadId: params.threadId,
|
|
1731
|
-
audioAsVoice: reply.audioAsVoice,
|
|
1732
|
-
accountId: params.accountId
|
|
1733
|
-
});
|
|
1734
|
-
first = false;
|
|
1735
|
-
}
|
|
1736
|
-
if (replyToIdForReply && !hasReplied) hasReplied = true;
|
|
1737
|
-
}
|
|
1738
|
-
}
|
|
1739
|
-
//#endregion
|
|
1740
|
-
//#region extensions/matrix/src/matrix/monitor/context-summary.ts
|
|
1741
|
-
function trimMatrixMaybeString(value) {
|
|
1742
|
-
if (typeof value !== "string") return;
|
|
1743
|
-
return value.trim() || void 0;
|
|
1744
|
-
}
|
|
1745
|
-
function summarizeMatrixMessageContextEvent(event) {
|
|
1746
|
-
if (isPollStartType(event.type)) {
|
|
1747
|
-
const pollSummary = parsePollStartContent(event.content);
|
|
1748
|
-
if (pollSummary) return formatPollAsText(pollSummary);
|
|
1749
|
-
}
|
|
1750
|
-
const content = event.content;
|
|
1751
|
-
return formatMatrixMessageText({
|
|
1752
|
-
body: resolveMatrixMessageBody({
|
|
1753
|
-
body: trimMatrixMaybeString(content.body),
|
|
1754
|
-
filename: trimMatrixMaybeString(content.filename),
|
|
1755
|
-
msgtype: trimMatrixMaybeString(content.msgtype)
|
|
1756
|
-
}),
|
|
1757
|
-
attachment: resolveMatrixMessageAttachment({
|
|
1758
|
-
body: trimMatrixMaybeString(content.body),
|
|
1759
|
-
filename: trimMatrixMaybeString(content.filename),
|
|
1760
|
-
msgtype: trimMatrixMaybeString(content.msgtype)
|
|
1761
|
-
})
|
|
1762
|
-
});
|
|
1763
|
-
}
|
|
1764
|
-
//#endregion
|
|
1765
|
-
//#region extensions/matrix/src/matrix/monitor/reply-context.ts
|
|
1766
|
-
const MAX_CACHED_REPLY_CONTEXTS = 256;
|
|
1767
|
-
const MAX_REPLY_BODY_LENGTH = 500;
|
|
1768
|
-
function truncateReplyBody(value) {
|
|
1769
|
-
if (value.length <= MAX_REPLY_BODY_LENGTH) return value;
|
|
1770
|
-
return `${value.slice(0, MAX_REPLY_BODY_LENGTH - 3)}...`;
|
|
1771
|
-
}
|
|
1772
|
-
function summarizeMatrixReplyEvent(event) {
|
|
1773
|
-
const body = summarizeMatrixMessageContextEvent(event);
|
|
1774
|
-
return body ? truncateReplyBody(body) : void 0;
|
|
1775
|
-
}
|
|
1776
|
-
/**
|
|
1777
|
-
* Creates a cached resolver that fetches the body and sender of a replied-to
|
|
1778
|
-
* Matrix event. This allows the agent to see the content of the message being
|
|
1779
|
-
* replied to, not just its event ID.
|
|
1780
|
-
*/
|
|
1781
|
-
function createMatrixReplyContextResolver(params) {
|
|
1782
|
-
const cache = /* @__PURE__ */ new Map();
|
|
1783
|
-
const remember = (key, value) => {
|
|
1784
|
-
cache.set(key, value);
|
|
1785
|
-
if (cache.size > MAX_CACHED_REPLY_CONTEXTS) {
|
|
1786
|
-
const oldest = cache.keys().next().value;
|
|
1787
|
-
if (typeof oldest === "string") cache.delete(oldest);
|
|
1788
|
-
}
|
|
1789
|
-
return value;
|
|
1790
|
-
};
|
|
1791
|
-
return async (input) => {
|
|
1792
|
-
const cacheKey = `${input.roomId}:${input.eventId}`;
|
|
1793
|
-
const cached = cache.get(cacheKey);
|
|
1794
|
-
if (cached) {
|
|
1795
|
-
cache.delete(cacheKey);
|
|
1796
|
-
cache.set(cacheKey, cached);
|
|
1797
|
-
return cached;
|
|
1798
|
-
}
|
|
1799
|
-
const event = await params.client.getEvent(input.roomId, input.eventId).catch((err) => {
|
|
1800
|
-
params.logVerboseMessage(`matrix: failed resolving reply context room=${input.roomId} id=${input.eventId}: ${String(err)}`);
|
|
1801
|
-
return null;
|
|
1802
|
-
});
|
|
1803
|
-
if (!event) return {};
|
|
1804
|
-
const rawEvent = event;
|
|
1805
|
-
if (rawEvent.unsigned?.redacted_because) return remember(cacheKey, {});
|
|
1806
|
-
const replyToBody = summarizeMatrixReplyEvent(rawEvent);
|
|
1807
|
-
if (!replyToBody) return remember(cacheKey, {});
|
|
1808
|
-
const senderId = trimMatrixMaybeString(rawEvent.sender);
|
|
1809
|
-
return remember(cacheKey, {
|
|
1810
|
-
replyToBody,
|
|
1811
|
-
replyToSender: (senderId && await params.getMemberDisplayName(input.roomId, senderId).catch(() => void 0)) ?? senderId,
|
|
1812
|
-
replyToSenderId: senderId
|
|
1813
|
-
});
|
|
1814
|
-
};
|
|
1815
|
-
}
|
|
1816
|
-
//#endregion
|
|
1817
|
-
//#region extensions/matrix/src/matrix/monitor/room-history.ts
|
|
1818
|
-
/** Maximum entries retained per room (hard cap to bound memory). */
|
|
1819
|
-
const DEFAULT_MAX_QUEUE_SIZE = 200;
|
|
1820
|
-
/** Maximum number of rooms to retain queues for (FIFO eviction beyond this). */
|
|
1821
|
-
const DEFAULT_MAX_ROOM_QUEUES = 1e3;
|
|
1822
|
-
/** Maximum number of (agentId, roomId) watermark entries to retain. */
|
|
1823
|
-
const MAX_WATERMARK_ENTRIES = 5e3;
|
|
1824
|
-
/** Maximum prepared trigger snapshots retained per room for retry reuse. */
|
|
1825
|
-
const MAX_PREPARED_TRIGGER_ENTRIES = 500;
|
|
1826
|
-
function createRoomHistoryTrackerInternal(maxQueueSize = DEFAULT_MAX_QUEUE_SIZE, maxRoomQueues = DEFAULT_MAX_ROOM_QUEUES, maxWatermarkEntries = MAX_WATERMARK_ENTRIES, maxPreparedTriggerEntries = MAX_PREPARED_TRIGGER_ENTRIES) {
|
|
1827
|
-
const roomQueues = /* @__PURE__ */ new Map();
|
|
1828
|
-
/** Maps `${agentId}:${roomId}` → absolute consumed-up-to index */
|
|
1829
|
-
const agentWatermarks = /* @__PURE__ */ new Map();
|
|
1830
|
-
let nextQueueGeneration = 1;
|
|
1831
|
-
function clearRoomWatermarks(roomId) {
|
|
1832
|
-
const roomSuffix = `:${roomId}`;
|
|
1833
|
-
for (const key of agentWatermarks.keys()) if (key.endsWith(roomSuffix)) agentWatermarks.delete(key);
|
|
1834
|
-
}
|
|
1835
|
-
function getOrCreateQueue(roomId) {
|
|
1836
|
-
let queue = roomQueues.get(roomId);
|
|
1837
|
-
if (!queue) {
|
|
1838
|
-
queue = {
|
|
1839
|
-
entries: [],
|
|
1840
|
-
baseIndex: 0,
|
|
1841
|
-
generation: nextQueueGeneration++,
|
|
1842
|
-
preparedTriggers: /* @__PURE__ */ new Map()
|
|
1843
|
-
};
|
|
1844
|
-
roomQueues.set(roomId, queue);
|
|
1845
|
-
if (roomQueues.size > maxRoomQueues) {
|
|
1846
|
-
const oldest = roomQueues.keys().next().value;
|
|
1847
|
-
if (oldest !== void 0) {
|
|
1848
|
-
roomQueues.delete(oldest);
|
|
1849
|
-
clearRoomWatermarks(oldest);
|
|
1850
|
-
}
|
|
1851
|
-
}
|
|
1852
|
-
}
|
|
1853
|
-
return queue;
|
|
1854
|
-
}
|
|
1855
|
-
function appendToQueue(queue, entry) {
|
|
1856
|
-
queue.entries.push(entry);
|
|
1857
|
-
if (queue.entries.length > maxQueueSize) {
|
|
1858
|
-
const overflow = queue.entries.length - maxQueueSize;
|
|
1859
|
-
queue.entries.splice(0, overflow);
|
|
1860
|
-
queue.baseIndex += overflow;
|
|
1861
|
-
}
|
|
1862
|
-
return {
|
|
1863
|
-
snapshotIdx: queue.baseIndex + queue.entries.length,
|
|
1864
|
-
queueGeneration: queue.generation
|
|
1865
|
-
};
|
|
1866
|
-
}
|
|
1867
|
-
function wmKey(agentId, roomId) {
|
|
1868
|
-
return `${agentId}:${roomId}`;
|
|
1869
|
-
}
|
|
1870
|
-
function preparedTriggerKey(agentId, messageId) {
|
|
1871
|
-
if (!messageId?.trim()) return null;
|
|
1872
|
-
return `${agentId}:${messageId.trim()}`;
|
|
1873
|
-
}
|
|
1874
|
-
function rememberWatermark(key, snapshotIdx) {
|
|
1875
|
-
const nextSnapshotIdx = Math.max(agentWatermarks.get(key) ?? 0, snapshotIdx);
|
|
1876
|
-
if (agentWatermarks.has(key)) agentWatermarks.delete(key);
|
|
1877
|
-
agentWatermarks.set(key, nextSnapshotIdx);
|
|
1878
|
-
if (agentWatermarks.size > maxWatermarkEntries) {
|
|
1879
|
-
const oldest = agentWatermarks.keys().next().value;
|
|
1880
|
-
if (oldest !== void 0) agentWatermarks.delete(oldest);
|
|
1881
|
-
}
|
|
1882
|
-
}
|
|
1883
|
-
function rememberPreparedTrigger(queue, retryKey, prepared) {
|
|
1884
|
-
if (queue.preparedTriggers.has(retryKey)) queue.preparedTriggers.delete(retryKey);
|
|
1885
|
-
queue.preparedTriggers.set(retryKey, prepared);
|
|
1886
|
-
if (queue.preparedTriggers.size > maxPreparedTriggerEntries) {
|
|
1887
|
-
const oldest = queue.preparedTriggers.keys().next().value;
|
|
1888
|
-
if (oldest !== void 0) queue.preparedTriggers.delete(oldest);
|
|
1889
|
-
}
|
|
1890
|
-
return prepared;
|
|
1891
|
-
}
|
|
1892
|
-
function computePendingHistory(queue, agentId, roomId, limit) {
|
|
1893
|
-
if (limit <= 0 || queue.entries.length === 0) return [];
|
|
1894
|
-
const wm = agentWatermarks.get(wmKey(agentId, roomId)) ?? 0;
|
|
1895
|
-
const startRel = Math.max(wm, queue.baseIndex) - queue.baseIndex;
|
|
1896
|
-
const available = queue.entries.slice(startRel);
|
|
1897
|
-
return available.length > limit ? available.slice(-limit) : available;
|
|
1898
|
-
}
|
|
1899
|
-
return {
|
|
1900
|
-
recordPending(roomId, entry) {
|
|
1901
|
-
appendToQueue(getOrCreateQueue(roomId), entry);
|
|
1902
|
-
},
|
|
1903
|
-
getPendingHistory(agentId, roomId, limit) {
|
|
1904
|
-
const queue = roomQueues.get(roomId);
|
|
1905
|
-
if (!queue) return [];
|
|
1906
|
-
return computePendingHistory(queue, agentId, roomId, limit);
|
|
1907
|
-
},
|
|
1908
|
-
recordTrigger(roomId, entry) {
|
|
1909
|
-
return appendToQueue(getOrCreateQueue(roomId), entry);
|
|
1910
|
-
},
|
|
1911
|
-
prepareTrigger(agentId, roomId, limit, entry) {
|
|
1912
|
-
const queue = getOrCreateQueue(roomId);
|
|
1913
|
-
const retryKey = preparedTriggerKey(agentId, entry.messageId);
|
|
1914
|
-
if (retryKey) {
|
|
1915
|
-
const prepared = queue.preparedTriggers.get(retryKey);
|
|
1916
|
-
if (prepared) return rememberPreparedTrigger(queue, retryKey, prepared);
|
|
1917
|
-
}
|
|
1918
|
-
const prepared = {
|
|
1919
|
-
history: computePendingHistory(queue, agentId, roomId, limit),
|
|
1920
|
-
...appendToQueue(queue, entry)
|
|
1921
|
-
};
|
|
1922
|
-
if (retryKey) return rememberPreparedTrigger(queue, retryKey, prepared);
|
|
1923
|
-
return prepared;
|
|
1924
|
-
},
|
|
1925
|
-
consumeHistory(agentId, roomId, snapshot, messageId) {
|
|
1926
|
-
const key = wmKey(agentId, roomId);
|
|
1927
|
-
const queue = roomQueues.get(roomId);
|
|
1928
|
-
if (!queue) {
|
|
1929
|
-
agentWatermarks.delete(key);
|
|
1930
|
-
return;
|
|
1931
|
-
}
|
|
1932
|
-
if (queue.generation !== snapshot.queueGeneration) return;
|
|
1933
|
-
rememberWatermark(key, snapshot.snapshotIdx);
|
|
1934
|
-
const retryKey = preparedTriggerKey(agentId, messageId);
|
|
1935
|
-
if (queue && retryKey) queue.preparedTriggers.delete(retryKey);
|
|
1936
|
-
}
|
|
1937
|
-
};
|
|
1938
|
-
}
|
|
1939
|
-
function createRoomHistoryTracker(maxQueueSize = DEFAULT_MAX_QUEUE_SIZE, maxRoomQueues = DEFAULT_MAX_ROOM_QUEUES, maxWatermarkEntries = MAX_WATERMARK_ENTRIES, maxPreparedTriggerEntries = MAX_PREPARED_TRIGGER_ENTRIES) {
|
|
1940
|
-
const tracker = createRoomHistoryTrackerInternal(maxQueueSize, maxRoomQueues, maxWatermarkEntries, maxPreparedTriggerEntries);
|
|
1941
|
-
return {
|
|
1942
|
-
recordPending: tracker.recordPending,
|
|
1943
|
-
prepareTrigger: tracker.prepareTrigger,
|
|
1944
|
-
consumeHistory: tracker.consumeHistory
|
|
1945
|
-
};
|
|
1946
|
-
}
|
|
1947
|
-
//#endregion
|
|
1948
|
-
//#region extensions/matrix/src/matrix/monitor/thread-context.ts
|
|
1949
|
-
const MAX_TRACKED_THREAD_STARTERS = 256;
|
|
1950
|
-
const MAX_THREAD_STARTER_BODY_LENGTH = 500;
|
|
1951
|
-
function truncateThreadStarterBody(value) {
|
|
1952
|
-
if (value.length <= MAX_THREAD_STARTER_BODY_LENGTH) return value;
|
|
1953
|
-
return `${value.slice(0, MAX_THREAD_STARTER_BODY_LENGTH - 3)}...`;
|
|
1954
|
-
}
|
|
1955
|
-
function summarizeMatrixThreadStarterEvent(event) {
|
|
1956
|
-
const body = summarizeMatrixMessageContextEvent(event);
|
|
1957
|
-
if (body) return truncateThreadStarterBody(body);
|
|
1958
|
-
const content = event.content;
|
|
1959
|
-
const msgtype = trimMatrixMaybeString(content.msgtype);
|
|
1960
|
-
if (msgtype) return `Matrix ${msgtype} message`;
|
|
1961
|
-
const eventType = trimMatrixMaybeString(event.type);
|
|
1962
|
-
return eventType ? `Matrix ${eventType} event` : void 0;
|
|
1963
|
-
}
|
|
1964
|
-
function formatMatrixThreadStarterBody(params) {
|
|
1965
|
-
const senderLabel = params.senderName ?? params.senderId ?? "unknown sender";
|
|
1966
|
-
const lines = [`Matrix thread root ${params.threadRootId} from ${senderLabel}:`];
|
|
1967
|
-
if (params.summary) lines.push(params.summary);
|
|
1968
|
-
return lines.join("\n");
|
|
1969
|
-
}
|
|
1970
|
-
function createMatrixThreadContextResolver(params) {
|
|
1971
|
-
const cache = /* @__PURE__ */ new Map();
|
|
1972
|
-
const remember = (key, value) => {
|
|
1973
|
-
cache.set(key, value);
|
|
1974
|
-
if (cache.size > MAX_TRACKED_THREAD_STARTERS) {
|
|
1975
|
-
const oldest = cache.keys().next().value;
|
|
1976
|
-
if (typeof oldest === "string") cache.delete(oldest);
|
|
1977
|
-
}
|
|
1978
|
-
return value;
|
|
1979
|
-
};
|
|
1980
|
-
return async (input) => {
|
|
1981
|
-
const cacheKey = `${input.roomId}:${input.threadRootId}`;
|
|
1982
|
-
const cached = cache.get(cacheKey);
|
|
1983
|
-
if (cached) return cached;
|
|
1984
|
-
const rootEvent = await params.client.getEvent(input.roomId, input.threadRootId).catch((err) => {
|
|
1985
|
-
params.logVerboseMessage(`matrix: failed resolving thread root room=${input.roomId} id=${input.threadRootId}: ${String(err)}`);
|
|
1986
|
-
return null;
|
|
1987
|
-
});
|
|
1988
|
-
if (!rootEvent) return { threadStarterBody: `Matrix thread root ${input.threadRootId}` };
|
|
1989
|
-
const rawEvent = rootEvent;
|
|
1990
|
-
const senderId = trimMatrixMaybeString(rawEvent.sender);
|
|
1991
|
-
const senderName = senderId && await params.getMemberDisplayName(input.roomId, senderId).catch(() => void 0);
|
|
1992
|
-
const senderLabel = senderName ?? senderId;
|
|
1993
|
-
const summary = summarizeMatrixThreadStarterEvent(rawEvent);
|
|
1994
|
-
return remember(cacheKey, {
|
|
1995
|
-
threadStarterBody: formatMatrixThreadStarterBody({
|
|
1996
|
-
threadRootId: input.threadRootId,
|
|
1997
|
-
senderId,
|
|
1998
|
-
senderName,
|
|
1999
|
-
summary
|
|
2000
|
-
}),
|
|
2001
|
-
senderId,
|
|
2002
|
-
senderLabel,
|
|
2003
|
-
summary
|
|
2004
|
-
});
|
|
2005
|
-
};
|
|
2006
|
-
}
|
|
2007
|
-
//#endregion
|
|
2008
|
-
//#region extensions/matrix/src/matrix/monitor/handler.ts
|
|
2009
|
-
const ALLOW_FROM_STORE_CACHE_TTL_MS = 3e4;
|
|
2010
|
-
const PAIRING_REPLY_COOLDOWN_MS = 5 * 6e4;
|
|
2011
|
-
const MAX_TRACKED_PAIRING_REPLY_SENDERS = 512;
|
|
2012
|
-
function resolveMatrixMentionPrecheckText(params) {
|
|
2013
|
-
if (params.locationText?.trim()) return params.locationText.trim();
|
|
2014
|
-
if (typeof params.content.body === "string" && params.content.body.trim()) return params.content.body.trim();
|
|
2015
|
-
if (isPollStartType(params.eventType)) {
|
|
2016
|
-
const parsed = parsePollStartContent(params.content);
|
|
2017
|
-
if (parsed) return formatPollAsText(parsed);
|
|
2018
|
-
}
|
|
2019
|
-
return "";
|
|
2020
|
-
}
|
|
2021
|
-
function resolveMatrixInboundBodyText(params) {
|
|
2022
|
-
if (params.mediaPlaceholder) return params.rawBody || params.mediaPlaceholder;
|
|
2023
|
-
if (!params.mediaDownloadFailed || !params.hadMediaUrl) return params.rawBody;
|
|
2024
|
-
return formatMatrixMediaUnavailableText({
|
|
2025
|
-
body: params.rawBody,
|
|
2026
|
-
filename: params.filename,
|
|
2027
|
-
msgtype: params.msgtype
|
|
2028
|
-
});
|
|
2029
|
-
}
|
|
2030
|
-
function resolveMatrixPendingHistoryText(params) {
|
|
2031
|
-
if (params.mentionPrecheckText) return params.mentionPrecheckText;
|
|
2032
|
-
if (!params.mediaUrl) return "";
|
|
2033
|
-
const body = typeof params.content.body === "string" ? params.content.body.trim() : void 0;
|
|
2034
|
-
const filename = typeof params.content.filename === "string" ? params.content.filename.trim() : void 0;
|
|
2035
|
-
const msgtype = typeof params.content.msgtype === "string" ? params.content.msgtype : void 0;
|
|
2036
|
-
return formatMatrixMessageText({
|
|
2037
|
-
body: resolveMatrixMessageBody({
|
|
2038
|
-
body,
|
|
2039
|
-
filename,
|
|
2040
|
-
msgtype
|
|
2041
|
-
}),
|
|
2042
|
-
attachment: resolveMatrixMessageAttachment({
|
|
2043
|
-
body,
|
|
2044
|
-
filename,
|
|
2045
|
-
msgtype
|
|
2046
|
-
})
|
|
2047
|
-
}) ?? "";
|
|
2048
|
-
}
|
|
2049
|
-
function resolveMatrixAllowBotsMode(value) {
|
|
2050
|
-
if (value === true) return "all";
|
|
2051
|
-
if (value === "mentions") return "mentions";
|
|
2052
|
-
return "off";
|
|
2053
|
-
}
|
|
2054
|
-
function createMatrixRoomMessageHandler(params) {
|
|
2055
|
-
const { client, core, cfg, accountId, runtime, logger, logVerboseMessage, allowFrom, groupAllowFrom = [], roomsConfig, accountAllowBots, configuredBotUserIds = /* @__PURE__ */ new Set(), groupPolicy, replyToMode, threadReplies, dmThreadReplies, streaming, blockStreamingEnabled, dmEnabled, dmPolicy, textLimit, mediaMaxBytes, historyLimit, startupMs, startupGraceMs, dropPreStartupMessages, inboundDeduper, directTracker, getRoomInfo, getMemberDisplayName, needsRoomAliasesForConfig } = params;
|
|
2056
|
-
const contextVisibilityMode = resolveChannelContextVisibilityMode({
|
|
2057
|
-
cfg,
|
|
2058
|
-
channel: "matrix",
|
|
2059
|
-
accountId
|
|
2060
|
-
});
|
|
2061
|
-
let cachedStoreAllowFrom = null;
|
|
2062
|
-
const pairingReplySentAtMsBySender = /* @__PURE__ */ new Map();
|
|
2063
|
-
const resolveThreadContext = createMatrixThreadContextResolver({
|
|
2064
|
-
client,
|
|
2065
|
-
getMemberDisplayName,
|
|
2066
|
-
logVerboseMessage
|
|
2067
|
-
});
|
|
2068
|
-
const resolveReplyContext = createMatrixReplyContextResolver({
|
|
2069
|
-
client,
|
|
2070
|
-
getMemberDisplayName,
|
|
2071
|
-
logVerboseMessage
|
|
2072
|
-
});
|
|
2073
|
-
const roomHistoryTracker = createRoomHistoryTracker();
|
|
2074
|
-
const roomIngressTails = /* @__PURE__ */ new Map();
|
|
2075
|
-
const readStoreAllowFrom = async () => {
|
|
2076
|
-
const now = Date.now();
|
|
2077
|
-
if (cachedStoreAllowFrom && now < cachedStoreAllowFrom.expiresAtMs) return cachedStoreAllowFrom.value;
|
|
2078
|
-
const value = await core.channel.pairing.readAllowFromStore({
|
|
2079
|
-
channel: "matrix",
|
|
2080
|
-
env: process.env,
|
|
2081
|
-
accountId
|
|
2082
|
-
}).catch(() => []);
|
|
2083
|
-
cachedStoreAllowFrom = {
|
|
2084
|
-
value,
|
|
2085
|
-
expiresAtMs: now + ALLOW_FROM_STORE_CACHE_TTL_MS
|
|
2086
|
-
};
|
|
2087
|
-
return value;
|
|
2088
|
-
};
|
|
2089
|
-
const shouldSendPairingReply = (senderId, created) => {
|
|
2090
|
-
const now = Date.now();
|
|
2091
|
-
if (created) {
|
|
2092
|
-
pairingReplySentAtMsBySender.set(senderId, now);
|
|
2093
|
-
return true;
|
|
2094
|
-
}
|
|
2095
|
-
const lastSentAtMs = pairingReplySentAtMsBySender.get(senderId);
|
|
2096
|
-
if (typeof lastSentAtMs === "number" && now - lastSentAtMs < PAIRING_REPLY_COOLDOWN_MS) return false;
|
|
2097
|
-
pairingReplySentAtMsBySender.set(senderId, now);
|
|
2098
|
-
if (pairingReplySentAtMsBySender.size > MAX_TRACKED_PAIRING_REPLY_SENDERS) {
|
|
2099
|
-
const oldestSender = pairingReplySentAtMsBySender.keys().next().value;
|
|
2100
|
-
if (typeof oldestSender === "string") pairingReplySentAtMsBySender.delete(oldestSender);
|
|
2101
|
-
}
|
|
2102
|
-
return true;
|
|
2103
|
-
};
|
|
2104
|
-
const runRoomIngress = async (roomId, task) => {
|
|
2105
|
-
const previous = roomIngressTails.get(roomId) ?? Promise.resolve();
|
|
2106
|
-
let releaseCurrent;
|
|
2107
|
-
const current = new Promise((resolve) => {
|
|
2108
|
-
releaseCurrent = resolve;
|
|
2109
|
-
});
|
|
2110
|
-
const chain = previous.catch(() => {}).then(() => current);
|
|
2111
|
-
roomIngressTails.set(roomId, chain);
|
|
2112
|
-
await previous.catch(() => {});
|
|
2113
|
-
try {
|
|
2114
|
-
return await task();
|
|
2115
|
-
} finally {
|
|
2116
|
-
releaseCurrent();
|
|
2117
|
-
if (roomIngressTails.get(roomId) === chain) roomIngressTails.delete(roomId);
|
|
2118
|
-
}
|
|
2119
|
-
};
|
|
2120
|
-
return async (roomId, event) => {
|
|
2121
|
-
const eventId = typeof event.event_id === "string" ? event.event_id.trim() : "";
|
|
2122
|
-
let claimedInboundEvent = false;
|
|
2123
|
-
let draftStreamRef;
|
|
2124
|
-
try {
|
|
2125
|
-
const eventType = event.type;
|
|
2126
|
-
if (eventType === EventType.RoomMessageEncrypted) return;
|
|
2127
|
-
const isPollEvent = isPollEventType(eventType);
|
|
2128
|
-
const isReactionEvent = eventType === EventType.Reaction;
|
|
2129
|
-
const locationContent = event.content;
|
|
2130
|
-
const isLocationEvent = eventType === EventType.Location || eventType === EventType.RoomMessage && locationContent.msgtype === EventType.Location;
|
|
2131
|
-
if (eventType !== EventType.RoomMessage && !isPollEvent && !isLocationEvent && !isReactionEvent) return;
|
|
2132
|
-
logVerboseMessage(`matrix: inbound event room=${roomId} type=${eventType} id=${event.event_id ?? "unknown"}`);
|
|
2133
|
-
if (event.unsigned?.redacted_because) return;
|
|
2134
|
-
const senderId = event.sender;
|
|
2135
|
-
if (!senderId) return;
|
|
2136
|
-
const eventTs = event.origin_server_ts;
|
|
2137
|
-
const eventAge = event.unsigned?.age;
|
|
2138
|
-
const commitInboundEventIfClaimed = async () => {
|
|
2139
|
-
if (!claimedInboundEvent || !inboundDeduper || !eventId) return;
|
|
2140
|
-
await inboundDeduper.commitEvent({
|
|
2141
|
-
roomId,
|
|
2142
|
-
eventId
|
|
2143
|
-
});
|
|
2144
|
-
claimedInboundEvent = false;
|
|
2145
|
-
};
|
|
2146
|
-
const readIngressPrefix = async () => {
|
|
2147
|
-
const selfUserId = await client.getUserId();
|
|
2148
|
-
if (senderId === selfUserId) return;
|
|
2149
|
-
if (dropPreStartupMessages) {
|
|
2150
|
-
if (typeof eventTs === "number" && eventTs < startupMs - startupGraceMs) return;
|
|
2151
|
-
if (typeof eventTs !== "number" && typeof eventAge === "number" && eventAge > startupGraceMs) return;
|
|
2152
|
-
}
|
|
2153
|
-
let content = event.content;
|
|
2154
|
-
if (eventType === EventType.RoomMessage && isMatrixVerificationRoomMessage({
|
|
2155
|
-
msgtype: content.msgtype,
|
|
2156
|
-
body: content.body
|
|
2157
|
-
})) {
|
|
2158
|
-
logVerboseMessage(`matrix: skip verification/system room message room=${roomId}`);
|
|
2159
|
-
return;
|
|
2160
|
-
}
|
|
2161
|
-
const locationPayload = resolveMatrixLocation({
|
|
2162
|
-
eventType,
|
|
2163
|
-
content
|
|
2164
|
-
});
|
|
2165
|
-
const relates = content["m.relates_to"];
|
|
2166
|
-
if (relates && "rel_type" in relates && relates.rel_type === RelationType.Replace) return;
|
|
2167
|
-
if (eventId && inboundDeduper) {
|
|
2168
|
-
claimedInboundEvent = inboundDeduper.claimEvent({
|
|
2169
|
-
roomId,
|
|
2170
|
-
eventId
|
|
2171
|
-
});
|
|
2172
|
-
if (!claimedInboundEvent) {
|
|
2173
|
-
logVerboseMessage(`matrix: skip duplicate inbound event room=${roomId} id=${eventId}`);
|
|
2174
|
-
return;
|
|
2175
|
-
}
|
|
2176
|
-
}
|
|
2177
|
-
return {
|
|
2178
|
-
content,
|
|
2179
|
-
isDirectMessage: await directTracker.isDirectMessage({
|
|
2180
|
-
roomId,
|
|
2181
|
-
senderId,
|
|
2182
|
-
selfUserId
|
|
2183
|
-
}),
|
|
2184
|
-
locationPayload,
|
|
2185
|
-
selfUserId
|
|
2186
|
-
};
|
|
2187
|
-
};
|
|
2188
|
-
const continueIngress = async (params) => {
|
|
2189
|
-
let content = params.content;
|
|
2190
|
-
const isDirectMessage = params.isDirectMessage;
|
|
2191
|
-
const isRoom = !isDirectMessage;
|
|
2192
|
-
const { locationPayload, selfUserId } = params;
|
|
2193
|
-
if (isRoom && groupPolicy === "disabled") {
|
|
2194
|
-
await commitInboundEventIfClaimed();
|
|
2195
|
-
return;
|
|
2196
|
-
}
|
|
2197
|
-
const roomInfoForConfig = isRoom && needsRoomAliasesForConfig ? await getRoomInfo(roomId, { includeAliases: true }) : void 0;
|
|
2198
|
-
const roomAliasesForConfig = roomInfoForConfig ? [roomInfoForConfig.canonicalAlias ?? "", ...roomInfoForConfig.altAliases].filter(Boolean) : [];
|
|
2199
|
-
const roomConfigInfo = isRoom ? resolveMatrixRoomConfig({
|
|
2200
|
-
rooms: roomsConfig,
|
|
2201
|
-
roomId,
|
|
2202
|
-
aliases: roomAliasesForConfig
|
|
2203
|
-
}) : void 0;
|
|
2204
|
-
const roomConfig = roomConfigInfo?.config;
|
|
2205
|
-
const allowBotsMode = resolveMatrixAllowBotsMode(roomConfig?.allowBots ?? accountAllowBots);
|
|
2206
|
-
const isConfiguredBotSender = configuredBotUserIds.has(senderId);
|
|
2207
|
-
const roomMatchMeta = roomConfigInfo ? `matchKey=${roomConfigInfo.matchKey ?? "none"} matchSource=${roomConfigInfo.matchSource ?? "none"}` : "matchKey=none matchSource=none";
|
|
2208
|
-
if (isConfiguredBotSender && allowBotsMode === "off") {
|
|
2209
|
-
logVerboseMessage(`matrix: drop configured bot sender=${senderId} (allowBots=false${isDirectMessage ? "" : `, ${roomMatchMeta}`})`);
|
|
2210
|
-
await commitInboundEventIfClaimed();
|
|
2211
|
-
return;
|
|
2212
|
-
}
|
|
2213
|
-
if (isRoom && roomConfig && !roomConfigInfo?.allowed) {
|
|
2214
|
-
logVerboseMessage(`matrix: room disabled room=${roomId} (${roomMatchMeta})`);
|
|
2215
|
-
await commitInboundEventIfClaimed();
|
|
2216
|
-
return;
|
|
2217
|
-
}
|
|
2218
|
-
if (isRoom && groupPolicy === "allowlist") {
|
|
2219
|
-
if (!roomConfigInfo?.allowlistConfigured) {
|
|
2220
|
-
logVerboseMessage(`matrix: drop room message (no allowlist, ${roomMatchMeta})`);
|
|
2221
|
-
await commitInboundEventIfClaimed();
|
|
2222
|
-
return;
|
|
2223
|
-
}
|
|
2224
|
-
if (!roomConfig) {
|
|
2225
|
-
logVerboseMessage(`matrix: drop room message (not in allowlist, ${roomMatchMeta})`);
|
|
2226
|
-
await commitInboundEventIfClaimed();
|
|
2227
|
-
return;
|
|
2228
|
-
}
|
|
2229
|
-
}
|
|
2230
|
-
let senderNamePromise = null;
|
|
2231
|
-
const getSenderName = async () => {
|
|
2232
|
-
senderNamePromise ??= getMemberDisplayName(roomId, senderId).catch(() => senderId);
|
|
2233
|
-
return await senderNamePromise;
|
|
2234
|
-
};
|
|
2235
|
-
const { effectiveGroupAllowFrom, effectiveRoomUsers, groupAllowConfigured, directAllowMatch, roomUserMatch, groupAllowMatch, commandAuthorizers } = resolveMatrixMonitorAccessState({
|
|
2236
|
-
allowFrom,
|
|
2237
|
-
storeAllowFrom: await readStoreAllowFrom(),
|
|
2238
|
-
groupAllowFrom,
|
|
2239
|
-
roomUsers: roomConfig?.users ?? [],
|
|
2240
|
-
senderId,
|
|
2241
|
-
isRoom
|
|
2242
|
-
});
|
|
2243
|
-
if (isDirectMessage) {
|
|
2244
|
-
if (!dmEnabled || dmPolicy === "disabled") {
|
|
2245
|
-
await commitInboundEventIfClaimed();
|
|
2246
|
-
return;
|
|
2247
|
-
}
|
|
2248
|
-
if (dmPolicy !== "open") {
|
|
2249
|
-
const allowMatchMeta = formatAllowlistMatchMeta(directAllowMatch);
|
|
2250
|
-
if (!directAllowMatch.allowed) {
|
|
2251
|
-
if (!isReactionEvent && dmPolicy === "pairing") {
|
|
2252
|
-
const senderName = await getSenderName();
|
|
2253
|
-
const { code, created } = await core.channel.pairing.upsertPairingRequest({
|
|
2254
|
-
channel: "matrix",
|
|
2255
|
-
id: senderId,
|
|
2256
|
-
accountId,
|
|
2257
|
-
meta: { name: senderName }
|
|
2258
|
-
});
|
|
2259
|
-
if (shouldSendPairingReply(senderId, created)) {
|
|
2260
|
-
const pairingReply = core.channel.pairing.buildPairingReply({
|
|
2261
|
-
channel: "matrix",
|
|
2262
|
-
idLine: `Your Matrix user id: ${senderId}`,
|
|
2263
|
-
code
|
|
2264
|
-
});
|
|
2265
|
-
logVerboseMessage(created ? `matrix pairing request sender=${senderId} name=${senderName ?? "unknown"} (${allowMatchMeta})` : `matrix pairing reminder sender=${senderId} name=${senderName ?? "unknown"} (${allowMatchMeta})`);
|
|
2266
|
-
try {
|
|
2267
|
-
await sendMessageMatrix(`room:${roomId}`, created ? pairingReply : `${pairingReply}\n\nPairing request is still pending approval. Reusing existing code.`, {
|
|
2268
|
-
client,
|
|
2269
|
-
cfg,
|
|
2270
|
-
accountId
|
|
2271
|
-
});
|
|
2272
|
-
await commitInboundEventIfClaimed();
|
|
2273
|
-
} catch (err) {
|
|
2274
|
-
logVerboseMessage(`matrix pairing reply failed for ${senderId}: ${String(err)}`);
|
|
2275
|
-
return;
|
|
2276
|
-
}
|
|
2277
|
-
} else {
|
|
2278
|
-
logVerboseMessage(`matrix pairing reminder suppressed sender=${senderId} (cooldown)`);
|
|
2279
|
-
await commitInboundEventIfClaimed();
|
|
2280
|
-
}
|
|
2281
|
-
}
|
|
2282
|
-
if (isReactionEvent || dmPolicy !== "pairing") {
|
|
2283
|
-
logVerboseMessage(`matrix: blocked ${isReactionEvent ? "reaction" : "dm"} sender ${senderId} (dmPolicy=${dmPolicy}, ${allowMatchMeta})`);
|
|
2284
|
-
await commitInboundEventIfClaimed();
|
|
2285
|
-
}
|
|
2286
|
-
return;
|
|
2287
|
-
}
|
|
2288
|
-
}
|
|
2289
|
-
}
|
|
2290
|
-
if (isRoom && roomUserMatch && !roomUserMatch.allowed) {
|
|
2291
|
-
logVerboseMessage(`matrix: blocked sender ${senderId} (room users allowlist, ${roomMatchMeta}, ${formatAllowlistMatchMeta(roomUserMatch)})`);
|
|
2292
|
-
await commitInboundEventIfClaimed();
|
|
2293
|
-
return;
|
|
2294
|
-
}
|
|
2295
|
-
if (isRoom && groupPolicy === "allowlist" && effectiveRoomUsers.length === 0 && groupAllowConfigured && groupAllowMatch && !groupAllowMatch.allowed) {
|
|
2296
|
-
logVerboseMessage(`matrix: blocked sender ${senderId} (groupAllowFrom, ${roomMatchMeta}, ${formatAllowlistMatchMeta(groupAllowMatch)})`);
|
|
2297
|
-
await commitInboundEventIfClaimed();
|
|
2298
|
-
return;
|
|
2299
|
-
}
|
|
2300
|
-
if (isRoom) logVerboseMessage(`matrix: allow room ${roomId} (${roomMatchMeta})`);
|
|
2301
|
-
if (isReactionEvent) {
|
|
2302
|
-
await handleInboundMatrixReaction({
|
|
2303
|
-
client,
|
|
2304
|
-
core,
|
|
2305
|
-
cfg,
|
|
2306
|
-
accountId,
|
|
2307
|
-
roomId,
|
|
2308
|
-
event,
|
|
2309
|
-
senderId,
|
|
2310
|
-
senderLabel: await getSenderName(),
|
|
2311
|
-
selfUserId,
|
|
2312
|
-
isDirectMessage,
|
|
2313
|
-
logVerboseMessage
|
|
2314
|
-
});
|
|
2315
|
-
await commitInboundEventIfClaimed();
|
|
2316
|
-
return;
|
|
2317
|
-
}
|
|
2318
|
-
let pollSnapshotPromise = null;
|
|
2319
|
-
const getPollSnapshot = async () => {
|
|
2320
|
-
if (!isPollEvent) return null;
|
|
2321
|
-
pollSnapshotPromise ??= fetchMatrixPollSnapshot(client, roomId, event).catch((err) => {
|
|
2322
|
-
logVerboseMessage(`matrix: failed resolving poll snapshot room=${roomId} id=${event.event_id ?? "unknown"}: ${String(err)}`);
|
|
2323
|
-
return null;
|
|
2324
|
-
});
|
|
2325
|
-
return await pollSnapshotPromise;
|
|
2326
|
-
};
|
|
2327
|
-
const mentionPrecheckText = resolveMatrixMentionPrecheckText({
|
|
2328
|
-
eventType,
|
|
2329
|
-
content,
|
|
2330
|
-
locationText: locationPayload?.text
|
|
2331
|
-
});
|
|
2332
|
-
const contentUrl = "url" in content && typeof content.url === "string" ? content.url : void 0;
|
|
2333
|
-
const contentFile = "file" in content && content.file && typeof content.file === "object" ? content.file : void 0;
|
|
2334
|
-
const mediaUrl = contentUrl ?? contentFile?.url;
|
|
2335
|
-
const pendingHistoryText = resolveMatrixPendingHistoryText({
|
|
2336
|
-
mentionPrecheckText,
|
|
2337
|
-
content,
|
|
2338
|
-
mediaUrl
|
|
2339
|
-
});
|
|
2340
|
-
const pendingHistoryPollText = !pendingHistoryText && isPollEvent && historyLimit > 0 ? (await getPollSnapshot())?.text : "";
|
|
2341
|
-
if (!mentionPrecheckText && !mediaUrl && !isPollEvent) {
|
|
2342
|
-
await commitInboundEventIfClaimed();
|
|
2343
|
-
return;
|
|
2344
|
-
}
|
|
2345
|
-
const _messageId = event.event_id ?? "";
|
|
2346
|
-
const _threadRootId = resolveMatrixThreadRootId({
|
|
2347
|
-
event,
|
|
2348
|
-
content
|
|
2349
|
-
});
|
|
2350
|
-
const thread = resolveMatrixThreadRouting({
|
|
2351
|
-
isDirectMessage,
|
|
2352
|
-
threadReplies,
|
|
2353
|
-
dmThreadReplies,
|
|
2354
|
-
messageId: _messageId,
|
|
2355
|
-
threadRootId: _threadRootId
|
|
2356
|
-
});
|
|
2357
|
-
const { route: _route, configuredBinding: _configuredBinding, runtimeBindingId: _runtimeBindingId } = resolveMatrixInboundRoute({
|
|
2358
|
-
cfg,
|
|
2359
|
-
accountId,
|
|
2360
|
-
roomId,
|
|
2361
|
-
senderId,
|
|
2362
|
-
isDirectMessage,
|
|
2363
|
-
threadId: thread.threadId,
|
|
2364
|
-
eventTs: eventTs ?? void 0,
|
|
2365
|
-
resolveAgentRoute: core.channel.routing.resolveAgentRoute
|
|
2366
|
-
});
|
|
2367
|
-
const agentMentionRegexes = core.channel.mentions.buildMentionRegexes(cfg, _route.agentId);
|
|
2368
|
-
const selfDisplayName = content.formatted_body ? await getMemberDisplayName(roomId, selfUserId).catch(() => void 0) : void 0;
|
|
2369
|
-
const { wasMentioned, hasExplicitMention } = resolveMentions({
|
|
2370
|
-
content,
|
|
2371
|
-
userId: selfUserId,
|
|
2372
|
-
displayName: selfDisplayName,
|
|
2373
|
-
text: mentionPrecheckText,
|
|
2374
|
-
mentionRegexes: agentMentionRegexes
|
|
2375
|
-
});
|
|
2376
|
-
if (isConfiguredBotSender && allowBotsMode === "mentions" && !isDirectMessage && !wasMentioned) {
|
|
2377
|
-
logVerboseMessage(`matrix: drop configured bot sender=${senderId} (allowBots=mentions, missing mention, ${roomMatchMeta})`);
|
|
2378
|
-
await commitInboundEventIfClaimed();
|
|
2379
|
-
return;
|
|
2380
|
-
}
|
|
2381
|
-
const allowTextCommands = core.channel.commands.shouldHandleTextCommands({
|
|
2382
|
-
cfg,
|
|
2383
|
-
surface: "matrix"
|
|
2384
|
-
});
|
|
2385
|
-
const useAccessGroups = cfg.commands?.useAccessGroups !== false;
|
|
2386
|
-
const hasControlCommandInMessage = core.channel.text.hasControlCommand(mentionPrecheckText, cfg);
|
|
2387
|
-
const commandGate = resolveControlCommandGate({
|
|
2388
|
-
useAccessGroups,
|
|
2389
|
-
authorizers: commandAuthorizers,
|
|
2390
|
-
allowTextCommands,
|
|
2391
|
-
hasControlCommand: hasControlCommandInMessage
|
|
2392
|
-
});
|
|
2393
|
-
const commandAuthorized = commandGate.commandAuthorized;
|
|
2394
|
-
if (isRoom && commandGate.shouldBlock) {
|
|
2395
|
-
logInboundDrop({
|
|
2396
|
-
log: logVerboseMessage,
|
|
2397
|
-
channel: "matrix",
|
|
2398
|
-
reason: "control command (unauthorized)",
|
|
2399
|
-
target: senderId
|
|
2400
|
-
});
|
|
2401
|
-
await commitInboundEventIfClaimed();
|
|
2402
|
-
return;
|
|
2403
|
-
}
|
|
2404
|
-
const shouldRequireMention = isRoom ? roomConfig?.autoReply === true ? false : roomConfig?.autoReply === false ? true : typeof roomConfig?.requireMention === "boolean" ? roomConfig?.requireMention : true : false;
|
|
2405
|
-
const shouldBypassMention = allowTextCommands && isRoom && shouldRequireMention && !wasMentioned && !hasExplicitMention && commandAuthorized && hasControlCommandInMessage;
|
|
2406
|
-
const canDetectMention = agentMentionRegexes.length > 0 || hasExplicitMention;
|
|
2407
|
-
if (isRoom && shouldRequireMention && !wasMentioned && !shouldBypassMention) {
|
|
2408
|
-
const pendingHistoryBody = pendingHistoryText || pendingHistoryPollText;
|
|
2409
|
-
if (historyLimit > 0 && pendingHistoryBody) {
|
|
2410
|
-
const pendingEntry = {
|
|
2411
|
-
sender: senderId,
|
|
2412
|
-
body: pendingHistoryBody,
|
|
2413
|
-
timestamp: eventTs ?? void 0,
|
|
2414
|
-
messageId: _messageId
|
|
2415
|
-
};
|
|
2416
|
-
roomHistoryTracker.recordPending(roomId, pendingEntry);
|
|
2417
|
-
}
|
|
2418
|
-
logger.info("skipping room message", {
|
|
2419
|
-
roomId,
|
|
2420
|
-
reason: "no-mention"
|
|
2421
|
-
});
|
|
2422
|
-
await commitInboundEventIfClaimed();
|
|
2423
|
-
return;
|
|
2424
|
-
}
|
|
2425
|
-
if (isPollEvent) {
|
|
2426
|
-
const pollSnapshot = await getPollSnapshot();
|
|
2427
|
-
if (!pollSnapshot) return;
|
|
2428
|
-
content = {
|
|
2429
|
-
msgtype: "m.text",
|
|
2430
|
-
body: pollSnapshot.text
|
|
2431
|
-
};
|
|
2432
|
-
}
|
|
2433
|
-
let media = null;
|
|
2434
|
-
let mediaDownloadFailed = false;
|
|
2435
|
-
const finalContentUrl = "url" in content && typeof content.url === "string" ? content.url : void 0;
|
|
2436
|
-
const finalContentFile = "file" in content && content.file && typeof content.file === "object" ? content.file : void 0;
|
|
2437
|
-
const finalMediaUrl = finalContentUrl ?? finalContentFile?.url;
|
|
2438
|
-
const contentBody = typeof content.body === "string" ? content.body.trim() : "";
|
|
2439
|
-
const originalFilename = (typeof content.filename === "string" ? content.filename.trim() : "") || contentBody || void 0;
|
|
2440
|
-
const contentInfo = "info" in content && content.info && typeof content.info === "object" ? content.info : void 0;
|
|
2441
|
-
const contentType = contentInfo?.mimetype;
|
|
2442
|
-
const contentSize = typeof contentInfo?.size === "number" ? contentInfo.size : void 0;
|
|
2443
|
-
if (finalMediaUrl?.startsWith("mxc://")) try {
|
|
2444
|
-
media = await downloadMatrixMedia({
|
|
2445
|
-
client,
|
|
2446
|
-
mxcUrl: finalMediaUrl,
|
|
2447
|
-
contentType,
|
|
2448
|
-
sizeBytes: contentSize,
|
|
2449
|
-
maxBytes: mediaMaxBytes,
|
|
2450
|
-
file: finalContentFile,
|
|
2451
|
-
originalFilename
|
|
2452
|
-
});
|
|
2453
|
-
} catch (err) {
|
|
2454
|
-
mediaDownloadFailed = true;
|
|
2455
|
-
const errorText = err instanceof Error ? err.message : String(err);
|
|
2456
|
-
logVerboseMessage(`matrix: media download failed room=${roomId} id=${event.event_id ?? "unknown"} type=${content.msgtype} error=${errorText}`);
|
|
2457
|
-
logger.warn("matrix media download failed", {
|
|
2458
|
-
roomId,
|
|
2459
|
-
eventId: event.event_id,
|
|
2460
|
-
msgtype: content.msgtype,
|
|
2461
|
-
encrypted: Boolean(finalContentFile),
|
|
2462
|
-
error: errorText
|
|
2463
|
-
});
|
|
2464
|
-
}
|
|
2465
|
-
const bodyText = resolveMatrixInboundBodyText({
|
|
2466
|
-
rawBody: locationPayload?.text ?? contentBody,
|
|
2467
|
-
filename: typeof content.filename === "string" ? content.filename : void 0,
|
|
2468
|
-
mediaPlaceholder: media?.placeholder,
|
|
2469
|
-
msgtype: content.msgtype,
|
|
2470
|
-
hadMediaUrl: Boolean(finalMediaUrl),
|
|
2471
|
-
mediaDownloadFailed
|
|
2472
|
-
});
|
|
2473
|
-
if (!bodyText) {
|
|
2474
|
-
await commitInboundEventIfClaimed();
|
|
2475
|
-
return;
|
|
2476
|
-
}
|
|
2477
|
-
const senderName = await getSenderName();
|
|
2478
|
-
if (_configuredBinding) {
|
|
2479
|
-
if (!(await ensureConfiguredAcpBindingReady({
|
|
2480
|
-
cfg,
|
|
2481
|
-
configuredBinding: _configuredBinding
|
|
2482
|
-
})).ok) {
|
|
2483
|
-
logInboundDrop({
|
|
2484
|
-
log: logVerboseMessage,
|
|
2485
|
-
channel: "matrix",
|
|
2486
|
-
reason: "configured ACP binding unavailable",
|
|
2487
|
-
target: _configuredBinding.spec.conversationId
|
|
2488
|
-
});
|
|
2489
|
-
return;
|
|
2490
|
-
}
|
|
2491
|
-
}
|
|
2492
|
-
if (_runtimeBindingId) getSessionBindingService().touch(_runtimeBindingId, eventTs ?? void 0);
|
|
2493
|
-
const preparedTrigger = isRoom && historyLimit > 0 ? roomHistoryTracker.prepareTrigger(_route.agentId, roomId, historyLimit, {
|
|
2494
|
-
sender: senderName,
|
|
2495
|
-
body: bodyText,
|
|
2496
|
-
timestamp: eventTs ?? void 0,
|
|
2497
|
-
messageId: _messageId
|
|
2498
|
-
}) : void 0;
|
|
2499
|
-
return {
|
|
2500
|
-
route: _route,
|
|
2501
|
-
roomConfig,
|
|
2502
|
-
isDirectMessage,
|
|
2503
|
-
isRoom,
|
|
2504
|
-
shouldRequireMention,
|
|
2505
|
-
wasMentioned,
|
|
2506
|
-
shouldBypassMention,
|
|
2507
|
-
canDetectMention,
|
|
2508
|
-
commandAuthorized,
|
|
2509
|
-
inboundHistory: preparedTrigger?.history,
|
|
2510
|
-
senderName,
|
|
2511
|
-
bodyText,
|
|
2512
|
-
media,
|
|
2513
|
-
locationPayload,
|
|
2514
|
-
messageId: _messageId,
|
|
2515
|
-
triggerSnapshot: preparedTrigger,
|
|
2516
|
-
threadRootId: _threadRootId,
|
|
2517
|
-
thread,
|
|
2518
|
-
effectiveGroupAllowFrom,
|
|
2519
|
-
effectiveRoomUsers
|
|
2520
|
-
};
|
|
2521
|
-
};
|
|
2522
|
-
const ingressResult = historyLimit > 0 ? await runRoomIngress(roomId, async () => {
|
|
2523
|
-
const prefix = await readIngressPrefix();
|
|
2524
|
-
if (!prefix) return;
|
|
2525
|
-
if (prefix.isDirectMessage) return { deferredPrefix: prefix };
|
|
2526
|
-
return { ingressResult: await continueIngress(prefix) };
|
|
2527
|
-
}) : void 0;
|
|
2528
|
-
const resolvedIngressResult = historyLimit > 0 ? ingressResult?.deferredPrefix ? await continueIngress(ingressResult.deferredPrefix) : ingressResult?.ingressResult : await (async () => {
|
|
2529
|
-
const prefix = await readIngressPrefix();
|
|
2530
|
-
if (!prefix) return;
|
|
2531
|
-
return await continueIngress(prefix);
|
|
2532
|
-
})();
|
|
2533
|
-
if (!resolvedIngressResult) return;
|
|
2534
|
-
const { route: _route, roomConfig, isDirectMessage, isRoom, shouldRequireMention, wasMentioned, shouldBypassMention, canDetectMention, commandAuthorized, inboundHistory, senderName, bodyText, media, locationPayload, messageId: _messageId, triggerSnapshot, threadRootId: _threadRootId, thread, effectiveGroupAllowFrom, effectiveRoomUsers } = resolvedIngressResult;
|
|
2535
|
-
const replyToEventId = resolveMatrixReplyToEventId(event.content);
|
|
2536
|
-
const threadTarget = thread.threadId;
|
|
2537
|
-
const isRoomContextSenderAllowed = (contextSenderId) => {
|
|
2538
|
-
if (!isRoom || !contextSenderId) return true;
|
|
2539
|
-
if (effectiveRoomUsers.length > 0) return resolveMatrixAllowListMatch({
|
|
2540
|
-
allowList: effectiveRoomUsers,
|
|
2541
|
-
userId: contextSenderId
|
|
2542
|
-
}).allowed;
|
|
2543
|
-
if (groupPolicy === "allowlist" && effectiveGroupAllowFrom.length > 0) return resolveMatrixAllowListMatch({
|
|
2544
|
-
allowList: effectiveGroupAllowFrom,
|
|
2545
|
-
userId: contextSenderId
|
|
2546
|
-
}).allowed;
|
|
2547
|
-
return true;
|
|
2548
|
-
};
|
|
2549
|
-
const shouldIncludeRoomContextSender = (kind, contextSenderId) => evaluateSupplementalContextVisibility({
|
|
2550
|
-
mode: contextVisibilityMode,
|
|
2551
|
-
kind,
|
|
2552
|
-
senderAllowed: isRoomContextSenderAllowed(contextSenderId)
|
|
2553
|
-
}).include;
|
|
2554
|
-
let threadContext = _threadRootId ? await resolveThreadContext({
|
|
2555
|
-
roomId,
|
|
2556
|
-
threadRootId: _threadRootId
|
|
2557
|
-
}) : void 0;
|
|
2558
|
-
let threadContextBlockedByPolicy = false;
|
|
2559
|
-
if (threadContext?.senderId && !shouldIncludeRoomContextSender("thread", threadContext.senderId)) {
|
|
2560
|
-
logVerboseMessage(`matrix: drop thread root context (mode=${contextVisibilityMode})`);
|
|
2561
|
-
threadContextBlockedByPolicy = true;
|
|
2562
|
-
threadContext = void 0;
|
|
2563
|
-
}
|
|
2564
|
-
let replyContext;
|
|
2565
|
-
if (replyToEventId && replyToEventId === _threadRootId && threadContext?.summary) replyContext = {
|
|
2566
|
-
replyToBody: threadContext.summary,
|
|
2567
|
-
replyToSender: threadContext.senderLabel,
|
|
2568
|
-
replyToSenderId: threadContext.senderId
|
|
2569
|
-
};
|
|
2570
|
-
else if (replyToEventId && replyToEventId === _threadRootId && threadContextBlockedByPolicy) replyContext = await resolveReplyContext({
|
|
2571
|
-
roomId,
|
|
2572
|
-
eventId: replyToEventId
|
|
2573
|
-
});
|
|
2574
|
-
else replyContext = replyToEventId ? await resolveReplyContext({
|
|
2575
|
-
roomId,
|
|
2576
|
-
eventId: replyToEventId
|
|
2577
|
-
}) : void 0;
|
|
2578
|
-
if (replyContext?.replyToSenderId && !shouldIncludeRoomContextSender("quote", replyContext.replyToSenderId)) {
|
|
2579
|
-
logVerboseMessage(`matrix: drop reply context (mode=${contextVisibilityMode})`);
|
|
2580
|
-
replyContext = void 0;
|
|
2581
|
-
}
|
|
2582
|
-
const roomName = (isRoom ? await getRoomInfo(roomId) : void 0)?.name;
|
|
2583
|
-
const envelopeFrom = isDirectMessage ? senderName : roomName ?? roomId;
|
|
2584
|
-
const textWithId = `${bodyText}\n[matrix event id: ${_messageId} room: ${roomId}]`;
|
|
2585
|
-
const storePath = core.channel.session.resolveStorePath(cfg.session?.store, { agentId: _route.agentId });
|
|
2586
|
-
const envelopeOptions = core.channel.reply.resolveEnvelopeFormatOptions(cfg);
|
|
2587
|
-
const previousTimestamp = core.channel.session.readSessionUpdatedAt({
|
|
2588
|
-
storePath,
|
|
2589
|
-
sessionKey: _route.sessionKey
|
|
2590
|
-
});
|
|
2591
|
-
const body = core.channel.reply.formatAgentEnvelope({
|
|
2592
|
-
channel: "Matrix",
|
|
2593
|
-
from: envelopeFrom,
|
|
2594
|
-
timestamp: eventTs ?? void 0,
|
|
2595
|
-
previousTimestamp,
|
|
2596
|
-
envelope: envelopeOptions,
|
|
2597
|
-
body: textWithId
|
|
2598
|
-
});
|
|
2599
|
-
const groupSystemPrompt = roomConfig?.systemPrompt?.trim() || void 0;
|
|
2600
|
-
const ctxPayload = core.channel.reply.finalizeInboundContext({
|
|
2601
|
-
Body: body,
|
|
2602
|
-
RawBody: bodyText,
|
|
2603
|
-
CommandBody: bodyText,
|
|
2604
|
-
InboundHistory: inboundHistory && inboundHistory.length > 0 ? inboundHistory : void 0,
|
|
2605
|
-
From: isDirectMessage ? `matrix:${senderId}` : `matrix:channel:${roomId}`,
|
|
2606
|
-
To: `room:${roomId}`,
|
|
2607
|
-
SessionKey: _route.sessionKey,
|
|
2608
|
-
AccountId: _route.accountId,
|
|
2609
|
-
ChatType: isDirectMessage ? "direct" : "channel",
|
|
2610
|
-
ConversationLabel: envelopeFrom,
|
|
2611
|
-
SenderName: senderName,
|
|
2612
|
-
SenderId: senderId,
|
|
2613
|
-
SenderUsername: senderId.split(":")[0]?.replace(/^@/, ""),
|
|
2614
|
-
GroupSubject: isRoom ? roomName ?? roomId : void 0,
|
|
2615
|
-
GroupId: isRoom ? roomId : void 0,
|
|
2616
|
-
GroupSystemPrompt: isRoom ? groupSystemPrompt : void 0,
|
|
2617
|
-
Provider: "matrix",
|
|
2618
|
-
Surface: "matrix",
|
|
2619
|
-
WasMentioned: isRoom ? wasMentioned : void 0,
|
|
2620
|
-
MessageSid: _messageId,
|
|
2621
|
-
ReplyToId: threadTarget ? void 0 : replyToEventId ?? void 0,
|
|
2622
|
-
ReplyToBody: replyContext?.replyToBody,
|
|
2623
|
-
ReplyToSender: replyContext?.replyToSender,
|
|
2624
|
-
MessageThreadId: threadTarget,
|
|
2625
|
-
ThreadStarterBody: threadContext?.threadStarterBody,
|
|
2626
|
-
Timestamp: eventTs ?? void 0,
|
|
2627
|
-
MediaPath: media?.path,
|
|
2628
|
-
MediaType: media?.contentType,
|
|
2629
|
-
MediaUrl: media?.path,
|
|
2630
|
-
...locationPayload?.context,
|
|
2631
|
-
CommandAuthorized: commandAuthorized,
|
|
2632
|
-
CommandSource: "text",
|
|
2633
|
-
OriginatingChannel: "matrix",
|
|
2634
|
-
OriginatingTo: `room:${roomId}`
|
|
2635
|
-
});
|
|
2636
|
-
await core.channel.session.recordInboundSession({
|
|
2637
|
-
storePath,
|
|
2638
|
-
sessionKey: ctxPayload.SessionKey ?? _route.sessionKey,
|
|
2639
|
-
ctx: ctxPayload,
|
|
2640
|
-
updateLastRoute: isDirectMessage ? {
|
|
2641
|
-
sessionKey: _route.mainSessionKey,
|
|
2642
|
-
channel: "matrix",
|
|
2643
|
-
to: `room:${roomId}`,
|
|
2644
|
-
accountId: _route.accountId
|
|
2645
|
-
} : void 0,
|
|
2646
|
-
onRecordError: (err) => {
|
|
2647
|
-
logger.warn("failed updating session meta", {
|
|
2648
|
-
error: String(err),
|
|
2649
|
-
storePath,
|
|
2650
|
-
sessionKey: ctxPayload.SessionKey ?? _route.sessionKey
|
|
2651
|
-
});
|
|
2652
|
-
}
|
|
2653
|
-
});
|
|
2654
|
-
logVerboseMessage(`matrix inbound: room=${roomId} from=${senderId} preview="${bodyText.slice(0, 200).replace(/\n/g, "\\n")}"`);
|
|
2655
|
-
const replyTarget = ctxPayload.To;
|
|
2656
|
-
if (!replyTarget) {
|
|
2657
|
-
runtime.error?.("matrix: missing reply target");
|
|
2658
|
-
return;
|
|
2659
|
-
}
|
|
2660
|
-
const { ackReaction, ackReactionScope: ackScope } = resolveMatrixAckReactionConfig({
|
|
2661
|
-
cfg,
|
|
2662
|
-
agentId: _route.agentId,
|
|
2663
|
-
accountId
|
|
2664
|
-
});
|
|
2665
|
-
const shouldAckReaction = () => Boolean(ackReaction && core.channel.reactions.shouldAckReaction({
|
|
2666
|
-
scope: ackScope,
|
|
2667
|
-
isDirect: isDirectMessage,
|
|
2668
|
-
isGroup: isRoom,
|
|
2669
|
-
isMentionableGroup: isRoom,
|
|
2670
|
-
requireMention: Boolean(shouldRequireMention),
|
|
2671
|
-
canDetectMention,
|
|
2672
|
-
effectiveWasMentioned: wasMentioned || shouldBypassMention,
|
|
2673
|
-
shouldBypassMention
|
|
2674
|
-
}));
|
|
2675
|
-
if (shouldAckReaction() && _messageId) reactMatrixMessage(roomId, _messageId, ackReaction, client).catch((err) => {
|
|
2676
|
-
logVerboseMessage(`matrix react failed for room ${roomId}: ${String(err)}`);
|
|
2677
|
-
});
|
|
2678
|
-
if (_messageId) sendReadReceiptMatrix(roomId, _messageId, client).catch((err) => {
|
|
2679
|
-
logVerboseMessage(`matrix: read receipt failed room=${roomId} id=${_messageId}: ${String(err)}`);
|
|
2680
|
-
});
|
|
2681
|
-
const tableMode = core.channel.text.resolveMarkdownTableMode({
|
|
2682
|
-
cfg,
|
|
2683
|
-
channel: "matrix",
|
|
2684
|
-
accountId: _route.accountId
|
|
2685
|
-
});
|
|
2686
|
-
const mediaLocalRoots = getAgentScopedMediaLocalRoots(cfg, _route.agentId);
|
|
2687
|
-
let finalReplyDeliveryFailed = false;
|
|
2688
|
-
let nonFinalReplyDeliveryFailed = false;
|
|
2689
|
-
const { onModelSelected, ...prefixOptions } = createReplyPrefixOptions({
|
|
2690
|
-
cfg,
|
|
2691
|
-
agentId: _route.agentId,
|
|
2692
|
-
channel: "matrix",
|
|
2693
|
-
accountId: _route.accountId
|
|
2694
|
-
});
|
|
2695
|
-
const typingCallbacks = createTypingCallbacks({
|
|
2696
|
-
start: () => sendTypingMatrix(roomId, true, void 0, client),
|
|
2697
|
-
stop: () => sendTypingMatrix(roomId, false, void 0, client),
|
|
2698
|
-
onStartError: (err) => {
|
|
2699
|
-
logTypingFailure({
|
|
2700
|
-
log: logVerboseMessage,
|
|
2701
|
-
channel: "matrix",
|
|
2702
|
-
action: "start",
|
|
2703
|
-
target: roomId,
|
|
2704
|
-
error: err
|
|
2705
|
-
});
|
|
2706
|
-
},
|
|
2707
|
-
onStopError: (err) => {
|
|
2708
|
-
logTypingFailure({
|
|
2709
|
-
log: logVerboseMessage,
|
|
2710
|
-
channel: "matrix",
|
|
2711
|
-
action: "stop",
|
|
2712
|
-
target: roomId,
|
|
2713
|
-
error: err
|
|
2714
|
-
});
|
|
2715
|
-
}
|
|
2716
|
-
});
|
|
2717
|
-
const draftStreamingEnabled = streaming === "partial";
|
|
2718
|
-
const draftReplyToId = replyToMode !== "off" && !threadTarget ? _messageId : void 0;
|
|
2719
|
-
let currentDraftReplyToId = draftReplyToId;
|
|
2720
|
-
const draftStream = draftStreamingEnabled ? createMatrixDraftStream({
|
|
2721
|
-
roomId,
|
|
2722
|
-
client,
|
|
2723
|
-
cfg,
|
|
2724
|
-
threadId: threadTarget,
|
|
2725
|
-
replyToId: draftReplyToId,
|
|
2726
|
-
preserveReplyId: replyToMode === "all",
|
|
2727
|
-
accountId: _route.accountId,
|
|
2728
|
-
log: logVerboseMessage
|
|
2729
|
-
}) : void 0;
|
|
2730
|
-
draftStreamRef = draftStream;
|
|
2731
|
-
let currentDraftMessageGeneration = 0;
|
|
2732
|
-
let currentDraftBlockOffset = 0;
|
|
2733
|
-
let latestDraftFullText = "";
|
|
2734
|
-
const pendingDraftBoundaries = [];
|
|
2735
|
-
const latestQueuedDraftBoundaryOffsets = /* @__PURE__ */ new Map();
|
|
2736
|
-
let draftConsumed = false;
|
|
2737
|
-
const getDisplayableDraftText = () => {
|
|
2738
|
-
const nextDraftBoundaryOffset = pendingDraftBoundaries.find((boundary) => boundary.messageGeneration === currentDraftMessageGeneration)?.endOffset;
|
|
2739
|
-
if (nextDraftBoundaryOffset === void 0) return latestDraftFullText.slice(currentDraftBlockOffset);
|
|
2740
|
-
return latestDraftFullText.slice(currentDraftBlockOffset, nextDraftBoundaryOffset);
|
|
2741
|
-
};
|
|
2742
|
-
const updateDraftFromLatestFullText = () => {
|
|
2743
|
-
const blockText = getDisplayableDraftText();
|
|
2744
|
-
if (blockText) draftStream?.update(blockText);
|
|
2745
|
-
};
|
|
2746
|
-
const queueDraftBlockBoundary = (payload, context) => {
|
|
2747
|
-
const payloadTextLength = payload.text?.length ?? 0;
|
|
2748
|
-
const messageGeneration = context?.assistantMessageIndex ?? currentDraftMessageGeneration;
|
|
2749
|
-
const nextDraftBoundaryOffset = (latestQueuedDraftBoundaryOffsets.get(messageGeneration) ?? 0) + payloadTextLength;
|
|
2750
|
-
latestQueuedDraftBoundaryOffsets.set(messageGeneration, nextDraftBoundaryOffset);
|
|
2751
|
-
pendingDraftBoundaries.push({
|
|
2752
|
-
messageGeneration,
|
|
2753
|
-
endOffset: nextDraftBoundaryOffset
|
|
2754
|
-
});
|
|
2755
|
-
};
|
|
2756
|
-
const advanceDraftBlockBoundary = (options) => {
|
|
2757
|
-
const completedBoundary = pendingDraftBoundaries.shift();
|
|
2758
|
-
if (completedBoundary) {
|
|
2759
|
-
if (!pendingDraftBoundaries.some((entry) => entry.messageGeneration === completedBoundary.messageGeneration)) latestQueuedDraftBoundaryOffsets.delete(completedBoundary.messageGeneration);
|
|
2760
|
-
if (completedBoundary.messageGeneration === currentDraftMessageGeneration) currentDraftBlockOffset = completedBoundary.endOffset;
|
|
2761
|
-
return;
|
|
2762
|
-
}
|
|
2763
|
-
if (options?.fallbackToLatestEnd) currentDraftBlockOffset = latestDraftFullText.length;
|
|
2764
|
-
};
|
|
2765
|
-
const resetDraftBlockOffsets = () => {
|
|
2766
|
-
currentDraftMessageGeneration += 1;
|
|
2767
|
-
currentDraftBlockOffset = 0;
|
|
2768
|
-
latestDraftFullText = "";
|
|
2769
|
-
};
|
|
2770
|
-
const { dispatcher, replyOptions, markDispatchIdle, markRunComplete } = core.channel.reply.createReplyDispatcherWithTyping({
|
|
2771
|
-
...prefixOptions,
|
|
2772
|
-
humanDelay: core.channel.reply.resolveHumanDelayConfig(cfg, _route.agentId),
|
|
2773
|
-
deliver: async (payload, info) => {
|
|
2774
|
-
if (draftStream && info.kind !== "tool" && !payload.isCompactionNotice) {
|
|
2775
|
-
const hasMedia = Boolean(payload.mediaUrl) || (payload.mediaUrls?.length ?? 0) > 0;
|
|
2776
|
-
await draftStream.stop();
|
|
2777
|
-
if (draftConsumed) {
|
|
2778
|
-
await deliverMatrixReplies({
|
|
2779
|
-
cfg,
|
|
2780
|
-
replies: [payload],
|
|
2781
|
-
roomId,
|
|
2782
|
-
client,
|
|
2783
|
-
runtime,
|
|
2784
|
-
textLimit,
|
|
2785
|
-
replyToMode,
|
|
2786
|
-
threadId: threadTarget,
|
|
2787
|
-
accountId: _route.accountId,
|
|
2788
|
-
mediaLocalRoots,
|
|
2789
|
-
tableMode
|
|
2790
|
-
});
|
|
2791
|
-
return;
|
|
2792
|
-
}
|
|
2793
|
-
const draftEventId = draftStream.eventId();
|
|
2794
|
-
const payloadReplyToId = payload.replyToId?.trim() || void 0;
|
|
2795
|
-
const payloadReplyMismatch = replyToMode !== "off" && !threadTarget && payloadReplyToId !== currentDraftReplyToId;
|
|
2796
|
-
const mustDeliverFinalNormally = draftStream.mustDeliverFinalNormally();
|
|
2797
|
-
if (draftEventId && payload.text && !hasMedia && !payloadReplyMismatch && !mustDeliverFinalNormally) {
|
|
2798
|
-
if (payload.text !== draftStream.lastSentText()) try {
|
|
2799
|
-
await editMessageMatrix(roomId, draftEventId, payload.text, {
|
|
2800
|
-
client,
|
|
2801
|
-
cfg,
|
|
2802
|
-
threadId: threadTarget,
|
|
2803
|
-
accountId: _route.accountId
|
|
2804
|
-
});
|
|
2805
|
-
} catch {
|
|
2806
|
-
await client.redactEvent(roomId, draftEventId).catch(() => {});
|
|
2807
|
-
await deliverMatrixReplies({
|
|
2808
|
-
cfg,
|
|
2809
|
-
replies: [payload],
|
|
2810
|
-
roomId,
|
|
2811
|
-
client,
|
|
2812
|
-
runtime,
|
|
2813
|
-
textLimit,
|
|
2814
|
-
replyToMode,
|
|
2815
|
-
threadId: threadTarget,
|
|
2816
|
-
accountId: _route.accountId,
|
|
2817
|
-
mediaLocalRoots,
|
|
2818
|
-
tableMode
|
|
2819
|
-
});
|
|
2820
|
-
}
|
|
2821
|
-
draftConsumed = true;
|
|
2822
|
-
} else if (draftEventId && hasMedia && !payloadReplyMismatch) {
|
|
2823
|
-
let textEditOk = !mustDeliverFinalNormally;
|
|
2824
|
-
if (textEditOk && payload.text && payload.text !== draftStream.lastSentText()) textEditOk = await editMessageMatrix(roomId, draftEventId, payload.text, {
|
|
2825
|
-
client,
|
|
2826
|
-
cfg,
|
|
2827
|
-
threadId: threadTarget,
|
|
2828
|
-
accountId: _route.accountId
|
|
2829
|
-
}).then(() => true, () => false);
|
|
2830
|
-
const reusesDraftAsFinalText = Boolean(payload.text?.trim()) && textEditOk;
|
|
2831
|
-
if (!reusesDraftAsFinalText) await client.redactEvent(roomId, draftEventId).catch(() => {});
|
|
2832
|
-
await deliverMatrixReplies({
|
|
2833
|
-
cfg,
|
|
2834
|
-
replies: [{
|
|
2835
|
-
...payload,
|
|
2836
|
-
text: reusesDraftAsFinalText ? void 0 : payload.text
|
|
2837
|
-
}],
|
|
2838
|
-
roomId,
|
|
2839
|
-
client,
|
|
2840
|
-
runtime,
|
|
2841
|
-
textLimit,
|
|
2842
|
-
replyToMode,
|
|
2843
|
-
threadId: threadTarget,
|
|
2844
|
-
accountId: _route.accountId,
|
|
2845
|
-
mediaLocalRoots,
|
|
2846
|
-
tableMode
|
|
2847
|
-
});
|
|
2848
|
-
draftConsumed = true;
|
|
2849
|
-
} else {
|
|
2850
|
-
if (draftEventId && (payloadReplyMismatch || mustDeliverFinalNormally)) await client.redactEvent(roomId, draftEventId).catch(() => {});
|
|
2851
|
-
await deliverMatrixReplies({
|
|
2852
|
-
cfg,
|
|
2853
|
-
replies: [payload],
|
|
2854
|
-
roomId,
|
|
2855
|
-
client,
|
|
2856
|
-
runtime,
|
|
2857
|
-
textLimit,
|
|
2858
|
-
replyToMode,
|
|
2859
|
-
threadId: threadTarget,
|
|
2860
|
-
accountId: _route.accountId,
|
|
2861
|
-
mediaLocalRoots,
|
|
2862
|
-
tableMode
|
|
2863
|
-
});
|
|
2864
|
-
}
|
|
2865
|
-
if (info.kind === "block") {
|
|
2866
|
-
draftConsumed = false;
|
|
2867
|
-
advanceDraftBlockBoundary({ fallbackToLatestEnd: true });
|
|
2868
|
-
draftStream.reset();
|
|
2869
|
-
currentDraftReplyToId = replyToMode === "all" ? draftReplyToId : void 0;
|
|
2870
|
-
updateDraftFromLatestFullText();
|
|
2871
|
-
await sendTypingMatrix(roomId, true, void 0, client).catch(() => {});
|
|
2872
|
-
}
|
|
2873
|
-
} else await deliverMatrixReplies({
|
|
2874
|
-
cfg,
|
|
2875
|
-
replies: [payload],
|
|
2876
|
-
roomId,
|
|
2877
|
-
client,
|
|
2878
|
-
runtime,
|
|
2879
|
-
textLimit,
|
|
2880
|
-
replyToMode,
|
|
2881
|
-
threadId: threadTarget,
|
|
2882
|
-
accountId: _route.accountId,
|
|
2883
|
-
mediaLocalRoots,
|
|
2884
|
-
tableMode
|
|
2885
|
-
});
|
|
2886
|
-
},
|
|
2887
|
-
onError: (err, info) => {
|
|
2888
|
-
if (info.kind === "final") finalReplyDeliveryFailed = true;
|
|
2889
|
-
else nonFinalReplyDeliveryFailed = true;
|
|
2890
|
-
if (info.kind === "block") advanceDraftBlockBoundary({ fallbackToLatestEnd: true });
|
|
2891
|
-
runtime.error?.(`matrix ${info.kind} reply failed: ${String(err)}`);
|
|
2892
|
-
},
|
|
2893
|
-
onReplyStart: typingCallbacks.onReplyStart,
|
|
2894
|
-
onIdle: typingCallbacks.onIdle
|
|
2895
|
-
});
|
|
2896
|
-
const { queuedFinal, counts } = await core.channel.reply.withReplyDispatcher({
|
|
2897
|
-
dispatcher,
|
|
2898
|
-
onSettled: () => {
|
|
2899
|
-
markDispatchIdle();
|
|
2900
|
-
},
|
|
2901
|
-
run: async () => {
|
|
2902
|
-
try {
|
|
2903
|
-
return await core.channel.reply.dispatchReplyFromConfig({
|
|
2904
|
-
ctx: ctxPayload,
|
|
2905
|
-
cfg,
|
|
2906
|
-
dispatcher,
|
|
2907
|
-
replyOptions: {
|
|
2908
|
-
...replyOptions,
|
|
2909
|
-
skillFilter: roomConfig?.skills,
|
|
2910
|
-
disableBlockStreaming: !blockStreamingEnabled,
|
|
2911
|
-
onPartialReply: draftStream ? (payload) => {
|
|
2912
|
-
latestDraftFullText = payload.text ?? "";
|
|
2913
|
-
updateDraftFromLatestFullText();
|
|
2914
|
-
} : void 0,
|
|
2915
|
-
onBlockReplyQueued: draftStream ? (payload, context) => {
|
|
2916
|
-
if (payload.isCompactionNotice === true) return;
|
|
2917
|
-
queueDraftBlockBoundary(payload, context);
|
|
2918
|
-
} : void 0,
|
|
2919
|
-
onAssistantMessageStart: draftStream ? () => {
|
|
2920
|
-
resetDraftBlockOffsets();
|
|
2921
|
-
} : void 0,
|
|
2922
|
-
onModelSelected
|
|
2923
|
-
}
|
|
2924
|
-
});
|
|
2925
|
-
} finally {
|
|
2926
|
-
markRunComplete();
|
|
2927
|
-
}
|
|
2928
|
-
}
|
|
2929
|
-
});
|
|
2930
|
-
if (finalReplyDeliveryFailed) {
|
|
2931
|
-
logVerboseMessage(`matrix: final reply delivery failed room=${roomId} id=${_messageId}; leaving event uncommitted`);
|
|
2932
|
-
return;
|
|
2933
|
-
}
|
|
2934
|
-
if (!queuedFinal && nonFinalReplyDeliveryFailed) {
|
|
2935
|
-
logVerboseMessage(`matrix: non-final reply delivery failed room=${roomId} id=${_messageId}; leaving event uncommitted`);
|
|
2936
|
-
return;
|
|
2937
|
-
}
|
|
2938
|
-
if (isRoom && triggerSnapshot) roomHistoryTracker.consumeHistory(_route.agentId, roomId, triggerSnapshot, _messageId);
|
|
2939
|
-
if (!queuedFinal) {
|
|
2940
|
-
await commitInboundEventIfClaimed();
|
|
2941
|
-
return;
|
|
2942
|
-
}
|
|
2943
|
-
const finalCount = counts.final;
|
|
2944
|
-
logVerboseMessage(`matrix: delivered ${finalCount} reply${finalCount === 1 ? "" : "ies"} to ${replyTarget}`);
|
|
2945
|
-
await commitInboundEventIfClaimed();
|
|
2946
|
-
} catch (err) {
|
|
2947
|
-
runtime.error?.(`matrix handler failed: ${String(err)}`);
|
|
2948
|
-
} finally {
|
|
2949
|
-
if (draftStreamRef) await draftStreamRef.stop().catch(() => {});
|
|
2950
|
-
if (claimedInboundEvent && inboundDeduper && eventId) inboundDeduper.releaseEvent({
|
|
2951
|
-
roomId,
|
|
2952
|
-
eventId
|
|
2953
|
-
});
|
|
2954
|
-
}
|
|
2955
|
-
};
|
|
2956
|
-
}
|
|
2957
|
-
//#endregion
|
|
2958
|
-
//#region extensions/matrix/src/matrix/monitor/inbound-dedupe.ts
|
|
2959
|
-
const INBOUND_DEDUPE_FILENAME = "inbound-dedupe.json";
|
|
2960
|
-
const STORE_VERSION = 1;
|
|
2961
|
-
const DEFAULT_MAX_ENTRIES = 2e4;
|
|
2962
|
-
const DEFAULT_TTL_MS = 720 * 60 * 60 * 1e3;
|
|
2963
|
-
const PERSIST_DEBOUNCE_MS = 250;
|
|
2964
|
-
function normalizeEventPart(value) {
|
|
2965
|
-
return value.trim();
|
|
2966
|
-
}
|
|
2967
|
-
function buildEventKey(params) {
|
|
2968
|
-
const roomId = normalizeEventPart(params.roomId);
|
|
2969
|
-
const eventId = normalizeEventPart(params.eventId);
|
|
2970
|
-
return roomId && eventId ? `${roomId}|${eventId}` : "";
|
|
2971
|
-
}
|
|
2972
|
-
function resolveInboundDedupeStatePath(params) {
|
|
2973
|
-
return resolveMatrixStateFilePath({
|
|
2974
|
-
auth: params.auth,
|
|
2975
|
-
env: params.env,
|
|
2976
|
-
stateDir: params.stateDir,
|
|
2977
|
-
filename: INBOUND_DEDUPE_FILENAME
|
|
2978
|
-
});
|
|
2979
|
-
}
|
|
2980
|
-
function normalizeTimestamp(raw) {
|
|
2981
|
-
if (typeof raw !== "number" || !Number.isFinite(raw)) return null;
|
|
2982
|
-
return Math.max(0, Math.floor(raw));
|
|
2983
|
-
}
|
|
2984
|
-
function pruneSeenEvents(params) {
|
|
2985
|
-
const { seen, ttlMs, maxEntries, nowMs } = params;
|
|
2986
|
-
if (ttlMs > 0) {
|
|
2987
|
-
const cutoff = nowMs - ttlMs;
|
|
2988
|
-
for (const [key, ts] of seen) if (ts < cutoff) seen.delete(key);
|
|
2989
|
-
}
|
|
2990
|
-
const max = Math.max(0, Math.floor(maxEntries));
|
|
2991
|
-
if (max <= 0) {
|
|
2992
|
-
seen.clear();
|
|
2993
|
-
return;
|
|
2994
|
-
}
|
|
2995
|
-
while (seen.size > max) {
|
|
2996
|
-
const oldestKey = seen.keys().next().value;
|
|
2997
|
-
if (typeof oldestKey !== "string") break;
|
|
2998
|
-
seen.delete(oldestKey);
|
|
2999
|
-
}
|
|
3000
|
-
}
|
|
3001
|
-
function toStoredState(params) {
|
|
3002
|
-
pruneSeenEvents(params);
|
|
3003
|
-
return {
|
|
3004
|
-
version: STORE_VERSION,
|
|
3005
|
-
entries: Array.from(params.seen.entries()).map(([key, ts]) => ({
|
|
3006
|
-
key,
|
|
3007
|
-
ts
|
|
3008
|
-
}))
|
|
3009
|
-
};
|
|
3010
|
-
}
|
|
3011
|
-
async function readStoredState(storagePath) {
|
|
3012
|
-
const { value } = await readJsonFileWithFallback(storagePath, null);
|
|
3013
|
-
if (value?.version !== STORE_VERSION || !Array.isArray(value.entries)) return null;
|
|
3014
|
-
return value;
|
|
3015
|
-
}
|
|
3016
|
-
async function createMatrixInboundEventDeduper(params) {
|
|
3017
|
-
const nowMs = params.nowMs ?? (() => Date.now());
|
|
3018
|
-
const ttlMs = typeof params.ttlMs === "number" && Number.isFinite(params.ttlMs) ? Math.max(0, Math.floor(params.ttlMs)) : DEFAULT_TTL_MS;
|
|
3019
|
-
const maxEntries = typeof params.maxEntries === "number" && Number.isFinite(params.maxEntries) ? Math.max(0, Math.floor(params.maxEntries)) : DEFAULT_MAX_ENTRIES;
|
|
3020
|
-
const storagePath = params.storagePath ?? resolveInboundDedupeStatePath({
|
|
3021
|
-
auth: params.auth,
|
|
3022
|
-
env: params.env,
|
|
3023
|
-
stateDir: params.stateDir
|
|
3024
|
-
});
|
|
3025
|
-
const seen = /* @__PURE__ */ new Map();
|
|
3026
|
-
const pending = /* @__PURE__ */ new Set();
|
|
3027
|
-
const persistLock = createAsyncLock();
|
|
3028
|
-
try {
|
|
3029
|
-
const stored = await readStoredState(storagePath);
|
|
3030
|
-
for (const entry of stored?.entries ?? []) {
|
|
3031
|
-
if (!entry || typeof entry.key !== "string") continue;
|
|
3032
|
-
const key = entry.key.trim();
|
|
3033
|
-
const ts = normalizeTimestamp(entry.ts);
|
|
3034
|
-
if (!key || ts === null) continue;
|
|
3035
|
-
seen.set(key, ts);
|
|
3036
|
-
}
|
|
3037
|
-
pruneSeenEvents({
|
|
3038
|
-
seen,
|
|
3039
|
-
ttlMs,
|
|
3040
|
-
maxEntries,
|
|
3041
|
-
nowMs: nowMs()
|
|
3042
|
-
});
|
|
3043
|
-
} catch (err) {
|
|
3044
|
-
LogService.warn("MatrixInboundDedupe", "Failed loading Matrix inbound dedupe store:", err);
|
|
3045
|
-
}
|
|
3046
|
-
let dirty = false;
|
|
3047
|
-
let persistTimer = null;
|
|
3048
|
-
let persistPromise = null;
|
|
3049
|
-
const persist = async () => {
|
|
3050
|
-
dirty = false;
|
|
3051
|
-
const payload = toStoredState({
|
|
3052
|
-
seen,
|
|
3053
|
-
ttlMs,
|
|
3054
|
-
maxEntries,
|
|
3055
|
-
nowMs: nowMs()
|
|
3056
|
-
});
|
|
3057
|
-
try {
|
|
3058
|
-
await persistLock(async () => {
|
|
3059
|
-
await writeJsonFileAtomically(storagePath, payload);
|
|
3060
|
-
});
|
|
3061
|
-
} catch (err) {
|
|
3062
|
-
dirty = true;
|
|
3063
|
-
throw err;
|
|
3064
|
-
}
|
|
3065
|
-
};
|
|
3066
|
-
const flush = async () => {
|
|
3067
|
-
if (persistTimer) {
|
|
3068
|
-
clearTimeout(persistTimer);
|
|
3069
|
-
persistTimer = null;
|
|
3070
|
-
}
|
|
3071
|
-
while (dirty || persistPromise) {
|
|
3072
|
-
if (dirty && !persistPromise) persistPromise = persist().finally(() => {
|
|
3073
|
-
persistPromise = null;
|
|
3074
|
-
});
|
|
3075
|
-
await persistPromise;
|
|
3076
|
-
}
|
|
3077
|
-
};
|
|
3078
|
-
const schedulePersist = () => {
|
|
3079
|
-
dirty = true;
|
|
3080
|
-
if (persistTimer) return;
|
|
3081
|
-
persistTimer = setTimeout(() => {
|
|
3082
|
-
persistTimer = null;
|
|
3083
|
-
flush().catch((err) => {
|
|
3084
|
-
LogService.warn("MatrixInboundDedupe", "Failed persisting Matrix inbound dedupe store:", err);
|
|
3085
|
-
});
|
|
3086
|
-
}, PERSIST_DEBOUNCE_MS);
|
|
3087
|
-
persistTimer.unref?.();
|
|
3088
|
-
};
|
|
3089
|
-
return {
|
|
3090
|
-
claimEvent: ({ roomId, eventId }) => {
|
|
3091
|
-
const key = buildEventKey({
|
|
3092
|
-
roomId,
|
|
3093
|
-
eventId
|
|
3094
|
-
});
|
|
3095
|
-
if (!key) return true;
|
|
3096
|
-
pruneSeenEvents({
|
|
3097
|
-
seen,
|
|
3098
|
-
ttlMs,
|
|
3099
|
-
maxEntries,
|
|
3100
|
-
nowMs: nowMs()
|
|
3101
|
-
});
|
|
3102
|
-
if (seen.has(key) || pending.has(key)) return false;
|
|
3103
|
-
pending.add(key);
|
|
3104
|
-
return true;
|
|
3105
|
-
},
|
|
3106
|
-
commitEvent: async ({ roomId, eventId }) => {
|
|
3107
|
-
const key = buildEventKey({
|
|
3108
|
-
roomId,
|
|
3109
|
-
eventId
|
|
3110
|
-
});
|
|
3111
|
-
if (!key) return;
|
|
3112
|
-
pending.delete(key);
|
|
3113
|
-
const ts = nowMs();
|
|
3114
|
-
seen.delete(key);
|
|
3115
|
-
seen.set(key, ts);
|
|
3116
|
-
pruneSeenEvents({
|
|
3117
|
-
seen,
|
|
3118
|
-
ttlMs,
|
|
3119
|
-
maxEntries,
|
|
3120
|
-
nowMs: nowMs()
|
|
3121
|
-
});
|
|
3122
|
-
schedulePersist();
|
|
3123
|
-
},
|
|
3124
|
-
releaseEvent: ({ roomId, eventId }) => {
|
|
3125
|
-
const key = buildEventKey({
|
|
3126
|
-
roomId,
|
|
3127
|
-
eventId
|
|
3128
|
-
});
|
|
3129
|
-
if (!key) return;
|
|
3130
|
-
pending.delete(key);
|
|
3131
|
-
},
|
|
3132
|
-
flush,
|
|
3133
|
-
stop: async () => {
|
|
3134
|
-
try {
|
|
3135
|
-
await flush();
|
|
3136
|
-
} catch (err) {
|
|
3137
|
-
LogService.warn("MatrixInboundDedupe", "Failed to flush Matrix inbound dedupe store during stop():", err);
|
|
3138
|
-
}
|
|
3139
|
-
}
|
|
3140
|
-
};
|
|
3141
|
-
}
|
|
3142
|
-
//#endregion
|
|
3143
|
-
//#region extensions/matrix/src/matrix/monitor/recent-invite.ts
|
|
3144
|
-
function shouldPromoteRecentInviteRoom(params) {
|
|
3145
|
-
if (!params.roomInfo.nameResolved || !params.roomInfo.aliasesResolved) return false;
|
|
3146
|
-
const roomAliases = [params.roomInfo.canonicalAlias ?? "", ...params.roomInfo.altAliases].filter(Boolean);
|
|
3147
|
-
if ((params.roomInfo.name?.trim() ?? "") || roomAliases.length > 0) return false;
|
|
3148
|
-
return resolveMatrixRoomConfig({
|
|
3149
|
-
rooms: params.rooms,
|
|
3150
|
-
roomId: params.roomId,
|
|
3151
|
-
aliases: roomAliases
|
|
3152
|
-
}).matchSource === void 0;
|
|
3153
|
-
}
|
|
3154
|
-
//#endregion
|
|
3155
|
-
//#region extensions/matrix/src/matrix/monitor/room-info.ts
|
|
3156
|
-
const MAX_TRACKED_ROOM_INFO = 1024;
|
|
3157
|
-
const MAX_TRACKED_MEMBER_DISPLAY_NAMES = 4096;
|
|
3158
|
-
function rememberBounded(map, key, value, maxEntries) {
|
|
3159
|
-
map.set(key, value);
|
|
3160
|
-
if (map.size > maxEntries) {
|
|
3161
|
-
const oldest = map.keys().next().value;
|
|
3162
|
-
if (typeof oldest === "string") map.delete(oldest);
|
|
3163
|
-
}
|
|
3164
|
-
}
|
|
3165
|
-
function createMatrixRoomInfoResolver(client) {
|
|
3166
|
-
const roomNameCache = /* @__PURE__ */ new Map();
|
|
3167
|
-
const roomAliasCache = /* @__PURE__ */ new Map();
|
|
3168
|
-
const memberDisplayNameCache = /* @__PURE__ */ new Map();
|
|
3169
|
-
const getRoomName = async (roomId) => {
|
|
3170
|
-
if (roomNameCache.has(roomId)) return roomNameCache.get(roomId) ?? { nameResolved: false };
|
|
3171
|
-
let name;
|
|
3172
|
-
let nameResolved = false;
|
|
3173
|
-
try {
|
|
3174
|
-
const nameState = await client.getRoomStateEvent(roomId, "m.room.name", "");
|
|
3175
|
-
nameResolved = true;
|
|
3176
|
-
if (nameState && typeof nameState.name === "string") name = nameState.name;
|
|
3177
|
-
} catch (err) {
|
|
3178
|
-
if (isMatrixNotFoundError(err)) nameResolved = true;
|
|
3179
|
-
}
|
|
3180
|
-
const info = {
|
|
3181
|
-
name,
|
|
3182
|
-
nameResolved
|
|
3183
|
-
};
|
|
3184
|
-
if (nameResolved) rememberBounded(roomNameCache, roomId, info, MAX_TRACKED_ROOM_INFO);
|
|
3185
|
-
return info;
|
|
3186
|
-
};
|
|
3187
|
-
const getRoomAliases = async (roomId) => {
|
|
3188
|
-
const cached = roomAliasCache.get(roomId);
|
|
3189
|
-
if (cached) return cached;
|
|
3190
|
-
let canonicalAlias;
|
|
3191
|
-
let altAliases = [];
|
|
3192
|
-
let aliasesResolved = false;
|
|
3193
|
-
try {
|
|
3194
|
-
const aliasState = await client.getRoomStateEvent(roomId, "m.room.canonical_alias", "");
|
|
3195
|
-
aliasesResolved = true;
|
|
3196
|
-
if (aliasState && typeof aliasState.alias === "string") canonicalAlias = aliasState.alias;
|
|
3197
|
-
const rawAliases = aliasState?.alt_aliases;
|
|
3198
|
-
if (Array.isArray(rawAliases)) altAliases = rawAliases.filter((entry) => typeof entry === "string");
|
|
3199
|
-
} catch (err) {
|
|
3200
|
-
if (isMatrixNotFoundError(err)) aliasesResolved = true;
|
|
3201
|
-
}
|
|
3202
|
-
const info = {
|
|
3203
|
-
canonicalAlias,
|
|
3204
|
-
altAliases,
|
|
3205
|
-
aliasesResolved
|
|
3206
|
-
};
|
|
3207
|
-
if (aliasesResolved) rememberBounded(roomAliasCache, roomId, info, MAX_TRACKED_ROOM_INFO);
|
|
3208
|
-
return info;
|
|
3209
|
-
};
|
|
3210
|
-
const getRoomInfo = async (roomId, opts = {}) => {
|
|
3211
|
-
const { name, nameResolved } = await getRoomName(roomId);
|
|
3212
|
-
if (!opts.includeAliases) return {
|
|
3213
|
-
name,
|
|
3214
|
-
altAliases: [],
|
|
3215
|
-
nameResolved,
|
|
3216
|
-
aliasesResolved: false
|
|
3217
|
-
};
|
|
3218
|
-
return {
|
|
3219
|
-
name,
|
|
3220
|
-
nameResolved,
|
|
3221
|
-
...await getRoomAliases(roomId)
|
|
3222
|
-
};
|
|
3223
|
-
};
|
|
3224
|
-
const getMemberDisplayName = async (roomId, userId) => {
|
|
3225
|
-
const cacheKey = `${roomId}:${userId}`;
|
|
3226
|
-
if (memberDisplayNameCache.has(cacheKey)) return memberDisplayNameCache.get(cacheKey) ?? userId;
|
|
3227
|
-
const memberState = await client.getRoomStateEvent(roomId, "m.room.member", userId).catch(() => null);
|
|
3228
|
-
const displayName = memberState && typeof memberState.displayname === "string" ? memberState.displayname : userId;
|
|
3229
|
-
rememberBounded(memberDisplayNameCache, cacheKey, displayName, MAX_TRACKED_MEMBER_DISPLAY_NAMES);
|
|
3230
|
-
return displayName;
|
|
3231
|
-
};
|
|
3232
|
-
return {
|
|
3233
|
-
getRoomInfo,
|
|
3234
|
-
getMemberDisplayName
|
|
3235
|
-
};
|
|
3236
|
-
}
|
|
3237
|
-
//#endregion
|
|
3238
|
-
//#region extensions/matrix/src/matrix/monitor/startup.ts
|
|
3239
|
-
let matrixStartupMaintenanceDepsPromise;
|
|
3240
|
-
async function loadMatrixStartupMaintenanceDeps() {
|
|
3241
|
-
matrixStartupMaintenanceDepsPromise ??= Promise.all([
|
|
3242
|
-
import("./config-update-B_S0YQ_Y.js"),
|
|
3243
|
-
import("./device-health-B3q7Cmqn.js"),
|
|
3244
|
-
import("./profile-B5n9yLlB.js"),
|
|
3245
|
-
import("./legacy-crypto-restore-CsHmLVjY.js"),
|
|
3246
|
-
import("./startup-verification-DS8Rlwfj.js")
|
|
3247
|
-
]).then(([configUpdateModule, deviceHealthModule, profileModule, legacyCryptoRestoreModule, startupVerificationModule]) => ({
|
|
3248
|
-
updateMatrixAccountConfig: configUpdateModule.updateMatrixAccountConfig,
|
|
3249
|
-
summarizeMatrixDeviceHealth: deviceHealthModule.summarizeMatrixDeviceHealth,
|
|
3250
|
-
syncMatrixOwnProfile: profileModule.syncMatrixOwnProfile,
|
|
3251
|
-
maybeRestoreLegacyMatrixBackup: legacyCryptoRestoreModule.maybeRestoreLegacyMatrixBackup,
|
|
3252
|
-
ensureMatrixStartupVerification: startupVerificationModule.ensureMatrixStartupVerification
|
|
3253
|
-
}));
|
|
3254
|
-
return await matrixStartupMaintenanceDepsPromise;
|
|
3255
|
-
}
|
|
3256
|
-
async function runMatrixStartupMaintenance(params, deps) {
|
|
3257
|
-
const runtimeDeps = deps ?? await loadMatrixStartupMaintenanceDeps();
|
|
3258
|
-
try {
|
|
3259
|
-
const profileSync = await runtimeDeps.syncMatrixOwnProfile({
|
|
3260
|
-
client: params.client,
|
|
3261
|
-
userId: params.auth.userId,
|
|
3262
|
-
displayName: params.accountConfig.name,
|
|
3263
|
-
avatarUrl: params.accountConfig.avatarUrl,
|
|
3264
|
-
loadAvatarFromUrl: async (url, maxBytes) => await params.loadWebMedia(url, maxBytes)
|
|
3265
|
-
});
|
|
3266
|
-
if (profileSync.displayNameUpdated) params.logger.info(`matrix: profile display name updated for ${params.auth.userId}`);
|
|
3267
|
-
if (profileSync.avatarUpdated) params.logger.info(`matrix: profile avatar updated for ${params.auth.userId}`);
|
|
3268
|
-
if (profileSync.convertedAvatarFromHttp && profileSync.resolvedAvatarUrl && params.accountConfig.avatarUrl !== profileSync.resolvedAvatarUrl) {
|
|
3269
|
-
const latestCfg = params.loadConfig();
|
|
3270
|
-
const updatedCfg = runtimeDeps.updateMatrixAccountConfig(latestCfg, params.accountId, { avatarUrl: profileSync.resolvedAvatarUrl });
|
|
3271
|
-
await params.writeConfigFile(updatedCfg);
|
|
3272
|
-
params.logVerboseMessage(`matrix: persisted converted avatar URL for account ${params.accountId} (${profileSync.resolvedAvatarUrl})`);
|
|
3273
|
-
}
|
|
3274
|
-
} catch (err) {
|
|
3275
|
-
params.logger.warn("matrix: failed to sync profile from config", { error: String(err) });
|
|
3276
|
-
}
|
|
3277
|
-
if (!(params.auth.encryption && params.client.crypto)) return;
|
|
3278
|
-
try {
|
|
3279
|
-
const deviceHealth = runtimeDeps.summarizeMatrixDeviceHealth(await params.client.listOwnDevices());
|
|
3280
|
-
if (deviceHealth.staleOpenClawDevices.length > 0) params.logger.warn(`matrix: stale OpenClaw devices detected for ${params.auth.userId}: ${deviceHealth.staleOpenClawDevices.map((device) => device.deviceId).join(", ")}. Run 'openclaw matrix devices prune-stale --account ${params.effectiveAccountId}' to keep encrypted-room trust healthy.`);
|
|
3281
|
-
} catch (err) {
|
|
3282
|
-
params.logger.debug?.("Failed to inspect matrix device hygiene (non-fatal)", { error: String(err) });
|
|
3283
|
-
}
|
|
3284
|
-
try {
|
|
3285
|
-
const startupVerification = await runtimeDeps.ensureMatrixStartupVerification({
|
|
3286
|
-
client: params.client,
|
|
3287
|
-
auth: params.auth,
|
|
3288
|
-
accountConfig: params.accountConfig,
|
|
3289
|
-
env: params.env
|
|
3290
|
-
});
|
|
3291
|
-
if (startupVerification.kind === "verified") params.logger.info("matrix: device is verified by its owner and ready for encrypted rooms");
|
|
3292
|
-
else if (startupVerification.kind === "disabled" || startupVerification.kind === "cooldown" || startupVerification.kind === "pending" || startupVerification.kind === "request-failed") {
|
|
3293
|
-
params.logger.info("matrix: device not verified — run 'openclaw matrix verify device <key>' to enable E2EE");
|
|
3294
|
-
if (startupVerification.kind === "pending") params.logger.info("matrix: startup verification request is already pending; finish it in another Matrix client");
|
|
3295
|
-
else if (startupVerification.kind === "cooldown") params.logVerboseMessage(`matrix: skipped startup verification request due to cooldown (retryAfterMs=${startupVerification.retryAfterMs ?? 0})`);
|
|
3296
|
-
else if (startupVerification.kind === "request-failed") params.logger.debug?.("Matrix startup verification request failed (non-fatal)", { error: startupVerification.error ?? "unknown" });
|
|
3297
|
-
} else if (startupVerification.kind === "requested") params.logger.info("matrix: device not verified — requested verification in another Matrix client");
|
|
3298
|
-
} catch (err) {
|
|
3299
|
-
params.logger.debug?.("Failed to resolve matrix verification status (non-fatal)", { error: String(err) });
|
|
3300
|
-
}
|
|
3301
|
-
try {
|
|
3302
|
-
const legacyCryptoRestore = await runtimeDeps.maybeRestoreLegacyMatrixBackup({
|
|
3303
|
-
client: params.client,
|
|
3304
|
-
auth: params.auth,
|
|
3305
|
-
env: params.env
|
|
3306
|
-
});
|
|
3307
|
-
if (legacyCryptoRestore.kind === "restored") {
|
|
3308
|
-
params.logger.info(`matrix: restored ${legacyCryptoRestore.imported}/${legacyCryptoRestore.total} room key(s) from legacy encrypted-state backup`);
|
|
3309
|
-
if (legacyCryptoRestore.localOnlyKeys > 0) params.logger.warn(`matrix: ${legacyCryptoRestore.localOnlyKeys} legacy local-only room key(s) were never backed up and could not be restored automatically`);
|
|
3310
|
-
} else if (legacyCryptoRestore.kind === "failed") {
|
|
3311
|
-
params.logger.warn(`matrix: failed restoring room keys from legacy encrypted-state backup: ${legacyCryptoRestore.error}`);
|
|
3312
|
-
if (legacyCryptoRestore.localOnlyKeys > 0) params.logger.warn(`matrix: ${legacyCryptoRestore.localOnlyKeys} legacy local-only room key(s) were never backed up and may remain unavailable until manually recovered`);
|
|
3313
|
-
}
|
|
3314
|
-
} catch (err) {
|
|
3315
|
-
params.logger.warn("matrix: failed restoring legacy encrypted-state backup", { error: String(err) });
|
|
3316
|
-
}
|
|
3317
|
-
}
|
|
3318
|
-
//#endregion
|
|
3319
|
-
//#region extensions/matrix/src/matrix/monitor/index.ts
|
|
3320
|
-
const DEFAULT_MEDIA_MAX_MB = 20;
|
|
3321
|
-
async function monitorMatrixProvider(opts = {}) {
|
|
3322
|
-
if (opts.abortSignal?.aborted) return;
|
|
3323
|
-
if (isBunRuntime()) throw new Error("Matrix provider requires Node (bun runtime not supported)");
|
|
3324
|
-
const core = getMatrixRuntime();
|
|
3325
|
-
let cfg = core.config.loadConfig();
|
|
3326
|
-
if (cfg.channels?.["matrix"]?.enabled === false) return;
|
|
3327
|
-
const logger = core.logging.getChildLogger({ module: "matrix-auto-reply" });
|
|
3328
|
-
const formatRuntimeMessage = (...args) => format(...args);
|
|
3329
|
-
const runtime = opts.runtime ?? {
|
|
3330
|
-
log: (...args) => {
|
|
3331
|
-
logger.info(formatRuntimeMessage(...args));
|
|
3332
|
-
},
|
|
3333
|
-
error: (...args) => {
|
|
3334
|
-
logger.error(formatRuntimeMessage(...args));
|
|
3335
|
-
},
|
|
3336
|
-
exit: (code) => {
|
|
3337
|
-
throw new Error(`exit ${code}`);
|
|
3338
|
-
}
|
|
3339
|
-
};
|
|
3340
|
-
const logVerboseMessage = (message) => {
|
|
3341
|
-
if (!core.logging.shouldLogVerbose()) return;
|
|
3342
|
-
logger.debug?.(message);
|
|
3343
|
-
};
|
|
3344
|
-
const effectiveAccountId = resolveMatrixAuthContext({
|
|
3345
|
-
cfg,
|
|
3346
|
-
accountId: opts.accountId
|
|
3347
|
-
}).accountId;
|
|
3348
|
-
const accountConfig = resolveMatrixAccountConfig({
|
|
3349
|
-
cfg,
|
|
3350
|
-
accountId: effectiveAccountId
|
|
3351
|
-
});
|
|
3352
|
-
const allowlistOnly = accountConfig.allowlistOnly === true;
|
|
3353
|
-
const accountAllowBots = accountConfig.allowBots;
|
|
3354
|
-
let allowFrom = (accountConfig.dm?.allowFrom ?? []).map(String);
|
|
3355
|
-
let groupAllowFrom = (accountConfig.groupAllowFrom ?? []).map(String);
|
|
3356
|
-
let roomsConfig = accountConfig.groups ?? accountConfig.rooms;
|
|
3357
|
-
let needsRoomAliasesForConfig = false;
|
|
3358
|
-
const configuredBotUserIds = resolveConfiguredMatrixBotUserIds({
|
|
3359
|
-
cfg,
|
|
3360
|
-
accountId: effectiveAccountId
|
|
3361
|
-
});
|
|
3362
|
-
({allowFrom, groupAllowFrom, roomsConfig} = await resolveMatrixMonitorConfig({
|
|
3363
|
-
cfg,
|
|
3364
|
-
accountId: effectiveAccountId,
|
|
3365
|
-
allowFrom,
|
|
3366
|
-
groupAllowFrom,
|
|
3367
|
-
roomsConfig,
|
|
3368
|
-
runtime
|
|
3369
|
-
}));
|
|
3370
|
-
needsRoomAliasesForConfig = Boolean(roomsConfig && Object.keys(roomsConfig).some((key) => key.trim().startsWith("#")));
|
|
3371
|
-
cfg = {
|
|
3372
|
-
...cfg,
|
|
3373
|
-
channels: {
|
|
3374
|
-
...cfg.channels,
|
|
3375
|
-
matrix: {
|
|
3376
|
-
...cfg.channels?.["matrix"],
|
|
3377
|
-
dm: {
|
|
3378
|
-
...cfg.channels?.["matrix"]?.dm,
|
|
3379
|
-
allowFrom
|
|
3380
|
-
},
|
|
3381
|
-
groupAllowFrom,
|
|
3382
|
-
...roomsConfig ? { groups: roomsConfig } : {}
|
|
3383
|
-
}
|
|
3384
|
-
}
|
|
3385
|
-
};
|
|
3386
|
-
const auth = await resolveMatrixAuth({
|
|
3387
|
-
cfg,
|
|
3388
|
-
accountId: effectiveAccountId
|
|
3389
|
-
});
|
|
3390
|
-
const resolvedInitialSyncLimit = typeof opts.initialSyncLimit === "number" ? Math.max(0, Math.floor(opts.initialSyncLimit)) : auth.initialSyncLimit;
|
|
3391
|
-
const authWithLimit = resolvedInitialSyncLimit === auth.initialSyncLimit ? auth : {
|
|
3392
|
-
...auth,
|
|
3393
|
-
initialSyncLimit: resolvedInitialSyncLimit
|
|
3394
|
-
};
|
|
3395
|
-
const client = await resolveSharedMatrixClient({
|
|
3396
|
-
cfg,
|
|
3397
|
-
auth: authWithLimit,
|
|
3398
|
-
startClient: false,
|
|
3399
|
-
accountId: auth.accountId
|
|
3400
|
-
});
|
|
3401
|
-
setActiveMatrixClient(client, auth.accountId);
|
|
3402
|
-
let cleanedUp = false;
|
|
3403
|
-
let threadBindingManager = null;
|
|
3404
|
-
let execApprovalsHandler = null;
|
|
3405
|
-
const inboundDeduper = await createMatrixInboundEventDeduper({
|
|
3406
|
-
auth,
|
|
3407
|
-
env: process.env
|
|
3408
|
-
});
|
|
3409
|
-
const inFlightRoomMessages = /* @__PURE__ */ new Set();
|
|
3410
|
-
const waitForInFlightRoomMessages = async () => {
|
|
3411
|
-
while (inFlightRoomMessages.size > 0) await Promise.allSettled(Array.from(inFlightRoomMessages));
|
|
3412
|
-
};
|
|
3413
|
-
const cleanup = async () => {
|
|
3414
|
-
if (cleanedUp) return;
|
|
3415
|
-
cleanedUp = true;
|
|
3416
|
-
try {
|
|
3417
|
-
client.stopSyncWithoutPersist();
|
|
3418
|
-
await client.drainPendingDecryptions("matrix monitor shutdown");
|
|
3419
|
-
await waitForInFlightRoomMessages();
|
|
3420
|
-
await execApprovalsHandler?.stop();
|
|
3421
|
-
threadBindingManager?.stop();
|
|
3422
|
-
await inboundDeduper.stop();
|
|
3423
|
-
await releaseSharedClientInstance(client, "persist");
|
|
3424
|
-
} finally {
|
|
3425
|
-
setActiveMatrixClient(null, auth.accountId);
|
|
3426
|
-
}
|
|
3427
|
-
};
|
|
3428
|
-
const defaultGroupPolicy = resolveDefaultGroupPolicy(cfg);
|
|
3429
|
-
const { groupPolicy: groupPolicyRaw, providerMissingFallbackApplied } = resolveAllowlistProviderRuntimeGroupPolicy({
|
|
3430
|
-
providerConfigPresent: cfg.channels?.["matrix"] !== void 0,
|
|
3431
|
-
groupPolicy: accountConfig.groupPolicy,
|
|
3432
|
-
defaultGroupPolicy
|
|
3433
|
-
});
|
|
3434
|
-
warnMissingProviderGroupPolicyFallbackOnce({
|
|
3435
|
-
providerMissingFallbackApplied,
|
|
3436
|
-
providerKey: "matrix",
|
|
3437
|
-
accountId: effectiveAccountId,
|
|
3438
|
-
blockedLabel: GROUP_POLICY_BLOCKED_LABEL.room,
|
|
3439
|
-
log: (message) => logVerboseMessage(message)
|
|
3440
|
-
});
|
|
3441
|
-
const groupPolicy = allowlistOnly && groupPolicyRaw === "open" ? "allowlist" : groupPolicyRaw;
|
|
3442
|
-
const replyToMode = opts.replyToMode ?? accountConfig.replyToMode ?? "off";
|
|
3443
|
-
const threadReplies = accountConfig.threadReplies ?? "inbound";
|
|
3444
|
-
const dmThreadReplies = accountConfig.dm?.threadReplies;
|
|
3445
|
-
const threadBindingIdleTimeoutMs = resolveThreadBindingIdleTimeoutMsForChannel({
|
|
3446
|
-
cfg,
|
|
3447
|
-
channel: "matrix",
|
|
3448
|
-
accountId: effectiveAccountId
|
|
3449
|
-
});
|
|
3450
|
-
const threadBindingMaxAgeMs = resolveThreadBindingMaxAgeMsForChannel({
|
|
3451
|
-
cfg,
|
|
3452
|
-
channel: "matrix",
|
|
3453
|
-
accountId: effectiveAccountId
|
|
3454
|
-
});
|
|
3455
|
-
const dmConfig = accountConfig.dm;
|
|
3456
|
-
const dmEnabled = dmConfig?.enabled ?? true;
|
|
3457
|
-
const dmPolicyRaw = dmConfig?.policy ?? "pairing";
|
|
3458
|
-
const dmPolicy = allowlistOnly && dmPolicyRaw !== "disabled" ? "allowlist" : dmPolicyRaw;
|
|
3459
|
-
const textLimit = core.channel.text.resolveTextChunkLimit(cfg, "matrix", effectiveAccountId);
|
|
3460
|
-
const globalGroupChatHistoryLimit = cfg.messages?.groupChat?.historyLimit;
|
|
3461
|
-
const historyLimit = Math.max(0, accountConfig.historyLimit ?? globalGroupChatHistoryLimit ?? 0);
|
|
3462
|
-
const mediaMaxMb = opts.mediaMaxMb ?? accountConfig.mediaMaxMb ?? DEFAULT_MEDIA_MAX_MB;
|
|
3463
|
-
const mediaMaxBytes = Math.max(1, mediaMaxMb) * 1024 * 1024;
|
|
3464
|
-
const streaming = accountConfig.streaming === true || accountConfig.streaming === "partial" ? "partial" : "off";
|
|
3465
|
-
const blockStreamingEnabled = accountConfig.blockStreaming === true;
|
|
3466
|
-
const startupMs = Date.now();
|
|
3467
|
-
const startupGraceMs = 0;
|
|
3468
|
-
const dropPreStartupMessages = !client.hasPersistedSyncState();
|
|
3469
|
-
const { getRoomInfo, getMemberDisplayName } = createMatrixRoomInfoResolver(client);
|
|
3470
|
-
const directTracker = createDirectRoomTracker(client, {
|
|
3471
|
-
log: logVerboseMessage,
|
|
3472
|
-
canPromoteRecentInvite: async (roomId) => shouldPromoteRecentInviteRoom({
|
|
3473
|
-
roomId,
|
|
3474
|
-
roomInfo: await getRoomInfo(roomId, { includeAliases: true }),
|
|
3475
|
-
rooms: roomsConfig
|
|
3476
|
-
}),
|
|
3477
|
-
shouldKeepLocallyPromotedDirectRoom: async (roomId) => {
|
|
3478
|
-
try {
|
|
3479
|
-
const roomInfo = await getRoomInfo(roomId, { includeAliases: true });
|
|
3480
|
-
if (!roomInfo.nameResolved || !roomInfo.aliasesResolved) return;
|
|
3481
|
-
return shouldPromoteRecentInviteRoom({
|
|
3482
|
-
roomId,
|
|
3483
|
-
roomInfo,
|
|
3484
|
-
rooms: roomsConfig
|
|
3485
|
-
});
|
|
3486
|
-
} catch (err) {
|
|
3487
|
-
logVerboseMessage(`matrix: local promotion revalidation failed room=${roomId} (${String(err)})`);
|
|
3488
|
-
return;
|
|
3489
|
-
}
|
|
3490
|
-
}
|
|
3491
|
-
});
|
|
3492
|
-
registerMatrixAutoJoin({
|
|
3493
|
-
client,
|
|
3494
|
-
accountConfig,
|
|
3495
|
-
runtime
|
|
3496
|
-
});
|
|
3497
|
-
const warnedEncryptedRooms = /* @__PURE__ */ new Set();
|
|
3498
|
-
const warnedCryptoMissingRooms = /* @__PURE__ */ new Set();
|
|
3499
|
-
const handleRoomMessage = createMatrixRoomMessageHandler({
|
|
3500
|
-
client,
|
|
3501
|
-
core,
|
|
3502
|
-
cfg,
|
|
3503
|
-
accountId: effectiveAccountId,
|
|
3504
|
-
runtime,
|
|
3505
|
-
logger,
|
|
3506
|
-
logVerboseMessage,
|
|
3507
|
-
allowFrom,
|
|
3508
|
-
groupAllowFrom,
|
|
3509
|
-
roomsConfig,
|
|
3510
|
-
accountAllowBots,
|
|
3511
|
-
configuredBotUserIds,
|
|
3512
|
-
groupPolicy,
|
|
3513
|
-
replyToMode,
|
|
3514
|
-
threadReplies,
|
|
3515
|
-
dmThreadReplies,
|
|
3516
|
-
streaming,
|
|
3517
|
-
blockStreamingEnabled,
|
|
3518
|
-
dmEnabled,
|
|
3519
|
-
dmPolicy,
|
|
3520
|
-
textLimit,
|
|
3521
|
-
mediaMaxBytes,
|
|
3522
|
-
historyLimit,
|
|
3523
|
-
startupMs,
|
|
3524
|
-
startupGraceMs,
|
|
3525
|
-
dropPreStartupMessages,
|
|
3526
|
-
inboundDeduper,
|
|
3527
|
-
directTracker,
|
|
3528
|
-
getRoomInfo,
|
|
3529
|
-
getMemberDisplayName,
|
|
3530
|
-
needsRoomAliasesForConfig
|
|
3531
|
-
});
|
|
3532
|
-
const trackRoomMessage = (roomId, event) => {
|
|
3533
|
-
const task = Promise.resolve(handleRoomMessage(roomId, event)).finally(() => {
|
|
3534
|
-
inFlightRoomMessages.delete(task);
|
|
3535
|
-
});
|
|
3536
|
-
inFlightRoomMessages.add(task);
|
|
3537
|
-
return task;
|
|
3538
|
-
};
|
|
3539
|
-
try {
|
|
3540
|
-
threadBindingManager = await createMatrixThreadBindingManager({
|
|
3541
|
-
accountId: effectiveAccountId,
|
|
3542
|
-
auth,
|
|
3543
|
-
client,
|
|
3544
|
-
env: process.env,
|
|
3545
|
-
idleTimeoutMs: threadBindingIdleTimeoutMs,
|
|
3546
|
-
maxAgeMs: threadBindingMaxAgeMs,
|
|
3547
|
-
logVerboseMessage
|
|
3548
|
-
});
|
|
3549
|
-
logVerboseMessage(`matrix: thread bindings ready account=${threadBindingManager.accountId} idleMs=${threadBindingIdleTimeoutMs} maxAgeMs=${threadBindingMaxAgeMs}`);
|
|
3550
|
-
registerMatrixMonitorEvents({
|
|
3551
|
-
cfg,
|
|
3552
|
-
client,
|
|
3553
|
-
auth,
|
|
3554
|
-
allowFrom,
|
|
3555
|
-
dmEnabled,
|
|
3556
|
-
dmPolicy,
|
|
3557
|
-
readStoreAllowFrom: async () => await core.channel.pairing.readAllowFromStore({
|
|
3558
|
-
channel: "matrix",
|
|
3559
|
-
env: process.env,
|
|
3560
|
-
accountId: effectiveAccountId
|
|
3561
|
-
}).catch(() => []),
|
|
3562
|
-
directTracker,
|
|
3563
|
-
logVerboseMessage,
|
|
3564
|
-
warnedEncryptedRooms,
|
|
3565
|
-
warnedCryptoMissingRooms,
|
|
3566
|
-
logger,
|
|
3567
|
-
formatNativeDependencyHint: core.system.formatNativeDependencyHint,
|
|
3568
|
-
onRoomMessage: trackRoomMessage
|
|
3569
|
-
});
|
|
3570
|
-
logVerboseMessage("matrix: starting client");
|
|
3571
|
-
await resolveSharedMatrixClient({
|
|
3572
|
-
cfg,
|
|
3573
|
-
auth: authWithLimit,
|
|
3574
|
-
accountId: auth.accountId
|
|
3575
|
-
});
|
|
3576
|
-
logVerboseMessage("matrix: client started");
|
|
3577
|
-
logger.info(`matrix: logged in as ${auth.userId}`);
|
|
3578
|
-
execApprovalsHandler = new MatrixExecApprovalHandler({
|
|
3579
|
-
client,
|
|
3580
|
-
accountId: effectiveAccountId,
|
|
3581
|
-
cfg
|
|
3582
|
-
});
|
|
3583
|
-
await execApprovalsHandler.start();
|
|
3584
|
-
await runMatrixStartupMaintenance({
|
|
3585
|
-
client,
|
|
3586
|
-
auth,
|
|
3587
|
-
accountId: effectiveAccountId,
|
|
3588
|
-
effectiveAccountId,
|
|
3589
|
-
accountConfig,
|
|
3590
|
-
logger,
|
|
3591
|
-
logVerboseMessage,
|
|
3592
|
-
loadConfig: () => core.config.loadConfig(),
|
|
3593
|
-
writeConfigFile: async (nextCfg) => await core.config.writeConfigFile(nextCfg),
|
|
3594
|
-
loadWebMedia: async (url, maxBytes) => await core.media.loadWebMedia(url, maxBytes),
|
|
3595
|
-
env: process.env
|
|
3596
|
-
});
|
|
3597
|
-
await new Promise((resolve) => {
|
|
3598
|
-
const stopAndResolve = async () => {
|
|
3599
|
-
try {
|
|
3600
|
-
logVerboseMessage("matrix: stopping client");
|
|
3601
|
-
await cleanup();
|
|
3602
|
-
} catch (err) {
|
|
3603
|
-
logger.warn("matrix: failed during monitor shutdown cleanup", { error: String(err) });
|
|
3604
|
-
} finally {
|
|
3605
|
-
resolve();
|
|
3606
|
-
}
|
|
3607
|
-
};
|
|
3608
|
-
if (opts.abortSignal?.aborted) {
|
|
3609
|
-
stopAndResolve();
|
|
3610
|
-
return;
|
|
3611
|
-
}
|
|
3612
|
-
opts.abortSignal?.addEventListener("abort", () => {
|
|
3613
|
-
stopAndResolve();
|
|
3614
|
-
}, { once: true });
|
|
3615
|
-
});
|
|
3616
|
-
} catch (err) {
|
|
3617
|
-
await cleanup();
|
|
3618
|
-
throw err;
|
|
3619
|
-
}
|
|
3620
|
-
}
|
|
3621
|
-
//#endregion
|
|
3622
|
-
export { monitorMatrixProvider };
|