@openclaw/discord 2026.10.1-beta.2 → 2026.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/.setup/{account-inspect-CjKqkDnH.mjs → account-inspect-DsER5ILV.mjs} +2 -2
  2. package/dist/.setup/{channel-type-D1_b5UhU.mjs → allow-list-vxkG9_JD.mjs} +6 -6
  3. package/dist/.setup/{api-_oznjffB.mjs → api-DlNUkDqj.mjs} +3 -3
  4. package/dist/.setup/{approval-handler.runtime-BilYSrRF.mjs → approval-handler.runtime-DmnEa54W.mjs} +8 -8
  5. package/dist/.setup/{approval-message-updates-CgRwc2_Q.mjs → approval-message-updates-B0jdSqOj.mjs} +2 -2
  6. package/dist/.setup/{audit-DtvzxONM.mjs → audit-BpikUwN_.mjs} +4 -4
  7. package/dist/.setup/{channel-z5lQMS_9.mjs → channel-Dr-AUnGt.mjs} +23 -23
  8. package/dist/.setup/{channel.setup-DBJtugJO.mjs → channel.setup-BmNvkidb.mjs} +5 -5
  9. package/dist/.setup/{components-CzXLR3QH.mjs → components-DLJR0xU-.mjs} +2 -2
  10. package/dist/.setup/{conversation-binding-route-Bi62ApSt.mjs → conversation-binding-route-DicJC1Lj.mjs} +1 -1
  11. package/dist/.setup/{directory-config-BH1LA-gi.mjs → directory-config-gqsdcplU.mjs} +1 -1
  12. package/dist/.setup/{directory-live-C9xz7IPm.mjs → directory-live-Bipr0eUJ.mjs} +3 -3
  13. package/dist/.setup/{discord-J7aRzq2Q.mjs → discord-9gysrhzp.mjs} +10 -10
  14. package/dist/.setup/{doctor-DxSAngJq.mjs → doctor-B2bskDcF.mjs} +4 -4
  15. package/dist/.setup/{handle-action-DlmFX-_G.mjs → handle-action-UmkjXBfo.mjs} +8 -8
  16. package/dist/.setup/{handle-action.guild-admin-BnyqTczR.mjs → handle-action.guild-admin-CB4sc9VV.mjs} +2 -2
  17. package/dist/.setup/{live-policy-config-emmPNyh4.mjs → live-policy-config-VxexfRKo.mjs} +1 -1
  18. package/dist/.setup/{message-handler-BNToPZrx.mjs → message-handler-BK69A-NB.mjs} +13 -13
  19. package/dist/.setup/{message-handler.preflight-D0BcCyI7.mjs → message-handler.preflight-DFpsh90H.mjs} +17 -17
  20. package/dist/.setup/{message-handler.preflight-pluralkit-D1g3eq0B.mjs → message-handler.preflight-pluralkit-BXGGVmpe.mjs} +7 -7
  21. package/dist/.setup/{message-handler.process-CThRmCWK.mjs → message-handler.process-TKoqcqIP.mjs} +21 -21
  22. package/dist/.setup/{outbound-adapter-BPq0c2wY.mjs → outbound-adapter-D4wRAb5S.mjs} +9 -9
  23. package/dist/.setup/{outbound-session-route-DGPPKA0z.mjs → outbound-session-route-BvBH4LC6.mjs} +13 -13
  24. package/dist/.setup/{probe-DIRY8vh7.mjs → probe-BwSKpnZf.mjs} +4 -4
  25. package/dist/.setup/{provider-D2OKMo0f.mjs → provider-YP8gN9_o.mjs} +74 -74
  26. package/dist/.setup/{provider-session.runtime-BupCTZQv.mjs → provider-session.runtime-D1gkPxHT.mjs} +3 -3
  27. package/dist/.setup/provider.runtime-CZ51OIgD.mjs +2 -0
  28. package/dist/.setup/{realtime-session.runtime-D5RSC8Mm.mjs → realtime-session.runtime-BKUQBy1u.mjs} +19 -19
  29. package/dist/.setup/{resolve-allowlist-common-DUYRrrVB.mjs → resolve-allowlist-common-BUyU3C-T.mjs} +3 -3
  30. package/dist/.setup/{resolve-channels--MUatisx.mjs → resolve-channels-DA6QlhZN.mjs} +3 -3
  31. package/dist/.setup/{resolve-users-CxLcDmM0.mjs → resolve-users-DNrwvunm.mjs} +2 -2
  32. package/dist/.setup/{runtime-CwUA0RLr.mjs → runtime-CESTexGn.mjs} +12 -12
  33. package/dist/.setup/{runtime-CerRBfaa.mjs → runtime-DPcmPST9.mjs} +2 -2
  34. package/dist/.setup/{send-2X7m2Zmw.mjs → send-CJk3VP5q.mjs} +16 -16
  35. package/dist/.setup/{send.components-RqvgmCs3.mjs → send.components-dPljuV24.mjs} +7 -7
  36. package/dist/.setup/{send.outbound-B4QHSEzm.mjs → send.outbound-rOboMO_6.mjs} +8 -8
  37. package/dist/.setup/{retry-BKzO25k4.mjs → send.receipt-DVOg2Oaw.mjs} +203 -203
  38. package/dist/.setup/{send.shared-BQIUh6Vn.mjs → send.shared-C4CN24D9.mjs} +40 -40
  39. package/dist/.setup/{sender-identity-CooeYfAn.mjs → sender-identity-AHpUNr72.mjs} +1 -1
  40. package/dist/.setup/setup-plugin-api-BVlCz3fm.mjs +3 -0
  41. package/dist/.setup/{shared-CIJn6AEC.mjs → shared-BoBnM5kM.mjs} +7 -7
  42. package/dist/.setup/{subagent-hooks-BYlVnxzy.mjs → subagent-hooks-HH8Uy9cx.mjs} +2 -2
  43. package/dist/.setup/{system-events-CQ3if_pS.mjs → system-events-Cwxaww8i.mjs} +2 -2
  44. package/dist/.setup/{target-resolver-Dzxf80Y3.mjs → target-resolver-CSFoPQ12.mjs} +3 -3
  45. package/dist/.setup/targets-bqXQENmX.mjs +3 -0
  46. package/dist/.setup/{thread-bindings-yNNlcUWE.mjs → thread-bindings-DjQCkmsd.mjs} +4 -4
  47. package/dist/.setup/{thread-bindings.manager-plk0zJAW.mjs → thread-bindings.manager-D2-GYZ5s.mjs} +10 -10
  48. package/dist/.setup/{transcripts-source-CNWswry-.mjs → transcripts-source-CaZQnGRH.mjs} +18 -18
  49. package/dist/.setup/{voice-runtime-Bc75quiH.mjs → voice-runtime-DDymtIw8.mjs} +46 -46
  50. package/dist/account-inspect-api.js +1 -1
  51. package/dist/action-runtime-api.js +1 -1
  52. package/dist/activities-api.js +788 -1
  53. package/dist/api.js +15 -15
  54. package/dist/channel-config-api.js +1 -1
  55. package/dist/channel-plugin-api.js +1 -1
  56. package/dist/directory-contract-api.js +1 -1
  57. package/dist/index.js +9 -5
  58. package/dist/runtime-api.js +20 -20
  59. package/dist/setup-entry.js +1 -1
  60. package/dist/setup-plugin-api.js +1 -1
  61. package/dist/src/voice/audio-worker.runtime.js +3 -3
  62. package/dist/subagent-hooks-api.js +1 -1
  63. package/dist/transcripts-source-api.js +1 -1
  64. package/package.json +4 -4
  65. package/dist/.setup/activities-api-BL_hJ0JQ.mjs +0 -789
  66. package/dist/.setup/provider.runtime-BaW_JnfU.mjs +0 -2
  67. package/dist/.setup/setup-plugin-api-nn_giXvZ.mjs +0 -3
  68. package/dist/.setup/targets-Lf8D55w-.mjs +0 -3
  69. package/dist/.setup/{accounts-DXHCL8Zm.mjs → accounts-HE9-mj1L.mjs} +2 -2
  70. package/dist/.setup/{config-schema-CsemBDpS.mjs → config-schema-BQWfnSCx.mjs} +1 -1
  71. package/dist/.setup/{receive-recovery-GqF2PUN_.mjs → receive-recovery-DgkX7Qvi.mjs} +2 -2
  72. package/dist/.setup/{thread-bindings.session-updates-C9aKtVs6.mjs → thread-bindings.session-updates-Bu_CGr_O.mjs} +2 -2
