@openclaw/discord 2026.5.28-beta.1 → 2026.5.28-beta.2

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 (64) hide show
  1. package/dist/action-runtime-api.js +1 -1
  2. package/dist/api.js +12 -12
  3. package/dist/{approval-handler.runtime-pEIfYHQG.js → approval-handler.runtime-CIZiiFBd.js} +3 -3
  4. package/dist/{audit-CEJs-ZOq.js → audit-D6BXQsYY.js} +3 -3
  5. package/dist/{channel-DPhpYUJD.js → channel--B_psO5e.js} +15 -15
  6. package/dist/{channel-actions-CAfBgXn1.js → channel-actions-BOH34yJ5.js} +2 -2
  7. package/dist/{channel-actions.runtime-CwCyNZkN.js → channel-actions.runtime-B1RCm1JP.js} +5 -5
  8. package/dist/channel-config-api.js +1 -1
  9. package/dist/channel-plugin-api.js +1 -1
  10. package/dist/{channel.setup-CpVPrc0F.js → channel.setup-COYdCbY_.js} +3 -3
  11. package/dist/{components-Ynd-Vfsr.js → components-DX5Baphr.js} +28 -9
  12. package/dist/{config-schema-CTzLsQlB.js → config-schema-3tZYNVTM.js} +13 -1
  13. package/dist/contract-api.js +2 -2
  14. package/dist/{conversation-identity-DbJP9mrG.js → conversation-identity-Dugx5WfH.js} +2 -2
  15. package/dist/{directory-config-CzVAco4Z.js → directory-config-CcjUkNgK.js} +1 -1
  16. package/dist/directory-contract-api.js +1 -1
  17. package/dist/{directory-live-OYvKvO_R.js → directory-live-NOtxlJZ3.js} +1 -1
  18. package/dist/{doctor-Q80i7GdG.js → doctor-Dy7sI1sL.js} +1 -1
  19. package/dist/{handle-action.guild-admin-lQMKNF5k.js → handle-action.guild-admin-wC9VaAdl.js} +1 -1
  20. package/dist/index.js +1 -1
  21. package/dist/{manager.runtime-B_xrVTWf.js → manager.runtime-Bwgq6hJW.js} +4 -4
  22. package/dist/{message-handler-BM5VbEP3.js → message-handler-DhqxKFLP.js} +9 -9
  23. package/dist/{message-handler.preflight-NWBbCKig.js → message-handler.preflight-BC8QmsWW.js} +10 -10
  24. package/dist/{message-handler.process-BUGG-Fsv.js → message-handler.process-DE1an2G4.js} +80 -11
  25. package/dist/{message-utils-uONSGxcw.js → message-utils-BlvuUPP4.js} +1 -1
  26. package/dist/{outbound-adapter-CDcIemWV.js → outbound-adapter-BGrOFkR8.js} +6 -6
  27. package/dist/{pluralkit-D5BSur8g.js → pluralkit-Cq_PUr06.js} +1 -1
  28. package/dist/{provider-CoyiVUd5.js → provider-DIVQuJTw.js} +24 -20
  29. package/dist/{provider-session.runtime-Ch0qhK0p.js → provider-session.runtime-C7jT_K-7.js} +3 -3
  30. package/dist/provider.runtime-BtnupyG-.js +2 -0
  31. package/dist/{resolve-channels-BjXtUlXb.js → resolve-channels-CQ13aBCV.js} +1 -1
  32. package/dist/{resolve-users-DY6Sa5l0.js → resolve-users-Bj4Y4uWR.js} +1 -1
  33. package/dist/{runtime-CiHKoHjw.js → runtime-DA70ebm-.js} +7 -7
  34. package/dist/runtime-api.actions.js +2 -2
  35. package/dist/runtime-api.js +18 -18
  36. package/dist/runtime-api.lookup.js +4 -4
  37. package/dist/runtime-api.monitor-P-emTjcx.js +5 -0
  38. package/dist/runtime-api.monitor.js +4 -4
  39. package/dist/runtime-api.send.js +5 -5
  40. package/dist/runtime-api.threads.js +3 -3
  41. package/dist/{send-BBY2mPUE.js → send-3r8QQkTY.js} +4 -4
  42. package/dist/{send.components-C9OG2oNd.js → send.components-2qRLUwBn.js} +4 -4
  43. package/dist/{send.outbound-DZxH3H5t.js → send.outbound-LjX_KYiO.js} +3 -3
  44. package/dist/{send.receipt-zNKgqYqU.js → send.receipt-Bo_43DQZ.js} +58 -21
  45. package/dist/{send.shared-D2rnoZ6i.js → send.shared-CXctTF1I.js} +2 -2
  46. package/dist/setup-plugin-api.js +1 -1
  47. package/dist/{shared-ToNRC7ax.js → shared-D3NkInmq.js} +2 -2
  48. package/dist/{subagent-hooks-CLe88Fgo.js → subagent-hooks-DoWTMQyQ.js} +2 -2
  49. package/dist/subagent-hooks-api.js +1 -1
  50. package/dist/{system-events-BZyO1kxg.js → system-events-DV85gUxb.js} +1 -1
  51. package/dist/{target-resolver-Der0K9Um.js → target-resolver-DVpZI7ZL.js} +2 -2
  52. package/dist/targets-0WHF7kV0.js +3 -0
  53. package/dist/{thread-bindings-Bx9iaVSx.js → thread-bindings-Cm3GqlNC.js} +4 -4
  54. package/dist/{thread-bindings.discord-api-Deuhxjj4.js → thread-bindings.discord-api-JrJXT7L0.js} +4 -4
  55. package/dist/{thread-bindings.manager-moDGXTgH.js → thread-bindings.manager-DqJuGG-r.js} +3 -3
  56. package/dist/transcripts-source-api.js +1 -1
  57. package/dist/{transcripts-source-Bnm3Dvrt.js → transcripts-source-lEfSvSRD.js} +1 -1
  58. package/dist/{typing-C6Q3TeK_.js → typing-DlT_14RX.js} +1 -1
  59. package/npm-shrinkwrap.json +3 -3
  60. package/openclaw.plugin.json +35 -1
  61. package/package.json +4 -4
  62. package/dist/provider.runtime-DazBQ_13.js +0 -2
  63. package/dist/runtime-api.monitor-BYyGzDrT.js +0 -5
  64. package/dist/targets-CZf4_VtX.js +0 -3
@@ -1,2 +1,2 @@
1
- import { t as handleDiscordAction } from "./runtime-CiHKoHjw.js";
1
+ import { t as handleDiscordAction } from "./runtime-DA70ebm-.js";
2
2
  export { handleDiscordAction };
