@openclaw/discord 2026.5.3 → 2026.5.4-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.
package/dist/api.js CHANGED
@@ -7,9 +7,9 @@ import { _ as parseDiscordModalCustomIdForInteraction, a as buildDiscordComponen
7
7
  import { t as buildDiscordInteractiveComponents } from "./shared-interactive-KgJjCqnB.js";
8
8
  import "./targets-B7OfGFt8.js";
9
9
  import { a as shouldSuppressLocalDiscordExecApprovalPrompt, i as isDiscordExecApprovalClientEnabled, n as getDiscordExecApprovalApprovers, r as isDiscordExecApprovalApprover } from "./approval-shared-GfJeMdLu.js";
10
- import { i as resolveDiscordGroupToolPolicy, n as collectDiscordStatusIssues, r as resolveDiscordGroupRequireMention, t as discordPlugin } from "./channel-Nf20xyAS.js";
10
+ import { i as resolveDiscordGroupToolPolicy, n as collectDiscordStatusIssues, r as resolveDiscordGroupRequireMention, t as discordPlugin } from "./channel-DpLugi97.js";
11
11
  import { t as normalizeExplicitDiscordSessionKey } from "./session-key-normalization-Daag9II6.js";
12
- import { t as discordSetupPlugin } from "./channel.setup-DHzAG9qO.js";
12
+ import { t as discordSetupPlugin } from "./channel.setup-C-HEMkxU.js";
13
13
  import { n as handleDiscordSubagentEnded, r as handleDiscordSubagentSpawning, t as handleDiscordSubagentDeliveryTarget } from "./subagent-hooks-4TZ3SJrh.js";
14
14
  import { t as tryHandleDiscordMessageActionGuildAdmin } from "./handle-action.guild-admin-B2Zzo2HU.js";
15
15
  import { n as listDiscordDirectoryGroupsFromConfig, r as listDiscordDirectoryPeersFromConfig } from "./directory-config-DElx_Gr4.js";
@@ -9,7 +9,7 @@ import { t as discordMessageActions$1 } from "./channel-actions-ChsoeB3T.js";
9
9
  import { n as resolveDiscordCurrentConversationIdentity } from "./conversation-identity-BN9wSmxJ.js";
10
10
  import { n as setThreadBindingMaxAgeBySessionKey, t as setThreadBindingIdleTimeoutBySessionKey } from "./thread-bindings.session-updates-TTP020qQ.js";
11
11
  import { n as discordOutbound } from "./outbound-adapter-B-mzejZP.js";
12
- import { i as discordSecurityAdapter, n as discordConfigAdapter, r as discordSetupAdapter, t as createDiscordPluginBase } from "./shared-C1EMtcxR.js";
12
+ import { i as discordSecurityAdapter, n as discordConfigAdapter, r as discordSetupAdapter, t as createDiscordPluginBase } from "./shared-Ugd3DMEH.js";
13
13
  import { t as normalizeExplicitDiscordSessionKey } from "./session-key-normalization-Daag9II6.js";
14
14
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString, normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/text-runtime";
15
15
  import { createChatChannelPlugin } from "openclaw/plugin-sdk/channel-core";
@@ -131,7 +131,7 @@ const loadDiscordResolveChannelsModule = createLazyRuntimeModule(() => import(".
131
131
  const loadDiscordResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-DPJkRKx1.js").then((n) => n.n));
132
132
  const loadDiscordThreadBindingsManagerModule = createLazyRuntimeModule(() => import("./thread-bindings.manager-CWG9Gd04.js").then((n) => n.a));
133
133
  async function loadDiscordProviderRuntime() {
134
- discordProviderRuntimePromise ??= import("./provider.runtime-CbW_PYV-.js");
134
+ discordProviderRuntimePromise ??= import("./provider.runtime-DIcvr97w.js");
135
135
  return await discordProviderRuntimePromise;
136
136
  }
137
137
  async function loadDiscordProbeRuntime() {
@@ -313,6 +313,33 @@ function collectDiscordStatusIssues(accounts) {
313
313
  //#region extensions/discord/src/channel.ts
314
314
  const REQUIRED_DISCORD_PERMISSIONS = ["ViewChannel", "SendMessages"];
315
315
  const DISCORD_ACCOUNT_STARTUP_STAGGER_MS = 1e4;
316
+ function startDiscordStartupProbe(params) {
317
+ (async () => {
318
+ try {
319
+ const probe = await (await loadDiscordProbeRuntime()).probeDiscord(params.token, 2500, { includeApplication: true });
320
+ if (params.abortSignal.aborted) return;
321
+ params.setStatus({
322
+ accountId: params.accountId,
323
+ bot: probe.bot,
324
+ application: probe.application
325
+ });
326
+ if (probe.ok) {
327
+ const username = probe.bot?.username?.trim();
328
+ if (username) params.log?.info?.(`[${params.accountId}] Discord bot probe resolved @${username}`);
329
+ } else if (getDiscordRuntime().logging.shouldLogVerbose()) params.log?.debug?.(`[${params.accountId}] bot probe degraded: ${probe.error ?? `status ${probe.status ?? "unknown"}`}`);
330
+ const messageContent = probe.application?.intents?.messageContent;
331
+ if (messageContent === "disabled") params.log?.warn?.(`[${params.accountId}] Discord Message Content Intent is disabled; bot may not respond to channel messages. Enable it in Discord Dev Portal (Bot → Privileged Gateway Intents) or require mentions.`);
332
+ else if (messageContent === "limited") params.log?.info?.(`[${params.accountId}] Discord Message Content Intent is limited; bots under 100 servers can use it without verification.`);
333
+ } catch (err) {
334
+ if (!params.abortSignal.aborted) params.setStatus({
335
+ accountId: params.accountId,
336
+ bot: void 0,
337
+ application: void 0
338
+ });
339
+ if (getDiscordRuntime().logging.shouldLogVerbose()) params.log?.debug?.(`[${params.accountId}] bot probe failed: ${String(err)}`);
340
+ }
341
+ })();
342
+ }
316
343
  function shouldTreatDiscordDeliveredTextAsVisible(params) {
317
344
  return params.kind === "block" && typeof params.text === "string" && params.text.trim().length > 0;
318
345
  }
@@ -676,23 +703,14 @@ const discordPlugin = createChatChannelPlugin({
676
703
  }
677
704
  }
678
705
  const token = account.token.trim();
679
- let discordBotLabel = "";
680
- try {
681
- const probe = await (await loadDiscordProbeRuntime()).probeDiscord(token, 2500, { includeApplication: true });
682
- const username = probe.ok ? probe.bot?.username?.trim() : null;
683
- if (username) discordBotLabel = ` (@${username})`;
684
- ctx.setStatus({
685
- accountId: account.accountId,
686
- bot: probe.bot,
687
- application: probe.application
688
- });
689
- const messageContent = probe.application?.intents?.messageContent;
690
- if (messageContent === "disabled") ctx.log?.warn(`[${account.accountId}] Discord Message Content Intent is disabled; bot may not respond to channel messages. Enable it in Discord Dev Portal (Bot → Privileged Gateway Intents) or require mentions.`);
691
- else if (messageContent === "limited") ctx.log?.info(`[${account.accountId}] Discord Message Content Intent is limited; bots under 100 servers can use it without verification.`);
692
- } catch (err) {
693
- if (getDiscordRuntime().logging.shouldLogVerbose()) ctx.log?.debug?.(`[${account.accountId}] bot probe failed: ${String(err)}`);
694
- }
695
- ctx.log?.info(`[${account.accountId}] starting provider${discordBotLabel}`);
706
+ startDiscordStartupProbe({
707
+ accountId: account.accountId,
708
+ token,
709
+ abortSignal: ctx.abortSignal,
710
+ setStatus: ctx.setStatus,
711
+ log: ctx.log
712
+ });
713
+ ctx.log?.info(`[${account.accountId}] starting provider`);
696
714
  return (await loadDiscordProviderRuntime()).monitorDiscordProvider({
697
715
  token,
698
716
  accountId: account.accountId,
@@ -1,2 +1,2 @@
1
- import { t as DiscordChannelConfigSchema } from "./config-schema-BmGtnfiE.js";
1
+ import { t as DiscordChannelConfigSchema } from "./config-schema-CC1qhiTN.js";
2
2
  export { DiscordChannelConfigSchema };
@@ -1,2 +1,2 @@
1
- import { t as discordPlugin } from "./channel-Nf20xyAS.js";
1
+ import { t as discordPlugin } from "./channel-DpLugi97.js";
2
2
  export { discordPlugin };
@@ -1,6 +1,6 @@
1
1
  import { n as resolveDiscordToken } from "./token-BZtonk7d.js";
2
2
  import { a as mergeDiscordAccountConfig, c as resolveDiscordAccountAllowFrom, l as resolveDiscordAccountConfig, o as resolveDefaultDiscordAccountId } from "./accounts-CaHGiVB4.js";
3
- import { r as discordSetupAdapter, t as createDiscordPluginBase } from "./shared-C1EMtcxR.js";
3
+ import { r as discordSetupAdapter, t as createDiscordPluginBase } from "./shared-Ugd3DMEH.js";
4
4
  import { t as resolveDiscordChannelAllowlist } from "./resolve-channels-VAqom3Dn.js";
5
5
  import { t as resolveDiscordUserAllowlist } from "./resolve-users-DPJkRKx1.js";
6
6
  import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id";
@@ -64,7 +64,11 @@ const DiscordChannelConfigSchema = buildChannelConfigSchema(DiscordConfigSchema,
64
64
  },
65
65
  "streaming.preview.toolProgress": {
66
66
  label: "Discord Draft Tool Progress",
67
- help: "Show tool/progress activity in the live draft preview message (default: true). Set false to keep tool updates as separate messages."
67
+ help: "Show tool/progress activity in the live draft preview message (default: true). Set false to hide interim tool updates while the draft preview stays active."
68
+ },
69
+ "streaming.preview.commandText": {
70
+ label: "Discord Draft Command Text",
71
+ help: "Command/exec detail in preview tool-progress lines: \"raw\" preserves released behavior; \"status\" shows only the tool label."
68
72
  },
69
73
  "streaming.progress.label": {
70
74
  label: "Discord Progress Label",
@@ -82,6 +86,10 @@ const DiscordChannelConfigSchema = buildChannelConfigSchema(DiscordConfigSchema,
82
86
  label: "Discord Progress Tool Lines",
83
87
  help: "Show compact tool/progress lines in progress draft mode (default: true). Set false to keep only the label until final delivery."
84
88
  },
89
+ "streaming.progress.commandText": {
90
+ label: "Discord Progress Command Text",
91
+ help: "Command/exec detail in progress draft lines: \"raw\" preserves released behavior; \"status\" shows only the tool label."
92
+ },
85
93
  "retry.attempts": {
86
94
  label: "Discord Retry Attempts",
87
95
  help: "Max retry attempts for outbound Discord API calls (default: 3)."
@@ -121,7 +121,7 @@ function applyImplicitReplyBatchGate(ctx, replyToMode, isBatched) {
121
121
  //#region extensions/discord/src/monitor/message-run-queue.ts
122
122
  let messageProcessRuntimePromise;
123
123
  async function loadMessageProcessRuntime() {
124
- messageProcessRuntimePromise ??= import("./message-handler.process-Be2HA9AV.js");
124
+ messageProcessRuntimePromise ??= import("./message-handler.process-C-iW2rRu.js");
125
125
  return await messageProcessRuntimePromise;
126
126
  }
127
127
  async function processDiscordQueuedMessage(params) {
@@ -23,7 +23,7 @@ import { resolveChunkMode, resolveTextChunkLimit } from "openclaw/plugin-sdk/rep
23
23
  import { danger, logVerbose, shouldLogVerbose } from "openclaw/plugin-sdk/runtime-env";
24
24
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
25
25
  import { resolveMarkdownTableMode } from "openclaw/plugin-sdk/markdown-table-runtime";
26
- import { createChannelProgressDraftGate, formatChannelProgressDraftLine, formatChannelProgressDraftText, isChannelProgressDraftWorkToolName, resolveChannelProgressDraftMaxLines, resolveChannelStreamingBlockEnabled, resolveChannelStreamingPreviewChunk, resolveChannelStreamingPreviewToolProgress, resolveChannelStreamingSuppressDefaultToolProgressMessages } from "openclaw/plugin-sdk/channel-streaming";
26
+ import { createChannelProgressDraftGate, formatChannelProgressDraftLine, formatChannelProgressDraftLineForEntry, formatChannelProgressDraftText, isChannelProgressDraftWorkToolName, resolveChannelProgressDraftMaxLines, resolveChannelStreamingBlockEnabled, resolveChannelStreamingPreviewChunk, resolveChannelStreamingPreviewToolProgress, resolveChannelStreamingSuppressDefaultToolProgressMessages } from "openclaw/plugin-sdk/channel-streaming";
27
27
  import { recordInboundSession, resolvePinnedMainDmOwnerFromAllowlist } from "openclaw/plugin-sdk/conversation-runtime";
28
28
  import { EmbeddedBlockChunker, resolveAckReaction, resolveHumanDelayConfig } from "openclaw/plugin-sdk/agent-runtime";
29
29
  import { isDangerousNameMatchingEnabled } from "openclaw/plugin-sdk/dangerous-name-runtime";
@@ -1090,15 +1090,15 @@ async function processDiscordMessage(ctx, observer) {
1090
1090
  if (isProcessAborted(abortSignal)) return;
1091
1091
  await maybeBindStatusReactionsToToolReaction(payload);
1092
1092
  await statusReactions.setTool(payload.name);
1093
- await draftPreview.pushToolProgress(formatChannelProgressDraftLine({
1093
+ await draftPreview.pushToolProgress(formatChannelProgressDraftLineForEntry(discordConfig, {
1094
1094
  event: "tool",
1095
1095
  name: payload.name,
1096
1096
  phase: payload.phase,
1097
1097
  args: payload.args
1098
- }), { toolName: payload.name });
1098
+ }, payload.detailMode ? { detailMode: payload.detailMode } : void 0), { toolName: payload.name });
1099
1099
  },
1100
1100
  onItemEvent: async (payload) => {
1101
- await draftPreview.pushToolProgress(formatChannelProgressDraftLine({
1101
+ await draftPreview.pushToolProgress(formatChannelProgressDraftLineForEntry(discordConfig, {
1102
1102
  event: "item",
1103
1103
  itemKind: payload.kind,
1104
1104
  title: payload.title,
@@ -8035,7 +8035,7 @@ async function loadDiscordVoiceRuntime() {
8035
8035
  }
8036
8036
  }
8037
8037
  async function loadDiscordProviderSessionRuntime() {
8038
- const promise = discordProviderSessionRuntimePromise ?? import("./provider-session.runtime-CD5RUyP3.js");
8038
+ const promise = discordProviderSessionRuntimePromise ?? import("./provider-session.runtime-DOwaBuWH.js");
8039
8039
  discordProviderSessionRuntimePromise = promise;
8040
8040
  try {
8041
8041
  return await promise;
@@ -1,6 +1,6 @@
1
1
  import { a as reconcileAcpThreadBindingsOnStartup } from "./thread-bindings-DLoian4S.js";
2
2
  import { n as createNoopThreadBindingManager, r as createThreadBindingManager } from "./thread-bindings.manager-CWG9Gd04.js";
3
- import { t as createDiscordMessageHandler } from "./message-handler-TShaLWeQ.js";
3
+ import { t as createDiscordMessageHandler } from "./message-handler-BEt0EFbs.js";
4
4
  import { resolveThreadBindingIdleTimeoutMs, resolveThreadBindingMaxAgeMs, resolveThreadBindingsEnabled } from "openclaw/plugin-sdk/conversation-runtime";
5
5
  import { getAcpSessionManager, isAcpRuntimeError } from "openclaw/plugin-sdk/acp-runtime";
6
6
  export { createDiscordMessageHandler, createNoopThreadBindingManager, createThreadBindingManager, getAcpSessionManager, isAcpRuntimeError, reconcileAcpThreadBindingsOnStartup, resolveThreadBindingIdleTimeoutMs, resolveThreadBindingMaxAgeMs, resolveThreadBindingsEnabled };
@@ -0,0 +1,2 @@
1
+ import { t as monitorDiscordProvider } from "./provider-BaklPvax.js";
2
+ export { monitorDiscordProvider };
@@ -21,11 +21,11 @@ import { a as mergeAbortSignals, i as DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, n as
21
21
  import "./runtime-api.actions.js";
22
22
  import { r as collectDiscordAuditChannelIds, t as auditDiscordChannelPermissions } from "./audit-DEbWTFTt.js";
23
23
  import "./runtime-api.lookup.js";
24
- import { a as createDiscordNativeCommand, i as waitForDiscordGatewayPluginRegistration, n as createDiscordGatewayPlugin, o as registerDiscordListener, r as resolveDiscordGatewayIntents, t as monitorDiscordProvider } from "./provider-Cy1aml6b.js";
24
+ import { a as createDiscordNativeCommand, i as waitForDiscordGatewayPluginRegistration, n as createDiscordGatewayPlugin, o as registerDiscordListener, r as resolveDiscordGatewayIntents, t as monitorDiscordProvider } from "./provider-BaklPvax.js";
25
25
  import { i as buildDiscordMediaPayload } from "./message-utils-Dmgu-7fC.js";
26
26
  import { o as sanitizeDiscordThreadName, r as resolveDiscordReplyTarget } from "./threading-Bi95Nz8h.js";
27
- import { t as createDiscordMessageHandler } from "./message-handler-TShaLWeQ.js";
28
- import "./runtime-api.monitor-srLSEVEX.js";
27
+ import { t as createDiscordMessageHandler } from "./message-handler-BEt0EFbs.js";
28
+ import "./runtime-api.monitor-B4mrR-_Z.js";
29
29
  import "./runtime-api.send.js";
30
30
  import "./runtime-api.threads.js";
31
31
  export { DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS, DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, DiscordSendError, __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, isDiscordGroupAllowedByPolicy, isDiscordModerationAction, isRecentlyUnboundThreadWebhookMessage, kickMemberDiscord, listDiscordDirectoryGroupsLive, listDiscordDirectoryPeersLive, listGuildChannelsDiscord, listGuildEmojisDiscord, listPinsDiscord, listScheduledEventsDiscord, listThreadBindingsBySessionKey, listThreadBindingsForAccount, listThreadsDiscord, mergeAbortSignals, monitorDiscordProvider, moveChannelDiscord, normalizeDiscordAllowList, 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, sanitizeDiscordThreadName, searchMessagesDiscord, sendDiscordComponentMessage, sendMessageDiscord, sendPollDiscord, sendStickerDiscord, sendTypingDiscord, sendVoiceMessageDiscord, sendWebhookMessageDiscord, setChannelPermissionDiscord, setDiscordRuntime, setPresence, setThreadBindingIdleTimeoutBySessionKey, setThreadBindingMaxAgeBySessionKey, shouldEmitDiscordReactionNotification, timeoutMemberDiscord, unbindThreadBindingsBySessionKey, unpinMessageDiscord, unregisterGateway, uploadEmojiDiscord, uploadStickerDiscord, waitForDiscordGatewayPluginRegistration };
@@ -1,6 +1,6 @@
1
1
  import "./allow-list-ek-1hMKN.js";
2
- import "./provider-Cy1aml6b.js";
2
+ import "./provider-BaklPvax.js";
3
3
  import "./message-utils-Dmgu-7fC.js";
4
4
  import "./threading-Bi95Nz8h.js";
5
- import "./message-handler-TShaLWeQ.js";
5
+ import "./message-handler-BEt0EFbs.js";
6
6
  export {};
@@ -1,9 +1,9 @@
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-BKG4KIVC.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-ek-1hMKN.js";
3
3
  import { a as mergeAbortSignals, i as DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, n as DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, r as DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, t as DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS } from "./timeouts-C7jeTtGs.js";
4
- import { a as createDiscordNativeCommand, i as waitForDiscordGatewayPluginRegistration, n as createDiscordGatewayPlugin, o as registerDiscordListener, r as resolveDiscordGatewayIntents, t as monitorDiscordProvider } from "./provider-Cy1aml6b.js";
4
+ import { a as createDiscordNativeCommand, i as waitForDiscordGatewayPluginRegistration, n as createDiscordGatewayPlugin, o as registerDiscordListener, r as resolveDiscordGatewayIntents, t as monitorDiscordProvider } from "./provider-BaklPvax.js";
5
5
  import { i as buildDiscordMediaPayload } from "./message-utils-Dmgu-7fC.js";
6
6
  import { o as sanitizeDiscordThreadName, r as resolveDiscordReplyTarget } from "./threading-Bi95Nz8h.js";
7
- import { t as createDiscordMessageHandler } from "./message-handler-TShaLWeQ.js";
8
- import "./runtime-api.monitor-srLSEVEX.js";
7
+ import { t as createDiscordMessageHandler } from "./message-handler-BEt0EFbs.js";
8
+ import "./runtime-api.monitor-B4mrR-_Z.js";
9
9
  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, isDiscordGroupAllowedByPolicy, mergeAbortSignals, monitorDiscordProvider, normalizeDiscordAllowList, normalizeDiscordSlug, presenceCacheSize, registerDiscordListener, registerGateway, resolveDiscordChannelConfig, resolveDiscordChannelConfigWithFallback, resolveDiscordCommandAuthorized, resolveDiscordGatewayIntents, resolveDiscordGuildEntry, resolveDiscordReplyTarget, resolveDiscordShouldRequireMention, resolveGroupDmAllow, sanitizeDiscordThreadName, setPresence, shouldEmitDiscordReactionNotification, unregisterGateway, waitForDiscordGatewayPluginRegistration };
@@ -1,2 +1,2 @@
1
- import { t as discordSetupPlugin } from "./channel.setup-DHzAG9qO.js";
1
+ import { t as discordSetupPlugin } from "./channel.setup-C-HEMkxU.js";
2
2
  export { discordSetupPlugin };
@@ -1,7 +1,7 @@
1
1
  import { a as mergeDiscordAccountConfig, c as resolveDiscordAccountAllowFrom, d as resolveDiscordAccountDmPolicy, n as isDiscordAccountEnabledForRuntime, o as resolveDefaultDiscordAccountId, r as listDiscordAccountIds, s as resolveDiscordAccount, u as resolveDiscordAccountDisabledReason } from "./accounts-CaHGiVB4.js";
2
2
  import { t as inspectDiscordAccount } from "./account-inspect-BcQAxhKY.js";
3
3
  import { i as getChatChannelMeta } from "./channel-api-CTSWMrnD.js";
4
- import { t as DiscordChannelConfigSchema } from "./config-schema-BmGtnfiE.js";
4
+ import { t as DiscordChannelConfigSchema } from "./config-schema-CC1qhiTN.js";
5
5
  import { n as normalizeCompatibilityConfig } from "./doctor-contract-Dxq4VIkE.js";
6
6
  import { t as DISCORD_LEGACY_CONFIG_RULES } from "./doctor-shared-DU8RcnF5.js";
7
7
  import { n as secretTargetRegistryEntries, t as collectRuntimeConfigAssignments } from "./secret-config-contract-CoGryS5c.js";
package/dist/test-api.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as discordPlugin } from "./channel-Nf20xyAS.js";
1
+ import { t as discordPlugin } from "./channel-DpLugi97.js";
2
2
  import { n as discordOutbound } from "./outbound-adapter-B-mzejZP.js";
3
3
  import { t as __testing } from "./thread-bindings.manager-CWG9Gd04.js";
4
4
  import { n as buildDiscordInboundAccessContext } from "./inbound-context-e_oBBJtF.js";
@@ -308,6 +308,13 @@
308
308
  },
309
309
  "toolProgress": {
310
310
  "type": "boolean"
311
+ },
312
+ "commandText": {
313
+ "type": "string",
314
+ "enum": [
315
+ "raw",
316
+ "status"
317
+ ]
311
318
  }
312
319
  },
313
320
  "additionalProperties": false
@@ -337,8 +344,22 @@
337
344
  "exclusiveMinimum": 0,
338
345
  "maximum": 9007199254740991
339
346
  },
347
+ "render": {
348
+ "type": "string",
349
+ "enum": [
350
+ "text",
351
+ "rich"
352
+ ]
353
+ },
340
354
  "toolProgress": {
341
355
  "type": "boolean"
356
+ },
357
+ "commandText": {
358
+ "type": "string",
359
+ "enum": [
360
+ "raw",
361
+ "status"
362
+ ]
342
363
  }
343
364
  },
344
365
  "additionalProperties": false
@@ -1864,6 +1885,13 @@
1864
1885
  },
1865
1886
  "toolProgress": {
1866
1887
  "type": "boolean"
1888
+ },
1889
+ "commandText": {
1890
+ "type": "string",
1891
+ "enum": [
1892
+ "raw",
1893
+ "status"
1894
+ ]
1867
1895
  }
1868
1896
  },
1869
1897
  "additionalProperties": false
@@ -1893,8 +1921,22 @@
1893
1921
  "exclusiveMinimum": 0,
1894
1922
  "maximum": 9007199254740991
1895
1923
  },
1924
+ "render": {
1925
+ "type": "string",
1926
+ "enum": [
1927
+ "text",
1928
+ "rich"
1929
+ ]
1930
+ },
1896
1931
  "toolProgress": {
1897
1932
  "type": "boolean"
1933
+ },
1934
+ "commandText": {
1935
+ "type": "string",
1936
+ "enum": [
1937
+ "raw",
1938
+ "status"
1939
+ ]
1898
1940
  }
1899
1941
  },
1900
1942
  "additionalProperties": false
@@ -3207,7 +3249,11 @@
3207
3249
  },
3208
3250
  "streaming.preview.toolProgress": {
3209
3251
  "label": "Discord Draft Tool Progress",
3210
- "help": "Show tool/progress activity in the live draft preview message (default: true). Set false to keep tool updates as separate messages."
3252
+ "help": "Show tool/progress activity in the live draft preview message (default: true). Set false to hide interim tool updates while the draft preview stays active."
3253
+ },
3254
+ "streaming.preview.commandText": {
3255
+ "label": "Discord Draft Command Text",
3256
+ "help": "Command/exec detail in preview tool-progress lines: \"raw\" preserves released behavior; \"status\" shows only the tool label."
3211
3257
  },
3212
3258
  "streaming.progress.label": {
3213
3259
  "label": "Discord Progress Label",
@@ -3225,6 +3271,10 @@
3225
3271
  "label": "Discord Progress Tool Lines",
3226
3272
  "help": "Show compact tool/progress lines in progress draft mode (default: true). Set false to keep only the label until final delivery."
3227
3273
  },
3274
+ "streaming.progress.commandText": {
3275
+ "label": "Discord Progress Command Text",
3276
+ "help": "Command/exec detail in progress draft lines: \"raw\" preserves released behavior; \"status\" shows only the tool label."
3277
+ },
3228
3278
  "retry.attempts": {
3229
3279
  "label": "Discord Retry Attempts",
3230
3280
  "help": "Max retry attempts for outbound Discord API calls (default: 3)."
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/discord",
3
- "version": "2026.5.3",
3
+ "version": "2026.5.4-beta.1",
4
4
  "description": "OpenClaw Discord channel plugin",
5
5
  "repository": {
6
6
  "type": "git",
@@ -21,7 +21,7 @@
21
21
  "openclaw": "workspace:*"
22
22
  },
23
23
  "peerDependencies": {
24
- "openclaw": ">=2026.5.3"
24
+ "openclaw": ">=2026.5.4-beta.1"
25
25
  },
26
26
  "peerDependenciesMeta": {
27
27
  "openclaw": {
@@ -65,10 +65,10 @@
65
65
  "allowInvalidConfigRecovery": true
66
66
  },
67
67
  "compat": {
68
- "pluginApi": ">=2026.5.3"
68
+ "pluginApi": ">=2026.5.4-beta.1"
69
69
  },
70
70
  "build": {
71
- "openclawVersion": "2026.5.3"
71
+ "openclawVersion": "2026.5.4-beta.1"
72
72
  },
73
73
  "release": {
74
74
  "publishToClawHub": true,
@@ -1,2 +0,0 @@
1
- import { t as monitorDiscordProvider } from "./provider-Cy1aml6b.js";
2
- export { monitorDiscordProvider };