@@ -1,19 +1,19 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.mjs";
2
- import { C as withDiscordRequestAuthority, dt as getChannel, nt as createChannelWebhook } from "./discord-J7aRzq2Q.mjs";
3
- import { t as isDiscordThreadChannelType } from "./channel-type-D1_b5UhU.mjs";
4
- import { t as canFallbackDiscordWebhookSend, x as resolveDiscordChannelId } from "./retry-BKzO25k4.mjs";
5
- import { N as createDiscordRestClient } from "./send.shared-BQIUh6Vn.mjs";
6
- import { t as sendMessageDiscord } from "./send.outbound-B4QHSEzm.mjs";
2
+ import { A as isDiscordThreadChannelType } from "./allow-list-vxkG9_JD.mjs";
3
+ import { P as createDiscordRestClient } from "./send.shared-C4CN24D9.mjs";
4
+ import { C as withDiscordRequestAuthority, tt as createChannelWebhook, ut as getChannel } from "./discord-9gysrhzp.mjs";
5
+ import { h as canFallbackDiscordWebhookSend, m as resolveDiscordChannelId } from "./send.receipt-DVOg2Oaw.mjs";
6
+ import { c as sendWebhookMessageDiscord, u as createThreadDiscord } from "./send-CJk3VP5q.mjs";
7
+ import { t as sendMessageDiscord } from "./send.outbound-rOboMO_6.mjs";
8
+ 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 snapshotThreadBindingJson, 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-Bu_CGr_O.mjs";
7
9
  import { n as resolveDiscordChannelInfoSafe, t as resolveDiscordChannelIdSafe } from "./channel-access-BRp3Y-rF.mjs";
