@openclaw/discord 2026.5.24-beta.2 → 2026.5.26-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/dist/action-runtime-api.js +1 -1
  2. package/dist/api.js +13 -13
  3. package/dist/{approval-handler.runtime-DFRH9nZ4.js → approval-handler.runtime-BlGs6D0-.js} +3 -3
  4. package/dist/{audit-D3I68CWK.js → audit-DE8lNdMv.js} +3 -3
  5. package/dist/{channel-DMgQbhnj.js → channel-BbDUsfl7.js} +15 -15
  6. package/dist/{channel-actions-Cm0QHxsv.js → channel-actions-DICb5UUl.js} +3 -3
  7. package/dist/{channel-actions.runtime-BP_VU815.js → channel-actions.runtime-92Esj8jy.js} +6 -6
  8. package/dist/channel-config-api.js +1 -1
  9. package/dist/channel-plugin-api.js +1 -1
  10. package/dist/{channel.setup-Dh16wwV9.js → channel.setup-JaozRxYz.js} +4 -3
  11. package/dist/{components-BCxyMNaH.js → components-Bpf9ITyn.js} +2 -1
  12. package/dist/{config-schema-DordNAyp.js → config-schema-CTzLsQlB.js} +2 -2
  13. package/dist/contract-api.js +4 -4
  14. package/dist/{conversation-identity-CzE0g3tC.js → conversation-identity-Be5JQPP9.js} +2 -2
  15. package/dist/{directory-config-CkL6nnqZ.js → directory-config-oK2sOZ2m.js} +1 -1
  16. package/dist/directory-contract-api.js +1 -1
  17. package/dist/{directory-live-DZeXDKJ_.js → directory-live-BRjo48ro.js} +1 -1
  18. package/dist/{doctor-ymCgy8yc.js → doctor-DBPfLj15.js} +3 -2
  19. package/dist/{doctor-contract-Bia3BmP_.js → doctor-contract-CLMMYrdF.js} +91 -0
  20. package/dist/doctor-contract-api.js +1 -1
  21. package/dist/{handle-action.guild-admin-ozP4Jj--.js → handle-action.guild-admin-_LgqCYcN.js} +1 -1
  22. package/dist/{inbound-event-delivery-DTGIjZVJ.js → inbound-event-delivery-CEPlt2uz.js} +6 -11
  23. package/dist/index.js +3 -3
  24. package/dist/{manager.runtime-DfmiNzKh.js → manager.runtime-BfJrOq-W.js} +503 -377
  25. package/dist/{message-handler-ix5OBBs1.js → message-handler-YNyW4rsC.js} +6 -6
  26. package/dist/{message-handler.preflight-BHR7pKU1.js → message-handler.preflight-Dpfm3M4j.js} +18 -21
  27. package/dist/{message-handler.process-BheSnevd.js → message-handler.process-CDxJ-gh_.js} +47 -18
  28. package/dist/{message-utils-CEaELqGw.js → message-utils-DxHZcpPf.js} +3 -3
  29. package/dist/{outbound-adapter-BVTo8aVg.js → outbound-adapter-C8lzfSt6.js} +7 -7
  30. package/dist/{pluralkit-BX81hJh4.js → pluralkit-CTbOoDPp.js} +1 -1
  31. package/dist/{provider-CPLDWYC9.js → provider-B1wc40FG.js} +617 -218
  32. package/dist/{provider-session.runtime-CwgJI6LP.js → provider-session.runtime-Dk2Y1FGD.js} +3 -3
  33. package/dist/provider.runtime-DN-gyQYd.js +2 -0
  34. package/dist/{resolve-channels-BQl2WT8v.js → resolve-channels-CIV0C8ST.js} +1 -1
  35. package/dist/{resolve-users-CqW9vVcr.js → resolve-users-LZKYHrJx.js} +1 -1
  36. package/dist/{runtime-ZBAq7Trm.js → runtime-DBkHf0qH.js} +7 -7
  37. package/dist/runtime-api.actions.js +2 -2
  38. package/dist/runtime-api.js +18 -18
  39. package/dist/runtime-api.lookup.js +4 -4
  40. package/dist/runtime-api.monitor-BJCRxbKe.js +5 -0
  41. package/dist/runtime-api.monitor.js +4 -4
  42. package/dist/runtime-api.send.js +5 -5
  43. package/dist/runtime-api.threads.js +3 -3
  44. package/dist/{security-audit-C_fzlczo.js → security-audit-Bh_65L5C.js} +1 -4
  45. package/dist/security-audit-contract-api.js +1 -1
  46. package/dist/{security-audit.runtime-Dt4zoGpL.js → security-audit.runtime-CpPdDNEt.js} +1 -1
  47. package/dist/{send-CVjV4H6l.js → send-CM1NFFrZ.js} +6 -6
  48. package/dist/{send.components-BpnERIQ0.js → send.components-swKESEWc.js} +9 -9
  49. package/dist/{send.outbound-CWhhKank.js → send.outbound-BHQPWbwU.js} +5 -5
  50. package/dist/{send.receipt--EtaMe11.js → send.receipt-D_6lR7zH.js} +30 -30
  51. package/dist/{send.shared-CsGHs6ft.js → send.shared-aYGYz83q.js} +8 -5
  52. package/dist/setup-plugin-api.js +1 -1
  53. package/dist/{shared-DFP_4nlg.js → shared-BwF8ShpE.js} +4 -4
  54. package/dist/{subagent-hooks-BLRmOFEa.js → subagent-hooks-DHA_1pBI.js} +2 -2
  55. package/dist/subagent-hooks-api.js +1 -1
  56. package/dist/{system-events-sMHIu6aa.js → system-events-Cr3EqBah.js} +1 -1
  57. package/dist/{target-resolver-QZP1tC8H.js → target-resolver-CVgOsap6.js} +2 -2
  58. package/dist/targets-CNDNKpqQ.js +3 -0
  59. package/dist/test-api.js +3 -3
  60. package/dist/{thread-bindings-DeBPNv4D.js → thread-bindings-Dw4wcHWn.js} +6 -6
  61. package/dist/{thread-bindings.discord-api-CaiGJbEP.js → thread-bindings.discord-api-xCfun-pQ.js} +4 -4
  62. package/dist/{thread-bindings.manager-ANA-Hk_y.js → thread-bindings.manager-UJ5FvZfO.js} +3 -3
  63. package/dist/transcripts-source-api.js +2 -0
  64. package/dist/{meeting-notes-source-dVTfnnBi.js → transcripts-source-emawQzBc.js} +13 -13
  65. package/dist/{typing-tLlUYdt6.js → typing-BhIpRSfR.js} +1 -1
  66. package/node_modules/discord-api-types/CHANGELOG.md +9 -0
  67. package/node_modules/discord-api-types/_generated_/rest/v10/interfaces.d.ts +3 -2
  68. package/node_modules/discord-api-types/_generated_/rest/v10/interfaces.d.ts.map +1 -1
  69. package/node_modules/discord-api-types/_generated_/rest/v9/interfaces.d.ts +3 -2
  70. package/node_modules/discord-api-types/_generated_/rest/v9/interfaces.d.ts.map +1 -1
  71. package/node_modules/discord-api-types/package.json +8 -8
  72. package/node_modules/discord-api-types/payloads/v10/message.d.ts +2 -2
  73. package/node_modules/discord-api-types/payloads/v10/oauth2.d.ts +7 -0
  74. package/node_modules/discord-api-types/payloads/v10/oauth2.d.ts.map +1 -1
  75. package/node_modules/discord-api-types/payloads/v10/oauth2.js +7 -0
  76. package/node_modules/discord-api-types/payloads/v10/oauth2.js.map +1 -1
  77. package/node_modules/discord-api-types/payloads/v10/user.d.ts +1 -0
  78. package/node_modules/discord-api-types/payloads/v10/user.d.ts.map +1 -1
  79. package/node_modules/discord-api-types/payloads/v10/user.js.map +1 -1
  80. package/node_modules/discord-api-types/payloads/v9/message.d.ts +2 -2
  81. package/node_modules/discord-api-types/payloads/v9/oauth2.d.ts +7 -0
  82. package/node_modules/discord-api-types/payloads/v9/oauth2.d.ts.map +1 -1
  83. package/node_modules/discord-api-types/payloads/v9/oauth2.js +7 -0
  84. package/node_modules/discord-api-types/payloads/v9/oauth2.js.map +1 -1
  85. package/node_modules/discord-api-types/payloads/v9/user.d.ts +1 -0
  86. package/node_modules/discord-api-types/payloads/v9/user.d.ts.map +1 -1
  87. package/node_modules/discord-api-types/payloads/v9/user.js.map +1 -1
  88. package/node_modules/discord-api-types/rest/v10/index.d.ts.map +1 -1
  89. package/node_modules/discord-api-types/rest/v10/index.js +3 -2
  90. package/node_modules/discord-api-types/rest/v10/index.js.map +1 -1
  91. package/node_modules/discord-api-types/rest/v10/oauth2.d.ts +9 -2
  92. package/node_modules/discord-api-types/rest/v10/oauth2.d.ts.map +1 -1
  93. package/node_modules/discord-api-types/rest/v10/user.d.ts +4 -0
  94. package/node_modules/discord-api-types/rest/v10/user.d.ts.map +1 -1
  95. package/node_modules/discord-api-types/rest/v9/index.d.ts.map +1 -1
  96. package/node_modules/discord-api-types/rest/v9/index.js +3 -2
  97. package/node_modules/discord-api-types/rest/v9/index.js.map +1 -1
  98. package/node_modules/discord-api-types/rest/v9/oauth2.d.ts +9 -2
  99. package/node_modules/discord-api-types/rest/v9/oauth2.d.ts.map +1 -1
  100. package/node_modules/discord-api-types/rest/v9/user.d.ts +4 -0
  101. package/node_modules/discord-api-types/rest/v9/user.d.ts.map +1 -1
  102. package/node_modules/libopus-wasm/CHANGELOG.md +28 -0
  103. package/node_modules/libopus-wasm/LICENSE +21 -0
  104. package/node_modules/libopus-wasm/README.md +248 -0
  105. package/node_modules/libopus-wasm/THIRD_PARTY_NOTICES.md +12 -0
  106. package/node_modules/libopus-wasm/dist/discordjs.d.ts +20 -0
  107. package/node_modules/libopus-wasm/dist/discordjs.d.ts.map +1 -0
  108. package/node_modules/libopus-wasm/dist/discordjs.js +108 -0
  109. package/node_modules/libopus-wasm/dist/generated/libopus.generated.mjs +0 -0
  110. package/node_modules/libopus-wasm/dist/index.d.ts +141 -0
  111. package/node_modules/libopus-wasm/dist/index.d.ts.map +1 -0
  112. package/node_modules/libopus-wasm/dist/index.js +615 -0
  113. package/node_modules/libopus-wasm/package.json +56 -0
  114. package/node_modules/ws/lib/receiver.js +54 -0
  115. package/node_modules/ws/lib/websocket-server.js +8 -0
  116. package/node_modules/ws/lib/websocket.js +14 -0
  117. package/node_modules/ws/package.json +1 -1
  118. package/npm-shrinkwrap.json +21 -18
  119. package/openclaw.plugin.json +9 -5
  120. package/package.json +9 -9
  121. package/dist/meeting-notes-source-api.js +0 -2
  122. package/dist/provider.runtime-DnKAm3Kg.js +0 -2
  123. package/dist/runtime-api.monitor-CN7g_Kp7.js +0 -5
  124. package/dist/targets-DRvCCf1i.js +0 -3
  125. package/node_modules/opusscript/LICENSE +0 -20
  126. package/node_modules/opusscript/README.md +0 -53
  127. package/node_modules/opusscript/build/COPYING.libopus +0 -44
  128. package/node_modules/opusscript/build/opusscript_native_nasm.js +0 -93
  129. package/node_modules/opusscript/build/opusscript_native_wasm.js +0 -77
  130. package/node_modules/opusscript/build/opusscript_native_wasm.wasm +0 -0
  131. package/node_modules/opusscript/index.d.ts +0 -100
  132. package/node_modules/opusscript/index.js +0 -120
  133. package/node_modules/opusscript/package.json +0 -26