package/dist/api.js CHANGED
@@ -1,23 +1,23 @@
1
- import { Ht as parseDiscordTarget, Ut as resolveDiscordChannelId, a as normalizeDiscordMessagingTarget, i as looksLikeDiscordTargetId, o as normalizeDiscordOutboundTarget } from "./send.receipt-zNKgqYqU.js";
1
+ import { Ht as parseDiscordTarget, Ut as resolveDiscordChannelId, a as normalizeDiscordMessagingTarget, i as looksLikeDiscordTargetId, o as normalizeDiscordOutboundTarget } from "./send.receipt-Bo_43DQZ.js";
2
2
  import { a as mergeDiscordAccountConfig, f as resolveDiscordMaxLinesPerMessage, i as listEnabledDiscordAccounts, l as resolveDiscordAccountConfig, o as resolveDefaultDiscordAccountId, r as listDiscordAccountIds, s as resolveDiscordAccount, t as createDiscordActionGate } from "./accounts-dXTfmnSZ.js";
3
3
  import { t as inspectDiscordAccount } from "./account-inspect-C4sJZNbI.js";
4
- import { _ as parseDiscordComponentCustomId, b as parseDiscordModalCustomIdForInteraction, c as buildDiscordComponentMessage, d as readDiscordComponentSpec, f as resolveDiscordComponentAttachmentName, g as buildDiscordModalCustomId, h as buildDiscordComponentCustomId, l as buildDiscordComponentMessageFlags, m as DISCORD_MODAL_CUSTOM_ID_KEY, n as formatDiscordComponentEventText, o as DiscordFormModal, p as DISCORD_COMPONENT_CUSTOM_ID_KEY, r as buildDiscordInteractiveComponents, s as createDiscordFormModal, u as DISCORD_COMPONENT_ATTACHMENT_PREFIX, v as parseDiscordComponentCustomIdForInteraction, y as parseDiscordModalCustomId } from "./components-Ynd-Vfsr.js";
4
+ import { _ as parseDiscordComponentCustomId, b as parseDiscordModalCustomIdForInteraction, c as buildDiscordComponentMessage, d as readDiscordComponentSpec, f as resolveDiscordComponentAttachmentName, g as buildDiscordModalCustomId, h as buildDiscordComponentCustomId, l as buildDiscordComponentMessageFlags, m as DISCORD_MODAL_CUSTOM_ID_KEY, n as formatDiscordComponentEventText, o as DiscordFormModal, p as DISCORD_COMPONENT_CUSTOM_ID_KEY, r as buildDiscordInteractiveComponents, s as createDiscordFormModal, u as DISCORD_COMPONENT_ATTACHMENT_PREFIX, v as parseDiscordComponentCustomIdForInteraction, y as parseDiscordModalCustomId } from "./components-DX5Baphr.js";
5
5
  import { n as fetchDiscord, r as requestDiscord, t as DiscordApiError } from "./api-ChQJ1kfZ.js";
6
- import { i as parseDiscordSendTarget, n as resolveDiscordTarget } from "./target-resolver-Der0K9Um.js";
7
- import "./targets-CZf4_VtX.js";
8
- import { a as getDiscordExecApprovalApprovers, c as shouldSuppressLocalDiscordExecApprovalPrompt, o as isDiscordExecApprovalApprover, s as isDiscordExecApprovalClientEnabled } from "./conversation-identity-DbJP9mrG.js";
9
- import { i as resolveDiscordGroupToolPolicy, n as collectDiscordStatusIssues, r as resolveDiscordGroupRequireMention, t as discordPlugin } from "./channel-DPhpYUJD.js";
6
+ import { i as parseDiscordSendTarget, n as resolveDiscordTarget } from "./target-resolver-DVpZI7ZL.js";
7
+ import "./targets-0WHF7kV0.js";
8
+ import { a as getDiscordExecApprovalApprovers, c as shouldSuppressLocalDiscordExecApprovalPrompt, o as isDiscordExecApprovalApprover, s as isDiscordExecApprovalClientEnabled } from "./conversation-identity-Dugx5WfH.js";
9
+ import { i as resolveDiscordGroupToolPolicy, n as collectDiscordStatusIssues, r as resolveDiscordGroupRequireMention, t as discordPlugin } from "./channel--B_psO5e.js";
10
10
  import { t as normalizeExplicitDiscordSessionKey } from "./session-key-normalization-wJgsKPNF.js";
11
- import { t as discordSetupPlugin } from "./channel.setup-CpVPrc0F.js";
12
- import { n as handleDiscordSubagentEnded, r as handleDiscordSubagentSpawning, t as handleDiscordSubagentDeliveryTarget } from "./subagent-hooks-CLe88Fgo.js";
13
- import { t as tryHandleDiscordMessageActionGuildAdmin } from "./handle-action.guild-admin-lQMKNF5k.js";
14
- import { n as listDiscordDirectoryGroupsFromConfig, r as listDiscordDirectoryPeersFromConfig } from "./directory-config-CzVAco4Z.js";
15
- import { t as fetchPluralKitMessageInfo } from "./pluralkit-D5BSur8g.js";
11
+ import { t as discordSetupPlugin } from "./channel.setup-COYdCbY_.js";
12
+ import { n as handleDiscordSubagentEnded, r as handleDiscordSubagentSpawning, t as handleDiscordSubagentDeliveryTarget } from "./subagent-hooks-DoWTMQyQ.js";
13
+ import { t as tryHandleDiscordMessageActionGuildAdmin } from "./handle-action.guild-admin-wC9VaAdl.js";
14
+ import { n as listDiscordDirectoryGroupsFromConfig, r as listDiscordDirectoryPeersFromConfig } from "./directory-config-CcjUkNgK.js";
15
+ import { t as fetchPluralKitMessageInfo } from "./pluralkit-Cq_PUr06.js";
16
16
  import { a as resolveDiscordPrivilegedIntentsFromFlags, i as probeDiscord, n as fetchDiscordApplicationSummary, r as parseApplicationIdFromToken, t as fetchDiscordApplicationId } from "./probe-CSBPZIYV.js";
17
17
  import { t as collectDiscordSecurityAuditFindings } from "./security-audit-Bh_65L5C.js";
18
18
  import { a as mergeAbortSignals, i as DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, n as DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, r as DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, t as DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS } from "./timeouts-l_PsHQvX.js";
19
19
  import { resolveOpenProviderRuntimeGroupPolicy as resolveDiscordRuntimeGroupPolicy } from "openclaw/plugin-sdk/runtime-group-policy";
20
20
  //#region extensions/discord/api.ts
21
- const handleDiscordMessageAction = async (...args) => (await import("./channel-actions.runtime-CwCyNZkN.js")).handleDiscordMessageAction(...args);
21
+ const handleDiscordMessageAction = async (...args) => (await import("./channel-actions.runtime-B1RCm1JP.js")).handleDiscordMessageAction(...args);
22
22
  //#endregion
