@openclaw/discord 2026.6.34 → 2026.6.35

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 (115) hide show
  1. package/dist/action-runtime-api.js +1 -1
  2. package/dist/{api-CjnGBhM3.js → api-1GXlSrYP.js} +42 -21
  3. package/dist/api.js +14 -14
  4. package/dist/{approval-handler.runtime-BWPQrzpP.js → approval-handler.runtime-Dv4p7REU.js} +3 -3
  5. package/dist/{audit-BwJ_2OjL.js → audit-DEVi9nIs.js} +3 -3
  6. package/dist/{channel-DU4jnQgl.js → channel-CQIRiosn.js} +15 -15
  7. package/dist/{channel-actions-CwmIqnYN.js → channel-actions-JziPEcBU.js} +2 -2
  8. package/dist/{channel-actions.runtime-DvpTfaJ4.js → channel-actions.runtime-D7L47LY3.js} +5 -5
  9. package/dist/channel-plugin-api.js +1 -1
  10. package/dist/{channel.setup-glZ5Y98a.js → channel.setup-oMeR19Cc.js} +2 -2
  11. package/dist/{components-j6lTZBsT.js → components-_s5UPJqU.js} +1 -1
  12. package/dist/{conversation-identity-36FFBwm5.js → conversation-identity-B0k94-bz.js} +2 -2
  13. package/dist/{directory-config-BYMFzL29.js → directory-config-CD1svkyN.js} +1 -1
  14. package/dist/directory-contract-api.js +1 -1
  15. package/dist/{directory-live-9JtJCiu8.js → directory-live-DBTsSRxl.js} +5 -5
  16. package/dist/{handle-action.guild-admin-xxGYrp-I.js → handle-action.guild-admin-CYIFMxh-.js} +2 -2
  17. package/dist/index.js +1 -1
  18. package/dist/{manager.runtime-NxCd-PVt.js → manager.runtime-BZVdGX2d.js} +17 -9
  19. package/dist/{message-handler-cizxbaDc.js → message-handler-DZd9Bpq8.js} +6 -6
  20. package/dist/{message-handler.preflight-CbD0u7U7.js → message-handler.preflight-Axv9J9EO.js} +12 -11
  21. package/dist/{message-handler.process-Do4EM591.js → message-handler.process-CG0zFS-Z.js} +10 -10
  22. package/dist/{message-utils-CJeAoISH.js → message-utils-Dbuw27gd.js} +1 -1
  23. package/dist/{outbound-adapter-Dxs6iKEq.js → outbound-adapter-CKC_kmUN.js} +6 -6
  24. package/dist/pluralkit-CfTReLl3.js +40 -0
  25. package/dist/{probe-esE_Oqdm.js → probe-DcgZIpyF.js} +3 -2
  26. package/dist/{probe.runtime-C3Atgpvr.js → probe.runtime-CVwM9L5E.js} +1 -1
  27. package/dist/{provider-B-s93q9s.js → provider-CwwSXIIj.js} +73 -33
  28. package/dist/{provider-session.runtime-BKMOqHpd.js → provider-session.runtime-reBWkqHZ.js} +3 -3
  29. package/dist/provider.runtime-BsmTLYS_.js +2 -0
  30. package/dist/{resolve-allowlist-common-3gB2Gpmm.js → resolve-allowlist-common-D7bZqAw3.js} +3 -3
  31. package/dist/{resolve-channels-B3gQf8QL.js → resolve-channels--oE-RnO6.js} +6 -6
  32. package/dist/{resolve-users-BO10y5fJ.js → resolve-users-QXo8CXBU.js} +5 -5
  33. package/dist/{runtime-CFlR3L9X.js → runtime-CF7ramAs.js} +7 -7
  34. package/dist/runtime-api.actions.js +2 -2
  35. package/dist/runtime-api.js +19 -19
  36. package/dist/runtime-api.lookup.js +5 -5
  37. package/dist/runtime-api.monitor-CzF8MUl_.js +6 -0
  38. package/dist/runtime-api.monitor.js +5 -5
  39. package/dist/runtime-api.send.js +5 -5
  40. package/dist/runtime-api.threads.js +3 -3
  41. package/dist/{send-JHxfT4Pk.js → send-Bb295iHT.js} +5 -5
  42. package/dist/{send.components-CN35E2Ck.js → send.components-COkDUO3B.js} +4 -4
  43. package/dist/{send.outbound-B-cA1Esv.js → send.outbound-B_sk0hNe.js} +3 -3
  44. package/dist/{send.receipt-CGecJDin.js → send.receipt-Cli6_9Sn.js} +19 -7
  45. package/dist/{send.shared-vcbfThdy.js → send.shared-BCG7MWnP.js} +2 -2
  46. package/dist/session-binding-contract-api.js +1 -1
  47. package/dist/setup-plugin-api.js +1 -1
  48. package/dist/{subagent-hooks-20wXhVzZ.js → subagent-hooks-CtqoWK4x.js} +2 -2
  49. package/dist/subagent-hooks-api.js +1 -1
  50. package/dist/{system-events-DR27TE7p.js → system-events-BxGNk_wE.js} +1 -1
  51. package/dist/{target-resolver-CDi1gI90.js → target-resolver-BcoK6b0g.js} +2 -2
  52. package/dist/targets-Q-ZoP7K4.js +3 -0
  53. package/dist/{thread-bindings-DU4T6nDo.js → thread-bindings-DJ_HT6GJ.js} +4 -4
  54. package/dist/{thread-bindings.discord-api-CYkr-3Gj.js → thread-bindings.discord-api-OPyjvgyz.js} +4 -4
  55. package/dist/{thread-bindings.manager-BqWs1UE2.js → thread-bindings.manager-Cd2HAVw_.js} +3 -3
  56. package/dist/{transcripts-source-D-lBI5ZD.js → transcripts-source-CPf5gURy.js} +1 -1
  57. package/dist/transcripts-source-api.js +1 -1
  58. package/dist/{typing-xr05bL-r.js → typing-DY0cwLdg.js} +1 -1
  59. package/node_modules/undici/docs/docs/api/Client.md +25 -8
  60. package/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +3 -2
  61. package/node_modules/undici/docs/docs/api/EventSource.md +4 -0
  62. package/node_modules/undici/docs/docs/api/Interceptors.md +7 -3
  63. package/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +7 -1
  64. package/node_modules/undici/lib/api/readable.js +33 -43
  65. package/node_modules/undici/lib/cache/memory-cache-store.js +2 -2
  66. package/node_modules/undici/lib/core/connect.js +16 -2
  67. package/node_modules/undici/lib/core/symbols.js +3 -0
  68. package/node_modules/undici/lib/dispatcher/agent.js +7 -2
  69. package/node_modules/undici/lib/dispatcher/balanced-pool.js +7 -4
  70. package/node_modules/undici/lib/dispatcher/client-h1.js +9 -1
  71. package/node_modules/undici/lib/dispatcher/client-h2.js +221 -12
  72. package/node_modules/undici/lib/dispatcher/client.js +76 -30
  73. package/node_modules/undici/lib/dispatcher/dispatcher-base.js +13 -1
  74. package/node_modules/undici/lib/dispatcher/dispatcher.js +15 -1
  75. package/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +3 -0
  76. package/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +37 -8
  77. package/node_modules/undici/lib/dispatcher/proxy-agent.js +18 -1
  78. package/node_modules/undici/lib/dispatcher/retry-agent.js +3 -0
  79. package/node_modules/undici/lib/dispatcher/round-robin-pool.js +1 -1
  80. package/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +106 -22
  81. package/node_modules/undici/lib/handler/cache-handler.js +29 -5
  82. package/node_modules/undici/lib/handler/decorator-handler.js +7 -1
  83. package/node_modules/undici/lib/handler/deduplication-handler.js +12 -6
  84. package/node_modules/undici/lib/handler/redirect-handler.js +21 -4
  85. package/node_modules/undici/lib/handler/retry-handler.js +155 -32
  86. package/node_modules/undici/lib/interceptor/cache.js +65 -9
  87. package/node_modules/undici/lib/interceptor/decompress.js +115 -13
  88. package/node_modules/undici/lib/interceptor/deduplicate.js +5 -4
  89. package/node_modules/undici/lib/interceptor/dns.js +7 -0
  90. package/node_modules/undici/lib/interceptor/dump.js +10 -23
  91. package/node_modules/undici/lib/mock/mock-agent.js +13 -1
  92. package/node_modules/undici/lib/mock/mock-utils.js +217 -27
  93. package/node_modules/undici/lib/util/cache.js +43 -3
  94. package/node_modules/undici/lib/web/cookies/parse.js +150 -147
  95. package/node_modules/undici/lib/web/eventsource/eventsource-stream.js +28 -1
  96. package/node_modules/undici/lib/web/eventsource/eventsource.js +13 -3
  97. package/node_modules/undici/lib/web/fetch/index.js +6 -0
  98. package/node_modules/undici/lib/web/fetch/request.js +2 -3
  99. package/node_modules/undici/lib/web/fetch/util.js +6 -1
  100. package/node_modules/undici/lib/web/webidl/index.js +3 -3
  101. package/node_modules/undici/lib/web/websocket/connection.js +1 -1
  102. package/node_modules/undici/lib/web/websocket/permessage-deflate.js +5 -0
  103. package/node_modules/undici/lib/web/websocket/stream/websocketstream.js +8 -10
  104. package/node_modules/undici/lib/web/websocket/websocket.js +22 -0
  105. package/node_modules/undici/package.json +3 -3
  106. package/node_modules/undici/types/client.d.ts +50 -0
  107. package/node_modules/undici/types/interceptors.d.ts +2 -0
  108. package/node_modules/undici/types/mock-agent.d.ts +11 -10
  109. package/node_modules/undici/types/socks5-proxy-agent.d.ts +2 -0
  110. package/npm-shrinkwrap.json +7 -7
  111. package/package.json +6 -5
  112. package/dist/pluralkit-DI6RYaVj.js +0 -24
  113. package/dist/provider.runtime-CaTJrpnl.js +0 -2
  114. package/dist/runtime-api.monitor-CRiBIQEI.js +0 -6
  115. package/dist/targets-C6yd3y8R.js +0 -3