@@ -1,2 +1,2 @@
1
- import { t as handleDiscordAction } from "./runtime-ZBAq7Trm.js";
1
+ import { t as handleDiscordAction } from "./runtime-DBkHf0qH.js";
2
2
  export { handleDiscordAction };
package/dist/api.js CHANGED
@@ -1,23 +1,23 @@
1
- import { Ht as parseDiscordTarget, Ut as resolveDiscordChannelId, a as normalizeDiscordMessagingTarget, i as looksLikeDiscordTargetId, o as normalizeDiscordOutboundTarget } from "./send.receipt--EtaMe11.js";
1
+ import { Ht as parseDiscordTarget, Ut as resolveDiscordChannelId, a as normalizeDiscordMessagingTarget, i as looksLikeDiscordTargetId, o as normalizeDiscordOutboundTarget } from "./send.receipt-D_6lR7zH.js";
2
2
  import { a as mergeDiscordAccountConfig, f as resolveDiscordMaxLinesPerMessage, i as listEnabledDiscordAccounts, l as resolveDiscordAccountConfig, o as resolveDefaultDiscordAccountId, r as listDiscordAccountIds, s as resolveDiscordAccount, t as createDiscordActionGate } from "./accounts-dXTfmnSZ.js";
3
3
  import { t as inspectDiscordAccount } from "./account-inspect-C4sJZNbI.js";