23
23
  export { DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS, DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, DISCORD_COMPONENT_ATTACHMENT_PREFIX, DISCORD_COMPONENT_CUSTOM_ID_KEY, DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, DISCORD_MODAL_CUSTOM_ID_KEY, DiscordApiError, DiscordFormModal, buildDiscordComponentCustomId, buildDiscordComponentMessage, buildDiscordComponentMessageFlags, buildDiscordInteractiveComponents, buildDiscordModalCustomId, collectDiscordSecurityAuditFindings, collectDiscordStatusIssues, createDiscordActionGate, createDiscordFormModal, discordPlugin, discordSetupPlugin, fetchDiscord, fetchDiscordApplicationId, fetchDiscordApplicationSummary, fetchPluralKitMessageInfo, formatDiscordComponentEventText, getDiscordExecApprovalApprovers, handleDiscordMessageAction, handleDiscordSubagentDeliveryTarget, handleDiscordSubagentEnded, handleDiscordSubagentSpawning, inspectDiscordAccount, isDiscordExecApprovalApprover, isDiscordExecApprovalClientEnabled, listDiscordAccountIds, listDiscordDirectoryGroupsFromConfig, listDiscordDirectoryPeersFromConfig, listEnabledDiscordAccounts, looksLikeDiscordTargetId, mergeAbortSignals, mergeDiscordAccountConfig, normalizeDiscordMessagingTarget, normalizeDiscordOutboundTarget, normalizeExplicitDiscordSessionKey, parseApplicationIdFromToken, parseDiscordComponentCustomId, parseDiscordComponentCustomIdForInteraction as parseDiscordComponentCustomIdForCarbon, parseDiscordComponentCustomIdForInteraction, parseDiscordModalCustomId, parseDiscordModalCustomIdForInteraction as parseDiscordModalCustomIdForCarbon, parseDiscordModalCustomIdForInteraction, parseDiscordSendTarget, parseDiscordTarget, probeDiscord, readDiscordComponentSpec, requestDiscord, resolveDefaultDiscordAccountId, resolveDiscordAccount, resolveDiscordAccountConfig, resolveDiscordChannelId, resolveDiscordComponentAttachmentName, resolveDiscordGroupRequireMention, resolveDiscordGroupToolPolicy, resolveDiscordMaxLinesPerMessage, resolveDiscordPrivilegedIntentsFromFlags, resolveDiscordRuntimeGroupPolicy, resolveDiscordTarget, shouldSuppressLocalDiscordExecApprovalPrompt, tryHandleDiscordMessageActionGuildAdmin };
@@ -1,7 +1,7 @@
1
- import { B as Container, J as Separator, K as Row, R as Button, Wt as __exportAll, X as TextDisplay, ft as editChannelMessage, j as serializePayload, nt as createUserDmChannel, st as createChannelMessage, ut as deleteChannelMessage } from "./send.receipt-zNKgqYqU.js";
1
+ import { B as Container, J as Separator, K as Row, R as Button, Wt as __exportAll, X as TextDisplay, ft as editChannelMessage, j as serializePayload, nt as createUserDmChannel, st as createChannelMessage, ut as deleteChannelMessage } from "./send.receipt-Bo_43DQZ.js";
2
2
  import { t as inspectDiscordAccount } from "./account-inspect-C4sJZNbI.js";
3
- import { F as createDiscordClient, b as stripUndefinedFields } from "./send.shared-D2rnoZ6i.js";
4
- import { i as shouldHandleDiscordApprovalRequest, s as isDiscordExecApprovalClientEnabled } from "./conversation-identity-DbJP9mrG.js";
3
+ import { F as createDiscordClient, b as stripUndefinedFields } from "./send.shared-CXctTF1I.js";
4
+ import { i as shouldHandleDiscordApprovalRequest, s as isDiscordExecApprovalClientEnabled } from "./conversation-identity-Dugx5WfH.js";
5
5
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
6
6
  import { ButtonStyle } from "discord-api-types/v10";
7
7
  import { logDebug, logError } from "openclaw/plugin-sdk/logging-core";
@@ -1,7 +1,7 @@
1
- import { Wt as __exportAll } from "./send.receipt-zNKgqYqU.js";
1
+ import { Wt as __exportAll } from "./send.receipt-Bo_43DQZ.js";
2
2
  import { t as inspectDiscordAccount } from "./account-inspect-C4sJZNbI.js";
3
- import { O as fetchChannelPermissionsDiscord } from "./send.shared-D2rnoZ6i.js";
4
- import "./send-BBY2mPUE.js";
3
+ import { O as fetchChannelPermissionsDiscord } from "./send.shared-CXctTF1I.js";
4
+ import "./send-3r8QQkTY.js";
5
5
  import { n as collectDiscordAuditChannelIdsForAccount, t as auditDiscordChannelPermissionsWithFetcher } from "./audit-core-xwjIczO0.js";
6
6
  //#region extensions/discord/src/audit.ts
