@openclaw/discord 2026.6.8 → 2026.6.9-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 (110) hide show
  1. package/dist/action-runtime-api.js +1 -1
  2. package/dist/api.js +13 -13
  3. package/dist/{approval-handler.runtime-B3gyUd-L.js → approval-handler.runtime-BprBDUQG.js} +3 -3
  4. package/dist/{audit-BlfewK04.js → audit-DuZUxGjM.js} +3 -3
  5. package/dist/{channel-b0hY1EJw.js → channel--3YhTUOb.js} +27 -19
  6. package/dist/{channel-actions-BnPHwCZ_.js → channel-actions-CoudAyAB.js} +12 -6
  7. package/dist/{channel-actions.runtime-DX5iW6ut.js → channel-actions.runtime-DdOfD3fi.js} +5 -5
  8. package/dist/channel-plugin-api.js +1 -1
  9. package/dist/{channel.setup-By5cfELZ.js → channel.setup-C-y6Jifd.js} +2 -2
  10. package/dist/{components-D-CYw0-b.js → components-CUmrNvv-.js} +1 -1
  11. package/dist/{conversation-identity-CKzQAqFF.js → conversation-identity-CN-HPn11.js} +2 -2
  12. package/dist/{directory-config-Bu7FYOsl.js → directory-config-BCt5KxcX.js} +1 -1
  13. package/dist/directory-contract-api.js +1 -1
  14. package/dist/{directory-live-LjENjK6L.js → directory-live-CE7IDmwo.js} +1 -1
  15. package/dist/{handle-action.guild-admin-BS2qnhXF.js → handle-action.guild-admin-B7SnVS0m.js} +14 -9
  16. package/dist/index.js +1 -1
  17. package/dist/{manager.runtime-BU1vkOeO.js → manager.runtime-zMVwNPAT.js} +12 -4
  18. package/dist/{message-handler-CQVkXHMN.js → message-handler-DE413Oj4.js} +6 -6
  19. package/dist/{message-handler.preflight-DAnLOeDA.js → message-handler.preflight-BuF-DsE2.js} +10 -10
  20. package/dist/{message-handler.process-Dp5NQT05.js → message-handler.process-BX8HsMfV.js} +37 -23
  21. package/dist/{message-utils-Bx993JLN.js → message-utils-s_8KDqAQ.js} +1 -1
  22. package/dist/{outbound-adapter-CmN7ao1t.js → outbound-adapter-CNievjXH.js} +6 -6
  23. package/dist/{pluralkit-SYmlmerw.js → pluralkit-BXkU9XmC.js} +1 -1
  24. package/dist/{provider-DrScDA1p.js → provider-ByZ6xxgi.js} +85 -56
  25. package/dist/{provider-session.runtime-DXTzSYOJ.js → provider-session.runtime-DMfaQ9Z6.js} +3 -3
  26. package/dist/provider.runtime-EW-G8l_U.js +2 -0
  27. package/dist/{resolve-channels-Rautpk8n.js → resolve-channels-t1URw0Qz.js} +1 -1
  28. package/dist/{resolve-users-Bw7vvtsi.js → resolve-users-Bapkb237.js} +1 -1
  29. package/dist/{runtime-C80YEJ7Z.js → runtime-C6jV3hf4.js} +24 -10
  30. package/dist/runtime-api.actions.js +2 -2
  31. package/dist/runtime-api.js +19 -19
  32. package/dist/runtime-api.lookup.js +4 -4
  33. package/dist/runtime-api.monitor-5BSxmucu.js +6 -0
  34. package/dist/runtime-api.monitor.js +4 -4
  35. package/dist/runtime-api.send.js +5 -5
  36. package/dist/runtime-api.threads.js +3 -3
  37. package/dist/{send-zGsXF-up.js → send-o-Y1DiAT.js} +3 -3
  38. package/dist/{send.components-ktzrUTkt.js → send.components-B4_oNcOh.js} +4 -4
  39. package/dist/{send.outbound-C8oC51um.js → send.outbound-DhiXV3UJ.js} +53 -10
  40. package/dist/{send.receipt-DsQWEQ2O.js → send.receipt-HXIwVvXy.js} +2 -1
  41. package/dist/{send.shared-Dvo2ZCVG.js → send.shared-DYdjs_Zh.js} +13 -5
  42. package/dist/session-binding-contract-api.js +1 -1
  43. package/dist/setup-plugin-api.js +1 -1
  44. package/dist/{subagent-hooks-kjrWDeDg.js → subagent-hooks-CbF_Z5F0.js} +2 -2
  45. package/dist/subagent-hooks-api.js +1 -1
  46. package/dist/{system-events-CvU3Aduf.js → system-events-BxTHlBbM.js} +1 -1
  47. package/dist/{target-resolver-DMPTzuo7.js → target-resolver-DpC8iueE.js} +2 -2
  48. package/dist/targets-BEIgHBHc.js +3 -0
  49. package/dist/{thread-bindings-DO32M2kW.js → thread-bindings-CEVvN75T.js} +4 -4
  50. package/dist/{thread-bindings.discord-api-304M1PMr.js → thread-bindings.discord-api-B8NfbxEB.js} +4 -4
  51. package/dist/{thread-bindings.manager-C9YT7wF2.js → thread-bindings.manager-BKfUaXGt.js} +3 -3
  52. package/dist/{transcripts-source-Chy2OrO_.js → transcripts-source-W6n_8J8g.js} +1 -1
  53. package/dist/transcripts-source-api.js +1 -1
  54. package/dist/{typing-BaivbXIG.js → typing-0-pUmlY9.js} +1 -1
  55. package/node_modules/undici/README.md +59 -18
  56. package/node_modules/undici/docs/docs/GettingStarted.md +278 -0
  57. package/node_modules/undici/docs/docs/api/Agent.md +3 -0
  58. package/node_modules/undici/docs/docs/api/BalancedPool.md +1 -1
  59. package/node_modules/undici/docs/docs/api/Client.md +44 -5
  60. package/node_modules/undici/docs/docs/api/Connector.md +1 -0
  61. package/node_modules/undici/docs/docs/api/Cookies.md +28 -1
  62. package/node_modules/undici/docs/docs/api/Dispatcher.md +22 -5
  63. package/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +6 -9
  64. package/node_modules/undici/docs/docs/api/Errors.md +12 -0
  65. package/node_modules/undici/docs/docs/api/EventSource.md +50 -3
  66. package/node_modules/undici/docs/docs/api/Fetch.md +5 -3
  67. package/node_modules/undici/docs/docs/api/H2CClient.md +3 -3
  68. package/node_modules/undici/docs/docs/api/MockAgent.md +1 -1
  69. package/node_modules/undici/docs/docs/api/MockCallHistory.md +1 -1
  70. package/node_modules/undici/docs/docs/api/Pool.md +4 -1
  71. package/node_modules/undici/docs/docs/api/RedirectHandler.md +4 -1
  72. package/node_modules/undici/docs/docs/api/RetryAgent.md +3 -3
  73. package/node_modules/undici/docs/docs/api/RetryHandler.md +6 -6
  74. package/node_modules/undici/docs/docs/api/RoundRobinPool.md +1 -1
  75. package/node_modules/undici/docs/docs/api/SnapshotAgent.md +3 -3
  76. package/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +1 -0
  77. package/node_modules/undici/docs/docs/api/api-lifecycle.md +4 -4
  78. package/node_modules/undici/lib/core/connect.js +29 -4
  79. package/node_modules/undici/lib/core/util.js +8 -6
  80. package/node_modules/undici/lib/dispatcher/client-h1.js +69 -2
  81. package/node_modules/undici/lib/dispatcher/client-h2.js +160 -37
  82. package/node_modules/undici/lib/dispatcher/client.js +36 -7
  83. package/node_modules/undici/lib/dispatcher/dispatcher-base.js +1 -0
  84. package/node_modules/undici/lib/dispatcher/proxy-agent.js +2 -1
  85. package/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +4 -2
  86. package/node_modules/undici/lib/handler/redirect-handler.js +36 -11
  87. package/node_modules/undici/lib/interceptor/dns.js +4 -0
  88. package/node_modules/undici/lib/interceptor/redirect.js +3 -3
  89. package/node_modules/undici/lib/mock/mock-call-history.js +1 -1
  90. package/node_modules/undici/lib/mock/snapshot-agent.js +9 -1
  91. package/node_modules/undici/lib/util/cache.js +8 -2
  92. package/node_modules/undici/lib/web/cookies/parse.js +17 -25
  93. package/node_modules/undici/lib/web/eventsource/eventsource.js +7 -18
  94. package/node_modules/undici/lib/web/eventsource/util.js +32 -1
  95. package/node_modules/undici/lib/web/fetch/body.js +43 -0
  96. package/node_modules/undici/lib/web/fetch/index.js +17 -3
  97. package/node_modules/undici/lib/web/fetch/request.js +33 -3
  98. package/node_modules/undici/lib/web/websocket/receiver.js +20 -3
  99. package/node_modules/undici/lib/web/websocket/stream/websocketstream.js +8 -1
  100. package/node_modules/undici/lib/web/websocket/websocket.js +3 -1
  101. package/node_modules/undici/package.json +1 -1
  102. package/node_modules/undici/types/client.d.ts +5 -0
  103. package/node_modules/undici/types/connector.d.ts +1 -0
  104. package/node_modules/undici/types/fetch.d.ts +5 -1
  105. package/node_modules/undici/types/interceptors.d.ts +1 -1
  106. package/npm-shrinkwrap.json +7 -7
  107. package/package.json +5 -5
  108. package/dist/provider.runtime-nb-6cRoy.js +0 -2
  109. package/dist/runtime-api.monitor-D8KNDAd5.js +0 -6
  110. package/dist/targets-CKaNidbk.js +0 -3