4
- import { _ as parseDiscordComponentCustomId, b as parseDiscordModalCustomIdForInteraction, c as buildDiscordComponentMessage, d as readDiscordComponentSpec, f as resolveDiscordComponentAttachmentName, g as buildDiscordModalCustomId, h as buildDiscordComponentCustomId, l as buildDiscordComponentMessageFlags, m as DISCORD_MODAL_CUSTOM_ID_KEY, n as formatDiscordComponentEventText, o as DiscordFormModal, p as DISCORD_COMPONENT_CUSTOM_ID_KEY, r as buildDiscordInteractiveComponents, s as createDiscordFormModal, u as DISCORD_COMPONENT_ATTACHMENT_PREFIX, v as parseDiscordComponentCustomIdForInteraction, y as parseDiscordModalCustomId } from "./components-BCxyMNaH.js";
4
+ import { _ as parseDiscordComponentCustomId, b as parseDiscordModalCustomIdForInteraction, c as buildDiscordComponentMessage, d as readDiscordComponentSpec, f as resolveDiscordComponentAttachmentName, g as buildDiscordModalCustomId, h as buildDiscordComponentCustomId, l as buildDiscordComponentMessageFlags, m as DISCORD_MODAL_CUSTOM_ID_KEY, n as formatDiscordComponentEventText, o as DiscordFormModal, p as DISCORD_COMPONENT_CUSTOM_ID_KEY, r as buildDiscordInteractiveComponents, s as createDiscordFormModal, u as DISCORD_COMPONENT_ATTACHMENT_PREFIX, v as parseDiscordComponentCustomIdForInteraction, y as parseDiscordModalCustomId } from "./components-Bpf9ITyn.js";
5
5
  import { n as fetchDiscord, r as requestDiscord, t as DiscordApiError } from "./api-Kq7vtaSO.js";
6
- import { i as parseDiscordSendTarget, n as resolveDiscordTarget } from "./target-resolver-QZP1tC8H.js";
7
- import "./targets-DRvCCf1i.js";
8
- import { a as getDiscordExecApprovalApprovers, c as shouldSuppressLocalDiscordExecApprovalPrompt, o as isDiscordExecApprovalApprover, s as isDiscordExecApprovalClientEnabled } from "./conversation-identity-CzE0g3tC.js";
9
- import { i as resolveDiscordGroupToolPolicy, n as collectDiscordStatusIssues, r as resolveDiscordGroupRequireMention, t as discordPlugin } from "./channel-DMgQbhnj.js";
6
+ import { i as parseDiscordSendTarget, n as resolveDiscordTarget } from "./target-resolver-CVgOsap6.js";
7
+ import "./targets-CNDNKpqQ.js";
8
+ import { a as getDiscordExecApprovalApprovers, c as shouldSuppressLocalDiscordExecApprovalPrompt, o as isDiscordExecApprovalApprover, s as isDiscordExecApprovalClientEnabled } from "./conversation-identity-Be5JQPP9.js";
9
+ import { i as resolveDiscordGroupToolPolicy, n as collectDiscordStatusIssues, r as resolveDiscordGroupRequireMention, t as discordPlugin } from "./channel-BbDUsfl7.js";
10
10
  import { t as normalizeExplicitDiscordSessionKey } from "./session-key-normalization-wJgsKPNF.js";
11
- import { t as discordSetupPlugin } from "./channel.setup-Dh16wwV9.js";
12
- import { n as handleDiscordSubagentEnded, r as handleDiscordSubagentSpawning, t as handleDiscordSubagentDeliveryTarget } from "./subagent-hooks-BLRmOFEa.js";
13
- import { t as tryHandleDiscordMessageActionGuildAdmin } from "./handle-action.guild-admin-ozP4Jj--.js";
14
- import { n as listDiscordDirectoryGroupsFromConfig, r as listDiscordDirectoryPeersFromConfig } from "./directory-config-CkL6nnqZ.js";
15
- import { t as fetchPluralKitMessageInfo } from "./pluralkit-BX81hJh4.js";
11
+ import { t as discordSetupPlugin } from "./channel.setup-JaozRxYz.js";
12
+ import { n as handleDiscordSubagentEnded, r as handleDiscordSubagentSpawning, t as handleDiscordSubagentDeliveryTarget } from "./subagent-hooks-DHA_1pBI.js";
13
+ import { t as tryHandleDiscordMessageActionGuildAdmin } from "./handle-action.guild-admin-_LgqCYcN.js";
14
+ import { n as listDiscordDirectoryGroupsFromConfig, r as listDiscordDirectoryPeersFromConfig } from "./directory-config-oK2sOZ2m.js";
15
+ import { t as fetchPluralKitMessageInfo } from "./pluralkit-CTbOoDPp.js";
16
16
  import { a as resolveDiscordPrivilegedIntentsFromFlags, i as probeDiscord, n as fetchDiscordApplicationSummary, r as parseApplicationIdFromToken, t as fetchDiscordApplicationId } from "./probe-DfIM7zSY.js";
17
- import { t as collectDiscordSecurityAuditFindings } from "./security-audit-C_fzlczo.js";
17
+ import { t as collectDiscordSecurityAuditFindings } from "./security-audit-Bh_65L5C.js";
18
18
  import { a as mergeAbortSignals, i as DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, n as DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, r as DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, t as DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS } from "./timeouts-l_PsHQvX.js";
19
19
  import { resolveOpenProviderRuntimeGroupPolicy as resolveDiscordRuntimeGroupPolicy } from "openclaw/plugin-sdk/runtime-group-policy";
20
20
  //#region extensions/discord/api.ts
21
- const handleDiscordMessageAction = async (...args) => (await import("./channel-actions.runtime-BP_VU815.js")).handleDiscordMessageAction(...args);
21
+ const handleDiscordMessageAction = async (...args) => (await import("./channel-actions.runtime-92Esj8jy.js")).handleDiscordMessageAction(...args);
22
22
  //#endregion
23
23
  export { DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS, DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, DISCORD_COMPONENT_ATTACHMENT_PREFIX, DISCORD_COMPONENT_CUSTOM_ID_KEY, DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, DISCORD_MODAL_CUSTOM_ID_KEY, DiscordApiError, DiscordFormModal, buildDiscordComponentCustomId, buildDiscordComponentMessage, buildDiscordComponentMessageFlags, buildDiscordInteractiveComponents, buildDiscordModalCustomId, collectDiscordSecurityAuditFindings, collectDiscordStatusIssues, createDiscordActionGate, createDiscordFormModal, discordPlugin, discordSetupPlugin, fetchDiscord, fetchDiscordApplicationId, fetchDiscordApplicationSummary, fetchPluralKitMessageInfo, formatDiscordComponentEventText, getDiscordExecApprovalApprovers, handleDiscordMessageAction, handleDiscordSubagentDeliveryTarget, handleDiscordSubagentEnded, handleDiscordSubagentSpawning, inspectDiscordAccount, isDiscordExecApprovalApprover, isDiscordExecApprovalClientEnabled, listDiscordAccountIds, listDiscordDirectoryGroupsFromConfig, listDiscordDirectoryPeersFromConfig, listEnabledDiscordAccounts, looksLikeDiscordTargetId, mergeAbortSignals, mergeDiscordAccountConfig, normalizeDiscordMessagingTarget, normalizeDiscordOutboundTarget, normalizeExplicitDiscordSessionKey, parseApplicationIdFromToken, parseDiscordComponentCustomId, parseDiscordComponentCustomIdForInteraction as parseDiscordComponentCustomIdForCarbon, parseDiscordComponentCustomIdForInteraction, parseDiscordModalCustomId, parseDiscordModalCustomIdForInteraction as parseDiscordModalCustomIdForCarbon, parseDiscordModalCustomIdForInteraction, parseDiscordSendTarget, parseDiscordTarget, probeDiscord, readDiscordComponentSpec, requestDiscord, resolveDefaultDiscordAccountId, resolveDiscordAccount, resolveDiscordAccountConfig, resolveDiscordChannelId, resolveDiscordComponentAttachmentName, resolveDiscordGroupRequireMention, resolveDiscordGroupToolPolicy, resolveDiscordMaxLinesPerMessage, resolveDiscordPrivilegedIntentsFromFlags, resolveDiscordRuntimeGroupPolicy, resolveDiscordTarget, shouldSuppressLocalDiscordExecApprovalPrompt, tryHandleDiscordMessageActionGuildAdmin };