8
- import { c as sendWebhookMessageDiscord, u as createThreadDiscord } from "./send-2X7m2Zmw.mjs";
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 snapshotThreadBindingJson, 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-C9aKtVs6.mjs";
10
+ import { createSubsystemLogger, logVerbose } from "openclaw/plugin-sdk/runtime-env";
10
11
  import { asOptionalObjectRecord, normalizeOptionalString, normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/string-coerce-runtime";
11
- import { parseStrictNonNegativeInteger as parseStrictNonNegativeInteger$1 } from "openclaw/plugin-sdk/number-runtime";
12
12
  import { normalizeAccountId } from "openclaw/plugin-sdk/routing";
13
13
  import { getRuntimeConfigSnapshot } from "openclaw/plugin-sdk/runtime-config-snapshot";
14
- import { createSubsystemLogger, logVerbose } from "openclaw/plugin-sdk/runtime-env";
15
- import { truncateUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
14
+ import { parseStrictNonNegativeInteger as parseStrictNonNegativeInteger$1 } from "openclaw/plugin-sdk/number-runtime";
16
15
  import { SYSTEM_MARK } from "openclaw/plugin-sdk/text-chunking";
16
+ import { truncateUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
17
17
  import { registerSessionBindingAdapter, resolveThreadBindingConversationIdFromBindingId, resolveThreadBindingFarewellText, resolveThreadBindingThreadName, unregisterSessionBindingAdapter } from "openclaw/plugin-sdk/conversation-runtime";
18
18
  import { resolveSessionAgentIdStrict } from "openclaw/plugin-sdk/agent-scope-runtime";
19
19
  //#region extensions/discord/src/monitor/thread-bindings.persona.ts
@@ -1,28 +1,28 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.mjs";
2
- import { _ as DiscordError, ct as createThread, ft as getChannelMessage, t as discord_exports } from "./discord-J7aRzq2Q.mjs";
3
- import { A as resolveDiscordEndpointMediaGuard, O as getDiscordEndpointRuntime, a as normalizeDiscordAllowList, i as isDiscordGroupAllowedByPolicy, m as resolveDiscordMemberAccessState, n as allowListMatches, p as resolveDiscordGuildEntry, r as hasConfiguredDiscordChannels, s as normalizeDiscordSlug, t as isDiscordThreadChannelType, u as resolveDiscordChannelConfigWithFallback } from "./channel-type-D1_b5UhU.mjs";
4
- import { a as listEnabledDiscordAccounts, c as resolveDiscordAccount, l as resolveDiscordAccountAllowFrom } from "./accounts-DXHCL8Zm.mjs";
2
+ import { a as listEnabledDiscordAccounts, c as resolveDiscordAccount, l as resolveDiscordAccountAllowFrom } from "./accounts-HE9-mj1L.mjs";
3
+ 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-vxkG9_JD.mjs";
4
+ import { _ as DiscordError, dt as getChannelMessage, st as createThread, t as discord_exports } from "./discord-9gysrhzp.mjs";
5
+ import { l as withAbortTimeout } from "./timeouts-pun7VJ02.mjs";
5
6
  import { t as resolveDiscordCommandOwnerAllowFrom } from "./command-owners-D78sAoOz.mjs";
6
7
  import { a as resolveDiscordChannelParentSafe, i as resolveDiscordChannelParentIdSafe, n as resolveDiscordChannelInfoSafe, r as resolveDiscordChannelNameSafe, t as resolveDiscordChannelIdSafe } from "./channel-access-BRp3Y-rF.mjs";
7
- import { l as withAbortTimeout } from "./timeouts-pun7VJ02.mjs";
8
+ import { createSubsystemLogger, getChildLogger, logVerbose } from "openclaw/plugin-sdk/runtime-env";
9
+ import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id";
8
10
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString, normalizeOptionalStringifiedId, summarizeStringEntries, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
11
+ import { buildAgentSessionKey } from "openclaw/plugin-sdk/routing";
9
12
  import { ComponentType, Routes, StickerFormatType } from "discord-api-types/v10";
13
+ import { pruneMapToMaxSize } from "openclaw/plugin-sdk/collection-runtime";
14
+ import { saveRemoteMedia } from "openclaw/plugin-sdk/media-runtime";
10
15
  import { asDateTimestampMs, resolveExpiresAtMsFromDurationMs } from "openclaw/plugin-sdk/number-runtime";
11
16
  import { formatErrorMessage } from "openclaw/plugin-sdk/ssrf-runtime";
12
17
  import { resolveGlobalSingleton } from "openclaw/plugin-sdk/global-singleton";
13
- import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id";
14
- import { buildAgentSessionKey } from "openclaw/plugin-sdk/routing";
15
- import { getFileExtension, normalizeMimeType } from "openclaw/plugin-sdk/media-mime";
16
- import { createSubsystemLogger, getChildLogger, logVerbose } from "openclaw/plugin-sdk/runtime-env";
17
18
  import { truncateUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
18
19
  import { createReplyReferencePlanner } from "openclaw/plugin-sdk/reply-reference";
19
- import { saveRemoteMedia } from "openclaw/plugin-sdk/media-runtime";
20
- import { resolveCommandAuthorizedFromAuthorizers } from "openclaw/plugin-sdk/command-auth-native";
21
20
  import { resolveOpenProviderRuntimeGroupPolicy } from "openclaw/plugin-sdk/runtime-group-policy";
22
- import { pruneMapToMaxSize } from "openclaw/plugin-sdk/collection-runtime";
21
+ import { getFileExtension, normalizeMimeType } from "openclaw/plugin-sdk/media-mime";
23
22
  import { resolveChannelModelOverride } from "openclaw/plugin-sdk/model-session-runtime";
24
23
  import { generateConversationLabel } from "openclaw/plugin-sdk/reply-dispatch-runtime";
25
24
  import { formatMediaPlaceholderText } from "openclaw/plugin-sdk/channel-inbound";
25
+ import { resolveCommandAuthorizedFromAuthorizers } from "openclaw/plugin-sdk/command-auth-native";
26
26
  //#region extensions/discord/src/monitor/message-channel-info-state.ts
27
27
  const discordChannelInfoCacheState = { entries: /* @__PURE__ */ new Map() };
28
28
  //#endregion
@@ -966,6 +966,12 @@ async function resolveFetchedDiscordThreadLikeChannelContext(params) {
966
966
  });
967
967
  }
968
968
  //#endregion
969
+ //#region extensions/discord/src/voice/config.ts
970
+ function resolveDiscordVoiceEnabled(voice) {
971
+ if (voice?.enabled !== void 0) return voice.enabled;
972
+ return voice !== void 0;
973
+ }
974
+ //#endregion
969
975
  //#region extensions/discord/src/voice/owner-access.ts
970
976
  async function resolveDiscordVoiceAccessTarget(params) {
971
977
  const [guild, channel] = await Promise.all([params.client.fetchGuild(params.guildId).catch(() => null), params.client.fetchChannel(params.channelId).catch(() => null)]);
@@ -1092,12 +1098,6 @@ async function authorizeDiscordVoiceIngress(initialParams) {
1092
1098
  };
1093
1099
  }
1094
1100
  //#endregion
1095
- //#region extensions/discord/src/voice/config.ts
1096
- function resolveDiscordVoiceEnabled(voice) {
1097
- if (voice?.enabled !== void 0) return voice.enabled;
1098
- return voice !== void 0;
1099
- }
1100
- //#endregion
1101
1101
  //#region extensions/discord/src/voice/transcripts-source.ts
1102
1102
  const TRANSCRIPTS_STATE = resolveGlobalSingleton(Symbol.for("openclaw.discordTranscriptsState"), () => ({
1103
1103
  managersByAccountId: /* @__PURE__ */ new Map(),
@@ -1570,4 +1570,4 @@ const discordVoiceTranscriptsSourceProvider = {
1570
1570
  }
1571
1571
  };
1572
1572
  //#endregion
1573
- export { resolveDiscordMessageChannelId as A, resolveReferencedReplyMediaList as C, resolveDiscordReferencedReplyMessage as D, resolveDiscordMessageStickers as E, resolveDiscordReferencedReplyMessageId as O, resolveMediaList as S, hasDiscordMessageStickers as T, resolveDiscordMessageHistoryText as _, resolveDiscordVoiceEnabled as a, formatDiscordMediaText as b, resolveDiscordVoiceAccessTarget as c, threading_exports as d, resolveDiscordAutoThreadReplyPlan as f, resolveDiscordMessageBatch as g, sanitizeDiscordThreadName as h, setDiscordTranscriptsVoiceManager as i, resolveDiscordChannelInfo as k, resolveDiscordThreadLikeChannelContext as l, resolveDiscordThreadStarter as m, discordVoiceTranscriptsSourceProvider as n, authorizeDiscordVoiceIngress as o, resolveDiscordReplyTarget as p, resolveDiscordTranscriptsCapture as r, resolveDiscordVoiceAccess as s, bindDiscordCaptureReceipts as t, resolveFetchedDiscordThreadLikeChannelContext as u, resolveDiscordMessageMentionDocuments as v, resolveDiscordCdnPolicy as w, resolveForwardedMediaList as x, resolveDiscordMessageText as y };
1573
+ export { resolveDiscordMessageChannelId as A, resolveReferencedReplyMediaList as C, resolveDiscordReferencedReplyMessage as D, resolveDiscordMessageStickers as E, resolveDiscordReferencedReplyMessageId as O, resolveMediaList as S, hasDiscordMessageStickers as T, resolveDiscordMessageHistoryText as _, authorizeDiscordVoiceIngress as a, formatDiscordMediaText as b, resolveDiscordVoiceEnabled as c, threading_exports as d, resolveDiscordAutoThreadReplyPlan as f, resolveDiscordMessageBatch as g, sanitizeDiscordThreadName as h, setDiscordTranscriptsVoiceManager as i, resolveDiscordChannelInfo as k, resolveDiscordThreadLikeChannelContext as l, resolveDiscordThreadStarter as m, discordVoiceTranscriptsSourceProvider as n, resolveDiscordVoiceAccess as o, resolveDiscordReplyTarget as p, resolveDiscordTranscriptsCapture as r, resolveDiscordVoiceAccessTarget as s, bindDiscordCaptureReceipts as t, resolveFetchedDiscordThreadLikeChannelContext as u, resolveDiscordMessageMentionDocuments as v, resolveDiscordCdnPolicy as w, resolveForwardedMediaList as x, resolveDiscordMessageText as y };
@@ -1,25 +1,25 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.mjs";
2
- import { l as ReadyListener, p as VoiceStateUpdateListener, t as discord_exports, u as ResumedListener, vt as getGuildVoiceState, y as isUnknownDiscordVoiceStateError } from "./discord-J7aRzq2Q.mjs";
3
- import { C as formatDiscordUserTag, _ as resolveDiscordOwnerAccess, s as normalizeDiscordSlug } from "./channel-type-D1_b5UhU.mjs";
2
+ import { a as noteVoiceDecryptFailure, n as analyzeVoiceReceiveError, p as writeVoiceWavFile, r as createVoiceReceiveRecoveryState, s as resetVoiceReceiveRecoveryState, t as DECRYPT_FAILURE_WINDOW_MS, v as restoreDiscordAudioError } from "./receive-recovery-DgkX7Qvi.mjs";
3
+ import { S as formatDiscordUserTag, g as resolveDiscordOwnerAccess, o as normalizeDiscordSlug } from "./allow-list-vxkG9_JD.mjs";
4
+ import { _t as getGuildVoiceState, l as ReadyListener, p as VoiceStateUpdateListener, t as discord_exports, u as ResumedListener, y as isUnknownDiscordVoiceStateError } from "./discord-9gysrhzp.mjs";
5
+ import { p as parseDiscordTarget } from "./send.receipt-DVOg2Oaw.mjs";
6
+ import { o as formatMention } from "./send.outbound-rOboMO_6.mjs";
4
7
  import { t as getDiscordRuntime } from "./runtime-DgnVQ7zW.mjs";
5
- import { b as parseDiscordTarget } from "./retry-BKzO25k4.mjs";
6
- import { o as formatMention } from "./send.outbound-B4QHSEzm.mjs";
7
- import { a as resolveDiscordVoiceEnabled, c as resolveDiscordVoiceAccessTarget, o as authorizeDiscordVoiceIngress, r as resolveDiscordTranscriptsCapture, s as resolveDiscordVoiceAccess, t as bindDiscordCaptureReceipts } from "./transcripts-source-CNWswry-.mjs";
8
- import { a as noteVoiceDecryptFailure, n as analyzeVoiceReceiveError, p as writeVoiceWavFile, r as createVoiceReceiveRecoveryState, s as resetVoiceReceiveRecoveryState, t as DECRYPT_FAILURE_WINDOW_MS, v as restoreDiscordAudioError } from "./receive-recovery-GqF2PUN_.mjs";
9
- import { C as buildDiscordGroupSystemPrompt, _ as resolveDiscordVoiceMode, d as MIN_SEGMENT_SECONDS, f as VOICE_CONNECT_READY_TIMEOUT_MS, g as logVoiceVerbose, h as isVoiceChannel, m as isDiscordRealtimeVoiceMode, p as VOICE_RECONNECT_GRACE_MS, u as CAPTURE_FINALIZE_GRACE_MS, v as resolveVoiceTimeoutMs } from "./provider-D2OKMo0f.mjs";
8
+ import { C as buildDiscordGroupSystemPrompt, _ as resolveDiscordVoiceMode, d as MIN_SEGMENT_SECONDS, f as VOICE_CONNECT_READY_TIMEOUT_MS, g as logVoiceVerbose, h as isVoiceChannel, m as isDiscordRealtimeVoiceMode, p as VOICE_RECONNECT_GRACE_MS, u as CAPTURE_FINALIZE_GRACE_MS, v as resolveVoiceTimeoutMs } from "./provider-YP8gN9_o.mjs";
9
+ import { a as authorizeDiscordVoiceIngress, c as resolveDiscordVoiceEnabled, o as resolveDiscordVoiceAccess, r as resolveDiscordTranscriptsCapture, s as resolveDiscordVoiceAccessTarget, t as bindDiscordCaptureReceipts } from "./transcripts-source-CaZQnGRH.mjs";
10
+ import { Worker } from "node:worker_threads";
11
+ import { PassThrough, Readable } from "node:stream";
12
+ import { formatErrorMessage, readErrorName, toErrorObject } from "openclaw/plugin-sdk/error-runtime";
13
+ import { createSubsystemLogger, logVerbose } from "openclaw/plugin-sdk/runtime-env";
10
14
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
11
- import { randomUUID } from "node:crypto";
12
- import { asDateTimestampMs, resolveExpiresAtMsFromDurationMs } from "openclaw/plugin-sdk/number-runtime";
13
- import { formatErrorMessage } from "openclaw/plugin-sdk/ssrf-runtime";
14
- import { formatErrorMessage as formatErrorMessage$1, readErrorName, toErrorObject } from "openclaw/plugin-sdk/error-runtime";
15
15
  import { resolveAgentRoute } from "openclaw/plugin-sdk/routing";
16
- import { createSubsystemLogger, logVerbose } from "openclaw/plugin-sdk/runtime-env";
17
- import { escapeRegExp, truncateUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
16
+ import { unlinkIfExists } from "openclaw/plugin-sdk/media-runtime";
18
17
  import { expectDefined } from "openclaw/plugin-sdk/expect-runtime";
18
+ import { asDateTimestampMs, resolveExpiresAtMsFromDurationMs } from "openclaw/plugin-sdk/number-runtime";
19
19
  import { stripInlineDirectiveTagsForDisplay } from "openclaw/plugin-sdk/text-chunking";
20
- import { unlinkIfExists } from "openclaw/plugin-sdk/media-runtime";
21
- import { Worker } from "node:worker_threads";
22
- import { PassThrough, Readable } from "node:stream";
20
+ import { randomUUID } from "node:crypto";
21
+ import { formatErrorMessage as formatErrorMessage$1 } from "openclaw/plugin-sdk/ssrf-runtime";
22
+ import { escapeRegExp, truncateUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
23
23
  import { createDeferred } from "openclaw/plugin-sdk/extension-shared";
24
24
  import { enqueueRoutedSystemEvent } from "openclaw/plugin-sdk/system-event-runtime";
25
25
  import { resolveAgentDir } from "openclaw/plugin-sdk/agent-runtime";
@@ -125,7 +125,7 @@ async function handleDiscordVoiceAgentControlToolCall(params) {
125
125
  });
126
126
  } catch (error) {
127
127
  if (!params.isCurrent()) return;
128
- await params.session.submitToolResult(params.callId, { error: formatErrorMessage$1(error) });
128
+ await params.session.submitToolResult(params.callId, { error: formatErrorMessage(error) });
129
129
  return;
130
130
  }
131
131
  if (!params.isCurrent()) return;
@@ -758,7 +758,7 @@ var DiscordVoiceMembershipTracker = class {
758
758
  }
759
759
  }
760
760
  logFailure(entry, err) {
761
- logger$8.warn(`discord voice: participant notification failed guild=${entry.guildId} channel=${entry.channelId}: ${formatErrorMessage(err)}`);
761
+ logger$8.warn(`discord voice: participant notification failed guild=${entry.guildId} channel=${entry.channelId}: ${formatErrorMessage$1(err)}`);
762
762
  }
763
763
  roster(entry, botUserId, additionalUserIds) {
764
764
  return collectDiscordVoiceParticipants({
@@ -907,7 +907,7 @@ var DiscordVoiceFollowing = class {
907
907
  delayMs: FOLLOW_USERS_RECONCILE_INTERVAL_MS,
908
908
  everyMs: FOLLOW_USERS_RECONCILE_INTERVAL_MS,
909
909
  run: () => this.reconcileFollowedUsers("interval").catch((err) => {
910
- logger$7.warn(`discord voice: follow user reconciliation failed: ${formatErrorMessage(err)}`);
910
+ logger$7.warn(`discord voice: follow user reconciliation failed: ${formatErrorMessage$1(err)}`);
911
911
  })
912
912
  });
913
913
  await this.reconcileFollowedUsers("startup");
@@ -1038,10 +1038,10 @@ var DiscordVoiceFollowing = class {
1038
1038
  for (const userId of plan.userIds) {
1039
1039
  const voiceState = await getGuildVoiceState(this.params.client.rest, plan.guildId, userId).catch((err) => {
1040
1040
  if (!isUnknownDiscordVoiceStateError(err)) {
1041
- logger$7.warn(`follow-user reconcile skipped (transient voice-state error) guild=${plan.guildId} user=${userId} trigger=${reason}: ${formatErrorMessage(err)}`);
1041
+ logger$7.warn(`follow-user reconcile skipped (transient voice-state error) guild=${plan.guildId} user=${userId} trigger=${reason}: ${formatErrorMessage$1(err)}`);
1042
1042
  return "transient-error";
1043
1043
  }
1044
- logFollowUserReconcileVerbose(reason, `follow user reconcile reason=${reason}: no voice state guild ${plan.guildId} user ${userId}: ${formatErrorMessage(err)}`);
1044
+ logFollowUserReconcileVerbose(reason, `follow user reconcile reason=${reason}: no voice state guild ${plan.guildId} user ${userId}: ${formatErrorMessage$1(err)}`);
1045
1045
  });
1046
1046
  if (this.scheduler.signal.aborted) return;
1047
1047
  if (voiceState === "transient-error") continue;
@@ -1161,10 +1161,10 @@ var DiscordVoiceFollowing = class {
1161
1161
  if (!botUserId) return;
1162
1162
  const botVoiceState = await getGuildVoiceState(this.params.client.rest, guildId, botUserId).catch((err) => {
1163
1163
  if (!isUnknownDiscordVoiceStateError(err)) {
1164
- logger$7.warn(`discord voice: follow reconcile skipped transient bot voice state error guild=${guildId} reason=${reason}: ${formatErrorMessage(err)}`);
1164
+ logger$7.warn(`discord voice: follow reconcile skipped transient bot voice state error guild=${guildId} reason=${reason}: ${formatErrorMessage$1(err)}`);
1165
1165
  return "transient-error";
1166
1166
  }
1167
- logFollowUserReconcileVerbose(reason, `follow user reconcile reason=${reason}: no bot voice state guild ${guildId}: ${formatErrorMessage(err)}`);
1167
+ logFollowUserReconcileVerbose(reason, `follow user reconcile reason=${reason}: no bot voice state guild ${guildId}: ${formatErrorMessage$1(err)}`);
1168
1168
  });
1169
1169
  if (this.scheduler.signal.aborted || botVoiceState === "transient-error") return;
1170
1170
  const botChannelId = botVoiceState?.channel_id?.trim();
@@ -1325,7 +1325,7 @@ async function processDiscordVoiceSegment(params) {
1325
1325
  const conversationCurrent = () => !entry.captureOnly && entry.sessionLifecycle.status === "active" && params.isConversationCurrent();
1326
1326
  logVoiceVerbose(`segment processing (${durationSeconds.toFixed(2)}s): guild ${entry.guildId} channel ${entry.channelId}`);
1327
1327
  const ingress = params.resolveIngressContext().catch((error) => {
1328
- logger$6.warn(`discord voice: conversation authorization failed: ${formatErrorMessage$1(error)}`);
1328
+ logger$6.warn(`discord voice: conversation authorization failed: ${formatErrorMessage(error)}`);
1329
1329
  return null;
1330
1330
  });
1331
1331
  const conversationAuthorized = ingress.then((context) => Boolean(context) && conversationCurrent());
@@ -1399,10 +1399,10 @@ async function respondToDiscordVoiceTranscript(params) {
1399
1399
  text: transcript
1400
1400
  }).catch((error) => {
1401
1401
  if (readErrorName(error) === "AbortError") {
1402
- logger$6.warn(`discord voice: active-run control cancelled: ${formatErrorMessage$1(error)}`);
1402
+ logger$6.warn(`discord voice: active-run control cancelled: ${formatErrorMessage(error)}`);
1403
1403
  return null;
1404
1404
  }
1405
- logger$6.warn(`discord voice: active-run control failed; falling back to normal segment handling: ${formatErrorMessage$1(error)}`);
1405
+ logger$6.warn(`discord voice: active-run control failed; falling back to normal segment handling: ${formatErrorMessage(error)}`);
1406
1406
  });
1407
1407
  if (control === null || !conversationCurrent()) return;
1408
1408
  if (control?.handled) {
@@ -1562,7 +1562,7 @@ var DiscordVoiceRecording = class {
1562
1562
  try {
1563
1563
  await wav.cleanup();
1564
1564
  } catch (error) {
1565
- logger$5.warn(`discord voice: recording cleanup failed: ${formatErrorMessage(error)}`);
1565
+ logger$5.warn(`discord voice: recording cleanup failed: ${formatErrorMessage$1(error)}`);
1566
1566
  } finally {
1567
1567
  releaseBudget();
1568
1568
  }
@@ -1591,7 +1591,7 @@ var DiscordVoiceRecording = class {
1591
1591
  });
1592
1592
  } catch (error) {
1593
1593
  this.params.onExcluded();
1594
- logger$5.warn(`discord voice: recording failed: ${formatErrorMessage(error)}`);
1594
+ logger$5.warn(`discord voice: recording failed: ${formatErrorMessage$1(error)}`);
1595
1595
  } finally {
1596
1596
  await cleanup();
1597
1597
  }
@@ -1661,7 +1661,7 @@ var DiscordVoiceReceive = class {
1661
1661
  }
1662
1662
  }
1663
1663
  captureCurrentSpeakers(entry) {
1664
- for (const userId of entry.audio.speakingUsers) this.handleSpeakingStart(entry, userId, "scan").catch((error) => logger$4.warn(`discord voice: capture failed: ${formatErrorMessage(error)}`));
1664
+ for (const userId of entry.audio.speakingUsers) this.handleSpeakingStart(entry, userId, "scan").catch((error) => logger$4.warn(`discord voice: capture failed: ${formatErrorMessage$1(error)}`));
1665
1665
  }
1666
1666
  responseContext(entry, userId) {
1667
1667
  return {
@@ -1676,7 +1676,7 @@ var DiscordVoiceReceive = class {
1676
1676
  speakerContext: this.params.speakerContext,
1677
1677
  client: this.params.client,
1678
1678
  enqueuePlayback: (playbackEntry, task) => {
1679
- playbackEntry.playbackQueue = playbackEntry.playbackQueue.then(task).catch((err) => logger$4.warn(`discord voice: playback failed: ${formatErrorMessage(err)}`));
1679
+ playbackEntry.playbackQueue = playbackEntry.playbackQueue.then(task).catch((err) => logger$4.warn(`discord voice: playback failed: ${formatErrorMessage$1(err)}`));
1680
1680
  }
1681
1681
  };
1682
1682
  }
@@ -1840,12 +1840,12 @@ var DiscordVoiceReceive = class {
1840
1840
  ingress: currentIngress,
1841
1841
  transcript
1842
1842
  });
1843
- }).catch((error) => logger$4.warn(`discord voice: processing failed: ${formatErrorMessage(error)}`));
1843
+ }).catch((error) => logger$4.warn(`discord voice: processing failed: ${formatErrorMessage$1(error)}`));
1844
1844
  }
1845
1845
  }
1846
1846
  } finally {
1847
1847
  realtimeRecording?.sealBatch();
1848
- if (conversationCompletion) conversationCompletion.catch((error) => logger$4.warn(`discord voice: conversation failed: ${formatErrorMessage(error)}`));
1848
+ if (conversationCompletion) conversationCompletion.catch((error) => logger$4.warn(`discord voice: conversation failed: ${formatErrorMessage$1(error)}`));
1849
1849
  else if (conversation) entry.conversations.release(conversation);
1850
1850
  captureReceipts.close();
1851
1851
  stream.off("data", acceptPacket);
@@ -1932,7 +1932,7 @@ var DiscordVoiceReceive = class {
1932
1932
  recovery = this.recoverFromDecryptFailures(entry);
1933
1933
  }
1934
1934
  } else recovery = this.recoverFromDecryptFailures(entry);