7
7
  var audit_exports = /* @__PURE__ */ __exportAll({
@@ -1,14 +1,14 @@
1
- import { Ht as parseDiscordTarget, a as normalizeDiscordMessagingTarget, i as looksLikeDiscordTargetId } from "./send.receipt-zNKgqYqU.js";
1
+ import { Ht as parseDiscordTarget, a as normalizeDiscordMessagingTarget, i as looksLikeDiscordTargetId } from "./send.receipt-Bo_43DQZ.js";
2
2
  import { c as resolveDiscordAccountAllowFrom, r as listDiscordAccountIds, s as resolveDiscordAccount } from "./accounts-dXTfmnSZ.js";
3
3
  import { a as projectCredentialSnapshotFields, n as PAIRING_APPROVED_MESSAGE, o as resolveConfiguredFromCredentialStatuses, r as buildTokenChannelStatusSummary, t as DEFAULT_ACCOUNT_ID } from "./channel-api-CAJ0wMoV.js";
4
- import { x as resolveDiscordOutboundSessionRoute } from "./components-Ynd-Vfsr.js";
4
+ import { x as resolveDiscordOutboundSessionRoute } from "./components-DX5Baphr.js";
5
5
  import { t as getDiscordRuntime } from "./runtime-DgnVQ7zW.js";
6
- import { c as shouldSuppressLocalDiscordExecApprovalPrompt, n as resolveDiscordCurrentConversationIdentity, r as getDiscordApprovalCapability } from "./conversation-identity-DbJP9mrG.js";
6
+ import { c as shouldSuppressLocalDiscordExecApprovalPrompt, n as resolveDiscordCurrentConversationIdentity, r as getDiscordApprovalCapability } from "./conversation-identity-Dugx5WfH.js";
7
7
  import { r as resolveRequiredDiscordChannelPermissions } from "./audit-core-xwjIczO0.js";
8
- import { t as discordMessageActions$1 } from "./channel-actions-CAfBgXn1.js";
8
+ import { t as discordMessageActions$1 } from "./channel-actions-BOH34yJ5.js";
9
9
  import { n as setThreadBindingMaxAgeBySessionKey, t as setThreadBindingIdleTimeoutBySessionKey } from "./thread-bindings.session-updates-D5gY2ZTE.js";
10
- import { n as discordOutbound } from "./outbound-adapter-CDcIemWV.js";
11
- import { a as discordSecurityAdapter, i as discordSetupAdapter, n as discordConfigAdapter, t as createDiscordPluginBase } from "./shared-ToNRC7ax.js";
10
+ import { n as discordOutbound } from "./outbound-adapter-BGrOFkR8.js";
11
+ import { a as discordSecurityAdapter, i as discordSetupAdapter, n as discordConfigAdapter, t as createDiscordPluginBase } from "./shared-D3NkInmq.js";
12
12
  import { t as normalizeExplicitDiscordSessionKey } from "./session-key-normalization-wJgsKPNF.js";
13
13
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString, normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/string-coerce-runtime";
14
14
  import { createChatChannelPlugin } from "openclaw/plugin-sdk/channel-core";
@@ -114,13 +114,13 @@ let discordProbeRuntimePromise;
114
114
  let discordAuditModulePromise;
115
115
  let discordSendModulePromise;
116
116
  let discordDirectoryLiveModulePromise;
117
- const loadDiscordDirectoryConfigModule = createLazyRuntimeModule(() => import("./directory-config-CzVAco4Z.js").then((n) => n.t));
118
- const loadDiscordResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels-BjXtUlXb.js").then((n) => n.n));
119
- const loadDiscordResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-DY6Sa5l0.js").then((n) => n.n));
120
- const loadDiscordThreadBindingsManagerModule = createLazyRuntimeModule(() => import("./thread-bindings.manager-moDGXTgH.js").then((n) => n.a));
121
- const loadDiscordTargetResolverModule = createLazyRuntimeModule(() => import("./target-resolver-Der0K9Um.js").then((n) => n.r));
117
+ const loadDiscordDirectoryConfigModule = createLazyRuntimeModule(() => import("./directory-config-CcjUkNgK.js").then((n) => n.t));
118
+ const loadDiscordResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels-CQ13aBCV.js").then((n) => n.n));
119
+ const loadDiscordResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-Bj4Y4uWR.js").then((n) => n.n));
120
+ const loadDiscordThreadBindingsManagerModule = createLazyRuntimeModule(() => import("./thread-bindings.manager-DqJuGG-r.js").then((n) => n.a));
121
+ const loadDiscordTargetResolverModule = createLazyRuntimeModule(() => import("./target-resolver-DVpZI7ZL.js").then((n) => n.r));
122
122
  async function loadDiscordProviderRuntime() {
123
- discordProviderRuntimePromise ??= import("./provider.runtime-DazBQ_13.js");
123
+ discordProviderRuntimePromise ??= import("./provider.runtime-BtnupyG-.js");
124
124
  return await discordProviderRuntimePromise;
125
125
  }
126
126
  async function loadDiscordProbeRuntime() {
@@ -128,15 +128,15 @@ async function loadDiscordProbeRuntime() {
128
128
  return await discordProbeRuntimePromise;
129
129
  }
130
130
  async function loadDiscordAuditModule() {
131
- discordAuditModulePromise ??= import("./audit-CEJs-ZOq.js").then((n) => n.n);
131
+ discordAuditModulePromise ??= import("./audit-D6BXQsYY.js").then((n) => n.n);
132
132
  return await discordAuditModulePromise;
133
133
  }
134
134
  async function loadDiscordSendModule() {
135
- discordSendModulePromise ??= import("./send-BBY2mPUE.js").then((n) => n.t);
135
+ discordSendModulePromise ??= import("./send-3r8QQkTY.js").then((n) => n.t);
136
136
  return await discordSendModulePromise;
137
137
  }
138
138
  async function loadDiscordDirectoryLiveModule() {
139
- discordDirectoryLiveModulePromise ??= import("./directory-live-OYvKvO_R.js").then((n) => n.t);
139
+ discordDirectoryLiveModulePromise ??= import("./directory-live-NOtxlJZ3.js").then((n) => n.t);
140
140
  return await discordDirectoryLiveModulePromise;
141
141
  }
142
142
  //#endregion
@@ -1,6 +1,6 @@
1
1
  import { r as listDiscordAccountIds, t as createDiscordActionGate } from "./accounts-dXTfmnSZ.js";
2
2
  import { t as inspectDiscordAccount } from "./account-inspect-C4sJZNbI.js";
3
- import { d as readDiscordComponentSpec } from "./components-Ynd-Vfsr.js";
3
+ import { d as readDiscordComponentSpec } from "./components-DX5Baphr.js";
4
4
  import { i as withDiscordInboundEventDeliveryMetadata } from "./inbound-event-delivery-CEPlt2uz.js";
5
5
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
6
6
  import { createUnionActionGate } from "openclaw/plugin-sdk/channel-actions";
@@ -22,7 +22,7 @@ const trustedRequesterGuildAdminActions = new Set([
22
22
  ]);
23
23
  let discordChannelActionsRuntimePromise;
24
24
  async function loadDiscordChannelActionsRuntime() {
25
- discordChannelActionsRuntimePromise ??= import("./channel-actions.runtime-CwCyNZkN.js");
25
+ discordChannelActionsRuntimePromise ??= import("./channel-actions.runtime-B1RCm1JP.js");
26
26
  return await discordChannelActionsRuntimePromise;
27
27
  }
28
28
  function listDiscoverableDiscordAccounts(cfg) {
@@ -1,10 +1,10 @@
1
- import { Ut as resolveDiscordChannelId } from "./send.receipt-zNKgqYqU.js";
2
- import { i as buildDiscordPresentationComponents, r as buildDiscordInteractiveComponents } from "./components-Ynd-Vfsr.js";
3
- import { t as handleDiscordAction } from "./runtime-CiHKoHjw.js";
4
- import "./targets-CZf4_VtX.js";
1
+ import { Ut as resolveDiscordChannelId } from "./send.receipt-Bo_43DQZ.js";
2
+ import { i as buildDiscordPresentationComponents, r as buildDiscordInteractiveComponents } from "./components-DX5Baphr.js";
3
+ import { t as handleDiscordAction } from "./runtime-DA70ebm-.js";
4
+ import "./targets-0WHF7kV0.js";
5
5
  import "./action-runtime-api.js";
6
6
  import { r as notifyDiscordInboundEventOutboundSuccess } from "./inbound-event-delivery-CEPlt2uz.js";
7
- import { t as tryHandleDiscordMessageActionGuildAdmin } from "./handle-action.guild-admin-lQMKNF5k.js";
7
+ import { t as tryHandleDiscordMessageActionGuildAdmin } from "./handle-action.guild-admin-wC9VaAdl.js";
8
8
  import { normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/string-coerce-runtime";
9
9
  import { resolveReactionMessageId } from "openclaw/plugin-sdk/channel-actions";
10
10
  import { readBooleanParam } from "openclaw/plugin-sdk/boolean-param";
@@ -1,2 +1,2 @@
1
- import { t as DiscordChannelConfigSchema } from "./config-schema-CTzLsQlB.js";
1
+ import { t as DiscordChannelConfigSchema } from "./config-schema-3tZYNVTM.js";
2
2
  export { DiscordChannelConfigSchema };
@@ -1,2 +1,2 @@
1
- import { t as discordPlugin } from "./channel-DPhpYUJD.js";
1
+ import { t as discordPlugin } from "./channel--B_psO5e.js";
2
2
  export { discordPlugin };
@@ -1,8 +1,8 @@
1
1
  import { a as mergeDiscordAccountConfig, c as resolveDiscordAccountAllowFrom, l as resolveDiscordAccountConfig, m as resolveDiscordToken, o as resolveDefaultDiscordAccountId } from "./accounts-dXTfmnSZ.js";
2
2
  import "./channel-api-CAJ0wMoV.js";
3
- import { i as discordSetupAdapter, t as createDiscordPluginBase } from "./shared-ToNRC7ax.js";
4
- import { t as resolveDiscordChannelAllowlist } from "./resolve-channels-BjXtUlXb.js";
5
- import { t as resolveDiscordUserAllowlist } from "./resolve-users-DY6Sa5l0.js";
3
+ import { i as discordSetupAdapter, t as createDiscordPluginBase } from "./shared-D3NkInmq.js";
4
+ import { t as resolveDiscordChannelAllowlist } from "./resolve-channels-CQ13aBCV.js";
5
+ import { t as resolveDiscordUserAllowlist } from "./resolve-users-Bj4Y4uWR.js";
6
6
  import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id";
7
7
  import { hasConfiguredSecretInput, normalizeSecretInputString } from "openclaw/plugin-sdk/secret-input";
8
8
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -1,4 +1,4 @@
1
- import { B as Container, F as Modal, G as RoleSelectMenu, H as LinkButton, Ht as parseDiscordTarget, I as RadioGroup, J as Separator, K as Row, L as TextInput, N as CheckboxGroup, P as Label, Q as UserSelectMenu, R as Button, U as MediaGallery, V as File, W as MentionableSelectMenu, Wt as __exportAll, X as TextDisplay, Y as StringSelectMenu, Z as Thumbnail, et as parseCustomId, q as Section, z as ChannelSelectMenu } from "./send.receipt-zNKgqYqU.js";
1
+ import { B as Container, F as Modal, G as RoleSelectMenu, H as LinkButton, Ht as parseDiscordTarget, I as RadioGroup, J as Separator, K as Row, L as TextInput, N as CheckboxGroup, P as Label, Q as UserSelectMenu, R as Button, U as MediaGallery, V as File, W as MentionableSelectMenu, Wt as __exportAll, X as TextDisplay, Y as StringSelectMenu, Z as Thumbnail, et as parseCustomId, q as Section, z as ChannelSelectMenu } from "./send.receipt-Bo_43DQZ.js";
2
2
  import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
3
3
  import { buildOutboundBaseSessionKey } from "openclaw/plugin-sdk/routing";
4
4
  import { buildThreadAwareOutboundSessionRoute } from "openclaw/plugin-sdk/channel-core";
@@ -48,19 +48,38 @@ function resolveDiscordOutboundTargetKindHint(params) {
48
48
  //#region extensions/discord/src/component-custom-id.ts
49
49
  const DISCORD_COMPONENT_CUSTOM_ID_KEY = "occomp";
50
50
  const DISCORD_MODAL_CUSTOM_ID_KEY = "ocmodal";
51
+ const ENCODED_CUSTOM_ID_VERSION = "1";
52
+ function encodeCustomIdValue(value) {
53
+ return value.replace(/%/g, "%25").replace(/;/g, "%3B");
54
+ }
55
+ function needsCustomIdEncoding(value) {
56
+ return /[%;]/.test(value);
57
+ }
58
+ function decodeCustomIdValue(value) {
59
+ return value.replace(/%(25|3B)/gi, (match) => match.toLowerCase() === "%25" ? "%" : ";");
60
+ }
61
+ function decodeParsedCustomIdData(data) {
62
+ if (data.e !== ENCODED_CUSTOM_ID_VERSION) return data;
63
+ return Object.fromEntries(Object.entries(data).map(([key, value]) => [key, typeof value === "string" ? decodeCustomIdValue(value) : value]));
64
+ }
51
65
  function buildDiscordComponentCustomId(params) {
52
- const base = `${DISCORD_COMPONENT_CUSTOM_ID_KEY}:cid=${params.componentId}`;
53
- return params.modalId ? `${base};mid=${params.modalId}` : base;
66
+ const encoded = needsCustomIdEncoding(params.componentId) || needsCustomIdEncoding(params.modalId ?? "");
67
+ const componentId = encoded ? encodeCustomIdValue(params.componentId) : params.componentId;
68
+ const base = encoded ? `${DISCORD_COMPONENT_CUSTOM_ID_KEY}:e=${ENCODED_CUSTOM_ID_VERSION};cid=${componentId}` : `${DISCORD_COMPONENT_CUSTOM_ID_KEY}:cid=${componentId}`;
69
+ const modalId = params.modalId;
70
+ if (!modalId) return base;
71
+ return `${base};mid=${encoded ? encodeCustomIdValue(modalId) : modalId}`;
54
72
  }
55
73
  function buildDiscordModalCustomId(modalId) {
56
- return `${DISCORD_MODAL_CUSTOM_ID_KEY}:mid=${modalId}`;
74
+ return needsCustomIdEncoding(modalId) ? `${DISCORD_MODAL_CUSTOM_ID_KEY}:e=${ENCODED_CUSTOM_ID_VERSION};mid=${encodeCustomIdValue(modalId)}` : `${DISCORD_MODAL_CUSTOM_ID_KEY}:mid=${modalId}`;
57
75
  }
58
76
  function parseDiscordComponentCustomId(id) {
59
77
  const parsed = parseCustomId(id);
60
78
  if (parsed.key !== "occomp") return null;
61
- const componentId = parsed.data.cid;
79
+ const data = decodeParsedCustomIdData(parsed.data);
80
+ const componentId = data.cid;
62
81
  if (typeof componentId !== "string" || !componentId.trim()) return null;
63
- const modalId = parsed.data.mid;
82
+ const modalId = data.mid;
64
83
  return {
65
84
  componentId,
66
85
  modalId: typeof modalId === "string" && modalId.trim() ? modalId : void 0
@@ -69,7 +88,7 @@ function parseDiscordComponentCustomId(id) {
69
88
  function parseDiscordModalCustomId(id) {
70
89
  const parsed = parseCustomId(id);
71
90
  if (parsed.key !== "ocmodal") return null;
72
- const modalId = parsed.data.mid;
91
+ const modalId = decodeParsedCustomIdData(parsed.data).mid;
73
92
  if (typeof modalId !== "string" || !modalId.trim()) return null;
74
93
  return modalId;
75
94
  }
@@ -85,7 +104,7 @@ function parseDiscordComponentCustomIdForInteraction(id) {
85
104
  if (parsed.key !== "occomp") return parsed;
86
105
  return {
87
106
  key: "*",
88
- data: parsed.data
107
+ data: decodeParsedCustomIdData(parsed.data)
89
108
  };
90
109
  }
91
110
  function parseDiscordModalCustomIdForInteraction(id) {
@@ -97,7 +116,7 @@ function parseDiscordModalCustomIdForInteraction(id) {
97
116
  if (parsed.key !== "ocmodal") return parsed;
98
117
  return {
99
118
  key: "*",
100
- data: parsed.data
119
+ data: decodeParsedCustomIdData(parsed.data)
101
120
  };
102
121
  }
103
122
  //#endregion
@@ -90,6 +90,10 @@ const DiscordChannelConfigSchema = buildChannelConfigSchema(DiscordConfigSchema,
90
90
  label: "Discord Progress Tool Lines",
91
91
  help: "Show compact tool/progress lines in progress draft mode (default: true). Set false to keep only the label until final delivery."
92
92
  },
93
+ "streaming.progress.commentary": {
94
+ label: "Discord Progress Commentary",
95
+ help: "Show assistant commentary/preamble text in the temporary progress draft. Final answer delivery is unchanged."
96
+ },
93
97
  "streaming.progress.commandText": {
94
98
  label: "Discord Progress Command Text",
95
99
  help: "Command/exec detail in progress draft lines: \"raw\" preserves released behavior; \"status\" shows only the tool label."
@@ -222,9 +226,17 @@ const DiscordChannelConfigSchema = buildChannelConfigSchema(DiscordConfigSchema,
222
226
  label: "Discord Realtime Model",
223
227
  help: "Provider realtime session model, such as gpt-realtime-2. This is separate from voice.model, which remains the OpenClaw agent brain model."
224
228
  },
229
+ "voice.realtime.speakerVoice": {
230
+ label: "Discord Realtime Speaker Voice",
231
+ help: "Provider realtime output voice name, such as cedar."
232
+ },
233
+ "voice.realtime.speakerVoiceId": {
234
+ label: "Discord Realtime Speaker Voice ID",
235
+ help: "Provider realtime output voice id."
236
+ },
225
237
  "voice.realtime.voice": {
226
238
  label: "Discord Realtime Voice",
227
- help: "Provider realtime output voice, such as cedar."
239
+ help: "Deprecated provider realtime output voice. Use voice.realtime.speakerVoice."
228
240
  },
229
241
  "voice.realtime.toolPolicy": {
230
242
  label: "Discord Realtime Tool Policy",
@@ -2,7 +2,7 @@ import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doc
2
2
  import { n as secretTargetRegistryEntries, t as collectRuntimeConfigAssignments } from "./secret-config-contract-BjM-1hr9.js";
3
3
  import { n as unsupportedSecretRefSurfacePatterns, t as collectUnsupportedSecretRefConfigCandidates } from "./security-contract-DSHk7I2w.js";
4
4
  import { t as deriveLegacySessionChatType } from "./session-contract-BO5tlIdl.js";
5
- import { i as testing, n as createThreadBindingManager } from "./thread-bindings.manager-moDGXTgH.js";
6
- import { n as listDiscordDirectoryGroupsFromConfig, r as listDiscordDirectoryPeersFromConfig } from "./directory-config-CzVAco4Z.js";
5
+ import { i as testing, n as createThreadBindingManager } from "./thread-bindings.manager-DqJuGG-r.js";
6
+ import { n as listDiscordDirectoryGroupsFromConfig, r as listDiscordDirectoryPeersFromConfig } from "./directory-config-CcjUkNgK.js";
7
7
  import { t as collectDiscordSecurityAuditFindings } from "./security-audit-Bh_65L5C.js";
8
8
  export { collectDiscordSecurityAuditFindings, collectRuntimeConfigAssignments, collectUnsupportedSecretRefConfigCandidates, createThreadBindingManager, deriveLegacySessionChatType, testing as discordThreadBindingTesting, legacyConfigRules, listDiscordDirectoryGroupsFromConfig, listDiscordDirectoryPeersFromConfig, normalizeCompatibilityConfig, secretTargetRegistryEntries, unsupportedSecretRefSurfacePatterns };
@@ -1,4 +1,4 @@
1
- import { Ht as parseDiscordTarget } from "./send.receipt-zNKgqYqU.js";
1
+ import { Ht as parseDiscordTarget } from "./send.receipt-Bo_43DQZ.js";
2
2
  import { r as listDiscordAccountIds, s as resolveDiscordAccount } from "./accounts-dXTfmnSZ.js";
3
3
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  import { createLazyChannelApprovalNativeRuntimeAdapter } from "openclaw/plugin-sdk/approval-handler-adapter-runtime";
@@ -229,7 +229,7 @@ function createDiscordApprovalCapability(configOverride) {
229
229
  request,
230
230
  configOverride
231
231
  }),
232
- load: async () => (await import("./approval-handler.runtime-pEIfYHQG.js").then((n) => n.t)).discordApprovalNativeRuntime
232
+ load: async () => (await import("./approval-handler.runtime-CIZiiFBd.js").then((n) => n.t)).discordApprovalNativeRuntime
233
233
  })
234
234
  });
235
235
  }
@@ -1,4 +1,4 @@
1
- import { Wt as __exportAll } from "./send.receipt-zNKgqYqU.js";
1
+ import { Wt as __exportAll } from "./send.receipt-Bo_43DQZ.js";
2
2
  import { a as mergeDiscordAccountConfig, c as resolveDiscordAccountAllowFrom, o as resolveDefaultDiscordAccountId } from "./accounts-dXTfmnSZ.js";
3
3
  import { normalizeAccountId } from "openclaw/plugin-sdk/account-id";
4
4
  import { createResolvedDirectoryEntriesLister } from "openclaw/plugin-sdk/directory-config-runtime";
@@ -1,2 +1,2 @@
1
- import { n as listDiscordDirectoryGroupsFromConfig, r as listDiscordDirectoryPeersFromConfig } from "./directory-config-CzVAco4Z.js";
1
+ import { n as listDiscordDirectoryGroupsFromConfig, r as listDiscordDirectoryPeersFromConfig } from "./directory-config-CcjUkNgK.js";
2
2
  export { listDiscordDirectoryGroupsFromConfig, listDiscordDirectoryPeersFromConfig };
@@ -1,4 +1,4 @@
1
- import { Wt as __exportAll } from "./send.receipt-zNKgqYqU.js";
1
+ import { Wt as __exportAll } from "./send.receipt-Bo_43DQZ.js";
2
2
  import { p as normalizeDiscordToken, s as resolveDiscordAccount } from "./accounts-dXTfmnSZ.js";
3
3
  import { n as fetchDiscord } from "./api-ChQJ1kfZ.js";
4
4
  import { a as normalizeDiscordSlug } from "./allow-list-BnkWtVpA.js";
@@ -1,6 +1,6 @@
1
1
  import { o as resolveDefaultDiscordAccountId } from "./accounts-dXTfmnSZ.js";
2
2
  import { t as inspectDiscordAccount } from "./account-inspect-C4sJZNbI.js";
3
- import { r as DISCORD_LEGACY_CONFIG_RULES } from "./shared-ToNRC7ax.js";
3
+ import { r as DISCORD_LEGACY_CONFIG_RULES } from "./shared-D3NkInmq.js";
4
4
  import { n as normalizeCompatibilityConfig } from "./doctor-contract-8-Ia3d_X.js";
5
5
  import { t as isDiscordMutableAllowEntry } from "./security-doctor-uUo8hTD5.js";
6
6
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -1,4 +1,4 @@
1
- import { a as readDiscordChannelCreateParams, n as isDiscordModerationAction, o as readDiscordChannelEditParams, r as readDiscordModerationCommand, s as readDiscordChannelMoveParams, t as handleDiscordAction } from "./runtime-CiHKoHjw.js";
1
+ import { a as readDiscordChannelCreateParams, n as isDiscordModerationAction, o as readDiscordChannelEditParams, r as readDiscordModerationCommand, s as readDiscordChannelMoveParams, t as handleDiscordAction } from "./runtime-DA70ebm-.js";
2
2
  import "./action-runtime-api.js";
3
3
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  import { readNonNegativeIntegerParam, readPositiveIntegerParam, readStringArrayParam, readStringParam } from "openclaw/plugin-sdk/agent-runtime";
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { registerDiscordSubagentHooks } from "./subagent-hooks-api.js";
2
- import { t as discordVoiceTranscriptsSourceProvider } from "./transcripts-source-Bnm3Dvrt.js";
2
+ import { t as discordVoiceTranscriptsSourceProvider } from "./transcripts-source-lEfSvSRD.js";
3
3
  import "./transcripts-source-api.js";
4
4
  import { defineBundledChannelEntry } from "openclaw/plugin-sdk/channel-entry-contract";
5
5
  //#region extensions/discord/index.ts
@@ -1,9 +1,9 @@
1
- import { Ht as parseDiscordTarget, _ as VoiceStateUpdateListener, c as discord_exports, h as ResumedListener, jt as getGuildVoiceState, m as ReadyListener } from "./send.receipt-zNKgqYqU.js";
1
+ import { Ht as parseDiscordTarget, _ as VoiceStateUpdateListener, c as discord_exports, h as ResumedListener, jt as getGuildVoiceState, m as ReadyListener } from "./send.receipt-Bo_43DQZ.js";
2
2
  import { c as resolveDiscordAccountAllowFrom } from "./accounts-dXTfmnSZ.js";
3
3
  import { a as normalizeDiscordSlug, b as formatDiscordUserTag, m as resolveDiscordOwnerAccess } from "./allow-list-BnkWtVpA.js";
4
- import { i as formatMention } from "./send.outbound-DZxH3H5t.js";
4
+ import { i as formatMention } from "./send.outbound-LjX_KYiO.js";
5
5
  import { t as getDiscordRuntime } from "./runtime-DgnVQ7zW.js";
6
- import { f as buildDiscordGroupSystemPrompt, o as authorizeDiscordVoiceIngress, u as resolveDiscordVoiceEnabled } from "./provider-CoyiVUd5.js";
6
+ import { f as buildDiscordGroupSystemPrompt, o as authorizeDiscordVoiceIngress, u as resolveDiscordVoiceEnabled } from "./provider-DIVQuJTw.js";
7
7
  import { createRequire } from "node:module";
8
8
  import { asBoolean, normalizeOptionalString, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
9
9
  import { resolveAgentRoute } from "openclaw/plugin-sdk/routing";
@@ -1536,7 +1536,7 @@ function buildProviderConfigs(realtimeConfig) {
1536
1536
  function buildProviderConfigOverrides(realtimeConfig) {
1537
1537
  const overrides = {
1538
1538
  ...realtimeConfig?.model ? { model: realtimeConfig.model } : {},
1539
- ...realtimeConfig?.voice ? { voice: realtimeConfig.voice } : {},
1539
+ ...realtimeConfig?.speakerVoice ? { voice: realtimeConfig.speakerVoice } : realtimeConfig?.speakerVoiceId ? { voice: realtimeConfig.speakerVoiceId } : realtimeConfig?.voice ? { voice: realtimeConfig.voice } : {},
1540
1540
  ...typeof realtimeConfig?.minBargeInAudioEndMs === "number" ? { minBargeInAudioEndMs: realtimeConfig.minBargeInAudioEndMs } : {}
1541
1541
  };
1542
1542
  return Object.keys(overrides).length > 0 ? overrides : void 0;
@@ -1,8 +1,8 @@
1
- import { I as createDiscordRestClient } from "./send.shared-D2rnoZ6i.js";
2
- import { d as resolveDiscordChannelNameSafe, l as resolveDiscordChannelIdSafe, p as resolveDiscordChannelParentSafe, u as resolveDiscordChannelInfoSafe } from "./thread-bindings.discord-api-Deuhxjj4.js";
1
+ import { I as createDiscordRestClient } from "./send.shared-CXctTF1I.js";
2
+ import { d as resolveDiscordChannelNameSafe, l as resolveDiscordChannelIdSafe, p as resolveDiscordChannelParentSafe, u as resolveDiscordChannelInfoSafe } from "./thread-bindings.discord-api-JrJXT7L0.js";
3
3
  import { a as mergeAbortSignals } from "./timeouts-l_PsHQvX.js";
4
- import { c as hasDiscordMessageStickers, d as resolveDiscordMessageChannelId, r as resolveDiscordMessageText } from "./message-utils-uONSGxcw.js";
5
- import { t as sendTyping } from "./typing-C6Q3TeK_.js";
4
+ import { c as hasDiscordMessageStickers, d as resolveDiscordMessageChannelId, r as resolveDiscordMessageText } from "./message-utils-BlvuUPP4.js";
5
+ import { t as sendTyping } from "./typing-DlT_14RX.js";
6
6
  import { danger, logVerbose } from "openclaw/plugin-sdk/runtime-env";
7
7
  import { createChannelRunQueue } from "openclaw/plugin-sdk/channel-outbound";
8
8
  import { resolveOpenProviderRuntimeGroupPolicy } from "openclaw/plugin-sdk/runtime-group-policy";
@@ -121,7 +121,7 @@ function applyImplicitReplyBatchGate(ctx, replyToMode, isBatched) {
121
121
  //#region extensions/discord/src/monitor/message-run-queue.ts
122
122
  let messageProcessRuntimePromise;
123
123
  async function loadMessageProcessRuntime() {
124
- messageProcessRuntimePromise ??= import("./message-handler.process-BUGG-Fsv.js");
124
+ messageProcessRuntimePromise ??= import("./message-handler.process-DE1an2G4.js");
125
125
  return await messageProcessRuntimePromise;
126
126
  }
127
127
  async function processDiscordQueuedMessage(params) {
@@ -152,7 +152,7 @@ function createDiscordMessageRunQueue(params) {
152
152
  setStatus: params.setStatus,
153
153
  abortSignal: params.abortSignal,
154
154
  onError: (error) => {
155
- params.runtime.error?.(danger(`discord message run failed: ${String(error)}`));
155
+ params.runtime.error(danger(`discord message run failed: ${String(error)}`));
156
156
  }
157
157
  });
158
158
  return {
@@ -173,7 +173,7 @@ function createDiscordMessageRunQueue(params) {
173
173
  //#region extensions/discord/src/monitor/message-handler.ts
174
174
  let messagePreflightRuntimePromise;
175
175
  async function loadMessagePreflightRuntime() {
176
- messagePreflightRuntimePromise ??= import("./message-handler.preflight-NWBbCKig.js");
176
+ messagePreflightRuntimePromise ??= import("./message-handler.preflight-BC8QmsWW.js");
177
177
  return await messagePreflightRuntimePromise;
178
178
  }
179
179
  function isNonEmptyString(value) {
@@ -348,7 +348,7 @@ function createDiscordMessageHandler(params) {
348
348
  }
349
349
  },
350
350
  onError: (err) => {
351
- params.runtime.error?.(danger(`discord debounce flush failed: ${String(err)}`));
351
+ params.runtime.error(danger(`discord debounce flush failed: ${String(err)}`));
352
352
  }
353
353
  });
354
354
  const handler = async (data, client, options) => {
@@ -371,7 +371,7 @@ function createDiscordMessageHandler(params) {
371
371
  replayKey: replayKey ?? void 0
372
372
  });
373
373
  } catch (err) {
374
- params.runtime.error?.(danger(`handler failed: ${String(err)}`));
374
+ params.runtime.error(danger(`handler failed: ${String(err)}`));
375
375
  }
376
376
  };
377
377
  handler.deactivate = messageRunQueue.deactivate;
@@ -1,12 +1,12 @@
1
- import { c as discord_exports, k as Message, mt as getChannelMessage } from "./send.receipt-zNKgqYqU.js";
1
+ import { c as discord_exports, k as Message, mt as getChannelMessage } from "./send.receipt-Bo_43DQZ.js";
2
2
  import { o as resolveDefaultDiscordAccountId } from "./accounts-dXTfmnSZ.js";
3
3
  import { S as resolveTimestampMs, _ as resolveGroupDmAllow, a as normalizeDiscordSlug, b as formatDiscordUserTag, c as resolveDiscordChannelConfigWithFallback, d as resolveDiscordGuildEntry, f as resolveDiscordMemberAccessState, g as resolveDiscordShouldRequireMention, i as normalizeDiscordDisplaySlug, n as isDiscordGroupAllowedByPolicy, x as resolveDiscordSystemLocation } from "./allow-list-BnkWtVpA.js";
4
- import { t as resolveDiscordConversationIdentity } from "./conversation-identity-DbJP9mrG.js";
4
+ import { t as resolveDiscordConversationIdentity } from "./conversation-identity-Dugx5WfH.js";
5
5
  import { l as isRecentlyUnboundThreadWebhookMessage } from "./thread-bindings.state-BsOnj5NX.js";
6
- import { d as resolveDiscordChannelNameSafe, u as resolveDiscordChannelInfoSafe } from "./thread-bindings.discord-api-Deuhxjj4.js";
7
- import "./thread-bindings-Bx9iaVSx.js";
8
- import { D as resolveDiscordTextCommandAccess, E as resolveDiscordDmCommandAccess, _ as resolveDiscordEffectiveRoute, g as resolveDiscordConversationRoute, h as buildDiscordRoutePeer, v as shouldIgnoreStaleDiscordRouteBinding, y as handleDiscordDmCommandDecision } from "./provider-CoyiVUd5.js";
9
- import { d as resolveDiscordMessageChannelId, l as resolveDiscordMessageStickers, o as resolveMediaList, r as resolveDiscordMessageText, u as resolveDiscordChannelInfo } from "./message-utils-uONSGxcw.js";
6
+ import { d as resolveDiscordChannelNameSafe, u as resolveDiscordChannelInfoSafe } from "./thread-bindings.discord-api-JrJXT7L0.js";
7
+ import "./thread-bindings-Cm3GqlNC.js";
8
+ import { D as resolveDiscordTextCommandAccess, E as resolveDiscordDmCommandAccess, _ as resolveDiscordEffectiveRoute, g as resolveDiscordConversationRoute, h as buildDiscordRoutePeer, v as shouldIgnoreStaleDiscordRouteBinding, y as handleDiscordDmCommandDecision } from "./provider-DIVQuJTw.js";
9
+ import { d as resolveDiscordMessageChannelId, l as resolveDiscordMessageStickers, o as resolveMediaList, r as resolveDiscordMessageText, u as resolveDiscordChannelInfo } from "./message-utils-BlvuUPP4.js";
10
10
  import { n as resolveDiscordWebhookId, t as resolveDiscordSenderIdentity } from "./sender-identity-BFp5w0F8.js";
11
11
  import { normalizeOptionalString, readStringValue } from "openclaw/plugin-sdk/string-coerce-runtime";
12
12
  import { getChildLogger, logVerbose, shouldLogVerbose } from "openclaw/plugin-sdk/runtime-env";
@@ -28,7 +28,7 @@ async function loadConversationRuntime$1() {
28
28
  return await conversationRuntimePromise$1;
29
29
  }
30
30
  async function loadDiscordSendRuntime() {
31
- discordSendRuntimePromise ??= import("./send-BBY2mPUE.js").then((n) => n.t);
31
+ discordSendRuntimePromise ??= import("./send-3r8QQkTY.js").then((n) => n.t);
32
32
  return await discordSendRuntimePromise;
33
33
  }
34
34
  async function resolveDiscordDmPreflightAccess(params) {
@@ -423,7 +423,7 @@ let preflightAudioRuntimePromise;
423
423
  let systemEventsRuntimePromise;
424
424
  let discordThreadingRuntimePromise;
425
425
  async function loadPluralKitRuntime() {
426
- pluralkitRuntimePromise ??= import("./pluralkit-D5BSur8g.js").then((n) => n.n);
426
+ pluralkitRuntimePromise ??= import("./pluralkit-Cq_PUr06.js").then((n) => n.n);
427
427
  return await pluralkitRuntimePromise;
428
428
  }
429
429
  async function loadPreflightAudioRuntime() {
@@ -431,11 +431,11 @@ async function loadPreflightAudioRuntime() {
431
431
  return await preflightAudioRuntimePromise;
432
432
  }
433
433
  async function loadSystemEventsRuntime() {
434
- systemEventsRuntimePromise ??= import("./system-events-BZyO1kxg.js");
434
+ systemEventsRuntimePromise ??= import("./system-events-DV85gUxb.js");
435
435
  return await systemEventsRuntimePromise;
436
436
  }
437
437
  async function loadDiscordThreadingRuntime() {
438
- discordThreadingRuntimePromise ??= import("./provider-CoyiVUd5.js").then((n) => n.x);
438
+ discordThreadingRuntimePromise ??= import("./provider-DIVQuJTw.js").then((n) => n.x);
439
439
  return await discordThreadingRuntimePromise;
440
440
  }
441
441
  function isPreflightAborted(abortSignal) {