@@ -1,30 +1,30 @@
1
- import { x as resolveDiscordOutboundSessionRoute } from "./components-D-CYw0-b.js";
2
- import { n as registerBuiltDiscordComponentMessage, r as sendDiscordComponentMessage, t as editDiscordComponentMessage } from "./send.components-ktzrUTkt.js";
1
+ import { x as resolveDiscordOutboundSessionRoute } from "./components-CUmrNvv-.js";
2
+ import { n as registerBuiltDiscordComponentMessage, r as sendDiscordComponentMessage, t as editDiscordComponentMessage } from "./send.components-B4_oNcOh.js";
3
3
  import { a as clearPresences, c as setPresence, i as unregisterGateway, n as getGateway, o as getPresence, r as registerGateway, s as presenceCacheSize, t as clearGateways } from "./gateway-registry-DPxmW0Db.js";
4
- import { A as hasAllGuildPermissionsDiscord, M as hasAnyGuildPermissionDiscord, O as fetchChannelPermissionsDiscord, k as fetchMemberGuildPermissionsDiscord, w as DiscordSendError } from "./send.shared-Dvo2ZCVG.js";
5
- import { n as listDiscordDirectoryGroupsLive, r as listDiscordDirectoryPeersLive } from "./directory-live-LjENjK6L.js";
4
+ import { A as hasAllGuildPermissionsDiscord, M as hasAnyGuildPermissionDiscord, O as fetchChannelPermissionsDiscord, k as fetchMemberGuildPermissionsDiscord, w as DiscordSendError } from "./send.shared-DYdjs_Zh.js";
5
+ import { n as listDiscordDirectoryGroupsLive, r as listDiscordDirectoryPeersLive } from "./directory-live-CE7IDmwo.js";
6
6
  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-C-MqM-B_.js";