@@ -1,7 +1,7 @@
1
- import { B as Container, J as Separator, K as Row, M as serializePayload, R as Button, Wt as __exportAll, X as TextDisplay, ft as editChannelMessage, nt as createUserDmChannel, st as createChannelMessage, ut as deleteChannelMessage } from "./send.receipt--EtaMe11.js";
1
+ import { B as Container, J as Separator, K as Row, R as Button, Wt as __exportAll, X as TextDisplay, ft as editChannelMessage, j as serializePayload, nt as createUserDmChannel, st as createChannelMessage, ut as deleteChannelMessage } from "./send.receipt-D_6lR7zH.js";
2
2
  import { t as inspectDiscordAccount } from "./account-inspect-C4sJZNbI.js";
3
- import { M as createDiscordClient, b as stripUndefinedFields } from "./send.shared-CsGHs6ft.js";
4
- import { i as shouldHandleDiscordApprovalRequest, s as isDiscordExecApprovalClientEnabled } from "./conversation-identity-CzE0g3tC.js";
3
+ import { M as createDiscordClient, b as stripUndefinedFields } from "./send.shared-aYGYz83q.js";
4
+ import { i as shouldHandleDiscordApprovalRequest, s as isDiscordExecApprovalClientEnabled } from "./conversation-identity-Be5JQPP9.js";
5
5
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
6
6
  import { ButtonStyle } from "discord-api-types/v10";
7
7
  import { logDebug, logError } from "openclaw/plugin-sdk/logging-core";
@@ -1,7 +1,7 @@
1
- import { Wt as __exportAll } from "./send.receipt--EtaMe11.js";
1
+ import { Wt as __exportAll } from "./send.receipt-D_6lR7zH.js";
2
2
  import { t as inspectDiscordAccount } from "./account-inspect-C4sJZNbI.js";
3
- import { E as fetchChannelPermissionsDiscord } from "./send.shared-CsGHs6ft.js";
4
- import "./send-CVjV4H6l.js";
3
+ import { E as fetchChannelPermissionsDiscord } from "./send.shared-aYGYz83q.js";
4
+ import "./send-CM1NFFrZ.js";
5
5
  import { n as collectDiscordAuditChannelIdsForAccount, t as auditDiscordChannelPermissionsWithFetcher } from "./audit-core-xwjIczO0.js";
6
6
  //#region extensions/discord/src/audit.ts
