@openclaw/slack 2026.5.31-beta.1 → 2026.5.31-beta.3

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/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # OpenClaw Slack
2
+
3
+ Official OpenClaw channel plugin for Slack channels, DMs, commands, and app events.
4
+
5
+ Install from OpenClaw:
6
+
7
+ ```bash
8
+ openclaw plugin add @openclaw/slack
9
+ ```
10
+
11
+ Configure the Slack app credentials and allowed workspaces/channels in OpenClaw. The plugin lets agents receive Slack events and reply through the configured Slack app.
@@ -1,8 +1,8 @@
1
1
  import { i as resolveSlackChannelId, r as parseSlackTarget } from "./target-parsing-C7eeWg7M.js";
2
2
  import "./targets-nUqxHGgg.js";
3
- import { a as parseSlackBlocksInput } from "./thread-ts-NSVqWybn.js";
3
+ import { a as parseSlackBlocksInput } from "./thread-ts-CzxxhSE5.js";
4
4
  import { a as readPositiveIntegerParam, c as withNormalizedTimestamp, n as imageResultFromFile, o as readReactionParams, r as jsonResult, s as readStringParam, t as createActionGate } from "./runtime-api-BpGQDSTg.js";
5
- import { n as resolveSlackChannelConfig, t as isSlackChannelAllowedByPolicy } from "./policy-BBDU-PQK.js";
5
+ import { n as resolveSlackChannelConfig, t as isSlackChannelAllowedByPolicy } from "./policy-Bb46UkJW.js";
6
6
  import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
7
7
  import { isSingleUseReplyToMode } from "openclaw/plugin-sdk/reply-reference";
8
8
  import { readBooleanParam } from "openclaw/plugin-sdk/boolean-param";
