@openclaw/discord 2026.10.5-beta.4 → 2026.10.6

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 (51) hide show
  1. package/dist/.setup/{approval-handler.runtime-D7FoZSn0.mjs → approval-handler.runtime-CMaAL3nb.mjs} +2 -2
  2. package/dist/.setup/{audit-zSawfbsN.mjs → audit-Bpu7xst9.mjs} +2 -2
  3. package/dist/.setup/{channel-DI7DMzu0.mjs → channel-1Z1mnB_P.mjs} +9 -9
  4. package/dist/.setup/{channel.setup-DdFVN1mr.mjs → channel.setup-B3KEh05g.mjs} +1 -1
  5. package/dist/.setup/{command-owners-D78sAoOz.mjs → command-owners-C7rUdqUX.mjs} +1 -1
  6. package/dist/.setup/{conversation-binding-route-DTjCBx-O.mjs → conversation-binding-route-Dhxicw2Z.mjs} +1 -1
  7. package/dist/.setup/{doctor-DSrNJ7m2.mjs → doctor-9Ka20lDD.mjs} +2 -2
  8. package/dist/.setup/{handle-action-CXH1h1tq.mjs → handle-action-B4l4tVxj.mjs} +3 -3
  9. package/dist/.setup/{handle-action.guild-admin-CHKW6PIs.mjs → handle-action.guild-admin-CdwwzmP_.mjs} +2 -2
  10. package/dist/.setup/{message-handler-Ii_etru1.mjs → message-handler-BbwzASGH.mjs} +4 -4
  11. package/dist/.setup/{message-handler.preflight-C7YuSRl_.mjs → message-handler.preflight-CdJ-nZdG.mjs} +6 -6
  12. package/dist/.setup/{message-handler.preflight-pluralkit-C3iAG--b.mjs → message-handler.preflight-pluralkit-CfRsEwg4.mjs} +2 -2
  13. package/dist/.setup/{message-handler.process-ClgWYH6o.mjs → message-handler.process-DOszdJgB.mjs} +8 -8
  14. package/dist/.setup/{outbound-adapter-D8OOIuKn.mjs → outbound-adapter-D1hxbwq3.mjs} +4 -4
  15. package/dist/.setup/{outbound-session-route-B0Hpwn3Q.mjs → outbound-session-route-CM6i691P.mjs} +3 -3
  16. package/dist/.setup/{provider-D9EzOfG8.mjs → provider-B9drnVwM.mjs} +9 -9
  17. package/dist/.setup/{provider-session.runtime-CsnRvddI.mjs → provider-session.runtime-1LmRZB68.mjs} +3 -3
  18. package/dist/.setup/provider.runtime-D2zD5EbM.mjs +1 -0
  19. package/dist/.setup/{realtime-session.runtime-CxGBk8H-.mjs → realtime-session.runtime-DcPHqGQM.mjs} +17 -6
  20. package/dist/.setup/{runtime-CRTkKU1G.mjs → runtime-C665qrc0.mjs} +3 -3
  21. package/dist/.setup/{send-DbILKgcm.mjs → send-DXma62sY.mjs} +1 -1
  22. package/dist/.setup/{send.components-FxOS3CeP.mjs → send.components-DdUmsN5C.mjs} +1 -1
  23. package/dist/.setup/{send.outbound-_jx4Xpd3.mjs → send.outbound-D_ctMh-S.mjs} +7 -1
  24. package/dist/.setup/setup-plugin-api-BFl2FljJ.mjs +2 -0
  25. package/dist/.setup/{shared-CestGDpq.mjs → shared-C027f-lL.mjs} +1 -1
  26. package/dist/.setup/{subagent-hooks-CME7dSGf.mjs → subagent-hooks-D2QDvcXg.mjs} +1 -1
  27. package/dist/.setup/{thread-bindings-0hPTSK14.mjs → thread-bindings-Blhv7XV8.mjs} +1 -1
  28. package/dist/.setup/{thread-bindings.manager-CdNa6UIs.mjs → thread-bindings.manager-Cqml5pUh.mjs} +2 -2
  29. package/dist/.setup/{threading-BKe3E3tp.mjs → threading-BWz5lW0p.mjs} +1 -1
  30. package/dist/.setup/{transcripts-source-0qQYVu2H.mjs → transcripts-source-EMrQb132.mjs} +1 -1
  31. package/dist/.setup/{voice-runtime-QlZJ4sHv.mjs → voice-runtime-CI7JBfeA.mjs} +36 -11
  32. package/dist/action-runtime-api.js +1 -2
  33. package/dist/activities-api.js +1 -1
  34. package/dist/api.js +6 -6
  35. package/dist/channel-config-api.js +1 -2
  36. package/dist/channel-plugin-api.js +1 -2
  37. package/dist/contract-api.js +1 -2
  38. package/dist/runtime-api.js +12 -12
  39. package/dist/runtime-setter-api.js +1 -2
  40. package/dist/secret-contract-api.js +1 -2
  41. package/dist/security-audit-contract-api.js +1 -2
  42. package/dist/security-contract-api.js +1 -2
  43. package/dist/session-key-api.js +1 -2
  44. package/dist/setup-entry.js +1 -1
  45. package/dist/setup-plugin-api.js +1 -2
  46. package/dist/subagent-hooks-api.js +1 -1
  47. package/dist/thread-binding-api.js +1 -2
  48. package/dist/transcripts-source-api.js +1 -1
  49. package/package.json +4 -4
  50. package/dist/.setup/provider.runtime-BQVcM7Pg.mjs +0 -2
  51. package/dist/.setup/setup-plugin-api-xfOFmxHP.mjs +0 -3
@@ -2,8 +2,8 @@ import { D as createDiscordMessageNonce, N as createDiscordClient } from "./send
2
2
  import { D as Row, K as serializePayload, bt as stripUndefinedFields, j as TextDisplay, k as Separator, lt as deleteChannelMessage, nt as createUserDmChannel, st as createChannelMessage, ut as editChannelMessage, x as Container, y as Button } from "./discord-BGqgx-yd.mjs";
3
3
  import { y as findGraphemeChunkEnd } from "./send.receipt-BAlzXd8e.mjs";
4
4
  import { s as buildExecApprovalCustomId } from "./components-HN9052L1.mjs";
5
- import { D as isDiscordExecApprovalClientEnabled, c as formatDiscordApprovalDisplayValue, s as DISCORD_APPROVAL_ALLOWED_MENTIONS } from "./outbound-session-route-B0Hpwn3Q.mjs";
6
- import { a as shouldHandleDiscordApprovalRequest } from "./channel-DI7DMzu0.mjs";
5
+ import { D as isDiscordExecApprovalClientEnabled, c as formatDiscordApprovalDisplayValue, s as DISCORD_APPROVAL_ALLOWED_MENTIONS } from "./outbound-session-route-CM6i691P.mjs";
6
+ import { a as shouldHandleDiscordApprovalRequest } from "./channel-1Z1mnB_P.mjs";
7
7
  import { t as discordApprovalMessageUpdates } from "./approval-message-updates-CIGByUcE.mjs";
8
8
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
9
9
  import { ButtonStyle } from "discord-api-types/v10";
@@ -1,8 +1,8 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.mjs";
2
2
  import { t as inspectDiscordAccount } from "./account-inspect-8cCu6uPG.mjs";
3
3
  import { b as fetchChannelPermissionsDiscord } from "./send.shared-CjQ4jbMA.mjs";
4
- import "./send-DbILKgcm.mjs";
5
- import { C as collectDiscordAuditChannelIdsForAccount, S as auditDiscordChannelPermissionsWithFetcher } from "./outbound-session-route-B0Hpwn3Q.mjs";
4
+ import "./send-DXma62sY.mjs";
5
+ import { C as collectDiscordAuditChannelIdsForAccount, S as auditDiscordChannelPermissionsWithFetcher } from "./outbound-session-route-CM6i691P.mjs";
6
6
  //#region extensions/discord/src/audit.ts
7
7
  var audit_exports = /* @__PURE__ */ __exportAll({
8
8
  auditDiscordChannelPermissions: () => auditDiscordChannelPermissions,
@@ -4,11 +4,11 @@ import { d as normalizeDiscordMessagingTarget, l as looksLikeDiscordTargetId, u
4
4
  import { t as parseDiscordTarget } from "./target-parsing-C-HyNxcE.mjs";
5
5
  import { l as withAbortTimeout } from "./timeouts-CuNARfyw.mjs";
6
6
  import { t as getDiscordRuntime } from "./runtime-DgnVQ7zW.mjs";
7
- import { D as isDiscordExecApprovalClientEnabled, E as isDiscordExecApprovalApprover, O as shouldSuppressLocalDiscordExecApprovalPrompt, T as getDiscordExecApprovalApprovers, _ as resolveDiscordRuntimeBindingConversationId, f as resolveDiscordConversationRoute, t as resolveDiscordOutboundSessionRoute, v as discordMessageActions, w as resolveRequiredDiscordChannelPermissions } from "./outbound-session-route-B0Hpwn3Q.mjs";
8
- import { a as normalizeDiscordAcpConversationId, c as resolveDiscordInboundConversation, i as matchDiscordAcpConversation, n as discordOutbound, o as resolveDiscordAttachedOutboundTarget, r as buildDiscordCrossContextPresentation, s as resolveDiscordCommandConversation } from "./outbound-adapter-D8OOIuKn.mjs";
7
+ import { D as isDiscordExecApprovalClientEnabled, E as isDiscordExecApprovalApprover, O as shouldSuppressLocalDiscordExecApprovalPrompt, T as getDiscordExecApprovalApprovers, _ as resolveDiscordRuntimeBindingConversationId, f as resolveDiscordConversationRoute, t as resolveDiscordOutboundSessionRoute, v as discordMessageActions, w as resolveRequiredDiscordChannelPermissions } from "./outbound-session-route-CM6i691P.mjs";
8
+ import { a as normalizeDiscordAcpConversationId, c as resolveDiscordInboundConversation, i as matchDiscordAcpConversation, n as discordOutbound, o as resolveDiscordAttachedOutboundTarget, r as buildDiscordCrossContextPresentation, s as resolveDiscordCommandConversation } from "./outbound-adapter-D1hxbwq3.mjs";
9
9
  import { r as openDiscordCommandDeployHashStore } from "./command-deploy-store-DFkBTViB.mjs";
10
- import { t as resolveDiscordConversationBindingRoute } from "./conversation-binding-route-DTjCBx-O.mjs";
11
- import { a as discordSecurityAdapter, i as discordSetupContract, n as discordConfigAdapter, t as createDiscordPluginBase } from "./shared-CestGDpq.mjs";
10
+ import { t as resolveDiscordConversationBindingRoute } from "./conversation-binding-route-Dhxicw2Z.mjs";
11
+ import { a as discordSecurityAdapter, i as discordSetupContract, n as discordConfigAdapter, t as createDiscordPluginBase } from "./shared-C027f-lL.mjs";
12
12
  import { t as normalizeExplicitDiscordSessionKey } from "./session-key-normalization-CCHGNSQw.mjs";
13
13
  import { i as setThreadBindingMaxAgeBySessionKeyAsync, n as setThreadBindingIdleTimeoutBySessionKeyAsync, r as setThreadBindingMaxAgeBySessionKey, t as setThreadBindingIdleTimeoutBySessionKey } from "./thread-bindings.session-updates-DGSljVf6.mjs";
14
14
  import { t as defaultTopLevelPlacement } from "./thread-binding-api-BDZJD4na.mjs";
@@ -171,7 +171,7 @@ function createDiscordApprovalCapability() {
171
171
  accountId
172
172
  }),
173
173
  shouldHandle: shouldHandleCapabilityRequest,
174
- load: async () => (await import("./approval-handler.runtime-D7FoZSn0.mjs")).discordApprovalNativeRuntime
174
+ load: async () => (await import("./approval-handler.runtime-CMaAL3nb.mjs")).discordApprovalNativeRuntime
175
175
  })
176
176
  });
177
177
  }