7
7
  var audit_exports = /* @__PURE__ */ __exportAll({
@@ -1,14 +1,14 @@
1
- import { Ht as parseDiscordTarget, a as normalizeDiscordMessagingTarget, i as looksLikeDiscordTargetId } from "./send.receipt--EtaMe11.js";
1
+ import { Ht as parseDiscordTarget, a as normalizeDiscordMessagingTarget, i as looksLikeDiscordTargetId } from "./send.receipt-D_6lR7zH.js";
2
2
  import { c as resolveDiscordAccountAllowFrom, r as listDiscordAccountIds, s as resolveDiscordAccount } from "./accounts-dXTfmnSZ.js";
3
3
  import { a as projectCredentialSnapshotFields, n as PAIRING_APPROVED_MESSAGE, o as resolveConfiguredFromCredentialStatuses, r as buildTokenChannelStatusSummary, t as DEFAULT_ACCOUNT_ID } from "./channel-api-CAJ0wMoV.js";
4
- import { x as resolveDiscordOutboundSessionRoute } from "./components-BCxyMNaH.js";
4
+ import { x as resolveDiscordOutboundSessionRoute } from "./components-Bpf9ITyn.js";
5
5
  import { t as getDiscordRuntime } from "./runtime-DgnVQ7zW.js";
6
- import { c as shouldSuppressLocalDiscordExecApprovalPrompt, n as resolveDiscordCurrentConversationIdentity, r as getDiscordApprovalCapability } from "./conversation-identity-CzE0g3tC.js";
6
+ import { c as shouldSuppressLocalDiscordExecApprovalPrompt, n as resolveDiscordCurrentConversationIdentity, r as getDiscordApprovalCapability } from "./conversation-identity-Be5JQPP9.js";
7
7
  import { r as resolveRequiredDiscordChannelPermissions } from "./audit-core-xwjIczO0.js";
8
- import { t as discordMessageActions$1 } from "./channel-actions-Cm0QHxsv.js";
8
+ import { t as discordMessageActions$1 } from "./channel-actions-DICb5UUl.js";
9
9
  import { n as setThreadBindingMaxAgeBySessionKey, t as setThreadBindingIdleTimeoutBySessionKey } from "./thread-bindings.session-updates-D5gY2ZTE.js";
10
- import { n as discordOutbound } from "./outbound-adapter-BVTo8aVg.js";
11
- import { a as discordSecurityAdapter, i as discordSetupAdapter, n as discordConfigAdapter, t as createDiscordPluginBase } from "./shared-DFP_4nlg.js";
10
+ import { n as discordOutbound } from "./outbound-adapter-C8lzfSt6.js";
11
+ import { a as discordSecurityAdapter, i as discordSetupAdapter, n as discordConfigAdapter, t as createDiscordPluginBase } from "./shared-BwF8ShpE.js";
12
12
  import { t as normalizeExplicitDiscordSessionKey } from "./session-key-normalization-wJgsKPNF.js";
13
13
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString, normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/string-coerce-runtime";
14
14
  import { createChatChannelPlugin } from "openclaw/plugin-sdk/channel-core";
@@ -114,13 +114,13 @@ let discordProbeRuntimePromise;
114
114
  let discordAuditModulePromise;
115
115
  let discordSendModulePromise;
116
116
  let discordDirectoryLiveModulePromise;
117
- const loadDiscordDirectoryConfigModule = createLazyRuntimeModule(() => import("./directory-config-CkL6nnqZ.js").then((n) => n.t));
118
- const loadDiscordResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels-BQl2WT8v.js").then((n) => n.n));
119
- const loadDiscordResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-CqW9vVcr.js").then((n) => n.n));
120
- const loadDiscordThreadBindingsManagerModule = createLazyRuntimeModule(() => import("./thread-bindings.manager-ANA-Hk_y.js").then((n) => n.a));
121
- const loadDiscordTargetResolverModule = createLazyRuntimeModule(() => import("./target-resolver-QZP1tC8H.js").then((n) => n.r));
117
+ const loadDiscordDirectoryConfigModule = createLazyRuntimeModule(() => import("./directory-config-oK2sOZ2m.js").then((n) => n.t));
118
+ const loadDiscordResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels-CIV0C8ST.js").then((n) => n.n));
119
+ const loadDiscordResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-LZKYHrJx.js").then((n) => n.n));
120
+ const loadDiscordThreadBindingsManagerModule = createLazyRuntimeModule(() => import("./thread-bindings.manager-UJ5FvZfO.js").then((n) => n.a));
121
+ const loadDiscordTargetResolverModule = createLazyRuntimeModule(() => import("./target-resolver-CVgOsap6.js").then((n) => n.r));
122
122
  async function loadDiscordProviderRuntime() {
123
- discordProviderRuntimePromise ??= import("./provider.runtime-DnKAm3Kg.js");
123
+ discordProviderRuntimePromise ??= import("./provider.runtime-DN-gyQYd.js");
124
124
  return await discordProviderRuntimePromise;
125
125
  }
126
126
  async function loadDiscordProbeRuntime() {
@@ -128,15 +128,15 @@ async function loadDiscordProbeRuntime() {
128
128
  return await discordProbeRuntimePromise;
129
129
  }
130
130
  async function loadDiscordAuditModule() {
131
- discordAuditModulePromise ??= import("./audit-D3I68CWK.js").then((n) => n.n);
131
+ discordAuditModulePromise ??= import("./audit-DE8lNdMv.js").then((n) => n.n);
132
132
  return await discordAuditModulePromise;
133
133
  }
134
134
  async function loadDiscordSendModule() {
135
- discordSendModulePromise ??= import("./send-CVjV4H6l.js").then((n) => n.t);
135
+ discordSendModulePromise ??= import("./send-CM1NFFrZ.js").then((n) => n.t);
136
136
  return await discordSendModulePromise;
137
137
  }
138
138
  async function loadDiscordDirectoryLiveModule() {
139
- discordDirectoryLiveModulePromise ??= import("./directory-live-DZeXDKJ_.js").then((n) => n.t);
139
+ discordDirectoryLiveModulePromise ??= import("./directory-live-BRjo48ro.js").then((n) => n.t);
140
140
  return await discordDirectoryLiveModulePromise;
141
141
  }
142
142
  //#endregion
@@ -1,14 +1,14 @@
1
1
  import { r as listDiscordAccountIds, t as createDiscordActionGate } from "./accounts-dXTfmnSZ.js";
2
2
  import { t as inspectDiscordAccount } from "./account-inspect-C4sJZNbI.js";
3
- import { d as readDiscordComponentSpec } from "./components-BCxyMNaH.js";
4
- import { i as withDiscordInboundEventDeliveryMetadata } from "./inbound-event-delivery-DTGIjZVJ.js";
3
+ import { d as readDiscordComponentSpec } from "./components-Bpf9ITyn.js";
4
+ import { i as withDiscordInboundEventDeliveryMetadata } from "./inbound-event-delivery-CEPlt2uz.js";
5
5
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
6
6
  import { createUnionActionGate } from "openclaw/plugin-sdk/channel-actions";
7
7
  import { extractToolSend } from "openclaw/plugin-sdk/tool-send";
8
8
  //#region extensions/discord/src/channel-actions.ts
9
9
  let discordChannelActionsRuntimePromise;
10
10
  async function loadDiscordChannelActionsRuntime() {
11
- discordChannelActionsRuntimePromise ??= import("./channel-actions.runtime-BP_VU815.js");
11
+ discordChannelActionsRuntimePromise ??= import("./channel-actions.runtime-92Esj8jy.js");
12
12
  return await discordChannelActionsRuntimePromise;
13
13
  }
14
14
  function listDiscoverableDiscordAccounts(cfg) {
@@ -1,10 +1,10 @@
1
- import { Ut as resolveDiscordChannelId } from "./send.receipt--EtaMe11.js";
2
- import { i as buildDiscordPresentationComponents, r as buildDiscordInteractiveComponents } from "./components-BCxyMNaH.js";
3
- import { t as handleDiscordAction } from "./runtime-ZBAq7Trm.js";
4
- import "./targets-DRvCCf1i.js";
1
+ import { Ut as resolveDiscordChannelId } from "./send.receipt-D_6lR7zH.js";
2
+ import { i as buildDiscordPresentationComponents, r as buildDiscordInteractiveComponents } from "./components-Bpf9ITyn.js";
3
+ import { t as handleDiscordAction } from "./runtime-DBkHf0qH.js";
4
+ import "./targets-CNDNKpqQ.js";
5
5
  import "./action-runtime-api.js";
6
- import { r as notifyDiscordInboundEventOutboundSuccess } from "./inbound-event-delivery-DTGIjZVJ.js";
7
- import { t as tryHandleDiscordMessageActionGuildAdmin } from "./handle-action.guild-admin-ozP4Jj--.js";
6
+ import { r as notifyDiscordInboundEventOutboundSuccess } from "./inbound-event-delivery-CEPlt2uz.js";
7
+ import { t as tryHandleDiscordMessageActionGuildAdmin } from "./handle-action.guild-admin-_LgqCYcN.js";
8
8
  import { normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/string-coerce-runtime";
9
9
  import { resolveReactionMessageId } from "openclaw/plugin-sdk/channel-actions";
10
10
  import { readBooleanParam } from "openclaw/plugin-sdk/boolean-param";
@@ -1,2 +1,2 @@
1
- import { t as DiscordChannelConfigSchema } from "./config-schema-DordNAyp.js";
1
+ import { t as DiscordChannelConfigSchema } from "./config-schema-CTzLsQlB.js";
2
2
  export { DiscordChannelConfigSchema };
@@ -1,2 +1,2 @@
1
- import { t as discordPlugin } from "./channel-DMgQbhnj.js";
1
+ import { t as discordPlugin } from "./channel-BbDUsfl7.js";
2
2
  export { discordPlugin };
@@ -1,7 +1,8 @@
1
1
  import { a as mergeDiscordAccountConfig, c as resolveDiscordAccountAllowFrom, l as resolveDiscordAccountConfig, m as resolveDiscordToken, o as resolveDefaultDiscordAccountId } from "./accounts-dXTfmnSZ.js";
2
- import { i as discordSetupAdapter, t as createDiscordPluginBase } from "./shared-DFP_4nlg.js";
3
- import { t as resolveDiscordChannelAllowlist } from "./resolve-channels-BQl2WT8v.js";
4
- import { t as resolveDiscordUserAllowlist } from "./resolve-users-CqW9vVcr.js";
2
+ import "./channel-api-CAJ0wMoV.js";
3
+ import { i as discordSetupAdapter, t as createDiscordPluginBase } from "./shared-BwF8ShpE.js";
4
+ import { t as resolveDiscordChannelAllowlist } from "./resolve-channels-CIV0C8ST.js";
5
+ import { t as resolveDiscordUserAllowlist } from "./resolve-users-LZKYHrJx.js";
5
6
  import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id";
6
7
  import { hasConfiguredSecretInput, normalizeSecretInputString } from "openclaw/plugin-sdk/secret-input";
7
8
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -1,4 +1,4 @@
1
- import { B as Container, F as Modal, G as RoleSelectMenu, H as LinkButton, Ht as parseDiscordTarget, I as RadioGroup, J as Separator, K as Row, L as TextInput, N as CheckboxGroup, P as Label, Q as UserSelectMenu, R as Button, U as MediaGallery, V as File, W as MentionableSelectMenu, Wt as __exportAll, X as TextDisplay, Y as StringSelectMenu, Z as Thumbnail, et as parseCustomId, q as Section, z as ChannelSelectMenu } from "./send.receipt--EtaMe11.js";
1
+ import { B as Container, F as Modal, G as RoleSelectMenu, H as LinkButton, Ht as parseDiscordTarget, I as RadioGroup, J as Separator, K as Row, L as TextInput, N as CheckboxGroup, P as Label, Q as UserSelectMenu, R as Button, U as MediaGallery, V as File, W as MentionableSelectMenu, Wt as __exportAll, X as TextDisplay, Y as StringSelectMenu, Z as Thumbnail, et as parseCustomId, q as Section, z as ChannelSelectMenu } from "./send.receipt-D_6lR7zH.js";
2
2
  import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
3
3
  import { buildOutboundBaseSessionKey } from "openclaw/plugin-sdk/routing";
4
4
  import { buildThreadAwareOutboundSessionRoute } from "openclaw/plugin-sdk/channel-core";
@@ -42,6 +42,7 @@ function resolveDiscordOutboundTargetKindHint(params) {
42
42
  const target = params.target.trim();
43
43
  if (/^channel:/i.test(target)) return "channel";
44
44
  if (/^(user:|discord:|@|<@!?)/i.test(target)) return "user";
45
+ return "channel";
45
46
  }
46
47
  //#endregion
47
48
  //#region extensions/discord/src/component-custom-id.ts
@@ -240,7 +240,7 @@ const DiscordChannelConfigSchema = buildChannelConfigSchema(DiscordConfigSchema,
240
240
  },
241
241
  "voice.realtime.wakeNames": {
242
242
  label: "Discord Realtime Wake Names",
243
- help: "Names that allow OpenAI agent-proxy Discord realtime voice to respond when requireWakeName is enabled."
243
+ help: "One- or two-word activation names that allow OpenAI agent-proxy Discord realtime voice to respond when requireWakeName is enabled."
244
244
  },
245
245
  "voice.realtime.bootstrapContextFiles": {
246
246
  label: "Discord Realtime Bootstrap Context Files",
@@ -285,7 +285,7 @@ const DiscordChannelConfigSchema = buildChannelConfigSchema(DiscordConfigSchema,
285
285
  },
286
286
  "voice.captureSilenceGraceMs": {
287
287
  label: "Discord Voice Capture Silence Grace (ms)",
288
- help: "Silence window after Discord reports a speaker ended before OpenClaw finalizes the audio segment for transcription. Default: 2500."
288
+ help: "Silence window after Discord reports a speaker ended before OpenClaw finalizes the audio segment for transcription. Default: 2000."
289
289
  },
290
290
  "voice.tts": {
291
291
  label: "Discord Voice Text-to-Speech",
@@ -1,8 +1,8 @@
1
- import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-Bia3BmP_.js";
1
+ import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-CLMMYrdF.js";
2
2
  import { n as secretTargetRegistryEntries, t as collectRuntimeConfigAssignments } from "./secret-config-contract-BjM-1hr9.js";
3
3
  import { n as unsupportedSecretRefSurfacePatterns, t as collectUnsupportedSecretRefConfigCandidates } from "./security-contract-DSHk7I2w.js";
4
4
  import { t as deriveLegacySessionChatType } from "./session-contract-BO5tlIdl.js";
5
- import { i as testing, n as createThreadBindingManager } from "./thread-bindings.manager-ANA-Hk_y.js";
6
- import { n as listDiscordDirectoryGroupsFromConfig, r as listDiscordDirectoryPeersFromConfig } from "./directory-config-CkL6nnqZ.js";
7
- import { t as collectDiscordSecurityAuditFindings } from "./security-audit-C_fzlczo.js";
5
+ import { i as testing, n as createThreadBindingManager } from "./thread-bindings.manager-UJ5FvZfO.js";
6
+ import { n as listDiscordDirectoryGroupsFromConfig, r as listDiscordDirectoryPeersFromConfig } from "./directory-config-oK2sOZ2m.js";
7
+ import { t as collectDiscordSecurityAuditFindings } from "./security-audit-Bh_65L5C.js";
8
8
  export { collectDiscordSecurityAuditFindings, collectRuntimeConfigAssignments, collectUnsupportedSecretRefConfigCandidates, createThreadBindingManager, deriveLegacySessionChatType, testing as discordThreadBindingTesting, legacyConfigRules, listDiscordDirectoryGroupsFromConfig, listDiscordDirectoryPeersFromConfig, normalizeCompatibilityConfig, secretTargetRegistryEntries, unsupportedSecretRefSurfacePatterns };
@@ -1,4 +1,4 @@
1
- import { Ht as parseDiscordTarget } from "./send.receipt--EtaMe11.js";
1
+ import { Ht as parseDiscordTarget } from "./send.receipt-D_6lR7zH.js";
2
2
  import { r as listDiscordAccountIds, s as resolveDiscordAccount } from "./accounts-dXTfmnSZ.js";
3
3
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  import { createLazyChannelApprovalNativeRuntimeAdapter } from "openclaw/plugin-sdk/approval-handler-adapter-runtime";
@@ -229,7 +229,7 @@ function createDiscordApprovalCapability(configOverride) {
229
229
  request,
230
230
  configOverride
231
231
  }),
232
- load: async () => (await import("./approval-handler.runtime-DFRH9nZ4.js").then((n) => n.t)).discordApprovalNativeRuntime
232
+ load: async () => (await import("./approval-handler.runtime-BlGs6D0-.js").then((n) => n.t)).discordApprovalNativeRuntime
233
233
  })
234
234
  });
235
235
  }
@@ -1,4 +1,4 @@
1
- import { Wt as __exportAll } from "./send.receipt--EtaMe11.js";
1
+ import { Wt as __exportAll } from "./send.receipt-D_6lR7zH.js";
2
2
  import { a as mergeDiscordAccountConfig, c as resolveDiscordAccountAllowFrom, o as resolveDefaultDiscordAccountId } from "./accounts-dXTfmnSZ.js";
3
3
  import { normalizeAccountId } from "openclaw/plugin-sdk/account-id";
4
4
  import { createResolvedDirectoryEntriesLister } from "openclaw/plugin-sdk/directory-config-runtime";
@@ -1,2 +1,2 @@
1
- import { n as listDiscordDirectoryGroupsFromConfig, r as listDiscordDirectoryPeersFromConfig } from "./directory-config-CkL6nnqZ.js";
1
+ import { n as listDiscordDirectoryGroupsFromConfig, r as listDiscordDirectoryPeersFromConfig } from "./directory-config-oK2sOZ2m.js";
2
2
  export { listDiscordDirectoryGroupsFromConfig, listDiscordDirectoryPeersFromConfig };
@@ -1,4 +1,4 @@
1
- import { Wt as __exportAll } from "./send.receipt--EtaMe11.js";
1
+ import { Wt as __exportAll } from "./send.receipt-D_6lR7zH.js";
2
2
  import { p as normalizeDiscordToken, s as resolveDiscordAccount } from "./accounts-dXTfmnSZ.js";
3
3
  import { n as fetchDiscord } from "./api-Kq7vtaSO.js";
4
4
  import { a as normalizeDiscordSlug } from "./allow-list-BnkWtVpA.js";
@@ -1,10 +1,11 @@
1
1
  import { o as resolveDefaultDiscordAccountId } from "./accounts-dXTfmnSZ.js";
2
2
  import { t as inspectDiscordAccount } from "./account-inspect-C4sJZNbI.js";
3
- import { r as DISCORD_LEGACY_CONFIG_RULES } from "./shared-DFP_4nlg.js";
4
- import { n as normalizeCompatibilityConfig } from "./doctor-contract-Bia3BmP_.js";
3
+ import { r as DISCORD_LEGACY_CONFIG_RULES } from "./shared-BwF8ShpE.js";
4
+ import { n as normalizeCompatibilityConfig } from "./doctor-contract-CLMMYrdF.js";
5
5
  import { t as isDiscordMutableAllowEntry } from "./security-doctor-uUo8hTD5.js";
6
6
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
7
7
  import { collectProviderDangerousNameMatchingScopes } from "openclaw/plugin-sdk/runtime-doctor";
8
+ import "openclaw/plugin-sdk/channel-contract";
8
9
  //#region extensions/discord/src/doctor.ts
9
10
  function asObjectRecord$1(value) {
10
11
  return value && typeof value === "object" && !Array.isArray(value) ? value : null;
@@ -1,4 +1,5 @@
1
1
  import { t as resolveDiscordPreviewStreamMode } from "./preview-streaming-CQ7PsV9J.js";
2
+ import { isSupportedRealtimeVoiceActivationName, normalizeRealtimeVoiceActivationNamePrefix } from "openclaw/plugin-sdk/realtime-voice";
2
3
  import { asObjectRecord, normalizeLegacyChannelAliases } from "openclaw/plugin-sdk/runtime-doctor";
3
4
  //#region extensions/discord/src/doctor-contract.ts
4
5
  const LEGACY_TTS_PROVIDER_KEYS = [
@@ -47,6 +48,20 @@ function hasLegacyDiscordAccountGuildChannelAgentId(value) {
47
48
  if (!accounts) return false;
48
49
  return Object.values(accounts).some((account) => hasLegacyDiscordGuildChannelAgentId(account));
49
50
  }
51
+ function hasUnsupportedRealtimeWakeNamesInVoice(value) {
52
+ const wakeNames = asObjectRecord(asObjectRecord(value)?.realtime)?.wakeNames;
53
+ return Array.isArray(wakeNames) ? wakeNames.length === 0 || wakeNames.some((wakeName) => typeof wakeName === "string" && !isSupportedRealtimeVoiceActivationName(wakeName)) : false;
54
+ }
55
+ function hasUnsupportedDiscordRealtimeWakeNames(value) {
56
+ const entry = asObjectRecord(value);
57
+ if (!entry) return false;
58
+ return hasUnsupportedRealtimeWakeNamesInVoice(entry.voice);
59
+ }
60
+ function hasUnsupportedDiscordAccountRealtimeWakeNames(value) {
61
+ const accounts = asObjectRecord(value);
62
+ if (!accounts) return false;
63
+ return Object.values(accounts).some((account) => hasUnsupportedDiscordRealtimeWakeNames(account));
64
+ }
50
65
  function mergeMissing(target, source) {
51
66
  for (const [key, value] of Object.entries(source)) {
52
67
  if (value === void 0) continue;
@@ -95,6 +110,62 @@ function migrateLegacyTtsConfig(tts, pathLabel, changes) {
95
110
  }
96
111
  return changed;
97
112
  }
113
+ function normalizeUnsupportedRealtimeWakeNames(entry, pathPrefix, changes) {
114
+ const voice = asObjectRecord(entry.voice);
115
+ const realtime = asObjectRecord(voice?.realtime);
116
+ const wakeNames = realtime?.wakeNames;
117
+ if (!voice || !realtime || !Array.isArray(wakeNames)) return {
118
+ entry,
119
+ changed: false
120
+ };
121
+ if (wakeNames.length === 0) {
122
+ const nextRealtime = { ...realtime };
123
+ delete nextRealtime.wakeNames;
124
+ changes.push(`Removed empty ${pathPrefix}.voice.realtime.wakeNames; unset wake names use the default agent/OpenClaw fallback.`);
125
+ return {
126
+ entry: {
127
+ ...entry,
128
+ voice: {
129
+ ...voice,
130
+ realtime: nextRealtime
131
+ }
132
+ },
133
+ changed: true
134
+ };
135
+ }
136
+ let normalized = 0;
137
+ let removed = 0;
138
+ const nextWakeNames = wakeNames.flatMap((wakeName) => {
139
+ if (typeof wakeName !== "string" || isSupportedRealtimeVoiceActivationName(wakeName)) return [wakeName];
140
+ const nextWakeName = normalizeRealtimeVoiceActivationNamePrefix(wakeName);
141
+ if (!nextWakeName) {
142
+ removed += 1;
143
+ return [];
144
+ }
145
+ normalized += 1;
146
+ return [nextWakeName];
147
+ });
148
+ if (normalized === 0 && removed === 0) return {
149
+ entry,
150
+ changed: false
151
+ };
152
+ const dedupedWakeNames = Array.from(new Set(nextWakeNames));
153
+ const nextRealtime = { ...realtime };
154
+ if (dedupedWakeNames.length > 0) nextRealtime.wakeNames = dedupedWakeNames;
155
+ else delete nextRealtime.wakeNames;
156
+ if (normalized > 0) changes.push(`Shortened ${normalized} unsupported ${pathPrefix}.voice.realtime.wakeNames entries to one or two words.`);
157
+ if (removed > 0) changes.push(`Removed ${removed} unsupported ${pathPrefix}.voice.realtime.wakeNames entries with no usable words.`);
158
+ return {
159
+ entry: {
160
+ ...entry,
161
+ voice: {
162
+ ...voice,
163
+ realtime: nextRealtime
164
+ }
165
+ },
166
+ changed: true
167
+ };
168
+ }
98
169
  function normalizeDiscordGuildChannelAllowAliases(params) {
99
170
  const guilds = asObjectRecord(params.entry.guilds);
100
171
  if (!guilds) return {
@@ -264,6 +335,20 @@ const legacyConfigRules = [
264
335
  ],
265
336
  message: "channels.discord.accounts.<id>.guilds.<id>.channels.<id>.agentId is legacy; use top-level bindings[] with match.accountId for per-channel Discord agent routing. Run \"openclaw doctor --fix\".",
266
337
  match: hasLegacyDiscordAccountGuildChannelAgentId
338
+ },
339
+ {
340
+ path: ["channels", "discord"],
341
+ message: "channels.discord.voice.realtime.wakeNames entries longer than two words are unsupported; use one- or two-word activation names. Run \"openclaw doctor --fix\".",
342
+ match: hasUnsupportedDiscordRealtimeWakeNames
343
+ },
344
+ {
345
+ path: [
346
+ "channels",
347
+ "discord",
348
+ "accounts"
349
+ ],
350
+ message: "channels.discord.accounts.<id>.voice.realtime.wakeNames entries longer than two words are unsupported; use one- or two-word activation names. Run \"openclaw doctor --fix\".",
351
+ match: hasUnsupportedDiscordAccountRealtimeWakeNames
267
352
  }
268
353
  ];
269
354
  function normalizeCompatibilityConfig({ cfg }) {
@@ -343,6 +428,9 @@ function normalizeCompatibilityConfig({ cfg }) {
343
428
  });
344
429
  nextAccount = normalizedAgentIds.entry;
345
430
  accountChanged = accountChanged || normalizedAgentIds.changed;
431
+ const normalizedWakeNames = normalizeUnsupportedRealtimeWakeNames(nextAccount, `channels.discord.accounts.${accountId}`, changes);
432
+ nextAccount = normalizedWakeNames.entry;
433
+ accountChanged = accountChanged || normalizedWakeNames.changed;
346
434
  if (!accountChanged) continue;
347
435
  nextAccounts[accountId] = nextAccount;
348
436
  accountsChanged = true;
@@ -363,6 +451,9 @@ function normalizeCompatibilityConfig({ cfg }) {
363
451
  };
364
452
  changed = true;
365
453
  }
454
+ const normalizedWakeNames = normalizeUnsupportedRealtimeWakeNames(updated, "channels.discord", changes);
455
+ updated = normalizedWakeNames.entry;
456
+ changed = changed || normalizedWakeNames.changed;
366
457
  if (!changed) return {
367
458
  config: cfg,
368
459
  changes: []
@@ -1,2 +1,2 @@
1
- import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-Bia3BmP_.js";
1
+ import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-CLMMYrdF.js";
2
2
  export { legacyConfigRules, normalizeCompatibilityConfig };
@@ -1,4 +1,4 @@
1
- import { a as readDiscordChannelCreateParams, n as isDiscordModerationAction, o as readDiscordChannelEditParams, r as readDiscordModerationCommand, s as readDiscordChannelMoveParams, t as handleDiscordAction } from "./runtime-ZBAq7Trm.js";
1
+ import { a as readDiscordChannelCreateParams, n as isDiscordModerationAction, o as readDiscordChannelEditParams, r as readDiscordModerationCommand, s as readDiscordChannelMoveParams, t as handleDiscordAction } from "./runtime-DBkHf0qH.js";
2
2
  import "./action-runtime-api.js";
3
3
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  import { readNumberParam, readStringArrayParam, readStringParam } from "openclaw/plugin-sdk/agent-runtime";
@@ -1,3 +1,4 @@
1
+ import { asOptionalRecord, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
1
2
  //#region extensions/discord/src/inbound-event-delivery.ts
2
3
  const DISCORD_INBOUND_EVENT_DELIVERY_KEY = "__openclawInboundEventDelivery";
3
4
  const registry = /* @__PURE__ */ new Map();
@@ -26,17 +27,11 @@ function notifyDiscordInboundEventOutboundSuccess(params) {
26
27
  registry.delete(key);
27
28
  event.markInboundEventDelivered();
28
29
  }
29
- function readRecord(value) {
30
- return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
31
- }
32
- function readString(value) {
33
- return typeof value === "string" && value.trim() ? value.trim() : void 0;
34
- }
35
30
  function withDiscordInboundEventDeliveryMetadata(payload, params) {
36
31
  const sessionKey = params.sessionKey?.trim();
37
32
  if (!sessionKey || params.inboundEventKind !== "room_event") return payload;
38
- const channelData = readRecord(payload.channelData) ?? {};
39
- const discordData = readRecord(channelData.discord) ?? {};
33
+ const channelData = asOptionalRecord(payload.channelData) ?? {};
34
+ const discordData = asOptionalRecord(channelData.discord) ?? {};
40
35
  return {
41
36
  ...payload,
42
37
  channelData: {
@@ -52,11 +47,11 @@ function withDiscordInboundEventDeliveryMetadata(payload, params) {
52
47
  };
53
48
  }
54
49
  function notifyDiscordInboundEventOutboundPayloadSuccess(params) {
55
- const metadata = readRecord(readRecord(readRecord(params.payload.channelData)?.discord)?.[DISCORD_INBOUND_EVENT_DELIVERY_KEY]);
50
+ const metadata = asOptionalRecord(asOptionalRecord(asOptionalRecord(params.payload.channelData)?.discord)?.[DISCORD_INBOUND_EVENT_DELIVERY_KEY]);
56
51
  if (!metadata) return;
57
52
  notifyDiscordInboundEventOutboundSuccess({
58
- sessionKey: readString(metadata.sessionKey),
59
- inboundEventKind: readString(metadata.inboundEventKind),
53
+ sessionKey: normalizeOptionalString(metadata.sessionKey),
54
+ inboundEventKind: normalizeOptionalString(metadata.inboundEventKind),
60
55
  to: params.to,
61
56
  accountId: params.accountId
62
57
  });
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
- import { t as discordVoiceMeetingNotesSourceProvider } from "./meeting-notes-source-dVTfnnBi.js";
2
- import "./meeting-notes-source-api.js";
3
1
  import { registerDiscordSubagentHooks } from "./subagent-hooks-api.js";
2
+ import { t as discordVoiceTranscriptsSourceProvider } from "./transcripts-source-emawQzBc.js";
3
+ import "./transcripts-source-api.js";
4
4
  import { defineBundledChannelEntry } from "openclaw/plugin-sdk/channel-entry-contract";
5
5
  //#region extensions/discord/index.ts
6
6
  var discord_default = defineBundledChannelEntry({
@@ -22,7 +22,7 @@ var discord_default = defineBundledChannelEntry({
22
22
  },
23
23
  registerFull(api) {
24
24
  registerDiscordSubagentHooks(api);
25
- api.registerMeetingNotesSourceProvider(discordVoiceMeetingNotesSourceProvider);
25
+ api.registerTranscriptSourceProvider(discordVoiceTranscriptsSourceProvider);
26
26
  }
27
27
  });
28
28
  //#endregion