@openclaw/discord 2026.9.1 → 2026.9.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 (138) hide show
  1. package/dist/action-runtime-api.js +1 -1
  2. package/dist/{activities-api-E-segZn6.js → activities-api-CTcGq3Hf.js} +4 -4
  3. package/dist/activities-api.js +1 -1
  4. package/dist/{allow-list-C2JuH-R0.js → allow-list-DBTtR2dz.js} +3 -29
  5. package/dist/api.js +12 -12
  6. package/dist/{approval-handler.runtime-CW5k3mSa.js → approval-handler.runtime-DUSe5fyH.js} +5 -5
  7. package/dist/{audit-B9rydv5a.js → audit-DpPfwoJM.js} +4 -4
  8. package/dist/{channel-D93LnbTE.js → channel-BHajPgwR.js} +16 -16
  9. package/dist/{channel-actions.runtime-DMFv4doE.js → channel-actions.runtime-DS8pXo0S.js} +29 -32
  10. package/dist/channel-plugin-api.js +1 -1
  11. package/dist/{channel.setup-DTL7kPOM.js → channel.setup-BWmMe1tT.js} +3 -3
  12. package/dist/command-owners-D78sAoOz.js +10 -0
  13. package/dist/{components-DmXYIQ26.js → components-BimX47Mq.js} +1 -1
  14. package/dist/{conversation-binding-route-24afmvEC.js → conversation-binding-route-DuR5NGIx.js} +1 -1
  15. package/dist/{directory-config-BD4YL7wT.js → directory-config-CD2v2Szs.js} +1 -1
  16. package/dist/directory-contract-api.js +1 -1
  17. package/dist/{directory-live-BrFVc1Ds.js → directory-live-DaJzWJ2N.js} +2 -2
  18. package/dist/{doctor-BUB41_lr.js → doctor-D4HH1inA.js} +6 -3
  19. package/dist/doctor-contract-api.js +28 -26
  20. package/dist/{handle-action.guild-admin-B0egstYq.js → handle-action.guild-admin-4We6wWQU.js} +6 -3
  21. package/dist/index.js +1 -1
  22. package/dist/{ingress-identity-BCzfPPYM.js → ingress-identity-XNmW-mZS.js} +1 -1
  23. package/dist/{message-handler-Qdw9c0j4.js → message-handler-DhgBabyU.js} +52 -65
  24. package/dist/{message-handler.preflight-Dxi2yBfR.js → message-handler.preflight-oZ7dQCd0.js} +12 -12
  25. package/dist/{message-handler.process-BYDjtxZJ.js → message-handler.process-BzCYf1pa.js} +14 -14
  26. package/dist/{message-text-BRVqYm-t.js → message-text-DK4NnBg-.js} +1 -1
  27. package/dist/{outbound-adapter-DEhthWTk.js → outbound-adapter-CtggmGh9.js} +6 -6
  28. package/dist/{outbound-components-DehyxvA4.js → outbound-components-Dn8SJWMS.js} +3 -3
  29. package/dist/{outbound-session-route-BFGRF9fE.js → outbound-session-route-Q_HEusBQ.js} +5 -6
  30. package/dist/{owner-access-yc1sX7Gx.js → owner-access-Cp8r6Ipf.js} +3 -2
  31. package/dist/{pluralkit-XmmAHoV6.js → pluralkit-BY75YcK0.js} +1 -1
  32. package/dist/{provider-session.runtime-BA2BPyZ4.js → provider-session.runtime-BL2lHBH7.js} +3 -3
  33. package/dist/{provider-DuDtKbF8.js → provider-uKmmrDM4.js} +28 -28
  34. package/dist/provider.runtime-C-IkWF2w.js +2 -0
  35. package/dist/{realtime-session.runtime-DgSbX6ay.js → realtime-session.runtime-CGYm1t_0.js} +705 -295
  36. package/dist/{resolve-allowlist-common-BJ5UZNNT.js → resolve-allowlist-common-sKIKy-cF.js} +1 -1
  37. package/dist/{resolve-channels-CYseD5Uw.js → resolve-channels-CoiMlWy0.js} +3 -3
  38. package/dist/{resolve-users-DrmhDrqm.js → resolve-users-DJpiokfW.js} +2 -2
  39. package/dist/{retry-BNCxiyyR.js → retry-DQt1zDgH.js} +238 -184
  40. package/dist/{runtime-DB7Fb6AU.js → runtime-BHsdEdr5.js} +1 -1
  41. package/dist/{runtime-BbWNtfyq.js → runtime-Ghtfh5ZA.js} +32 -24
  42. package/dist/runtime-api.js +18 -18
  43. package/dist/{send-BnTEIeLE.js → send-CZeWKUiA.js} +3 -3
  44. package/dist/{send.components-BWVEcjRP.js → send.components-BG5IDABj.js} +4 -4
  45. package/dist/{send.outbound-b5xwHTlL.js → send.outbound-DHuFUL6W.js} +10 -44
  46. package/dist/{send.shared-5vxBTagO.js → send.shared-B0n_fWzu.js} +62 -141
  47. package/dist/{sender-identity-Dt0imZyY.js → sender-identity-B8Ncfi63.js} +1 -1
  48. package/dist/setup-plugin-api.js +1 -1
  49. package/dist/{shared-BSJWHEMA.js → shared-C3dKun_X.js} +6 -3
  50. package/dist/{subagent-hooks-IzQKX4RQ.js → subagent-hooks-ZoQXEI1E.js} +2 -2
  51. package/dist/subagent-hooks-api.js +1 -1
  52. package/dist/{system-events-BOiDS8b3.js → system-events-DFF_awl7.js} +2 -2
  53. package/dist/{target-resolver-BVI8xSSC.js → target-resolver-DLtHDwMK.js} +2 -2
  54. package/dist/targets-BObRyaKX.js +3 -0
  55. package/dist/{thread-bindings-D7mcaXQC.js → thread-bindings-DKvsNjQR.js} +5 -5
  56. package/dist/{thread-bindings.manager-B1oySiVc.js → thread-bindings.manager-pbbRT5gb.js} +5 -5
  57. package/dist/{thread-bindings.session-updates-CC7HoQvt.js → thread-bindings.session-updates-t6jeFB1-.js} +1 -1
  58. package/dist/{thread-bindings.state-D8OMdk4O.js → thread-bindings.state-DtgOqsbX.js} +34 -1
  59. package/dist/{threading-OQnL-0Zx.js → threading-BCx49X-6.js} +3 -3
  60. package/dist/{transcripts-source-D8lH7AkN.js → transcripts-source-Dc6Nnli5.js} +48 -5
  61. package/dist/transcripts-source-api.js +1 -1
  62. package/dist/{typing-C9q0AQMb.js → typing-CuopV-Hi.js} +1 -1
  63. package/dist/{voice-runtime-Dfhjh1tV.js → voice-runtime-BQnILUbG.js} +82 -35
  64. package/node_modules/@discordjs/voice/node_modules/@types/node/README.md +1 -1
  65. package/node_modules/@discordjs/voice/node_modules/@types/node/buffer.buffer.d.ts +5 -5
  66. package/node_modules/@discordjs/voice/node_modules/@types/node/crypto.d.ts +2 -2
  67. package/node_modules/@discordjs/voice/node_modules/@types/node/http.d.ts +16 -0
  68. package/node_modules/@discordjs/voice/node_modules/@types/node/http2.d.ts +10 -2
  69. package/node_modules/@discordjs/voice/node_modules/@types/node/package.json +2 -2
  70. package/node_modules/@discordjs/voice/node_modules/@types/node/process.d.ts +52 -0
  71. package/node_modules/@discordjs/voice/node_modules/@types/node/quic.d.ts +210 -28
  72. package/node_modules/@discordjs/voice/node_modules/@types/node/sqlite.d.ts +6 -2
  73. package/node_modules/@discordjs/voice/node_modules/@types/node/test.d.ts +36 -0
  74. package/node_modules/typebox/build/format/json_pointer.d.mts +2 -2
  75. package/node_modules/typebox/build/format/json_pointer.mjs +2 -2
  76. package/node_modules/typebox/build/format/json_pointer_uri_fragment.d.mts +2 -2
  77. package/node_modules/typebox/build/format/json_pointer_uri_fragment.mjs +2 -2
  78. package/node_modules/typebox/build/format/relative_json_pointer.d.mts +2 -2
  79. package/node_modules/typebox/build/format/relative_json_pointer.mjs +2 -2
  80. package/node_modules/typebox/build/system/memory/assign.mjs +2 -1
  81. package/node_modules/typebox/build/system/memory/create.mjs +3 -4
  82. package/node_modules/typebox/build/system/memory/discard.mjs +2 -2
  83. package/node_modules/typebox/build/system/memory/freeze.d.mts +4 -0
  84. package/node_modules/typebox/build/system/memory/freeze.mjs +6 -0
  85. package/node_modules/typebox/build/system/memory/update.mjs +3 -2
  86. package/node_modules/typebox/package.json +1 -1
  87. package/node_modules/undici/docs/docs/api/Client.md +4 -0
  88. package/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +3 -2
  89. package/node_modules/undici/docs/docs/api/EventSource.md +4 -0
  90. package/node_modules/undici/docs/docs/api/Interceptors.md +7 -3
  91. package/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +7 -1
  92. package/node_modules/undici/lib/cache/memory-cache-store.js +2 -2
  93. package/node_modules/undici/lib/core/symbols.js +2 -0
  94. package/node_modules/undici/lib/dispatcher/agent.js +7 -2
  95. package/node_modules/undici/lib/dispatcher/balanced-pool.js +7 -4
  96. package/node_modules/undici/lib/dispatcher/client-h1.js +12 -4
  97. package/node_modules/undici/lib/dispatcher/client-h2.js +43 -3
  98. package/node_modules/undici/lib/dispatcher/client.js +3 -2
  99. package/node_modules/undici/lib/dispatcher/dispatcher-base.js +13 -1
  100. package/node_modules/undici/lib/dispatcher/dispatcher.js +15 -1
  101. package/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +3 -0
  102. package/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +10 -3
  103. package/node_modules/undici/lib/dispatcher/proxy-agent.js +18 -1
  104. package/node_modules/undici/lib/dispatcher/retry-agent.js +3 -0
  105. package/node_modules/undici/lib/dispatcher/round-robin-pool.js +1 -1
  106. package/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +91 -21
  107. package/node_modules/undici/lib/handler/cache-handler.js +29 -5
  108. package/node_modules/undici/lib/handler/decorator-handler.js +7 -1
  109. package/node_modules/undici/lib/handler/deduplication-handler.js +12 -6
  110. package/node_modules/undici/lib/handler/redirect-handler.js +21 -4
  111. package/node_modules/undici/lib/handler/retry-handler.js +148 -30
  112. package/node_modules/undici/lib/interceptor/cache.js +65 -12
  113. package/node_modules/undici/lib/interceptor/decompress.js +115 -13
  114. package/node_modules/undici/lib/interceptor/deduplicate.js +5 -4
  115. package/node_modules/undici/lib/interceptor/dns.js +7 -0
  116. package/node_modules/undici/lib/interceptor/dump.js +10 -23
  117. package/node_modules/undici/lib/mock/mock-agent.js +13 -1
  118. package/node_modules/undici/lib/mock/mock-utils.js +11 -10
  119. package/node_modules/undici/lib/util/cache.js +45 -3
  120. package/node_modules/undici/lib/web/cookies/parse.js +150 -147
  121. package/node_modules/undici/lib/web/eventsource/eventsource-stream.js +28 -1
  122. package/node_modules/undici/lib/web/eventsource/eventsource.js +13 -3
  123. package/node_modules/undici/lib/web/fetch/index.js +6 -0
  124. package/node_modules/undici/lib/web/fetch/request.js +2 -3
  125. package/node_modules/undici/lib/web/fetch/util.js +6 -1
  126. package/node_modules/undici/lib/web/webidl/index.js +3 -3
  127. package/node_modules/undici/lib/web/websocket/connection.js +1 -1
  128. package/node_modules/undici/lib/web/websocket/permessage-deflate.js +5 -0
  129. package/node_modules/undici/lib/web/websocket/stream/websocketstream.js +8 -10
  130. package/node_modules/undici/package.json +3 -3
  131. package/node_modules/undici/types/client.d.ts +10 -0
  132. package/node_modules/undici/types/interceptors.d.ts +2 -0
  133. package/node_modules/undici/types/mock-agent.d.ts +11 -10
  134. package/node_modules/undici/types/socks5-proxy-agent.d.ts +2 -0
  135. package/openclaw.plugin.json +1 -2
  136. package/package.json +6 -6
  137. package/dist/provider.runtime-Db8YwZBv.js +0 -2
  138. package/dist/targets-DbxVbq8k.js +0 -3