@@ -185,9 +185,9 @@ function getDiscordApprovalCapability() {
185
185
  const loadDiscordDirectoryConfigModule = createLazyRuntimeModule(() => import("./directory-config-3iVub-3m.mjs").then((n) => n.t));
186
186
  const loadDiscordResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels-UdT38DzU.mjs").then((n) => n.n));
187
187
  const loadDiscordResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-DnCsrXZ_.mjs").then((n) => n.n));
188
- const loadDiscordThreadBindingsManagerModule = createLazyRuntimeModule(() => import("./thread-bindings.manager-CdNa6UIs.mjs").then((n) => n.r));
188
+ const loadDiscordThreadBindingsManagerModule = createLazyRuntimeModule(() => import("./thread-bindings.manager-Cqml5pUh.mjs").then((n) => n.r));
189
189
  const loadDiscordTargetResolverModule = createLazyRuntimeModule(() => import("./target-resolver-Bse8fuTi.mjs").then((n) => n.r));
190
- const loadDiscordProviderRuntime = createLazyRuntimeModule(() => import("./provider.runtime-BQVcM7Pg.mjs"));
190
+ const loadDiscordProviderRuntime = createLazyRuntimeModule(() => import("./provider.runtime-D2zD5EbM.mjs"));
191
191
  const loadDiscordProbeRuntime = createLazyRuntimeModule(() => import("./probe-D3P1x4aN.mjs").then((n) => n.o));
192
192
  async function probeDiscordStatusAccount(params) {
193
193
  const startedAtMs = Date.now();
@@ -195,8 +195,8 @@ async function probeDiscordStatusAccount(params) {
195
195
  const remainingMs = Math.max(1, params.timeoutMs - Math.max(0, Date.now() - startedAtMs));
196
196
  return await runtime.probeDiscord(params.token, remainingMs, { includeApplication: true });
197
197
  }
198
- const loadDiscordAuditModule = createLazyRuntimeModule(() => import("./audit-zSawfbsN.mjs").then((n) => n.n));
199
- const loadDiscordSendModule = createLazyRuntimeModule(() => import("./send-DbILKgcm.mjs").then((n) => n.t));
198
+ const loadDiscordAuditModule = createLazyRuntimeModule(() => import("./audit-Bpu7xst9.mjs").then((n) => n.n));
199
+ const loadDiscordSendModule = createLazyRuntimeModule(() => import("./send-DXma62sY.mjs").then((n) => n.t));
200
200
  const loadDiscordDirectoryLiveModule = createLazyRuntimeModule(() => import("./directory-live-DLygQVtW.mjs").then((n) => n.t));
201
201
  //#endregion
202
202
  //#region extensions/discord/src/conversation-route-owner.ts
@@ -1,5 +1,5 @@
1
1
  import { c as resolveDefaultDiscordAccountId, g as resolveDiscordToken, n as inspectDiscordAccountConfig, s as mergeDiscordAccountConfig, u as resolveDiscordAccountAllowFrom } from "./accounts-ljrzXBJi.mjs";
2
- import { i as discordSetupContract, t as createDiscordPluginBase } from "./shared-CestGDpq.mjs";
2
+ import { i as discordSetupContract, t as createDiscordPluginBase } from "./shared-C027f-lL.mjs";
3
3
  import { t as resolveDiscordChannelAllowlist } from "./resolve-channels-UdT38DzU.mjs";
4
4
  import { t as resolveDiscordUserAllowlist } from "./resolve-users-DnCsrXZ_.mjs";
5
5
  import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id";
@@ -1,7 +1,7 @@
1
1
  //#region extensions/discord/src/command-owners.ts
2
2
  function resolveDiscordCommandOwnerEntries(cfg) {
3
3
  const entries = (cfg.commands?.ownerAllowFrom ?? []).map((entry) => String(entry).trim()).filter((entry) => entry && (/^(discord|user|pk):/i.test(entry) || !entry.includes(":")));
4
- return entries.length > 0 ? entries.filter((entry) => !/^discord:user:/i.test(entry)) : void 0;
4
+ return entries.length > 0 ? entries : void 0;
5
5
  }
6
6
  function resolveDiscordCommandOwnerAllowFrom(cfg) {
7
7
  return resolveDiscordCommandOwnerEntries(cfg)?.map((entry) => entry.replace(/^discord:/i, "").trim()).filter(Boolean);
@@ -1,4 +1,4 @@
1
- import { m as shouldIgnoreStaleDiscordRouteBinding } from "./outbound-session-route-B0Hpwn3Q.mjs";
1
+ import { m as shouldIgnoreStaleDiscordRouteBinding } from "./outbound-session-route-CM6i691P.mjs";
2
2
  import { logVerbose } from "openclaw/plugin-sdk/runtime-env";
3
3
  import { resolveConfiguredBindingRoute, resolveRuntimeConversationBindingRoute } from "openclaw/plugin-sdk/conversation-binding-runtime";
4
4
  //#region extensions/discord/src/monitor/conversation-binding-route.ts
@@ -1,10 +1,10 @@
1
1
  import { c as resolveDefaultDiscordAccountId } from "./accounts-ljrzXBJi.mjs";
2
2
  import { t as inspectDiscordAccount } from "./account-inspect-8cCu6uPG.mjs";
3
- import { r as DISCORD_LEGACY_CONFIG_RULES } from "./shared-CestGDpq.mjs";
3
+ import { r as DISCORD_LEGACY_CONFIG_RULES } from "./shared-C027f-lL.mjs";
4
4
  import { t as runtime_doctor_migrations_exports } from "./runtime-doctor-migrations-BPV-R4G9.mjs";
5
5
  import { n as normalizeCompatibilityConfig } from "./doctor-contract-Bwv8EuQ_.mjs";
6
6
  import { t as isDiscordMutableAllowEntry } from "./security-doctor-nGgPm65L.mjs";
7
- import { n as discordVoiceTranscriptsSourceProvider } from "./transcripts-source-0qQYVu2H.mjs";
7
+ import { n as discordVoiceTranscriptsSourceProvider } from "./transcripts-source-EMrQb132.mjs";
8
8
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
9
9
  import { expectDefined } from "openclaw/plugin-sdk/expect-runtime";
10
10
  //#region extensions/discord/src/doctor.ts
@@ -2,11 +2,11 @@ import { W as withDiscordRequestAuthority } from "./discord-BGqgx-yd.mjs";
2
2
  import { u as matchesDiscordToolContextTarget } from "./send.receipt-BAlzXd8e.mjs";
3
3
  import { n as resolveDiscordChannelId, t as parseDiscordTarget } from "./target-parsing-C-HyNxcE.mjs";
4
4
  import "./targets-DZJjkzwv.mjs";
5
- import { a as readDiscordAutoArchiveDurationParam, t as handleDiscordAction } from "./runtime-CRTkKU1G.mjs";
5
+ import { a as readDiscordAutoArchiveDurationParam, t as handleDiscordAction } from "./runtime-C665qrc0.mjs";
6
6
  import { i as buildDiscordPresentationComponents, m as coerceDiscordComponentParam, r as buildDiscordInteractiveComponents } from "./components-HN9052L1.mjs";
7
7
  import "../action-runtime-api.js";
8
- import { b as discordInboundEventDelivery, i as isDiscordComponentSpecWithinMessageLimit, n as DISCORD_PRESENTATION_CAPABILITIES } from "./outbound-session-route-B0Hpwn3Q.mjs";
9
- import { t as tryHandleDiscordMessageActionGuildAdmin } from "./handle-action.guild-admin-CHKW6PIs.mjs";
8
+ import { b as discordInboundEventDelivery, i as isDiscordComponentSpecWithinMessageLimit, n as DISCORD_PRESENTATION_CAPABILITIES } from "./outbound-session-route-CM6i691P.mjs";
9
+ import { t as tryHandleDiscordMessageActionGuildAdmin } from "./handle-action.guild-admin-CdwwzmP_.mjs";
10
10
  import { n as notifyDiscordActiveTurnThreadCreated, r as notifyDiscordActiveTurnThreadReplyDelivered } from "./active-turn-thread-route-C4tp9noA.mjs";
11
11
  import { asOptionalRecord, normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/string-coerce-runtime";
12
12
  import { resolveReactionMessageId } from "openclaw/plugin-sdk/channel-actions";
@@ -1,6 +1,6 @@
1
- import { c as readDiscordChannelMoveParams, n as isDiscordModerationAction, o as readDiscordChannelCreateParams, r as readDiscordModerationCommand, s as readDiscordChannelEditParams, t as handleDiscordAction } from "./runtime-CRTkKU1G.mjs";
1
+ import { c as readDiscordChannelMoveParams, n as isDiscordModerationAction, o as readDiscordChannelCreateParams, r as readDiscordModerationCommand, s as readDiscordChannelEditParams, t as handleDiscordAction } from "./runtime-C665qrc0.mjs";
2
2
  import "../action-runtime-api.js";
3
- import { y as isTrustedRequesterGuildAdminAction } from "./outbound-session-route-B0Hpwn3Q.mjs";
3
+ import { y as isTrustedRequesterGuildAdminAction } from "./outbound-session-route-CM6i691P.mjs";
4
4
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  import { readBooleanParam } from "openclaw/plugin-sdk/boolean-param";
6
6
  import { readNonNegativeIntegerParam, readPositiveIntegerParam, readStringArrayParam, readStringParam } from "openclaw/plugin-sdk/param-readers";
@@ -1,7 +1,7 @@
1
1
  import { D as getDiscordEndpointRuntime, k as resolveDiscordEndpointMediaGuard } from "./allow-list-B_ToXtew.mjs";
2
2
  import { t as getDiscordRuntime } from "./runtime-DgnVQ7zW.mjs";
3
- import { D as createDiscordLivePolicyReader, O as mapGatewayDispatchData } from "./provider-D9EzOfG8.mjs";
4
- import { E as hasDiscordMessageStickers, T as resolveDiscordCdnPolicy, b as resolveDiscordMessageText, j as resolveDiscordMessageChannelId, k as resolveDiscordReferencedReplyMessageId } from "./transcripts-source-0qQYVu2H.mjs";
3
+ import { D as createDiscordLivePolicyReader, O as mapGatewayDispatchData } from "./provider-B9drnVwM.mjs";
4
+ import { E as hasDiscordMessageStickers, T as resolveDiscordCdnPolicy, b as resolveDiscordMessageText, j as resolveDiscordMessageChannelId, k as resolveDiscordReferencedReplyMessageId } from "./transcripts-source-EMrQb132.mjs";
5
5
  import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
6
6
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
7
7
  import { danger } from "openclaw/plugin-sdk/runtime-env";
@@ -195,7 +195,7 @@ function createDiscordAvatarResolver() {
195
195
  }
196
196
  //#endregion
197
197
  //#region extensions/discord/src/monitor/message-run-queue.ts
198
- const loadMessageProcessRuntime = createLazyRuntimeModule(() => import("./message-handler.process-ClgWYH6o.mjs"));
198
+ const loadMessageProcessRuntime = createLazyRuntimeModule(() => import("./message-handler.process-DOszdJgB.mjs"));
199
199
  async function processDiscordQueuedMessage(params) {
200
200
  const abortSignal = params.job.context.abortSignal && params.lifecycleSignal ? AbortSignal.any([params.job.context.abortSignal, params.lifecycleSignal]) : params.job.context.abortSignal ?? params.lifecycleSignal;
201
201
  try {
@@ -279,7 +279,7 @@ function createDiscordMessageRunQueue(params) {
279
279
  }
280
280
  //#endregion
281
281
  //#region extensions/discord/src/monitor/message-dispatcher.ts
282
- const loadMessagePreflightRuntime = createLazyRuntimeModule(() => import("./message-handler.preflight-C7YuSRl_.mjs"));
282
+ const loadMessagePreflightRuntime = createLazyRuntimeModule(() => import("./message-handler.preflight-CdJ-nZdG.mjs"));
283
283
  function createDiscordMessageDispatcher(params) {
284
284
  const readPolicy = params.readPolicy ?? createDiscordLivePolicyReader({
285
285
  ...params,
@@ -2,13 +2,13 @@ import { c as resolveDefaultDiscordAccountId } from "./accounts-ljrzXBJi.mjs";
2
2
  import { C as resolveDiscordSystemLocation, S as formatDiscordUserTag, a as normalizeDiscordDisplaySlug, f as resolveDiscordGuildEntry, h as resolveDiscordMentionPolicy, l as resolveDiscordChannelConfigWithFallback, o as normalizeDiscordSlug, p as resolveDiscordMemberAccessState, w as resolveTimestampMs } from "./allow-list-B_ToXtew.mjs";
3
3
  import { Z as Message, ft as getChannelMessage, t as discord_exports } from "./discord-BGqgx-yd.mjs";
4
4
  import { n as DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, t as DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS } from "./timeouts-CuNARfyw.mjs";
5
- import { _ as resolveDiscordRuntimeBindingConversationId, f as resolveDiscordConversationRoute, h as resolveDiscordConversationIdentity, p as resolveDiscordEffectiveRoute, u as buildDiscordRoutePeer } from "./outbound-session-route-B0Hpwn3Q.mjs";
6
- import { t as resolveDiscordConversationBindingRoute } from "./conversation-binding-route-DTjCBx-O.mjs";
5
+ import { _ as resolveDiscordRuntimeBindingConversationId, f as resolveDiscordConversationRoute, h as resolveDiscordConversationIdentity, p as resolveDiscordEffectiveRoute, u as buildDiscordRoutePeer } from "./outbound-session-route-CM6i691P.mjs";
6
+ import { t as resolveDiscordConversationBindingRoute } from "./conversation-binding-route-Dhxicw2Z.mjs";
7
7
  import { n as resolveDiscordChannelInfoSafe, r as resolveDiscordChannelNameSafe } from "./channel-access-DasWY_OV.mjs";
8
- import { A as resolveDiscordDmCommandAccess, E as handleDiscordDmCommandDecision, j as resolveDiscordTextCommandAccess, n as resolveDiscordPreflightChannelAccess } from "./provider-D9EzOfG8.mjs";
9
- import { A as resolveDiscordChannelInfo, C as resolveMediaList, D as resolveDiscordMessageStickers, O as resolveDiscordReferencedReplyMessage, S as resolveForwardedMediaList, _ as resolveDiscordMessageBatch, b as resolveDiscordMessageText, j as resolveDiscordMessageChannelId, v as resolveDiscordMessageHistoryText, y as resolveDiscordMessageMentionDocuments } from "./transcripts-source-0qQYVu2H.mjs";
8
+ import { A as resolveDiscordDmCommandAccess, E as handleDiscordDmCommandDecision, j as resolveDiscordTextCommandAccess, n as resolveDiscordPreflightChannelAccess } from "./provider-B9drnVwM.mjs";
9
+ import { A as resolveDiscordChannelInfo, C as resolveMediaList, D as resolveDiscordMessageStickers, O as resolveDiscordReferencedReplyMessage, S as resolveForwardedMediaList, _ as resolveDiscordMessageBatch, b as resolveDiscordMessageText, j as resolveDiscordMessageChannelId, v as resolveDiscordMessageHistoryText, y as resolveDiscordMessageMentionDocuments } from "./transcripts-source-EMrQb132.mjs";
10
10
  import { n as resolveDiscordWebhookId, t as resolveDiscordSenderIdentity } from "./sender-identity-BNBvGt1l.mjs";
11
- import { a as createDiscordHistorySenderProvenance, c as hasRawDiscordUserMention, d as matchesActiveDiscordMentionPatterns, f as resolveDiscordMentionState, i as loadSystemEventsRuntime, l as isBoundThreadBotSystemMessage, m as shouldIgnoreBoundThreadWebhookMessage, n as loadDiscordThreadingRuntime, p as resolveInjectedBoundThreadLookupRecord, r as loadPreflightAudioRuntime, s as resolveDiscordHistoryMediaIds, t as resolveDiscordPreflightPluralKitInfo, u as isDiscordThreadChannelMessage } from "./message-handler.preflight-pluralkit-C3iAG--b.mjs";
11
+ import { a as createDiscordHistorySenderProvenance, c as hasRawDiscordUserMention, d as matchesActiveDiscordMentionPatterns, f as resolveDiscordMentionState, i as loadSystemEventsRuntime, l as isBoundThreadBotSystemMessage, m as shouldIgnoreBoundThreadWebhookMessage, n as loadDiscordThreadingRuntime, p as resolveInjectedBoundThreadLookupRecord, r as loadPreflightAudioRuntime, s as resolveDiscordHistoryMediaIds, t as resolveDiscordPreflightPluralKitInfo, u as isDiscordThreadChannelMessage } from "./message-handler.preflight-pluralkit-CfRsEwg4.mjs";
12
12
  import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
13
13
  import { getChildLogger, logVerbose, shouldLogVerbose } from "openclaw/plugin-sdk/runtime-env";
14
14
  import { MessageReferenceType, MessageType } from "discord-api-types/v10";
@@ -26,7 +26,7 @@ import { shouldHandleTextCommands } from "openclaw/plugin-sdk/command-surface";
26
26
  import { createChannelHistoryWindow } from "openclaw/plugin-sdk/reply-history";
27
27
  //#region extensions/discord/src/monitor/message-handler.dm-preflight.ts
28
28
  const loadConversationRuntime$1 = createLazyRuntimeModule(() => import("openclaw/plugin-sdk/conversation-binding-runtime"));
29
- const loadDiscordSendRuntime = createLazyRuntimeModule(() => import("./send-DbILKgcm.mjs").then((n) => n.t));
29
+ const loadDiscordSendRuntime = createLazyRuntimeModule(() => import("./send-DXma62sY.mjs").then((n) => n.t));
30
30
  async function resolveDiscordDmPreflightAccess(params) {
31
31
  if (params.dmPolicy === "disabled") {
32
32
  logVerbose("discord: drop dm (dmPolicy: disabled)");
@@ -1,5 +1,5 @@
1
1
  import { A as isDiscordThreadChannelType } from "./allow-list-B_ToXtew.mjs";
2
- import { D as resolveDiscordMessageStickers } from "./transcripts-source-0qQYVu2H.mjs";
2
+ import { D as resolveDiscordMessageStickers } from "./transcripts-source-EMrQb132.mjs";
3
3
  import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
4
4
  import { logVerbose } from "openclaw/plugin-sdk/runtime-env";
5
5
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -116,7 +116,7 @@ function resolveDiscordHistoryMediaIds(message) {
116
116
  const loadPluralKitRuntime = createLazyRuntimeModule(() => import("./pluralkit-B64dfq_j.mjs").then((n) => n.n));
117
117
  const loadPreflightAudioRuntime = createLazyRuntimeModule(() => import("./preflight-audio-wWgsZG5F.mjs"));
118
118
  const loadSystemEventsRuntime = createLazyRuntimeModule(() => import("./system-events-BwwSDCw4.mjs"));
119
- const loadDiscordThreadingRuntime = createLazyRuntimeModule(() => import("./threading-BKe3E3tp.mjs").then((n) => n.t));
119
+ const loadDiscordThreadingRuntime = createLazyRuntimeModule(() => import("./threading-BWz5lW0p.mjs").then((n) => n.t));
120
120
  //#endregion
121
121
  //#region extensions/discord/src/monitor/message-handler.preflight-pluralkit.ts
122
122
  async function resolveDiscordPreflightPluralKitInfo(params) {
@@ -4,18 +4,18 @@ import { F as createDiscordRuntimeAccountContext, O as resolveDiscordMessageFlag
4
4
  import { U as captureDiscordRequestAuthority, W as withDiscordRequestAuthority, Z as Message, _t as getGuildMember, lt as deleteChannelMessage, t as discord_exports, ut as editChannelMessage } from "./discord-BGqgx-yd.mjs";
5
5
  import { v as chunkDiscordTextWithMode } from "./send.receipt-BAlzXd8e.mjs";
6
6
  import { n as resolveDiscordChannelId } from "./target-parsing-C-HyNxcE.mjs";
7
- import { a as removeReactionDiscord, r as reactMessageDiscord } from "./send-DbILKgcm.mjs";
8
- import { a as discordTextHasBroadcastMention } from "./send.outbound-_jx4Xpd3.mjs";
7
+ import { a as removeReactionDiscord, r as reactMessageDiscord } from "./send-DXma62sY.mjs";
8
+ import { o as discordTextHasBroadcastMention } from "./send.outbound-D_ctMh-S.mjs";
9
9
  import { n as DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, t as DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS } from "./timeouts-CuNARfyw.mjs";
10
10
  import "./targets-DZJjkzwv.mjs";
11
- import { b as discordInboundEventDelivery, h as resolveDiscordConversationIdentity, u as buildDiscordRoutePeer } from "./outbound-session-route-B0Hpwn3Q.mjs";
12
- import { t as DISCORD_TEXT_CHUNK_LIMIT } from "./outbound-adapter-D8OOIuKn.mjs";
13
- import { T as createDiscordSupplementalContextAccessChecker, c as formatDiscordReplySkip, d as buildGuildLabel, f as resolveReplyContext, l as sanitizeDiscordFrontChannelReplyPayloads, o as deliverDiscordReply, s as formatDiscordReplyDeliveryFailure, u as buildDirectLabel, w as buildDiscordInboundAccessContext } from "./provider-D9EzOfG8.mjs";
14
- import { D as resolveDiscordMessageStickers, b as resolveDiscordMessageText, h as resolveDiscordThreadStarter, k as resolveDiscordReferencedReplyMessageId, v as resolveDiscordMessageHistoryText, w as resolveReferencedReplyMediaList, x as formatDiscordMediaText } from "./transcripts-source-0qQYVu2H.mjs";
11
+ import { b as discordInboundEventDelivery, h as resolveDiscordConversationIdentity, u as buildDiscordRoutePeer } from "./outbound-session-route-CM6i691P.mjs";
12
+ import { t as DISCORD_TEXT_CHUNK_LIMIT } from "./outbound-adapter-D1hxbwq3.mjs";
13
+ import { T as createDiscordSupplementalContextAccessChecker, c as formatDiscordReplySkip, d as buildGuildLabel, f as resolveReplyContext, l as sanitizeDiscordFrontChannelReplyPayloads, o as deliverDiscordReply, s as formatDiscordReplyDeliveryFailure, u as buildDirectLabel, w as buildDiscordInboundAccessContext } from "./provider-B9drnVwM.mjs";
14
+ import { D as resolveDiscordMessageStickers, b as resolveDiscordMessageText, h as resolveDiscordThreadStarter, k as resolveDiscordReferencedReplyMessageId, v as resolveDiscordMessageHistoryText, w as resolveReferencedReplyMediaList, x as formatDiscordMediaText } from "./transcripts-source-EMrQb132.mjs";
15
15
  import { n as resolveDiscordWebhookId, t as resolveDiscordSenderIdentity } from "./sender-identity-BNBvGt1l.mjs";
16
- import { n as resolveDiscordAutoThreadReplyPlan } from "./threading-BKe3E3tp.mjs";
16
+ import { n as resolveDiscordAutoThreadReplyPlan } from "./threading-BWz5lW0p.mjs";
17
17
  import { t as beginDiscordActiveTurnThreadRoute } from "./active-turn-thread-route-C4tp9noA.mjs";
18
- import { a as createDiscordHistorySenderProvenance, l as isBoundThreadBotSystemMessage, m as shouldIgnoreBoundThreadWebhookMessage, o as filterDiscordHistoryEntriesForContext, s as resolveDiscordHistoryMediaIds, t as resolveDiscordPreflightPluralKitInfo } from "./message-handler.preflight-pluralkit-C3iAG--b.mjs";
18
+ import { a as createDiscordHistorySenderProvenance, l as isBoundThreadBotSystemMessage, m as shouldIgnoreBoundThreadWebhookMessage, o as filterDiscordHistoryEntriesForContext, s as resolveDiscordHistoryMediaIds, t as resolveDiscordPreflightPluralKitInfo } from "./message-handler.preflight-pluralkit-CfRsEwg4.mjs";
19
19
  import { t as sendTyping } from "./typing-CNlSKY5S.mjs";
20
20
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
21
21
  import { danger, logVerbose, shouldLogVerbose, sleepWithAbort } from "openclaw/plugin-sdk/runtime-env";
@@ -1,7 +1,7 @@
1
1
  import { t as createDiscordActionGate } from "./accounts-ljrzXBJi.mjs";
2
2
  import { d as normalizeDiscordMessagingTarget, f as normalizeDiscordOutboundTarget, g as hasDiscordMessageCreateAmbiguity, i as toDiscordOutboundDeliveryResult, n as createDiscordSendReceiptFromResults, p as canFallbackDiscordWebhookSend, s as resolveDiscordReplyReference, t as createDiscordSendReceipt, v as chunkDiscordTextWithMode } from "./send.receipt-BAlzXd8e.mjs";
3
3
  import { t as parseDiscordTarget } from "./target-parsing-C-HyNxcE.mjs";
4
- import { a as resolveDiscordComponentSpec, b as discordInboundEventDelivery, c as formatDiscordApprovalDisplayValue, g as resolveDiscordCurrentConversationIdentity, n as DISCORD_PRESENTATION_CAPABILITIES, o as sendDiscordComponentMessageLazy, r as buildDiscordPresentationPayload, x as notifyDiscordInboundEventOutboundPayloadSuccess } from "./outbound-session-route-B0Hpwn3Q.mjs";
4
+ import { a as resolveDiscordComponentSpec, b as discordInboundEventDelivery, c as formatDiscordApprovalDisplayValue, g as resolveDiscordCurrentConversationIdentity, n as DISCORD_PRESENTATION_CAPABILITIES, o as sendDiscordComponentMessageLazy, r as buildDiscordPresentationPayload, x as notifyDiscordInboundEventOutboundPayloadSuccess } from "./outbound-session-route-CM6i691P.mjs";
5
5
  import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
6
6
  import { createSubsystemLogger } from "openclaw/plugin-sdk/runtime-env";
7
7
  import { asOptionalRecord, normalizeLowercaseStringOrEmpty, normalizeOptionalString, normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -137,7 +137,7 @@ function normalizeDiscordApprovalPayload(payload) {
137
137
  }
138
138
  //#endregion
139
139
  //#region extensions/discord/src/outbound-send-context.ts
140
- const loadDiscordSendRuntime = createLazyRuntimeModule(() => import("./send-DbILKgcm.mjs").then((n) => n.t));
140
+ const loadDiscordSendRuntime = createLazyRuntimeModule(() => import("./send-DXma62sY.mjs").then((n) => n.t));
141
141
  function resolveDiscordFormattingOptions(ctx) {
142
142
  const formatting = ctx.formatting;
143
143
  return {
@@ -333,8 +333,8 @@ async function sendDiscordOutboundPayload(params) {
333
333
  const DISCORD_TEXT_CHUNK_LIMIT = 2e3;
334
334
  const DISCORD_PRECHUNK_MAX_LINES = Number.MAX_SAFE_INTEGER;
335
335
  const log = createSubsystemLogger("discord/outbound");
336
- const loadDiscordThreadBindings = createLazyRuntimeModule(() => import("./thread-bindings-0hPTSK14.mjs").then((n) => n.i));
337
- const loadDiscordComponentSendRuntime = createLazyRuntimeModule(() => import("./send.components-FxOS3CeP.mjs").then((n) => n.i));
336
+ const loadDiscordThreadBindings = createLazyRuntimeModule(() => import("./thread-bindings-Blhv7XV8.mjs").then((n) => n.i));
337
+ const loadDiscordComponentSendRuntime = createLazyRuntimeModule(() => import("./send.components-DdUmsN5C.mjs").then((n) => n.i));
338
338
  function resolveDiscordDeliveryOptions(params) {
339
339
  return {
340
340
  onPlatformSendDispatch: params.onPlatformSendDispatch,
@@ -4,7 +4,7 @@ import { A as isDiscordThreadChannelType } from "./allow-list-B_ToXtew.mjs";
4
4
  import { d as normalizeDiscordMessagingTarget, u as matchesDiscordToolContextTarget } from "./send.receipt-BAlzXd8e.mjs";
5
5
  import { t as parseDiscordTarget } from "./target-parsing-C-HyNxcE.mjs";
6
6
  import { h as readDiscordComponentSpec, m as coerceDiscordComponentParam } from "./components-HN9052L1.mjs";
7
- import { n as resolveDiscordCommandOwnerEntries } from "./command-owners-D78sAoOz.mjs";
7
+ import { n as resolveDiscordCommandOwnerEntries } from "./command-owners-C7rUdqUX.mjs";
8
8
  import { createLazyRuntimeMethod, createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
9
9
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
10
10
  import { buildOutboundBaseSessionKey, deriveLastRoutePolicy, isAcpSessionKey, isSubagentSessionKey, parseAgentSessionKey, resolveAgentIdFromSessionKey, resolveAgentRoute } from "openclaw/plugin-sdk/routing";
@@ -221,7 +221,7 @@ function resolveDiscordThreadReplyTarget(args) {
221
221
  const target = threadId !== void 0 ? `channel:${threadId}` : normalizeOptionalString(args.channelId) ?? normalizeOptionalString(args.to) ?? normalizeOptionalString(args.target);
222
222
  return target ? normalizeDiscordMessagingTarget(target) : void 0;
223
223
  }
224
- const loadDiscordChannelActionsRuntime = createLazyRuntimeModule(() => import("./handle-action-CXH1h1tq.mjs"));
224
+ const loadDiscordChannelActionsRuntime = createLazyRuntimeModule(() => import("./handle-action-B4l4tVxj.mjs"));
225
225
  const discordActionGroups = [
226
226
  {
227
227
  gate: "polls",
@@ -642,7 +642,7 @@ const DISCORD_PRESENTATION_CAPABILITIES = {
642
642
  }
643
643
  }
644
644
  };
645
- const sendDiscordComponentMessageLazy = createLazyRuntimeMethod(createLazyRuntimeModule(() => import("./send.components-FxOS3CeP.mjs").then((n) => n.i)), (runtime) => runtime.sendDiscordComponentMessage);
645
+ const sendDiscordComponentMessageLazy = createLazyRuntimeMethod(createLazyRuntimeModule(() => import("./send.components-DdUmsN5C.mjs").then((n) => n.i)), (runtime) => runtime.sendDiscordComponentMessage);
646
646
  const loadDiscordSharedInteractive = createLazyRuntimeModule(() => import("./components-HN9052L1.mjs").then((n) => n.a));
647
647
  function addPayloadTextFallback(spec, payload) {
648
648
  return spec.text ? spec : {
@@ -5,22 +5,22 @@ import { i as setPresence, t as clearPresences } from "./presence-cache-DCeTsL73
5
5
  import { $ as BaseMessageInteractiveComponent, A as StringSelectMenu, D as Row, F as Plugin, G as hasDiscordV2Components, J as Command, P as Client, Q as User, R as RateLimitError, X as Guild, Y as CommandWithSubcommands, Z as Message, a as MessageCreateListener, c as PresenceUpdateListener, d as ThreadUpdateListener, h as Modal, i as InteractionCreateListener, j as TextDisplay, k as Separator, l as ReadyListener, n as GuildCreateListener, o as MessageReactionAddListener, r as GuildDeleteListener, s as MessageReactionRemoveListener, t as discord_exports, u as ThreadDeleteListener, x as Container, y as Button } from "./discord-BGqgx-yd.mjs";
6
6
  import { v as chunkDiscordTextWithMode } from "./send.receipt-BAlzXd8e.mjs";
7
7
  import { a as isDiscordRateLimitResponseBody, s as summarizeDiscordResponseBody } from "./api-CtmE1OUN.mjs";
8
- import { _ as readMessagesDiscord, s as sendVoiceMessageDiscord } from "./send-DbILKgcm.mjs";
9
- import { o as formatMention, t as sendMessageDiscord } from "./send.outbound-_jx4Xpd3.mjs";
8
+ import { _ as readMessagesDiscord, s as sendVoiceMessageDiscord } from "./send-DXma62sY.mjs";
9
+ import { s as formatMention, t as sendMessageDiscord } from "./send.outbound-D_ctMh-S.mjs";
10
10
  import { l as withAbortTimeout } from "./timeouts-CuNARfyw.mjs";
11
11
  import { C as parseDiscordActivityCustomIdForInteraction, D as parseDiscordModalCustomIdForInteraction, E as parseDiscordModalCustomId, O as decodeCustomIdComponent, T as parseDiscordComponentCustomIdForInteraction, c as parseExecApprovalData, d as buildDiscordComponentMessage, k as encodeCustomIdComponent, o as parseDiscordQuestionData, w as parseDiscordComponentCustomId, y as buildDiscordActivityCustomId } from "./components-HN9052L1.mjs";
12
- import { a as registerDiscordComponentEntries, o as resolveDiscordComponentEntryWithPersistence, s as resolveDiscordModalEntryWithPersistence, t as editDiscordComponentMessage } from "./send.components-FxOS3CeP.mjs";
12
+ import { a as registerDiscordComponentEntries, o as resolveDiscordComponentEntryWithPersistence, s as resolveDiscordModalEntryWithPersistence, t as editDiscordComponentMessage } from "./send.components-DdUmsN5C.mjs";
13
13
  import { t as getDiscordRuntime } from "./runtime-DgnVQ7zW.mjs";
14
14
  import { n as getDiscordActivitiesRuntime } from "./runtime-DPm3gZXk.mjs";
15
- import { t as resolveDiscordCommandOwnerAllowFrom } from "./command-owners-D78sAoOz.mjs";
16
- import { D as isDiscordExecApprovalClientEnabled, T as getDiscordExecApprovalApprovers, a as resolveDiscordComponentSpec, c as formatDiscordApprovalDisplayValue, d as resolveDiscordBoundConversationRoute, h as resolveDiscordConversationIdentity, l as buildDiscordConversationRouteContext, n as DISCORD_PRESENTATION_CAPABILITIES, p as resolveDiscordEffectiveRoute, r as buildDiscordPresentationPayload, s as DISCORD_APPROVAL_ALLOWED_MENTIONS, u as buildDiscordRoutePeer } from "./outbound-session-route-B0Hpwn3Q.mjs";
15
+ import { t as resolveDiscordCommandOwnerAllowFrom } from "./command-owners-C7rUdqUX.mjs";
16
+ import { D as isDiscordExecApprovalClientEnabled, T as getDiscordExecApprovalApprovers, a as resolveDiscordComponentSpec, c as formatDiscordApprovalDisplayValue, d as resolveDiscordBoundConversationRoute, h as resolveDiscordConversationIdentity, l as buildDiscordConversationRouteContext, n as DISCORD_PRESENTATION_CAPABILITIES, p as resolveDiscordEffectiveRoute, r as buildDiscordPresentationPayload, s as DISCORD_APPROVAL_ALLOWED_MENTIONS, u as buildDiscordRoutePeer } from "./outbound-session-route-CM6i691P.mjs";
17
17
  import { n as discordIngressIdentity, t as selectDiscordLivePolicyConfig } from "./live-policy-config-BPoB3eQi.mjs";
18
18
  import { t as resolveDiscordChannelAllowlist } from "./resolve-channels-UdT38DzU.mjs";
19
19
  import { t as resolveDiscordUserAllowlist } from "./resolve-users-DnCsrXZ_.mjs";
20
- import { a as isThreadArchived, n as getThreadBindingManager } from "./thread-bindings.manager-CdNa6UIs.mjs";
20
+ import { a as isThreadArchived, n as getThreadBindingManager } from "./thread-bindings.manager-Cqml5pUh.mjs";
21
21
  import { n as resolveDiscordChannelInfoSafe, o as resolveDiscordChannelTopicSafe, r as resolveDiscordChannelNameSafe } from "./channel-access-DasWY_OV.mjs";
22
22
  import { a as probeDiscordApplicationId, r as parseApplicationIdFromToken } from "./probe-D3P1x4aN.mjs";
23
- import { O as resolveDiscordReferencedReplyMessage, a as authorizeDiscordVoiceIngress, c as resolveDiscordVoiceEnabled, i as setDiscordTranscriptsVoiceManager, k as resolveDiscordReferencedReplyMessageId, l as resolveDiscordThreadLikeChannelContext, o as resolveDiscordVoiceAccess, u as resolveFetchedDiscordThreadLikeChannelContext } from "./transcripts-source-0qQYVu2H.mjs";
23
+ import { O as resolveDiscordReferencedReplyMessage, a as authorizeDiscordVoiceIngress, c as resolveDiscordVoiceEnabled, i as setDiscordTranscriptsVoiceManager, k as resolveDiscordReferencedReplyMessageId, l as resolveDiscordThreadLikeChannelContext, o as resolveDiscordVoiceAccess, u as resolveFetchedDiscordThreadLikeChannelContext } from "./transcripts-source-EMrQb132.mjs";
24
24
  import { t as resolveDiscordSenderIdentity } from "./sender-identity-BNBvGt1l.mjs";
25
25
  import { n as hasDiscordApprovalControl, t as discordApprovalMessageUpdates } from "./approval-message-updates-CIGByUcE.mjs";
26
26
  import { createRequire } from "node:module";
@@ -5532,8 +5532,8 @@ const discordProviderRuntime = {
5532
5532
  probeDiscordApplicationId,
5533
5533
  createDiscordNativeCommand,
5534
5534
  runDiscordGatewayLifecycle,
5535
- loadDiscordVoiceRuntime: () => import("./voice-runtime-QlZJ4sHv.mjs").then((n) => n.t),
5536
- loadDiscordProviderSessionRuntime: () => import("./provider-session.runtime-CsnRvddI.mjs"),
5535
+ loadDiscordVoiceRuntime: () => import("./voice-runtime-CI7JBfeA.mjs").then((n) => n.t),
5536
+ loadDiscordProviderSessionRuntime: () => import("./provider-session.runtime-1LmRZB68.mjs"),
5537
5537
  createClient: (...args) => new Client(...args),
5538
5538
  resolveDiscordAccount,
5539
5539
  resolveNativeCommandsEnabled,
@@ -1,6 +1,6 @@
1
- import { i as createNoopThreadBindingManager, t as createThreadBindingManager } from "./thread-bindings.manager-CdNa6UIs.mjs";
2
- import { c as reconcileAcpThreadBindingsOnStartup } from "./thread-bindings-0hPTSK14.mjs";
3
- import { t as createDiscordMessageHandler } from "./message-handler-Ii_etru1.mjs";
1
+ import { i as createNoopThreadBindingManager, t as createThreadBindingManager } from "./thread-bindings.manager-Cqml5pUh.mjs";
2
+ import { c as reconcileAcpThreadBindingsOnStartup } from "./thread-bindings-Blhv7XV8.mjs";
3
+ import { t as createDiscordMessageHandler } from "./message-handler-BbwzASGH.mjs";
4
4
  import { resolveThreadBindingIdleTimeoutMs, resolveThreadBindingMaxAgeMs, resolveThreadBindingsEnabled } from "openclaw/plugin-sdk/conversation-runtime";
5
5
  import { getAcpSessionManager, isAcpRuntimeError, rethrowIncognitoSessionError } from "openclaw/plugin-sdk/acp-runtime";
6
6
  export { createDiscordMessageHandler, createNoopThreadBindingManager, createThreadBindingManager, getAcpSessionManager, isAcpRuntimeError, reconcileAcpThreadBindingsOnStartup, resolveThreadBindingIdleTimeoutMs, resolveThreadBindingMaxAgeMs, resolveThreadBindingsEnabled, rethrowIncognitoSessionError };
@@ -0,0 +1 @@
1
+ export { t as monitorDiscordProvider } from "./provider-B9drnVwM.mjs";
@@ -1,8 +1,8 @@
1
1
  import { _ as restoreDiscordAudioError, b as setDiscordAudioOutputStatus, g as releaseDiscordAudioInput, h as getDiscordAudioOutputStatus, l as createDiscordPcmToRealtimeConverter, m as admitDiscordAudioInput, p as DiscordAudioOutputStatus } from "./receive-recovery-eVmK2_hl.mjs";
2
2
  import { t as resolveDiscordOutputAudioDelta } from "./output-activity-uBpMSX75.mjs";
3
3
  import { n as discordRealtimeVoiceSecretOwnerId } from "./secret-config-contract-CIsH7R3B.mjs";
4
- import { y as logVoiceVerbose } from "./provider-D9EzOfG8.mjs";
5
- import { a as logDiscordVoiceAgentControlResult, c as formatVoiceLogPreview, i as handleDiscordVoiceAgentControlToolCall, l as shouldLogRealtimeVerboseEvent, n as DiscordRealtimeRecording, o as maybeControlDiscordVoiceAgentRun, r as formatVoiceIngressPrompt, s as formatRealtimeInfoLog } from "./voice-runtime-QlZJ4sHv.mjs";
4
+ import { y as logVoiceVerbose } from "./provider-B9drnVwM.mjs";
5
+ import { a as logDiscordVoiceAgentControlResult, c as formatVoiceLogPreview, i as handleDiscordVoiceAgentControlToolCall, l as shouldLogRealtimeVerboseEvent, n as DiscordRealtimeRecording, o as maybeControlDiscordVoiceAgentRun, r as formatVoiceIngressPrompt, s as formatRealtimeInfoLog } from "./voice-runtime-CI7JBfeA.mjs";
6
6
  import { MessageChannel } from "node:worker_threads";
7
7
  import { formatErrorMessage, readErrorName, toErrorObject, toStringifiedError } from "openclaw/plugin-sdk/error-runtime";
8
8
  import { createSubsystemLogger } from "openclaw/plugin-sdk/runtime-env";
@@ -1787,6 +1787,7 @@ var DiscordRealtimeVoiceSession = class {
1787
1787
  this.sessions = /* @__PURE__ */ new Set();
1788
1788
  this.nextSessionId = 0;
1789
1789
  this.closed = false;
1790
+ this.textFallback = false;
1790
1791
  this.closingSpeakers = /* @__PURE__ */ new Set();
1791
1792
  this.changingVoice = false;
1792
1793
  this.callAbort = new AbortController();
@@ -1816,17 +1817,19 @@ var DiscordRealtimeVoiceSession = class {
1816
1817
  close(disposition = "abort") {
1817
1818
  if (this.closed) return this.closeCompletion;
1818
1819
  this.closed = true;
1820
+ this.textFallback = disposition === "text-fallback";
1821
+ const speakerDisposition = disposition === "text-fallback" ? "detach" : disposition;
1819
1822
  this.voiceSelection?.unregister();
1820
1823
  if (disposition === "abort") this.callAbort.abort(/* @__PURE__ */ new Error("Discord voice call closed"));
1821
1824
  clearInterval(this.idleTimer);
1822
1825
  this.idleTimer = void 0;
1823
1826
  this.player.close();
1824
1827
  if (this.warmSession) {
1825
- this.closeSpeaker(this.warmSession, disposition);
1828
+ this.closeSpeaker(this.warmSession, speakerDisposition);
1826
1829
  this.warmSession = void 0;
1827
1830
  }
1828
- for (const { session } of this.sessions) this.closeSpeaker(session, disposition);
1829
- for (const session of this.candidates) this.closeSpeaker(session, disposition);
1831
+ for (const { session } of this.sessions) this.closeSpeaker(session, speakerDisposition);
1832
+ for (const session of this.candidates) this.closeSpeaker(session, speakerDisposition);
1830
1833
  this.candidates.clear();
1831
1834
  this.speakers.clear();
1832
1835
  this.sessions.clear();
@@ -1878,13 +1881,21 @@ var DiscordRealtimeVoiceSession = class {
1878
1881
  standby: previous !== void 0,
1879
1882
  conversationHistory: previous?.snapshotConversation(),
1880
1883
  runAgentTurn: async (turn) => {
1881
- const signal = turn.signal ? AbortSignal.any([turn.signal, this.callAbort.signal]) : this.callAbort.signal;
1884
+ const signal = AbortSignal.any([
1885
+ this.params.signal,
1886
+ this.callAbort.signal,
1887
+ ...turn.signal ? [turn.signal] : []
1888
+ ]);
1882
1889
  const text = await this.params.runAgentTurn({
1883
1890
  ...turn,
1884
1891
  signal,
1885
1892
  voiceSelection: this.voiceSelection
1886
1893
  });
1887
1894
  signal.throwIfAborted();
1895
+ if (this.textFallback) {
1896
+ if (text.trim()) await this.params.deliverText(turn, text, signal);
1897
+ return "";
1898
+ }
1888
1899
  return text;
1889
1900
  },
1890
1901
  onTerminalError: (error) => this.handleSpeakerFailure(session, error)
@@ -4,11 +4,11 @@ import { C as hasAnyChannelPermissionDiscord, F as createDiscordRuntimeAccountCo
4
4
  import { n as getPresence } from "./presence-cache-DCeTsL73.mjs";
5
5
  import { a as createReusableDiscordReplyReference, s as resolveDiscordReplyReference } from "./send.receipt-BAlzXd8e.mjs";
6
6
  import { n as resolveDiscordChannelId, t as parseDiscordTarget } from "./target-parsing-C-HyNxcE.mjs";
7
- import { A as listScheduledEventsDiscord, B as moveChannelDiscord, C as fetchChannelInfoDiscord, D as fetchVoiceStatusDiscord, E as fetchRoleInfoDiscord, F as uploadEmojiDiscord, H as setChannelPermissionDiscord, I as uploadStickerDiscord, L as createChannelDiscord, M as resolveEventCoverImage, N as timeoutMemberDiscord, O as kickMemberDiscord, P as listGuildEmojisDiscord, R as deleteChannelDiscord, S as createScheduledEventDiscord, T as fetchMemberInfoDiscord, V as removeChannelPermissionDiscord, _ as readMessagesDiscord, a as removeReactionDiscord, b as addRoleDiscord, d as deleteMessageDiscord, f as editMessageDiscord, g as pinMessageDiscord, h as listThreadsDiscord, i as removeOwnReactionsDiscord, j as removeRoleDiscord, k as listGuildChannelsDiscord, l as DiscordThreadInitialMessageError, m as listPinsDiscord, n as fetchReactionsDiscord, p as fetchMessageDiscord, r as reactMessageDiscord, s as sendVoiceMessageDiscord, u as createThreadDiscord, v as searchMessagesDiscord, w as fetchGuildInfoDiscord, x as banMemberDiscord, y as unpinMessageDiscord, z as editChannelDiscord } from "./send-DbILKgcm.mjs";
8
- import { r as sendStickerDiscord, t as sendMessageDiscord } from "./send.outbound-_jx4Xpd3.mjs";
7
+ import { A as listScheduledEventsDiscord, B as moveChannelDiscord, C as fetchChannelInfoDiscord, D as fetchVoiceStatusDiscord, E as fetchRoleInfoDiscord, F as uploadEmojiDiscord, H as setChannelPermissionDiscord, I as uploadStickerDiscord, L as createChannelDiscord, M as resolveEventCoverImage, N as timeoutMemberDiscord, O as kickMemberDiscord, P as listGuildEmojisDiscord, R as deleteChannelDiscord, S as createScheduledEventDiscord, T as fetchMemberInfoDiscord, V as removeChannelPermissionDiscord, _ as readMessagesDiscord, a as removeReactionDiscord, b as addRoleDiscord, d as deleteMessageDiscord, f as editMessageDiscord, g as pinMessageDiscord, h as listThreadsDiscord, i as removeOwnReactionsDiscord, j as removeRoleDiscord, k as listGuildChannelsDiscord, l as DiscordThreadInitialMessageError, m as listPinsDiscord, n as fetchReactionsDiscord, p as fetchMessageDiscord, r as reactMessageDiscord, s as sendVoiceMessageDiscord, u as createThreadDiscord, v as searchMessagesDiscord, w as fetchGuildInfoDiscord, x as banMemberDiscord, y as unpinMessageDiscord, z as editChannelDiscord } from "./send-DXma62sY.mjs";
8
+ import { r as sendStickerDiscord, t as sendMessageDiscord } from "./send.outbound-D_ctMh-S.mjs";
9
9
  import "./targets-DZJjkzwv.mjs";
10
10
  import { h as readDiscordComponentSpec, m as coerceDiscordComponentParam } from "./components-HN9052L1.mjs";
11
- import { r as sendDiscordComponentMessage } from "./send.components-FxOS3CeP.mjs";
11
+ import { r as sendDiscordComponentMessage } from "./send.components-DdUmsN5C.mjs";
12
12
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
13
13
  import { asBoolean, asOptionalRecord, isRecord, normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
14
14
  import { assertMediaNotDataUrl, jsonResult, parseAvailableTags, readNonNegativeIntegerParam, readPositiveIntegerParam, readReactionParams, readStringArrayParam, readStringParam, withNormalizedTimestamp } from "openclaw/plugin-sdk/channel-actions";
@@ -4,7 +4,7 @@ import { C as hasAnyChannelPermissionDiscord, D as createDiscordMessageNonce, I
4
4
  import { B as readDiscordCode, H as readRetryAfter, L as DiscordError, R as RateLimitError, V as readDiscordMessage, W as withDiscordRequestAuthority, _t as getGuildMember, at as deleteOwnMessageReaction, bt as stripUndefinedFields, ct as createThread, dt as getChannel, ft as getChannelMessage, gt as getGuild, ht as unpinChannelMessage, it as createOwnMessageReaction, lt as deleteChannelMessage, mt as pinChannelMessage, ot as listMessageReactionUsers, ut as editChannelMessage, vt as getGuildVoiceState, yt as listGuildEmojis, z as isUnknownDiscordVoiceStateError } from "./discord-BGqgx-yd.mjs";
5
5
  import { _ as recordDiscordMessageCreateAmbiguity, a as createReusableDiscordReplyReference, h as createDiscordRetryRunner, m as classifyDiscordDeliveryFailure, n as createDiscordSendReceiptFromResults, o as resolveDiscordReplyMessageId, r as createDiscordSendResult, v as chunkDiscordTextWithMode } from "./send.receipt-BAlzXd8e.mjs";
6
6
  import { o as parseDiscordHttpErrorBody } from "./api-CtmE1OUN.mjs";
7
- import { i as prepareDiscordOutboundText, n as sendPollDiscord, r as sendStickerDiscord, t as sendMessageDiscord } from "./send.outbound-_jx4Xpd3.mjs";
7
+ import { a as prepareDiscordOutboundText, n as sendPollDiscord, r as sendStickerDiscord, t as sendMessageDiscord } from "./send.outbound-D_ctMh-S.mjs";
8
8
  import { n as DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS } from "./timeouts-CuNARfyw.mjs";
9
9
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
10
10
  import { resolvePreferredOpenClawTmpDir, withTempWorkspace } from "openclaw/plugin-sdk/temp-path";
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.mjs";
2
2
  import { D as createDiscordMessageNonce, M as parseAndResolveChannelRecipient, N as createDiscordClient, T as SUPPRESS_NOTIFICATIONS_FLAG, c as resolveChannelId, l as resolveDiscordChannel, t as buildDiscordSendError } from "./send.shared-CjQ4jbMA.mjs";
3
3
  import { K as serializePayload, W as withDiscordRequestAuthority, st as createChannelMessage, ut as editChannelMessage } from "./discord-BGqgx-yd.mjs";
4
4
  import { r as createDiscordSendResult } from "./send.receipt-BAlzXd8e.mjs";
5
- import { t as sendMessageDiscord } from "./send.outbound-_jx4Xpd3.mjs";
5
+ import { t as sendMessageDiscord } from "./send.outbound-D_ctMh-S.mjs";
6
6
  import { d as buildDiscordComponentMessage, f as buildDiscordComponentMessageFlags, g as resolveDiscordComponentAttachmentName } from "./components-HN9052L1.mjs";
7
7
  import { n as getOptionalDiscordRuntime } from "./runtime-DgnVQ7zW.mjs";
8
8
  import { hasNonEmptyString, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -1,3 +1,4 @@
1
+ import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.mjs";
1
2
  import { A as resolveDiscordSendEmbeds, D as createDiscordMessageNonce, E as buildDiscordMessageRequest, M as parseAndResolveChannelRecipient, N as createDiscordClient, O as resolveDiscordMessageFlags, c as resolveChannelId, d as sendDiscordChunks, f as sendDiscordMedia, i as normalizeDiscordPollInput, j as resolveDiscordSuppressEmbeds, k as resolveDiscordSendComponents, l as resolveDiscordChannel, n as buildDiscordTextChunks, s as normalizeStickerIds, t as buildDiscordSendError } from "./send.shared-CjQ4jbMA.mjs";
2
3
  import { W as withDiscordRequestAuthority, ct as createThread, st as createChannelMessage } from "./discord-BGqgx-yd.mjs";
3
4
  import { a as createReusableDiscordReplyReference, n as createDiscordSendReceiptFromResults, r as createDiscordSendResult } from "./send.receipt-BAlzXd8e.mjs";
@@ -365,6 +366,11 @@ function prepareDiscordOutboundText(text, params) {
365
366
  }
366
367
  //#endregion
367
368
  //#region extensions/discord/src/send.outbound.ts
369
+ var send_outbound_exports = /* @__PURE__ */ __exportAll({
370
+ sendMessageDiscord: () => sendMessageDiscord,
371
+ sendPollDiscord: () => sendPollDiscord,
372
+ sendStickerDiscord: () => sendStickerDiscord
373
+ });
368
374
  const DEFAULT_DISCORD_MEDIA_MAX_MB = 100;
369
375
  /** Discord's ChannelFlags.RequireTag is bit 4 on forum/media parent channels. */
370
376
  const DISCORD_FORUM_REQUIRE_TAG_FLAG = 16;
@@ -622,4 +628,4 @@ async function sendDiscordStructuredMessage(to, opts, kind, buildPayload) {
622
628
  });
623
629
  }
624
630
  //#endregion
625
- export { discordTextHasBroadcastMention as a, prepareDiscordOutboundText as i, sendPollDiscord as n, formatMention as o, sendStickerDiscord as r, sendMessageDiscord as t };
631
+ export { prepareDiscordOutboundText as a, send_outbound_exports as i, sendPollDiscord as n, discordTextHasBroadcastMention as o, sendStickerDiscord as r, formatMention as s, sendMessageDiscord as t };
@@ -0,0 +1,2 @@
1
+ export { t as discordSetupPlugin } from "./channel.setup-B3KEh05g.mjs";
2
+ import "../setup-plugin-api.js";
@@ -100,7 +100,7 @@ const DISCORD_LEGACY_CONFIG_RULES = [];
100
100
  //#region extensions/discord/src/shared.ts
101
101
  const DISCORD_CHANNEL = "discord";
102
102
  const livePolicyConfigPrefixes = Object.keys(selectDiscordLivePolicyConfig({})).flatMap((key) => [`channels.discord.${key}`, `channels.discord.accounts.*.${key}`]);
103
- const loadDiscordDoctorModule = createLazyRuntimeModule(() => import("./doctor-DSrNJ7m2.mjs"));
103
+ const loadDiscordDoctorModule = createLazyRuntimeModule(() => import("./doctor-9Ka20lDD.mjs"));
104
104
  const discordDoctor = {
105
105
  dmAllowFromMode: "topOnly",
106
106
  groupModel: "route",
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.mjs";
2
2
  import { x as ensureBindingsLoadedAsync } from "./thread-bindings.session-updates-DGSljVf6.mjs";
3
- import { o as listThreadBindingsBySessionKey, u as unbindThreadBindingsBySessionKeyAsync } from "./thread-bindings-0hPTSK14.mjs";
3
+ import { o as listThreadBindingsBySessionKey, u as unbindThreadBindingsBySessionKeyAsync } from "./thread-bindings-Blhv7XV8.mjs";
4
4
  import { normalizeOptionalLowercaseString, normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  //#region extensions/discord/src/subagent-hooks.ts
6
6
  var subagent_hooks_exports = /* @__PURE__ */ __exportAll({
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.mjs";
2
2
  import { t as parseDiscordTarget } from "./target-parsing-C-HyNxcE.mjs";
3
3
  import "./targets-DZJjkzwv.mjs";
4
4
  import { C as getThreadBindingToken, E as refreshUnboundThreadWebhookIdentity, F as resolveThreadBindingMaxAgeMs$1, M as resolveThreadBindingIdleTimeoutMs$1, N as resolveThreadBindingInactivityExpiresAt, P as resolveThreadBindingMaxAgeExpiresAt, _ as MANAGERS_BY_ACCOUNT_ID, a as mutateBindingsForTargetSession, g as BINDINGS_BY_THREAD_ID, i as setThreadBindingMaxAgeBySessionKeyAsync, n as setThreadBindingIdleTimeoutBySessionKeyAsync, o as resolveBindingIdsForTargetSession, r as setThreadBindingMaxAgeBySessionKey, t as setThreadBindingIdleTimeoutBySessionKey, u as removeBindingRecordSync } from "./thread-bindings.session-updates-DGSljVf6.mjs";
5
- import { c as resolveThreadBindingPersonaFromRecord, i as createNoopThreadBindingManager, n as getThreadBindingManager, o as resolveChannelIdForBinding, s as resolveThreadBindingPersona, t as createThreadBindingManager } from "./thread-bindings.manager-CdNa6UIs.mjs";
5
+ import { c as resolveThreadBindingPersonaFromRecord, i as createNoopThreadBindingManager, n as getThreadBindingManager, o as resolveChannelIdForBinding, s as resolveThreadBindingPersona, t as createThreadBindingManager } from "./thread-bindings.manager-Cqml5pUh.mjs";
6
6
  import { normalizeAccountId } from "openclaw/plugin-sdk/routing";
7
7
  import { normalizeOptionalLowercaseString, normalizeOptionalString, normalizeOptionalStringifiedId, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
8
8
  import { formatThreadBindingDurationLabel as formatThreadBindingDurationLabel$1, resolveThreadBindingIdleTimeoutMs, resolveThreadBindingIntroText, resolveThreadBindingIntroText as resolveThreadBindingIntroText$1, resolveThreadBindingMaxAgeMs, resolveThreadBindingThreadName, resolveThreadBindingThreadName as resolveThreadBindingThreadName$1, resolveThreadBindingsEnabled } from "openclaw/plugin-sdk/conversation-runtime";
@@ -4,8 +4,8 @@ import { P as createDiscordRestClient } from "./send.shared-CjQ4jbMA.mjs";
4
4
  import { W as withDiscordRequestAuthority, dt as getChannel, tt as createChannelWebhook } from "./discord-BGqgx-yd.mjs";
5
5
  import { p as canFallbackDiscordWebhookSend } from "./send.receipt-BAlzXd8e.mjs";
6
6
  import { n as resolveDiscordChannelId } from "./target-parsing-C-HyNxcE.mjs";
7
- import { c as sendWebhookMessageDiscord, u as createThreadDiscord } from "./send-DbILKgcm.mjs";
8
- import { t as sendMessageDiscord } from "./send.outbound-_jx4Xpd3.mjs";
7
+ import { c as sendWebhookMessageDiscord, u as createThreadDiscord } from "./send-DXma62sY.mjs";
8
+ import { t as sendMessageDiscord } from "./send.outbound-D_ctMh-S.mjs";
9
9
  import { A as resolveBindingRecordKey, C as getThreadBindingToken, D as rememberReusableWebhook, E as refreshUnboundThreadWebhookIdentity, F as resolveThreadBindingMaxAgeMs$1, I as shouldDefaultPersist, L as toBindingRecordKey, M as resolveThreadBindingIdleTimeoutMs$1, O as rememberThreadBindingToken, R as toReusableWebhookKey, S as forgetThreadBindingToken, T as normalizeThreadBindingDurationMs, _ as MANAGERS_BY_ACCOUNT_ID, b as THREAD_BINDING_TOUCH_PERSIST_MIN_INTERVAL_MS, c as drainThreadBindingAccountOperations, d as runThreadBindingAccountOperation, f as runThreadBindingMutation, g as BINDINGS_BY_THREAD_ID, h as updateBindingRecordSync, j as resolvePreparedThreadBindingLifecycle, k as resolveBindingIdsForSession, l as drainThreadBindingMutations, m as snapshotThreadBindingMetadata, p as shouldPersistAnyBindingState, s as commitBindingRecord, v as PERSIST_BY_ACCOUNT_ID, w as normalizeTargetKind, x as ensureBindingsLoadedAsync, y as REUSABLE_WEBHOOKS_BY_ACCOUNT_CHANNEL } from "./thread-bindings.session-updates-DGSljVf6.mjs";
10
10
  import { n as resolveDiscordChannelInfoSafe, t as resolveDiscordChannelIdSafe } from "./channel-access-DasWY_OV.mjs";
11
11
  import { createSubsystemLogger, logVerbose } from "openclaw/plugin-sdk/runtime-env";
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.mjs";
2
2
  import { ct as createThread, ft as getChannelMessage, t as discord_exports } from "./discord-BGqgx-yd.mjs";
3
- import { d as resolveDiscordReplyDeliveryPlan, f as resolveDiscordReplyTarget, g as sanitizeDiscordThreadName, h as resolveDiscordThreadStarter, j as resolveDiscordMessageChannelId, m as resolveDiscordThreadParentInfo, p as resolveDiscordThreadChannel } from "./transcripts-source-0qQYVu2H.mjs";
3
+ import { d as resolveDiscordReplyDeliveryPlan, f as resolveDiscordReplyTarget, g as sanitizeDiscordThreadName, h as resolveDiscordThreadStarter, j as resolveDiscordMessageChannelId, m as resolveDiscordThreadParentInfo, p as resolveDiscordThreadChannel } from "./transcripts-source-EMrQb132.mjs";
4
4
  import { logVerbose } from "openclaw/plugin-sdk/runtime-env";
5
5
  import { buildAgentSessionKey } from "openclaw/plugin-sdk/routing";
6
6
  import { normalizeOptionalString, normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -2,7 +2,7 @@ import { l as resolveDiscordAccount, o as listEnabledDiscordAccounts, u as resol
2
2
  import { A as isDiscordThreadChannelType, D as getDiscordEndpointRuntime, f as resolveDiscordGuildEntry, i as normalizeDiscordAllowList, k as resolveDiscordEndpointMediaGuard, l as resolveDiscordChannelConfigWithFallback, n as hasConfiguredDiscordChannels, o as normalizeDiscordSlug, p as resolveDiscordMemberAccessState, r as isDiscordGroupAllowedByPolicy, t as allowListMatches } from "./allow-list-B_ToXtew.mjs";
3
3
  import { L as DiscordError, ft as getChannelMessage, t as discord_exports } from "./discord-BGqgx-yd.mjs";
4
4
  import { l as withAbortTimeout } from "./timeouts-CuNARfyw.mjs";
5
- import { t as resolveDiscordCommandOwnerAllowFrom } from "./command-owners-D78sAoOz.mjs";
5
+ import { t as resolveDiscordCommandOwnerAllowFrom } from "./command-owners-C7rUdqUX.mjs";
6
6
  import { a as resolveDiscordChannelParentSafe, i as resolveDiscordChannelParentIdSafe, n as resolveDiscordChannelInfoSafe, r as resolveDiscordChannelNameSafe, t as resolveDiscordChannelIdSafe } from "./channel-access-DasWY_OV.mjs";
7
7
  import { createSubsystemLogger, getChildLogger, logVerbose } from "openclaw/plugin-sdk/runtime-env";
8
8
  import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id";
@@ -3,10 +3,10 @@ import { _ as restoreDiscordAudioError, f as writeVoiceWavFile, i as noteVoiceDe
3
3
  import { S as formatDiscordUserTag, g as resolveDiscordOwnerAccess, o as normalizeDiscordSlug } from "./allow-list-B_ToXtew.mjs";
4
4
  import { f as VoiceStateUpdateListener, t as discord_exports, vt as getGuildVoiceState, z as isUnknownDiscordVoiceStateError } from "./discord-BGqgx-yd.mjs";
5
5
  import { t as parseDiscordTarget } from "./target-parsing-C-HyNxcE.mjs";
6
- import { o as formatMention } from "./send.outbound-_jx4Xpd3.mjs";
6
+ import { s as formatMention } from "./send.outbound-D_ctMh-S.mjs";
7
7
  import { t as getDiscordRuntime } from "./runtime-DgnVQ7zW.mjs";
8
- import { C as buildDiscordGroupSystemPrompt, _ as isDiscordRealtimeVoiceMode, b as resolveDiscordVoiceMode, g as VOICE_RECONNECT_GRACE_MS, h as VOICE_CONNECT_READY_TIMEOUT_MS, m as MIN_SEGMENT_SECONDS, p as CAPTURE_FINALIZE_GRACE_MS, v as isVoiceChannel, x as resolveVoiceTimeoutMs, y as logVoiceVerbose } from "./provider-D9EzOfG8.mjs";
9
- import { a as authorizeDiscordVoiceIngress, c as resolveDiscordVoiceEnabled, o as resolveDiscordVoiceAccess, r as resolveDiscordTranscriptsCapture, s as resolveDiscordVoiceAccessTarget, t as bindDiscordCaptureReceipts } from "./transcripts-source-0qQYVu2H.mjs";
8
+ import { C as buildDiscordGroupSystemPrompt, _ as isDiscordRealtimeVoiceMode, b as resolveDiscordVoiceMode, g as VOICE_RECONNECT_GRACE_MS, h as VOICE_CONNECT_READY_TIMEOUT_MS, m as MIN_SEGMENT_SECONDS, p as CAPTURE_FINALIZE_GRACE_MS, v as isVoiceChannel, x as resolveVoiceTimeoutMs, y as logVoiceVerbose } from "./provider-B9drnVwM.mjs";
9
+ import { a as authorizeDiscordVoiceIngress, c as resolveDiscordVoiceEnabled, o as resolveDiscordVoiceAccess, r as resolveDiscordTranscriptsCapture, s as resolveDiscordVoiceAccessTarget, t as bindDiscordCaptureReceipts } from "./transcripts-source-EMrQb132.mjs";
10
10
  import { Worker } from "node:worker_threads";
11
11
  import { PassThrough, Readable } from "node:stream";
12
12
  import { formatErrorMessage, readErrorName, toErrorObject, toStringifiedError } from "openclaw/plugin-sdk/error-runtime";
@@ -2473,7 +2473,10 @@ var DiscordVoiceSessions = class {
2473
2473
  }
2474
2474
  if (existing) {
2475
2475
  logVoiceVerbose(`join: replacing existing session for guild ${guildId}`);
2476
- await this.leave({ guildId }, { preserveFollowState: options?.preserveFollowState });
2476
+ await this.leave({ guildId }, {
2477
+ preserveFollowState: options?.preserveFollowState,
2478
+ disposition: "abort"
2479
+ });
2477
2480
  }
2478
2481
  const resolved = await this.resolveChannel(params);
2479
2482
  if (authority && !authority.isCurrent()) return failedJoinResult("Discord voice join was cancelled.");
@@ -2535,7 +2538,7 @@ var DiscordVoiceSessions = class {
2535
2538
  const { route, voiceRoute, agentSessionMode, agentSessionTarget } = routeInfo;
2536
2539
  logger$2.info(`discord voice: joining guild=${guildId} channel=${channelId} mode=${voiceMode} agent=${route.agentId} voiceSession=${voiceRoute.sessionKey} supervisorSession=${route.sessionKey} agentSessionMode=${agentSessionMode}${agentSessionTarget ? ` agentSessionTarget=${agentSessionTarget}` : ""} voiceModel=${voiceConfig?.model ?? "route-default"} realtimeProvider=${voiceConfig?.realtime?.provider ?? "auto"} realtimeModel=${voiceConfig?.realtime?.model ?? "provider-default"} realtimeVoice=${voiceConfig?.realtime?.speakerVoice ?? voiceConfig?.realtime?.speakerVoiceId ?? "provider-default"}`);
2537
2540
  let stopCompletion;
2538
- const stopEntry = (reason) => {
2541
+ const stopEntry = (reason, disposition = "abort") => {
2539
2542
  if (entry.sessionLifecycle.status === "stopped") return stopCompletion;
2540
2543
  entry.sessionLifecycle = {
2541
2544
  status: "stopped",
@@ -2554,7 +2557,7 @@ var DiscordVoiceSessions = class {
2554
2557
  };
2555
2558
  let realtimeCompletion = void 0;
2556
2559
  try {
2557
- if (realtimeLifecycle.status === "starting" || realtimeLifecycle.status === "active") realtimeCompletion = realtimeLifecycle.instance.close();
2560
+ if (realtimeLifecycle.status === "starting" || realtimeLifecycle.status === "active") realtimeCompletion = realtimeLifecycle.instance.close(disposition);
2558
2561
  } catch (error) {
2559
2562
  logger$2.warn(`discord voice: realtime close failed: ${formatErrorMessage$1(error)}`);
2560
2563
  }
@@ -2606,8 +2609,8 @@ var DiscordVoiceSessions = class {
2606
2609
  status: "inactive",
2607
2610
  generation: 0
2608
2611
  },
2609
- stop(reason) {
2610
- return stopEntry(reason ?? `stop guild ${guildId} channel ${channelId}`);
2612
+ stop(reason, disposition) {
2613
+ return stopEntry(reason ?? `stop guild ${guildId} channel ${channelId}`, disposition);
2611
2614
  }
2612
2615
  };
2613
2616
  const speakingHandler = (userId, speaking) => {
@@ -2617,7 +2620,7 @@ var DiscordVoiceSessions = class {
2617
2620
  else this.params.receive.scheduleCaptureFinalize(entry, userId);
2618
2621
  };
2619
2622
  const destroyedHandler = () => {
2620
- stopEntry("audio worker stopped");
2623
+ stopEntry("audio worker stopped", "text-fallback");
2621
2624
  };
2622
2625
  audio.on("stopped", destroyedHandler);
2623
2626
  if (!entry.captureOnly && isDiscordRealtimeVoiceMode(voiceMode)) {
@@ -2655,7 +2658,7 @@ var DiscordVoiceSessions = class {
2655
2658
  ok: false,
2656
2659
  message: "Not connected to that voice channel."
2657
2660
  };
2658
- const stopped = entry.stop();
2661
+ const stopped = entry.stop(void 0, options?.disposition ?? "text-fallback");
2659
2662
  if (!entry.receiveRecovery.decryptRecoveryInFlight) this.params.receive.daveRecoveryAttempts.delete(guildId);
2660
2663
  if (!options?.preserveFollowState) this.params.onLeaveFollowState(guildId);
2661
2664
  await stopped;
@@ -2677,7 +2680,7 @@ var DiscordVoiceSessions = class {
2677
2680
  ok: false,
2678
2681
  message: "Discord realtime voice session stopped before startup completed."
2679
2682
  };
2680
- const { DiscordRealtimeVoiceSession } = await import("./realtime-session.runtime-CxGBk8H-.mjs");
2683
+ const { DiscordRealtimeVoiceSession } = await import("./realtime-session.runtime-DcPHqGQM.mjs");
2681
2684
  const realtime = new DiscordRealtimeVoiceSession({
2682
2685
  ...this.params,
2683
2686
  bootstrapContextInstructions,
@@ -2700,6 +2703,24 @@ var DiscordVoiceSessions = class {
2700
2703
  ...turn,
2701
2704
  entry
2702
2705
  }),
2706
+ deliverText: async (turn, text, signal) => {
2707
+ try {
2708
+ const context = await this.params.receive.resolveDiscordVoiceIngressContext(entry, turn.userId);
2709
+ const assertCurrent = () => {
2710
+ signal.throwIfAborted();
2711
+ if (!this.params.isSessionGenerationCurrent(entry) || !context || context.isCurrent?.() === false || context.senderIsOwner !== turn.context.senderIsOwner) throw new Error("Discord voice reply authorization is no longer current");
2712
+ };
2713
+ assertCurrent();
2714
+ const { sendMessageDiscord } = await import("./send.outbound-D_ctMh-S.mjs").then((n) => n.i);
2715
+ await sendMessageDiscord(`channel:${entry.channelId}`, text, {
2716
+ cfg: this.params.cfg,
2717
+ accountId: this.params.accountId,
2718
+ assertPlatformSendAuthorized: assertCurrent
2719
+ });
2720
+ } catch (error) {
2721
+ logger$2.warn(`discord voice: text fallback dropped guild=${entry.guildId} channel=${entry.channelId}: ${formatErrorMessage$1(error)}`);
2722
+ }
2723
+ },
2703
2724
  resolveSpeakerContext: (userId) => this.params.receive.resolveDiscordVoiceIngressContext(entry, userId)
2704
2725
  });
2705
2726
  const generation = entry.realtimeLifecycle.generation + 1;
@@ -2813,6 +2834,7 @@ var DiscordVoiceManager = class {
2813
2834
  this.fatalAutoJoinFailures = /* @__PURE__ */ new Map();
2814
2835
  this.occupancyWatchers = /* @__PURE__ */ new Set();
2815
2836
  this.destroyed = false;
2837
+ this.abort = new AbortController();
2816
2838
  this.client = params.client;
2817
2839
  this.readPolicy = params.readPolicy;
2818
2840
  this.botUserId = params.botUserId;
@@ -2869,6 +2891,8 @@ var DiscordVoiceManager = class {
2869
2891
  });
2870
2892
  this.voiceSessions = new DiscordVoiceSessions({
2871
2893
  ...params,
2894
+ signal: this.abort.signal,
2895
+ isSessionGenerationCurrent: (entry) => this.guildLifecycles.get(entry.guildId)?.generation === entry.generation,
2872
2896
  botUserId: () => this.botUserId,
2873
2897
  destroyed: () => this.destroyed,
2874
2898
  getTranscripts: this.getTranscripts,
@@ -3202,6 +3226,7 @@ var DiscordVoiceManager = class {
3202
3226
  }
3203
3227
  async destroy() {
3204
3228
  this.destroyed = true;
3229
+ this.abort.abort(/* @__PURE__ */ new Error("Discord voice manager stopped"));
3205
3230
  this.occupancyWatchers.clear();
3206
3231
  const followingStopped = this.following.destroy();
3207
3232
  for (const entry of this.sessions.values()) entry.stop();
@@ -1,2 +1 @@
1
- import { t as handleDiscordAction } from "./.setup/runtime-CRTkKU1G.mjs";
2
- export { handleDiscordAction };
1
+ export { t as handleDiscordAction } from "./.setup/runtime-C665qrc0.mjs";
@@ -2,7 +2,7 @@ import { l as resolveDiscordAccount } from "./.setup/accounts-ljrzXBJi.mjs";
2
2
  import { D as getDiscordEndpointRuntime } from "./.setup/allow-list-B_ToXtew.mjs";
3
3
  import { n as resolveDiscordChannelId$1 } from "./.setup/target-parsing-C-HyNxcE.mjs";
4
4
  import { S as parseDiscordActivityCustomId, i as buildDiscordPresentationComponents } from "./.setup/components-HN9052L1.mjs";
5
- import { r as sendDiscordComponentMessage } from "./.setup/send.components-FxOS3CeP.mjs";
5
+ import { r as sendDiscordComponentMessage } from "./.setup/send.components-DdUmsN5C.mjs";
6
6
  import { r as setDiscordActivitiesRuntime, t as DiscordActivitiesRuntime } from "./.setup/runtime-DPm3gZXk.mjs";
7
7
  import { asOptionalRecord, normalizeBoundedOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
8
8
  import { randomBytes } from "node:crypto";
package/dist/api.js CHANGED
@@ -7,19 +7,19 @@ import { n as resolveDiscordTarget } from "./.setup/target-resolver-Bse8fuTi.mjs
7
7
  import { 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 "./.setup/timeouts-CuNARfyw.mjs";
8
8
  import "./.setup/targets-DZJjkzwv.mjs";
9
9
  import { D as parseDiscordModalCustomIdForInteraction, E as parseDiscordModalCustomId, T as parseDiscordComponentCustomIdForInteraction, _ as DISCORD_COMPONENT_CUSTOM_ID_KEY, b as buildDiscordComponentCustomId, d as buildDiscordComponentMessage, f as buildDiscordComponentMessageFlags, g as resolveDiscordComponentAttachmentName, h as readDiscordComponentSpec, l as DiscordFormModal, n as formatDiscordComponentEventText, p as DISCORD_COMPONENT_ATTACHMENT_PREFIX, r as buildDiscordInteractiveComponents, u as createDiscordFormModal, v as DISCORD_MODAL_CUSTOM_ID_KEY, w as parseDiscordComponentCustomId, x as buildDiscordModalCustomId } from "./.setup/components-HN9052L1.mjs";
10
- import { D as isDiscordExecApprovalClientEnabled, E as isDiscordExecApprovalApprover, O as shouldSuppressLocalDiscordExecApprovalPrompt, T as getDiscordExecApprovalApprovers } from "./.setup/outbound-session-route-B0Hpwn3Q.mjs";
11
- import { i as resolveDiscordGroupToolPolicy, n as collectDiscordStatusIssues, r as resolveDiscordGroupRequireMention, t as discordPlugin } from "./.setup/channel-DI7DMzu0.mjs";
10
+ import { D as isDiscordExecApprovalClientEnabled, E as isDiscordExecApprovalApprover, O as shouldSuppressLocalDiscordExecApprovalPrompt, T as getDiscordExecApprovalApprovers } from "./.setup/outbound-session-route-CM6i691P.mjs";
11
+ import { i as resolveDiscordGroupToolPolicy, n as collectDiscordStatusIssues, r as resolveDiscordGroupRequireMention, t as discordPlugin } from "./.setup/channel-1Z1mnB_P.mjs";
12
12
  import { t as normalizeExplicitDiscordSessionKey } from "./.setup/session-key-normalization-CCHGNSQw.mjs";
13
- import { t as discordSetupPlugin } from "./.setup/channel.setup-DdFVN1mr.mjs";
14
- import { n as handleDiscordSubagentEnded, t as handleDiscordSubagentDeliveryTarget } from "./.setup/subagent-hooks-CME7dSGf.mjs";
15
- import { t as tryHandleDiscordMessageActionGuildAdmin } from "./.setup/handle-action.guild-admin-CHKW6PIs.mjs";
13
+ import { t as discordSetupPlugin } from "./.setup/channel.setup-B3KEh05g.mjs";
14
+ import { n as handleDiscordSubagentEnded, t as handleDiscordSubagentDeliveryTarget } from "./.setup/subagent-hooks-D2QDvcXg.mjs";
15
+ import { t as tryHandleDiscordMessageActionGuildAdmin } from "./.setup/handle-action.guild-admin-CdwwzmP_.mjs";
16
16
  import { n as listDiscordDirectoryGroupsFromConfig, r as listDiscordDirectoryPeersFromConfig } from "./.setup/directory-config-3iVub-3m.mjs";
17
17
  import { t as fetchPluralKitMessageInfo } from "./.setup/pluralkit-B64dfq_j.mjs";
18
18
  import { i as probeDiscord, n as fetchDiscordApplicationSummary, r as parseApplicationIdFromToken, s as resolveDiscordPrivilegedIntentsFromFlags, t as fetchDiscordApplicationId } from "./.setup/probe-D3P1x4aN.mjs";
19
19
  import { t as collectDiscordSecurityAuditFindings } from "./.setup/security-audit-BFT84Uny.mjs";
20
20
  import { resolveOpenProviderRuntimeGroupPolicy as resolveDiscordRuntimeGroupPolicy } from "openclaw/plugin-sdk/runtime-group-policy";
21
21
  //#region extensions/discord/api.ts
22
- const handleDiscordMessageAction = async (...args) => (await import("./.setup/handle-action-CXH1h1tq.mjs")).handleDiscordMessageAction(...args);
22
+ const handleDiscordMessageAction = async (...args) => (await import("./.setup/handle-action-B4l4tVxj.mjs")).handleDiscordMessageAction(...args);
23
23
  /**
24
24
  * @deprecated Shipped `@openclaw/discord/api` compatibility only. Use native
25
25
  * `AbortSignal.any` after filtering optional signals. Removal with the next
@@ -1,2 +1 @@
1
- import { t as DiscordChannelConfigSchema } from "./.setup/config-schema-_uBILpQf.mjs";
2
- export { DiscordChannelConfigSchema };
1
+ export { t as DiscordChannelConfigSchema } from "./.setup/config-schema-_uBILpQf.mjs";
@@ -1,2 +1 @@
1
- import { t as discordPlugin } from "./.setup/channel-DI7DMzu0.mjs";
2
- export { discordPlugin };
1
+ export { t as discordPlugin } from "./.setup/channel-1Z1mnB_P.mjs";
@@ -1,2 +1 @@
1
- import { t as deriveLegacySessionChatType } from "./.setup/session-contract-BO5tlIdl.mjs";
2
- export { deriveLegacySessionChatType };
1
+ export { t as deriveLegacySessionChatType } from "./.setup/session-contract-BO5tlIdl.mjs";
@@ -2,22 +2,22 @@ import { b as shouldEmitDiscordReactionNotification, c as resolveDiscordChannelC
2
2
  import { G as unregisterGateway, H as clearGateways, S as hasAllGuildPermissionsDiscord, U as getGateway, W as registerGateway, b as fetchChannelPermissionsDiscord, g as DiscordSendError, w as hasAnyGuildPermissionDiscord, x as fetchMemberGuildPermissionsDiscord } from "./.setup/send.shared-CjQ4jbMA.mjs";
3
3
  import { i as setPresence, n as getPresence, r as presenceCacheSize, t as clearPresences } from "./.setup/presence-cache-DCeTsL73.mjs";
4
4
  import { n as listDiscordDirectoryGroupsLive, r as listDiscordDirectoryPeersLive } from "./.setup/directory-live-DLygQVtW.mjs";
5
- import { A as listScheduledEventsDiscord, B as moveChannelDiscord, C as fetchChannelInfoDiscord, D as fetchVoiceStatusDiscord, E as fetchRoleInfoDiscord, F as uploadEmojiDiscord, H as setChannelPermissionDiscord, I as uploadStickerDiscord, L as createChannelDiscord, M as resolveEventCoverImage, N as timeoutMemberDiscord, O as kickMemberDiscord, P as listGuildEmojisDiscord, R as deleteChannelDiscord, S as createScheduledEventDiscord, T as fetchMemberInfoDiscord, V as removeChannelPermissionDiscord, _ as readMessagesDiscord, a as removeReactionDiscord, b as addRoleDiscord, c as sendWebhookMessageDiscord, d as deleteMessageDiscord, f as editMessageDiscord, g as pinMessageDiscord, h as listThreadsDiscord, i as removeOwnReactionsDiscord, j as removeRoleDiscord, k as listGuildChannelsDiscord, m as listPinsDiscord, n as fetchReactionsDiscord, o as sendTypingDiscord, p as fetchMessageDiscord, r as reactMessageDiscord, s as sendVoiceMessageDiscord, u as createThreadDiscord, v as searchMessagesDiscord, x as banMemberDiscord, y as unpinMessageDiscord, z as editChannelDiscord } from "./.setup/send-DbILKgcm.mjs";
6
- import { n as sendPollDiscord, r as sendStickerDiscord, t as sendMessageDiscord } from "./.setup/send.outbound-_jx4Xpd3.mjs";
5
+ import { A as listScheduledEventsDiscord, B as moveChannelDiscord, C as fetchChannelInfoDiscord, D as fetchVoiceStatusDiscord, E as fetchRoleInfoDiscord, F as uploadEmojiDiscord, H as setChannelPermissionDiscord, I as uploadStickerDiscord, L as createChannelDiscord, M as resolveEventCoverImage, N as timeoutMemberDiscord, O as kickMemberDiscord, P as listGuildEmojisDiscord, R as deleteChannelDiscord, S as createScheduledEventDiscord, T as fetchMemberInfoDiscord, V as removeChannelPermissionDiscord, _ as readMessagesDiscord, a as removeReactionDiscord, b as addRoleDiscord, c as sendWebhookMessageDiscord, d as deleteMessageDiscord, f as editMessageDiscord, g as pinMessageDiscord, h as listThreadsDiscord, i as removeOwnReactionsDiscord, j as removeRoleDiscord, k as listGuildChannelsDiscord, m as listPinsDiscord, n as fetchReactionsDiscord, o as sendTypingDiscord, p as fetchMessageDiscord, r as reactMessageDiscord, s as sendVoiceMessageDiscord, u as createThreadDiscord, v as searchMessagesDiscord, x as banMemberDiscord, y as unpinMessageDiscord, z as editChannelDiscord } from "./.setup/send-DXma62sY.mjs";
6
+ import { n as sendPollDiscord, r as sendStickerDiscord, t as sendMessageDiscord } from "./.setup/send.outbound-D_ctMh-S.mjs";
7
7
  import { a as isAbortError, c as runDiscordTaskWithTimeout, i as DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, n as DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, o as normalizeDiscordInboundWorkerTimeoutMs, r as DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, s as normalizeDiscordListenerTimeoutMs, t as DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS } from "./.setup/timeouts-CuNARfyw.mjs";
8
- import { c as readDiscordChannelMoveParams, i as requiredGuildPermissionForModerationAction, l as readDiscordParentIdParam, n as isDiscordModerationAction, o as readDiscordChannelCreateParams, r as readDiscordModerationCommand, s as readDiscordChannelEditParams, t as handleDiscordAction } from "./.setup/runtime-CRTkKU1G.mjs";
9
- import { n as registerBuiltDiscordComponentMessage, r as sendDiscordComponentMessage, t as editDiscordComponentMessage } from "./.setup/send.components-FxOS3CeP.mjs";
8
+ import { c as readDiscordChannelMoveParams, i as requiredGuildPermissionForModerationAction, l as readDiscordParentIdParam, n as isDiscordModerationAction, o as readDiscordChannelCreateParams, r as readDiscordModerationCommand, s as readDiscordChannelEditParams, t as handleDiscordAction } from "./.setup/runtime-C665qrc0.mjs";
9
+ import { n as registerBuiltDiscordComponentMessage, r as sendDiscordComponentMessage, t as editDiscordComponentMessage } from "./.setup/send.components-DdUmsN5C.mjs";
10
10
  import { r as setDiscordRuntime } from "./.setup/runtime-DgnVQ7zW.mjs";
11
- import { t as resolveDiscordOutboundSessionRoute, v as discordMessageActions } from "./.setup/outbound-session-route-B0Hpwn3Q.mjs";
11
+ import { t as resolveDiscordOutboundSessionRoute, v as discordMessageActions } from "./.setup/outbound-session-route-CM6i691P.mjs";
12
12
  import { F as resolveThreadBindingMaxAgeMs, M as resolveThreadBindingIdleTimeoutMs, N as resolveThreadBindingInactivityExpiresAt, P as resolveThreadBindingMaxAgeExpiresAt, r as setThreadBindingMaxAgeBySessionKey, t as setThreadBindingIdleTimeoutBySessionKey } from "./.setup/thread-bindings.session-updates-DGSljVf6.mjs";
13
13
  import { t as resolveDiscordChannelAllowlist } from "./.setup/resolve-channels-UdT38DzU.mjs";
14
14
  import { t as resolveDiscordUserAllowlist } from "./.setup/resolve-users-DnCsrXZ_.mjs";
15
- import { c as resolveThreadBindingPersonaFromRecord, i as createNoopThreadBindingManager, n as getThreadBindingManager, s as resolveThreadBindingPersona, t as createThreadBindingManager } from "./.setup/thread-bindings.manager-CdNa6UIs.mjs";
16
- import { a as autoBindSpawnedDiscordSubagent, c as reconcileAcpThreadBindingsOnStartup, d as resolveDiscordThreadBindingIdleTimeoutMs, f as resolveDiscordThreadBindingMaxAgeMs, l as unbindThreadBindingsBySessionKey, n as resolveThreadBindingIntroText, o as listThreadBindingsBySessionKey, p as resolveThreadBindingsEnabled, r as resolveThreadBindingThreadName, s as listThreadBindingsForAccount, t as formatThreadBindingDurationLabel } from "./.setup/thread-bindings-0hPTSK14.mjs";
15
+ import { c as resolveThreadBindingPersonaFromRecord, i as createNoopThreadBindingManager, n as getThreadBindingManager, s as resolveThreadBindingPersona, t as createThreadBindingManager } from "./.setup/thread-bindings.manager-Cqml5pUh.mjs";
16
+ import { a as autoBindSpawnedDiscordSubagent, c as reconcileAcpThreadBindingsOnStartup, d as resolveDiscordThreadBindingIdleTimeoutMs, f as resolveDiscordThreadBindingMaxAgeMs, l as unbindThreadBindingsBySessionKey, n as resolveThreadBindingIntroText, o as listThreadBindingsBySessionKey, p as resolveThreadBindingsEnabled, r as resolveThreadBindingThreadName, s as listThreadBindingsForAccount, t as formatThreadBindingDurationLabel } from "./.setup/thread-bindings-Blhv7XV8.mjs";
17
17
  import { i as probeDiscord, n as fetchDiscordApplicationSummary, r as parseApplicationIdFromToken, s as resolveDiscordPrivilegedIntentsFromFlags, t as fetchDiscordApplicationId } from "./.setup/probe-D3P1x4aN.mjs";
18
- import { r as collectDiscordAuditChannelIds, t as auditDiscordChannelPermissions } from "./.setup/audit-zSawfbsN.mjs";
19
- import { S as createDiscordNativeCommand, a as waitForDiscordGatewayPluginRegistration, i as resolveDiscordGatewayIntents, k as registerDiscordListener, r as createDiscordGatewayPlugin, t as monitorDiscordProvider } from "./.setup/provider-D9EzOfG8.mjs";
20
- import { f as resolveDiscordReplyTarget, g as sanitizeDiscordThreadName } from "./.setup/transcripts-source-0qQYVu2H.mjs";
21
- import { t as createDiscordMessageHandler } from "./.setup/message-handler-Ii_etru1.mjs";
22
- import "./.setup/threading-BKe3E3tp.mjs";
18
+ import { r as collectDiscordAuditChannelIds, t as auditDiscordChannelPermissions } from "./.setup/audit-Bpu7xst9.mjs";
19
+ import { S as createDiscordNativeCommand, a as waitForDiscordGatewayPluginRegistration, i as resolveDiscordGatewayIntents, k as registerDiscordListener, r as createDiscordGatewayPlugin, t as monitorDiscordProvider } from "./.setup/provider-B9drnVwM.mjs";
20
+ import { f as resolveDiscordReplyTarget, g as sanitizeDiscordThreadName } from "./.setup/transcripts-source-EMrQb132.mjs";
21
+ import { t as createDiscordMessageHandler } from "./.setup/message-handler-BbwzASGH.mjs";
22
+ import "./.setup/threading-BWz5lW0p.mjs";
23
23
  export { DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS, DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, DiscordSendError, addRoleDiscord, allowListMatches, auditDiscordChannelPermissions, autoBindSpawnedDiscordSubagent, banMemberDiscord, clearGateways, clearPresences, collectDiscordAuditChannelIds, createChannelDiscord, createDiscordGatewayPlugin, createDiscordMessageHandler, createDiscordNativeCommand, createNoopThreadBindingManager, createScheduledEventDiscord, createThreadBindingManager, createThreadDiscord, deleteChannelDiscord, deleteMessageDiscord, discordMessageActions, editChannelDiscord, editDiscordComponentMessage, editMessageDiscord, fetchChannelInfoDiscord, fetchChannelPermissionsDiscord, fetchDiscordApplicationId, fetchDiscordApplicationSummary, fetchMemberGuildPermissionsDiscord, fetchMemberInfoDiscord, fetchMessageDiscord, fetchReactionsDiscord, fetchRoleInfoDiscord, fetchVoiceStatusDiscord, formatThreadBindingDurationLabel, getGateway, getPresence, getThreadBindingManager, handleDiscordAction, hasAllGuildPermissionsDiscord, hasAnyGuildPermissionDiscord, isAbortError, isDiscordGroupAllowedByPolicy, isDiscordModerationAction, kickMemberDiscord, listDiscordDirectoryGroupsLive, listDiscordDirectoryPeersLive, listGuildChannelsDiscord, listGuildEmojisDiscord, listPinsDiscord, listScheduledEventsDiscord, listThreadBindingsBySessionKey, listThreadBindingsForAccount, listThreadsDiscord, monitorDiscordProvider, moveChannelDiscord, normalizeDiscordAllowList, normalizeDiscordInboundWorkerTimeoutMs, normalizeDiscordListenerTimeoutMs, normalizeDiscordSlug, parseApplicationIdFromToken, pinMessageDiscord, presenceCacheSize, probeDiscord, reactMessageDiscord, readDiscordChannelCreateParams, readDiscordChannelEditParams, readDiscordChannelMoveParams, readDiscordModerationCommand, readDiscordParentIdParam, readMessagesDiscord, reconcileAcpThreadBindingsOnStartup, registerBuiltDiscordComponentMessage, registerDiscordListener, registerGateway, removeChannelPermissionDiscord, removeOwnReactionsDiscord, removeReactionDiscord, removeRoleDiscord, requiredGuildPermissionForModerationAction, resolveDiscordChannelAllowlist, resolveDiscordChannelConfig, resolveDiscordChannelConfigWithFallback, resolveDiscordCommandAuthorized, resolveDiscordGatewayIntents, resolveDiscordGuildEntry, resolveDiscordOutboundSessionRoute, resolveDiscordPrivilegedIntentsFromFlags, resolveDiscordReplyTarget, resolveDiscordShouldRequireMention, resolveDiscordThreadBindingIdleTimeoutMs, resolveDiscordThreadBindingMaxAgeMs, resolveDiscordUserAllowlist, resolveEventCoverImage, resolveGroupDmAllow, resolveThreadBindingIdleTimeoutMs, resolveThreadBindingInactivityExpiresAt, resolveThreadBindingIntroText, resolveThreadBindingMaxAgeExpiresAt, resolveThreadBindingMaxAgeMs, resolveThreadBindingPersona, resolveThreadBindingPersonaFromRecord, resolveThreadBindingThreadName, resolveThreadBindingsEnabled, runDiscordTaskWithTimeout, sanitizeDiscordThreadName, searchMessagesDiscord, sendDiscordComponentMessage, sendMessageDiscord, sendPollDiscord, sendStickerDiscord, sendTypingDiscord, sendVoiceMessageDiscord, sendWebhookMessageDiscord, setChannelPermissionDiscord, setDiscordRuntime, setPresence, setThreadBindingIdleTimeoutBySessionKey, setThreadBindingMaxAgeBySessionKey, shouldEmitDiscordReactionNotification, timeoutMemberDiscord, unbindThreadBindingsBySessionKey, unpinMessageDiscord, unregisterGateway, uploadEmojiDiscord, uploadStickerDiscord, waitForDiscordGatewayPluginRegistration };
@@ -1,2 +1 @@
1
- import { r as setDiscordRuntime } from "./.setup/runtime-DgnVQ7zW.mjs";
2
- export { setDiscordRuntime };
1
+ export { r as setDiscordRuntime } from "./.setup/runtime-DgnVQ7zW.mjs";
@@ -1,2 +1 @@
1
- import { r as secretTargetRegistryEntries, t as collectRuntimeConfigAssignments } from "./.setup/secret-config-contract-CIsH7R3B.mjs";
2
- export { collectRuntimeConfigAssignments, secretTargetRegistryEntries };
1
+ export { t as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./.setup/secret-config-contract-CIsH7R3B.mjs";
@@ -1,2 +1 @@
1
- import { t as collectDiscordSecurityAuditFindings } from "./.setup/security-audit-BFT84Uny.mjs";
2
- export { collectDiscordSecurityAuditFindings };
1
+ export { t as collectDiscordSecurityAuditFindings } from "./.setup/security-audit-BFT84Uny.mjs";
@@ -1,2 +1 @@
1
- import { n as unsupportedSecretRefSurfacePatterns, t as collectUnsupportedSecretRefConfigCandidates } from "./.setup/security-contract-DNyyjTZZ.mjs";
2
- export { collectUnsupportedSecretRefConfigCandidates, unsupportedSecretRefSurfacePatterns };
1
+ export { t as collectUnsupportedSecretRefConfigCandidates, n as unsupportedSecretRefSurfacePatterns } from "./.setup/security-contract-DNyyjTZZ.mjs";
@@ -1,2 +1 @@
1
- import { t as normalizeExplicitDiscordSessionKey } from "./.setup/session-key-normalization-CCHGNSQw.mjs";
2
- export { normalizeExplicitDiscordSessionKey };
1
+ export { t as normalizeExplicitDiscordSessionKey } from "./.setup/session-key-normalization-CCHGNSQw.mjs";
@@ -4,7 +4,7 @@ import { fileURLToPath } from "node:url";
4
4
  var setup_entry_default = defineBundledChannelSetupEntry({
5
5
  importMetaUrl: import.meta.url,
6
6
  plugin: {
7
- specifier: fileURLToPath(new URL(".setup/setup-plugin-api-xfOFmxHP.mjs", import.meta.url).href),
7
+ specifier: fileURLToPath(new URL(".setup/setup-plugin-api-BFl2FljJ.mjs", import.meta.url).href),
8
8
  exportName: "discordSetupPlugin"
9
9
  }
10
10
  });
@@ -1,2 +1 @@
1
- import { t as discordSetupPlugin } from "./.setup/channel.setup-DdFVN1mr.mjs";
2
- export { discordSetupPlugin };
1
+ export { t as discordSetupPlugin } from "./.setup/channel.setup-B3KEh05g.mjs";
@@ -1,6 +1,6 @@
1
1
  import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
2
2
  //#region extensions/discord/subagent-hooks-api.ts
3
- const loadDiscordSubagentHooksModule = createLazyRuntimeModule(() => import("./.setup/subagent-hooks-CME7dSGf.mjs").then((n) => n.r));
3
+ const loadDiscordSubagentHooksModule = createLazyRuntimeModule(() => import("./.setup/subagent-hooks-D2QDvcXg.mjs").then((n) => n.r));
4
4
  function registerDiscordSubagentHooks(api) {
5
5
  api.on("subagent_ended", async (event) => {
6
6
  const { handleDiscordSubagentEnded } = await loadDiscordSubagentHooksModule();
@@ -1,2 +1 @@
1
- import { t as defaultTopLevelPlacement } from "./.setup/thread-binding-api-BDZJD4na.mjs";
2
- export { defaultTopLevelPlacement };
1
+ export { t as defaultTopLevelPlacement } from "./.setup/thread-binding-api-BDZJD4na.mjs";
@@ -1,4 +1,4 @@
1
- import { n as discordVoiceTranscriptsSourceProvider } from "./.setup/transcripts-source-0qQYVu2H.mjs";
1
+ import { n as discordVoiceTranscriptsSourceProvider } from "./.setup/transcripts-source-EMrQb132.mjs";
2
2
  //#region extensions/discord/transcripts-source-api.ts
3
3
  function registerDiscordTranscriptSourceProvider(api) {
4
4
  api.registerTranscriptSourceProvider(discordVoiceTranscriptsSourceProvider);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/discord",
3
- "version": "2026.10.5-beta.4",
3
+ "version": "2026.10.6",
4
4
  "description": "OpenClaw Discord channel plugin for channels, DMs, commands, and app events.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -19,7 +19,7 @@
19
19
  "zod": "4.6.5"
20
20
  },
21
21
  "peerDependencies": {
22
- "openclaw": ">=2026.10.5-beta.4"
22
+ "openclaw": ">=2026.10.6"
23
23
  },
24
24
  "peerDependenciesMeta": {
25
25
  "openclaw": {
@@ -95,14 +95,14 @@
95
95
  "allowInvalidConfigRecovery": true
96
96
  },
97
97
  "compat": {
98
- "pluginApi": ">=2026.10.5-beta.4"
98
+ "pluginApi": ">=2026.10.6"
99
99
  },
100
100
  "build": {
101
101
  "bundledDist": false,
102
102
  "workerEntries": [
103
103
  "./src/voice/audio-worker.runtime.ts"
104
104
  ],
105
- "openclawVersion": "2026.10.5-beta.4",
105
+ "openclawVersion": "2026.10.6",
106
106
  "staticAssets": [
107
107
  {
108
108
  "source": "./assets/embedded-app-sdk.mjs",
@@ -1,2 +0,0 @@
1
- import { t as monitorDiscordProvider } from "./provider-D9EzOfG8.mjs";
2
- export { monitorDiscordProvider };
@@ -1,3 +0,0 @@
1
- import { t as discordSetupPlugin } from "./channel.setup-DdFVN1mr.mjs";
2
- import "../setup-plugin-api.js";
3
- export { discordSetupPlugin };