@@ -1,2 +1,2 @@
1
- import { t as handleDiscordAction } from "./runtime-CFlR3L9X.js";
1
+ import { t as handleDiscordAction } from "./runtime-CF7ramAs.js";
2
2
  export { handleDiscordAction };
@@ -2,6 +2,7 @@ import { n as parseRetryAfterHeaderSeconds, t as parseDiscordRetryAfterBodySecon
2
2
  import { resolveTimerTimeoutMs } from "openclaw/plugin-sdk/number-runtime";
3
3
  import { readResponseWithLimit } from "openclaw/plugin-sdk/response-limit-runtime";
4
4
  import { resolveFetch } from "openclaw/plugin-sdk/fetch-runtime";
5
+ import { sleepWithAbort } from "openclaw/plugin-sdk/runtime-env";
5
6
  import { resolveRetryConfig, retryAsync } from "openclaw/plugin-sdk/retry-runtime";
6
7
  import { readResponseTextLimited } from "openclaw/plugin-sdk/provider-http";
7
8
  //#region extensions/discord/src/error-body.ts
@@ -30,6 +31,7 @@ const DISCORD_API_RETRY_DEFAULTS = {
30
31
  const DISCORD_API_429_FALLBACK_RETRY_AFTER_SECONDS = 60;
31
32
  const DISCORD_API_ERROR_BODY_LIMIT_BYTES = 8 * 1024;
32
33
  const DISCORD_API_RESPONSE_BODY_LIMIT_BYTES = 4 * 1024 * 1024;
34
+ const DISCORD_DIRECTORY_LOOKUP_TIMEOUT_MS = 1e4;
33
35
  function parseDiscordApiErrorPayload(text) {
34
36
  const trimmed = text.trim();
35
37
  if (!trimmed.startsWith("{") || !trimmed.endsWith("}")) return null;
@@ -86,9 +88,18 @@ function normalizeDiscordRequestBody(body, headers) {
86
88
  headers.set("Content-Type", headers.get("Content-Type") ?? "application/json");
87
89
  return JSON.stringify(body);
88
90
  }
89
- function resolveDiscordRequestSignal(options) {
90
- if (options.signal || typeof options.timeoutMs !== "number") return options.signal;
91
- return AbortSignal.timeout(resolveTimerTimeoutMs(options.timeoutMs, 1));
91
+ function createDiscordRequestSignal(options) {
92
+ if (typeof options.timeoutMs !== "number" || options.signal?.aborted) return {
93
+ signal: options.signal,
94
+ cleanup: () => void 0
95
+ };
96
+ const controller = new AbortController();
97
+ const timeout = setTimeout(() => controller.abort(), resolveTimerTimeoutMs(options.timeoutMs, 1));
98
+ timeout.unref?.();
99
+ return {
100
+ signal: options.signal ? AbortSignal.any([options.signal, controller.signal]) : controller.signal,
101
+ cleanup: () => clearTimeout(timeout)
102
+ };
92
103
  }
93
104
  async function requestDiscord(path, token, options) {
94
105
  const fetchImpl = resolveFetch(options?.fetcher ?? fetch);
@@ -98,28 +109,38 @@ async function requestDiscord(path, token, options) {
98
109
  const headers = new Headers(options?.headers);
99
110
  headers.set("Authorization", `Bot ${token}`);
100
111
  const body = normalizeDiscordRequestBody(options?.body, headers);
101
- const res = await fetchImpl(`${DISCORD_API_BASE}${path}`, {
102
- method: options?.method ?? (body === void 0 ? "GET" : "POST"),
103
- headers,
104
- body,
105
- signal: resolveDiscordRequestSignal(options ?? {})
106
- });
107
- if (!res.ok) {
108
- const text = await readResponseTextLimited(res, DISCORD_API_ERROR_BODY_LIMIT_BYTES).catch(() => "");
109
- const detail = formatDiscordApiErrorText(text, res);
110
- const suffix = detail ? `: ${detail}` : "";
111
- const retryAfter = res.status === 429 ? parseRetryAfterSeconds(text, res) ?? DISCORD_API_429_FALLBACK_RETRY_AFTER_SECONDS : void 0;
112
- throw new DiscordApiError(`Discord API ${path} failed (${res.status})${suffix}`, res.status, retryAfter);
112
+ const requestSignal = createDiscordRequestSignal(options ?? {});
113
+ try {
114
+ const res = await fetchImpl(`${DISCORD_API_BASE}${path}`, {
115
+ method: options?.method ?? (body === void 0 ? "GET" : "POST"),
116
+ headers,
117
+ body,
118
+ signal: requestSignal.signal
119
+ });
120
+ if (!res.ok) {
121
+ const text = await readResponseTextLimited(res, DISCORD_API_ERROR_BODY_LIMIT_BYTES).catch(() => "");
122
+ const detail = formatDiscordApiErrorText(text, res);
123
+ const suffix = detail ? `: ${detail}` : "";
124
+ const retryAfter = res.status === 429 ? parseRetryAfterSeconds(text, res) ?? DISCORD_API_429_FALLBACK_RETRY_AFTER_SECONDS : void 0;
125
+ throw new DiscordApiError(`Discord API ${path} failed (${res.status})${suffix}`, res.status, retryAfter);
126
+ }
127
+ const responseBody = await readResponseWithLimit(res, DISCORD_API_RESPONSE_BODY_LIMIT_BYTES, { onOverflow: ({ size, maxBytes }) => /* @__PURE__ */ new Error(`Discord API ${path} response body too large: ${size} bytes (limit: ${maxBytes} bytes)`) });
128
+ const text = new TextDecoder().decode(responseBody);
129
+ if (!text.trim()) return;
130
+ try {
131
+ return JSON.parse(text);
132
+ } catch {
133
+ throw new DiscordApiError(`Discord API ${path} returned malformed JSON`, 0);
134
+ }
135
+ } finally {
136
+ requestSignal.cleanup();
113
137
  }
114
- const responseBody = await readResponseWithLimit(res, DISCORD_API_RESPONSE_BODY_LIMIT_BYTES, { onOverflow: ({ size, maxBytes }) => /* @__PURE__ */ new Error(`Discord API ${path} response body too large: ${size} bytes (limit: ${maxBytes} bytes)`) });
115
- const text = new TextDecoder().decode(responseBody);
116
- if (!text.trim()) return;
117
- return JSON.parse(text);
118
138
  }, {
119
139
  ...retryConfig,
120
140
  label: options?.label ?? path,
121
141
  shouldRetry: (err) => err instanceof DiscordApiError && err.status === 429,
122
- retryAfterMs: (err) => getDiscordApiRetryAfterMs(err, retryConfig)
142
+ retryAfterMs: (err) => getDiscordApiRetryAfterMs(err, retryConfig),
143
+ sleep: (ms) => sleepWithAbort(ms, options?.signal)
123
144
  });
124
145
  }
125
146
  async function fetchDiscord(path, token, fetcher = fetch, options) {
@@ -130,4 +151,4 @@ async function fetchDiscord(path, token, fetcher = fetch, options) {
130
151
  });
131
152
  }
132
153
  //#endregion
133
- export { summarizeDiscordResponseBody as a, isDiscordRateLimitResponseBody as i, fetchDiscord as n, requestDiscord as r, DiscordApiError as t };
154
+ export { isDiscordRateLimitResponseBody as a, requestDiscord as i, DiscordApiError as n, summarizeDiscordResponseBody as o, fetchDiscord as r, DISCORD_DIRECTORY_LOOKUP_TIMEOUT_MS as t };
package/dist/api.js CHANGED
@@ -1,23 +1,23 @@
1
- import { Ht as parseDiscordTarget, Ut as resolveDiscordChannelId, a as normalizeDiscordMessagingTarget, i as looksLikeDiscordTargetId, o as normalizeDiscordOutboundTarget } from "./send.receipt-CGecJDin.js";
1
+ import { Ht as parseDiscordTarget, Ut as resolveDiscordChannelId, a as normalizeDiscordMessagingTarget, i as looksLikeDiscordTargetId, o as normalizeDiscordOutboundTarget } from "./send.receipt-Cli6_9Sn.js";
2
2
  import { t as inspectDiscordAccount } from "./account-inspect-DDZtT5C8.js";
3
3
  import { a as mergeDiscordAccountConfig, f as resolveDiscordMaxLinesPerMessage, i as listEnabledDiscordAccounts, l as resolveDiscordAccountConfig, o as resolveDefaultDiscordAccountId, r as listDiscordAccountIds, s as resolveDiscordAccount, t as createDiscordActionGate } from "./accounts-P19jm1lf.js";
4
- import { _ as parseDiscordComponentCustomId, b as parseDiscordModalCustomIdForInteraction, c as buildDiscordComponentMessage, d as readDiscordComponentSpec, f as resolveDiscordComponentAttachmentName, g as buildDiscordModalCustomId, h as buildDiscordComponentCustomId, l as buildDiscordComponentMessageFlags, m as DISCORD_MODAL_CUSTOM_ID_KEY, n as formatDiscordComponentEventText, o as DiscordFormModal, p as DISCORD_COMPONENT_CUSTOM_ID_KEY, r as buildDiscordInteractiveComponents, s as createDiscordFormModal, u as DISCORD_COMPONENT_ATTACHMENT_PREFIX, v as parseDiscordComponentCustomIdForInteraction, y as parseDiscordModalCustomId } from "./components-j6lTZBsT.js";
5
- import { n as fetchDiscord, r as requestDiscord, t as DiscordApiError } from "./api-CjnGBhM3.js";
6
- import { i as parseDiscordSendTarget, n as resolveDiscordTarget } from "./target-resolver-CDi1gI90.js";
7
- import "./targets-C6yd3y8R.js";
8
- import { a as getDiscordExecApprovalApprovers, c as shouldSuppressLocalDiscordExecApprovalPrompt, o as isDiscordExecApprovalApprover, s as isDiscordExecApprovalClientEnabled } from "./conversation-identity-36FFBwm5.js";
9
- import { i as resolveDiscordGroupToolPolicy, n as collectDiscordStatusIssues, r as resolveDiscordGroupRequireMention, t as discordPlugin } from "./channel-DU4jnQgl.js";
4
+ import { _ as parseDiscordComponentCustomId, b as parseDiscordModalCustomIdForInteraction, c as buildDiscordComponentMessage, d as readDiscordComponentSpec, f as resolveDiscordComponentAttachmentName, g as buildDiscordModalCustomId, h as buildDiscordComponentCustomId, l as buildDiscordComponentMessageFlags, m as DISCORD_MODAL_CUSTOM_ID_KEY, n as formatDiscordComponentEventText, o as DiscordFormModal, p as DISCORD_COMPONENT_CUSTOM_ID_KEY, r as buildDiscordInteractiveComponents, s as createDiscordFormModal, u as DISCORD_COMPONENT_ATTACHMENT_PREFIX, v as parseDiscordComponentCustomIdForInteraction, y as parseDiscordModalCustomId } from "./components-_s5UPJqU.js";
5
+ import { i as requestDiscord, n as DiscordApiError, r as fetchDiscord } from "./api-1GXlSrYP.js";
6
+ import { i as parseDiscordSendTarget, n as resolveDiscordTarget } from "./target-resolver-BcoK6b0g.js";
7
+ import "./targets-Q-ZoP7K4.js";
8
+ import { a as getDiscordExecApprovalApprovers, c as shouldSuppressLocalDiscordExecApprovalPrompt, o as isDiscordExecApprovalApprover, s as isDiscordExecApprovalClientEnabled } from "./conversation-identity-B0k94-bz.js";
9
+ import { i as resolveDiscordGroupToolPolicy, n as collectDiscordStatusIssues, r as resolveDiscordGroupRequireMention, t as discordPlugin } from "./channel-CQIRiosn.js";
10
10
  import { 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, t as DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS } from "./timeouts-C5TBc_9x.js";
11
11
  import { t as normalizeExplicitDiscordSessionKey } from "./session-key-normalization-wJgsKPNF.js";
12
- import { t as discordSetupPlugin } from "./channel.setup-glZ5Y98a.js";
13
- import { n as handleDiscordSubagentEnded, r as handleDiscordSubagentSpawning, t as handleDiscordSubagentDeliveryTarget } from "./subagent-hooks-20wXhVzZ.js";
14
- import { t as tryHandleDiscordMessageActionGuildAdmin } from "./handle-action.guild-admin-xxGYrp-I.js";
15
- import { n as listDiscordDirectoryGroupsFromConfig, r as listDiscordDirectoryPeersFromConfig } from "./directory-config-BYMFzL29.js";
16
- import { t as fetchPluralKitMessageInfo } from "./pluralkit-DI6RYaVj.js";
17
- import { a as resolveDiscordPrivilegedIntentsFromFlags, i as probeDiscord, n as fetchDiscordApplicationSummary, r as parseApplicationIdFromToken, t as fetchDiscordApplicationId } from "./probe-esE_Oqdm.js";
12
+ import { t as discordSetupPlugin } from "./channel.setup-oMeR19Cc.js";
13
+ import { n as handleDiscordSubagentEnded, r as handleDiscordSubagentSpawning, t as handleDiscordSubagentDeliveryTarget } from "./subagent-hooks-CtqoWK4x.js";
14
+ import { t as tryHandleDiscordMessageActionGuildAdmin } from "./handle-action.guild-admin-CYIFMxh-.js";
15
+ import { n as listDiscordDirectoryGroupsFromConfig, r as listDiscordDirectoryPeersFromConfig } from "./directory-config-CD1svkyN.js";
16
+ import { t as fetchPluralKitMessageInfo } from "./pluralkit-CfTReLl3.js";
17
+ import { a as resolveDiscordPrivilegedIntentsFromFlags, i as probeDiscord, n as fetchDiscordApplicationSummary, r as parseApplicationIdFromToken, t as fetchDiscordApplicationId } from "./probe-DcgZIpyF.js";
18
18
  import { t as collectDiscordSecurityAuditFindings } from "./security-audit-Bh_65L5C.js";
19
19
  import { resolveOpenProviderRuntimeGroupPolicy as resolveDiscordRuntimeGroupPolicy } from "openclaw/plugin-sdk/runtime-group-policy";
20
20
  //#region extensions/discord/api.ts
21
- const handleDiscordMessageAction = async (...args) => (await import("./channel-actions.runtime-DvpTfaJ4.js")).handleDiscordMessageAction(...args);
21
+ const handleDiscordMessageAction = async (...args) => (await import("./channel-actions.runtime-D7L47LY3.js")).handleDiscordMessageAction(...args);
22
22
  //#endregion
23
23
  export { DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS, DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, DISCORD_COMPONENT_ATTACHMENT_PREFIX, DISCORD_COMPONENT_CUSTOM_ID_KEY, DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, DISCORD_MODAL_CUSTOM_ID_KEY, DiscordApiError, DiscordFormModal, buildDiscordComponentCustomId, buildDiscordComponentMessage, buildDiscordComponentMessageFlags, buildDiscordInteractiveComponents, buildDiscordModalCustomId, collectDiscordSecurityAuditFindings, collectDiscordStatusIssues, createDiscordActionGate, createDiscordFormModal, discordPlugin, discordSetupPlugin, fetchDiscord, fetchDiscordApplicationId, fetchDiscordApplicationSummary, fetchPluralKitMessageInfo, formatDiscordComponentEventText, getDiscordExecApprovalApprovers, handleDiscordMessageAction, handleDiscordSubagentDeliveryTarget, handleDiscordSubagentEnded, handleDiscordSubagentSpawning, inspectDiscordAccount, isDiscordExecApprovalApprover, isDiscordExecApprovalClientEnabled, listDiscordAccountIds, listDiscordDirectoryGroupsFromConfig, listDiscordDirectoryPeersFromConfig, listEnabledDiscordAccounts, looksLikeDiscordTargetId, mergeAbortSignals, mergeDiscordAccountConfig, normalizeDiscordMessagingTarget, normalizeDiscordOutboundTarget, normalizeExplicitDiscordSessionKey, parseApplicationIdFromToken, parseDiscordComponentCustomId, parseDiscordComponentCustomIdForInteraction as parseDiscordComponentCustomIdForCarbon, parseDiscordComponentCustomIdForInteraction, parseDiscordModalCustomId, parseDiscordModalCustomIdForInteraction as parseDiscordModalCustomIdForCarbon, parseDiscordModalCustomIdForInteraction, parseDiscordSendTarget, parseDiscordTarget, probeDiscord, readDiscordComponentSpec, requestDiscord, resolveDefaultDiscordAccountId, resolveDiscordAccount, resolveDiscordAccountConfig, resolveDiscordChannelId, resolveDiscordComponentAttachmentName, resolveDiscordGroupRequireMention, resolveDiscordGroupToolPolicy, resolveDiscordMaxLinesPerMessage, resolveDiscordPrivilegedIntentsFromFlags, resolveDiscordRuntimeGroupPolicy, resolveDiscordTarget, shouldSuppressLocalDiscordExecApprovalPrompt, tryHandleDiscordMessageActionGuildAdmin };
@@ -1,7 +1,7 @@
1
- import { B as Container, J as Separator, K as Row, R as Button, Wt as __exportAll, X as TextDisplay, ft as editChannelMessage, j as serializePayload, nt as createUserDmChannel, st as createChannelMessage, ut as deleteChannelMessage } from "./send.receipt-CGecJDin.js";
1
+ import { B as Container, J as Separator, K as Row, R as Button, Wt as __exportAll, X as TextDisplay, ft as editChannelMessage, j as serializePayload, nt as createUserDmChannel, st as createChannelMessage, ut as deleteChannelMessage } from "./send.receipt-Cli6_9Sn.js";
2
2
  import { t as inspectDiscordAccount } from "./account-inspect-DDZtT5C8.js";
3
- import { I as createDiscordClient, _ as createDiscordMessageNonce, x as stripUndefinedFields } from "./send.shared-vcbfThdy.js";
4
- import { i as shouldHandleDiscordApprovalRequest, s as isDiscordExecApprovalClientEnabled } from "./conversation-identity-36FFBwm5.js";
3
+ import { I as createDiscordClient, _ as createDiscordMessageNonce, x as stripUndefinedFields } from "./send.shared-BCG7MWnP.js";
4
+ import { i as shouldHandleDiscordApprovalRequest, s as isDiscordExecApprovalClientEnabled } from "./conversation-identity-B0k94-bz.js";
5
5
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
6
6
  import { ButtonStyle } from "discord-api-types/v10";
7
7
  import { logDebug, logError } from "openclaw/plugin-sdk/logging-core";
@@ -1,7 +1,7 @@
1
- import { Wt as __exportAll } from "./send.receipt-CGecJDin.js";
1
+ import { Wt as __exportAll } from "./send.receipt-Cli6_9Sn.js";
2
2
  import { t as inspectDiscordAccount } from "./account-inspect-DDZtT5C8.js";
3
- import { k as fetchChannelPermissionsDiscord } from "./send.shared-vcbfThdy.js";
4
- import "./send-JHxfT4Pk.js";
3
+ import { k as fetchChannelPermissionsDiscord } from "./send.shared-BCG7MWnP.js";
4
+ import "./send-Bb295iHT.js";
5
5
  import { n as collectDiscordAuditChannelIdsForAccount, t as auditDiscordChannelPermissionsWithFetcher } from "./audit-core-xwjIczO0.js";
6
6
  //#region extensions/discord/src/audit.ts
7
7
  var audit_exports = /* @__PURE__ */ __exportAll({
@@ -1,14 +1,14 @@
1
- import { Ht as parseDiscordTarget, a as normalizeDiscordMessagingTarget, i as looksLikeDiscordTargetId } from "./send.receipt-CGecJDin.js";
1
+ import { Ht as parseDiscordTarget, a as normalizeDiscordMessagingTarget, i as looksLikeDiscordTargetId } from "./send.receipt-Cli6_9Sn.js";
2
2
  import { c as resolveDiscordAccountAllowFrom, r as listDiscordAccountIds, s as resolveDiscordAccount } from "./accounts-P19jm1lf.js";
3
3
  import { a as projectCredentialSnapshotFields, n as PAIRING_APPROVED_MESSAGE, o as resolveConfiguredFromCredentialStatuses, r as buildTokenChannelStatusSummary, t as DEFAULT_ACCOUNT_ID } from "./channel-api-CAJ0wMoV.js";
4
- import { x as resolveDiscordOutboundSessionRoute } from "./components-j6lTZBsT.js";
4
+ import { x as resolveDiscordOutboundSessionRoute } from "./components-_s5UPJqU.js";
5
5
  import { t as getDiscordRuntime } from "./runtime-DgnVQ7zW.js";
6
- import { c as shouldSuppressLocalDiscordExecApprovalPrompt, n as resolveDiscordCurrentConversationIdentity, r as getDiscordApprovalCapability } from "./conversation-identity-36FFBwm5.js";
6
+ import { c as shouldSuppressLocalDiscordExecApprovalPrompt, n as resolveDiscordCurrentConversationIdentity, r as getDiscordApprovalCapability } from "./conversation-identity-B0k94-bz.js";
7
7
  import { r as resolveRequiredDiscordChannelPermissions } from "./audit-core-xwjIczO0.js";
8
- import { t as discordMessageActions$1 } from "./channel-actions-CwmIqnYN.js";
8
+ import { t as discordMessageActions$1 } from "./channel-actions-JziPEcBU.js";
9
9
  import { n as setThreadBindingMaxAgeBySessionKey, t as setThreadBindingIdleTimeoutBySessionKey } from "./thread-bindings.session-updates-Chs3HgGa.js";
10
10
  import { d as withAbortTimeout } from "./timeouts-C5TBc_9x.js";
11
- import { n as discordOutbound } from "./outbound-adapter-Dxs6iKEq.js";
11
+ import { n as discordOutbound } from "./outbound-adapter-CKC_kmUN.js";
12
12
  import { a as discordSecurityAdapter, i as discordSetupAdapter, n as discordConfigAdapter, t as createDiscordPluginBase } from "./shared-D11J9bXI.js";
13
13
  import { t as normalizeExplicitDiscordSessionKey } from "./session-key-normalization-wJgsKPNF.js";
14
14
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString, normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -126,29 +126,29 @@ let discordProbeRuntimePromise;
126
126
  let discordAuditModulePromise;
127
127
  let discordSendModulePromise;
128
128
  let discordDirectoryLiveModulePromise;
129
- const loadDiscordDirectoryConfigModule = createLazyRuntimeModule(() => import("./directory-config-BYMFzL29.js").then((n) => n.t));
130
- const loadDiscordResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels-B3gQf8QL.js").then((n) => n.n));
131
- const loadDiscordResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-BO10y5fJ.js").then((n) => n.n));
132
- const loadDiscordThreadBindingsManagerModule = createLazyRuntimeModule(() => import("./thread-bindings.manager-BqWs1UE2.js").then((n) => n.a));
133
- const loadDiscordTargetResolverModule = createLazyRuntimeModule(() => import("./target-resolver-CDi1gI90.js").then((n) => n.r));
129
+ const loadDiscordDirectoryConfigModule = createLazyRuntimeModule(() => import("./directory-config-CD1svkyN.js").then((n) => n.t));
130
+ const loadDiscordResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels--oE-RnO6.js").then((n) => n.n));
131
+ const loadDiscordResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-QXo8CXBU.js").then((n) => n.n));
132
+ const loadDiscordThreadBindingsManagerModule = createLazyRuntimeModule(() => import("./thread-bindings.manager-Cd2HAVw_.js").then((n) => n.a));
133
+ const loadDiscordTargetResolverModule = createLazyRuntimeModule(() => import("./target-resolver-BcoK6b0g.js").then((n) => n.r));
134
134
  async function loadDiscordProviderRuntime() {
135
- discordProviderRuntimePromise ??= import("./provider.runtime-CaTJrpnl.js");
135
+ discordProviderRuntimePromise ??= import("./provider.runtime-BsmTLYS_.js");
136
136
  return await discordProviderRuntimePromise;
137
137
  }
138
138
  async function loadDiscordProbeRuntime() {
139
- discordProbeRuntimePromise ??= import("./probe.runtime-C3Atgpvr.js");
139
+ discordProbeRuntimePromise ??= import("./probe.runtime-CVwM9L5E.js");
140
140
  return await discordProbeRuntimePromise;
141
141
  }
142
142
  async function loadDiscordAuditModule() {
143
- discordAuditModulePromise ??= import("./audit-BwJ_2OjL.js").then((n) => n.n);
143
+ discordAuditModulePromise ??= import("./audit-DEVi9nIs.js").then((n) => n.n);
144
144
  return await discordAuditModulePromise;
145
145
  }
146
146
  async function loadDiscordSendModule() {
147
- discordSendModulePromise ??= import("./send-JHxfT4Pk.js").then((n) => n.t);
147
+ discordSendModulePromise ??= import("./send-Bb295iHT.js").then((n) => n.t);
148
148
  return await discordSendModulePromise;
149
149
  }
150
150
  async function loadDiscordDirectoryLiveModule() {
151
- discordDirectoryLiveModulePromise ??= import("./directory-live-9JtJCiu8.js").then((n) => n.t);
151
+ discordDirectoryLiveModulePromise ??= import("./directory-live-DBTsSRxl.js").then((n) => n.t);
152
152
  return await discordDirectoryLiveModulePromise;
153
153
  }
154
154
  //#endregion
@@ -1,6 +1,6 @@
1
1
  import { t as inspectDiscordAccount } from "./account-inspect-DDZtT5C8.js";
2
2
  import { r as listDiscordAccountIds, t as createDiscordActionGate } from "./accounts-P19jm1lf.js";
3
- import { d as readDiscordComponentSpec } from "./components-j6lTZBsT.js";
3
+ import { d as readDiscordComponentSpec } from "./components-_s5UPJqU.js";
4
4
  import { i as withDiscordInboundEventDeliveryMetadata } from "./inbound-event-delivery-CEPlt2uz.js";
5
5
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
6
6
  import { createUnionActionGate } from "openclaw/plugin-sdk/channel-actions";
@@ -42,7 +42,7 @@ function resolveDiscordActionExecutionMode({ action }) {
42
42
  }
43
43
  let discordChannelActionsRuntimePromise;
44
44
  async function loadDiscordChannelActionsRuntime() {
45
- discordChannelActionsRuntimePromise ??= import("./channel-actions.runtime-DvpTfaJ4.js");
45
+ discordChannelActionsRuntimePromise ??= import("./channel-actions.runtime-D7L47LY3.js");
46
46
  return await discordChannelActionsRuntimePromise;
47
47
  }
48
48
  function listDiscoverableDiscordAccounts(cfg) {
@@ -1,10 +1,10 @@
1
- import { Ut as resolveDiscordChannelId } from "./send.receipt-CGecJDin.js";
2
- import { i as buildDiscordPresentationComponents, r as buildDiscordInteractiveComponents } from "./components-j6lTZBsT.js";
3
- import { t as handleDiscordAction } from "./runtime-CFlR3L9X.js";
4
- import "./targets-C6yd3y8R.js";
1
+ import { Ut as resolveDiscordChannelId } from "./send.receipt-Cli6_9Sn.js";
2
+ import { i as buildDiscordPresentationComponents, r as buildDiscordInteractiveComponents } from "./components-_s5UPJqU.js";
3
+ import { t as handleDiscordAction } from "./runtime-CF7ramAs.js";
4
+ import "./targets-Q-ZoP7K4.js";
5
5
  import "./action-runtime-api.js";
6
6
  import { r as notifyDiscordInboundEventOutboundSuccess } from "./inbound-event-delivery-CEPlt2uz.js";
7
- import { t as tryHandleDiscordMessageActionGuildAdmin } from "./handle-action.guild-admin-xxGYrp-I.js";
7
+ import { t as tryHandleDiscordMessageActionGuildAdmin } from "./handle-action.guild-admin-CYIFMxh-.js";
8
8
  import { normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/string-coerce-runtime";
9
9
  import { resolveReactionMessageId } from "openclaw/plugin-sdk/channel-actions";
10
10
  import { readBooleanParam } from "openclaw/plugin-sdk/boolean-param";
@@ -1,2 +1,2 @@
1
- import { t as discordPlugin } from "./channel-DU4jnQgl.js";
1
+ import { t as discordPlugin } from "./channel-CQIRiosn.js";
2
2
  export { discordPlugin };
@@ -1,8 +1,8 @@
1
1
  import { n as inspectDiscordConfiguredToken } from "./account-inspect-DDZtT5C8.js";
2
2
  import { a as mergeDiscordAccountConfig, c as resolveDiscordAccountAllowFrom, l as resolveDiscordAccountConfig, m as resolveDiscordToken, o as resolveDefaultDiscordAccountId } from "./accounts-P19jm1lf.js";
3
3
  import { i as discordSetupAdapter, t as createDiscordPluginBase } from "./shared-D11J9bXI.js";
4
- import { t as resolveDiscordChannelAllowlist } from "./resolve-channels-B3gQf8QL.js";
5
- import { t as resolveDiscordUserAllowlist } from "./resolve-users-BO10y5fJ.js";
4
+ import { t as resolveDiscordChannelAllowlist } from "./resolve-channels--oE-RnO6.js";
5
+ import { t as resolveDiscordUserAllowlist } from "./resolve-users-QXo8CXBU.js";
6
6
  import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id";
7
7
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
8
8
  import { createAccountScopedAllowFromSection, createAccountScopedGroupAccessSection, createLegacyCompatChannelDmPolicy, createSetupTranslator, createStandardChannelSetupStatus, parseMentionOrPrefixedId, patchChannelConfigForAccount, promptLegacyChannelAllowFromForAccount, resolveEntriesWithOptionalToken, setSetupChannelEnabled } from "openclaw/plugin-sdk/setup-runtime";
@@ -1,4 +1,4 @@
1
- import { B as Container, F as Modal, G as RoleSelectMenu, H as LinkButton, Ht as parseDiscordTarget, I as RadioGroup, J as Separator, K as Row, L as TextInput, N as CheckboxGroup, P as Label, Q as UserSelectMenu, R as Button, U as MediaGallery, V as File, W as MentionableSelectMenu, Wt as __exportAll, X as TextDisplay, Y as StringSelectMenu, Z as Thumbnail, et as parseCustomId, q as Section, z as ChannelSelectMenu } from "./send.receipt-CGecJDin.js";
1
+ import { B as Container, F as Modal, G as RoleSelectMenu, H as LinkButton, Ht as parseDiscordTarget, I as RadioGroup, J as Separator, K as Row, L as TextInput, N as CheckboxGroup, P as Label, Q as UserSelectMenu, R as Button, U as MediaGallery, V as File, W as MentionableSelectMenu, Wt as __exportAll, X as TextDisplay, Y as StringSelectMenu, Z as Thumbnail, et as parseCustomId, q as Section, z as ChannelSelectMenu } from "./send.receipt-Cli6_9Sn.js";
2
2
  import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
3
3
  import { buildOutboundBaseSessionKey } from "openclaw/plugin-sdk/routing";
4
4
  import { buildThreadAwareOutboundSessionRoute } from "openclaw/plugin-sdk/channel-core";
@@ -1,4 +1,4 @@
1
- import { Ht as parseDiscordTarget } from "./send.receipt-CGecJDin.js";
1
+ import { Ht as parseDiscordTarget } from "./send.receipt-Cli6_9Sn.js";
2
2
  import { r as listDiscordAccountIds, s as resolveDiscordAccount } from "./accounts-P19jm1lf.js";
3
3
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  import { createLazyChannelApprovalNativeRuntimeAdapter } from "openclaw/plugin-sdk/approval-handler-adapter-runtime";
@@ -231,7 +231,7 @@ function createDiscordApprovalCapability(configOverride) {
231
231
  request,
232
232
  configOverride
233
233
  }),
234
- load: async () => (await import("./approval-handler.runtime-BWPQrzpP.js").then((n) => n.t)).discordApprovalNativeRuntime
234
+ load: async () => (await import("./approval-handler.runtime-Dv4p7REU.js").then((n) => n.t)).discordApprovalNativeRuntime
235
235
  })
236
236
  });
237
237
  }
@@ -1,4 +1,4 @@
1
- import { Wt as __exportAll } from "./send.receipt-CGecJDin.js";
1
+ import { Wt as __exportAll } from "./send.receipt-Cli6_9Sn.js";
2
2
  import { a as mergeDiscordAccountConfig, c as resolveDiscordAccountAllowFrom, o as resolveDefaultDiscordAccountId } from "./accounts-P19jm1lf.js";
3
3
  import { normalizeAccountId } from "openclaw/plugin-sdk/account-id";
4
4
  import { createResolvedDirectoryEntriesLister } from "openclaw/plugin-sdk/directory-config-runtime";
@@ -1,4 +1,4 @@
1
- import { n as listDiscordDirectoryGroupsFromConfig, r as listDiscordDirectoryPeersFromConfig } from "./directory-config-BYMFzL29.js";
1
+ import { n as listDiscordDirectoryGroupsFromConfig, r as listDiscordDirectoryPeersFromConfig } from "./directory-config-CD1svkyN.js";
2
2
  //#region extensions/discord/directory-contract-api.ts
3
3
  const discordDirectoryContractPlugin = {
4
4
  id: "discord",
@@ -1,6 +1,6 @@
1
- import { Wt as __exportAll } from "./send.receipt-CGecJDin.js";
1
+ import { Wt as __exportAll } from "./send.receipt-Cli6_9Sn.js";
2
2
  import { p as normalizeDiscordToken, s as resolveDiscordAccount } from "./accounts-P19jm1lf.js";
3
- import { n as fetchDiscord } from "./api-CjnGBhM3.js";
3
+ import { r as fetchDiscord, t as DISCORD_DIRECTORY_LOOKUP_TIMEOUT_MS } from "./api-1GXlSrYP.js";
4
4
  import { a as normalizeDiscordSlug } from "./allow-list-C-MqM-B_.js";
5
5
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString, normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/string-coerce-runtime";
6
6
  import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/routing";
@@ -88,7 +88,7 @@ function resolveDiscordDirectoryAccess(params) {
88
88
  };
89
89
  }
90
90
  async function listDiscordGuilds(token) {
91
- return (await fetchDiscord("/users/@me/guilds", token)).filter((guild) => guild.id && guild.name);
91
+ return (await fetchDiscord("/users/@me/guilds", token, fetch, { timeoutMs: DISCORD_DIRECTORY_LOOKUP_TIMEOUT_MS })).filter((guild) => guild.id && guild.name);
92
92
  }
93
93
  async function listDiscordDirectoryGroupsLive(params) {
94
94
  const access = resolveDiscordDirectoryAccess(params);
@@ -97,7 +97,7 @@ async function listDiscordDirectoryGroupsLive(params) {
97
97
  const guilds = await listDiscordGuilds(token);
98
98
  const rows = [];
99
99
  for (const guild of guilds) {
100
- const channels = await fetchDiscord(`/guilds/${guild.id}/channels`, token);
100
+ const channels = await fetchDiscord(`/guilds/${guild.id}/channels`, token, fetch, { timeoutMs: DISCORD_DIRECTORY_LOOKUP_TIMEOUT_MS });
101
101
  for (const channel of channels) {
102
102
  const name = channel.name?.trim();
103
103
  if (!name) continue;
@@ -127,7 +127,7 @@ async function listDiscordDirectoryPeersLive(params) {
127
127
  query,
128
128
  limit: String(Math.min(limit, 100))
129
129
  });
130
- const members = await fetchDiscord(`/guilds/${guild.id}/members/search?${paramsObj.toString()}`, token);
130
+ const members = await fetchDiscord(`/guilds/${guild.id}/members/search?${paramsObj.toString()}`, token, fetch, { timeoutMs: DISCORD_DIRECTORY_LOOKUP_TIMEOUT_MS });
131
131
  for (const member of members) {
132
132
  const user = member.user;
133
133
  if (!user?.id) continue;
@@ -1,6 +1,6 @@
1
- import { a as readDiscordChannelCreateParams, n as isDiscordModerationAction, o as readDiscordChannelEditParams, r as readDiscordModerationCommand, s as readDiscordChannelMoveParams, t as handleDiscordAction } from "./runtime-CFlR3L9X.js";
1
+ import { a as readDiscordChannelCreateParams, n as isDiscordModerationAction, o as readDiscordChannelEditParams, r as readDiscordModerationCommand, s as readDiscordChannelMoveParams, t as handleDiscordAction } from "./runtime-CF7ramAs.js";
2
2
  import "./action-runtime-api.js";
3
- import { n as isTrustedRequesterGuildAdminAction } from "./channel-actions-CwmIqnYN.js";
3
+ import { n as isTrustedRequesterGuildAdminAction } from "./channel-actions-JziPEcBU.js";
4
4
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  import { readNonNegativeIntegerParam, readPositiveIntegerParam, readStringArrayParam, readStringParam } from "openclaw/plugin-sdk/agent-runtime";
6
6
  //#region extensions/discord/src/actions/handle-action.guild-admin.ts
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { registerDiscordSubagentHooks } from "./subagent-hooks-api.js";
2
- import { t as discordVoiceTranscriptsSourceProvider } from "./transcripts-source-D-lBI5ZD.js";
2
+ import { t as discordVoiceTranscriptsSourceProvider } from "./transcripts-source-CPf5gURy.js";
3
3
  import "./transcripts-source-api.js";
4
4
  import { defineBundledChannelEntry } from "openclaw/plugin-sdk/channel-entry-contract";
5
5
  //#region extensions/discord/index.ts
@@ -1,9 +1,9 @@
1
- import { Ht as parseDiscordTarget, _ as VoiceStateUpdateListener, c as discord_exports, h as ResumedListener, jt as getGuildVoiceState, m as ReadyListener } from "./send.receipt-CGecJDin.js";
1
+ import { Ht as parseDiscordTarget, _ as VoiceStateUpdateListener, c as discord_exports, h as ResumedListener, jt as getGuildVoiceState, m as ReadyListener } from "./send.receipt-Cli6_9Sn.js";
2
2
  import { c as resolveDiscordAccountAllowFrom } from "./accounts-P19jm1lf.js";
3
3
  import { a as normalizeDiscordSlug, b as formatDiscordUserTag, m as resolveDiscordOwnerAccess } from "./allow-list-C-MqM-B_.js";
4
- import { o as formatMention } from "./send.outbound-B-cA1Esv.js";
4
+ import { o as formatMention } from "./send.outbound-B_sk0hNe.js";
5
5
  import { t as getDiscordRuntime } from "./runtime-DgnVQ7zW.js";
6
- import { d as resolveDiscordVoiceEnabled, p as buildDiscordGroupSystemPrompt, s as authorizeDiscordVoiceIngress } from "./provider-B-s93q9s.js";
6
+ import { d as resolveDiscordVoiceEnabled, p as buildDiscordGroupSystemPrompt, s as authorizeDiscordVoiceIngress } from "./provider-CwwSXIIj.js";
7
7
  import { createRequire } from "node:module";
8
8
  import { asBoolean, normalizeOptionalString, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
9
9
  import { resolveAgentRoute } from "openclaw/plugin-sdk/routing";
@@ -20,6 +20,7 @@ import { agentCommandFromIngress, getTtsProvider, resolveAgentDir, resolveTtsCon
20
20
  import { escapeRegExp } from "openclaw/plugin-sdk/text-utility-runtime";
21
21
  import { spawn } from "node:child_process";
22
22
  import { PassThrough, Readable, Transform, pipeline } from "node:stream";
23
+ import { StringDecoder } from "node:string_decoder";
23
24
  import { Application, OpusError, createDecoder, createEncoder } from "libopus-wasm";
24
25
  import { resolveRealtimeBootstrapContextInstructions } from "openclaw/plugin-sdk/realtime-bootstrap-context";
25
26
  import { parseTtsDirectives } from "openclaw/plugin-sdk/speech";
@@ -107,11 +108,14 @@ function createDiscordOpusPlaybackStream(input) {
107
108
  windowsHide: true
108
109
  });
109
110
  const opusStream = createDiscordOpusEncodeStream();
110
- let stderr = "";
111
+ const stderr = Buffer.alloc(FFMPEG_ERROR_OUTPUT_BYTES);
112
+ let stderrBytes = 0;
111
113
  let ffmpegClosed = false;
112
- ffmpeg.stderr.setEncoding("utf8");
114
+ const killFfmpeg = (signal = "SIGTERM") => {
115
+ if (!ffmpegClosed && !ffmpeg.killed) ffmpeg.kill(signal);
116
+ };
113
117
  ffmpeg.stderr.on("data", (chunk) => {
114
- if (stderr.length < FFMPEG_ERROR_OUTPUT_BYTES) stderr = `${stderr}${chunk}`.slice(0, FFMPEG_ERROR_OUTPUT_BYTES);
118
+ if (stderrBytes < FFMPEG_ERROR_OUTPUT_BYTES) stderrBytes += chunk.copy(stderr, stderrBytes, 0, FFMPEG_ERROR_OUTPUT_BYTES - stderrBytes);
115
119
  });
116
120
  ffmpeg.once("error", (err) => {
117
121
  opusStream.destroy(err);
@@ -119,19 +123,23 @@ function createDiscordOpusPlaybackStream(input) {
119
123
  ffmpeg.once("close", (code, signal) => {
120
124
  ffmpegClosed = true;
121
125
  if (code && code !== 0) {
122
- const suffix = stderr.trim() ? `: ${stderr.trim()}` : "";
126
+ const stderrText = new StringDecoder("utf8").write(stderr.subarray(0, stderrBytes)).trim();
127
+ const suffix = stderrText ? `: ${stderrText}` : "";
123
128
  opusStream.destroy(/* @__PURE__ */ new Error(`ffmpeg exited with code ${code}${suffix}`));
124
129
  return;
125
130
  }
126
131
  if (signal) opusStream.destroy(/* @__PURE__ */ new Error(`ffmpeg exited with signal ${signal}`));
127
132
  });
128
- ffmpeg.stdout.on("error", (err) => opusStream.destroy(err));
133
+ for (const readable of [ffmpeg.stdout, ffmpeg.stderr]) readable.on("error", (err) => {
134
+ killFfmpeg("SIGKILL");
135
+ opusStream.destroy(err);
136
+ });
129
137
  ffmpeg.stdin.on("error", (err) => {
130
138
  if (err.code !== "EPIPE") opusStream.destroy(err);
131
139
  });
132
140
  ffmpeg.stdout.pipe(opusStream);
133
141
  opusStream.once("close", () => {
134
- if (!ffmpegClosed && !opusStream.readableEnded) ffmpeg.kill();
142
+ if (!opusStream.readableEnded) killFfmpeg();
135
143
  });
136
144
  if (typeof input !== "string") {
137
145
  input.on("error", (err) => {
@@ -1,8 +1,8 @@
1
- import { L as createDiscordRestClient } from "./send.shared-vcbfThdy.js";
1
+ import { L as createDiscordRestClient } from "./send.shared-BCG7MWnP.js";
2
2
  import { o as mergeAbortSignals } from "./timeouts-C5TBc_9x.js";
3
- import { d as resolveDiscordChannelNameSafe, l as resolveDiscordChannelIdSafe, p as resolveDiscordChannelParentSafe, u as resolveDiscordChannelInfoSafe } from "./thread-bindings.discord-api-CYkr-3Gj.js";
4
- import { c as hasDiscordMessageStickers, d as resolveDiscordMessageChannelId, r as resolveDiscordMessageText } from "./message-utils-CJeAoISH.js";
5
- import { t as sendTyping } from "./typing-xr05bL-r.js";
3
+ import { d as resolveDiscordChannelNameSafe, l as resolveDiscordChannelIdSafe, p as resolveDiscordChannelParentSafe, u as resolveDiscordChannelInfoSafe } from "./thread-bindings.discord-api-OPyjvgyz.js";
4
+ import { c as hasDiscordMessageStickers, d as resolveDiscordMessageChannelId, r as resolveDiscordMessageText } from "./message-utils-Dbuw27gd.js";
5
+ import { t as sendTyping } from "./typing-DY0cwLdg.js";
6
6
  import { danger, logVerbose } from "openclaw/plugin-sdk/runtime-env";
7
7
  import { createChannelRunQueue, createTypingCallbacks, resolveChannelMessageSourceReplyDeliveryMode } from "openclaw/plugin-sdk/channel-outbound";
8
8
  import { resolveOpenProviderRuntimeGroupPolicy } from "openclaw/plugin-sdk/runtime-group-policy";
@@ -178,7 +178,7 @@ function resolveDiscordAcceptedTypingPrestart(ctx) {
178
178
  //#region extensions/discord/src/monitor/message-run-queue.ts
179
179
  let messageProcessRuntimePromise;
180
180
  async function loadMessageProcessRuntime() {
181
- messageProcessRuntimePromise ??= import("./message-handler.process-Do4EM591.js");
181
+ messageProcessRuntimePromise ??= import("./message-handler.process-CG0zFS-Z.js");
182
182
  return await messageProcessRuntimePromise;
183
183
  }
184
184
  async function processDiscordQueuedMessage(params) {
@@ -308,7 +308,7 @@ function createDiscordReplyTypingFeedback(params) {
308
308
  //#region extensions/discord/src/monitor/message-handler.ts
309
309
  let messagePreflightRuntimePromise;
310
310
  async function loadMessagePreflightRuntime() {
311
- messagePreflightRuntimePromise ??= import("./message-handler.preflight-CbD0u7U7.js");
311
+ messagePreflightRuntimePromise ??= import("./message-handler.preflight-Axv9J9EO.js");
312
312
  return await messagePreflightRuntimePromise;
313
313
  }
314
314
  function isNonEmptyString(value) {
@@ -1,12 +1,12 @@
1
- import { c as discord_exports, k as Message, mt as getChannelMessage } from "./send.receipt-CGecJDin.js";
1
+ import { c as discord_exports, k as Message, mt as getChannelMessage } from "./send.receipt-Cli6_9Sn.js";
2
2
  import { o as resolveDefaultDiscordAccountId } from "./accounts-P19jm1lf.js";
3
3
  import { S as resolveTimestampMs, _ as resolveGroupDmAllow, a as normalizeDiscordSlug, b as formatDiscordUserTag, c as resolveDiscordChannelConfigWithFallback, d as resolveDiscordGuildEntry, f as resolveDiscordMemberAccessState, g as resolveDiscordShouldRequireMention, i as normalizeDiscordDisplaySlug, n as isDiscordGroupAllowedByPolicy, x as resolveDiscordSystemLocation } from "./allow-list-C-MqM-B_.js";
4
- import { t as resolveDiscordConversationIdentity } from "./conversation-identity-36FFBwm5.js";
4
+ import { t as resolveDiscordConversationIdentity } from "./conversation-identity-B0k94-bz.js";
5
5
  import { d as isRecentlyUnboundThreadWebhookMessage } from "./thread-bindings.state-iSWjCYjB.js";
6
- import { d as resolveDiscordChannelNameSafe, u as resolveDiscordChannelInfoSafe } from "./thread-bindings.discord-api-CYkr-3Gj.js";
7
- import "./thread-bindings-DU4T6nDo.js";
8
- import { D as resolveDiscordDmCommandAccess, O as resolveDiscordTextCommandAccess, _ as resolveDiscordConversationRoute, b as handleDiscordDmCommandDecision, g as buildDiscordRoutePeer, v as resolveDiscordEffectiveRoute, y as shouldIgnoreStaleDiscordRouteBinding } from "./provider-B-s93q9s.js";
9
- import { d as resolveDiscordMessageChannelId, l as resolveDiscordMessageStickers, o as resolveMediaList, r as resolveDiscordMessageText, u as resolveDiscordChannelInfo } from "./message-utils-CJeAoISH.js";
6
+ import { d as resolveDiscordChannelNameSafe, u as resolveDiscordChannelInfoSafe } from "./thread-bindings.discord-api-OPyjvgyz.js";
7
+ import "./thread-bindings-DJ_HT6GJ.js";
8
+ import { D as resolveDiscordDmCommandAccess, O as resolveDiscordTextCommandAccess, _ as resolveDiscordConversationRoute, b as handleDiscordDmCommandDecision, g as buildDiscordRoutePeer, v as resolveDiscordEffectiveRoute, y as shouldIgnoreStaleDiscordRouteBinding } from "./provider-CwwSXIIj.js";
9
+ import { d as resolveDiscordMessageChannelId, l as resolveDiscordMessageStickers, o as resolveMediaList, r as resolveDiscordMessageText, u as resolveDiscordChannelInfo } from "./message-utils-Dbuw27gd.js";
10
10
  import { n as resolveDiscordWebhookId, t as resolveDiscordSenderIdentity } from "./sender-identity-CEsfDF0L.js";
11
11
  import { normalizeOptionalString, readStringValue } from "openclaw/plugin-sdk/string-coerce-runtime";
12
12
  import { MessageReferenceType, MessageType } from "discord-api-types/v10";
@@ -29,7 +29,7 @@ async function loadConversationRuntime$1() {
29
29
  return await conversationRuntimePromise$1;
30
30
  }
31
31
  async function loadDiscordSendRuntime() {
32
- discordSendRuntimePromise ??= import("./send-JHxfT4Pk.js").then((n) => n.t);
32
+ discordSendRuntimePromise ??= import("./send-Bb295iHT.js").then((n) => n.t);
33
33
  return await discordSendRuntimePromise;
34
34
  }
35
35
  function resolveDiscordDmPairingSenderId(sender) {
@@ -435,7 +435,7 @@ let preflightAudioRuntimePromise;
435
435
  let systemEventsRuntimePromise;
436
436
  let discordThreadingRuntimePromise;
437
437
  async function loadPluralKitRuntime() {
438
- pluralkitRuntimePromise ??= import("./pluralkit-DI6RYaVj.js").then((n) => n.n);
438
+ pluralkitRuntimePromise ??= import("./pluralkit-CfTReLl3.js").then((n) => n.n);
439
439
  return await pluralkitRuntimePromise;
440
440
  }
441
441
  async function loadPreflightAudioRuntime() {
@@ -443,11 +443,11 @@ async function loadPreflightAudioRuntime() {
443
443
  return await preflightAudioRuntimePromise;
444
444
  }
445
445
  async function loadSystemEventsRuntime() {
446
- systemEventsRuntimePromise ??= import("./system-events-DR27TE7p.js");
446
+ systemEventsRuntimePromise ??= import("./system-events-BxGNk_wE.js");
447
447
  return await systemEventsRuntimePromise;
448
448
  }
449
449
  async function loadDiscordThreadingRuntime() {
450
- discordThreadingRuntimePromise ??= import("./provider-B-s93q9s.js").then((n) => n.S);
450
+ discordThreadingRuntimePromise ??= import("./provider-CwwSXIIj.js").then((n) => n.S);
451
451
  return await discordThreadingRuntimePromise;
452
452
  }
453
453
  function isPreflightAborted(abortSignal) {
@@ -461,7 +461,8 @@ async function resolveDiscordPreflightPluralKitInfo(params) {
461
461
  const { fetchPluralKitMessageInfo } = await loadPluralKitRuntime();
462
462
  const info = await fetchPluralKitMessageInfo({
463
463
  messageId: params.message.id,
464
- config: params.config
464
+ config: params.config,
465
+ signal: params.abortSignal
465
466
  });
466
467
  return isPreflightAborted(params.abortSignal) ? null : info;
467
468
  } catch (err) {
@@ -1,18 +1,18 @@
1
- import { Ut as resolveDiscordChannelId, c as discord_exports, ft as editChannelMessage, s as chunkDiscordTextWithMode, st as createChannelMessage, ut as deleteChannelMessage } from "./send.receipt-CGecJDin.js";
1
+ import { Ut as resolveDiscordChannelId, c as discord_exports, ft as editChannelMessage, s as chunkDiscordTextWithMode, st as createChannelMessage, ut as deleteChannelMessage } from "./send.receipt-Cli6_9Sn.js";
2
2
  import { f as resolveDiscordMaxLinesPerMessage, s as resolveDiscordAccount } from "./accounts-P19jm1lf.js";
3
- import { L as createDiscordRestClient, R as createDiscordRuntimeAccountContext, d as resolveDiscordTargetChannelId, v as resolveDiscordMessageFlags } from "./send.shared-vcbfThdy.js";
3
+ import { L as createDiscordRestClient, R as createDiscordRuntimeAccountContext, d as resolveDiscordTargetChannelId, v as resolveDiscordMessageFlags } from "./send.shared-BCG7MWnP.js";
4
4
  import { S as resolveTimestampMs, a as normalizeDiscordSlug, r as normalizeDiscordAllowList } from "./allow-list-C-MqM-B_.js";
5
- import { a as removeReactionDiscord, f as editMessageDiscord, r as reactMessageDiscord } from "./send-JHxfT4Pk.js";
6
- import { a as discordTextHasTargetedMention, i as discordTextHasBroadcastMention, s as rewriteDiscordKnownMentions } from "./send.outbound-B-cA1Esv.js";
7
- import "./targets-C6yd3y8R.js";
8
- import { t as resolveDiscordConversationIdentity } from "./conversation-identity-36FFBwm5.js";
5
+ import { a as removeReactionDiscord, f as editMessageDiscord, r as reactMessageDiscord } from "./send-Bb295iHT.js";
6
+ import { a as discordTextHasTargetedMention, i as discordTextHasBroadcastMention, s as rewriteDiscordKnownMentions } from "./send.outbound-B_sk0hNe.js";
7
+ import "./targets-Q-ZoP7K4.js";
8
+ import { t as resolveDiscordConversationIdentity } from "./conversation-identity-B0k94-bz.js";
9
9
  import { t as beginDiscordInboundEventDeliveryCorrelation } from "./inbound-event-delivery-CEPlt2uz.js";
10
10
  import { n as DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, t as DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS } from "./timeouts-C5TBc_9x.js";
11
- import { t as DISCORD_TEXT_CHUNK_LIMIT } from "./outbound-adapter-Dxs6iKEq.js";
11
+ import { t as DISCORD_TEXT_CHUNK_LIMIT } from "./outbound-adapter-CKC_kmUN.js";
12
12
  import { t as resolveDiscordPreviewStreamMode } from "./preview-streaming-DXT8oJdo.js";
13
- import { C as resolveDiscordAutoThreadReplyPlan, T as resolveDiscordThreadStarter, a as buildGuildLabel, h as createDiscordSupplementalContextAccessChecker, i as buildDirectLabel, m as buildDiscordInboundAccessContext, n as deliverDiscordReply, o as resolveReplyContext, r as sanitizeDiscordFrontChannelReplyPayloads } from "./provider-B-s93q9s.js";
14
- import { a as resolveForwardedMediaList, o as resolveMediaList, r as resolveDiscordMessageText, s as resolveReferencedReplyMediaList } from "./message-utils-CJeAoISH.js";
15
- import { n as createDiscordReplyTypingFeedback } from "./message-handler-cizxbaDc.js";
13
+ import { C as resolveDiscordAutoThreadReplyPlan, T as resolveDiscordThreadStarter, a as buildGuildLabel, h as createDiscordSupplementalContextAccessChecker, i as buildDirectLabel, m as buildDiscordInboundAccessContext, n as deliverDiscordReply, o as resolveReplyContext, r as sanitizeDiscordFrontChannelReplyPayloads } from "./provider-CwwSXIIj.js";
14
+ import { a as resolveForwardedMediaList, o as resolveMediaList, r as resolveDiscordMessageText, s as resolveReferencedReplyMediaList } from "./message-utils-Dbuw27gd.js";
15
+ import { n as createDiscordReplyTypingFeedback } from "./message-handler-DZd9Bpq8.js";
16
16
  import { buildAgentSessionKey, resolveThreadSessionKeys } from "openclaw/plugin-sdk/routing";
17
17
  import { MessageFlags } from "discord-api-types/v10";
18
18
  import { evaluateSupplementalContextVisibility } from "openclaw/plugin-sdk/security-runtime";
@@ -1,5 +1,5 @@
1
1
  import { o as mergeAbortSignals } from "./timeouts-C5TBc_9x.js";
2
- import { u as resolveDiscordChannelInfoSafe } from "./thread-bindings.discord-api-CYkr-3Gj.js";
2
+ import { u as resolveDiscordChannelInfoSafe } from "./thread-bindings.discord-api-OPyjvgyz.js";
3
3
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString, normalizeOptionalStringifiedId, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  import { ComponentType, StickerFormatType } from "discord-api-types/v10";
5
5
  import { asDateTimestampMs, resolveExpiresAtMsFromDurationMs } from "openclaw/plugin-sdk/number-runtime";