@@ -1,23 +1,23 @@
1
- import { n as registerBuiltDiscordComponentMessage, r as sendDiscordComponentMessage, t as editDiscordComponentMessage } from "./send.components-BWVEcjRP.js";
1
+ import { n as registerBuiltDiscordComponentMessage, r as sendDiscordComponentMessage, t as editDiscordComponentMessage } from "./send.components-BG5IDABj.js";
2
2
  import { r as setDiscordRuntime } from "./runtime-DgnVQ7zW.js";
3
- import { n as listDiscordDirectoryGroupsLive, r as listDiscordDirectoryPeersLive } from "./directory-live-BrFVc1Ds.js";
4
- import { _ as resolveDiscordShouldRequireMention, a as normalizeDiscordSlug, c as resolveDiscordChannelConfigWithFallback, f as resolveDiscordGuildEntry, n as isDiscordGroupAllowedByPolicy, r as normalizeDiscordAllowList, s as resolveDiscordChannelConfig, t as allowListMatches, u as resolveDiscordCommandAuthorized, v as resolveGroupDmAllow, y as shouldEmitDiscordReactionNotification } from "./allow-list-C2JuH-R0.js";
5
- import { C as hasAllGuildPermissionsDiscord, G as unregisterGateway, H as clearGateways, S as fetchMemberGuildPermissionsDiscord, T as hasAnyGuildPermissionDiscord, U as getGateway, W as registerGateway, _ as DiscordSendError, x as fetchChannelPermissionsDiscord } from "./send.shared-5vxBTagO.js";
6
- import { n as sendPollDiscord, r as sendStickerDiscord, t as sendMessageDiscord } from "./send.outbound-b5xwHTlL.js";
3
+ import { n as listDiscordDirectoryGroupsLive, r as listDiscordDirectoryPeersLive } from "./directory-live-DaJzWJ2N.js";
4
+ import { _ as resolveGroupDmAllow, a as normalizeDiscordSlug, c as resolveDiscordChannelConfigWithFallback, d as resolveDiscordGuildEntry, g as resolveDiscordShouldRequireMention, n as isDiscordGroupAllowedByPolicy, r as normalizeDiscordAllowList, s as resolveDiscordChannelConfig, t as allowListMatches, u as resolveDiscordCommandAuthorized, v as shouldEmitDiscordReactionNotification } from "./allow-list-DBTtR2dz.js";
5
+ import { C as hasAllGuildPermissionsDiscord, G as unregisterGateway, H as clearGateways, S as fetchMemberGuildPermissionsDiscord, T as hasAnyGuildPermissionDiscord, U as getGateway, W as registerGateway, _ as DiscordSendError, x as fetchChannelPermissionsDiscord } from "./send.shared-B0n_fWzu.js";
6
+ import { n as sendPollDiscord, r as sendStickerDiscord, t as sendMessageDiscord } from "./send.outbound-DHuFUL6W.js";
7
7
  import { i as setPresence, n as getPresence, r as presenceCacheSize, t as clearPresences } from "./presence-cache-z1N8MbJ3.js";