1935
- recovery.catch((recoverErr) => logger$4.warn(`discord voice: decrypt recovery failed: ${formatErrorMessage(recoverErr)}`)).finally(() => {
1935
+ recovery.catch((recoverErr) => logger$4.warn(`discord voice: decrypt recovery failed: ${formatErrorMessage$1(recoverErr)}`)).finally(() => {
1936
1936
  entry.receiveRecovery.decryptRecoveryInFlight = false;
1937
1937
  });
1938
1938
  }
@@ -2311,7 +2311,7 @@ var DiscordVoiceConversationInput = class {
2311
2311
  for (const { pcm, receipt } of audio) this.sendAudio(pcm, receipt);
2312
2312
  })().catch((error) => {
2313
2313
  this.retire();
2314
- params.warn(`discord voice: conversation admission failed: ${formatErrorMessage(error)}`);
2314
+ params.warn(`discord voice: conversation admission failed: ${formatErrorMessage$1(error)}`);
2315
2315
  });
2316
2316
  this.ready = Promise.race([admission, this.cancelled.promise]);
2317
2317
  }
@@ -2344,7 +2344,7 @@ var DiscordVoiceConversationInput = class {
2344
2344
  this.turn?.sendInputAudio(pcm, receipt);
2345
2345
  } catch (error) {
2346
2346
  this.retire();
2347
- this.params.warn(`discord voice: conversation audio failed: ${formatErrorMessage(error)}`);
2347
+ this.params.warn(`discord voice: conversation audio failed: ${formatErrorMessage$1(error)}`);
2348
2348
  }