@@ -30,7 +30,7 @@ function sameSlackChannelTarget(targetChannel, currentChannelId) {
30
30
  let slackActionsRuntimePromise;
31
31
  let slackAccountsRuntimePromise;
32
32
  function loadSlackActionsRuntime() {
33
- slackActionsRuntimePromise ??= import("./actions.runtime-BNL71SN3.js");
33
+ slackActionsRuntimePromise ??= import("./actions.runtime-BXIGDEE2.js");
34
34
  return slackActionsRuntimePromise;
35
35
  }
36
36
  function loadSlackAccountsRuntime() {
@@ -0,0 +1,2 @@
1
+ import { t as handleSlackAction } from "./action-runtime-CSrP2K6r.js";
2
+ export { handleSlackAction };
@@ -1,8 +1,8 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
2
  import { a as resolveSlackAccount, d as resolveSlackBotToken } from "./accounts-f6Xcv9Vi.js";
3
- import { b as truncateSlackText, o as validateSlackBlocksArray, s as SLACK_TEXT_LIMIT } from "./thread-ts-NSVqWybn.js";
3
+ import { b as truncateSlackText, o as validateSlackBlocksArray, s as SLACK_TEXT_LIMIT } from "./thread-ts-CzxxhSE5.js";
4
4
  import { a as getSlackWriteClient, r as createSlackWebClient } from "./client-qvqS9fQM.js";
5
- import { c as buildSlackBlocksFallbackText, t as sendMessageSlack } from "./send-zvrcUvp2.js";
5
+ import { c as buildSlackBlocksFallbackText, t as sendMessageSlack } from "./send-ZSA5yuA_.js";
6
6
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
7
7
  import { requireRuntimeConfig } from "openclaw/plugin-sdk/plugin-config-runtime";
8
8
  import { logVerbose, logVerbose as logVerbose$1 } from "openclaw/plugin-sdk/runtime-env";
@@ -1,2 +1,2 @@
1
- import { a as listSlackEmojis, c as pinSlackMessage, d as removeOwnSlackReactions, f as removeSlackReaction, i as getSlackMemberInfo, l as reactSlackMessage, m as unpinSlackMessage, n as downloadSlackFile, o as listSlackPins, p as sendSlackMessage, r as editSlackMessage, s as listSlackReactions, t as deleteSlackMessage, u as readSlackMessages } from "./actions-BA_6yvPC.js";
1
+ import { a as listSlackEmojis, c as pinSlackMessage, d as removeOwnSlackReactions, f as removeSlackReaction, i as getSlackMemberInfo, l as reactSlackMessage, m as unpinSlackMessage, n as downloadSlackFile, o as listSlackPins, p as sendSlackMessage, r as editSlackMessage, s as listSlackReactions, t as deleteSlackMessage, u as readSlackMessages } from "./actions-7_NdPFE4.js";
2
2
  export { deleteSlackMessage, downloadSlackFile, editSlackMessage, getSlackMemberInfo, listSlackEmojis, listSlackPins, listSlackReactions, pinSlackMessage, reactSlackMessage, readSlackMessages, removeOwnSlackReactions, removeSlackReaction, sendSlackMessage, unpinSlackMessage };
package/dist/api.js CHANGED
@@ -3,16 +3,16 @@ import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId, l as resol
3
3
  import { t as inspectSlackAccount } from "./account-inspect-CdGk6R7l.js";
4
4
  import { i as resolveSlackChannelId, n as normalizeSlackMessagingTarget, r as parseSlackTarget, t as looksLikeSlackTargetId } from "./target-parsing-C7eeWg7M.js";
5
5
  import "./targets-nUqxHGgg.js";
6
- import { a as resolveSlackAutoThreadId, i as resolveSlackChannelType, n as buildSlackThreadingToolContext, r as resetSlackChannelTypeCacheForTest, t as slackPlugin } from "./channel-ClgouPGI.js";
7
- import { _ as buildSlackInteractiveBlocks, a as parseSlackBlocksInput, c as resolveSlackGroupRequireMention, d as normalizeAllowList, f as normalizeAllowListLower, g as resolveSlackUserAllowed, h as resolveSlackAllowListMatch, i as SLACK_MAX_BLOCKS, l as resolveSlackGroupToolPolicy, m as normalizeSlackSlug, o as validateSlackBlocksArray, p as normalizeSlackAllowOwnerEntry, u as allowListMatches, v as buildSlackPresentationBlocks } from "./thread-ts-NSVqWybn.js";
6
+ import { a as resolveSlackAutoThreadId, i as resolveSlackChannelType, n as buildSlackThreadingToolContext, r as resetSlackChannelTypeCacheForTest, t as slackPlugin } from "./channel-BphCnwhM.js";
7
+ import { _ as buildSlackInteractiveBlocks, a as parseSlackBlocksInput, c as resolveSlackGroupRequireMention, d as normalizeAllowList, f as normalizeAllowListLower, g as resolveSlackUserAllowed, h as resolveSlackAllowListMatch, i as SLACK_MAX_BLOCKS, l as resolveSlackGroupToolPolicy, m as normalizeSlackSlug, o as validateSlackBlocksArray, p as normalizeSlackAllowOwnerEntry, u as allowListMatches, v as buildSlackPresentationBlocks } from "./thread-ts-CzxxhSE5.js";
8
8
  import { n as extractSlackToolSend, r as listSlackMessageActions } from "./message-tool-api-B9M0zzlQ.js";
9
9
  import { n as isSlackInteractiveRepliesEnabled, r as parseSlackOptionsLine, t as compileSlackInteractiveReplies } from "./interactive-replies-DrBq4Mld.js";
10
10
  import { a as getSlackWriteClient, c as resolveSlackWebClientOptions, i as createSlackWriteClient, l as resolveSlackWriteClientOptions, n as createSlackTokenCacheKey, o as SLACK_DEFAULT_RETRY_OPTIONS, r as createSlackWebClient, s as SLACK_WRITE_RETRY_OPTIONS, t as clearSlackWriteClientCacheForTest } from "./client-qvqS9fQM.js";
11
11
  import { t as slackSetupPlugin } from "./channel.setup-DvU_3G7a.js";
12
- import { a as recordSlackThreadParticipation, n as clearSlackThreadParticipationCache, r as hasSlackThreadParticipation } from "./send-zvrcUvp2.js";
13
- import { a as listSlackEmojis, c as pinSlackMessage, d as removeOwnSlackReactions, f as removeSlackReaction, i as getSlackMemberInfo, l as reactSlackMessage, m as unpinSlackMessage, n as downloadSlackFile, o as listSlackPins, p as sendSlackMessage, r as editSlackMessage, s as listSlackReactions, t as deleteSlackMessage, u as readSlackMessages } from "./actions-BA_6yvPC.js";
12
+ import { a as recordSlackThreadParticipation, n as clearSlackThreadParticipationCache, r as hasSlackThreadParticipation } from "./send-ZSA5yuA_.js";
13
+ import { a as listSlackEmojis, c as pinSlackMessage, d as removeOwnSlackReactions, f as removeSlackReaction, i as getSlackMemberInfo, l as reactSlackMessage, m as unpinSlackMessage, n as downloadSlackFile, o as listSlackPins, p as sendSlackMessage, r as editSlackMessage, s as listSlackReactions, t as deleteSlackMessage, u as readSlackMessages } from "./actions-7_NdPFE4.js";
14
14
  import { n as listSlackDirectoryGroupsFromConfig, r as listSlackDirectoryPeersFromConfig } from "./directory-config-8UPAEyNg.js";
15
15
  import { t as probeSlack } from "./probe-DczaQTdi.js";
16
16
  import { t as collectSlackSecurityAuditFindings } from "./security-audit-CikQhBUY.js";
17
- import { n as resolveSlackRuntimeGroupPolicy } from "./provider-DNfFBEzl.js";
17
+ import { n as resolveSlackRuntimeGroupPolicy } from "./provider-9lXc1Ecr.js";
18
18
  export { SLACK_DEFAULT_RETRY_OPTIONS, SLACK_MAX_BLOCKS, SLACK_WRITE_RETRY_OPTIONS, resetSlackChannelTypeCacheForTest as __resetSlackChannelTypeCacheForTest, resetSlackChannelTypeCacheForTest, allowListMatches, buildSlackInteractiveBlocks, buildSlackPresentationBlocks, buildSlackThreadingToolContext, clearSlackThreadParticipationCache, clearSlackWriteClientCacheForTest, collectSlackSecurityAuditFindings, compileSlackInteractiveReplies, createSlackTokenCacheKey, createSlackWebClient, createSlackWriteClient, deleteSlackMessage, downloadSlackFile, editSlackMessage, extractSlackToolSend, getSlackMemberInfo, getSlackWriteClient, handleSlackHttpRequest, hasSlackThreadParticipation, inspectSlackAccount, isSlackInteractiveRepliesEnabled, listEnabledSlackAccounts, listSlackAccountIds, listSlackDirectoryGroupsFromConfig, listSlackDirectoryPeersFromConfig, listSlackEmojis, listSlackMessageActions, listSlackPins, listSlackReactions, looksLikeSlackTargetId, mergeSlackAccountConfig, normalizeAllowList, normalizeAllowListLower, normalizeSlackAllowOwnerEntry, normalizeSlackMessagingTarget, normalizeSlackSlug, normalizeSlackWebhookPath, parseSlackBlocksInput, parseSlackOptionsLine, parseSlackTarget, pinSlackMessage, probeSlack, reactSlackMessage, readSlackMessages, recordSlackThreadParticipation, registerSlackHttpHandler, removeOwnSlackReactions, removeSlackReaction, resolveDefaultSlackAccountId, resolveSlackAccount, resolveSlackAllowListMatch, resolveSlackAutoThreadId, resolveSlackChannelId, resolveSlackChannelType, resolveSlackGroupRequireMention, resolveSlackGroupToolPolicy, resolveSlackReplyToMode, resolveSlackRuntimeGroupPolicy, resolveSlackUserAllowed, resolveSlackWebClientOptions, resolveSlackWriteClientOptions, sendSlackMessage, slackPlugin, slackSetupPlugin, unpinSlackMessage, validateSlackBlocksArray };
@@ -1,9 +1,9 @@
1
- import { C as isSlackAnyNativeApprovalClientEnabled, T as shouldHandleSlackNativeApprovalRequest, b as truncateSlackText, j as normalizeSlackApproverId, r as resolveSlackReplyBlocks, w as resolveSlackApprovalKind } from "./thread-ts-NSVqWybn.js";
2
- import { t as sendMessageSlack } from "./send-zvrcUvp2.js";
1
+ import { C as isSlackAnyNativeApprovalClientEnabled, T as shouldHandleSlackNativeApprovalRequest, b as truncateSlackText, j as normalizeSlackApproverId, r as resolveSlackReplyBlocks, w as resolveSlackApprovalKind } from "./thread-ts-CzxxhSE5.js";
2
+ import { t as sendMessageSlack } from "./send-ZSA5yuA_.js";
3
3
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  import { buildChannelApprovalNativeTargetKey } from "openclaw/plugin-sdk/approval-native-runtime";
5
- import { logError } from "openclaw/plugin-sdk/logging-core";
6
5
  import { buildApprovalPresentationFromActionDescriptors } from "openclaw/plugin-sdk/approval-reply-runtime";
6
+ import { logError } from "openclaw/plugin-sdk/logging-core";
7
7
  import { createChannelApprovalNativeRuntimeAdapter } from "openclaw/plugin-sdk/approval-handler-runtime";
8
8
  //#region extensions/slack/src/approval-handler.runtime.ts
9
9
  const SLACK_CONTEXT_ELEMENTS_MAX = 10;
@@ -1,7 +1,7 @@
1
1
  import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId, l as resolveSlackReplyToMode, n as listSlackAccountIds, o as resolveSlackAccountAllowFrom } from "./accounts-f6Xcv9Vi.js";
2
2
  import { i as resolveSlackChannelId, n as normalizeSlackMessagingTarget, r as parseSlackTarget, t as looksLikeSlackTargetId } from "./target-parsing-C7eeWg7M.js";
3
3
  import "./targets-nUqxHGgg.js";
4
- import { A as isSlackExecApprovalClientEnabled, C as isSlackAnyNativeApprovalClientEnabled, D as isSlackApprovalAuthorizedSender, E as getSlackApprovalApprovers, M as resolveSlackExecApprovalTarget, N as shouldSuppressLocalSlackExecApprovalPrompt, O as getSlackExecApprovalApprovers, T as shouldHandleSlackNativeApprovalRequest, _ as buildSlackInteractiveBlocks, c as resolveSlackGroupRequireMention, f as normalizeAllowListLower, k as isSlackExecApprovalAuthorizedSender, l as resolveSlackGroupToolPolicy, n as resolveSlackThreadTsValue, r as resolveSlackReplyBlocks, s as SLACK_TEXT_LIMIT, t as normalizeSlackThreadTsCandidate, v as buildSlackPresentationBlocks, w as resolveSlackApprovalKind, y as resolveSlackInteractiveBlockOffsets } from "./thread-ts-NSVqWybn.js";
4
+ import { A as isSlackExecApprovalClientEnabled, C as isSlackAnyNativeApprovalClientEnabled, D as isSlackApprovalAuthorizedSender, E as getSlackApprovalApprovers, M as resolveSlackExecApprovalTarget, N as shouldSuppressLocalSlackExecApprovalPrompt, O as getSlackExecApprovalApprovers, T as shouldHandleSlackNativeApprovalRequest, _ as buildSlackInteractiveBlocks, c as resolveSlackGroupRequireMention, f as normalizeAllowListLower, k as isSlackExecApprovalAuthorizedSender, l as resolveSlackGroupToolPolicy, n as resolveSlackThreadTsValue, r as resolveSlackReplyBlocks, s as SLACK_TEXT_LIMIT, t as normalizeSlackThreadTsCandidate, v as buildSlackPresentationBlocks, w as resolveSlackApprovalKind, y as resolveSlackInteractiveBlockOffsets } from "./thread-ts-CzxxhSE5.js";
5
5
  import { n as extractSlackToolSend, t as describeSlackMessageTool } from "./message-tool-api-B9M0zzlQ.js";
6
6
  import { n as isSlackInteractiveRepliesEnabled, t as compileSlackInteractiveReplies } from "./interactive-replies-DrBq4Mld.js";
7
7
  import { d as PAIRING_APPROVED_MESSAGE, m as resolveConfiguredFromRequiredCredentialStatuses, p as projectCredentialSnapshotFields, r as createSlackWebClient, u as DEFAULT_ACCOUNT_ID } from "./client-qvqS9fQM.js";
@@ -231,7 +231,7 @@ const baseSlackApprovalCapability = createApproverRestrictedNativeApprovalCapabi
231
231
  approvalKind: resolveSlackApprovalKind(request),
232
232
  request
233
233
  }),