8
- 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 "./send-BnTEIeLE.js";
8
+ 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 "./send-CZeWKUiA.js";
9
9
  import { a as isAbortError, i as DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, l as runDiscordTaskWithTimeout, 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 "./timeouts-D86uWLt_.js";
10
- 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 "./runtime-BbWNtfyq.js";
11
- import { p as discordMessageActions, t as resolveDiscordOutboundSessionRoute } from "./outbound-session-route-BFGRF9fE.js";
12
- import { C as resolveThreadBindingMaxAgeExpiresAt, S as resolveThreadBindingInactivityExpiresAt, w as resolveThreadBindingMaxAgeMs, x as resolveThreadBindingIdleTimeoutMs } from "./thread-bindings.state-D8OMdk4O.js";
13
- import { n as setThreadBindingMaxAgeBySessionKey, t as setThreadBindingIdleTimeoutBySessionKey } from "./thread-bindings.session-updates-CC7HoQvt.js";
14
- import { t as resolveDiscordChannelAllowlist } from "./resolve-channels-CYseD5Uw.js";
15
- import { t as resolveDiscordUserAllowlist } from "./resolve-users-DrmhDrqm.js";
16
- import { _ as resolveThreadBindingThreadName, g as resolveThreadBindingIntroText, h as formatThreadBindingDurationLabel, m as resolveThreadBindingPersonaFromRecord, n as createThreadBindingManager, p as resolveThreadBindingPersona, r as getThreadBindingManager, t as createNoopThreadBindingManager } from "./thread-bindings.manager-B1oySiVc.js";
17
- import { a as reconcileAcpThreadBindingsOnStartup, c as resolveDiscordThreadBindingMaxAgeMs, i as listThreadBindingsForAccount, l as resolveThreadBindingsEnabled, n as autoBindSpawnedDiscordSubagent, o as unbindThreadBindingsBySessionKey, r as listThreadBindingsBySessionKey, s as resolveDiscordThreadBindingIdleTimeoutMs } from "./thread-bindings-D7mcaXQC.js";
10
+ 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 "./runtime-Ghtfh5ZA.js";
11
+ import { p as discordMessageActions, t as resolveDiscordOutboundSessionRoute } from "./outbound-session-route-Q_HEusBQ.js";
12
+ import { b as resolveThreadBindingMaxAgeExpiresAt, v as resolveThreadBindingIdleTimeoutMs, x as resolveThreadBindingMaxAgeMs, y as resolveThreadBindingInactivityExpiresAt } from "./thread-bindings.state-DtgOqsbX.js";
13
+ import { n as setThreadBindingMaxAgeBySessionKey, t as setThreadBindingIdleTimeoutBySessionKey } from "./thread-bindings.session-updates-t6jeFB1-.js";
14
+ import { t as resolveDiscordChannelAllowlist } from "./resolve-channels-CoiMlWy0.js";
15
+ import { t as resolveDiscordUserAllowlist } from "./resolve-users-DJpiokfW.js";
16
+ import { _ as resolveThreadBindingThreadName, g as resolveThreadBindingIntroText, h as formatThreadBindingDurationLabel, m as resolveThreadBindingPersonaFromRecord, n as createThreadBindingManager, p as resolveThreadBindingPersona, r as getThreadBindingManager, t as createNoopThreadBindingManager } from "./thread-bindings.manager-pbbRT5gb.js";
17
+ import { a as reconcileAcpThreadBindingsOnStartup, c as resolveDiscordThreadBindingMaxAgeMs, i as listThreadBindingsForAccount, l as resolveThreadBindingsEnabled, n as autoBindSpawnedDiscordSubagent, o as unbindThreadBindingsBySessionKey, r as listThreadBindingsBySessionKey, s as resolveDiscordThreadBindingIdleTimeoutMs } from "./thread-bindings-DKvsNjQR.js";
18
18
  import { i as probeDiscord, n as fetchDiscordApplicationSummary, o as resolveDiscordPrivilegedIntentsFromFlags, r as parseApplicationIdFromToken, t as fetchDiscordApplicationId } from "./probe-3ovFAp3b.js";
19
- import { r as collectDiscordAuditChannelIds, t as auditDiscordChannelPermissions } from "./audit-B9rydv5a.js";
20
- import { d as resolveDiscordGatewayIntents, f as waitForDiscordGatewayPluginRegistration, p as createDiscordNativeCommand, t as monitorDiscordProvider, u as createDiscordGatewayPlugin, y as registerDiscordListener } from "./provider-DuDtKbF8.js";
21
- import { o as sanitizeDiscordThreadName, r as resolveDiscordReplyTarget } from "./threading-OQnL-0Zx.js";
22
- import { t as createDiscordMessageHandler } from "./message-handler-Qdw9c0j4.js";
19
+ import { r as collectDiscordAuditChannelIds, t as auditDiscordChannelPermissions } from "./audit-DpPfwoJM.js";
20
+ import { d as resolveDiscordGatewayIntents, f as waitForDiscordGatewayPluginRegistration, p as createDiscordNativeCommand, t as monitorDiscordProvider, u as createDiscordGatewayPlugin, y as registerDiscordListener } from "./provider-uKmmrDM4.js";
21
+ import { o as sanitizeDiscordThreadName, r as resolveDiscordReplyTarget } from "./threading-BCx49X-6.js";
22
+ import { t as createDiscordMessageHandler } from "./message-handler-DhgBabyU.js";
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,7 +1,7 @@
1
- import { $t as listGuildEmojis, At as editChannelMessage, B as readDiscordMessage, Bt as unpinChannelMessage, Ct as deleteOwnMessageReaction, Dt as deleteChannel, Et as createThread, Ft as listChannelMessages, Gt as createGuildScheduledEvent, Ht as createGuildBan, I as DiscordError, It as listChannelPins, Jt as getGuild, Kt as createGuildSticker, L as RateLimitError, Lt as pinChannelMessage, Mt as getChannelMessage, Ot as deleteChannelMessage, Pt as listChannelArchivedThreads, Qt as listGuildChannels, R as isUnknownDiscordVoiceStateError, Rt as searchGuildMessages, St as createOwnMessageReaction, Ut as createGuildChannel, V as readRetryAfter, Vt as addGuildMemberRole, Wt as createGuildEmoji, Xt as getGuildVoiceState, Yt as getGuildMember, Zt as listGuildActiveThreads, a as recordDiscordMessageCreateAmbiguity, an as removeGuildMemberRole, c as createDiscordSendReceiptFromResults, en as listGuildRoles, in as removeGuildMember, jt as getChannel, kt as editChannel, l as createDiscordSendResult, n as classifyDiscordDeliveryFailure, nn as moveGuildChannels, o as chunkDiscordTextWithMode, on as timeoutGuildMember, qt as deleteChannelPermission, r as createDiscordRetryRunner, rn as putChannelPermission, sn as __exportAll, tn as listGuildScheduledEvents, wt as listMessageReactionUsers, z as readDiscordCode, zt as sendChannelTyping } from "./retry-BNCxiyyR.js";
1
+ import { $t as listGuildEmojis, At as editChannelMessage, B as readDiscordMessage, Bt as unpinChannelMessage, Ct as deleteOwnMessageReaction, Dt as deleteChannel, Et as createThread, Ft as listChannelMessages, Gt as createGuildScheduledEvent, Ht as createGuildBan, I as DiscordError, It as listChannelPins, Jt as getGuild, Kt as createGuildSticker, L as RateLimitError, Lt as pinChannelMessage, Mt as getChannelMessage, Ot as deleteChannelMessage, Pt as listChannelArchivedThreads, Qt as listGuildChannels, R as isUnknownDiscordVoiceStateError, Rt as searchGuildMessages, St as createOwnMessageReaction, Ut as createGuildChannel, V as readRetryAfter, Vt as addGuildMemberRole, Wt as createGuildEmoji, Xt as getGuildVoiceState, Yt as getGuildMember, Zt as listGuildActiveThreads, a as recordDiscordMessageCreateAmbiguity, an as removeGuildMemberRole, c as createDiscordSendReceiptFromResults, en as listGuildRoles, in as removeGuildMember, jt as getChannel, kt as editChannel, l as createDiscordSendResult, n as classifyDiscordDeliveryFailure, nn as moveGuildChannels, o as chunkDiscordTextWithMode, on as timeoutGuildMember, qt as deleteChannelPermission, r as createDiscordRetryRunner, rn as putChannelPermission, sn as __exportAll, tn as listGuildScheduledEvents, wt as listMessageReactionUsers, z as readDiscordCode, zt as sendChannelTyping } from "./retry-DQt1zDgH.js";
2
2
  import { t as parseDiscordRetryAfterBodySeconds } from "./retry-after-BrLjLUJi.js";
3
- import { C as hasAllGuildPermissionsDiscord, I as resolveDiscordClientAccountContext, K as parseAndResolveChannelRecipient, L as resolveDiscordRest, M as resolveDiscordSuppressEmbeds, N as createDiscordClient, O as createDiscordMessageNonce, R as DISCORD_REST_TIMEOUT_MS, S as fetchMemberGuildPermissionsDiscord, T as hasAnyGuildPermissionDiscord, _ as DiscordSendError, b as canViewDiscordGuildChannel, g as DISCORD_MAX_STICKER_BYTES, h as DISCORD_MAX_EVENT_COVER_BYTES, i as formatReactionEmoji, k as resolveDiscordMessageFlags, l as resolveChannelId, m as DISCORD_MAX_EMOJI_BYTES, n as buildDiscordTextChunks, o as normalizeEmojiName, p as sendDiscordText, r as buildReactionIdentifier, s as normalizeReactionEmoji, t as buildDiscordSendError, v as canManageGuildMemberRoleDiscord, w as hasAnyChannelPermissionDiscord, x as fetchChannelPermissionsDiscord, y as canManageGuildRoleDiscord } from "./send.shared-5vxBTagO.js";
4
- import { n as sendPollDiscord, o as rewriteDiscordKnownMentions, r as sendStickerDiscord, t as sendMessageDiscord } from "./send.outbound-b5xwHTlL.js";
3
+ import { C as hasAllGuildPermissionsDiscord, I as resolveDiscordClientAccountContext, K as parseAndResolveChannelRecipient, L as resolveDiscordRest, M as resolveDiscordSuppressEmbeds, N as createDiscordClient, O as createDiscordMessageNonce, R as DISCORD_REST_TIMEOUT_MS, S as fetchMemberGuildPermissionsDiscord, T as hasAnyGuildPermissionDiscord, _ as DiscordSendError, b as canViewDiscordGuildChannel, g as DISCORD_MAX_STICKER_BYTES, h as DISCORD_MAX_EVENT_COVER_BYTES, i as formatReactionEmoji, k as resolveDiscordMessageFlags, l as resolveChannelId, m as DISCORD_MAX_EMOJI_BYTES, n as buildDiscordTextChunks, o as normalizeEmojiName, p as sendDiscordText, r as buildReactionIdentifier, s as normalizeReactionEmoji, t as buildDiscordSendError, v as canManageGuildMemberRoleDiscord, w as hasAnyChannelPermissionDiscord, x as fetchChannelPermissionsDiscord, y as canManageGuildRoleDiscord } from "./send.shared-B0n_fWzu.js";
4
+ import { n as sendPollDiscord, o as rewriteDiscordKnownMentions, r as sendStickerDiscord, t as sendMessageDiscord } from "./send.outbound-DHuFUL6W.js";
5
5
  import { n as DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS } from "./timeouts-D86uWLt_.js";
6
6
  import fs from "node:fs/promises";
7
7
  import { ChannelType } from "discord-api-types/v10";
@@ -1,8 +1,8 @@
1
- import { At as editChannelMessage, J as serializePayload, Tt as createChannelMessage, l as createDiscordSendResult, sn as __exportAll } from "./retry-BNCxiyyR.js";
2
- import { d as buildDiscordComponentMessage, f as buildDiscordComponentMessageFlags, g as resolveDiscordComponentAttachmentName } from "./components-DmXYIQ26.js";
1
+ import { At as editChannelMessage, J as serializePayload, Tt as createChannelMessage, l as createDiscordSendResult, sn as __exportAll } from "./retry-DQt1zDgH.js";
2
+ import { d as buildDiscordComponentMessage, f as buildDiscordComponentMessageFlags, g as resolveDiscordComponentAttachmentName } from "./components-BimX47Mq.js";
3
3
  import { n as getOptionalDiscordRuntime } from "./runtime-DgnVQ7zW.js";
4
- import { E as SUPPRESS_NOTIFICATIONS_FLAG, K as parseAndResolveChannelRecipient, N as createDiscordClient, O as createDiscordMessageNonce, l as resolveChannelId, t as buildDiscordSendError, u as resolveDiscordChannel } from "./send.shared-5vxBTagO.js";
5
- import { t as sendMessageDiscord } from "./send.outbound-b5xwHTlL.js";
4
+ import { E as SUPPRESS_NOTIFICATIONS_FLAG, K as parseAndResolveChannelRecipient, N as createDiscordClient, O as createDiscordMessageNonce, l as resolveChannelId, t as buildDiscordSendError, u as resolveDiscordChannel } from "./send.shared-B0n_fWzu.js";
5
+ import { t as sendMessageDiscord } from "./send.outbound-DHuFUL6W.js";
6
6
  import { ChannelType } from "discord-api-types/v10";
7
7
  import { asDateTimestampMs, isFutureDateTimestampMs, resolveDateTimestampMs, resolveExpiresAtMsFromDurationMs } from "openclaw/plugin-sdk/number-runtime";
8
8
  import { uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -1,6 +1,6 @@
1
- import { Et as createThread, Tt as createChannelMessage, c as createDiscordSendReceiptFromResults, d as createReusableDiscordReplyReference, l as createDiscordSendResult } from "./retry-BNCxiyyR.js";
2
- import { i as normalizeDiscordHandleKey, o as resolveDiscordDirectoryUserId } from "./directory-live-BrFVc1Ds.js";
3
- import { A as resolveDiscordSendComponents, D as buildDiscordMessageRequest, K as parseAndResolveChannelRecipient, M as resolveDiscordSuppressEmbeds, N as createDiscordClient, O as createDiscordMessageNonce, a as normalizeDiscordPollInput, c as normalizeStickerIds, f as sendDiscordMedia, j as resolveDiscordSendEmbeds, k as resolveDiscordMessageFlags, l as resolveChannelId, n as buildDiscordTextChunks, p as sendDiscordText, t as buildDiscordSendError, u as resolveDiscordChannel } from "./send.shared-5vxBTagO.js";
1
+ import { Et as createThread, Tt as createChannelMessage, c as createDiscordSendReceiptFromResults, d as createReusableDiscordReplyReference, l as createDiscordSendResult } from "./retry-DQt1zDgH.js";
2
+ import { i as normalizeDiscordHandleKey, o as resolveDiscordDirectoryUserId } from "./directory-live-DaJzWJ2N.js";
3
+ import { A as resolveDiscordSendComponents, D as buildDiscordMessageRequest, K as parseAndResolveChannelRecipient, M as resolveDiscordSuppressEmbeds, N as createDiscordClient, O as createDiscordMessageNonce, a as normalizeDiscordPollInput, c as normalizeStickerIds, f as sendDiscordMedia, j as resolveDiscordSendEmbeds, k as resolveDiscordMessageFlags, l as resolveChannelId, n as buildDiscordTextChunks, p as sendDiscordText, t as buildDiscordSendError, u as resolveDiscordChannel } from "./send.shared-B0n_fWzu.js";
4
4
  import { ChannelType } from "discord-api-types/v10";
5
5
  import { expectDefined } from "openclaw/plugin-sdk/expect-runtime";
6
6
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString, normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -10,36 +10,8 @@ import { truncateUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
10
10
  import { resolveMarkdownTableMode } from "openclaw/plugin-sdk/markdown-table-runtime";
11
11
  import { resolveChunkMode } from "openclaw/plugin-sdk/reply-chunking";
12
12
  import { fromMarkdown } from "mdast-util-from-markdown";
13
- import { FormatCapabilityProfile, convertMarkdownTables, renderMarkdownWithMarkers } from "openclaw/plugin-sdk/text-chunking";
13
+ import { convertMarkdownTables } from "openclaw/plugin-sdk/text-chunking";
14
14
  //#region extensions/discord/src/markdown.ts
15
- const DISCORD_FORMAT_PROFILE = FormatCapabilityProfile.define({
16
- mechanism: "markdown",
17
- constructs: { table: "fallback" },
18
- chunk: {
19
- limit: 2e3,
20
- unit: "utf16"
21
- }
22
- });
23
- const DISCORD_BOLD_PROBE_TEXT = "openclaw-discord-bold";
24
- const DISCORD_BOLD_PROBE = renderMarkdownWithMarkers({
25
- text: DISCORD_BOLD_PROBE_TEXT,
26
- styles: [{
27
- start: 0,
28
- end: 21,
29
- style: "bold"
30
- }],
31
- links: []
32
- }, {
33
- styleMarkers: { bold: {
34
- open: "**",
35
- close: "**"
36
- } },
37
- escapeText: (value) => value
38
- }, DISCORD_FORMAT_PROFILE);
39
- const DISCORD_BOLD_MARKERS = {
40
- open: DISCORD_BOLD_PROBE.slice(0, DISCORD_BOLD_PROBE.indexOf(DISCORD_BOLD_PROBE_TEXT)),
41
- close: DISCORD_BOLD_PROBE.slice(DISCORD_BOLD_PROBE.indexOf(DISCORD_BOLD_PROBE_TEXT) + 21)
42
- };
43
15
  const DISCORD_NATIVE_TOKEN_RE = /<a?:[A-Za-z0-9_]+:\d+>|<\/[^>]+:\d+>/giu;
44
16
  const DISCORD_URL_START_RE = /(?:[A-Za-z][A-Za-z0-9+.-]*:\/\/|www\.)/giu;
45
17
  function findDiscordUrlRanges(markdown) {
@@ -221,19 +193,13 @@ function normalizeDiscordBold(markdown) {
221
193
  end
222
194
  };
223
195
  });
224
- const edits = [...spans.flatMap((span, spanId) => [{
225
- spanId,
226
- start: span.start,
227
- marker: DISCORD_BOLD_MARKERS.open,
228
- consume: 2,
229
- delimiter: true
230
- }, {
196
+ const edits = [...spans.flatMap((span, spanId) => [span.start, span.end - 2].map((start) => ({
231
197
  spanId,
232
- start: span.end - 2,
233
- marker: DISCORD_BOLD_MARKERS.close,
198
+ start,
199
+ marker: "**",
234
200
  consume: 2,
235
201
  delimiter: true
236
- }]), ...contentEdits].toSorted((left, right) => left.start - right.start);
202
+ }))), ...contentEdits].toSorted((left, right) => left.start - right.start);
237
203
  const editsBySpan = /* @__PURE__ */ new Map();
238
204
  for (const edit of edits) {
239
205
  const spanEdits = editsBySpan.get(edit.spanId);
@@ -742,7 +708,7 @@ async function sendPollDiscord(to, poll, opts) {
742
708
  async function resolveDiscordStructuredSendContext(to, opts) {
743
709
  requireRuntimeConfig(opts.cfg, "Discord structured send");
744
710
  const { rest, request, channelId, account: accountInfo } = await resolveDiscordSendTarget(to, opts);
745
- const content = opts.content?.trim();
711
+ const content = opts.content;
746
712
  return {
747
713
  send: async (kind, body) => {
748
714
  const result = await request(async () => {
@@ -760,7 +726,7 @@ async function resolveDiscordStructuredSendContext(to, opts) {
760
726
  threadId: kind === "poll" ? opts.threadId : void 0
761
727
  });
762
728
  },
763
- rewrittenContent: content ? rewriteDiscordKnownMentions(content, {
729
+ rewrittenContent: content?.trim() ? rewriteDiscordKnownMentions(content, {
764
730
  accountId: accountInfo.accountId,
765
731
  mentionAliases: accountInfo.config.mentionAliases
766
732
  }) : void 0,
@@ -1,10 +1,9 @@
1
- import { F as RequestClient, J as serializePayload, Jt as getGuild, Nt as getThreadMember, Tt as createChannelMessage, Y as Embed, Yt as getGuildMember, bt as createUserDmChannel, f as resolveDiscordReplyMessageId, jt as getChannel, o as chunkDiscordTextWithMode, q as hasDiscordV2Components, r as createDiscordRetryRunner, xt as getCurrentUser } from "./retry-BNCxiyyR.js";
1
+ import { F as RequestClient, J as serializePayload, Jt as getGuild, Nt as getThreadMember, Tt as createChannelMessage, Y as Embed, Yt as getGuildMember, bt as createUserDmChannel, f as resolveDiscordReplyMessageId, jt as getChannel, o as chunkDiscordTextWithMode, q as hasDiscordV2Components, r as createDiscordRetryRunner, xt as getCurrentUser } from "./retry-DQt1zDgH.js";
2
2
  import { c as resolveDiscordAccount, m as normalizeDiscordToken, o as mergeDiscordAccountConfig } from "./accounts-CwJQoLjM.js";
3
- import { t as parseAndResolveDiscordTarget } from "./target-resolver-BVI8xSSC.js";
3
+ import { t as parseAndResolveDiscordTarget } from "./target-resolver-DLtHDwMK.js";
4
4
  import { t as isDiscordThreadChannelType } from "./channel-type-CVLZyGYS.js";
5
5
  import { ChannelType, MessageFlags, PermissionFlagsBits } from "discord-api-types/v10";
6
6
  import { randomBytes } from "node:crypto";
7
- import { expectDefined } from "openclaw/plugin-sdk/expect-runtime";
8
7
  import { normalizeAccountId } from "openclaw/plugin-sdk/routing";
9
8
  import { normalizeOptionalString, normalizeStringEntries } from "openclaw/plugin-sdk/string-coerce-runtime";
10
9
  import { requireRuntimeConfig } from "openclaw/plugin-sdk/plugin-config-runtime";
@@ -646,166 +645,88 @@ function buildDiscordTextChunks(text, opts = {}) {
646
645
  });
647
646
  return resolveTextChunksWithFallback(text, chunks);
648
647
  }
649
- async function sendDiscordText(params) {
650
- const { rest, channelId, text, request, reply, maxLinesPerMessage, components, embeds, allowedMentions, chunkMode, silent, suppressEmbeds, maxChars, onResult, onPlatformSendDispatch, assertPlatformSendAuthorized } = params;
651
- const chunks = buildDiscordTextChunks(text, {
652
- maxLinesPerMessage,
653
- chunkMode,
654
- maxChars
655
- });
648
+ async function sendDiscordChunks(params, upload) {
649
+ const chunks = buildDiscordTextChunks(params.text, params);
656
650
  if (!chunks.length) chunks.push("");
657
- const sendChunk = async (chunk, isFirst) => {
658
- const chunkComponents = resolveDiscordSendComponents({
659
- components,
651
+ const platformMessageIds = [];
652
+ let primary;
653
+ for (const [index, chunk] of chunks.entries()) {
654
+ const isFirst = index === 0;
655
+ if (upload && !isFirst && !chunk.trim()) continue;
656
+ const files = isFirst ? upload?.files : void 0;
657
+ const components = resolveDiscordSendComponents({
658
+ ...params,
660
659
  text: chunk,
661
660
  isFirst
662
661
  });
663
- const chunkEmbeds = resolveDiscordSendEmbeds({
664
- embeds,
662
+ const embeds = resolveDiscordSendEmbeds({
663
+ ...params,
665
664
  isFirst
666
665
  });
667
- if (!chunk.trim() && !chunkComponents?.length && !chunkEmbeds?.length) throw new Error("Message must be non-empty for Discord sends");
668
- const chunkReplyTo = resolveDiscordReplyMessageId(reply, isFirst);
669
- const kind = chunkComponents?.length || chunkEmbeds?.length ? "card" : "text";
670
- const flags = resolveDiscordMessageFlags({
671
- silent,
672
- suppressEmbeds: suppressEmbeds && !chunkEmbeds?.length
673
- });
666
+ if (!chunk.trim() && !components?.length && !embeds?.length && !files?.length) throw new Error("Message must be non-empty for Discord sends");
667
+ const replyToId = resolveDiscordReplyMessageId(params.reply, isFirst);
668
+ const kind = files ? "media" : components?.length || embeds?.length ? "card" : "text";
674
669
  const body = buildDiscordMessageRequest({
675
670
  endpoint: "create-message",
676
671
  text: chunk,
677
- components: chunkComponents,
678
- embeds: chunkEmbeds,
679
- allowedMentions,
680
- flags,
681
- replyTo: chunkReplyTo
672
+ components,
673
+ embeds,
674
+ files,
675
+ allowedMentions: params.allowedMentions,
676
+ flags: resolveDiscordMessageFlags({
677
+ silent: params.silent,
678
+ suppressEmbeds: params.suppressEmbeds && !embeds?.length
679
+ }),
680
+ replyTo: replyToId
682
681
  });
683
- return {
684
- result: await request(async () => {
685
- await onPlatformSendDispatch?.();
686
- assertPlatformSendAuthorized?.();
687
- return createChannelMessage(rest, channelId, { body });
688
- }, "text", { safety: "nonce-protected-create" }),
689
- replyToId: chunkReplyTo,
690
- kind
691
- };
692
- };
693
- if (chunks.length === 1) {
694
- const { result, replyToId, kind } = await sendChunk(expectDefined(chunks.at(0), "single Discord text chunk"), true);
695
- await onResult?.(result, kind, replyToId);
696
- return {
697
- ...result,
698
- platformMessageIds: result.id ? [result.id] : []
699
- };
700
- }
701
- const platformMessageIds = [];
702
- let last = null;
703
- for (const [index, chunk] of chunks.entries()) {
704
- const sent = await sendChunk(chunk, index === 0);
705
- last = sent.result;
706
- await onResult?.(last, sent.kind, sent.replyToId);
707
- if (last.id) platformMessageIds.push(last.id);
682
+ let result;
683
+ try {
684
+ result = await params.request(async () => {
685
+ await params.onPlatformSendDispatch?.();
686
+ params.assertPlatformSendAuthorized?.();
687
+ return createChannelMessage(params.rest, params.channelId, { body });
688
+ }, files ? "media" : "text", { safety: "nonce-protected-create" });
689
+ } catch (error) {
690
+ if (files && upload) return upload.onRejected(error);
691
+ throw error;
692
+ }
693
+ await params.onResult?.(result, kind, replyToId);
694
+ if (result.id) platformMessageIds.push(result.id);
695
+ primary = upload ? primary ?? result : result;
708
696
  }
709
- if (!last) throw new Error("Discord send failed (empty chunk result)");
697
+ if (!primary) throw new Error("Discord send failed (empty chunk result)");
710
698
  return {
711
- ...last,
699
+ ...primary,
712
700
  platformMessageIds
713
701
  };
714
702
  }
703
+ async function sendDiscordText(params) {
704
+ return sendDiscordChunks(params);
705
+ }
715
706
  async function sendDiscordMedia(params) {
716
- const { rest, channelId, text, mediaUrl, filename, mediaAccess, mediaLocalRoots, mediaReadFile, maxBytes, reply, request, maxLinesPerMessage, components, embeds, allowedMentions, chunkMode, silent, suppressEmbeds, maxChars, onResult, onPlatformSendDispatch, assertPlatformSendAuthorized } = params;
717
- const media = await loadWebMedia(mediaUrl, buildOutboundMediaLoadOptions({
718
- maxBytes,
719
- mediaAccess,
720
- mediaLocalRoots,
721
- mediaReadFile
707
+ const media = await loadWebMedia(params.mediaUrl, buildOutboundMediaLoadOptions({
708
+ maxBytes: params.maxBytes,
709
+ mediaAccess: params.mediaAccess,
710
+ mediaLocalRoots: params.mediaLocalRoots,
711
+ mediaReadFile: params.mediaReadFile
722
712
  }));
723
- const resolvedFileName = filename?.trim() || media.fileName || (media.contentType ? `upload${extensionForMime(media.contentType) ?? ""}` : "") || "upload";
724
- const chunks = text ? buildDiscordTextChunks(text, {
725
- maxLinesPerMessage,
726
- chunkMode,
727
- maxChars
728
- }) : [];
729
- const caption = chunks[0] ?? "";
730
- const captionComponents = resolveDiscordSendComponents({
731
- components,
732
- text: caption,
733
- isFirst: true
734
- });
735
- const captionEmbeds = resolveDiscordSendEmbeds({
736
- embeds,
737
- isFirst: true
738
- });
739
- const body = buildDiscordMessageRequest({
740
- endpoint: "create-message",
741
- text: caption,
742
- components: captionComponents,
743
- embeds: captionEmbeds,
744
- allowedMentions,
745
- flags: resolveDiscordMessageFlags({
746
- silent,
747
- suppressEmbeds: suppressEmbeds && !captionEmbeds?.length
748
- }),
749
- replyTo: resolveDiscordReplyMessageId(reply, true),
713
+ const resolvedFileName = params.filename?.trim() || media.fileName || (media.contentType ? `upload${extensionForMime(media.contentType) ?? ""}` : "") || "upload";
714
+ return sendDiscordChunks(params, {
750
715
  files: [{
751
716
  data: media.buffer,
752
717
  name: resolvedFileName,
753
718
  contentType: media.contentType
754
- }]
719
+ }],
720
+ onRejected(error) {
721
+ if (!isDiscordUploadTooLargeError(error)) throw error;
722
+ return sendDiscordText({
723
+ ...params,
724
+ text: buildDiscordUploadTooLargeFallbackText(params.text),
725
+ components: void 0,
726
+ embeds: void 0
727
+ });
728
+ }
755
729
  });
756
- let res;
757
- try {
758
- res = await request(async () => {
759
- await onPlatformSendDispatch?.();
760
- assertPlatformSendAuthorized?.();
761
- return createChannelMessage(rest, channelId, { body });
762
- }, "media", { safety: "nonce-protected-create" });
763
- } catch (err) {
764
- if (!isDiscordUploadTooLargeError(err)) throw err;
765
- return sendDiscordText({
766
- rest,
767
- channelId,
768
- text: buildDiscordUploadTooLargeFallbackText(text),
769
- reply,
770
- request,
771
- maxLinesPerMessage,
772
- chunkMode,
773
- silent,
774
- suppressEmbeds,
775
- allowedMentions,
776
- maxChars,
777
- onResult,
778
- onPlatformSendDispatch,
779
- assertPlatformSendAuthorized
780
- });
781
- }
782
- await onResult?.(res, "media", reply?.messageId);
783
- const platformMessageIds = res.id ? [res.id] : [];
784
- const followupReply = reply?.scope === "all" ? reply : void 0;
785
- for (const chunk of chunks.slice(1)) {
786
- if (!chunk.trim()) continue;
787
- const followup = await sendDiscordText({
788
- rest,
789
- channelId,
790
- text: chunk,
791
- reply: followupReply,
792
- request,
793
- maxLinesPerMessage,
794
- chunkMode,
795
- silent,
796
- suppressEmbeds,
797
- allowedMentions,
798
- maxChars,
799
- onResult,
800
- onPlatformSendDispatch,
801
- assertPlatformSendAuthorized
802
- });
803
- for (const id of followup.platformMessageIds) if (id) platformMessageIds.push(id);
804
- }
805
- return {
806
- ...res,
807
- platformMessageIds
808
- };
809
730
  }
810
731
  function buildReactionIdentifier(emoji) {
811
732
  if (emoji.id && emoji.name) return `${emoji.name}:${emoji.id}`;
@@ -1,4 +1,4 @@
1
- import { x as formatDiscordUserTag } from "./allow-list-C2JuH-R0.js";
1
+ import { b as formatDiscordUserTag } from "./allow-list-DBTtR2dz.js";
2
2
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
3
3
  //#region extensions/discord/src/monitor/sender-identity.ts
4
4
  function resolveDiscordWebhookId(message) {
@@ -1,2 +1,2 @@
1
- import { t as discordSetupPlugin } from "./channel.setup-DTL7kPOM.js";
1
+ import { t as discordSetupPlugin } from "./channel.setup-BWmMe1tT.js";
2
2
  export { discordSetupPlugin };
@@ -1,6 +1,6 @@
1
1
  import { c as resolveDiscordAccount, d as resolveDiscordAccountDisabledReason, f as resolveDiscordAccountDmPolicy, l as resolveDiscordAccountAllowFrom, n as isDiscordAccountEnabledForRuntime, o as mergeDiscordAccountConfig, r as listDiscordAccountIds, s as resolveDefaultDiscordAccountId } from "./accounts-CwJQoLjM.js";
2
2
  import { t as inspectDiscordAccount } from "./account-inspect-BY-ve3yH.js";
3
- import { t as discordIngressIdentity } from "./ingress-identity-BCzfPPYM.js";
3
+ import { t as discordIngressIdentity } from "./ingress-identity-XNmW-mZS.js";
4
4
  import { t as DiscordChannelConfigSchema } from "./config-schema-B797-Spt.js";
5
5
  import { n as normalizeCompatibilityConfig } from "./doctor-contract-Co5vRCZ6.js";
6
6
  import { r as secretTargetRegistryEntries, t as collectRuntimeConfigAssignments } from "./secret-config-contract-DFu9hfU8.js";
@@ -117,7 +117,7 @@ const DISCORD_LEGACY_CONFIG_RULES = [];
117
117
  //#endregion
118
118
  //#region extensions/discord/src/shared.ts
119
119
  const DISCORD_CHANNEL = "discord";
120
- const loadDiscordDoctorModule = createLazyRuntimeModule(() => import("./doctor-BUB41_lr.js"));
120
+ const loadDiscordDoctorModule = createLazyRuntimeModule(() => import("./doctor-D4HH1inA.js"));
121
121
  const discordDoctor = {
122
122
  dmAllowFromMode: "topOnly",
123
123
  groupModel: "route",
@@ -184,7 +184,10 @@ function createDiscordPluginBase(params) {
184
184
  minChars: 1500,
185
185
  idleMs: 1e3
186
186
  } },
187
- reload: { configPrefixes: ["channels.discord"] },
187
+ reload: {
188
+ configPrefixes: ["channels.discord"],
189
+ noopPrefixes: ["messages.inbound", "messages.ackReactionScope"]
190
+ },
188
191
  configSchema: DiscordChannelConfigSchema,
189
192
  config: {
190
193
  ...discordConfigAdapter,
@@ -1,5 +1,5 @@
1
- import { sn as __exportAll } from "./retry-BNCxiyyR.js";
2
- import { o as unbindThreadBindingsBySessionKey, r as listThreadBindingsBySessionKey } from "./thread-bindings-D7mcaXQC.js";
1
+ import { sn as __exportAll } from "./retry-DQt1zDgH.js";
2
+ import { o as unbindThreadBindingsBySessionKey, r as listThreadBindingsBySessionKey } from "./thread-bindings-DKvsNjQR.js";
3
3
  import { normalizeOptionalLowercaseString, normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  //#region extensions/discord/src/subagent-hooks.ts
5
5
  var subagent_hooks_exports = /* @__PURE__ */ __exportAll({
@@ -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("./subagent-hooks-IzQKX4RQ.js").then((n) => n.r));
3
+ const loadDiscordSubagentHooksModule = createLazyRuntimeModule(() => import("./subagent-hooks-ZoQXEI1E.js").then((n) => n.r));
4
4
  function registerDiscordSubagentHooks(api) {
5
5
  api.on("subagent_ended", async (event) => {
6
6
  const { handleDiscordSubagentEnded } = await loadDiscordSubagentHooksModule();
@@ -1,5 +1,5 @@
1
- import { b as discord_exports } from "./retry-BNCxiyyR.js";
2
- import { x as formatDiscordUserTag } from "./allow-list-C2JuH-R0.js";
1
+ import { b as discord_exports } from "./retry-DQt1zDgH.js";
2
+ import { b as formatDiscordUserTag } from "./allow-list-DBTtR2dz.js";
3
3
  //#region extensions/discord/src/monitor/system-events.ts
4
4
  function resolveDiscordSystemEvent(message, location) {
5
5
  switch (message.type) {
@@ -1,6 +1,6 @@
1
- import { m as allowFromContainsDiscordUserId, sn as __exportAll, v as parseDiscordTarget } from "./retry-BNCxiyyR.js";
1
+ import { m as allowFromContainsDiscordUserId, sn as __exportAll, v as parseDiscordTarget } from "./retry-DQt1zDgH.js";
2
2
  import { c as resolveDiscordAccount, l as resolveDiscordAccountAllowFrom } from "./accounts-CwJQoLjM.js";
3
- import { a as rememberDiscordDirectoryUser, r as listDiscordDirectoryPeersLive } from "./directory-live-BrFVc1Ds.js";
3
+ import { a as rememberDiscordDirectoryUser, r as listDiscordDirectoryPeersLive } from "./directory-live-DaJzWJ2N.js";
4
4
  import { buildMessagingTarget } from "openclaw/plugin-sdk/channel-targets";
5
5
  //#region extensions/discord/src/send-target-parsing.ts
6
6
  const parseDiscordSendTarget = (raw, options = {}) => parseDiscordTarget(raw, options);
@@ -0,0 +1,3 @@
1
+ import "./retry-DQt1zDgH.js";
2
+ import "./target-resolver-DLtHDwMK.js";
3
+ export {};
@@ -1,8 +1,8 @@
1
- import { sn as __exportAll, v as parseDiscordTarget } from "./retry-BNCxiyyR.js";
2
- import "./targets-DbxVbq8k.js";
3
- import { C as resolveThreadBindingMaxAgeExpiresAt, O as shouldPersistBindingMutations, S as resolveThreadBindingInactivityExpiresAt, T as saveBindingsToDisk, h as refreshUnboundThreadWebhookIdentity, m as normalizeThreadId, n as MANAGERS_BY_ACCOUNT_ID, t as BINDINGS_BY_THREAD_ID, u as getThreadBindingToken, v as removeBindingRecord, w as resolveThreadBindingMaxAgeMs$1, x as resolveThreadBindingIdleTimeoutMs$1 } from "./thread-bindings.state-D8OMdk4O.js";
4
- import { n as setThreadBindingMaxAgeBySessionKey, r as resolveBindingIdsForTargetSession, t as setThreadBindingIdleTimeoutBySessionKey } from "./thread-bindings.session-updates-CC7HoQvt.js";
5
- import { _ as resolveThreadBindingThreadName, g as resolveThreadBindingIntroText, h as formatThreadBindingDurationLabel, m as resolveThreadBindingPersonaFromRecord, n as createThreadBindingManager, o as resolveChannelIdForBinding, p as resolveThreadBindingPersona, r as getThreadBindingManager, t as createNoopThreadBindingManager } from "./thread-bindings.manager-B1oySiVc.js";
1
+ import { sn as __exportAll, v as parseDiscordTarget } from "./retry-DQt1zDgH.js";
2
+ import "./targets-BObRyaKX.js";
3
+ import { S as saveBindingsToDisk, T as shouldPersistBindingMutations, b as resolveThreadBindingMaxAgeExpiresAt, c as getThreadBindingToken, d as normalizeThreadId, f as refreshUnboundThreadWebhookIdentity, h as removeBindingRecord, n as MANAGERS_BY_ACCOUNT_ID, t as BINDINGS_BY_THREAD_ID, v as resolveThreadBindingIdleTimeoutMs$1, x as resolveThreadBindingMaxAgeMs$1, y as resolveThreadBindingInactivityExpiresAt } from "./thread-bindings.state-DtgOqsbX.js";
4
+ import { n as setThreadBindingMaxAgeBySessionKey, r as resolveBindingIdsForTargetSession, t as setThreadBindingIdleTimeoutBySessionKey } from "./thread-bindings.session-updates-t6jeFB1-.js";
5
+ import { _ as resolveThreadBindingThreadName, g as resolveThreadBindingIntroText, h as formatThreadBindingDurationLabel, m as resolveThreadBindingPersonaFromRecord, n as createThreadBindingManager, o as resolveChannelIdForBinding, p as resolveThreadBindingPersona, r as getThreadBindingManager, t as createNoopThreadBindingManager } from "./thread-bindings.manager-pbbRT5gb.js";
6
6
  import { normalizeAccountId } from "openclaw/plugin-sdk/routing";
7
7
  import { normalizeOptionalLowercaseString, normalizeOptionalString, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
8
8
  import { resolveThreadBindingIdleTimeoutMs, resolveThreadBindingMaxAgeMs, resolveThreadBindingsEnabled } from "openclaw/plugin-sdk/conversation-runtime";
@@ -1,9 +1,9 @@
1
- import { jt as getChannel, sn as __exportAll, t as canFallbackDiscordWebhookSend, y as resolveDiscordChannelId, yt as createChannelWebhook } from "./retry-BNCxiyyR.js";
2
- import { P as createDiscordRestClient } from "./send.shared-5vxBTagO.js";
3
- import { t as sendMessageDiscord } from "./send.outbound-b5xwHTlL.js";
1
+ import { jt as getChannel, sn as __exportAll, t as canFallbackDiscordWebhookSend, y as resolveDiscordChannelId, yt as createChannelWebhook } from "./retry-DQt1zDgH.js";
2
+ import { P as createDiscordRestClient } from "./send.shared-B0n_fWzu.js";
3
+ import { t as sendMessageDiscord } from "./send.outbound-DHuFUL6W.js";
4
4
  import { t as isDiscordThreadChannelType } from "./channel-type-CVLZyGYS.js";
5
- import { c as sendWebhookMessageDiscord, u as createThreadDiscord } from "./send-BnTEIeLE.js";
6
- import { A as toReusableWebhookKey, C as resolveThreadBindingMaxAgeExpiresAt, D as shouldDefaultPersist, E as setBindingRecord, S as resolveThreadBindingInactivityExpiresAt, T as saveBindingsToDisk, _ as rememberThreadBindingToken, b as resolveBindingRecordKey, c as ensureBindingsLoaded, f as normalizeTargetKind, g as rememberReusableWebhook, h as refreshUnboundThreadWebhookIdentity, i as REUSABLE_WEBHOOKS_BY_ACCOUNT_CHANNEL, l as forgetThreadBindingToken, m as normalizeThreadId, n as MANAGERS_BY_ACCOUNT_ID, p as normalizeThreadBindingDurationMs, r as PERSIST_BY_ACCOUNT_ID, s as THREAD_BINDING_TOUCH_PERSIST_MIN_INTERVAL_MS, t as BINDINGS_BY_THREAD_ID, u as getThreadBindingToken, v as removeBindingRecord, w as resolveThreadBindingMaxAgeMs$1, x as resolveThreadBindingIdleTimeoutMs$1, y as resolveBindingIdsForSession } from "./thread-bindings.state-D8OMdk4O.js";
5
+ import { c as sendWebhookMessageDiscord, u as createThreadDiscord } from "./send-CZeWKUiA.js";
6
+ import { C as setBindingRecord, D as toReusableWebhookKey, S as saveBindingsToDisk, _ as resolveBindingRecordKey, a as THREAD_BINDING_TOUCH_PERSIST_MIN_INTERVAL_MS, b as resolveThreadBindingMaxAgeExpiresAt, c as getThreadBindingToken, d as normalizeThreadId, f as refreshUnboundThreadWebhookIdentity, g as resolveBindingIdsForSession, h as removeBindingRecord, i as REUSABLE_WEBHOOKS_BY_ACCOUNT_CHANNEL, l as normalizeTargetKind, m as rememberThreadBindingToken, n as MANAGERS_BY_ACCOUNT_ID, o as ensureBindingsLoaded, p as rememberReusableWebhook, r as PERSIST_BY_ACCOUNT_ID, s as forgetThreadBindingToken, t as BINDINGS_BY_THREAD_ID, u as normalizeThreadBindingDurationMs, v as resolveThreadBindingIdleTimeoutMs$1, w as shouldDefaultPersist, x as resolveThreadBindingMaxAgeMs$1, y as resolveThreadBindingInactivityExpiresAt } from "./thread-bindings.state-DtgOqsbX.js";
7
7
  import { parseStrictNonNegativeInteger } from "openclaw/plugin-sdk/number-runtime";
8
8
  import { normalizeAccountId } from "openclaw/plugin-sdk/routing";
9
9
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -1,4 +1,4 @@
1
- import { E as setBindingRecord, O as shouldPersistBindingMutations, T as saveBindingsToDisk, c as ensureBindingsLoaded, t as BINDINGS_BY_THREAD_ID, y as resolveBindingIdsForSession } from "./thread-bindings.state-D8OMdk4O.js";
1
+ import { C as setBindingRecord, S as saveBindingsToDisk, T as shouldPersistBindingMutations, g as resolveBindingIdsForSession, o as ensureBindingsLoaded, t as BINDINGS_BY_THREAD_ID } from "./thread-bindings.state-DtgOqsbX.js";
2
2
  import { normalizeAccountId } from "openclaw/plugin-sdk/routing";
3
3
  //#region extensions/discord/src/monitor/thread-bindings.session-shared.ts
4
4
  function normalizeNonNegativeMs(raw) {
@@ -1,8 +1,41 @@
1
+ import { sn as __exportAll } from "./retry-DQt1zDgH.js";
1
2
  import { t as getDiscordRuntime } from "./runtime-DgnVQ7zW.js";
2
3
  import { normalizeAccountId, resolveAgentIdFromSessionKey } from "openclaw/plugin-sdk/routing";
3
4
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString, normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/string-coerce-runtime";
4
5
  import { recordOutboundMessageIdentity } from "openclaw/plugin-sdk/outbound-echo-runtime";
5
6
  //#region extensions/discord/src/monitor/thread-bindings.state.ts
7
+ var thread_bindings_state_exports = /* @__PURE__ */ __exportAll({
8
+ BINDINGS_BY_THREAD_ID: () => BINDINGS_BY_THREAD_ID,
9
+ MANAGERS_BY_ACCOUNT_ID: () => MANAGERS_BY_ACCOUNT_ID,
10
+ PERSIST_BY_ACCOUNT_ID: () => PERSIST_BY_ACCOUNT_ID,
11
+ REUSABLE_WEBHOOKS_BY_ACCOUNT_CHANNEL: () => REUSABLE_WEBHOOKS_BY_ACCOUNT_CHANNEL,
12
+ THREAD_BINDINGS_MAX_ENTRIES: () => THREAD_BINDINGS_MAX_ENTRIES,
13
+ THREAD_BINDINGS_NAMESPACE: () => THREAD_BINDINGS_NAMESPACE,
14
+ THREAD_BINDING_TOUCH_PERSIST_MIN_INTERVAL_MS: () => THREAD_BINDING_TOUCH_PERSIST_MIN_INTERVAL_MS,
15
+ ensureBindingsLoaded: () => ensureBindingsLoaded,
16
+ forgetThreadBindingToken: () => forgetThreadBindingToken,
17
+ getThreadBindingToken: () => getThreadBindingToken,
18
+ normalizePersistedBinding: () => normalizePersistedBinding,
19
+ normalizeTargetKind: () => normalizeTargetKind,
20
+ normalizeThreadBindingDurationMs: () => normalizeThreadBindingDurationMs,
21
+ normalizeThreadId: () => normalizeThreadId,
22
+ refreshUnboundThreadWebhookIdentity: () => refreshUnboundThreadWebhookIdentity,
23
+ rememberReusableWebhook: () => rememberReusableWebhook,
24
+ rememberThreadBindingToken: () => rememberThreadBindingToken,
25
+ removeBindingRecord: () => removeBindingRecord,
26
+ resolveBindingIdsForSession: () => resolveBindingIdsForSession,
27
+ resolveBindingRecordKey: () => resolveBindingRecordKey,
28
+ resolveThreadBindingIdleTimeoutMs: () => resolveThreadBindingIdleTimeoutMs,
29
+ resolveThreadBindingInactivityExpiresAt: () => resolveThreadBindingInactivityExpiresAt,
30
+ resolveThreadBindingMaxAgeExpiresAt: () => resolveThreadBindingMaxAgeExpiresAt,
31
+ resolveThreadBindingMaxAgeMs: () => resolveThreadBindingMaxAgeMs,
32
+ saveBindingsToDisk: () => saveBindingsToDisk,
33
+ setBindingRecord: () => setBindingRecord,
34
+ shouldDefaultPersist: () => shouldDefaultPersist,
35
+ shouldPersistBindingMutations: () => shouldPersistBindingMutations,
36
+ toBindingRecordKey: () => toBindingRecordKey,
37
+ toReusableWebhookKey: () => toReusableWebhookKey
38
+ });
6
39
  const THREAD_BINDINGS_STATE_KEY = Symbol.for("openclaw.discordThreadBindingsState");
7
40
  let threadBindingsState;
8
41
  function createThreadBindingsGlobalState() {
@@ -285,4 +318,4 @@ function resolveBindingIdsForSession(params) {
285
318
  return out;
286
319
  }
287
320
  //#endregion
288
- export { toReusableWebhookKey as A, resolveThreadBindingMaxAgeExpiresAt as C, shouldDefaultPersist as D, setBindingRecord as E, shouldPersistBindingMutations as O, resolveThreadBindingInactivityExpiresAt as S, saveBindingsToDisk as T, rememberThreadBindingToken as _, THREAD_BINDINGS_MAX_ENTRIES as a, resolveBindingRecordKey as b, ensureBindingsLoaded as c, normalizePersistedBinding as d, normalizeTargetKind as f, rememberReusableWebhook as g, refreshUnboundThreadWebhookIdentity as h, REUSABLE_WEBHOOKS_BY_ACCOUNT_CHANNEL as i, toBindingRecordKey as k, forgetThreadBindingToken as l, normalizeThreadId as m, MANAGERS_BY_ACCOUNT_ID as n, THREAD_BINDINGS_NAMESPACE as o, normalizeThreadBindingDurationMs as p, PERSIST_BY_ACCOUNT_ID as r, THREAD_BINDING_TOUCH_PERSIST_MIN_INTERVAL_MS as s, BINDINGS_BY_THREAD_ID as t, getThreadBindingToken as u, removeBindingRecord as v, resolveThreadBindingMaxAgeMs as w, resolveThreadBindingIdleTimeoutMs as x, resolveBindingIdsForSession as y };
321
+ export { setBindingRecord as C, toReusableWebhookKey as D, thread_bindings_state_exports as E, saveBindingsToDisk as S, shouldPersistBindingMutations as T, resolveBindingRecordKey as _, THREAD_BINDING_TOUCH_PERSIST_MIN_INTERVAL_MS as a, resolveThreadBindingMaxAgeExpiresAt as b, getThreadBindingToken as c, normalizeThreadId as d, refreshUnboundThreadWebhookIdentity as f, resolveBindingIdsForSession as g, removeBindingRecord as h, REUSABLE_WEBHOOKS_BY_ACCOUNT_CHANNEL as i, normalizeTargetKind as l, rememberThreadBindingToken as m, MANAGERS_BY_ACCOUNT_ID as n, ensureBindingsLoaded as o, rememberReusableWebhook as p, PERSIST_BY_ACCOUNT_ID as r, forgetThreadBindingToken as s, BINDINGS_BY_THREAD_ID as t, normalizeThreadBindingDurationMs as u, resolveThreadBindingIdleTimeoutMs as v, shouldDefaultPersist as w, resolveThreadBindingMaxAgeMs as x, resolveThreadBindingInactivityExpiresAt as y };