2349
2349
  }
2350
2350
  authorizeSegment(resolve) {
@@ -2417,7 +2417,7 @@ var DiscordVoiceConversationInput = class {
2417
2417
  try {
2418
2418
  turn?.close("incomplete-input");
2419
2419
  } catch (error) {
2420
- this.params.warn(`discord voice: conversation close failed: ${formatErrorMessage(error)}`);
2420
+ this.params.warn(`discord voice: conversation close failed: ${formatErrorMessage$1(error)}`);
2421
2421
  }
2422
2422
  }
2423
2423
  };
@@ -2531,7 +2531,7 @@ var DiscordVoiceSessions = class {
2531
2531
  ok: false,
2532
2532
  error: {
2533
2533
  ok: false,
2534
- message: `Failed to resolve Discord channel ${channelId}: ${formatErrorMessage(err)}`,
2534
+ message: `Failed to resolve Discord channel ${channelId}: ${formatErrorMessage$1(err)}`,
2535
2535
  guildId,
2536
2536
  channelId
2537
2537
  }
@@ -2633,7 +2633,7 @@ var DiscordVoiceSessions = class {
2633
2633
  await this.stopTransport(guildId);
2634
2634
  return {
2635
2635
  ok: false,
2636
- message: "Failed to join voice channel: " + formatErrorMessage(error),
2636
+ message: "Failed to join voice channel: " + formatErrorMessage$1(error),
2637
2637
  guildId,
2638
2638
  channelId
2639
2639
  };
@@ -2657,7 +2657,7 @@ var DiscordVoiceSessions = class {
2657
2657
  await this.stopTransport(guildId);
2658
2658
  return {
2659
2659
  ok: false,
2660
- message: `Failed to resolve Discord voice agent session: ${formatErrorMessage(err)}`,
2660
+ message: `Failed to resolve Discord voice agent session: ${formatErrorMessage$1(err)}`,
2661
2661
  guildId,
2662
2662
  channelId
2663
2663
  };
@@ -2686,7 +2686,7 @@ var DiscordVoiceSessions = class {
2686
2686
  try {
2687
2687
  if (realtimeLifecycle.status === "starting" || realtimeLifecycle.status === "active") realtimeCompletion = realtimeLifecycle.instance.close();
2688
2688
  } catch (error) {
2689
- logger$2.warn(`discord voice: realtime close failed: ${formatErrorMessage(error)}`);
2689
+ logger$2.warn(`discord voice: realtime close failed: ${formatErrorMessage$1(error)}`);
2690
2690
  }
2691
2691
  const audioCompletion = this.stopTransport(guildId, audio);
2692
2692
  stopCompletion = Promise.allSettled([realtimeCompletion, audioCompletion]).then(() => {
@@ -2700,7 +2700,7 @@ var DiscordVoiceSessions = class {
2700
2700
  };
2701
2701
  completion.then(forget, (error) => {
2702
2702
  forget();
2703
- logger$2.warn(`discord voice: session stop failed: ${formatErrorMessage(error)}`);
2703
+ logger$2.warn(`discord voice: session stop failed: ${formatErrorMessage$1(error)}`);
2704
2704
  });
2705
2705
  return stopCompletion;
2706
2706
  };
@@ -2738,7 +2738,7 @@ var DiscordVoiceSessions = class {
2738
2738
  };
2739
2739
  const speakingHandler = (userId, speaking) => {
2740
2740
  if (speaking) this.params.receive.handleSpeakingStart(entry, userId).catch((error) => {
2741
- logger$2.warn("discord voice: capture failed: " + formatErrorMessage(error));
2741
+ logger$2.warn("discord voice: capture failed: " + formatErrorMessage$1(error));
2742
2742
  });
2743
2743
  else this.params.receive.scheduleCaptureFinalize(entry, userId);
2744
2744
  };
@@ -2813,7 +2813,7 @@ var DiscordVoiceSessions = class {
2813
2813
  ok: false,
2814
2814
  message: "Discord realtime voice session stopped before startup completed."
2815
2815
  };
2816
- const { DiscordRealtimeVoiceSession } = await import("./realtime-session.runtime-D5RSC8Mm.mjs");
2816
+ const { DiscordRealtimeVoiceSession } = await import("./realtime-session.runtime-BKUQBy1u.mjs");
2817
2817
  const realtime = new DiscordRealtimeVoiceSession({
2818
2818
  accountId: this.params.accountId,
2819
2819
  bootstrapContextInstructions,
@@ -2823,7 +2823,7 @@ var DiscordVoiceSessions = class {
2823
2823
  getHumanParticipantCount: () => this.params.membership.countHumanParticipants(entry, this.params.botUserId()),
2824
2824
  mode: voiceMode,
2825
2825
  onTerminalError: (error) => {
2826
- logger$2.error(`discord voice: realtime session failed terminally guild=${entry.guildId} channel=${entry.channelId}: ${formatErrorMessage(error)}`);
2826
+ logger$2.error(`discord voice: realtime session failed terminally guild=${entry.guildId} channel=${entry.channelId}: ${formatErrorMessage$1(error)}`);
2827
2827
  const lifecycle = entry.realtimeLifecycle;
2828
2828
  if (options?.requireLiveEntry && lifecycle.status === "starting" && lifecycle.instance === realtime) {
2829
2829
  entry.realtimeLifecycle = {
@@ -2870,7 +2870,7 @@ var DiscordVoiceSessions = class {
2870
2870
  };
2871
2871
  return {
2872
2872
  ok: false,
2873
- message: `Failed to start Discord realtime voice: ${formatErrorMessage(err)}`
2873
+ message: `Failed to start Discord realtime voice: ${formatErrorMessage$1(err)}`
2874
2874
  };
2875
2875
  }
2876
2876
  }
@@ -2879,7 +2879,7 @@ var DiscordVoiceSessions = class {
2879
2879
  //#region extensions/discord/src/voice/listeners.ts
2880
2880
  const logger$1 = createSubsystemLogger("discord/voice");
2881
2881
  function startAutoJoin(operation, context = "") {
2882
- operation().catch((err) => logger$1.warn(`discord voice: autoJoin${context} failed: ${formatErrorMessage(err)}`));
2882
+ operation().catch((err) => logger$1.warn(`discord voice: autoJoin${context} failed: ${formatErrorMessage$1(err)}`));
2883
2883
  }
2884
2884
  var DiscordVoiceReadyListener = class extends ReadyListener {
2885
2885
  constructor(manager) {
@@ -1,4 +1,4 @@
1
- import { t as inspectDiscordAccount } from "./.setup/account-inspect-CjKqkDnH.mjs";
1
+ import { t as inspectDiscordAccount } from "./.setup/account-inspect-DsER5ILV.mjs";
2
2
  //#region extensions/discord/account-inspect-api.ts
3
3
  function inspectDiscordReadOnlyAccount(cfg, accountId) {
4
4
  return inspectDiscordAccount({
@@ -1,2 +1,2 @@
1
- import { t as handleDiscordAction } from "./.setup/runtime-CwUA0RLr.mjs";
1
+ import { t as handleDiscordAction } from "./.setup/runtime-CESTexGn.mjs";
2
2
  export { handleDiscordAction };