@openclaw/matrix 2026.5.26 → 2026.5.27-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/api.js +4 -4
  2. package/dist/{approval-handler.runtime-R9NDTUte.js → approval-handler.runtime-D2nZfRw6.js} +38 -8
  3. package/dist/{approval-ids-CDBO9rb7.js → approval-ids-DzBw_AG3.js} +1 -1
  4. package/dist/{approval-reaction-auth-B1S7D_cq.js → approval-reaction-auth-BvK3dXMH.js} +2 -2
  5. package/dist/{channel-Q-9mXTAf.js → channel-BLuA_9If.js} +11 -13
  6. package/dist/channel-plugin-api.js +1 -1
  7. package/dist/{channel.runtime-Dfg5ICEI.js → channel.runtime-CCAsyp75.js} +3 -3
  8. package/dist/{cli-MPGdj4tQ.js → cli-Bo50M7l4.js} +8 -8
  9. package/dist/{cli-metadata-DnXlx9Nh.js → cli-metadata-CqUHNx_0.js} +1 -1
  10. package/dist/cli-metadata.js +1 -1
  11. package/dist/{client-DLpRIMeD.js → client-BgsOzckO.js} +1 -1
  12. package/dist/{config-schema-qPgAoSU2.js → config-schema-DuSRVdwT.js} +1 -1
  13. package/dist/contract-api.js +3 -3
  14. package/dist/{draft-stream-D1PvVZ3B.js → draft-stream-BBVqdEbn.js} +6 -3
  15. package/dist/index.js +1 -1
  16. package/dist/{media-text-Dowl-J8F.js → media-text-C6q1S0AJ.js} +1 -1
  17. package/dist/{messages-D_zHS_2K.js → messages-D-VxmWkC.js} +3 -3
  18. package/dist/{monitor-j0WwEmVj.js → monitor-DO1yiHWm.js} +115 -70
  19. package/dist/plugin-entry.handlers.runtime.js +1 -1
  20. package/dist/{profile-update-Esnq0p93.js → profile-update-B_LpeC8E.js} +2 -2
  21. package/dist/{reaction-events-BP49GRln.js → reaction-events-BefH3-Gu.js} +1 -1
  22. package/dist/{runtime-api-CtNLoJ_E.js → runtime-api-B-jlPE4A.js} +2 -5
  23. package/dist/{send-DiYHONuz.js → send-DivaFHb1.js} +3 -2
  24. package/dist/{setup-bootstrap-Cgq4GjHo.js → setup-bootstrap-ClcP-tDQ.js} +2 -2
  25. package/dist/{setup-core-DiRWksVZ.js → setup-core-s8s_Qudu.js} +1 -1
  26. package/dist/setup-plugin-api.js +3 -3
  27. package/dist/{setup-surface-DD5dKWcB.js → setup-surface-BOt10HNf.js} +2 -2
  28. package/dist/test-api.js +1 -1
  29. package/dist/{thread-bindings-DpAW-FD_.js → thread-bindings-CLjJrThw.js} +1 -1
  30. package/dist/{tool-actions.runtime-B0cTgnsO.js → tool-actions.runtime-Vky1krcK.js} +7 -7
  31. package/dist/{verification-CVQiUQ9Y.js → verification-Dar6QON4.js} +1 -1
  32. package/npm-shrinkwrap.json +3 -3
  33. package/openclaw.plugin.json +2 -0
  34. package/package.json +6 -5