7
- import { A as listScheduledEventsDiscord, B as moveChannelDiscord, C as fetchChannelInfoDiscord, D as fetchVoiceStatusDiscord, E as fetchRoleInfoDiscord, F as uploadEmojiDiscord, H as setChannelPermissionDiscord, I as uploadStickerDiscord, L as createChannelDiscord, M as resolveEventCoverImage, N as timeoutMemberDiscord, O as kickMemberDiscord, P as listGuildEmojisDiscord, R as deleteChannelDiscord, S as createScheduledEventDiscord, T as fetchMemberInfoDiscord, V as removeChannelPermissionDiscord, _ as readMessagesDiscord, a as removeReactionDiscord, b as addRoleDiscord, 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-zGsXF-up.js";
8
- import { n as sendPollDiscord, r as sendStickerDiscord, t as sendMessageDiscord } from "./send.outbound-C8oC51um.js";
9
- import { a as readDiscordChannelCreateParams, c as readDiscordParentIdParam, i as requiredGuildPermissionForModerationAction, n as isDiscordModerationAction, o as readDiscordChannelEditParams, r as readDiscordModerationCommand, s as readDiscordChannelMoveParams, t as handleDiscordAction } from "./runtime-C80YEJ7Z.js";
7
+ import { A as listScheduledEventsDiscord, B as moveChannelDiscord, C as fetchChannelInfoDiscord, D as fetchVoiceStatusDiscord, E as fetchRoleInfoDiscord, F as uploadEmojiDiscord, H as setChannelPermissionDiscord, I as uploadStickerDiscord, L as createChannelDiscord, M as resolveEventCoverImage, N as timeoutMemberDiscord, O as kickMemberDiscord, P as listGuildEmojisDiscord, R as deleteChannelDiscord, S as createScheduledEventDiscord, T as fetchMemberInfoDiscord, V as removeChannelPermissionDiscord, _ as readMessagesDiscord, a as removeReactionDiscord, b as addRoleDiscord, 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-o-Y1DiAT.js";
8
+ import { n as sendPollDiscord, r as sendStickerDiscord, t as sendMessageDiscord } from "./send.outbound-DhiXV3UJ.js";
9
+ import { a as readDiscordChannelCreateParams, c as readDiscordParentIdParam, i as requiredGuildPermissionForModerationAction, n as isDiscordModerationAction, o as readDiscordChannelEditParams, r as readDiscordModerationCommand, s as readDiscordChannelMoveParams, t as handleDiscordAction } from "./runtime-C6jV3hf4.js";
10
10
  import { r as setDiscordRuntime } from "./runtime-DgnVQ7zW.js";
11
- import { t as discordMessageActions } from "./channel-actions-BnPHwCZ_.js";
11
+ import { t as discordMessageActions } from "./channel-actions-CoudAyAB.js";
12
12
  import { C as resolveThreadBindingIdleTimeoutMs, E as resolveThreadBindingMaxAgeMs, T as resolveThreadBindingMaxAgeExpiresAt, d as isRecentlyUnboundThreadWebhookMessage, w as resolveThreadBindingInactivityExpiresAt } from "./thread-bindings.state-iSWjCYjB.js";
13
13
  import { n as setThreadBindingMaxAgeBySessionKey, t as setThreadBindingIdleTimeoutBySessionKey } from "./thread-bindings.session-updates-Chs3HgGa.js";
14
- import { t as resolveDiscordChannelAllowlist } from "./resolve-channels-Rautpk8n.js";
15
- import { t as resolveDiscordUserAllowlist } from "./resolve-users-Bw7vvtsi.js";
16
- import { _ as formatThreadBindingDurationLabel, b as resolveThreadBindingThreadName, g as resolveThreadBindingPersonaFromRecord, h as resolveThreadBindingPersona, y as resolveThreadBindingIntroText } from "./thread-bindings.discord-api-304M1PMr.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-DO32M2kW.js";
18
- import { i as testing, n as createThreadBindingManager, r as getThreadBindingManager, t as createNoopThreadBindingManager } from "./thread-bindings.manager-C9YT7wF2.js";
19
- import { a as resolveDiscordPrivilegedIntentsFromFlags, i as probeDiscord, n as fetchDiscordApplicationSummary, r as parseApplicationIdFromToken, t as fetchDiscordApplicationId } from "./probe-2MdGjUAf.js";
20
14
  import { a as isAbortError, c as normalizeDiscordListenerTimeoutMs, i as DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, n as DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, o as mergeAbortSignals, r as DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, s as normalizeDiscordInboundWorkerTimeoutMs, t as DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS, u as runDiscordTaskWithTimeout } from "./timeouts-C5TBc_9x.js";
15
+ import { t as resolveDiscordChannelAllowlist } from "./resolve-channels-t1URw0Qz.js";
16
+ import { t as resolveDiscordUserAllowlist } from "./resolve-users-Bapkb237.js";
17
+ import { _ as formatThreadBindingDurationLabel, b as resolveThreadBindingThreadName, g as resolveThreadBindingPersonaFromRecord, h as resolveThreadBindingPersona, y as resolveThreadBindingIntroText } from "./thread-bindings.discord-api-B8NfbxEB.js";
18
+ 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-CEVvN75T.js";
19
+ import { i as testing, n as createThreadBindingManager, r as getThreadBindingManager, t as createNoopThreadBindingManager } from "./thread-bindings.manager-BKfUaXGt.js";
20
+ import { a as resolveDiscordPrivilegedIntentsFromFlags, i as probeDiscord, n as fetchDiscordApplicationSummary, r as parseApplicationIdFromToken, t as fetchDiscordApplicationId } from "./probe-2MdGjUAf.js";
21
21
  import "./runtime-api.actions.js";
22
- import { r as collectDiscordAuditChannelIds, t as auditDiscordChannelPermissions } from "./audit-BlfewK04.js";
22
+ import { r as collectDiscordAuditChannelIds, t as auditDiscordChannelPermissions } from "./audit-DuZUxGjM.js";
23
23
  import "./runtime-api.lookup.js";
24
- import { E as sanitizeDiscordThreadName, c as createDiscordGatewayPlugin, f as createDiscordNativeCommand, l as resolveDiscordGatewayIntents, t as monitorDiscordProvider, u as waitForDiscordGatewayPluginRegistration, w as resolveDiscordReplyTarget, x as registerDiscordListener } from "./provider-DrScDA1p.js";
25
- import { i as buildDiscordMediaPayload } from "./message-utils-Bx993JLN.js";
26
- import { t as createDiscordMessageHandler } from "./message-handler-CQVkXHMN.js";
27
- import "./runtime-api.monitor-D8KNDAd5.js";
24
+ import { E as sanitizeDiscordThreadName, c as createDiscordGatewayPlugin, f as createDiscordNativeCommand, l as resolveDiscordGatewayIntents, t as monitorDiscordProvider, u as waitForDiscordGatewayPluginRegistration, w as resolveDiscordReplyTarget, x as registerDiscordListener } from "./provider-ByZ6xxgi.js";
25
+ import { i as buildDiscordMediaPayload } from "./message-utils-s_8KDqAQ.js";
26
+ import { t as createDiscordMessageHandler } from "./message-handler-DE413Oj4.js";
27
+ import "./runtime-api.monitor-5BSxmucu.js";
28
28
  import "./runtime-api.send.js";
29
29
  import "./runtime-api.threads.js";
30
30
  export { DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS, DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, DiscordSendError, testing as __testing, testing, addRoleDiscord, allowListMatches, auditDiscordChannelPermissions, autoBindSpawnedDiscordSubagent, banMemberDiscord, buildDiscordMediaPayload, 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, isRecentlyUnboundThreadWebhookMessage, kickMemberDiscord, listDiscordDirectoryGroupsLive, listDiscordDirectoryPeersLive, listGuildChannelsDiscord, listGuildEmojisDiscord, listPinsDiscord, listScheduledEventsDiscord, listThreadBindingsBySessionKey, listThreadBindingsForAccount, listThreadsDiscord, mergeAbortSignals, 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 { n as listDiscordDirectoryGroupsLive, r as listDiscordDirectoryPeersLive } from "./directory-live-LjENjK6L.js";
1
+ import { n as listDiscordDirectoryGroupsLive, r as listDiscordDirectoryPeersLive } from "./directory-live-CE7IDmwo.js";
2
2
  import { r as setDiscordRuntime } from "./runtime-DgnVQ7zW.js";
3
- import { t as resolveDiscordChannelAllowlist } from "./resolve-channels-Rautpk8n.js";
4
- import { t as resolveDiscordUserAllowlist } from "./resolve-users-Bw7vvtsi.js";
3
+ import { t as resolveDiscordChannelAllowlist } from "./resolve-channels-t1URw0Qz.js";
4
+ import { t as resolveDiscordUserAllowlist } from "./resolve-users-Bapkb237.js";
5
5
  import { a as resolveDiscordPrivilegedIntentsFromFlags, i as probeDiscord, n as fetchDiscordApplicationSummary, r as parseApplicationIdFromToken, t as fetchDiscordApplicationId } from "./probe-2MdGjUAf.js";
6
- import { r as collectDiscordAuditChannelIds, t as auditDiscordChannelPermissions } from "./audit-BlfewK04.js";
6
+ import { r as collectDiscordAuditChannelIds, t as auditDiscordChannelPermissions } from "./audit-DuZUxGjM.js";
7
7
  export { auditDiscordChannelPermissions, collectDiscordAuditChannelIds, fetchDiscordApplicationId, fetchDiscordApplicationSummary, listDiscordDirectoryGroupsLive, listDiscordDirectoryPeersLive, parseApplicationIdFromToken, probeDiscord, resolveDiscordChannelAllowlist, resolveDiscordPrivilegedIntentsFromFlags, resolveDiscordUserAllowlist, setDiscordRuntime };
@@ -0,0 +1,6 @@
1
+ import "./allow-list-C-MqM-B_.js";
2
+ import "./timeouts-C5TBc_9x.js";
3
+ import "./provider-ByZ6xxgi.js";
4
+ import "./message-utils-s_8KDqAQ.js";
5
+ import "./message-handler-DE413Oj4.js";
6
+ export {};
@@ -1,8 +1,8 @@
1
1
  import { a as clearPresences, c as setPresence, i as unregisterGateway, n as getGateway, o as getPresence, r as registerGateway, s as presenceCacheSize, t as clearGateways } from "./gateway-registry-DPxmW0Db.js";
2
2
  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-C-MqM-B_.js";
3
3
  import { a as isAbortError, c as normalizeDiscordListenerTimeoutMs, i as DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, n as DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, o as mergeAbortSignals, r as DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, s as normalizeDiscordInboundWorkerTimeoutMs, t as DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS, u as runDiscordTaskWithTimeout } from "./timeouts-C5TBc_9x.js";
4
- import { E as sanitizeDiscordThreadName, c as createDiscordGatewayPlugin, f as createDiscordNativeCommand, l as resolveDiscordGatewayIntents, t as monitorDiscordProvider, u as waitForDiscordGatewayPluginRegistration, w as resolveDiscordReplyTarget, x as registerDiscordListener } from "./provider-DrScDA1p.js";
5
- import { i as buildDiscordMediaPayload } from "./message-utils-Bx993JLN.js";
6
- import { t as createDiscordMessageHandler } from "./message-handler-CQVkXHMN.js";
7
- import "./runtime-api.monitor-D8KNDAd5.js";
4
+ import { E as sanitizeDiscordThreadName, c as createDiscordGatewayPlugin, f as createDiscordNativeCommand, l as resolveDiscordGatewayIntents, t as monitorDiscordProvider, u as waitForDiscordGatewayPluginRegistration, w as resolveDiscordReplyTarget, x as registerDiscordListener } from "./provider-ByZ6xxgi.js";
5
+ import { i as buildDiscordMediaPayload } from "./message-utils-s_8KDqAQ.js";
6
+ import { t as createDiscordMessageHandler } from "./message-handler-DE413Oj4.js";
7
+ import "./runtime-api.monitor-5BSxmucu.js";
8
8
  export { DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS, DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, allowListMatches, buildDiscordMediaPayload, clearGateways, clearPresences, createDiscordGatewayPlugin, createDiscordMessageHandler, createDiscordNativeCommand, getGateway, getPresence, isAbortError, isDiscordGroupAllowedByPolicy, mergeAbortSignals, monitorDiscordProvider, normalizeDiscordAllowList, normalizeDiscordInboundWorkerTimeoutMs, normalizeDiscordListenerTimeoutMs, normalizeDiscordSlug, presenceCacheSize, registerDiscordListener, registerGateway, resolveDiscordChannelConfig, resolveDiscordChannelConfigWithFallback, resolveDiscordCommandAuthorized, resolveDiscordGatewayIntents, resolveDiscordGuildEntry, resolveDiscordReplyTarget, resolveDiscordShouldRequireMention, resolveGroupDmAllow, runDiscordTaskWithTimeout, sanitizeDiscordThreadName, setPresence, shouldEmitDiscordReactionNotification, unregisterGateway, waitForDiscordGatewayPluginRegistration };
@@ -1,6 +1,6 @@
1
- import { x as resolveDiscordOutboundSessionRoute } from "./components-D-CYw0-b.js";
2
- import { n as registerBuiltDiscordComponentMessage, r as sendDiscordComponentMessage, t as editDiscordComponentMessage } from "./send.components-ktzrUTkt.js";
3
- import { A as hasAllGuildPermissionsDiscord, M as hasAnyGuildPermissionDiscord, O as fetchChannelPermissionsDiscord, k as fetchMemberGuildPermissionsDiscord, w as DiscordSendError } from "./send.shared-Dvo2ZCVG.js";
4
- 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-zGsXF-up.js";
5
- import { n as sendPollDiscord, r as sendStickerDiscord, t as sendMessageDiscord } from "./send.outbound-C8oC51um.js";
1
+ import { x as resolveDiscordOutboundSessionRoute } from "./components-CUmrNvv-.js";
2
+ import { n as registerBuiltDiscordComponentMessage, r as sendDiscordComponentMessage, t as editDiscordComponentMessage } from "./send.components-B4_oNcOh.js";
3
+ import { A as hasAllGuildPermissionsDiscord, M as hasAnyGuildPermissionDiscord, O as fetchChannelPermissionsDiscord, k as fetchMemberGuildPermissionsDiscord, w as DiscordSendError } from "./send.shared-DYdjs_Zh.js";
4
+ 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-o-Y1DiAT.js";
5
+ import { n as sendPollDiscord, r as sendStickerDiscord, t as sendMessageDiscord } from "./send.outbound-DhiXV3UJ.js";
6
6
  export { DiscordSendError, addRoleDiscord, banMemberDiscord, createChannelDiscord, createScheduledEventDiscord, createThreadDiscord, deleteChannelDiscord, deleteMessageDiscord, editChannelDiscord, editDiscordComponentMessage, editMessageDiscord, fetchChannelInfoDiscord, fetchChannelPermissionsDiscord, fetchMemberGuildPermissionsDiscord, fetchMemberInfoDiscord, fetchMessageDiscord, fetchReactionsDiscord, fetchRoleInfoDiscord, fetchVoiceStatusDiscord, hasAllGuildPermissionsDiscord, hasAnyGuildPermissionDiscord, kickMemberDiscord, listGuildChannelsDiscord, listGuildEmojisDiscord, listPinsDiscord, listScheduledEventsDiscord, listThreadsDiscord, moveChannelDiscord, pinMessageDiscord, reactMessageDiscord, readMessagesDiscord, registerBuiltDiscordComponentMessage, removeChannelPermissionDiscord, removeOwnReactionsDiscord, removeReactionDiscord, removeRoleDiscord, resolveDiscordOutboundSessionRoute, resolveEventCoverImage, searchMessagesDiscord, sendDiscordComponentMessage, sendMessageDiscord, sendPollDiscord, sendStickerDiscord, sendTypingDiscord, sendVoiceMessageDiscord, sendWebhookMessageDiscord, setChannelPermissionDiscord, timeoutMemberDiscord, unpinMessageDiscord, uploadEmojiDiscord, uploadStickerDiscord };
@@ -1,6 +1,6 @@
1
1
  import { C as resolveThreadBindingIdleTimeoutMs, E as resolveThreadBindingMaxAgeMs, T as resolveThreadBindingMaxAgeExpiresAt, d as isRecentlyUnboundThreadWebhookMessage, w as resolveThreadBindingInactivityExpiresAt } from "./thread-bindings.state-iSWjCYjB.js";
2
2
  import { n as setThreadBindingMaxAgeBySessionKey, t as setThreadBindingIdleTimeoutBySessionKey } from "./thread-bindings.session-updates-Chs3HgGa.js";
3
- import { _ as formatThreadBindingDurationLabel, b as resolveThreadBindingThreadName, g as resolveThreadBindingPersonaFromRecord, h as resolveThreadBindingPersona, y as resolveThreadBindingIntroText } from "./thread-bindings.discord-api-304M1PMr.js";
4
- 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-DO32M2kW.js";
5
- import { i as testing, n as createThreadBindingManager, r as getThreadBindingManager, t as createNoopThreadBindingManager } from "./thread-bindings.manager-C9YT7wF2.js";
3
+ import { _ as formatThreadBindingDurationLabel, b as resolveThreadBindingThreadName, g as resolveThreadBindingPersonaFromRecord, h as resolveThreadBindingPersona, y as resolveThreadBindingIntroText } from "./thread-bindings.discord-api-B8NfbxEB.js";
4
+ 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-CEVvN75T.js";
5
+ import { i as testing, n as createThreadBindingManager, r as getThreadBindingManager, t as createNoopThreadBindingManager } from "./thread-bindings.manager-BKfUaXGt.js";
6
6
  export { testing as __testing, testing, autoBindSpawnedDiscordSubagent, createNoopThreadBindingManager, createThreadBindingManager, formatThreadBindingDurationLabel, getThreadBindingManager, isRecentlyUnboundThreadWebhookMessage, listThreadBindingsBySessionKey, listThreadBindingsForAccount, reconcileAcpThreadBindingsOnStartup, resolveDiscordThreadBindingIdleTimeoutMs, resolveDiscordThreadBindingMaxAgeMs, resolveThreadBindingIdleTimeoutMs, resolveThreadBindingInactivityExpiresAt, resolveThreadBindingIntroText, resolveThreadBindingMaxAgeExpiresAt, resolveThreadBindingMaxAgeMs, resolveThreadBindingPersona, resolveThreadBindingPersonaFromRecord, resolveThreadBindingThreadName, resolveThreadBindingsEnabled, setThreadBindingIdleTimeoutBySessionKey, setThreadBindingMaxAgeBySessionKey, unbindThreadBindingsBySessionKey };
@@ -1,7 +1,7 @@
1
- import { At as getGuildMember, Bt as removeGuildMemberRole, C as readDiscordCode, Ct as createGuildBan, Dt as createGuildSticker, Et as createGuildScheduledEvent, Ft as listGuildRoles, It as listGuildScheduledEvents, Lt as moveGuildChannels, Mt as listGuildActiveThreads, Nt as listGuildChannels, Ot as deleteChannelPermission, Pt as listGuildEmojis, Rt as putChannelPermission, S as RateLimitError, St as addGuildMemberRole, T as readRetryAfter, Tt as createGuildEmoji, Vt as timeoutGuildMember, Wt as __exportAll, _t as listChannelPins, at as deleteOwnMessageReaction, bt as sendChannelTyping, ct as createThread, dt as editChannel, ft as editChannelMessage, gt as listChannelMessages, ht as listChannelArchivedThreads, it as createOwnMessageReaction, jt as getGuildVoiceState, kt as getGuild, lt as deleteChannel, mt as getChannelMessage, n as createDiscordSendResult, ot as listMessageReactionUsers, pt as getChannel, st as createChannelMessage, ut as deleteChannelMessage, vt as pinChannelMessage, w as readDiscordMessage, wt as createGuildChannel, x as DiscordError, xt as unpinChannelMessage, yt as searchGuildMessages, zt as removeGuildMember } from "./send.receipt-DsQWEQ2O.js";
1
+ import { At as getGuildMember, Bt as removeGuildMemberRole, C as readDiscordCode, Ct as createGuildBan, Dt as createGuildSticker, Et as createGuildScheduledEvent, Ft as listGuildRoles, It as listGuildScheduledEvents, Lt as moveGuildChannels, Mt as listGuildActiveThreads, Nt as listGuildChannels, Ot as deleteChannelPermission, Pt as listGuildEmojis, Rt as putChannelPermission, S as RateLimitError, St as addGuildMemberRole, T as readRetryAfter, Tt as createGuildEmoji, Vt as timeoutGuildMember, Wt as __exportAll, _t as listChannelPins, at as deleteOwnMessageReaction, bt as sendChannelTyping, ct as createThread, dt as editChannel, ft as editChannelMessage, gt as listChannelMessages, ht as listChannelArchivedThreads, it as createOwnMessageReaction, jt as getGuildVoiceState, kt as getGuild, lt as deleteChannel, mt as getChannelMessage, n as createDiscordSendResult, ot as listMessageReactionUsers, pt as getChannel, st as createChannelMessage, ut as deleteChannelMessage, vt as pinChannelMessage, w as readDiscordMessage, wt as createGuildChannel, x as DiscordError, xt as unpinChannelMessage, yt as searchGuildMessages, zt as removeGuildMember } from "./send.receipt-HXIwVvXy.js";
2
2
  import { s as resolveDiscordAccount } from "./accounts-P19jm1lf.js";
3
- import { A as hasAllGuildPermissionsDiscord, C as DISCORD_MAX_STICKER_BYTES, D as canViewDiscordGuildChannel, E as canManageGuildRoleDiscord, F as createDiscordClient, M as hasAnyGuildPermissionDiscord, O as fetchChannelPermissionsDiscord, P as parseAndResolveChannelRecipient, R as resolveDiscordClientAccountContext, S as DISCORD_MAX_EVENT_COVER_BYTES, T as canManageGuildMemberRoleDiscord, i as formatReactionEmoji, j as hasAnyChannelPermissionDiscord, k as fetchMemberGuildPermissionsDiscord, l as resolveChannelId, o as normalizeEmojiName, r as buildReactionIdentifier, s as normalizeReactionEmoji, t as buildDiscordSendError, w as DiscordSendError, x as DISCORD_MAX_EMOJI_BYTES, z as resolveDiscordRest } from "./send.shared-Dvo2ZCVG.js";
4
- import { n as sendPollDiscord, r as sendStickerDiscord, s as rewriteDiscordKnownMentions, t as sendMessageDiscord } from "./send.outbound-C8oC51um.js";
3
+ import { A as hasAllGuildPermissionsDiscord, C as DISCORD_MAX_STICKER_BYTES, D as canViewDiscordGuildChannel, E as canManageGuildRoleDiscord, F as createDiscordClient, M as hasAnyGuildPermissionDiscord, O as fetchChannelPermissionsDiscord, P as parseAndResolveChannelRecipient, R as resolveDiscordClientAccountContext, S as DISCORD_MAX_EVENT_COVER_BYTES, T as canManageGuildMemberRoleDiscord, i as formatReactionEmoji, j as hasAnyChannelPermissionDiscord, k as fetchMemberGuildPermissionsDiscord, l as resolveChannelId, o as normalizeEmojiName, r as buildReactionIdentifier, s as normalizeReactionEmoji, t as buildDiscordSendError, w as DiscordSendError, x as DISCORD_MAX_EMOJI_BYTES, z as resolveDiscordRest } from "./send.shared-DYdjs_Zh.js";
4
+ import { n as sendPollDiscord, r as sendStickerDiscord, s as rewriteDiscordKnownMentions, t as sendMessageDiscord } from "./send.outbound-DhiXV3UJ.js";
5
5
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString, normalizeStringEntries } from "openclaw/plugin-sdk/string-coerce-runtime";
6
6
  import { ChannelType } from "discord-api-types/v10";
7
7
  import { parseStrictFiniteNumber, resolveExpiresAtMsFromDurationMs, timestampMsToIsoString } from "openclaw/plugin-sdk/number-runtime";
@@ -1,10 +1,10 @@
1
- import { Wt as __exportAll, ft as editChannelMessage, j as serializePayload, n as createDiscordSendResult, st as createChannelMessage } from "./send.receipt-DsQWEQ2O.js";
1
+ import { Wt as __exportAll, ft as editChannelMessage, j as serializePayload, n as createDiscordSendResult, st as createChannelMessage } from "./send.receipt-HXIwVvXy.js";
2
2
  import { s as resolveDiscordAccount } from "./accounts-P19jm1lf.js";
3
3
  import "./config-api-JiPdJeb0.js";
4
4
  import "./channel-api-CAJ0wMoV.js";
5
- import { c as buildDiscordComponentMessage, f as resolveDiscordComponentAttachmentName, l as buildDiscordComponentMessageFlags } from "./components-D-CYw0-b.js";
6
- import { F as createDiscordClient, P as parseAndResolveChannelRecipient, b as stripUndefinedFields, h as SUPPRESS_NOTIFICATIONS_FLAG, l as resolveChannelId, m as toDiscordFileBlob, t as buildDiscordSendError, u as resolveDiscordChannelType } from "./send.shared-Dvo2ZCVG.js";
7
- import { t as sendMessageDiscord } from "./send.outbound-C8oC51um.js";
5
+ import { c as buildDiscordComponentMessage, f as resolveDiscordComponentAttachmentName, l as buildDiscordComponentMessageFlags } from "./components-CUmrNvv-.js";
6
+ import { F as createDiscordClient, P as parseAndResolveChannelRecipient, b as stripUndefinedFields, h as SUPPRESS_NOTIFICATIONS_FLAG, l as resolveChannelId, m as toDiscordFileBlob, t as buildDiscordSendError, u as resolveDiscordChannelType } from "./send.shared-DYdjs_Zh.js";
7
+ import { t as sendMessageDiscord } from "./send.outbound-DhiXV3UJ.js";
8
8
  import { n as getOptionalDiscordRuntime } from "./runtime-DgnVQ7zW.js";
9
9
  import "openclaw/plugin-sdk/account-id";
10
10
  import "openclaw/plugin-sdk/secret-input";
@@ -1,7 +1,7 @@
1
- import { ct as createThread, n as createDiscordSendResult, st as createChannelMessage } from "./send.receipt-DsQWEQ2O.js";
1
+ import { ct as createThread, n as createDiscordSendResult, st as createChannelMessage } from "./send.receipt-HXIwVvXy.js";
2
2
  import { s as resolveDiscordAccount } from "./accounts-P19jm1lf.js";
3
- import { F as createDiscordClient, P as parseAndResolveChannelRecipient, _ as resolveDiscordMessageFlags, a as normalizeDiscordPollInput, c as normalizeStickerIds, f as sendDiscordMedia, g as buildDiscordMessageRequest, l as resolveChannelId, n as buildDiscordTextChunks, p as sendDiscordText, t as buildDiscordSendError, u as resolveDiscordChannelType, v as resolveDiscordSendComponents, y as resolveDiscordSendEmbeds } from "./send.shared-Dvo2ZCVG.js";
4
- import { a as resolveDiscordDirectoryUserId } from "./directory-live-LjENjK6L.js";
3
+ import { F as createDiscordClient, P as parseAndResolveChannelRecipient, _ as resolveDiscordMessageFlags, a as normalizeDiscordPollInput, c as normalizeStickerIds, f as sendDiscordMedia, g as buildDiscordMessageRequest, l as resolveChannelId, n as buildDiscordTextChunks, p as sendDiscordText, t as buildDiscordSendError, u as resolveDiscordChannelType, v as resolveDiscordSendComponents, y as resolveDiscordSendEmbeds } from "./send.shared-DYdjs_Zh.js";
4
+ import { a as resolveDiscordDirectoryUserId } from "./directory-live-CE7IDmwo.js";
5
5
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString, normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/string-coerce-runtime";
6
6
  import { ChannelType } from "discord-api-types/v10";
7
7
  import { requireRuntimeConfig } from "openclaw/plugin-sdk/plugin-config-runtime";
@@ -10,7 +10,6 @@ import { recordChannelActivity } from "openclaw/plugin-sdk/channel-activity-runt
10
10
  import { resolveMarkdownTableMode } from "openclaw/plugin-sdk/markdown-table-runtime";
11
11
  import { convertMarkdownTables } from "openclaw/plugin-sdk/text-chunking";
12
12
  //#region extensions/discord/src/mentions.ts
13
- const MARKDOWN_CODE_SEGMENT_PATTERN = /```[\s\S]*?```|`[^`\n]*`/g;
14
13
  const MENTION_CANDIDATE_PATTERN = /(^|[\s([{"'.,;:!?])@([a-z0-9_.-]{2,32}(?:#[0-9]{4})?)/gi;
15
14
  const DISCORD_RESERVED_MENTIONS = new Set(["everyone", "here"]);
16
15
  const DISCORD_DISCRIMINATOR_SUFFIX = /#\d{4}$/;
@@ -81,16 +80,60 @@ function rewritePlainTextMentions(text, params) {
81
80
  return `${String(prefix ?? "")}${formatMention({ userId })}`;
82
81
  });
83
82
  }
83
+ function countBacktickRun(text, index) {
84
+ let cursor = index;
85
+ while (text[cursor] === "`") cursor += 1;
86
+ return cursor - index;
87
+ }
88
+ function findSameLineBacktickRun(text, startIndex, runLength) {
89
+ const delimiter = "`".repeat(runLength);
90
+ const newlineIndex = text.indexOf("\n", startIndex);
91
+ const lineEnd = newlineIndex === -1 ? text.length : newlineIndex;
92
+ const closeIndex = text.indexOf(delimiter, startIndex);
93
+ return closeIndex !== -1 && closeIndex < lineEnd ? closeIndex + runLength : null;
94
+ }
95
+ function findFenceEnd(text, startIndex, runLength) {
96
+ let searchIndex = startIndex + runLength;
97
+ while (searchIndex < text.length) {
98
+ const newlineIndex = text.indexOf("\n", searchIndex);
99
+ if (newlineIndex === -1) return text.length;
100
+ let lineCursor = newlineIndex + 1;
101
+ while (text[lineCursor] === " " && lineCursor - newlineIndex <= 3) lineCursor += 1;
102
+ const closingRunLength = countBacktickRun(text, lineCursor);
103
+ if (closingRunLength >= runLength) return lineCursor + closingRunLength;
104
+ searchIndex = lineCursor + Math.max(closingRunLength, 1);
105
+ }
106
+ return text.length;
107
+ }
108
+ function findNextMarkdownCodeSegment(text, startIndex) {
109
+ let searchIndex = startIndex;
110
+ while (searchIndex < text.length) {
111
+ const segmentStart = text.indexOf("`", searchIndex);
112
+ if (segmentStart === -1) return null;
113
+ const runLength = countBacktickRun(text, segmentStart);
114
+ const inlineEndIndex = findSameLineBacktickRun(text, segmentStart + runLength, runLength);
115
+ if (inlineEndIndex !== null) return {
116
+ startIndex: segmentStart,
117
+ endIndex: inlineEndIndex
118
+ };
119
+ if (runLength >= 3) return {
120
+ startIndex: segmentStart,
121
+ endIndex: findFenceEnd(text, segmentStart, runLength)
122
+ };
123
+ searchIndex = segmentStart + runLength;
124
+ }
125
+ return null;
126
+ }
84
127
  function rewriteDiscordKnownMentions(text, params) {
85
128
  if (!text.includes("@")) return text;
86
129
  let rewritten = "";
87
130
  let offset = 0;
88
- MARKDOWN_CODE_SEGMENT_PATTERN.lastIndex = 0;
89
- for (const match of text.matchAll(MARKDOWN_CODE_SEGMENT_PATTERN)) {
90
- const matchIndex = match.index ?? 0;
91
- rewritten += rewritePlainTextMentions(text.slice(offset, matchIndex), params);
92
- rewritten += match[0];
93
- offset = matchIndex + match[0].length;
131
+ let segment = findNextMarkdownCodeSegment(text, offset);
132
+ while (segment) {
133
+ rewritten += rewritePlainTextMentions(text.slice(offset, segment.startIndex), params);
134
+ rewritten += text.slice(segment.startIndex, segment.endIndex);
135
+ offset = segment.endIndex;
136
+ segment = findNextMarkdownCodeSegment(text, offset);
94
137
  }
95
138
  rewritten += rewritePlainTextMentions(text.slice(offset), params);
96
139
  return rewritten;
@@ -2515,13 +2515,14 @@ var RequestClient = class {
2515
2515
  const controller = new AbortController();
2516
2516
  const timeout = setTimeout(() => controller.abort(), this.options.timeout ?? 15e3);
2517
2517
  timeout.unref?.();
2518
+ const signal = this.options.signal ? AbortSignal.any([this.options.signal, controller.signal]) : controller.signal;
2518
2519
  this.requestControllers.add(controller);
2519
2520
  try {
2520
2521
  const response = await (this.customFetch ?? fetch)(url, {
2521
2522
  method,
2522
2523
  headers,
2523
2524
  body: await normalizeFetchBody(body, headers),
2524
- signal: controller.signal
2525
+ signal
2525
2526
  });
2526
2527
  const parsed = coerceResponseBody(await response.text());
2527
2528
  this.scheduler.recordResponse(routeKey, path, response, parsed);
@@ -1,6 +1,6 @@
1
- import { At as getGuildMember, M as Embed, S as RateLimitError, b as RequestClient, j as serializePayload, kt as getGuild, nt as createUserDmChannel, pt as getChannel, rt as getCurrentUser, s as chunkDiscordTextWithMode, st as createChannelMessage } from "./send.receipt-DsQWEQ2O.js";
1
+ import { At as getGuildMember, M as Embed, S as RateLimitError, b as RequestClient, j as serializePayload, kt as getGuild, nt as createUserDmChannel, pt as getChannel, rt as getCurrentUser, s as chunkDiscordTextWithMode, st as createChannelMessage } from "./send.receipt-HXIwVvXy.js";
2
2
  import { a as mergeDiscordAccountConfig, p as normalizeDiscordToken, s as resolveDiscordAccount } from "./accounts-P19jm1lf.js";
3
- import { t as parseAndResolveDiscordTarget } from "./target-resolver-DMPTzuo7.js";
3
+ import { t as parseAndResolveDiscordTarget } from "./target-resolver-DpC8iueE.js";
4
4
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString, normalizeStringEntries } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  import { normalizeAccountId } from "openclaw/plugin-sdk/routing";
6
6
  import { ChannelType, MessageFlags, PermissionFlagsBits } from "discord-api-types/v10";
@@ -150,10 +150,14 @@ function resolveToken(params) {
150
150
  }
151
151
  return fallback;
152
152
  }
153
- function resolveRest(token, account, cfg, rest, proxyFetch) {
153
+ function resolveRest(token, account, cfg, rest, proxyFetch, signal, timeoutMs) {
154
154
  if (rest) return rest;
155
155
  const resolvedProxyFetch = proxyFetch ?? resolveDiscordProxyFetchForAccount(account, cfg);
156
- return createDiscordRequestClient(token, resolvedProxyFetch ? { fetch: resolvedProxyFetch } : void 0);
156
+ return createDiscordRequestClient(token, {
157
+ ...resolvedProxyFetch ? { fetch: resolvedProxyFetch } : {},
158
+ ...signal ? { signal } : {},
159
+ ...timeoutMs !== void 0 ? { timeout: timeoutMs } : {}
160
+ });
157
161
  }
158
162
  function resolveAccountWithoutToken(params) {
159
163
  const accountId = normalizeAccountId(params.accountId);
@@ -185,7 +189,7 @@ function createDiscordRestClient(opts) {
185
189
  });
186
190
  return {
187
191
  token,
188
- rest: resolveRest(token, account, resolvedCfg, opts.rest, proxyContext.proxyFetch),
192
+ rest: resolveRest(token, account, resolvedCfg, opts.rest, proxyContext.proxyFetch, opts.signal, opts.timeoutMs),
189
193
  account
190
194
  };
191
195
  }
@@ -423,8 +427,10 @@ async function hasAllGuildPermissionsDiscord(guildId, userId, requiredPermission
423
427
  return await hasGuildPermissionsDiscord(guildId, userId, requiredPermissions, (permissions, required) => required.every((permission) => hasPermissionBit(permissions, permission)), opts);
424
428
  }
425
429
  async function fetchChannelPermissionsDiscord(channelId, opts) {
430
+ opts.signal?.throwIfAborted();
426
431
  const rest = resolveDiscordRest(opts);
427
432
  const channel = await getChannel(rest, channelId);
433
+ opts.signal?.throwIfAborted();
428
434
  const channelType = "type" in channel ? channel.type : void 0;
429
435
  const guildId = "guild_id" in channel ? channel.guild_id : void 0;
430
436
  if (!guildId) return {
@@ -435,7 +441,9 @@ async function fetchChannelPermissionsDiscord(channelId, opts) {
435
441
  channelType
436
442
  };
437
443
  const botId = await fetchBotUserId(rest);
444
+ opts.signal?.throwIfAborted();
438
445
  const [guild, member] = await Promise.all([getGuild(rest, guildId), getGuildMember(rest, guildId, botId)]);
446
+ opts.signal?.throwIfAborted();
439
447
  const permissions = resolveMemberChannelPermissionBits({
440
448
  guildId,
441
449
  userId: botId,
@@ -1,2 +1,2 @@
1
- import { i as testing, n as createThreadBindingManager } from "./thread-bindings.manager-C9YT7wF2.js";
1
+ import { i as testing, n as createThreadBindingManager } from "./thread-bindings.manager-BKfUaXGt.js";
2
2
  export { createThreadBindingManager, testing as discordThreadBindingTesting };
@@ -1,2 +1,2 @@
1
- import { t as discordSetupPlugin } from "./channel.setup-By5cfELZ.js";
1
+ import { t as discordSetupPlugin } from "./channel.setup-C-y6Jifd.js";
2
2
  export { discordSetupPlugin };
@@ -1,6 +1,6 @@
1
- import { Wt as __exportAll } from "./send.receipt-DsQWEQ2O.js";
1
+ import { Wt as __exportAll } from "./send.receipt-HXIwVvXy.js";
2
2
  import { s as resolveDiscordAccount } from "./accounts-P19jm1lf.js";
3
- import { n as autoBindSpawnedDiscordSubagent, o as unbindThreadBindingsBySessionKey, r as listThreadBindingsBySessionKey } from "./thread-bindings-DO32M2kW.js";
3
+ import { n as autoBindSpawnedDiscordSubagent, o as unbindThreadBindingsBySessionKey, r as listThreadBindingsBySessionKey } from "./thread-bindings-CEVvN75T.js";
4
4
  import { normalizeOptionalLowercaseString, normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  import { formatThreadBindingDisabledError, formatThreadBindingSpawnDisabledError, resolveThreadBindingSpawnPolicy } from "openclaw/plugin-sdk/conversation-runtime";
6
6
  //#region extensions/discord/src/subagent-hooks.ts
@@ -1,7 +1,7 @@
1
1
  //#region extensions/discord/subagent-hooks-api.ts
2
2
  let discordSubagentHooksPromise = null;
3
3
  function loadDiscordSubagentHooksModule() {
4
- discordSubagentHooksPromise ??= import("./subagent-hooks-kjrWDeDg.js").then((n) => n.i);
4
+ discordSubagentHooksPromise ??= import("./subagent-hooks-CbF_Z5F0.js").then((n) => n.i);
5
5
  return discordSubagentHooksPromise;
6
6
  }
7
7
  function registerDiscordSubagentHooks(api) {
@@ -1,4 +1,4 @@
1
- import { c as discord_exports } from "./send.receipt-DsQWEQ2O.js";
1
+ import { c as discord_exports } from "./send.receipt-HXIwVvXy.js";
2
2
  import { b as formatDiscordUserTag } from "./allow-list-C-MqM-B_.js";
3
3
  //#region extensions/discord/src/monitor/system-events.ts
4
4
  function resolveDiscordSystemEvent(message, location) {
@@ -1,6 +1,6 @@
1
- import { Ht as parseDiscordTarget, Wt as __exportAll, r as allowFromContainsDiscordUserId } from "./send.receipt-DsQWEQ2O.js";
1
+ import { Ht as parseDiscordTarget, Wt as __exportAll, r as allowFromContainsDiscordUserId } from "./send.receipt-HXIwVvXy.js";
2
2
  import { c as resolveDiscordAccountAllowFrom, s as resolveDiscordAccount } from "./accounts-P19jm1lf.js";
3
- import { i as rememberDiscordDirectoryUser, r as listDiscordDirectoryPeersLive } from "./directory-live-LjENjK6L.js";
3
+ import { i as rememberDiscordDirectoryUser, r as listDiscordDirectoryPeersLive } from "./directory-live-CE7IDmwo.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 "./send.receipt-HXIwVvXy.js";
2
+ import "./target-resolver-DpC8iueE.js";
3
+ export {};
@@ -1,9 +1,9 @@
1
- import { Ht as parseDiscordTarget, Wt as __exportAll } from "./send.receipt-DsQWEQ2O.js";
2
- import "./targets-CKaNidbk.js";
1
+ import { Ht as parseDiscordTarget, Wt as __exportAll } from "./send.receipt-HXIwVvXy.js";
2
+ import "./targets-BEIgHBHc.js";
3
3
  import { A as shouldPersistBindingMutations, C as resolveThreadBindingIdleTimeoutMs$1, D as saveBindingsToDisk, E as resolveThreadBindingMaxAgeMs$1, T as resolveThreadBindingMaxAgeExpiresAt, d as isRecentlyUnboundThreadWebhookMessage, g as rememberRecentUnboundWebhookEcho, h as normalizeThreadId, n as MANAGERS_BY_ACCOUNT_ID, t as BINDINGS_BY_THREAD_ID, u as getThreadBindingToken, w as resolveThreadBindingInactivityExpiresAt, y as removeBindingRecord } from "./thread-bindings.state-iSWjCYjB.js";
4
4
  import { n as setThreadBindingMaxAgeBySessionKey, r as resolveBindingIdsForTargetSession, t as setThreadBindingIdleTimeoutBySessionKey } from "./thread-bindings.session-updates-Chs3HgGa.js";
5
- import { _ as formatThreadBindingDurationLabel, b as resolveThreadBindingThreadName, g as resolveThreadBindingPersonaFromRecord, h as resolveThreadBindingPersona, s as resolveChannelIdForBinding, y as resolveThreadBindingIntroText } from "./thread-bindings.discord-api-304M1PMr.js";
6
- import { i as testing, n as createThreadBindingManager, r as getThreadBindingManager, t as createNoopThreadBindingManager } from "./thread-bindings.manager-C9YT7wF2.js";
5
+ import { _ as formatThreadBindingDurationLabel, b as resolveThreadBindingThreadName, g as resolveThreadBindingPersonaFromRecord, h as resolveThreadBindingPersona, s as resolveChannelIdForBinding, y as resolveThreadBindingIntroText } from "./thread-bindings.discord-api-B8NfbxEB.js";
6
+ import { i as testing, n as createThreadBindingManager, r as getThreadBindingManager, t as createNoopThreadBindingManager } from "./thread-bindings.manager-BKfUaXGt.js";
7
7
  import { normalizeOptionalLowercaseString, normalizeOptionalString, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
8
8
  import { normalizeAccountId } from "openclaw/plugin-sdk/routing";
9
9
  import { resolveThreadBindingIdleTimeoutMs, resolveThreadBindingMaxAgeMs, resolveThreadBindingsEnabled } from "openclaw/plugin-sdk/conversation-runtime";
@@ -1,7 +1,7 @@
1
- import { Ut as resolveDiscordChannelId, pt as getChannel, tt as createChannelWebhook } from "./send.receipt-DsQWEQ2O.js";
2
- import { I as createDiscordRestClient } from "./send.shared-Dvo2ZCVG.js";
3
- import { c as sendWebhookMessageDiscord, u as createThreadDiscord } from "./send-zGsXF-up.js";
4
- import { t as sendMessageDiscord } from "./send.outbound-C8oC51um.js";
1
+ import { Ut as resolveDiscordChannelId, pt as getChannel, tt as createChannelWebhook } from "./send.receipt-HXIwVvXy.js";
2
+ import { I as createDiscordRestClient } from "./send.shared-DYdjs_Zh.js";
3
+ import { c as sendWebhookMessageDiscord, u as createThreadDiscord } from "./send-o-Y1DiAT.js";
4
+ import { t as sendMessageDiscord } from "./send.outbound-DhiXV3UJ.js";
5
5
  import { M as toReusableWebhookKey, _ as rememberReusableWebhook, i as REUSABLE_WEBHOOKS_BY_ACCOUNT_CHANNEL, t as BINDINGS_BY_THREAD_ID } from "./thread-bindings.state-iSWjCYjB.js";
6
6
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
7
7
  import { ChannelType } from "discord-api-types/v10";
@@ -1,7 +1,7 @@
1
- import { Ut as resolveDiscordChannelId, Wt as __exportAll, pt as getChannel } from "./send.receipt-DsQWEQ2O.js";
2
- import { I as createDiscordRestClient } from "./send.shared-Dvo2ZCVG.js";
1
+ import { Ut as resolveDiscordChannelId, Wt as __exportAll, pt as getChannel } from "./send.receipt-HXIwVvXy.js";
2
+ import { I as createDiscordRestClient } from "./send.shared-DYdjs_Zh.js";
3
3
  import { C as resolveThreadBindingIdleTimeoutMs$1, D as saveBindingsToDisk, E as resolveThreadBindingMaxAgeMs$1, F as THREAD_BINDINGS_SWEEP_INTERVAL_MS, N as DEFAULT_THREAD_BINDING_IDLE_TIMEOUT_MS, O as setBindingRecord, S as resolveBindingRecordKey, T as resolveThreadBindingMaxAgeExpiresAt, b as resetThreadBindingsForTests, c as ensureBindingsLoaded, g as rememberRecentUnboundWebhookEcho, h as normalizeThreadId, k as shouldDefaultPersist, l as forgetThreadBindingToken, m as normalizeThreadBindingDurationMs, n as MANAGERS_BY_ACCOUNT_ID, p as normalizeTargetKind, 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 rememberThreadBindingToken, w as resolveThreadBindingInactivityExpiresAt, x as resolveBindingIdsForSession, y as removeBindingRecord } from "./thread-bindings.state-iSWjCYjB.js";
4
- import { a as isThreadArchived, b as resolveThreadBindingThreadName, c as summarizeDiscordError, i as isDiscordThreadGoneError, n as createWebhookForChannel, o as maybeSendBindingMessage, r as findReusableWebhook, s as resolveChannelIdForBinding, t as createThreadForBinding, v as resolveThreadBindingFarewellText } from "./thread-bindings.discord-api-304M1PMr.js";
4
+ import { a as isThreadArchived, b as resolveThreadBindingThreadName, c as summarizeDiscordError, i as isDiscordThreadGoneError, n as createWebhookForChannel, o as maybeSendBindingMessage, r as findReusableWebhook, s as resolveChannelIdForBinding, t as createThreadForBinding, v as resolveThreadBindingFarewellText } from "./thread-bindings.discord-api-B8NfbxEB.js";
5
5
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
6
6
  import { normalizeAccountId, resolveAgentIdFromSessionKey } from "openclaw/plugin-sdk/routing";
7
7
  import { getRuntimeConfigSnapshot } from "openclaw/plugin-sdk/runtime-config-snapshot";
@@ -1,4 +1,4 @@
1
- import { Wt as __exportAll } from "./send.receipt-DsQWEQ2O.js";
1
+ import { Wt as __exportAll } from "./send.receipt-HXIwVvXy.js";
2
2
  //#region extensions/discord/src/voice/transcripts-source.ts
3
3
  var transcripts_source_exports = /* @__PURE__ */ __exportAll({
4
4
  discordVoiceTranscriptsSourceProvider: () => discordVoiceTranscriptsSourceProvider,
@@ -1,2 +1,2 @@
1
- import { t as discordVoiceTranscriptsSourceProvider } from "./transcripts-source-Chy2OrO_.js";
1
+ import { t as discordVoiceTranscriptsSourceProvider } from "./transcripts-source-W6n_8J8g.js";
2
2
  export { discordVoiceTranscriptsSourceProvider };
@@ -1,4 +1,4 @@
1
- import { Wt as __exportAll, bt as sendChannelTyping } from "./send.receipt-DsQWEQ2O.js";
1
+ import { Wt as __exportAll, bt as sendChannelTyping } from "./send.receipt-HXIwVvXy.js";
2
2
  import { l as raceWithTimeout } from "./timeouts-C5TBc_9x.js";
3
3
  //#region extensions/discord/src/monitor/typing.ts
4
4
  var typing_exports = /* @__PURE__ */ __exportAll({ sendTyping: () => sendTyping });
@@ -21,28 +21,65 @@ npm i undici
21
21
 
22
22
  ## Benchmarks
23
23
 
24
- The benchmark is a simple getting data [example](https://github.com/nodejs/undici/blob/main/benchmarks/benchmark.js) using a
25
- 50 TCP connections with a pipelining depth of 10 running on Node 22.11.0.
24
+ The benchmark is a simple getting data [example](https://github.com/nodejs/undici/blob/main/benchmarks/benchmark.js) using
25
+ 50 TCP connections with a pipelining depth of 10 running on Node 24.14.1.
26
+
27
+ ### HTTP/1.1
26
28
 
27
29
  ```
28
30
  ┌────────────────────────┬─────────┬────────────────────┬────────────┬─────────────────────────┐
29
31
  │ Tests │ Samples │ Result │ Tolerance │ Difference with slowest │
30
32
  ├────────────────────────┼─────────┼────────────────────┼────────────┼─────────────────────────┤
31
- │ 'axios' 15 │ '5708.26 req/sec' │ '± 2.91 %' │ '-' │
32
- │ 'http - no keepalive' 10 │ '5809.80 req/sec' │ '± 2.30 %' │ '+ 1.78 %'
33
- │ 'request' 30 │ '5828.80 req/sec' │ '± 2.91 %' │ '+ 2.11 %'
34
- │ 'undici - fetch' 40 │ '5903.78 req/sec' │ '± 2.87 %' │ '+ 3.43 %'
35
- │ 'node-fetch' 10 │ '5945.40 req/sec' │ '± 2.13 %' │ '+ 4.15 %'
36
- │ 'got' │ 35 │ '6511.45 req/sec' │ '± 2.84 %' │ '+ 14.07 %' │
37
- │ 'http - keepalive' 65 │ '9193.24 req/sec' │ '± 2.92 %' │ '+ 61.05 %' │
38
- │ 'superagent' 35 │ '9339.43 req/sec' │ '± 2.95 %' │ '+ 63.61 %' │
39
- │ 'undici - pipeline' │ 50 │ '13364.62 req/sec' │ '± 2.93 %' │ '+ 134.13 %' │
40
- │ 'undici - stream' 95 │ '18245.36 req/sec' │ '± 2.99 %' │ '+ 219.63 %' │
41
- │ 'undici - request' 50 │ '18340.17 req/sec' │ '± 2.84 %' │ '+ 221.29 %' │
42
- │ 'undici - dispatch' │ 40 │ '22234.42 req/sec' │ '± 2.94 %' │ '+ 289.51 %' │
33
+ │ 'node-fetch' 50 │ '4711.86 req/sec' │ '± 2.92 %' │ '-' │
34
+ │ 'undici - fetch' 75 │ '5438.50 req/sec' │ '± 2.97 %' │ '+ 15.42 %'
35
+ │ 'axios' 45 │ '5448.08 req/sec' │ '± 2.98 %' │ '+ 15.62 %'
36
+ │ 'request' 65 │ '5809.63 req/sec' │ '± 2.90 %' │ '+ 23.30 %'
37
+ │ 'http - no keepalive' 35 │ '5910.77 req/sec' │ '± 2.87 %' │ '+ 25.44 %'
38
+ │ 'got' │ 50 │ '6047.80 req/sec' │ '± 2.91 %' │ '+ 28.35 %' │
39
+ │ 'superagent' 60 │ '7534.53 req/sec' │ '± 2.97 %' │ '+ 59.91 %' │
40
+ │ 'http - keepalive' 75 │ '9343.41 req/sec' │ '± 2.90 %' │ '+ 98.30 %' │
41
+ │ 'undici - pipeline' │ 65 │ '13470.70 req/sec' │ '± 2.93 %' │ '+ 185.89 %' │
42
+ │ 'undici - request' 80 │ '16850.87 req/sec' │ '± 2.93 %' │ '+ 257.63 %' │
43
+ │ 'undici - stream' 101 │ '18488.56 req/sec' │ '± 3.81 %' │ '+ 292.38 %' │
44
+ │ 'undici - dispatch' │ 101 │ '20786.44 req/sec' │ '± 3.08 %' │ '+ 341.15 %' │
43
45
  └────────────────────────┴─────────┴────────────────────┴────────────┴─────────────────────────┘
44
46
  ```
45
47
 
48
+ ### HTTP/1.1 over HTTPS
49
+
50
+ Using [benchmark-https.js](https://github.com/nodejs/undici/blob/main/benchmarks/benchmark-https.js) against an h1-over-TLS server (50 connections, pipelining depth 10, Node 24.14.1).
51
+
52
+ ```
53
+ ┌────────────────────────┬─────────┬───────────────────┬────────────┬─────────────────────────┐
54
+ │ Tests │ Samples │ Result │ Tolerance │ Difference with slowest │
55
+ ├────────────────────────┼─────────┼───────────────────┼────────────┼─────────────────────────┤
56
+ │ 'https - no keepalive'│ 10 │ '1358.40 req/sec' │ '± 1.99 %' │ '-' │
57
+ │ 'undici - fetch' │ 30 │ '3721.76 req/sec' │ '± 2.97 %' │ '+ 173.98 %' │
58
+ │ 'https - keepalive' │ 35 │ '5633.91 req/sec' │ '± 2.84 %' │ '+ 314.75 %' │
59
+ │ 'undici - pipeline' │ 15 │ '6254.05 req/sec' │ '± 2.80 %' │ '+ 360.40 %' │
60
+ │ 'undici - request' │ 25 │ '6669.80 req/sec' │ '± 2.73 %' │ '+ 391.01 %' │
61
+ │ 'undici - stream' │ 25 │ '7019.04 req/sec' │ '± 2.77 %' │ '+ 416.71 %' │
62
+ │ 'undici - dispatch' │ 20 │ '7361.85 req/sec' │ '± 2.90 %' │ '+ 441.95 %' │
63
+ └────────────────────────┴─────────┴───────────────────┴────────────┴─────────────────────────┘
64
+ ```
65
+
66
+ ### HTTP/2
67
+
68
+ Using [benchmark-http2.js](https://github.com/nodejs/undici/blob/main/benchmarks/benchmark-http2.js) against an h2 server (50 connections, pipelining depth 10, Node 24.14.1).
69
+
70
+ ```
71
+ ┌────────────────────────┬─────────┬───────────────────┬────────────┬─────────────────────────┐
72
+ │ Tests │ Samples │ Result │ Tolerance │ Difference with slowest │
73
+ ├────────────────────────┼─────────┼───────────────────┼────────────┼─────────────────────────┤
74
+ │ 'undici - fetch' │ 45 │ '3499.03 req/sec' │ '± 2.93 %' │ '-' │
75
+ │ 'native - http2' │ 25 │ '4904.58 req/sec' │ '± 2.81 %' │ '+ 40.17 %' │
76
+ │ 'undici - pipeline' │ 60 │ '5836.82 req/sec' │ '± 2.99 %' │ '+ 66.81 %' │
77
+ │ 'undici - request' │ 65 │ '6831.25 req/sec' │ '± 2.83 %' │ '+ 95.23 %' │
78
+ │ 'undici - stream' │ 55 │ '6874.30 req/sec' │ '± 2.91 %' │ '+ 96.46 %' │
79
+ │ 'undici - dispatch' │ 55 │ '7791.23 req/sec' │ '± 2.96 %' │ '+ 122.67 %' │
80
+ └────────────────────────┴─────────┴───────────────────┴────────────┴─────────────────────────┘
81
+ ```
82
+
46
83
  ## Undici vs. Fetch
47
84
 
48
85
  ### Overview
@@ -340,6 +377,9 @@ The `body` mixins are the most common way to format the request/response body. M
340
377
  > [!NOTE]
341
378
  > The body returned from `undici.request` does not implement `.formData()`.
342
379
 
380
+ > [!WARNING]
381
+ > Calling `body.formData()` on a fetch response causes undici to buffer and parse the entire body. Since this is dictated by the spec, `body.formData()` must only be called on responses from trusted servers.
382
+
343
383
  Example usage:
344
384
 
345
385
  ```js
@@ -740,10 +780,11 @@ and `undici.Agent`) which will enable the family autoselection algorithm when es
740
780
  Undici aligns with the Node.js LTS schedule. The following table shows the supported versions:
741
781
 
742
782
  | Undici Version | Bundled in Node.js | Node.js Versions Supported | End of Life |
743
- |----------------|-------------------|----------------------------|-------------|
744
- | 5.x | 18.x | ≥14.0 (tested: 14, 16, 18) | 2024-04-30 |
745
- | 6.x | 20.x, 22.x | ≥18.17 (tested: 18, 20, 21, 22) | 2026-04-30 |
746
- | 7.x | 24.x | ≥20.18.1 (tested: 20, 22, 24) | 2027-04-30 |
783
+ |----------------|--------------------|----------------------------|-------------|
784
+ | 5.x | 18.x | ≥14.0 (tested: 14, 16, 18) | 2024-04-30 |
785
+ | 6.x | 20.x, 22.x | ≥18.17 (tested: 18, 20, 21, 22) | 2027-04-30 |
786
+ | 7.x | 24.x | ≥20.18.1 (tested: 20, 22, 24) | 2028-04-30 |
787
+ | 8.x | 26.x | ≥22.19.0 (tested: 22, 24, 26) | 2029-04-30 |
747
788
 
748
789
  ## License
749
790