234
- load: async () => (await import("./approval-handler.runtime-D0rHmHTC.js")).slackApprovalNativeRuntime
234
+ load: async () => (await import("./approval-handler.runtime-BSVUJCOX.js")).slackApprovalNativeRuntime
235
235
  })
236
236
  });
237
237
  const baseSlackNativeAdapter = baseSlackApprovalCapability.native;
@@ -430,7 +430,7 @@ async function handleSlackMessageAction(params) {
430
430
  //#region extensions/slack/src/channel-actions.ts
431
431
  let slackActionRuntimePromise$1;
432
432
  async function loadSlackActionRuntime$1() {
433
- slackActionRuntimePromise$1 ??= import("./action-runtime.runtime-uN2B3l57.js");
433
+ slackActionRuntimePromise$1 ??= import("./action-runtime.runtime-rrYgVSQD.js");
434
434
  return await slackActionRuntimePromise$1;
435
435
  }
436
436
  function resolveSlackActionContext(params) {
@@ -562,7 +562,7 @@ const loadExtensionSharedSdk = createLazyRuntimeModule(() => import(EXTENSION_SH
562
562
  const loadTargetResolverRuntimeSdk = createLazyRuntimeModule(() => import(TARGET_RESOLVER_RUNTIME_MODULE_ID));
563
563
  const loadSlackSetupSurfaceModule = createLazyRuntimeModule(() => import("./setup-surface-95xI4u2U.js"));
564
564
  const loadSlackScopesModule = createLazyRuntimeModule(() => import("./scopes-Q1VjNpWb.js"));
565
- const loadSlackOutboundAdapterModule = createLazyRuntimeModule(() => import("./outbound-adapter-BxKw6eWi.js"));
565
+ const loadSlackOutboundAdapterModule = createLazyRuntimeModule(() => import("./outbound-adapter-DgPiw1qt.js"));
566
566
  async function resolveSlackHandleAction() {
567
567
  return getOptionalSlackRuntime()?.channel?.slack?.handleSlackAction ?? (await loadSlackActionRuntime()).handleSlackAction;
568
568
  }
@@ -586,11 +586,11 @@ const loadSlackDirectoryConfigModule = createLazyRuntimeModule(() => import("./d
586
586
  const loadSlackResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels-DIxJRl0F.js").then((n) => n.n));
587
587
  const loadSlackResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-B3vczJHE.js").then((n) => n.n));
588
588
  async function loadSlackActionRuntime() {
589
- slackActionRuntimePromise ??= import("./action-runtime.runtime-uN2B3l57.js");
589
+ slackActionRuntimePromise ??= import("./action-runtime.runtime-rrYgVSQD.js");
590
590
  return await slackActionRuntimePromise;
591
591
  }
592
592
  async function loadSlackSendRuntime() {
593
- slackSendRuntimePromise ??= import("./send.runtime-iCVpfyB_.js");
593
+ slackSendRuntimePromise ??= import("./send.runtime-CpSPovh6.js");
594
594
  return await slackSendRuntimePromise;
595
595
  }
596
596
  async function loadSlackProbeModule() {
@@ -598,7 +598,7 @@ async function loadSlackProbeModule() {
598
598
  return await slackProbeModulePromise;
599
599
  }
600
600
  async function loadSlackMonitorModule() {
601
- slackMonitorModulePromise ??= import("./monitor-D5FVBchh.js").then((n) => n.t);
601
+ slackMonitorModulePromise ??= import("./monitor-uZMv2kXU.js").then((n) => n.t);
602
602
  return await slackMonitorModulePromise;
603
603
  }
604
604
  async function loadSlackDirectoryLiveModule() {
@@ -937,9 +937,9 @@ const slackPlugin = createChatChannelPlugin({
937
937
  token: normalizeOptionalString(account.config.userToken) ?? normalizeOptionalString(account.botToken),
938
938
  inputs,
939
939
  missingTokenNote: "missing Slack token",
940
- resolveWithToken: async ({ token, inputs }) => (await loadSlackResolveChannelsModule()).resolveSlackChannelAllowlist({
940
+ resolveWithToken: async ({ token, inputs: inputsValue }) => (await loadSlackResolveChannelsModule()).resolveSlackChannelAllowlist({
941
941
  token,
942
- entries: inputs
942
+ entries: inputsValue
943
943
  }),
944
944
  mapResolved: (entry) => toResolvedTarget(entry, entry.archived ? "archived" : void 0)
945
945
  });
@@ -947,9 +947,9 @@ const slackPlugin = createChatChannelPlugin({
947
947
  token: normalizeOptionalString(account.config.userToken) ?? normalizeOptionalString(account.botToken),
948
948
  inputs,
949
949
  missingTokenNote: "missing Slack token",
950
- resolveWithToken: async ({ token, inputs }) => (await loadSlackResolveUsersModule()).resolveSlackUserAllowlist({
950
+ resolveWithToken: async ({ token, inputs: inputsLocal }) => (await loadSlackResolveUsersModule()).resolveSlackUserAllowlist({
951
951
  token,
952
- entries: inputs
952
+ entries: inputsLocal
953
953
  }),
954
954
  mapResolved: (entry) => toResolvedTarget(entry, entry.note)
955
955
  });
@@ -1,2 +1,2 @@
1
- import { t as slackPlugin } from "./channel-ClgouPGI.js";
1
+ import { t as slackPlugin } from "./channel-BphCnwhM.js";
2
2
  export { slackPlugin };
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
- import { t as monitorSlackProvider, y as buildSlackSlashCommandMatcher } from "./provider-DNfFBEzl.js";
3
- import { t as isSlackChannelAllowedByPolicy } from "./policy-BBDU-PQK.js";
4
- import { o as resolveSlackThreadTs } from "./replies-BmFpkBXm.js";
2
+ import { t as monitorSlackProvider, y as buildSlackSlashCommandMatcher } from "./provider-9lXc1Ecr.js";
3
+ import { t as isSlackChannelAllowedByPolicy } from "./policy-Bb46UkJW.js";
4
+ import { o as resolveSlackThreadTs } from "./replies-DJglavBP.js";
5
5
  //#region extensions/slack/src/monitor.ts
6
6
  var monitor_exports = /* @__PURE__ */ __exportAll({
7
7
  buildSlackSlashCommandMatcher: () => buildSlackSlashCommandMatcher,
@@ -1,4 +1,4 @@
1
- import { _ as buildSlackInteractiveBlocks, a as parseSlackBlocksInput, n as resolveSlackThreadTsValue, s as SLACK_TEXT_LIMIT, v as buildSlackPresentationBlocks, y as resolveSlackInteractiveBlockOffsets } from "./thread-ts-NSVqWybn.js";
1
+ import { _ as buildSlackInteractiveBlocks, a as parseSlackBlocksInput, n as resolveSlackThreadTsValue, s as SLACK_TEXT_LIMIT, v as buildSlackPresentationBlocks, y as resolveSlackInteractiveBlockOffsets } from "./thread-ts-CzxxhSE5.js";
2
2
  import { t as compileSlackInteractiveReplies } from "./interactive-replies-DrBq4Mld.js";
3
3
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  import { resolveOutboundSendDep } from "openclaw/plugin-sdk/channel-outbound";
@@ -9,7 +9,7 @@ import { resolvePayloadMediaUrls, sendPayloadMediaSequenceAndFinalize, sendTextM
9
9
  const SLACK_MAX_BLOCKS = 50;
10
10
  let slackSendRuntimePromise;
11
11
  async function loadSlackSendRuntime() {
12
- slackSendRuntimePromise ??= import("./send.runtime-iCVpfyB_.js");
12
+ slackSendRuntimePromise ??= import("./send.runtime-CpSPovh6.js");
13
13
  return await slackSendRuntimePromise;
14
14
  }
15
15
  function resolveRenderedInteractiveBlocks(interactive, previousBlocks) {
@@ -1,15 +1,15 @@
1
1
  import { l as resolveSlackReplyToMode } from "./accounts-f6Xcv9Vi.js";
2
2
  import { r as parseSlackTarget } from "./target-parsing-C7eeWg7M.js";
3
3
  import "./targets-nUqxHGgg.js";
4
- import { b as truncateSlackText, f as normalizeAllowListLower, h as resolveSlackAllowListMatch, p as normalizeSlackAllowOwnerEntry, s as SLACK_TEXT_LIMIT } from "./thread-ts-NSVqWybn.js";
4
+ import { b as truncateSlackText, f as normalizeAllowListLower, h as resolveSlackAllowListMatch, p as normalizeSlackAllowOwnerEntry, s as SLACK_TEXT_LIMIT } from "./thread-ts-CzxxhSE5.js";
5
5
  import { n as isSlackInteractiveRepliesEnabled, t as compileSlackInteractiveReplies } from "./interactive-replies-DrBq4Mld.js";
6
6
  import { n as resolveSlackNativeStreaming, r as resolveSlackStreamingMode, t as mapStreamingModeToSlackLegacyDraftStreamMode } from "./streaming-compat-DjlgH-Be.js";
7
- import { a as recordSlackThreadParticipation, i as hasSlackThreadParticipationWithPersistence, s as normalizeSlackOutboundText, t as sendMessageSlack } from "./send-zvrcUvp2.js";
8
- import { _ as resolveSlackThreadStarter, b as buildSlackEditTextPayload, f as removeSlackReaction, g as resolveSlackThreadHistory, l as reactSlackMessage, r as editSlackMessage, t as deleteSlackMessage, y as formatSlackFileReference } from "./actions-BA_6yvPC.js";
7
+ import { a as recordSlackThreadParticipation, i as hasSlackThreadParticipationWithPersistence, s as normalizeSlackOutboundText, t as sendMessageSlack } from "./send-ZSA5yuA_.js";
8
+ import { _ as resolveSlackThreadStarter, b as buildSlackEditTextPayload, f as removeSlackReaction, g as resolveSlackThreadHistory, l as reactSlackMessage, r as editSlackMessage, t as deleteSlackMessage, y as formatSlackFileReference } from "./actions-7_NdPFE4.js";
9
9
  import { t as formatSlackError } from "./errors-CZtmv-h0.js";
10
- import { _ as resolveStorePath, a as escapeSlackMrkdwn, b as stripSlackMentionsForCommandDetection, c as authorizeSlackBotRoomMessage, d as buildSlackAssistantThreadMetadata, f as parseSlackAssistantThreadMetadata, g as resolveChannelContextVisibilityMode, h as readSessionUpdatedAt, i as authorizeSlackDirectMessage, l as resolveSlackCommandIngress, m as resolveSlackChatType, o as recordInboundSession, p as normalizeSlackChannelType, r as resolveSlackRoomContextHints, s as resolveConversationLabel$1, u as resolveSlackEffectiveAllowFrom, v as updateLastRoute } from "./provider-DNfFBEzl.js";
11
- import { n as resolveSlackChannelConfig } from "./policy-BBDU-PQK.js";
12
- import { a as resolveDeliveredSlackReplyThreadTs, i as readSlackReplyBlocks, n as deliverReplies, o as resolveSlackThreadTs, t as createSlackReplyDeliveryPlan } from "./replies-BmFpkBXm.js";
10
+ import { _ as resolveStorePath, a as escapeSlackMrkdwn, b as stripSlackMentionsForCommandDetection, c as authorizeSlackBotRoomMessage, d as buildSlackAssistantThreadMetadata, f as parseSlackAssistantThreadMetadata, g as resolveChannelContextVisibilityMode, h as readSessionUpdatedAt, i as authorizeSlackDirectMessage, l as resolveSlackCommandIngress, m as resolveSlackChatType, o as recordInboundSession, p as normalizeSlackChannelType, r as resolveSlackRoomContextHints, s as resolveConversationLabel$1, u as resolveSlackEffectiveAllowFrom, v as updateLastRoute } from "./provider-9lXc1Ecr.js";
11
+ import { n as resolveSlackChannelConfig } from "./policy-Bb46UkJW.js";
12
+ import { a as resolveDeliveredSlackReplyThreadTs, i as readSlackReplyBlocks, n as deliverReplies, o as resolveSlackThreadTs, t as createSlackReplyDeliveryPlan } from "./replies-DJglavBP.js";
13
13
  import { asOptionalRecord, normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString, readStringValue } from "openclaw/plugin-sdk/string-coerce-runtime";
14
14
  import { resolveAgentRoute, resolveInboundLastRouteSessionKey, resolveThreadSessionKeys } from "openclaw/plugin-sdk/routing";
15
15
  import { buildChannelProgressDraftLine, buildChannelProgressDraftLineForEntry, createChannelMessageReplyPipeline, createChannelProgressDraftGate, createDraftStreamLoop, defineFinalizableLivePreviewAdapter, deliverWithFinalizableLivePreviewAdapter, formatChannelProgressDraftText, isChannelProgressDraftWorkToolName, mergeChannelProgressDraftLine, resolveAgentOutboundIdentity, resolveChannelMessageSourceReplyDeliveryMode, resolveChannelProgressDraftConfig, resolveChannelProgressDraftMaxLineChars, resolveChannelProgressDraftMaxLines, resolveChannelProgressDraftRender, resolveChannelStreamingBlockEnabled, resolveChannelStreamingNativeTransport, resolveChannelStreamingPreviewToolProgress, resolveChannelStreamingSuppressDefaultToolProgressMessages } from "openclaw/plugin-sdk/channel-outbound";
@@ -943,7 +943,7 @@ async function dispatchPreparedSlackMessage(prepared) {
943
943
  },
944
944
  onStartError: (err) => {
945
945
  logTypingFailure({
946
- log: (message) => runtime.error?.(danger(message)),
946
+ log: (messageValue) => runtime.error?.(danger(messageValue)),
947
947
  channel: "slack",
948
948
  action: "start",
949
949
  target: typingTarget,
@@ -952,7 +952,7 @@ async function dispatchPreparedSlackMessage(prepared) {
952
952
  },
953
953
  onStopError: (err) => {
954
954
  logTypingFailure({
955
- log: (message) => runtime.error?.(danger(message)),
955
+ log: (messageLocal) => runtime.error?.(danger(messageLocal)),
956
956
  channel: "slack",
957
957
  action: "stop",
958
958
  target: typingTarget,
@@ -1565,8 +1565,8 @@ async function dispatchPreparedSlackMessage(prepared) {
1565
1565
  if (!line || !normalized) {
1566
1566
  if (streamMode !== "status_final") return;
1567
1567
  const alreadyStarted = progressDraftGate.hasStarted;
1568
- await progressDraftGate.noteWork();
1569
- if (alreadyStarted && progressDraftGate.hasStarted) await refreshStartedProgressDraft();
1568
+ const progressActive = await progressDraftGate.noteWork();
1569
+ if ((alreadyStarted || progressActive) && progressDraftGate.hasStarted) await refreshStartedProgressDraft();
1570
1570
  return;
1571
1571
  }
1572
1572
  if (streamMode !== "status_final") {
@@ -1589,12 +1589,15 @@ async function dispatchPreparedSlackMessage(prepared) {
1589
1589
  }
1590
1590
  if (useNativeProgressStreaming) {
1591
1591
  if (progressDraftGate.hasStarted) await updateNativeProgressStream();
1592
- else await progressDraftGate.startNow();
1592
+ else {
1593
+ await progressDraftGate.startNow();
1594
+ if (progressDraftGate.hasStarted) await updateNativeProgressStream();
1595
+ }
1593
1596
  return;
1594
1597
  }
1595
1598
  const alreadyStarted = progressDraftGate.hasStarted;
1596
- await progressDraftGate.noteWork();
1597
- if (alreadyStarted && progressDraftGate.hasStarted) await refreshStartedProgressDraft();
1599
+ const progressActive = await progressDraftGate.noteWork();
1600
+ if ((alreadyStarted || progressActive) && progressDraftGate.hasStarted) await refreshStartedProgressDraft();
1598
1601
  };
1599
1602
  const updateDraftFromPartial = (text) => {
1600
1603
  const trimmed = text?.trimEnd();
@@ -1855,7 +1858,7 @@ const SLACK_MENTION_RESOLUTION_MAX_LOOKUPS_PER_MESSAGE = 20;
1855
1858
  const SLACK_USER_MENTION_RE$1 = /<@([A-Z0-9]+)(?:\|[^>]+)?>/gi;
1856
1859
  let slackMediaModulePromise$1;
1857
1860
  function loadSlackMediaModule$1() {
1858
- slackMediaModulePromise$1 ??= import("./actions-BA_6yvPC.js").then((n) => n.h);
1861
+ slackMediaModulePromise$1 ??= import("./actions-7_NdPFE4.js").then((n) => n.h);
1859
1862
  return slackMediaModulePromise$1;
1860
1863
  }
1861
1864
  function collectUniqueSlackMentionIds$1(texts) {
@@ -2369,7 +2372,7 @@ function formatSlackBotStarterThreadLabel(params) {
2369
2372
  //#region extensions/slack/src/monitor/message-handler/prepare-thread-context.ts
2370
2373
  let slackMediaModulePromise;
2371
2374
  function loadSlackMediaModule() {
2372
- slackMediaModulePromise ??= import("./actions-BA_6yvPC.js").then((n) => n.h);
2375
+ slackMediaModulePromise ??= import("./actions-7_NdPFE4.js").then((n) => n.h);
2373
2376
  return slackMediaModulePromise;
2374
2377
  }
2375
2378
  const SLACK_THREAD_CONTEXT_USER_LOOKUP_CONCURRENCY = 4;
@@ -1,4 +1,4 @@
1
- import { m as normalizeSlackSlug } from "./thread-ts-NSVqWybn.js";
1
+ import { m as normalizeSlackSlug } from "./thread-ts-CzxxhSE5.js";
2
2
  import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
3
3
  import { applyChannelMatchMeta, buildChannelKeyCandidates, resolveChannelEntryMatchWithFallback } from "openclaw/plugin-sdk/channel-targets";
4
4
  import { mergePairLoopGuardConfig } from "openclaw/plugin-sdk/pair-loop-guard-runtime";
@@ -1,19 +1,20 @@
1
1
  import { n as registerSlackHttpHandler, r as normalizeSlackWebhookPath } from "./registry-bbjH7IHX.js";
2
2
  import { a as resolveSlackAccount, d as resolveSlackBotToken, o as resolveSlackAccountAllowFrom, s as resolveSlackAccountDmPolicy, u as resolveSlackAppToken } from "./accounts-f6Xcv9Vi.js";
3
- import { C as isSlackAnyNativeApprovalClientEnabled, D as isSlackApprovalAuthorizedSender, b as truncateSlackText, d as normalizeAllowList, f as normalizeAllowListLower, h as resolveSlackAllowListMatch, k as isSlackExecApprovalAuthorizedSender, m as normalizeSlackSlug, p as normalizeSlackAllowOwnerEntry, s as SLACK_TEXT_LIMIT, u as allowListMatches } from "./thread-ts-NSVqWybn.js";
3
+ import { C as isSlackAnyNativeApprovalClientEnabled, D as isSlackApprovalAuthorizedSender, b as truncateSlackText, d as normalizeAllowList, f as normalizeAllowListLower, h as resolveSlackAllowListMatch, k as isSlackExecApprovalAuthorizedSender, m as normalizeSlackSlug, p as normalizeSlackAllowOwnerEntry, s as SLACK_TEXT_LIMIT, u as allowListMatches } from "./thread-ts-CzxxhSE5.js";
4
4
  import { n as isSlackInteractiveRepliesEnabled, t as compileSlackInteractiveReplies } from "./interactive-replies-DrBq4Mld.js";
5
5
  import { c as resolveSlackWebClientOptions } from "./client-qvqS9fQM.js";
6
6
  import { t as getOptionalSlackRuntime } from "./runtime-BOk7xkOl.js";
7
7
  import { t as formatSlackError } from "./errors-CZtmv-h0.js";
8
8
  import { t as resolveSlackChannelAllowlist } from "./resolve-channels-DIxJRl0F.js";
9
9
  import { t as resolveSlackUserAllowlist } from "./resolve-users-B3vczJHE.js";
10
- import { n as resolveSlackChannelConfig, r as resolveSlackChannelLabel, t as isSlackChannelAllowedByPolicy } from "./policy-BBDU-PQK.js";
10
+ import { n as resolveSlackChannelConfig, r as resolveSlackChannelLabel, t as isSlackChannelAllowedByPolicy } from "./policy-Bb46UkJW.js";
11
11
  import { normalizeResolvedSecretInputString } from "openclaw/plugin-sdk/secret-input";
12
12
  import { asOptionalRecord, normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString, normalizeStringEntries, normalizeStringEntriesLower, normalizeUniqueTrimmedStringList } from "openclaw/plugin-sdk/string-coerce-runtime";
13
13
  import { normalizeAccountId, normalizeMainKey, resolveAgentRoute, resolveThreadSessionKeys } from "openclaw/plugin-sdk/routing";
14
14
  import { createChannelMessageReplyPipeline } from "openclaw/plugin-sdk/channel-outbound";
15
15
  import { createChannelPairingChallengeIssuer } from "openclaw/plugin-sdk/channel-pairing";
16
16
  import { CHANNEL_APPROVAL_NATIVE_RUNTIME_CONTEXT_CAPABILITY } from "openclaw/plugin-sdk/approval-handler-adapter-runtime";
17
+ import { parseExecApprovalCommandText } from "openclaw/plugin-sdk/approval-reply-runtime";
17
18
  import { addAllowlistUserEntriesFromConfigEntry, buildAllowlistResolutionSummary, formatAllowlistMatchMeta, mergeAllowlist, patchAllowlistUsersInConfigEntries, summarizeMapping } from "openclaw/plugin-sdk/allow-from";
18
19
  import { computeBackoff, createNonExitingRuntime, danger, getChildLogger, logVerbose, shouldLogVerbose, sleepWithAbort, warn } from "openclaw/plugin-sdk/runtime-env";
19
20
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
@@ -37,7 +38,6 @@ import { resolveChannelConfigWrites } from "openclaw/plugin-sdk/channel-config-w
37
38
  import { mutateConfigFile } from "openclaw/plugin-sdk/config-mutation";
38
39
  import { enqueueSystemEvent } from "openclaw/plugin-sdk/system-event-runtime";
39
40
  import { resolveApprovalOverGateway } from "openclaw/plugin-sdk/approval-gateway-runtime";
40
- import { parseExecApprovalCommandText } from "openclaw/plugin-sdk/approval-reply-runtime";
41
41
  import { formatCommandArgMenuTitle, resolveCommandAuthorization, resolveNativeCommandSessionTargets, resolveStoredModelOverride } from "openclaw/plugin-sdk/command-auth-native";
42
42
  import { requestHeartbeat } from "openclaw/plugin-sdk/heartbeat-runtime";
43
43
  import { createInteractiveConversationBindingHelpers, dispatchPluginInteractiveHandler } from "openclaw/plugin-sdk/plugin-runtime";
@@ -593,23 +593,23 @@ function migrateSlackChannelConfig(params) {
593
593
  //#region extensions/slack/src/monitor/events/channels.ts
594
594
  function registerSlackChannelEvents(params) {
595
595
  const { ctx, trackEvent } = params;
596
- const enqueueChannelSystemEvent = (params) => {
596
+ const enqueueChannelSystemEvent = (paramsLocal) => {
597
597
  if (!ctx.isChannelAllowed({
598
- channelId: params.channelId,
599
- channelName: params.channelName,
598
+ channelId: paramsLocal.channelId,
599
+ channelName: paramsLocal.channelName,
600
600
  channelType: "channel"
601
601
  })) return;
602
602
  const label = resolveSlackChannelLabel({
603
- channelId: params.channelId,
604
- channelName: params.channelName
603
+ channelId: paramsLocal.channelId,
604
+ channelName: paramsLocal.channelName
605
605
  });
606
606
  const sessionKey = ctx.resolveSlackSystemEventSessionKey({
607
- channelId: params.channelId,
607
+ channelId: paramsLocal.channelId,
608
608
  channelType: "channel"
609
609
  });
610
- enqueueSystemEvent(`Slack channel ${params.kind}: ${label}.`, {
610
+ enqueueSystemEvent(`Slack channel ${paramsLocal.kind}: ${label}.`, {
611
611
  sessionKey,
612
- contextKey: `slack:channel:${params.kind}:${params.channelId ?? params.channelName ?? "unknown"}`
612
+ contextKey: `slack:channel:${paramsLocal.kind}:${paramsLocal.channelId ?? paramsLocal.channelName ?? "unknown"}`
613
613
  });
614
614
  };
615
615
  ctx.app.event("channel_created", async ({ event, body }) => {
@@ -2134,11 +2134,11 @@ async function authorizeAndResolveSlackSystemEventContext(params) {
2134
2134
  //#region extensions/slack/src/monitor/events/members.ts
2135
2135
  function registerSlackMemberEvents(params) {
2136
2136
  const { ctx, trackEvent } = params;
2137
- const handleMemberChannelEvent = async (params) => {
2137
+ const handleMemberChannelEvent = async (paramsLocal) => {
2138
2138
  try {
2139
- if (ctx.shouldDropMismatchedSlackEvent(params.body)) return;
2139
+ if (ctx.shouldDropMismatchedSlackEvent(paramsLocal.body)) return;
2140
2140
  trackEvent?.();
2141
- const payload = params.event;
2141
+ const payload = paramsLocal.event;
2142
2142
  const channelId = payload.channel;
2143
2143
  const channelInfo = channelId ? await ctx.resolveChannelName(channelId) : {};
2144
2144
  const channelType = payload.channel_type ?? channelInfo?.type;
@@ -2147,15 +2147,15 @@ function registerSlackMemberEvents(params) {
2147
2147
  senderId: payload.user,
2148
2148
  channelId,
2149
2149
  channelType,
2150
- eventKind: `member-${params.verb}`
2150
+ eventKind: `member-${paramsLocal.verb}`
2151
2151
  });
2152
2152
  if (!ingressContext) return;
2153
- enqueueSystemEvent(`Slack: ${(payload.user ? await ctx.resolveUserName(payload.user) : {})?.name ?? payload.user ?? "someone"} ${params.verb} ${ingressContext.channelLabel}.`, {
2153
+ enqueueSystemEvent(`Slack: ${(payload.user ? await ctx.resolveUserName(payload.user) : {})?.name ?? payload.user ?? "someone"} ${paramsLocal.verb} ${ingressContext.channelLabel}.`, {
2154
2154
  sessionKey: ingressContext.sessionKey,
2155
- contextKey: `slack:member:${params.verb}:${channelId ?? "unknown"}:${payload.user ?? "unknown"}`
2155
+ contextKey: `slack:member:${paramsLocal.verb}:${channelId ?? "unknown"}:${payload.user ?? "unknown"}`
2156
2156
  });
2157
2157
  } catch (err) {
2158
- ctx.runtime.error?.(danger(`slack ${params.verb} handler failed: ${formatErrorMessage(err)}`));
2158
+ ctx.runtime.error?.(danger(`slack ${paramsLocal.verb} handler failed: ${formatErrorMessage(err)}`));
2159
2159
  }
2160
2160
  };
2161
2161
  ctx.app.event("member_joined_channel", async ({ event, body }) => {
@@ -2699,7 +2699,7 @@ function createSlackThreadTsResolver(params) {
2699
2699
  //#region extensions/slack/src/monitor/message-handler.ts
2700
2700
  let slackMessagePipelinePromise;
2701
2701
  function loadSlackMessagePipeline() {
2702
- slackMessagePipelinePromise ??= import("./pipeline.runtime-Bo6reKXg.js");
2702
+ slackMessagePipelinePromise ??= import("./pipeline.runtime-Bwgko4H6.js");
2703
2703
  return slackMessagePipelinePromise;
2704
2704
  }
2705
2705
  const APP_MENTION_RETRY_TTL_MS = 6e4;
@@ -3331,7 +3331,7 @@ function loadSlashCommandsRuntime() {
3331
3331
  return slashCommandsRuntimePromise;
3332
3332
  }
3333
3333
  function loadSlashDispatchRuntime() {
3334
- slashDispatchRuntimePromise ??= import("./slash-dispatch.runtime-BKo3qtpZ.js");
3334
+ slashDispatchRuntimePromise ??= import("./slash-dispatch.runtime-DAgcv0YS.js");
3335
3335
  return slashDispatchRuntimePromise;
3336
3336
  }
3337
3337
  function loadSlackPluginCommandsRuntime() {
@@ -1,5 +1,5 @@
1
- import { r as resolveSlackReplyBlocks, s as SLACK_TEXT_LIMIT } from "./thread-ts-NSVqWybn.js";
2
- import { o as markdownToSlackMrkdwnChunks, t as sendMessageSlack } from "./send-zvrcUvp2.js";
1
+ import { r as resolveSlackReplyBlocks, s as SLACK_TEXT_LIMIT } from "./thread-ts-CzxxhSE5.js";
2
+ import { o as markdownToSlackMrkdwnChunks, t as sendMessageSlack } from "./send-ZSA5yuA_.js";
3
3
  import { createReplyReferencePlanner } from "openclaw/plugin-sdk/reply-reference";
4
4
  import { SILENT_REPLY_TOKEN, chunkMarkdownTextWithMode, isSilentReplyText } from "openclaw/plugin-sdk/reply-chunking";
5
5
  import { deliverTextOrMediaReply, resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload";
@@ -1,14 +1,14 @@
1
1
  import { t as registerSlackPluginHttpRoutes } from "./plugin-routes-B9PvcDQJ.js";
2
2
  import { a as resolveSlackAccount, d as resolveSlackBotToken, i as resolveDefaultSlackAccountId, n as listSlackAccountIds, t as listEnabledSlackAccounts, u as resolveSlackAppToken } from "./accounts-f6Xcv9Vi.js";
3
- import { c as resolveSlackGroupRequireMention, l as resolveSlackGroupToolPolicy } from "./thread-ts-NSVqWybn.js";
3
+ import { c as resolveSlackGroupRequireMention, l as resolveSlackGroupToolPolicy } from "./thread-ts-CzxxhSE5.js";
4
4
  import { n as setSlackRuntime } from "./runtime-BOk7xkOl.js";
5
- import { t as sendMessageSlack } from "./send-zvrcUvp2.js";
6
- import { a as listSlackEmojis, c as pinSlackMessage, d as removeOwnSlackReactions, f as removeSlackReaction, i as getSlackMemberInfo, l as reactSlackMessage, m as unpinSlackMessage, o as listSlackPins, p as sendSlackMessage, r as editSlackMessage, s as listSlackReactions, t as deleteSlackMessage, u as readSlackMessages } from "./actions-BA_6yvPC.js";
5
+ import { t as sendMessageSlack } from "./send-ZSA5yuA_.js";
6
+ import { a as listSlackEmojis, c as pinSlackMessage, d as removeOwnSlackReactions, f as removeSlackReaction, i as getSlackMemberInfo, l as reactSlackMessage, m as unpinSlackMessage, o as listSlackPins, p as sendSlackMessage, r as editSlackMessage, s as listSlackReactions, t as deleteSlackMessage, u as readSlackMessages } from "./actions-7_NdPFE4.js";
7
7
  import { t as probeSlack } from "./probe-DczaQTdi.js";
8
8
  import { t as resolveSlackChannelAllowlist } from "./resolve-channels-DIxJRl0F.js";
9
9
  import { t as resolveSlackUserAllowlist } from "./resolve-users-B3vczJHE.js";
10
- import { t as monitorSlackProvider } from "./provider-DNfFBEzl.js";
11
- import { n as slackActionRuntime, t as handleSlackAction } from "./action-runtime-DEztkt37.js";
10
+ import { t as monitorSlackProvider } from "./provider-9lXc1Ecr.js";
11
+ import { n as slackActionRuntime, t as handleSlackAction } from "./action-runtime-CSrP2K6r.js";
12
12
  import { n as listSlackDirectoryGroupsLive, r as listSlackDirectoryPeersLive } from "./directory-live-WZwhRYe2.js";
13
- import "./monitor-D5FVBchh.js";
13
+ import "./monitor-uZMv2kXU.js";
14
14
  export { deleteSlackMessage, editSlackMessage, getSlackMemberInfo, handleSlackAction, listEnabledSlackAccounts, listSlackAccountIds, listSlackDirectoryGroupsLive, listSlackDirectoryPeersLive, listSlackEmojis, listSlackPins, listSlackReactions, monitorSlackProvider, pinSlackMessage, probeSlack, reactSlackMessage, readSlackMessages, registerSlackPluginHttpRoutes, removeOwnSlackReactions, removeSlackReaction, resolveDefaultSlackAccountId, resolveSlackAccount, resolveSlackAppToken, resolveSlackBotToken, resolveSlackChannelAllowlist, resolveSlackGroupRequireMention, resolveSlackGroupToolPolicy, resolveSlackUserAllowlist, sendMessageSlack, sendSlackMessage, setSlackRuntime, slackActionRuntime, unpinSlackMessage };
@@ -1,7 +1,7 @@
1
1
  import { a as resolveSlackAccount, d as resolveSlackBotToken } from "./accounts-f6Xcv9Vi.js";
2
2
  import { r as parseSlackTarget } from "./target-parsing-C7eeWg7M.js";
3
3
  import "./targets-nUqxHGgg.js";
4
- import { b as truncateSlackText, o as validateSlackBlocksArray, s as SLACK_TEXT_LIMIT, t as normalizeSlackThreadTsCandidate } from "./thread-ts-NSVqWybn.js";
4
+ import { b as truncateSlackText, o as validateSlackBlocksArray, s as SLACK_TEXT_LIMIT, t as normalizeSlackThreadTsCandidate } from "./thread-ts-CzxxhSE5.js";
5
5
  import { a as getSlackWriteClient, n as createSlackTokenCacheKey } from "./client-qvqS9fQM.js";
6
6
  import { t as getOptionalSlackRuntime } from "./runtime-BOk7xkOl.js";
7
7
  import { i as loadOutboundMediaFromUrl } from "./runtime-api-BpGQDSTg.js";
@@ -0,0 +1,2 @@
1
+ import { t as sendMessageSlack } from "./send-ZSA5yuA_.js";
2
+ export { sendMessageSlack };
@@ -1,4 +1,4 @@
1
- import { r as deliverSlackSlashReplies$1 } from "./replies-BmFpkBXm.js";
1
+ import { r as deliverSlackSlashReplies$1 } from "./replies-DJglavBP.js";
2
2
  import { resolveAgentRoute as resolveAgentRoute$1 } from "openclaw/plugin-sdk/routing";
3
3
  import { resolveMarkdownTableMode as resolveMarkdownTableMode$1 } from "openclaw/plugin-sdk/markdown-table-runtime";
4
4
  import { recordInboundSessionMetaSafe as recordInboundSessionMetaSafe$1, resolveConversationLabel as resolveConversationLabel$1 } from "openclaw/plugin-sdk/conversation-runtime";
@@ -5,7 +5,8 @@ import { normalizeMessageChannel } from "openclaw/plugin-sdk/routing";
5
5
  import { doesApprovalRequestMatchChannelAccount, resolveApprovalRequestSessionConversation } from "openclaw/plugin-sdk/approval-native-runtime";
6
6
  import { createResolvedApproverActionAuthAdapter, resolveApprovalApprovers } from "openclaw/plugin-sdk/approval-auth-runtime";
7
7
  import { createChannelExecApprovalProfile, isChannelExecApprovalClientEnabledFromConfig, isChannelExecApprovalTargetRecipient, matchesApprovalRequestFilters } from "openclaw/plugin-sdk/approval-client-runtime";
8
- import { reduceInteractiveReply } from "openclaw/plugin-sdk/interactive-runtime";
8
+ import { reduceInteractiveReply, resolveMessagePresentationControlValue } from "openclaw/plugin-sdk/interactive-runtime";
9
+ import { parseExecApprovalCommandText } from "openclaw/plugin-sdk/approval-reply-runtime";
9
10
  import { compileAllowlist, resolveCompiledAllowlistMatch } from "openclaw/plugin-sdk/allow-from";
10
11
  import { normalizeHyphenSlug, normalizeStringEntries as normalizeStringEntries$1, normalizeStringEntriesLower as normalizeStringEntriesLower$1 } from "openclaw/plugin-sdk/string-normalization-runtime";
11
12
  import { resolveToolsBySender } from "openclaw/plugin-sdk/channel-policy";
@@ -265,9 +266,21 @@ function resolveSlackButtonStyle(style) {
265
266
  if (style === "primary" || style === "danger") return style;
266
267
  if (style === "success") return "primary";
267
268
  }
269
+ function resolveSlackControlValue(control) {
270
+ if (control.action?.type === "command") {
271
+ const command = normalizeOptionalString(control.action.command);
272
+ if (command && parseExecApprovalCommandText(command)) return command;
273
+ const legacyValue = normalizeOptionalString(control.value);
274
+ return legacyValue && parseExecApprovalCommandText(legacyValue) ? legacyValue : void 0;
275
+ }
276
+ return resolveMessagePresentationControlValue(control);
277
+ }
268
278
  function isWithinSlackLimit(value, maxLength) {
269
279
  return value.length <= maxLength;
270
280
  }
281
+ function isRenderableSlackOption(option) {
282
+ return option.value !== void 0 && isWithinSlackLimit(option.value, SLACK_OPTION_VALUE_MAX);
283
+ }
271
284
  function readSlackBlockId(block) {
272
285
  const value = block.block_id;
273
286
  return typeof value === "string" ? value : void 0;
@@ -315,7 +328,8 @@ function buildSlackInteractiveBlocks(interactive, options = {}) {
315
328
  }
316
329
  if (block.type === "buttons") {
317
330
  const elements = block.buttons.flatMap((button, choiceIndex) => {
318
- const value = button.value && isWithinSlackLimit(button.value, SLACK_BUTTON_VALUE_MAX) ? button.value : void 0;
331
+ const callbackData = resolveSlackControlValue(button);
332
+ const value = callbackData && isWithinSlackLimit(callbackData, SLACK_BUTTON_VALUE_MAX) ? callbackData : void 0;
319
333
  const url = button.url && isWithinSlackLimit(button.url, SLACK_BUTTON_URL_MAX) ? button.url : void 0;
320
334
  if (!value && !url) return [];
321
335
  const style = resolveSlackButtonStyle(button.style);
@@ -340,8 +354,11 @@ function buildSlackInteractiveBlocks(interactive, options = {}) {
340
354
  });
341
355
  return state;
342
356
  }
343
- const options = block.options.filter((option) => isWithinSlackLimit(option.value, SLACK_OPTION_VALUE_MAX)).slice(0, SLACK_STATIC_SELECT_OPTIONS_MAX);
344
- if (options.length === 0) return state;
357
+ const optionsLocal = block.options.map((option) => ({
358
+ label: option.label,
359
+ value: resolveSlackControlValue(option)
360
+ })).filter(isRenderableSlackOption).slice(0, SLACK_STATIC_SELECT_OPTIONS_MAX);
361
+ if (optionsLocal.length === 0) return state;
345
362
  state.blocks.push({
346
363
  type: "actions",
347
364
  block_id: `openclaw_reply_select_${++state.selectIndex}`,
@@ -353,7 +370,7 @@ function buildSlackInteractiveBlocks(interactive, options = {}) {
353
370
  text: truncateSlackText(normalizeOptionalString(block.placeholder) ?? "Choose an option", SLACK_PLAIN_TEXT_MAX),
354
371
  emoji: true
355
372
  },
356
- options: options.map((option, _choiceIndex) => ({
373
+ options: optionsLocal.map((option, _choiceIndex) => ({
357
374
  text: {
358
375
  type: "plain_text",
359
376
  text: truncateSlackText(option.label, SLACK_PLAIN_TEXT_MAX),
@@ -423,7 +440,8 @@ function buildSlackPresentationBlocks(presentation, options = {}) {
423
440
  }
424
441
  function buildSlackPresentationButtonBlock(block, buttonIndex) {
425
442
  const elements = block.buttons.flatMap((button, choiceIndex) => {
426
- const value = button.value && isWithinSlackLimit(button.value, SLACK_BUTTON_VALUE_MAX) ? button.value : void 0;
443
+ const callbackData = resolveSlackControlValue(button);
444
+ const value = callbackData && isWithinSlackLimit(callbackData, SLACK_BUTTON_VALUE_MAX) ? callbackData : void 0;
427
445
  const url = button.url && isWithinSlackLimit(button.url, SLACK_BUTTON_URL_MAX) ? button.url : void 0;
428
446
  if (!value && !url) return [];
429
447
  const style = resolveSlackButtonStyle(button.style);
@@ -447,7 +465,10 @@ function buildSlackPresentationButtonBlock(block, buttonIndex) {
447
465
  } : void 0;
448
466
  }
449
467
  function buildSlackPresentationSelectBlock(block, selectIndex) {
450
- const options = block.options.filter((option) => isWithinSlackLimit(option.value, SLACK_OPTION_VALUE_MAX)).slice(0, SLACK_STATIC_SELECT_OPTIONS_MAX);
468
+ const options = block.options.map((option) => ({
469
+ label: option.label,
470
+ value: resolveSlackControlValue(option)
471
+ })).filter(isRenderableSlackOption).slice(0, SLACK_STATIC_SELECT_OPTIONS_MAX);
451
472
  return options.length > 0 ? {
452
473
  type: "actions",
453
474
  block_id: `openclaw_reply_select_${selectIndex}`,
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@openclaw/slack",
3
- "version": "2026.5.31-beta.1",
3
+ "version": "2026.5.31-beta.3",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@openclaw/slack",
9
- "version": "2026.5.31-beta.1",
9
+ "version": "2026.5.31-beta.3",
10
10
  "dependencies": {
11
11
  "@slack/bolt": "4.7.3",
12
12
  "@slack/types": "2.21.1",
@@ -15,7 +15,7 @@
15
15
  "zod": "4.4.3"
16
16
  },
17
17
  "peerDependencies": {
18
- "openclaw": ">=2026.5.31-beta.1"
18
+ "openclaw": ">=2026.5.31-beta.3"
19
19
  },
20
20
  "peerDependenciesMeta": {
21
21
  "openclaw": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/slack",
3
- "version": "2026.5.31-beta.1",
3
+ "version": "2026.5.31-beta.3",
4
4
  "description": "OpenClaw Slack channel plugin for channels, DMs, commands, and app events.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -15,7 +15,7 @@
15
15
  "zod": "4.4.3"
16
16
  },
17
17
  "peerDependencies": {
18
- "openclaw": ">=2026.5.31-beta.1"
18
+ "openclaw": ">=2026.5.31-beta.3"
19
19
  },
20
20
  "peerDependenciesMeta": {
21
21
  "openclaw": {
@@ -60,13 +60,13 @@
60
60
  "allowInvalidConfigRecovery": true
61
61
  },
62
62
  "compat": {
63
- "pluginApi": ">=2026.5.31-beta.1"
63
+ "pluginApi": ">=2026.5.31-beta.3"
64
64
  },
65
65
  "startup": {
66
66
  "deferConfiguredChannelFullLoadUntilAfterListen": true
67
67
  },
68
68
  "build": {
69
- "openclawVersion": "2026.5.31-beta.1",
69
+ "openclawVersion": "2026.5.31-beta.3",
70
70
  "bundledDist": false
71
71
  },
72
72
  "release": {
@@ -81,7 +81,8 @@
81
81
  "files": [
82
82
  "dist/**",
83
83
  "openclaw.plugin.json",
84
- "npm-shrinkwrap.json"
84
+ "npm-shrinkwrap.json",
85
+ "README.md"
85
86
  ],
86
87
  "bundledDependencies": [
87
88
  "@slack/bolt",
@@ -1,2 +0,0 @@
1
- import { t as handleSlackAction } from "./action-runtime-DEztkt37.js";
2
- export { handleSlackAction };
@@ -1,2 +0,0 @@
1
- import { t as sendMessageSlack } from "./send-zvrcUvp2.js";
2
- export { sendMessageSlack };