package/dist/api.js CHANGED
@@ -2,10 +2,10 @@ import { d as setMatrixThreadBindingIdleTimeoutBySessionKey, n as getMatrixThrea
2
2
  import { a as resolveMatrixDefaultOrOnlyAccountId, i as resolveMatrixChannelConfig, n as requiresExplicitMatrixDefaultAccount, r as resolveConfiguredMatrixAccountIds, t as findMatrixAccountEntry } from "./account-selection-C3arLOhC.js";
3
3
  import { n as listMatrixEnvAccountIds, r as resolveMatrixEnvAccountToken, t as getMatrixScopedEnvVarNames } from "./env-vars-KzaYveuy.js";
4
4
  import { a as resolveMatrixCredentialsPath, c as resolveMatrixLegacyFlatStoreRoot, i as resolveMatrixCredentialsFilename, l as sanitizeMatrixPathSegment, n as resolveMatrixAccountStorageRoot, o as resolveMatrixHomeserverKey, r as resolveMatrixCredentialsDir, s as resolveMatrixLegacyFlatStoragePaths, t as hashMatrixAccessToken } from "./storage-paths-BV2Z7bns.js";
5
- import { n as matrixSetupAdapter, t as createMatrixSetupWizardProxy } from "./setup-core-DiRWksVZ.js";
6
- import { t as matrixPlugin } from "./channel-Q-9mXTAf.js";
7
- import { n as matrixOnboardingAdapter } from "./setup-surface-DD5dKWcB.js";
8
- import { t as createMatrixThreadBindingManager } from "./thread-bindings-DpAW-FD_.js";
5
+ import { n as matrixSetupAdapter, t as createMatrixSetupWizardProxy } from "./setup-core-s8s_Qudu.js";
6
+ import { t as matrixPlugin } from "./channel-BLuA_9If.js";
7
+ import { n as matrixOnboardingAdapter } from "./setup-surface-BOt10HNf.js";
8
+ import { t as createMatrixThreadBindingManager } from "./thread-bindings-CLjJrThw.js";
9
9
  //#region extensions/matrix/api.ts
10
10
  const matrixSessionBindingAdapterChannels = ["matrix"];
11
11
  //#endregion
@@ -1,11 +1,11 @@
1
1
  import { a as resolveMatrixTargetIdentity } from "./target-ids-B-5aQxwn.js";
2
- import { g as resolveMatrixAccount } from "./setup-core-DiRWksVZ.js";
3
- import { _ as shouldHandleMatrixApprovalRequest, g as isMatrixAnyApprovalClientEnabled } from "./channel-Q-9mXTAf.js";
4
- import { a as sendMessageMatrix, i as reactMatrixMessage, p as repairMatrixDirectRooms, s as sendSingleTextMessageMatrix } from "./send-DiYHONuz.js";
2
+ import { g as resolveMatrixAccount } from "./setup-core-s8s_Qudu.js";
3
+ import { _ as shouldHandleMatrixApprovalRequest, g as isMatrixAnyApprovalClientEnabled } from "./channel-BLuA_9If.js";
4
+ import { a as sendMessageMatrix, i as reactMatrixMessage, p as repairMatrixDirectRooms, s as sendSingleTextMessageMatrix } from "./send-DivaFHb1.js";
5
5
  import { a as unregisterMatrixApprovalReactionTarget, n as listMatrixApprovalReactionBindings, r as registerMatrixApprovalReactionTarget, t as buildMatrixApprovalReactionHint } from "./approval-reactions-BRGQgOu2.js";
6
- import { n as editMatrixMessage, t as deleteMatrixMessage } from "./messages-D_zHS_2K.js";
6
+ import { n as editMatrixMessage, t as deleteMatrixMessage } from "./messages-D-VxmWkC.js";
7
7
  import { normalizeUniqueStringEntries } from "openclaw/plugin-sdk/string-coerce-runtime";
8
- import { listMessageReceiptPlatformIds, resolveMessageReceiptPrimaryId } from "openclaw/plugin-sdk/channel-message";
8
+ import { listMessageReceiptPlatformIds, resolveMessageReceiptPrimaryId } from "openclaw/plugin-sdk/channel-outbound";
9
9
  import { buildChannelApprovalNativeTargetKey } from "openclaw/plugin-sdk/approval-native-runtime";
10
10
  import { setTimeout } from "node:timers/promises";
11
11
  import { createChannelApprovalNativeRuntimeAdapter } from "openclaw/plugin-sdk/approval-handler-runtime";
@@ -96,7 +96,8 @@ function buildMatrixApprovalMetadata(params) {
96
96
  metadata: params.view.metadata,
97
97
  allowedDecisions: Array.from(params.allowedDecisions),
98
98
  actions: params.view.actions.map((action) => ({
99
- decision: action.decision,
99
+ kind: action.kind,
100
+ ...action.kind === "decision" ? { decision: action.decision } : {},
100
101
  label: action.label,
101
102
  style: action.style,
102
103
  command: action.command
@@ -125,8 +126,36 @@ function buildMatrixApprovalMetadata(params) {
125
126
  ...params.view.sessionKey != null ? { sessionKey: params.view.sessionKey } : {}
126
127
  };
127
128
  }
129
+ function listDecisionActions(view) {
130
+ return view.actions.flatMap((action) => action.kind === "decision" ? [action.decision] : []);
131
+ }
132
+ function listPluginApprovalActionDescriptors(view) {
133
+ if (view.approvalKind !== "plugin") return;
134
+ const actions = [];
135
+ for (const action of view.actions) {
136
+ if (action.kind !== "command" && action.kind !== "decision" || !action.command.trim() || !action.label.trim()) continue;
137
+ if (action.kind === "command") {
138
+ actions.push({
139
+ kind: "command",
140
+ label: action.label,
141
+ style: action.style,
142
+ command: action.command
143
+ });
144
+ continue;
145
+ }
146
+ actions.push({
147
+ kind: "decision",
148
+ label: action.label,
149
+ style: action.style,
150
+ command: action.command,
151
+ decision: action.decision
152
+ });
153
+ }
154
+ return actions.length > 0 ? actions : void 0;
155
+ }
128
156
  function buildPendingApprovalContent(params) {
129
- const allowedDecisions = params.view.actions.map((action) => action.decision);
157
+ const allowedDecisions = listDecisionActions(params.view);
158
+ const pluginActions = listPluginApprovalActionDescriptors(params.view);
130
159
  const payload = params.view.approvalKind === "plugin" ? buildPluginApprovalPendingReplyPayload({
131
160
  request: {
132
161
  id: params.view.approvalId,
@@ -136,7 +165,8 @@ function buildPendingApprovalContent(params) {
136
165
  severity: params.view.severity,
137
166
  toolName: params.view.toolName ?? void 0,
138
167
  pluginId: params.view.pluginId ?? void 0,
139
- agentId: params.view.agentId ?? void 0
168
+ agentId: params.view.agentId ?? void 0,
169
+ actions: pluginActions
140
170
  },
141
171
  createdAtMs: 0,
142
172
  expiresAtMs: params.view.expiresAtMs
@@ -1,4 +1,4 @@
1
- import { a as normalizeMatrixUserId } from "./config-schema-qPgAoSU2.js";
1
+ import { a as normalizeMatrixUserId } from "./config-schema-DuSRVdwT.js";
2
2
  //#region extensions/matrix/src/approval-ids.ts
3
3
  function normalizeMatrixApproverId(value) {
4
4
  return normalizeMatrixUserId(String(value)) || void 0;
@@ -1,5 +1,5 @@
1
- import { g as resolveMatrixAccount } from "./setup-core-DiRWksVZ.js";
2
- import { t as normalizeMatrixApproverId } from "./approval-ids-CDBO9rb7.js";
1
+ import { g as resolveMatrixAccount } from "./setup-core-s8s_Qudu.js";
2
+ import { t as normalizeMatrixApproverId } from "./approval-ids-DzBw_AG3.js";
3
3
  import { resolveApprovalApprovers } from "openclaw/plugin-sdk/approval-auth-runtime";
4
4
  //#region extensions/matrix/src/approval-reaction-auth.ts
5
5
  function normalizeMatrixExecApproverId(value) {
@@ -2,9 +2,9 @@ import { a as resolveMatrixTargetIdentity, i as resolveMatrixDirectUserId, n as
2
2
  import { d as setMatrixThreadBindingIdleTimeoutBySessionKey, p as setMatrixThreadBindingMaxAgeBySessionKey } from "./thread-bindings-shared-CKnY4LSd.js";
3
3
  import { n as requiresExplicitMatrixDefaultAccount } from "./account-selection-C3arLOhC.js";
4
4
  import { c as resolveMatrixAccountConfig } from "./config-paths-ZBCMwSos.js";
5
- import { d as resolveSingleAccountPromotionTarget, f as singleAccountKeysToMove, g as resolveMatrixAccount, h as resolveDefaultMatrixAccountId, n as matrixSetupAdapter, p as listMatrixAccountIds, t as createMatrixSetupWizardProxy, u as namedAccountPromotionKeys } from "./setup-core-DiRWksVZ.js";
6
- import { a as normalizeMatrixUserId, n as DEFAULT_ACCOUNT_ID$2, r as matrixConfigAdapter, t as MatrixChannelConfigSchema } from "./config-schema-qPgAoSU2.js";
7
- import { t as normalizeMatrixApproverId } from "./approval-ids-CDBO9rb7.js";
5
+ import { d as resolveSingleAccountPromotionTarget, f as singleAccountKeysToMove, g as resolveMatrixAccount, h as resolveDefaultMatrixAccountId, n as matrixSetupAdapter, p as listMatrixAccountIds, t as createMatrixSetupWizardProxy, u as namedAccountPromotionKeys } from "./setup-core-s8s_Qudu.js";
6
+ import { a as normalizeMatrixUserId, n as DEFAULT_ACCOUNT_ID$2, r as matrixConfigAdapter, t as MatrixChannelConfigSchema } from "./config-schema-DuSRVdwT.js";
7
+ import { t as normalizeMatrixApproverId } from "./approval-ids-DzBw_AG3.js";
8
8
  import { t as formatMatrixErrorMessage } from "./errors-C47hvAF8.js";
9
9
  import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-D9oKDvsJ.js";
10
10
  import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-DTgQyQxc.js";
@@ -17,11 +17,10 @@ import { normalizeLowercaseStringOrEmpty, normalizeOptionalString, normalizeOpti
17
17
  import { describeAccountSnapshot } from "openclaw/plugin-sdk/account-helpers";
18
18
  import { adaptScopedAccountAccessor, createScopedDmSecurityResolver } from "openclaw/plugin-sdk/channel-config-helpers";
19
19
  import { buildChannelOutboundSessionRoute, buildThreadAwareOutboundSessionRoute, createChatChannelPlugin } from "openclaw/plugin-sdk/channel-core";
20
- import { createChannelMessageAdapterFromOutbound } from "openclaw/plugin-sdk/channel-message";
20
+ import { createChannelMessageAdapterFromOutbound, createReplyPrefixOptions, createRuntimeOutboundDelegates, createTypingCallbacks, logTypingFailure } from "openclaw/plugin-sdk/channel-outbound";
21
21
  import { createAllowlistProviderOpenWarningCollector, projectAccountConfigWarningCollector } from "openclaw/plugin-sdk/channel-policy";
22
22
  import { createChannelDirectoryAdapter, createResolvedDirectoryEntriesLister, createRuntimeDirectoryLiveAdapter } from "openclaw/plugin-sdk/directory-runtime";
23
23
  import { createLazyRuntimeNamedExport } from "openclaw/plugin-sdk/lazy-runtime";
24
- import { createRuntimeOutboundDelegates } from "openclaw/plugin-sdk/outbound-runtime";
25
24
  import { buildProbeChannelStatusSummary, collectStatusIssuesFromLastError, createComputedAccountStatusAdapter, createDefaultChannelRuntimeState } from "openclaw/plugin-sdk/status-helpers";
26
25
  import { chunkTextForOutbound } from "openclaw/plugin-sdk/text-chunking";
27
26
  import { ToolAuthorizationError, createActionGate, readNumberParam, readStringParam } from "openclaw/plugin-sdk/channel-actions";
@@ -36,10 +35,8 @@ import { createChannelExecApprovalProfile, getExecApprovalReplyMetadata, isChann
36
35
  import { normalizeAccountId as normalizeAccountId$1, parseThreadSessionSuffix } from "openclaw/plugin-sdk/routing";
37
36
  import { createPairingPrefixStripper } from "openclaw/plugin-sdk/channel-pairing";
38
37
  import { PAIRING_APPROVED_MESSAGE } from "openclaw/plugin-sdk/channel-status";
39
- import { createReplyPrefixOptions, createTypingCallbacks } from "openclaw/plugin-sdk/channel-reply-options-runtime";
40
- import { formatLocationText, toLocationContext } from "openclaw/plugin-sdk/channel-location";
38
+ import { formatLocationText, logInboundDrop, toLocationContext } from "openclaw/plugin-sdk/channel-inbound";
41
39
  import { getAgentScopedMediaLocalRoots } from "openclaw/plugin-sdk/agent-media-payload";
42
- import { logInboundDrop, logTypingFailure } from "openclaw/plugin-sdk/channel-logging";
43
40
  import { buildChannelKeyCandidates, resolveChannelEntryMatch } from "openclaw/plugin-sdk/channel-targets";
44
41
  import { loadSessionStore, resolveSessionStoreEntry, resolveStorePath } from "openclaw/plugin-sdk/session-store-runtime";
45
42
  //#region extensions/matrix/src/actions.ts
@@ -132,7 +129,7 @@ const matrixMessageActions = {
132
129
  return extractToolSend(args, "sendMessage");
133
130
  },
134
131
  handleAction: async (ctx) => {
135
- const { handleMatrixAction } = await import("./tool-actions.runtime-B0cTgnsO.js");
132
+ const { handleMatrixAction } = await import("./tool-actions.runtime-Vky1krcK.js");
136
133
  const { action, params, cfg, accountId, mediaLocalRoots } = ctx;
137
134
  const dispatch = async (actionParams) => await handleMatrixAction({
138
135
  ...actionParams,
@@ -596,7 +593,7 @@ const matrixNativeApprovalCapability = createApproverRestrictedNativeApprovalCap
596
593
  accountId,
597
594
  request
598
595
  }),
599
- load: async () => (await import("./approval-handler.runtime-R9NDTUte.js")).matrixApprovalNativeRuntime
596
+ load: async () => (await import("./approval-handler.runtime-D2nZfRw6.js")).matrixApprovalNativeRuntime
600
597
  })
601
598
  });
602
599
  const splitMatrixApprovalCapability = splitChannelApprovalCapability(matrixNativeApprovalCapability);
@@ -947,8 +944,8 @@ async function runMatrixStartupMaintenance(params) {
947
944
  //#endregion
948
945
  //#region extensions/matrix/src/channel.ts
949
946
  let matrixStartupLock = Promise.resolve();
950
- const loadMatrixSetupWizard = createLazyRuntimeNamedExport(() => import("./setup-surface-DD5dKWcB.js").then((n) => n.t), "matrixSetupWizard");
951
- const loadMatrixChannelRuntime = createLazyRuntimeNamedExport(() => import("./channel.runtime-Dfg5ICEI.js"), "matrixChannelRuntime");
947
+ const loadMatrixSetupWizard = createLazyRuntimeNamedExport(() => import("./setup-surface-BOt10HNf.js").then((n) => n.t), "matrixSetupWizard");
948
+ const loadMatrixChannelRuntime = createLazyRuntimeNamedExport(() => import("./channel.runtime-CCAsyp75.js"), "matrixChannelRuntime");
952
949
  const meta = {
953
950
  id: "matrix",
954
951
  label: "Matrix",
@@ -957,6 +954,7 @@ const meta = {
957
954
  docsLabel: "matrix",
958
955
  blurb: "open protocol; configure a homeserver + access token.",
959
956
  order: 70,
957
+ markdownCapable: true,
960
958
  quickstartAllowFrom: true
961
959
  };
962
960
  function buildMatrixTrafficStatusSummary(snapshot) {
@@ -1318,7 +1316,7 @@ const matrixPlugin = createChatChannelPlugin({
1318
1316
  await previousLock;
1319
1317
  let monitorMatrixProvider;
1320
1318
  try {
1321
- monitorMatrixProvider = (await import("./monitor-j0WwEmVj.js")).monitorMatrixProvider;
1319
+ monitorMatrixProvider = (await import("./monitor-DO1yiHWm.js")).monitorMatrixProvider;
1322
1320
  } finally {
1323
1321
  releaseLock();
1324
1322
  }
@@ -1,2 +1,2 @@
1
- import { t as matrixPlugin } from "./channel-Q-9mXTAf.js";
1
+ import { t as matrixPlugin } from "./channel-BLuA_9If.js";
2
2
  export { matrixPlugin };
@@ -1,12 +1,12 @@
1
- import { a as sendMessageMatrix, c as sendTypingMatrix, o as sendPollMatrix } from "./send-DiYHONuz.js";
1
+ import { a as sendMessageMatrix, c as sendTypingMatrix, o as sendPollMatrix } from "./send-DivaFHb1.js";
2
2
  import { t as isBunRuntime } from "./runtime-BefyhPWv.js";
3
3
  import { l as resolveMatrixAuth } from "./shared-3K27tl8e.js";
4
4
  import "./client-QO7vDxm0.js";
5
5
  import { n as listMatrixDirectoryGroupsLive, r as listMatrixDirectoryPeersLive } from "./directory-live-2-Vb6nss.js";
6
- import { f as resolveOutboundSendDep, n as chunkTextForOutbound } from "./runtime-api-CtNLoJ_E.js";
6
+ import { f as resolveOutboundSendDep, n as chunkTextForOutbound } from "./runtime-api-B-jlPE4A.js";
7
7
  import { t as resolveMatrixTargets } from "./resolve-targets-BPhBqXyj.js";
8
8
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
9
- import { createReplyToFanout } from "openclaw/plugin-sdk/outbound-runtime";
9
+ import { createReplyToFanout } from "openclaw/plugin-sdk/channel-outbound";
10
10
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
11
11
  import { renderMessagePresentationFallbackText } from "openclaw/plugin-sdk/interactive-runtime";
12
12
  import { resolvePayloadMediaUrls } from "openclaw/plugin-sdk/reply-payload";
@@ -1,16 +1,16 @@
1
1
  import { c as resolveMatrixAccountConfig } from "./config-paths-ZBCMwSos.js";
2
2
  import { t as getMatrixRuntime } from "./runtime-6S3DNFNv.js";
3
- import { c as resolveMatrixConfigPath, g as resolveMatrixAccount, l as updateMatrixAccountConfig, n as matrixSetupAdapter } from "./setup-core-DiRWksVZ.js";
3
+ import { c as resolveMatrixConfigPath, g as resolveMatrixAccount, l as updateMatrixAccountConfig, n as matrixSetupAdapter } from "./setup-core-s8s_Qudu.js";
4
4
  import { t as formatMatrixErrorMessage } from "./errors-C47hvAF8.js";
5
5
  import { t as resolveMatrixRoomKeyBackupIssue } from "./backup-health-Dm_YMVFT.js";
6
6
  import { i as setMatrixSdkLogMode, r as setMatrixSdkConsoleLogging } from "./logging-BR-gcAjp.js";
7
- import { n as withResolvedActionClient } from "./client-DLpRIMeD.js";
7
+ import { n as withResolvedActionClient } from "./client-BgsOzckO.js";
8
8
  import { u as resolveMatrixAuthContext } from "./shared-3K27tl8e.js";
9
9
  import "./client-QO7vDxm0.js";
10
- import { i as formatZonedTimestamp } from "./runtime-api-CtNLoJ_E.js";
10
+ import { i as formatZonedTimestamp } from "./runtime-api-B-jlPE4A.js";
11
11
  import { isOpenClawManagedMatrixDevice, summarizeMatrixDeviceHealth } from "./device-health-D4LBxuPq.js";
12
- import { n as updateMatrixOwnProfile, t as applyMatrixProfileUpdate } from "./profile-update-Esnq0p93.js";
13
- import { a as confirmMatrixVerificationSas, b as verifyMatrixRecoveryKey, c as getMatrixRoomKeyBackupStatus, d as listMatrixVerifications, f as mismatchMatrixVerificationSas, g as runMatrixSelfVerification, h as restoreMatrixRoomKeyBackup, l as getMatrixVerificationSas, m as resetMatrixRoomKeyBackup, n as bootstrapMatrixVerification, p as requestMatrixVerification, r as cancelMatrixVerification, t as acceptMatrixVerification, u as getMatrixVerificationStatus, v as startMatrixVerification } from "./verification-CVQiUQ9Y.js";
12
+ import { n as updateMatrixOwnProfile, t as applyMatrixProfileUpdate } from "./profile-update-B_LpeC8E.js";
13
+ import { a as confirmMatrixVerificationSas, b as verifyMatrixRecoveryKey, c as getMatrixRoomKeyBackupStatus, d as listMatrixVerifications, f as mismatchMatrixVerificationSas, g as runMatrixSelfVerification, h as restoreMatrixRoomKeyBackup, l as getMatrixVerificationSas, m as resetMatrixRoomKeyBackup, n as bootstrapMatrixVerification, p as requestMatrixVerification, r as cancelMatrixVerification, t as acceptMatrixVerification, u as getMatrixVerificationStatus, v as startMatrixVerification } from "./verification-Dar6QON4.js";
14
14
  import { normalizeAccountId } from "openclaw/plugin-sdk/account-id";
15
15
  //#region extensions/matrix/src/matrix/actions/devices.ts
16
16
  async function listMatrixOwnDevices(opts = {}) {
@@ -37,11 +37,11 @@ let matrixCliExitScheduled = false;
37
37
  let matrixActionClientModulePromise;
38
38
  let matrixDirectManagementModulePromise;
39
39
  function loadMatrixActionClientModule() {
40
- matrixActionClientModulePromise ??= import("./client-DLpRIMeD.js").then((n) => n.t);
40
+ matrixActionClientModulePromise ??= import("./client-BgsOzckO.js").then((n) => n.t);
41
41
  return matrixActionClientModulePromise;
42
42
  }
43
43
  function loadMatrixDirectManagementModule() {
44
- matrixDirectManagementModulePromise ??= import("./send-DiYHONuz.js").then((n) => n.d);
44
+ matrixDirectManagementModulePromise ??= import("./send-DivaFHb1.js").then((n) => n.d);
45
45
  return matrixDirectManagementModulePromise;
46
46
  }
47
47
  function scheduleMatrixCliExit() {
@@ -208,7 +208,7 @@ async function addMatrixAccount(params) {
208
208
  backupVersion: null
209
209
  };
210
210
  if (accountConfig.encryption === true) {
211
- const { maybeBootstrapNewEncryptedMatrixAccount } = await import("./setup-bootstrap-Cgq4GjHo.js");
211
+ const { maybeBootstrapNewEncryptedMatrixAccount } = await import("./setup-bootstrap-ClcP-tDQ.js");
212
212
  verificationBootstrap = await maybeBootstrapNewEncryptedMatrixAccount({
213
213
  previousCfg: cfg,
214
214
  cfg: updated,
@@ -2,7 +2,7 @@ import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
2
2
  //#region extensions/matrix/src/cli-metadata.ts
3
3
  function registerMatrixCliMetadata(api) {
4
4
  api.registerCli(async ({ program }) => {
5
- const { registerMatrixCli } = await import("./cli-MPGdj4tQ.js");
5
+ const { registerMatrixCli } = await import("./cli-Bo50M7l4.js");
6
6
  registerMatrixCli({ program });
7
7
  }, { descriptors: [{
8
8
  name: "matrix",
@@ -1,2 +1,2 @@
1
- import { n as registerMatrixCliMetadata, t as cli_metadata_default } from "./cli-metadata-DnXlx9Nh.js";
1
+ import { n as registerMatrixCliMetadata, t as cli_metadata_default } from "./cli-metadata-CqUHNx_0.js";
2
2
  export { cli_metadata_default as default, registerMatrixCliMetadata };
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
- import { u as resolveMatrixRoomId } from "./send-DiYHONuz.js";
2
+ import { u as resolveMatrixRoomId } from "./send-DivaFHb1.js";
3
3
  import { n as withResolvedRuntimeMatrixClient } from "./client-bootstrap-DK9i3KZ5.js";
4
4
  //#region extensions/matrix/src/matrix/actions/client.ts
5
5
  var client_exports = /* @__PURE__ */ __exportAll({
@@ -1,5 +1,5 @@
1
1
  import { c as resolveMatrixAccountConfig } from "./config-paths-ZBCMwSos.js";
2
- import { g as resolveMatrixAccount, h as resolveDefaultMatrixAccountId, p as listMatrixAccountIds } from "./setup-core-DiRWksVZ.js";
2
+ import { g as resolveMatrixAccount, h as resolveDefaultMatrixAccountId, p as listMatrixAccountIds } from "./setup-core-s8s_Qudu.js";
3
3
  import { DEFAULT_ACCOUNT_ID as DEFAULT_ACCOUNT_ID$1 } from "openclaw/plugin-sdk/account-id";
4
4
  import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  import { adaptScopedAccountAccessor, createScopedChannelConfigAdapter } from "openclaw/plugin-sdk/channel-config-helpers";
@@ -1,8 +1,8 @@
1
1
  import { s as resetMatrixThreadBindingsForTests } from "./thread-bindings-shared-CKnY4LSd.js";
2
2
  import { r as setMatrixRuntime } from "./runtime-6S3DNFNv.js";
3
- import { d as resolveSingleAccountPromotionTarget, f as singleAccountKeysToMove, n as matrixSetupAdapter, u as namedAccountPromotionKeys } from "./setup-core-DiRWksVZ.js";
3
+ import { d as resolveSingleAccountPromotionTarget, f as singleAccountKeysToMove, n as matrixSetupAdapter, u as namedAccountPromotionKeys } from "./setup-core-s8s_Qudu.js";
4
4
  import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-D9oKDvsJ.js";
5
5
  import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-DTgQyQxc.js";
6
- import { n as matrixOnboardingAdapter } from "./setup-surface-DD5dKWcB.js";
7
- import { t as createMatrixThreadBindingManager } from "./thread-bindings-DpAW-FD_.js";
6
+ import { n as matrixOnboardingAdapter } from "./setup-surface-BOt10HNf.js";
7
+ import { t as createMatrixThreadBindingManager } from "./thread-bindings-CLjJrThw.js";
8
8
  export { collectRuntimeConfigAssignments, createMatrixThreadBindingManager, legacyConfigRules, matrixSetupAdapter, matrixOnboardingAdapter as matrixSetupWizard, namedAccountPromotionKeys, normalizeCompatibilityConfig, resetMatrixThreadBindingsForTests, resolveSingleAccountPromotionTarget, secretTargetRegistryEntries, setMatrixRuntime, singleAccountKeysToMove };
@@ -1,5 +1,5 @@
1
- import { n as editMessageMatrix, r as prepareMatrixSingleText, s as sendSingleTextMessageMatrix, y as MsgType } from "./send-DiYHONuz.js";
2
- import { createDraftStreamLoop } from "openclaw/plugin-sdk/channel-lifecycle";
1
+ import { n as editMessageMatrix, r as prepareMatrixSingleText, s as sendSingleTextMessageMatrix, y as MsgType } from "./send-DivaFHb1.js";
2
+ import { createDraftStreamLoop } from "openclaw/plugin-sdk/channel-outbound";
3
3
  //#region extensions/matrix/src/matrix/draft-stream.ts
4
4
  const DEFAULT_THROTTLE_MS = 1e3;
5
5
  function resolveDraftPreviewOptions(mode) {
@@ -7,7 +7,10 @@ function resolveDraftPreviewOptions(mode) {
7
7
  msgtype: MsgType.Notice,
8
8
  includeMentions: false
9
9
  };
10
- return { msgtype: MsgType.Text };
10
+ return {
11
+ msgtype: MsgType.Text,
12
+ includeMentions: false
13
+ };
11
14
  }
12
15
  function createMatrixDraftStream(params) {
13
16
  const { roomId, client, cfg, threadId, accountId, log } = params;
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { n as registerMatrixCliMetadata } from "./cli-metadata-DnXlx9Nh.js";
1
+ import { n as registerMatrixCliMetadata } from "./cli-metadata-CqUHNx_0.js";
2
2
  import { t as registerMatrixSubagentHooks } from "./subagent-hooks-api-bedE4GYl.js";
3
3
  import { defineBundledChannelEntry } from "openclaw/plugin-sdk/channel-entry-contract";
4
4
  //#region extensions/matrix/index.ts
@@ -1,4 +1,4 @@
1
- import { C as formatPollResultsAsText, D as parsePollStartContent, O as resolvePollReferenceEventId, S as formatPollAsText, T as isPollStartType, w as isPollEventType, x as buildPollResultsSummary } from "./send-DiYHONuz.js";
1
+ import { C as formatPollResultsAsText, D as parsePollStartContent, O as resolvePollReferenceEventId, S as formatPollAsText, T as isPollStartType, w as isPollEventType, x as buildPollResultsSummary } from "./send-DivaFHb1.js";
2
2
  import path from "node:path";
3
3
  //#region extensions/matrix/src/matrix/poll-summary.ts
4
4
  function resolveMatrixPollRootEventId(event) {
@@ -1,8 +1,8 @@
1
1
  import { r as isMatrixNotFoundError } from "./errors-C47hvAF8.js";
2
- import { a as sendMessageMatrix, n as editMessageMatrix, w as isPollEventType } from "./send-DiYHONuz.js";
2
+ import { a as sendMessageMatrix, n as editMessageMatrix, w as isPollEventType } from "./send-DivaFHb1.js";
3
3
  import { n as MATRIX_REACTION_EVENT_TYPE } from "./reaction-common-DkrQdBSZ.js";
4
- import { a as resolveMatrixMessageBody, c as resolveMatrixPollRootEventId, i as resolveMatrixMessageAttachment, o as fetchMatrixPollMessageSummary } from "./media-text-Dowl-J8F.js";
5
- import { r as withResolvedRoomAction } from "./client-DLpRIMeD.js";
4
+ import { a as resolveMatrixMessageBody, c as resolveMatrixPollRootEventId, i as resolveMatrixMessageAttachment, o as fetchMatrixPollMessageSummary } from "./media-text-C6q1S0AJ.js";
5
+ import { r as withResolvedRoomAction } from "./client-BgsOzckO.js";
6
6
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
7
7
  //#region extensions/matrix/src/matrix/actions/limits.ts
8
8
  function resolveMatrixActionLimit(raw, fallback) {
@@ -1,41 +1,39 @@
1
1
  import { t as isMatrixQualifiedUserId } from "./target-ids-B-5aQxwn.js";
2
2
  import { c as resolveMatrixAccountConfig, s as resolveMatrixAccountAllowlistConfig } from "./config-paths-ZBCMwSos.js";
3
3
  import { t as getMatrixRuntime } from "./runtime-6S3DNFNv.js";
4
- import { m as resolveConfiguredMatrixBotUserIds } from "./setup-core-DiRWksVZ.js";
5
- import { a as buildAllowlistResolutionSummary, c as createTypingCallbacks, d as logInboundDrop, f as logTypingFailure, h as toLocationContext, i as addAllowlistUserEntriesFromConfigEntry, l as formatLocationText, m as summarizeMapping, n as resolveMatrixStoredSessionMeta, o as canonicalizeAllowlistWithResolvedIds, p as patchAllowlistUsersInConfigEntries, r as resolveMatrixRoomConfig, s as createReplyPrefixOptions, u as getAgentScopedMediaLocalRoots } from "./channel-Q-9mXTAf.js";
6
- import { a as normalizeMatrixUserId, i as normalizeMatrixAllowList, o as resolveMatrixAllowListMatch } from "./config-schema-qPgAoSU2.js";
4
+ import { m as resolveConfiguredMatrixBotUserIds } from "./setup-core-s8s_Qudu.js";
5
+ import { a as buildAllowlistResolutionSummary, c as createTypingCallbacks, d as logInboundDrop, f as logTypingFailure, h as toLocationContext, i as addAllowlistUserEntriesFromConfigEntry, l as formatLocationText, m as summarizeMapping, n as resolveMatrixStoredSessionMeta, o as canonicalizeAllowlistWithResolvedIds, p as patchAllowlistUsersInConfigEntries, r as resolveMatrixRoomConfig, s as createReplyPrefixOptions, u as getAgentScopedMediaLocalRoots } from "./channel-BLuA_9If.js";
6
+ import { a as normalizeMatrixUserId, i as normalizeMatrixAllowList, o as resolveMatrixAllowListMatch } from "./config-schema-DuSRVdwT.js";
7
7
  import { r as isMatrixNotFoundError, t as formatMatrixErrorMessage } from "./errors-C47hvAF8.js";
8
8
  import { i as resolveMatrixStateFilePath } from "./storage-onzulLbU.js";
9
- import { D as parsePollStartContent, S as formatPollAsText, T as isPollStartType, _ as readJoinedMatrixMembers, a as sendMessageMatrix, f as promoteMatrixDirectRoomCandidate, g as isStrictDirectMembership, h as hasDirectMatrixMemberFlag, t as chunkMatrixText, v as MATRIX_OPENCLAW_FINALIZED_PREVIEW_KEY, w as isPollEventType } from "./send-DiYHONuz.js";
10
- import { t as createMatrixThreadBindingManager } from "./thread-bindings-DpAW-FD_.js";
9
+ import { D as parsePollStartContent, S as formatPollAsText, T as isPollStartType, _ as readJoinedMatrixMembers, a as sendMessageMatrix, f as promoteMatrixDirectRoomCandidate, g as isStrictDirectMembership, h as hasDirectMatrixMemberFlag, t as chunkMatrixText, v as MATRIX_OPENCLAW_FINALIZED_PREVIEW_KEY, w as isPollEventType } from "./send-DivaFHb1.js";
10
+ import { t as createMatrixThreadBindingManager } from "./thread-bindings-CLjJrThw.js";
11
11
  import { t as createAsyncLock } from "./async-lock-BcLS4KOc.js";
12
12
  import { i as throwIfMatrixStartupAborted, o as LogService, r as isMatrixStartupAbortError } from "./startup-abort-Bs0Up_Qx.js";
13
13
  import { i as isMatrixMediaSizeLimitError, r as MatrixMediaSizeLimitError } from "./http-client-DJNugFzO.js";
14
14
  import { n as isMatrixReadySyncState, r as isMatrixTerminalSyncState, t as isMatrixDisconnectedSyncState } from "./sync-state-CWbp0QSY.js";
15
- import { a as resolveMatrixMessageBody, i as resolveMatrixMessageAttachment, n as formatMatrixMediaUnavailableText, r as formatMatrixMessageText, s as fetchMatrixPollSnapshot, t as formatMatrixMediaTooLargeText } from "./media-text-Dowl-J8F.js";
15
+ import { a as resolveMatrixMessageBody, i as resolveMatrixMessageAttachment, n as formatMatrixMediaUnavailableText, r as formatMatrixMessageText, s as fetchMatrixPollSnapshot, t as formatMatrixMediaTooLargeText } from "./media-text-C6q1S0AJ.js";
16
16
  import { n as setActiveMatrixClient } from "./active-client-DXvz2gCo.js";
17
17
  import { t as isBunRuntime } from "./runtime-BefyhPWv.js";
18
18
  import { c as backfillMatrixAuthDeviceIdAfterStartup, i as resolveSharedMatrixClient, l as resolveMatrixAuth, n as releaseSharedClientInstance, u as resolveMatrixAuthContext } from "./shared-3K27tl8e.js";
19
19
  import "./client-QO7vDxm0.js";
20
- import { d as resolveDefaultGroupPolicy, h as warnMissingProviderGroupPolicyFallbackOnce, m as resolveThreadBindingMaxAgeMsForChannel, p as resolveThreadBindingIdleTimeoutMsForChannel, t as GROUP_POLICY_BLOCKED_LABEL, u as resolveAllowlistProviderRuntimeGroupPolicy } from "./runtime-api-CtNLoJ_E.js";
20
+ import { d as resolveDefaultGroupPolicy, h as warnMissingProviderGroupPolicyFallbackOnce, m as resolveThreadBindingMaxAgeMsForChannel, p as resolveThreadBindingIdleTimeoutMsForChannel, t as GROUP_POLICY_BLOCKED_LABEL, u as resolveAllowlistProviderRuntimeGroupPolicy } from "./runtime-api-B-jlPE4A.js";
21
21
  import { t as resolveMatrixTargets } from "./resolve-targets-BPhBqXyj.js";
22
22
  import { t as formatMatrixEncryptedEventDisabledWarning } from "./encryption-guidance-CU-OAPMg.js";
23
23
  import { a as EventType, i as resolveMatrixThreadRouting, n as resolveMatrixReplyToEventId, o as RelationType, r as resolveMatrixThreadRootId, t as resolveMatrixInboundRoute } from "./route-DY6at4qJ.js";
24
24
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString, normalizeStringifiedEntries, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
25
- import { createPreviewMessageReceipt, defineFinalizableLivePreviewAdapter, deliverWithFinalizableLivePreviewAdapter } from "openclaw/plugin-sdk/channel-message";
25
+ import { buildChannelProgressDraftLineForEntry, createChannelProgressDraftGate, createPreviewMessageReceipt, defineFinalizableLivePreviewAdapter, deliverWithFinalizableLivePreviewAdapter, formatChannelProgressDraftLine, formatChannelProgressDraftLineForEntry, formatChannelProgressDraftText, isChannelProgressDraftWorkToolName, mergeChannelProgressDraftLine, normalizeChannelProgressDraftLineIdentity, resolveChannelProgressDraftMaxLines, waitUntilAbort } from "openclaw/plugin-sdk/channel-outbound";
26
26
  import { CHANNEL_APPROVAL_NATIVE_RUNTIME_CONTEXT_CAPABILITY } from "openclaw/plugin-sdk/approval-handler-adapter-runtime";
27
27
  import { resolveInboundLastRouteSessionKey } from "openclaw/plugin-sdk/routing";
28
+ import { buildChannelInboundEventContext, hasFinalInboundReplyDispatch, toInboundMediaFacts } from "openclaw/plugin-sdk/channel-inbound";
28
29
  import { loadSessionStore, resolveSessionStoreEntry } from "openclaw/plugin-sdk/session-store-runtime";
29
30
  import { readJsonFileWithFallback, writeJsonFileAtomically } from "openclaw/plugin-sdk/json-store";
30
31
  import { format } from "node:util";
31
32
  import { buildTtsSupplementMediaPayload, getReplyPayloadTtsSupplement } from "openclaw/plugin-sdk/reply-payload";
32
33
  import { resolveAckReaction } from "openclaw/plugin-sdk/channel-feedback";
33
- import { hasFinalInboundReplyDispatch } from "openclaw/plugin-sdk/inbound-reply-dispatch";
34
- import { waitUntilAbort } from "openclaw/plugin-sdk/channel-lifecycle";
35
34
  import { registerChannelRuntimeContext } from "openclaw/plugin-sdk/channel-runtime-context";
36
35
  import { isDangerousNameMatchingEnabled } from "openclaw/plugin-sdk/dangerous-name-runtime";
37
36
  import { createChannelIngressResolver, defineStableChannelIngressIdentity } from "openclaw/plugin-sdk/channel-ingress-runtime";
38
- import { buildChannelProgressDraftLineForEntry, createChannelProgressDraftGate, formatChannelProgressDraftLine, formatChannelProgressDraftLineForEntry, formatChannelProgressDraftText, isChannelProgressDraftWorkToolName, mergeChannelProgressDraftLine, normalizeChannelProgressDraftLineIdentity, resolveChannelProgressDraftMaxLines } from "openclaw/plugin-sdk/channel-streaming";
39
37
  import { evaluateSupplementalContextVisibility, resolveChannelContextVisibilityMode } from "openclaw/plugin-sdk/context-visibility-runtime";
40
38
  import { mergePairLoopGuardConfig } from "openclaw/plugin-sdk/pair-loop-guard-runtime";
41
39
  import { buildInboundHistoryFromEntries } from "openclaw/plugin-sdk/reply-history";
@@ -811,7 +809,7 @@ const SAS_NOTICE_RETRY_DELAY_MS = 750;
811
809
  const VERIFICATION_EVENT_STARTUP_GRACE_MS = 3e4;
812
810
  let matrixDirectRoomDepsPromise;
813
811
  async function loadMatrixDirectRoomDeps() {
814
- matrixDirectRoomDepsPromise ??= Promise.all([import("./send-DiYHONuz.js").then((n) => n.d), import("./send-DiYHONuz.js").then((n) => n.m)]).then(([directManagementModule, directRoomModule]) => ({
812
+ matrixDirectRoomDepsPromise ??= Promise.all([import("./send-DivaFHb1.js").then((n) => n.d), import("./send-DivaFHb1.js").then((n) => n.m)]).then(([directManagementModule, directRoomModule]) => ({
815
813
  inspectMatrixDirectRooms: directManagementModule.inspectMatrixDirectRooms,
816
814
  isStrictDirectRoom: directRoomModule.isStrictDirectRoom
817
815
  }));
@@ -2020,7 +2018,7 @@ let sessionBindingRuntimePromise;
2020
2018
  let matrixReactionEventsPromise;
2021
2019
  let matrixDraftStreamPromise;
2022
2020
  function loadMatrixSendModule() {
2023
- matrixSendModulePromise ??= import("./send-DiYHONuz.js").then((n) => n.l);
2021
+ matrixSendModulePromise ??= import("./send-DivaFHb1.js").then((n) => n.l);
2024
2022
  return matrixSendModulePromise;
2025
2023
  }
2026
2024
  function loadAcpBindingRuntime() {
@@ -2032,13 +2030,21 @@ function loadSessionBindingRuntime() {
2032
2030
  return sessionBindingRuntimePromise;
2033
2031
  }
2034
2032
  function loadMatrixReactionEvents() {
2035
- matrixReactionEventsPromise ??= import("./reaction-events-BP49GRln.js");
2033
+ matrixReactionEventsPromise ??= import("./reaction-events-BefH3-Gu.js");
2036
2034
  return matrixReactionEventsPromise;
2037
2035
  }
2038
2036
  function loadMatrixDraftStream() {
2039
- matrixDraftStreamPromise ??= import("./draft-stream-D1PvVZ3B.js");
2037
+ matrixDraftStreamPromise ??= import("./draft-stream-BBVqdEbn.js");
2040
2038
  return matrixDraftStreamPromise;
2041
2039
  }
2040
+ async function matrixTextWouldActivateMentions(client, text) {
2041
+ const { resolveMatrixMentionsForBody } = await loadMatrixSendModule();
2042
+ const mentions = await resolveMatrixMentionsForBody({
2043
+ client,
2044
+ body: text
2045
+ });
2046
+ return mentions.room === true || (mentions.user_ids?.length ?? 0) > 0;
2047
+ }
2042
2048
  const MAX_TRACKED_PAIRING_REPLY_SENDERS = 512;
2043
2049
  const MAX_TRACKED_SHARED_DM_CONTEXT_NOTICES = 512;
2044
2050
  var MatrixRetryableInboundError = class extends Error {
@@ -2752,10 +2758,7 @@ function createMatrixRoomMessageHandler(params) {
2752
2758
  roomId,
2753
2759
  eventId: replyToEventId
2754
2760
  }) : void 0;
2755
- if (replyContext?.replyToSenderId && !shouldIncludeRoomContextSender("quote", replyContext.replyToSenderId)) {
2756
- logVerboseMessage(`matrix: drop reply context (mode=${contextVisibilityMode})`);
2757
- replyContext = void 0;
2758
- }
2761
+ const replySenderAllowed = !replyContext?.replyToSenderId || isRoomContextSenderAllowed(replyContext.replyToSenderId);
2759
2762
  const roomName = (isRoom ? await getRoomInfo(roomId) : void 0)?.name;
2760
2763
  const envelopeFrom = isDirectMessage ? senderName : roomName ?? roomId;
2761
2764
  const textWithId = `${bodyText}\n[matrix event id: ${messageId} room: ${roomId}]`;
@@ -2784,47 +2787,83 @@ function createMatrixRoomMessageHandler(params) {
2784
2787
  body: textWithId
2785
2788
  });
2786
2789
  const groupSystemPrompt = normalizeOptionalString(roomConfig?.systemPrompt);
2787
- const ctxPayload = core.channel.reply.finalizeInboundContext({
2788
- Body: body,
2789
- RawBody: bodyText,
2790
- CommandBody: commandBodyText,
2791
- BodyForAgent: bodyText,
2792
- BodyForCommands: commandBodyText,
2793
- InboundHistory: inboundHistory && inboundHistory.length > 0 ? inboundHistory : void 0,
2794
- From: isDirectMessage ? `matrix:${senderId}` : `matrix:channel:${roomId}`,
2795
- To: `room:${roomId}`,
2796
- SessionKey: _route.sessionKey,
2797
- AccountId: _route.accountId,
2798
- ChatType: isDirectMessage ? "direct" : "channel",
2799
- ConversationLabel: envelopeFrom,
2800
- SenderName: senderName,
2801
- SenderId: senderId,
2802
- SenderUsername: senderId.split(":")[0]?.replace(/^@/, ""),
2803
- GroupSubject: isRoom ? roomName ?? roomId : void 0,
2804
- GroupId: isRoom ? roomId : void 0,
2805
- GroupChannel: isRoom ? roomId : void 0,
2806
- GroupSystemPrompt: isRoom ? groupSystemPrompt : void 0,
2807
- Provider: "matrix",
2808
- Surface: "matrix",
2809
- WasMentioned: isRoom ? wasMentioned : void 0,
2810
- MessageSid: messageId,
2811
- ReplyToId: threadTarget ? void 0 : replyToEventId ?? void 0,
2812
- ReplyToBody: replyContext?.replyToBody,
2813
- ReplyToSender: replyContext?.replyToSender,
2814
- MessageThreadId: threadTarget,
2815
- ThreadStarterBody: threadContext?.threadStarterBody,
2816
- Timestamp: eventTs ?? void 0,
2817
- MediaPath: media?.path,
2818
- MediaType: media?.contentType,
2819
- MediaUrl: media?.path,
2820
- ...locationPayload?.context,
2821
- CommandAuthorized: commandAuthorized,
2822
- CommandSource: "text",
2823
- NativeChannelId: roomId,
2824
- NativeDirectUserId: isDirectMessage ? senderId : void 0,
2825
- OriginatingChannel: "matrix",
2826
- OriginatingTo: `room:${roomId}`
2790
+ const quoteHidden = Boolean(replyContext && !evaluateSupplementalContextVisibility({
2791
+ mode: contextVisibilityMode,
2792
+ kind: "quote",
2793
+ senderAllowed: replySenderAllowed
2794
+ }).include);
2795
+ const ctxPayload = buildChannelInboundEventContext({
2796
+ channel: "matrix",
2797
+ finalize: core.channel.reply.finalizeInboundContext,
2798
+ contextVisibility: contextVisibilityMode,
2799
+ supplemental: {
2800
+ quote: replyContext ? {
2801
+ id: threadTarget ? void 0 : replyToEventId ?? void 0,
2802
+ body: replyContext.replyToBody,
2803
+ sender: replyContext.replyToSender,
2804
+ senderAllowed: replySenderAllowed
2805
+ } : void 0,
2806
+ thread: {
2807
+ starterBody: threadContext?.threadStarterBody,
2808
+ senderAllowed: threadContext ? true : void 0
2809
+ },
2810
+ groupSystemPrompt: isRoom ? groupSystemPrompt : void 0
2811
+ },
2812
+ media: toInboundMediaFacts(media ? [{
2813
+ path: media.path,
2814
+ url: media.path,
2815
+ contentType: media.contentType
2816
+ }] : void 0),
2817
+ messageId,
2818
+ timestamp: eventTs ?? void 0,
2819
+ from: isDirectMessage ? `matrix:${senderId}` : `matrix:channel:${roomId}`,
2820
+ sender: {
2821
+ id: senderId,
2822
+ name: senderName,
2823
+ username: senderId.split(":")[0]?.replace(/^@/, "")
2824
+ },
2825
+ conversation: {
2826
+ kind: isDirectMessage ? "direct" : "channel",
2827
+ id: roomId,
2828
+ label: envelopeFrom,
2829
+ nativeChannelId: roomId,
2830
+ threadId: threadTarget
2831
+ },
2832
+ route: {
2833
+ agentId: _route.agentId,
2834
+ accountId: _route.accountId,
2835
+ routeSessionKey: _route.sessionKey
2836
+ },
2837
+ reply: {
2838
+ to: `room:${roomId}`,
2839
+ replyToId: threadTarget ? void 0 : replyToEventId ?? void 0,
2840
+ messageThreadId: threadTarget,
2841
+ nativeChannelId: roomId
2842
+ },
2843
+ message: {
2844
+ body,
2845
+ rawBody: bodyText,
2846
+ commandBody: commandBodyText,
2847
+ bodyForAgent: bodyText,
2848
+ inboundHistory: inboundHistory && inboundHistory.length > 0 ? inboundHistory : void 0
2849
+ },
2850
+ access: {
2851
+ ...isRoom ? { mentions: {
2852
+ canDetectMention: true,
2853
+ wasMentioned
2854
+ } } : {},
2855
+ commands: { authorized: commandAuthorized }
2856
+ },
2857
+ extra: {
2858
+ GroupSubject: isRoom ? roomName ?? roomId : void 0,
2859
+ GroupId: isRoom ? roomId : void 0,
2860
+ GroupChannel: isRoom ? roomId : void 0,
2861
+ ...locationPayload?.context,
2862
+ CommandSource: "text",
2863
+ NativeDirectUserId: isDirectMessage ? senderId : void 0
2864
+ }
2827
2865
  });
2866
+ if (quoteHidden) logVerboseMessage(`matrix: drop reply context (mode=${contextVisibilityMode})`);
2828
2867
  logVerboseMessage(`matrix inbound: room=${roomId} from=${senderId} preview="${bodyText.slice(0, 200).replace(/\n/g, "\\n")}"`);
2829
2868
  const replyTarget = ctxPayload.To;
2830
2869
  if (!replyTarget) {
@@ -3114,7 +3153,8 @@ function createMatrixRoomMessageHandler(params) {
3114
3153
  mustDeliverFinalNormally = draftStream.mustDeliverFinalNormally();
3115
3154
  } else await draftStream.discardPending();
3116
3155
  const draftEventId = draftStream.eventId();
3117
- if (draftEventId && payload.text && !payload.isError && !hasMedia && !payloadReplyMismatch && !mustDeliverFinalNormally) {
3156
+ const draftFinalTextNeedsNormalMentionDelivery = Boolean(draftEventId) && typeof payload.text === "string" && Boolean(payload.text.trim()) && !payload.isError && !payloadReplyMismatch && !mustDeliverFinalNormally && await matrixTextWouldActivateMentions(client, payload.text);
3157
+ if (draftEventId && payload.text && !payload.isError && !hasMedia && !payloadReplyMismatch && !mustDeliverFinalNormally && !draftFinalTextNeedsNormalMentionDelivery) {
3118
3158
  const finalPreviewText = payload.text;
3119
3159
  await deliverWithFinalizableLivePreviewAdapter({
3120
3160
  kind: "final",
@@ -3177,7 +3217,10 @@ function createMatrixRoomMessageHandler(params) {
3177
3217
  const payloadText = payload.text ?? ttsSupplement?.spokenText;
3178
3218
  const payloadTextMatchesDraft = typeof payloadText === "string" && draftStream.matchesPreparedText(payloadText);
3179
3219
  const reusesDraftTextUnchanged = typeof payloadText === "string" && Boolean(payloadText.trim()) && payloadTextMatchesDraft;
3180
- if (textEditOk && payloadText && (quietDraftStreaming || typeof payloadText === "string" && !payloadTextMatchesDraft)) {
3220
+ const mediaTextNeedsNormalMentionDelivery = typeof payloadText === "string" && Boolean(payloadText.trim()) && await matrixTextWouldActivateMentions(client, payloadText);
3221
+ const requiresFinalTextEdit = quietDraftStreaming || typeof payloadText === "string" && !payloadTextMatchesDraft;
3222
+ if (textEditOk && mediaTextNeedsNormalMentionDelivery) textEditOk = false;
3223
+ else if (textEditOk && payloadText && requiresFinalTextEdit) {
3181
3224
  const { editMessageMatrix } = await loadMatrixSendModule();
3182
3225
  textEditOk = await editMessageMatrix(roomId, draftEventId, payloadText, {
3183
3226
  client,
@@ -3207,7 +3250,7 @@ function createMatrixRoomMessageHandler(params) {
3207
3250
  });
3208
3251
  draftConsumed = true;
3209
3252
  } else {
3210
- const draftRedacted = Boolean(draftEventId) && (payload.isError || payloadReplyMismatch || mustDeliverFinalNormally);
3253
+ const draftRedacted = Boolean(draftEventId) && (payload.isError || payloadReplyMismatch || mustDeliverFinalNormally || draftFinalTextNeedsNormalMentionDelivery);
3211
3254
  if (draftRedacted && draftEventId) await redactMatrixDraftEvent(client, roomId, draftEventId);
3212
3255
  const deliveredFallback = await deliverMatrixReplies({
3213
3256
  cfg,
@@ -3281,7 +3324,7 @@ function createMatrixRoomMessageHandler(params) {
3281
3324
  route: _route,
3282
3325
  sessionKey: _route.sessionKey
3283
3326
  });
3284
- const turnResult = await core.channel.turn.run({
3327
+ const turnResult = await core.channel.inbound.run({
3285
3328
  channel: "matrix",
3286
3329
  accountId: _route.accountId,
3287
3330
  raw: event,
@@ -3331,12 +3374,14 @@ function createMatrixRoomMessageHandler(params) {
3331
3374
  }
3332
3375
  }),
3333
3376
  runDispatch: async () => {
3334
- if (sharedDmContextNotice && markTrackedRoomIfFirst(sharedDmContextNoticeRooms, roomId)) client.sendMessage(roomId, {
3335
- msgtype: "m.notice",
3336
- body: sharedDmContextNotice
3337
- }).catch((err) => {
3377
+ if (sharedDmContextNotice && markTrackedRoomIfFirst(sharedDmContextNoticeRooms, roomId)) try {
3378
+ await client.sendMessage(roomId, {
3379
+ msgtype: "m.notice",
3380
+ body: sharedDmContextNotice
3381
+ });
3382
+ } catch (err) {
3338
3383
  logVerboseMessage(`matrix: failed sending shared DM session notice room=${roomId}: ${String(err)}`);
3339
- });
3384
+ }
3340
3385
  return await core.channel.reply.withReplyDispatcher({
3341
3386
  dispatcher,
3342
3387
  onSettled: () => {
@@ -3715,9 +3760,9 @@ function createMatrixRoomInfoResolver(client) {
3715
3760
  let matrixStartupMaintenanceDepsPromise;
3716
3761
  async function loadMatrixStartupMaintenanceDeps() {
3717
3762
  matrixStartupMaintenanceDepsPromise ??= Promise.all([
3718
- import("./setup-core-DiRWksVZ.js").then((n) => n.s),
3763
+ import("./setup-core-s8s_Qudu.js").then((n) => n.s),
3719
3764
  import("./device-health-D4LBxuPq.js"),
3720
- import("./setup-core-DiRWksVZ.js").then((n) => n.a),
3765
+ import("./setup-core-s8s_Qudu.js").then((n) => n.a),
3721
3766
  import("./legacy-crypto-restore-BgW3I87R.js"),
3722
3767
  import("./startup-verification-BmTEngvU.js")
3723
3768
  ]).then(([configUpdateModule, deviceHealthModule, profileModule, legacyCryptoRestoreModule, startupVerificationModule]) => ({
@@ -3,7 +3,7 @@ import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runti
3
3
  //#region extensions/matrix/src/plugin-entry.runtime.ts
4
4
  let matrixVerificationRuntimePromise;
5
5
  function loadMatrixVerificationRuntime() {
6
- matrixVerificationRuntimePromise ??= import("./verification-CVQiUQ9Y.js").then((n) => n.y);
6
+ matrixVerificationRuntimePromise ??= import("./verification-Dar6QON4.js").then((n) => n.y);
7
7
  return matrixVerificationRuntimePromise;
8
8
  }
9
9
  function sendError(respond, err) {
@@ -1,6 +1,6 @@
1
1
  import { t as getMatrixRuntime } from "./runtime-6S3DNFNv.js";
2
- import { c as resolveMatrixConfigPath, l as updateMatrixAccountConfig, o as syncMatrixOwnProfile } from "./setup-core-DiRWksVZ.js";
3
- import { n as withResolvedActionClient } from "./client-DLpRIMeD.js";
2
+ import { c as resolveMatrixConfigPath, l as updateMatrixAccountConfig, o as syncMatrixOwnProfile } from "./setup-core-s8s_Qudu.js";
3
+ import { n as withResolvedActionClient } from "./client-BgsOzckO.js";
4
4
  import { normalizeAccountId } from "openclaw/plugin-sdk/account-id";
5
5
  //#region extensions/matrix/src/matrix/actions/profile.ts
6
6
  async function updateMatrixOwnProfile(opts = {}) {
@@ -7,7 +7,7 @@ import { getSessionBindingService } from "openclaw/plugin-sdk/session-binding-ru
7
7
  let approvalReactionAuthPromise;
8
8
  let execApprovalResolverPromise;
9
9
  function loadApprovalReactionAuth() {
10
- approvalReactionAuthPromise ??= import("./approval-reaction-auth-B1S7D_cq.js");
10
+ approvalReactionAuthPromise ??= import("./approval-reaction-auth-BvK3dXMH.js");
11
11
  return approvalReactionAuthPromise;
12
12
  }
13
13
  function loadExecApprovalResolver() {
@@ -1,15 +1,14 @@
1
1
  import "./timeout-abort-signal-DMrgRFIy.js";
2
2
  import "openclaw/plugin-sdk/account-id";
3
3
  import { resolveThreadBindingIdleTimeoutMsForChannel, resolveThreadBindingMaxAgeMsForChannel } from "openclaw/plugin-sdk/conversation-runtime";
4
- import "openclaw/plugin-sdk/channel-message";
4
+ import { resolveOutboundSendDep } from "openclaw/plugin-sdk/channel-outbound";
5
5
  import { chunkTextForOutbound as chunkTextForOutbound$1 } from "openclaw/plugin-sdk/text-chunking";
6
6
  import { createActionGate as createActionGate$1, jsonResult, readNumberParam as readNumberParam$1, readReactionParams, readStringArrayParam, readStringParam as readStringParam$1 } from "openclaw/plugin-sdk/channel-actions";
7
7
  import "openclaw/plugin-sdk/routing";
8
8
  import "openclaw/plugin-sdk/channel-status";
9
9
  import "openclaw/plugin-sdk/channel-config-primitives";
10
10
  import "openclaw/plugin-sdk/ssrf-runtime";
11
- import "openclaw/plugin-sdk/channel-location";
12
- import "openclaw/plugin-sdk/channel-logging";
11
+ import "openclaw/plugin-sdk/channel-inbound";
13
12
  import "openclaw/plugin-sdk/channel-targets";
14
13
  import "openclaw/plugin-sdk/setup";
15
14
  import "openclaw/plugin-sdk/json-store";
@@ -18,7 +17,5 @@ import "openclaw/plugin-sdk/poll-runtime";
18
17
  import { formatZonedTimestamp } from "openclaw/plugin-sdk/time-runtime";
19
18
  import "openclaw/plugin-sdk/channel-feedback";
20
19
  import { GROUP_POLICY_BLOCKED_LABEL, resolveAllowlistProviderRuntimeGroupPolicy, resolveDefaultGroupPolicy, warnMissingProviderGroupPolicyFallbackOnce } from "openclaw/plugin-sdk/runtime-group-policy";
21
- import "openclaw/plugin-sdk/inbound-reply-dispatch";
22
20
  import "openclaw/plugin-sdk/acp-binding-runtime";
23
- import { resolveOutboundSendDep } from "openclaw/plugin-sdk/outbound-send-deps";
24
21
  export { jsonResult as a, readStringArrayParam as c, resolveDefaultGroupPolicy as d, resolveOutboundSendDep as f, warnMissingProviderGroupPolicyFallbackOnce as h, formatZonedTimestamp as i, readStringParam$1 as l, resolveThreadBindingMaxAgeMsForChannel as m, chunkTextForOutbound$1 as n, readNumberParam$1 as o, resolveThreadBindingIdleTimeoutMsForChannel as p, createActionGate$1 as r, readReactionParams as s, GROUP_POLICY_BLOCKED_LABEL as t, resolveAllowlistProviderRuntimeGroupPolicy as u };
@@ -4,7 +4,7 @@ import { c as resolveMatrixAccountConfig } from "./config-paths-ZBCMwSos.js";
4
4
  import { t as getMatrixRuntime } from "./runtime-6S3DNFNv.js";
5
5
  import { n as MATRIX_REACTION_EVENT_TYPE, r as buildMatrixReactionContent, t as MATRIX_ANNOTATION_RELATION_TYPE } from "./reaction-common-DkrQdBSZ.js";
6
6
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString, normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/string-coerce-runtime";
7
- import { createMessageReceiptFromOutboundResults } from "openclaw/plugin-sdk/channel-message";
7
+ import { createMessageReceiptFromOutboundResults } from "openclaw/plugin-sdk/channel-outbound";
8
8
  import { requireRuntimeConfig } from "openclaw/plugin-sdk/plugin-config-runtime";
9
9
  import { loadOutboundMediaFromUrl } from "openclaw/plugin-sdk/outbound-media";
10
10
  import { normalizePollInput } from "openclaw/plugin-sdk/poll-runtime";
@@ -270,7 +270,7 @@ md.enable("strikethrough");
270
270
  const { escapeHtml } = md.utils;
271
271
  const ESCAPED_MENTION_SENTINEL = "";
272
272
  const MENTION_PATTERN = /@[A-Za-z0-9._=+\-/:[\]]+/g;
273
- const MATRIX_MENTION_USER_ID_PATTERN = /^@[A-Za-z0-9._=+\-/]+:(?:[A-Za-z0-9.-]+|\[[0-9A-Fa-f:.]+\])(?::\d+)?$/;
273
+ const MATRIX_MENTION_USER_ID_PATTERN = new RegExp(`^@[A-Za-z0-9._=+\\-/]+:(?:${/(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?)(?:\.(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?))*(?::\d+)?/.source}|\\[[0-9A-Fa-f:.]+\\](?::\\d+)?)$`);
274
274
  const TRIMMABLE_MENTION_SUFFIX = /[),.!?:;\]]/;
275
275
  function shouldSuppressAutoLink(tokens, idx) {
276
276
  const token = tokens[idx];
@@ -1149,6 +1149,7 @@ var send_exports = /* @__PURE__ */ __exportAll({
1149
1149
  editMessageMatrix: () => editMessageMatrix,
1150
1150
  prepareMatrixSingleText: () => prepareMatrixSingleText,
1151
1151
  reactMatrixMessage: () => reactMatrixMessage,
1152
+ resolveMatrixMentionsForBody: () => resolveMatrixMentionsForBody,
1152
1153
  resolveMatrixRoomId: () => resolveMatrixRoomId,
1153
1154
  sendMessageMatrix: () => sendMessageMatrix,
1154
1155
  sendPollMatrix: () => sendPollMatrix,
@@ -1,7 +1,7 @@
1
1
  import { a as hasExplicitMatrixAccountConfig, c as resolveMatrixAccountConfig } from "./config-paths-ZBCMwSos.js";
2
- import "./setup-core-DiRWksVZ.js";
2
+ import "./setup-core-s8s_Qudu.js";
3
3
  import { t as formatMatrixErrorMessage } from "./errors-C47hvAF8.js";
4
- import { n as bootstrapMatrixVerification } from "./verification-CVQiUQ9Y.js";
4
+ import { n as bootstrapMatrixVerification } from "./verification-Dar6QON4.js";
5
5
  //#region extensions/matrix/src/setup-bootstrap.ts
6
6
  async function maybeBootstrapNewEncryptedMatrixAccount(params) {
7
7
  const accountConfig = resolveMatrixAccountConfig({
@@ -664,7 +664,7 @@ const matrixSetupAdapter = {
664
664
  input
665
665
  }),
666
666
  afterAccountConfigWritten: async ({ previousCfg, cfg, accountId, runtime }) => {
667
- const { runMatrixSetupBootstrapAfterConfigWrite } = await import("./setup-bootstrap-Cgq4GjHo.js");
667
+ const { runMatrixSetupBootstrapAfterConfigWrite } = await import("./setup-bootstrap-ClcP-tDQ.js");
668
668
  await runMatrixSetupBootstrapAfterConfigWrite({
669
669
  previousCfg,
670
670
  cfg,
@@ -1,5 +1,5 @@
1
- import { g as resolveMatrixAccount, n as matrixSetupAdapter, t as createMatrixSetupWizardProxy } from "./setup-core-DiRWksVZ.js";
2
- import { r as matrixConfigAdapter, t as MatrixChannelConfigSchema } from "./config-schema-qPgAoSU2.js";
1
+ import { g as resolveMatrixAccount, n as matrixSetupAdapter, t as createMatrixSetupWizardProxy } from "./setup-core-s8s_Qudu.js";
2
+ import { r as matrixConfigAdapter, t as MatrixChannelConfigSchema } from "./config-schema-DuSRVdwT.js";
3
3
  import { describeAccountSnapshot } from "openclaw/plugin-sdk/account-helpers";
4
4
  const matrixSetupPlugin = {
5
5
  id: "matrix",
@@ -13,7 +13,7 @@ const matrixSetupPlugin = {
13
13
  order: 70,
14
14
  quickstartAllowFrom: true
15
15
  },
16
- setupWizard: createMatrixSetupWizardProxy(async () => ({ matrixSetupWizard: (await import("./setup-surface-DD5dKWcB.js").then((n) => n.t)).matrixSetupWizard })),
16
+ setupWizard: createMatrixSetupWizardProxy(async () => ({ matrixSetupWizard: (await import("./setup-surface-BOt10HNf.js").then((n) => n.t)).matrixSetupWizard })),
17
17
  setup: matrixSetupAdapter,
18
18
  capabilities: {
19
19
  chatTypes: [
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
2
  import { n as requiresExplicitMatrixDefaultAccount } from "./account-selection-C3arLOhC.js";
3
3
  import { c as resolveMatrixAccountConfig, t as resolveMatrixConfigFieldPath } from "./config-paths-ZBCMwSos.js";
4
4
  import { r as resolveMatrixEnvAuthReadiness } from "./env-auth-DIzOApj0.js";
5
- import { g as resolveMatrixAccount, h as resolveDefaultMatrixAccountId, i as moveSingleMatrixAccountConfigToNamedAccount, l as updateMatrixAccountConfig, p as listMatrixAccountIds, r as resolveMatrixSetupDmAllowFrom } from "./setup-core-DiRWksVZ.js";
5
+ import { g as resolveMatrixAccount, h as resolveDefaultMatrixAccountId, i as moveSingleMatrixAccountConfigToNamedAccount, l as updateMatrixAccountConfig, p as listMatrixAccountIds, r as resolveMatrixSetupDmAllowFrom } from "./setup-core-s8s_Qudu.js";
6
6
  import { n as validateMatrixHomeserverUrl, r as isPrivateOrLoopbackHost, t as resolveValidatedMatrixHomeserverUrl } from "./url-validation-GRHde6lq.js";
7
7
  import { n as ensureMatrixSdkInstalled, r as isMatrixSdkAvailable } from "./deps-CAdiytPJ.js";
8
8
  import { DEFAULT_ACCOUNT_ID } from "openclaw/plugin-sdk/account-id";
@@ -507,7 +507,7 @@ const matrixOnboardingAdapter = {
507
507
  });
508
508
  },
509
509
  afterConfigWritten: async ({ previousCfg, cfg, accountId, runtime }) => {
510
- const { runMatrixSetupBootstrapAfterConfigWrite } = await import("./setup-bootstrap-Cgq4GjHo.js");
510
+ const { runMatrixSetupBootstrapAfterConfigWrite } = await import("./setup-bootstrap-ClcP-tDQ.js");
511
511
  await runMatrixSetupBootstrapAfterConfigWrite({
512
512
  previousCfg,
513
513
  cfg,
package/dist/test-api.js CHANGED
@@ -1,4 +1,4 @@
1
1
  import { r as setMatrixRuntime } from "./runtime-6S3DNFNv.js";
2
- import { t as matrixPlugin } from "./channel-Q-9mXTAf.js";
2
+ import { t as matrixPlugin } from "./channel-BLuA_9If.js";
3
3
  import { t as MatrixClient } from "./sdk-BKBZkPKt.js";
4
4
  export { MatrixClient, matrixPlugin, setMatrixRuntime };
@@ -1,6 +1,6 @@
1
1
  import { a as listBindingsForAccount, c as resolveBindingKey, f as setMatrixThreadBindingManagerEntry, h as toSessionBindingRecord, l as resolveEffectiveBindingExpiry, m as toMatrixBindingTargetKind, o as removeBindingRecord, r as getMatrixThreadBindingManagerEntry, t as deleteMatrixThreadBindingManagerEntry, u as setBindingRecord } from "./thread-bindings-shared-CKnY4LSd.js";
2
2
  import { i as resolveMatrixStateFilePath, t as claimCurrentTokenStorageState } from "./storage-onzulLbU.js";
3
- import { a as sendMessageMatrix } from "./send-DiYHONuz.js";
3
+ import { a as sendMessageMatrix } from "./send-DivaFHb1.js";
4
4
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  import { registerSessionBindingAdapter, resolveThreadBindingFarewellText, unregisterSessionBindingAdapter } from "openclaw/plugin-sdk/thread-bindings-session-runtime";
6
6
  import path from "node:path";
@@ -1,12 +1,12 @@
1
1
  import { c as resolveMatrixAccountConfig } from "./config-paths-ZBCMwSos.js";
2
- import "./setup-core-DiRWksVZ.js";
3
- import { E as parsePollStart, T as isPollStartType, b as buildPollResponseContent, i as reactMatrixMessage, u as resolveMatrixRoomId } from "./send-DiYHONuz.js";
2
+ import "./setup-core-s8s_Qudu.js";
3
+ import { E as parsePollStart, T as isPollStartType, b as buildPollResponseContent, i as reactMatrixMessage, u as resolveMatrixRoomId } from "./send-DivaFHb1.js";
4
4
  import { i as buildMatrixReactionRelationsPath, o as selectOwnMatrixReactionEventIds, s as summarizeMatrixReactionEvents } from "./reaction-common-DkrQdBSZ.js";
5
- import { n as withResolvedActionClient, r as withResolvedRoomAction } from "./client-DLpRIMeD.js";
6
- import { a as fetchEventSummary, c as resolveMatrixActionLimit, i as sendMatrixMessage, n as editMatrixMessage, o as readPinnedEvents, r as readMatrixMessages, s as EventType, t as deleteMatrixMessage } from "./messages-D_zHS_2K.js";
7
- import { a as jsonResult, c as readStringArrayParam, l as readStringParam, o as readNumberParam, r as createActionGate, s as readReactionParams } from "./runtime-api-CtNLoJ_E.js";
8
- import { t as applyMatrixProfileUpdate } from "./profile-update-Esnq0p93.js";
9
- import { _ as scanMatrixVerificationQr, a as confirmMatrixVerificationSas, b as verifyMatrixRecoveryKey, c as getMatrixRoomKeyBackupStatus, d as listMatrixVerifications, f as mismatchMatrixVerificationSas, h as restoreMatrixRoomKeyBackup, i as confirmMatrixVerificationReciprocateQr, l as getMatrixVerificationSas, n as bootstrapMatrixVerification, o as generateMatrixVerificationQr, p as requestMatrixVerification, r as cancelMatrixVerification, s as getMatrixEncryptionStatus, t as acceptMatrixVerification, u as getMatrixVerificationStatus, v as startMatrixVerification } from "./verification-CVQiUQ9Y.js";
5
+ import { n as withResolvedActionClient, r as withResolvedRoomAction } from "./client-BgsOzckO.js";
6
+ import { a as fetchEventSummary, c as resolveMatrixActionLimit, i as sendMatrixMessage, n as editMatrixMessage, o as readPinnedEvents, r as readMatrixMessages, s as EventType, t as deleteMatrixMessage } from "./messages-D-VxmWkC.js";
7
+ import { a as jsonResult, c as readStringArrayParam, l as readStringParam, o as readNumberParam, r as createActionGate, s as readReactionParams } from "./runtime-api-B-jlPE4A.js";
8
+ import { t as applyMatrixProfileUpdate } from "./profile-update-B_LpeC8E.js";
9
+ import { _ as scanMatrixVerificationQr, a as confirmMatrixVerificationSas, b as verifyMatrixRecoveryKey, c as getMatrixRoomKeyBackupStatus, d as listMatrixVerifications, f as mismatchMatrixVerificationSas, h as restoreMatrixRoomKeyBackup, i as confirmMatrixVerificationReciprocateQr, l as getMatrixVerificationSas, n as bootstrapMatrixVerification, o as generateMatrixVerificationQr, p as requestMatrixVerification, r as cancelMatrixVerification, s as getMatrixEncryptionStatus, t as acceptMatrixVerification, u as getMatrixVerificationStatus, v as startMatrixVerification } from "./verification-Dar6QON4.js";
10
10
  import { normalizeOptionalLowercaseString, uniqueStrings, uniqueValues } from "openclaw/plugin-sdk/string-coerce-runtime";
11
11
  //#region extensions/matrix/src/matrix/actions/polls.ts
12
12
  function normalizeOptionIndexes(indexes) {
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
- import { i as withStartedActionClient, n as withResolvedActionClient } from "./client-DLpRIMeD.js";
2
+ import { i as withStartedActionClient, n as withResolvedActionClient } from "./client-BgsOzckO.js";
3
3
  import { n as formatMatrixEncryptionUnavailableError } from "./encryption-guidance-CU-OAPMg.js";
4
4
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  import { requireRuntimeConfig } from "openclaw/plugin-sdk/plugin-config-runtime";
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@openclaw/matrix",
3
- "version": "2026.5.26",
3
+ "version": "2026.5.27-beta.1",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@openclaw/matrix",
9
- "version": "2026.5.26",
9
+ "version": "2026.5.27-beta.1",
10
10
  "dependencies": {
11
11
  "@matrix-org/matrix-sdk-crypto-nodejs": "0.4.0",
12
12
  "@matrix-org/matrix-sdk-crypto-wasm": "18.3.0",
@@ -18,7 +18,7 @@
18
18
  "zod": "4.4.3"
19
19
  },
20
20
  "peerDependencies": {
21
- "openclaw": ">=2026.5.26"
21
+ "openclaw": ">=2026.5.27-beta.1"
22
22
  },
23
23
  "peerDependenciesMeta": {
24
24
  "openclaw": {
@@ -1,5 +1,7 @@
1
1
  {
2
2
  "id": "matrix",
3
+ "name": "Matrix",
4
+ "description": "OpenClaw Matrix channel plugin for rooms and direct messages.",
3
5
  "commandAliases": [
4
6
  {
5
7
  "name": "matrix"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@openclaw/matrix",
3
- "version": "2026.5.26",
4
- "description": "OpenClaw Matrix channel plugin",
3
+ "version": "2026.5.27-beta.1",
4
+ "description": "OpenClaw Matrix channel plugin for rooms and direct messages.",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/openclaw/openclaw"
@@ -18,7 +18,7 @@
18
18
  "zod": "4.4.3"
19
19
  },
20
20
  "peerDependencies": {
21
- "openclaw": ">=2026.5.26"
21
+ "openclaw": ">=2026.5.27-beta.1"
22
22
  },
23
23
  "peerDependenciesMeta": {
24
24
  "openclaw": {
@@ -41,6 +41,7 @@
41
41
  "docsLabel": "matrix",
42
42
  "blurb": "open protocol; install the plugin to enable.",
43
43
  "order": 70,
44
+ "markdownCapable": true,
44
45
  "quickstartAllowFrom": true,
45
46
  "doctorCapabilities": {
46
47
  "dmAllowFromMode": "nestedOnly",
@@ -83,10 +84,10 @@
83
84
  "allowInvalidConfigRecovery": true
84
85
  },
85
86
  "compat": {
86
- "pluginApi": ">=2026.5.26"
87
+ "pluginApi": ">=2026.5.27-beta.1"
87
88
  },
88
89
  "build": {
89
- "openclawVersion": "2026.5.26"
90
+ "openclawVersion": "2026.5.27-beta.1"
90
91
  },
91
92
  "release": {
92
93
  "publishToClawHub": true,