@openclaw/slack 2026.6.8 → 2026.6.9-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/{action-runtime-CgrHdqkC.js → action-runtime-E614LMrR.js} +10 -20
  2. package/dist/action-runtime.runtime-7FY7XZa3.js +2 -0
  3. package/dist/{actions-YkhEE5f1.js → actions-C2HjraXv.js} +3 -3
  4. package/dist/{actions.runtime-DyVzqzLc.js → actions.runtime-9HYdoYvN.js} +1 -1
  5. package/dist/api.js +12 -12
  6. package/dist/{approval-handler.runtime-KWkR1mEG.js → approval-handler.runtime-BuE470KE.js} +2 -2
  7. package/dist/{channel-BxD37X5Y.js → channel-DNL5oO9B.js} +35 -30
  8. package/dist/channel-plugin-api.js +1 -1
  9. package/dist/{channel.setup-W5YnieWd.js → channel.setup-WLGVcaSf.js} +1 -1
  10. package/dist/{client-Cn2WwpcA.js → client-DhaHONzg.js} +1 -1
  11. package/dist/{directory-config-8UPAEyNg.js → directory-config-Dmhi8ECy.js} +2 -2
  12. package/dist/directory-contract-api.js +1 -1
  13. package/dist/{directory-live-C1acgXKJ.js → directory-live-D_pIXtL1.js} +1 -1
  14. package/dist/{message-tool-api-B9M0zzlQ.js → message-tool-api-NLAYFat2.js} +18 -1
  15. package/dist/message-tool-api.js +1 -1
  16. package/dist/{monitor-DwDmBYfl.js → monitor-BMC1e8-1.js} +3 -3
  17. package/dist/{outbound-adapter-DvXnHfDP.js → outbound-adapter-BcTq1zQP.js} +3 -2
  18. package/dist/{pipeline.runtime-1FYOQOt_.js → pipeline.runtime-ByBVsuvQ.js} +16 -13
  19. package/dist/{policy-DT3mRh58.js → policy-Dfbxkneh.js} +1 -1
  20. package/dist/{probe-BTKzLT2u.js → probe-C3PL00Ms.js} +1 -1
  21. package/dist/{provider-ChhYGpXx.js → provider-CxePoDl1.js} +20 -27
  22. package/dist/{replies-Bt4nWmSd.js → replies-C_dlJ8Aw.js} +2 -2
  23. package/dist/{thread-ts-Cffag8e2.js → reply-blocks-DSfujQlj.js} +4 -15
  24. package/dist/{resolve-channels-DX2GSx9c.js → resolve-channels-DNiE0Z0_.js} +1 -1
  25. package/dist/{resolve-users-DOULgUwy.js → resolve-users-D_TmaIfG.js} +1 -1
  26. package/dist/{runtime-api-DudG6lbf.js → runtime-api-DYg05-Op.js} +2 -2
  27. package/dist/runtime-api.js +10 -10
  28. package/dist/{scopes-CErQL0td.js → scopes-CR4oXiXN.js} +1 -1
  29. package/dist/{send-rekB-Xjp.js → send-CTnNcQeb.js} +6 -5
  30. package/dist/send.runtime-nW-v-Zc0.js +2 -0
  31. package/dist/setup-plugin-api.js +1 -1
  32. package/dist/{setup-surface-NNMjGpXc.js → setup-surface-BHsOhTJd.js} +3 -3
  33. package/dist/{shared-Bkkmro6q.js → shared-BxzdaqOc.js} +1 -1
  34. package/dist/{slash-dispatch.runtime-Dvvs747S.js → slash-dispatch.runtime-9VbEQ9-6.js} +1 -1
  35. package/dist/{target-parsing-C7eeWg7M.js → target-parsing-3jYH8LfB.js} +6 -1
  36. package/dist/targets-Dll4NJgs.js +13 -0
  37. package/dist/thread-ts-DUGhaYKq.js +13 -0
  38. package/node_modules/semver/classes/range.js +11 -2
  39. package/node_modules/semver/package.json +2 -2
  40. package/npm-shrinkwrap.json +6 -6
  41. package/package.json +4 -4
  42. package/dist/action-runtime.runtime-D05xDf1s.js +0 -2
  43. package/dist/send.runtime-DGyqPLWj.js +0 -2
  44. package/dist/targets-nUqxHGgg.js +0 -2
@@ -1,9 +1,8 @@
1
- import { i as resolveSlackChannelId, r as parseSlackTarget } from "./target-parsing-C7eeWg7M.js";
2
- import "./targets-nUqxHGgg.js";
3
- import { a as parseSlackBlocksInput } from "./thread-ts-Cffag8e2.js";
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-DudG6lbf.js";
5
- import { n as resolveSlackChannelConfig, t as isSlackChannelAllowedByPolicy } from "./policy-DT3mRh58.js";
6
- import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
1
+ import { i as resolveSlackChannelId } from "./target-parsing-3jYH8LfB.js";
2
+ import { t as slackContextTargetsMatch } from "./targets-Dll4NJgs.js";
3
+ import { r as parseSlackBlocksInput } from "./reply-blocks-DSfujQlj.js";
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-DYg05-Op.js";
5
+ import { n as resolveSlackChannelConfig, t as isSlackChannelAllowedByPolicy } from "./policy-Dfbxkneh.js";
7
6
  import { isSingleUseReplyToMode } from "openclaw/plugin-sdk/reply-reference";
8
7
  import { readBooleanParam } from "openclaw/plugin-sdk/boolean-param";
9
8
  import { resolveOpenProviderRuntimeGroupPolicy } from "openclaw/plugin-sdk/runtime-group-policy";
@@ -22,15 +21,10 @@ const pinActions = new Set([
22
21
  "unpinMessage",
23
22
  "listPins"
24
23
  ]);
25
- function sameSlackChannelTarget(targetChannel, currentChannelId) {
26
- const parsedTarget = parseSlackTarget(targetChannel, { defaultKind: "channel" });
27
- if (!parsedTarget || parsedTarget.kind !== "channel") return false;
28
- return normalizeLowercaseStringOrEmpty(parsedTarget.id) === normalizeLowercaseStringOrEmpty(currentChannelId);
29
- }
30
24
  let slackActionsRuntimePromise;
31
25
  let slackAccountsRuntimePromise;
32
26
  function loadSlackActionsRuntime() {
33
- slackActionsRuntimePromise ??= import("./actions.runtime-DyVzqzLc.js");
27
+ slackActionsRuntimePromise ??= import("./actions.runtime-9HYdoYvN.js");
34
28
  return slackActionsRuntimePromise;
35
29
  }
36
30
  function loadSlackAccountsRuntime() {
@@ -69,8 +63,8 @@ const slackActionRuntime = {
69
63
  function resolveThreadTsFromContext(explicitThreadTs, targetChannel, context, opts) {
70
64
  if (explicitThreadTs) return explicitThreadTs;
71
65
  if (opts?.suppressImplicitThread) return;
72
- if (!context?.currentChannelId) return;
73
- if (!sameSlackChannelTarget(targetChannel, context.currentChannelId)) return;
66
+ if (!context?.currentChannelId && !context?.currentMessagingTarget) return;
67
+ if (!slackContextTargetsMatch(targetChannel, context)) return;
74
68
  if (!context.currentThreadTs) {
75
69
  if (context.sameChannelThreadRequired) throw new Error("Slack thread context is required for same-channel replies from a threaded Slack turn. Set topLevel=true or threadId=null to post at the channel root.");
76
70
  return;
@@ -207,9 +201,7 @@ async function handleSlackAction(params, cfg, context) {
207
201
  mediaUrl: mediaUrl ?? void 0,
208
202
  blocks
209
203
  });
210
- if (context?.hasRepliedRef && context.currentChannelId) {
211
- if (sameSlackChannelTarget(to, context.currentChannelId)) context.hasRepliedRef.value = true;
212
- }
204
+ if (context?.hasRepliedRef && slackContextTargetsMatch(to, context)) context.hasRepliedRef.value = true;
213
205
  return jsonResult({
214
206
  ok: true,
215
207
  result
@@ -235,9 +227,7 @@ async function handleSlackAction(params, cfg, context) {
235
227
  ...filename ? { uploadFileName: filename } : {},
236
228
  ...title ? { uploadTitle: title } : {}
237
229
  });
238
- if (context?.hasRepliedRef && context.currentChannelId) {
239
- if (sameSlackChannelTarget(to, context.currentChannelId)) context.hasRepliedRef.value = true;
240
- }
230
+ if (context?.hasRepliedRef && slackContextTargetsMatch(to, context)) context.hasRepliedRef.value = true;
241
231
  return jsonResult({
242
232
  ok: true,
243
233
  result
@@ -0,0 +1,2 @@
1
+ import { t as handleSlackAction } from "./action-runtime-E614LMrR.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-Cffag8e2.js";
4
- import { a as getSlackWriteClient, r as createSlackWebClient } from "./client-Cn2WwpcA.js";
5
- import { c as buildSlackBlocksFallbackText, t as sendMessageSlack } from "./send-rekB-Xjp.js";
3
+ import { a as SLACK_TEXT_LIMIT, i as validateSlackBlocksArray, v as truncateSlackText } from "./reply-blocks-DSfujQlj.js";
4
+ import { a as getSlackWriteClient, r as createSlackWebClient } from "./client-DhaHONzg.js";
5
+ import { c as buildSlackBlocksFallbackText, t as sendMessageSlack } from "./send-CTnNcQeb.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-YkhEE5f1.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-C2HjraXv.js";
2
2
  export { deleteSlackMessage, downloadSlackFile, editSlackMessage, getSlackMemberInfo, listSlackEmojis, listSlackPins, listSlackReactions, pinSlackMessage, reactSlackMessage, readSlackMessages, removeOwnSlackReactions, removeSlackReaction, sendSlackMessage, unpinSlackMessage };
package/dist/api.js CHANGED
@@ -1,18 +1,18 @@
1
1
  import { n as registerSlackHttpHandler, r as normalizeSlackWebhookPath, t as handleSlackHttpRequest } from "./registry-bbjH7IHX.js";
2
2
  import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId, l as resolveSlackReplyToMode, n as listSlackAccountIds, r as mergeSlackAccountConfig, t as listEnabledSlackAccounts } from "./accounts-f6Xcv9Vi.js";
3
3
  import { t as inspectSlackAccount } from "./account-inspect-CdGk6R7l.js";
4
- import { i as resolveSlackChannelId, n as normalizeSlackMessagingTarget, r as parseSlackTarget, t as looksLikeSlackTargetId } from "./target-parsing-C7eeWg7M.js";
5
- import "./targets-nUqxHGgg.js";
6
- import { a as resolveSlackAutoThreadId, i as resolveSlackChannelType, n as buildSlackThreadingToolContext, r as resetSlackChannelTypeCacheForTest, t as slackPlugin } from "./channel-BxD37X5Y.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-Cffag8e2.js";
8
- 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-Cn2WwpcA.js";
9
- import { n as extractSlackToolSend, r as listSlackMessageActions } from "./message-tool-api-B9M0zzlQ.js";
4
+ import { i as resolveSlackChannelId, n as normalizeSlackMessagingTarget, r as parseSlackTarget, t as looksLikeSlackTargetId } from "./target-parsing-3jYH8LfB.js";
5
+ import "./targets-Dll4NJgs.js";
6
+ import { a as resolveSlackAutoThreadId, i as resolveSlackChannelType, n as buildSlackThreadingToolContext, r as resetSlackChannelTypeCacheForTest, t as slackPlugin } from "./channel-DNL5oO9B.js";
7
+ import { c as allowListMatches, d as normalizeSlackAllowOwnerEntry, f as normalizeSlackSlug, g as buildSlackPresentationBlocks, h as buildSlackInteractiveBlocks, i as validateSlackBlocksArray, l as normalizeAllowList, m as resolveSlackUserAllowed, n as SLACK_MAX_BLOCKS, o as resolveSlackGroupRequireMention, p as resolveSlackAllowListMatch, r as parseSlackBlocksInput, s as resolveSlackGroupToolPolicy, u as normalizeAllowListLower } from "./reply-blocks-DSfujQlj.js";
8
+ 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-DhaHONzg.js";
9
+ import { n as extractSlackToolSend, r as listSlackMessageActions } from "./message-tool-api-NLAYFat2.js";
10
10
  import { n as isSlackInteractiveRepliesEnabled, r as parseSlackOptionsLine, t as compileSlackInteractiveReplies } from "./interactive-replies-DrBq4Mld.js";
11
- import { t as slackSetupPlugin } from "./channel.setup-W5YnieWd.js";
12
- import { a as recordSlackThreadParticipation, n as clearSlackThreadParticipationCache, r as hasSlackThreadParticipation } from "./send-rekB-Xjp.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-YkhEE5f1.js";
14
- import { n as listSlackDirectoryGroupsFromConfig, r as listSlackDirectoryPeersFromConfig } from "./directory-config-8UPAEyNg.js";
15
- import { t as probeSlack } from "./probe-BTKzLT2u.js";
11
+ import { t as slackSetupPlugin } from "./channel.setup-WLGVcaSf.js";
12
+ import { a as recordSlackThreadParticipation, n as clearSlackThreadParticipationCache, r as hasSlackThreadParticipation } from "./send-CTnNcQeb.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-C2HjraXv.js";
14
+ import { n as listSlackDirectoryGroupsFromConfig, r as listSlackDirectoryPeersFromConfig } from "./directory-config-Dmhi8ECy.js";
15
+ import { t as probeSlack } from "./probe-C3PL00Ms.js";
16
16
  import { t as collectSlackSecurityAuditFindings } from "./security-audit-CikQhBUY.js";
17
- import { n as resolveSlackRuntimeGroupPolicy } from "./provider-ChhYGpXx.js";
17
+ import { n as resolveSlackRuntimeGroupPolicy } from "./provider-CxePoDl1.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,5 +1,5 @@
1
- import { O as resolveSlackApprovalKind, b as truncateSlackText, j as shouldHandleSlackNativeApprovalRequest, r as resolveSlackReplyBlocks, w as isSlackAnyNativeApprovalClientEnabled, z as normalizeSlackApproverId } from "./thread-ts-Cffag8e2.js";
2
- import { t as sendMessageSlack } from "./send-rekB-Xjp.js";
1
+ import { E as resolveSlackApprovalKind, L as normalizeSlackApproverId, S as isSlackAnyNativeApprovalClientEnabled, k as shouldHandleSlackNativeApprovalRequest, t as resolveSlackReplyBlocks, v as truncateSlackText } from "./reply-blocks-DSfujQlj.js";
2
+ import { t as sendMessageSlack } from "./send-CTnNcQeb.js";
3
3
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  import { buildChannelApprovalNativeTargetKey } from "openclaw/plugin-sdk/approval-native-runtime";
5
5
  import { buildApprovalPresentationFromActionDescriptors } from "openclaw/plugin-sdk/approval-reply-runtime";
@@ -1,12 +1,13 @@
1
1
  import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId, l as resolveSlackReplyToMode, n as listSlackAccountIds, o as resolveSlackAccountAllowFrom } from "./accounts-f6Xcv9Vi.js";
2
- import { i as resolveSlackChannelId, n as normalizeSlackMessagingTarget, r as parseSlackTarget, t as looksLikeSlackTargetId } from "./target-parsing-C7eeWg7M.js";
3
- import "./targets-nUqxHGgg.js";
4
- import { A as resolveTurnSourceSlackOriginTarget, B as resolveSlackExecApprovalTarget, C as hasSlackPluginApprovers, D as resolveSessionSlackOriginTarget, E as normalizeSlackOriginTarget, F as isSlackApprovalAuthorizedSender, I as getSlackExecApprovalApprovers, L as isSlackExecApprovalAuthorizedSender, M as shouldHandleSlackPluginViaForwardingSession, N as slackTargetsMatch, O as resolveSlackApprovalKind, P as getSlackApprovalApprovers, R as isSlackExecApprovalClientEnabled, T as normalizeSlackForwardTarget, V as shouldSuppressLocalSlackExecApprovalPrompt, _ as buildSlackInteractiveBlocks, c as resolveSlackGroupRequireMention, f as normalizeAllowListLower, j as shouldHandleSlackNativeApprovalRequest, k as resolveSlackFallbackOriginTarget, l as resolveSlackGroupToolPolicy, n as resolveSlackThreadTsValue, r as resolveSlackReplyBlocks, s as SLACK_TEXT_LIMIT, t as normalizeSlackThreadTsCandidate, v as buildSlackPresentationBlocks, w as isSlackAnyNativeApprovalClientEnabled, y as resolveSlackInteractiveBlockOffsets } from "./thread-ts-Cffag8e2.js";
5
- import { d as PAIRING_APPROVED_MESSAGE, h as isSlackPluginAccountConfigured, m as resolveConfiguredFromRequiredCredentialStatuses, p as projectCredentialSnapshotFields, r as createSlackWebClient, u as DEFAULT_ACCOUNT_ID } from "./client-Cn2WwpcA.js";
6
- import { n as extractSlackToolSend, t as describeSlackMessageTool } from "./message-tool-api-B9M0zzlQ.js";
2
+ import { i as resolveSlackChannelId, n as normalizeSlackMessagingTarget, r as parseSlackTarget, t as looksLikeSlackTargetId } from "./target-parsing-3jYH8LfB.js";
3
+ import { t as slackContextTargetsMatch } from "./targets-Dll4NJgs.js";
4
+ import { A as shouldHandleSlackPluginViaForwardingSession, C as normalizeSlackForwardTarget, D as resolveSlackFallbackOriginTarget, E as resolveSlackApprovalKind, F as isSlackExecApprovalAuthorizedSender, I as isSlackExecApprovalClientEnabled, M as getSlackApprovalApprovers, N as isSlackApprovalAuthorizedSender, O as resolveTurnSourceSlackOriginTarget, P as getSlackExecApprovalApprovers, R as resolveSlackExecApprovalTarget, S as isSlackAnyNativeApprovalClientEnabled, T as resolveSessionSlackOriginTarget, _ as resolveSlackInteractiveBlockOffsets, a as SLACK_TEXT_LIMIT, g as buildSlackPresentationBlocks, h as buildSlackInteractiveBlocks, j as slackTargetsMatch, k as shouldHandleSlackNativeApprovalRequest, o as resolveSlackGroupRequireMention, s as resolveSlackGroupToolPolicy, t as resolveSlackReplyBlocks, u as normalizeAllowListLower, w as normalizeSlackOriginTarget, x as hasSlackPluginApprovers, z as shouldSuppressLocalSlackExecApprovalPrompt } from "./reply-blocks-DSfujQlj.js";
5
+ import { d as PAIRING_APPROVED_MESSAGE, h as isSlackPluginAccountConfigured, m as resolveConfiguredFromRequiredCredentialStatuses, p as projectCredentialSnapshotFields, r as createSlackWebClient, u as DEFAULT_ACCOUNT_ID } from "./client-DhaHONzg.js";
6
+ import { n as resolveSlackThreadTsValue, t as normalizeSlackThreadTsCandidate } from "./thread-ts-DUGhaYKq.js";
7
+ import { n as extractSlackToolSend, t as describeSlackMessageTool } from "./message-tool-api-NLAYFat2.js";
7
8
  import { n as isSlackInteractiveRepliesEnabled, t as compileSlackInteractiveReplies } from "./interactive-replies-DrBq4Mld.js";
8
9
  import { t as getOptionalSlackRuntime } from "./runtime-BOk7xkOl.js";
9
- import { n as slackConfigAdapter, r as slackSecurityAdapter, t as createSlackPluginBase } from "./shared-Bkkmro6q.js";
10
+ import { n as slackConfigAdapter, r as slackSecurityAdapter, t as createSlackPluginBase } from "./shared-BxzdaqOc.js";
10
11
  import { i as SLACK_CHANNEL, n as createSlackSetupWizardProxy, r as slackSetupAdapter } from "./setup-core-POfI_bgP.js";
11
12
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
12
13
  import { adaptScopedAccountAccessor } from "openclaw/plugin-sdk/channel-config-helpers";
@@ -29,10 +30,8 @@ import { readPositiveIntegerParam, readStringParam } from "openclaw/plugin-sdk/p
29
30
  //#region extensions/slack/src/action-threading.ts
30
31
  function resolveSlackAutoThreadId(params) {
31
32
  const context = params.toolContext;
32
- if (!context?.currentChannelId) return;
33
- const parsedTarget = parseSlackTarget(params.to, { defaultKind: "channel" });
34
- if (!parsedTarget || parsedTarget.kind !== "channel") return;
35
- if (normalizeLowercaseStringOrEmpty(parsedTarget.id) !== normalizeLowercaseStringOrEmpty(context.currentChannelId)) return;
33
+ if (!context?.currentChannelId && !context?.currentMessagingTarget) return;
34
+ if (!slackContextTargetsMatch(params.to, context)) return;
36
35
  if (!context.currentThreadTs) {
37
36
  if (context.sameChannelThreadRequired) throw new Error("Slack thread context is required for same-channel replies from a threaded Slack turn. Set topLevel=true or threadId=null to post at the channel root.");
38
37
  return;
@@ -133,7 +132,7 @@ const baseSlackApprovalCapability = createApproverRestrictedNativeApprovalCapabi
133
132
  approvalKind: resolveSlackApprovalKind(request),
134
133
  request
135
134
  }),
136
- load: async () => (await import("./approval-handler.runtime-KWkR1mEG.js")).slackApprovalNativeRuntime
135
+ load: async () => (await import("./approval-handler.runtime-BuE470KE.js")).slackApprovalNativeRuntime
137
136
  })
138
137
  });
139
138
  const baseSlackNativeAdapter = baseSlackApprovalCapability.native;
@@ -355,7 +354,7 @@ const SLACK_TOOL_DELIVERY_ACTIONS = new Set([
355
354
  "uploadFile"
356
355
  ]);
357
356
  async function loadSlackActionRuntime$1() {
358
- slackActionRuntimePromise$1 ??= import("./action-runtime.runtime-D05xDf1s.js");
357
+ slackActionRuntimePromise$1 ??= import("./action-runtime.runtime-7FY7XZa3.js");
359
358
  return await slackActionRuntimePromise$1;
360
359
  }
361
360
  function resolveSlackActionContext(params) {
@@ -472,8 +471,10 @@ function buildSlackThreadingToolContext(params) {
472
471
  const currentThreadTs = messageThreadTs ?? transportThreadTs ?? replyToThreadTs;
473
472
  const hasExplicitThreadTarget = messageThreadTs != null || transportThreadTs != null || replyToThreadTs != null && currentMessageTs != null && replyToThreadTs !== currentMessageTs;
474
473
  const effectiveReplyToMode = hasExplicitThreadTarget ? "all" : configuredReplyToMode;
474
+ const currentMessagingTarget = normalizeOptionalString(params.context.To);
475
475
  return {
476
- currentChannelId: params.context.To?.startsWith("channel:") ? params.context.To.slice(8) : normalizeOptionalString(params.context.NativeChannelId),
476
+ currentChannelId: currentMessagingTarget?.startsWith("channel:") ? currentMessagingTarget.slice(8) : normalizeOptionalString(params.context.NativeChannelId) ?? currentMessagingTarget,
477
+ currentMessagingTarget,
477
478
  currentThreadTs,
478
479
  replyToMode: effectiveReplyToMode,
479
480
  hasRepliedRef: params.hasRepliedRef,
@@ -486,9 +487,9 @@ const EXTENSION_SHARED_MODULE_ID = "openclaw/plugin-sdk/extension-shared";
486
487
  const TARGET_RESOLVER_RUNTIME_MODULE_ID = "openclaw/plugin-sdk/target-resolver-runtime";
487
488
  const loadExtensionSharedSdk = createLazyRuntimeModule(() => import(EXTENSION_SHARED_MODULE_ID));
488
489
  const loadTargetResolverRuntimeSdk = createLazyRuntimeModule(() => import(TARGET_RESOLVER_RUNTIME_MODULE_ID));
489
- const loadSlackSetupSurfaceModule = createLazyRuntimeModule(() => import("./setup-surface-NNMjGpXc.js"));
490
- const loadSlackScopesModule = createLazyRuntimeModule(() => import("./scopes-CErQL0td.js"));
491
- const loadSlackOutboundAdapterModule = createLazyRuntimeModule(() => import("./outbound-adapter-DvXnHfDP.js"));
490
+ const loadSlackSetupSurfaceModule = createLazyRuntimeModule(() => import("./setup-surface-BHsOhTJd.js"));
491
+ const loadSlackScopesModule = createLazyRuntimeModule(() => import("./scopes-CR4oXiXN.js"));
492
+ const loadSlackOutboundAdapterModule = createLazyRuntimeModule(() => import("./outbound-adapter-BcTq1zQP.js"));
492
493
  async function resolveSlackHandleAction() {
493
494
  return getOptionalSlackRuntime()?.channel?.slack?.handleSlackAction ?? (await loadSlackActionRuntime()).handleSlackAction;
494
495
  }
@@ -508,27 +509,27 @@ let slackSendRuntimePromise;
508
509
  let slackProbeModulePromise;
509
510
  let slackMonitorModulePromise;
510
511
  let slackDirectoryLiveModulePromise;
511
- const loadSlackDirectoryConfigModule = createLazyRuntimeModule(() => import("./directory-config-8UPAEyNg.js").then((n) => n.t));
512
- const loadSlackResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels-DX2GSx9c.js").then((n) => n.n));
513
- const loadSlackResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-DOULgUwy.js").then((n) => n.n));
512
+ const loadSlackDirectoryConfigModule = createLazyRuntimeModule(() => import("./directory-config-Dmhi8ECy.js").then((n) => n.t));
513
+ const loadSlackResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels-DNiE0Z0_.js").then((n) => n.n));
514
+ const loadSlackResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-D_TmaIfG.js").then((n) => n.n));
514
515
  async function loadSlackActionRuntime() {
515
- slackActionRuntimePromise ??= import("./action-runtime.runtime-D05xDf1s.js");
516
+ slackActionRuntimePromise ??= import("./action-runtime.runtime-7FY7XZa3.js");
516
517
  return await slackActionRuntimePromise;
517
518
  }
518
519
  async function loadSlackSendRuntime() {
519
- slackSendRuntimePromise ??= import("./send.runtime-DGyqPLWj.js");
520
+ slackSendRuntimePromise ??= import("./send.runtime-nW-v-Zc0.js");
520
521
  return await slackSendRuntimePromise;
521
522
  }
522
523
  async function loadSlackProbeModule() {
523
- slackProbeModulePromise ??= import("./probe-BTKzLT2u.js").then((n) => n.n);
524
+ slackProbeModulePromise ??= import("./probe-C3PL00Ms.js").then((n) => n.n);
524
525
  return await slackProbeModulePromise;
525
526
  }
526
527
  async function loadSlackMonitorModule() {
527
- slackMonitorModulePromise ??= import("./monitor-DwDmBYfl.js").then((n) => n.t);
528
+ slackMonitorModulePromise ??= import("./monitor-BMC1e8-1.js").then((n) => n.t);
528
529
  return await slackMonitorModulePromise;
529
530
  }
530
531
  async function loadSlackDirectoryLiveModule() {
531
- slackDirectoryLiveModulePromise ??= import("./directory-live-C1acgXKJ.js").then((n) => n.t);
532
+ slackDirectoryLiveModulePromise ??= import("./directory-live-D_pIXtL1.js").then((n) => n.t);
532
533
  return await slackDirectoryLiveModulePromise;
533
534
  }
534
535
  async function resolveSlackSendContext(params) {
@@ -989,6 +990,7 @@ const slackPlugin = createChatChannelPlugin({
989
990
  } },
990
991
  security: slackSecurityAdapter,
991
992
  threading: {
993
+ matchesToolContextTarget: ({ target, toolContext }) => slackContextTargetsMatch(target, toolContext),
992
994
  scopedAccountReplyToMode: {
993
995
  resolveAccount: adaptScopedAccountAccessor(resolveSlackAccount),
994
996
  resolveReplyToMode: (account, chatType) => resolveSlackReplyToMode(account, chatType)
@@ -999,13 +1001,16 @@ const slackPlugin = createChatChannelPlugin({
999
1001
  to,
1000
1002
  toolContext
1001
1003
  })),
1002
- resolveReplyTransport: ({ threadId, replyToId }) => ({
1003
- replyToId: resolveSlackThreadTsValue({
1004
- replyToId,
1004
+ resolveReplyTransport: ({ threadId, replyToId, replyDelivery }) => {
1005
+ const resolvedReplyToId = resolveSlackThreadTsValue({
1006
+ replyToId: replyDelivery?.replyToMode === "off" ? void 0 : replyToId,
1005
1007
  threadId
1006
- }),
1007
- threadId: null
1008
- })
1008
+ });
1009
+ return {
1010
+ replyToId: replyDelivery?.replyToMode === "off" && !resolvedReplyToId ? null : resolvedReplyToId,
1011
+ threadId: null
1012
+ };
1013
+ }
1009
1014
  },
1010
1015
  outbound: slackChannelOutbound
1011
1016
  });
@@ -1,2 +1,2 @@
1
- import { t as slackPlugin } from "./channel-BxD37X5Y.js";
1
+ import { t as slackPlugin } from "./channel-DNL5oO9B.js";
2
2
  export { slackPlugin };
@@ -4,7 +4,7 @@ import { t as SlackChannelConfigSchema } from "./config-schema-BjAjs8_6.js";
4
4
  import { adaptScopedAccountAccessor, createScopedChannelConfigAdapter } from "openclaw/plugin-sdk/channel-config-helpers";
5
5
  import { formatAllowFromLowercase } from "openclaw/plugin-sdk/allow-from";
6
6
  //#region extensions/slack/src/channel.setup.ts
7
- const slackSetupWizard = createSlackSetupWizardProxy(async () => ({ slackSetupWizard: (await import("./setup-surface-NNMjGpXc.js")).slackSetupWizard }));
7
+ const slackSetupWizard = createSlackSetupWizardProxy(async () => ({ slackSetupWizard: (await import("./setup-surface-BHsOhTJd.js")).slackSetupWizard }));
8
8
  const slackSetupConfigAdapter = createScopedChannelConfigAdapter({
9
9
  sectionKey: SLACK_CHANNEL,
10
10
  listAccountIds: listSlackAccountIds,
@@ -1,4 +1,4 @@
1
- import "./target-parsing-C7eeWg7M.js";
1
+ import "./target-parsing-3jYH8LfB.js";
2
2
  import { DEFAULT_ACCOUNT_ID as DEFAULT_ACCOUNT_ID$2 } from "openclaw/plugin-sdk/account-id";
3
3
  import { hasConfiguredAccountValue } from "openclaw/plugin-sdk/account-resolution";
4
4
  import { PAIRING_APPROVED_MESSAGE, projectCredentialSnapshotFields, resolveConfiguredFromRequiredCredentialStatuses } from "openclaw/plugin-sdk/channel-status";
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
2
  import { i as resolveDefaultSlackAccountId, o as resolveSlackAccountAllowFrom, r as mergeSlackAccountConfig } from "./accounts-f6Xcv9Vi.js";
3
- import { r as parseSlackTarget } from "./target-parsing-C7eeWg7M.js";
4
- import "./targets-nUqxHGgg.js";
3
+ import { r as parseSlackTarget } from "./target-parsing-3jYH8LfB.js";
4
+ import "./targets-Dll4NJgs.js";
5
5
  import { normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
6
6
  import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
7
7
  import { createResolvedDirectoryEntriesLister } from "openclaw/plugin-sdk/directory-config-runtime";
@@ -1,2 +1,2 @@
1
- import { n as listSlackDirectoryGroupsFromConfig, r as listSlackDirectoryPeersFromConfig } from "./directory-config-8UPAEyNg.js";
1
+ import { n as listSlackDirectoryGroupsFromConfig, r as listSlackDirectoryPeersFromConfig } from "./directory-config-Dmhi8ECy.js";
2
2
  export { listSlackDirectoryGroupsFromConfig, listSlackDirectoryPeersFromConfig };
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
2
  import { a as resolveSlackAccount } from "./accounts-f6Xcv9Vi.js";
3
- import { r as createSlackWebClient } from "./client-Cn2WwpcA.js";
3
+ import { r as createSlackWebClient } from "./client-DhaHONzg.js";
4
4
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  //#region extensions/slack/src/directory-live.ts
6
6
  var directory_live_exports = /* @__PURE__ */ __exportAll({
@@ -1,4 +1,5 @@
1
1
  import { a as resolveSlackAccount, t as listEnabledSlackAccounts } from "./accounts-f6Xcv9Vi.js";
2
+ import { n as resolveSlackThreadTsValue, t as normalizeSlackThreadTsCandidate } from "./thread-ts-DUGhaYKq.js";
2
3
  import { n as isSlackInteractiveRepliesEnabled } from "./interactive-replies-DrBq4Mld.js";
3
4
  import { createActionGate } from "openclaw/plugin-sdk/channel-actions";
4
5
  import { extractToolSend } from "openclaw/plugin-sdk/tool-send";
@@ -36,7 +37,23 @@ function listSlackMessageActions(cfg, accountId) {
36
37
  return Array.from(actions);
37
38
  }
38
39
  function extractSlackToolSend(args) {
39
- return extractToolSend(args, "sendMessage");
40
+ const action = args.action;
41
+ if (action !== "sendMessage" && action !== "uploadFile" && action !== "send" && action !== "upload-file") return null;
42
+ const extracted = extractToolSend(args, action);
43
+ if (!extracted) return null;
44
+ const nativeThreadTs = typeof args.threadTs === "string" ? normalizeSlackThreadTsCandidate(args.threadTs) : void 0;
45
+ const replyTo = typeof args.replyTo === "string" ? normalizeSlackThreadTsCandidate(args.replyTo) : void 0;
46
+ const threadTs = action === "send" ? resolveSlackThreadTsValue({
47
+ replyToId: replyTo,
48
+ threadId: extracted.threadId
49
+ }) : action === "upload-file" ? normalizeSlackThreadTsCandidate(extracted.threadId) ?? replyTo : nativeThreadTs ?? normalizeSlackThreadTsCandidate(extracted.threadId);
50
+ const threadSuppressed = extracted.threadSuppressed === true || args.topLevel === true || args.threadTs === null;
51
+ return {
52
+ ...extracted,
53
+ threadId: threadTs ?? extracted.threadId,
54
+ ...!threadTs && !extracted.threadId && !threadSuppressed ? { threadImplicit: true } : {},
55
+ ...threadSuppressed ? { threadSuppressed: true } : {}
56
+ };
40
57
  }
41
58
  //#endregion
42
59
  //#region extensions/slack/src/message-tool-api.ts
@@ -1,2 +1,2 @@
1
- import { t as describeSlackMessageTool } from "./message-tool-api-B9M0zzlQ.js";
1
+ import { t as describeSlackMessageTool } from "./message-tool-api-NLAYFat2.js";
2
2
  export { describeSlackMessageTool as describeMessageTool };
@@ -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-ChhYGpXx.js";
3
- import { t as isSlackChannelAllowedByPolicy } from "./policy-DT3mRh58.js";
4
- import { o as resolveSlackThreadTs } from "./replies-Bt4nWmSd.js";
2
+ import { t as monitorSlackProvider, y as buildSlackSlashCommandMatcher } from "./provider-CxePoDl1.js";
3
+ import { t as isSlackChannelAllowedByPolicy } from "./policy-Dfbxkneh.js";
4
+ import { o as resolveSlackThreadTs } from "./replies-C_dlJ8Aw.js";
5
5
  //#region extensions/slack/src/monitor.ts
6
6
  var monitor_exports = /* @__PURE__ */ __exportAll({
7
7
  buildSlackSlashCommandMatcher: () => buildSlackSlashCommandMatcher,
@@ -1,4 +1,5 @@
1
- import { _ as buildSlackInteractiveBlocks, a as parseSlackBlocksInput, n as resolveSlackThreadTsValue, s as SLACK_TEXT_LIMIT, v as buildSlackPresentationBlocks, y as resolveSlackInteractiveBlockOffsets } from "./thread-ts-Cffag8e2.js";
1
+ import { _ as resolveSlackInteractiveBlockOffsets, a as SLACK_TEXT_LIMIT, g as buildSlackPresentationBlocks, h as buildSlackInteractiveBlocks, r as parseSlackBlocksInput } from "./reply-blocks-DSfujQlj.js";
2
+ import { n as resolveSlackThreadTsValue } from "./thread-ts-DUGhaYKq.js";
2
3
  import { t as compileSlackInteractiveReplies } from "./interactive-replies-DrBq4Mld.js";
3
4
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
4
5
  import { resolveOutboundSendDep } from "openclaw/plugin-sdk/channel-outbound";
@@ -9,7 +10,7 @@ import { resolvePayloadMediaUrls, sendPayloadMediaSequenceAndFinalize, sendTextM
9
10
  const SLACK_MAX_BLOCKS = 50;
10
11
  let slackSendRuntimePromise;
11
12
  async function loadSlackSendRuntime() {
12
- slackSendRuntimePromise ??= import("./send.runtime-DGyqPLWj.js");
13
+ slackSendRuntimePromise ??= import("./send.runtime-nW-v-Zc0.js");
13
14
  return await slackSendRuntimePromise;
14
15
  }
15
16
  function resolveRenderedInteractiveBlocks(interactive, previousBlocks) {
@@ -1,15 +1,15 @@
1
1
  import { l as resolveSlackReplyToMode } from "./accounts-f6Xcv9Vi.js";
2
- import { r as parseSlackTarget } from "./target-parsing-C7eeWg7M.js";
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-Cffag8e2.js";
2
+ import { r as parseSlackTarget } from "./target-parsing-3jYH8LfB.js";
3
+ import "./targets-Dll4NJgs.js";
4
+ import { a as SLACK_TEXT_LIMIT, d as normalizeSlackAllowOwnerEntry, p as resolveSlackAllowListMatch, u as normalizeAllowListLower, v as truncateSlackText } from "./reply-blocks-DSfujQlj.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-rekB-Xjp.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-YkhEE5f1.js";
7
+ import { a as recordSlackThreadParticipation, i as hasSlackThreadParticipationWithPersistence, s as normalizeSlackOutboundText, t as sendMessageSlack } from "./send-CTnNcQeb.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-C2HjraXv.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-ChhYGpXx.js";
11
- import { n as resolveSlackChannelConfig } from "./policy-DT3mRh58.js";
12
- import { a as resolveDeliveredSlackReplyThreadTs, i as readSlackReplyBlocks, n as deliverReplies, o as resolveSlackThreadTs, s as emitSlackMessageSentHooks, t as createSlackReplyDeliveryPlan } from "./replies-Bt4nWmSd.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-CxePoDl1.js";
11
+ import { n as resolveSlackChannelConfig } from "./policy-Dfbxkneh.js";
12
+ import { a as resolveDeliveredSlackReplyThreadTs, i as readSlackReplyBlocks, n as deliverReplies, o as resolveSlackThreadTs, s as emitSlackMessageSentHooks, t as createSlackReplyDeliveryPlan } from "./replies-C_dlJ8Aw.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";
@@ -181,7 +181,7 @@ function compactChunkText(value) {
181
181
  return truncateSlackText(value.replace(/\s+/g, " ").trim(), SLACK_PROGRESS_CHUNK_TEXT_MAX);
182
182
  }
183
183
  function lineDetailParts(line) {
184
- return [line.detail, line.status && !line.detail?.includes(line.status) ? line.status : void 0].map((part) => part?.trim()).filter((part) => Boolean(part));
184
+ return [line.detail, line.status && line.status !== "completed" && !line.detail?.includes(line.status) ? line.status : void 0].map((part) => part?.trim()).filter((part) => Boolean(part));
185
185
  }
186
186
  function legacyLineTitle(line) {
187
187
  return `${line.icon ?? "•"} *${escapeSlackMrkdwn(line.label)}*`;
@@ -192,7 +192,7 @@ function legacyLineDetail(line, maxChars) {
192
192
  }
193
193
  function lineTaskTitle(line, maxLineChars) {
194
194
  const label = line.label.replace(/\s+/g, " ").trim() || line.toolName || line.kind || "Update";
195
- const detail = lineDetailParts(line).join(" · ");
195
+ const detail = lineDetailParts(line).join(" · ") || line.status?.trim();
196
196
  const fallback = line.text.replace(/\s+/g, " ").trim();
197
197
  if (detail) return compactTitle(`${label} — ${compactDetail(detail, maxLineChars)}`);
198
198
  if (fallback && fallback !== label) return compactTitle(fallback);
@@ -626,7 +626,7 @@ const UNICODE_TO_SLACK = {
626
626
  "🛠️": "hammer_and_wrench",
627
627
  "💻": "computer"
628
628
  };
629
- const SLACK_REASONING_TAG_RE = /<\s*(\/?)\s*(?:think(?:ing)?|thought|antthinking)\b[^<>]*>/gi;
629
+ const SLACK_REASONING_TAG_RE = /<\s*(\/?)\s*(?:(?:antml:|mm:)?(?:think(?:ing)?|thought)|antthinking)\b[^<>]*>/gi;
630
630
  const SLACK_REASONING_LABEL_PREFIX_RE = /^\s*(?:>\s*)?Reasoning:\s*/iu;
631
631
  const SLACK_THINKING_LABEL_PREFIX_RE = /^\s*(?:>\s*)?Thinking\.{0,3}(?=\s*(?:\n|_))/iu;
632
632
  function resolveSlackMessageTimestampMs(message) {
@@ -1825,6 +1825,8 @@ async function dispatchPreparedSlackMessage(prepared) {
1825
1825
  disableBlockStreaming,
1826
1826
  onModelSelected,
1827
1827
  suppressDefaultToolProgressMessages: suppressDefaultToolProgressMessages ? true : void 0,
1828
+ allowProgressCallbacksWhenSourceDeliverySuppressed: sourceReplyDeliveryMode === "message_tool_only" && statusReactionsEnabled ? true : void 0,
1829
+ allowToolLifecycleWhenProgressHidden: statusReactionsEnabled ? true : void 0,
1828
1830
  onPartialReply: useStreaming ? void 0 : !previewStreamingEnabled ? void 0 : async (payload) => {
1829
1831
  updateDraftFromPartial(payload.text);
1830
1832
  },
@@ -1850,6 +1852,7 @@ async function dispatchPreparedSlackMessage(prepared) {
1850
1852
  await pushPreviewToolProgress(buildChannelProgressDraftLineForEntry(account.config, {
1851
1853
  event: "item",
1852
1854
  itemId: payload.itemId,
1855
+ toolCallId: payload.toolCallId,
1853
1856
  itemKind: payload.kind,
1854
1857
  title: payload.title,
1855
1858
  name: payload.name,
@@ -2025,7 +2028,7 @@ const SLACK_MENTION_RESOLUTION_MAX_LOOKUPS_PER_MESSAGE = 20;
2025
2028
  const SLACK_USER_MENTION_RE$1 = /<@([A-Z0-9]+)(?:\|[^>]+)?>/gi;
2026
2029
  let slackMediaModulePromise$1;
2027
2030
  function loadSlackMediaModule$1() {
2028
- slackMediaModulePromise$1 ??= import("./actions-YkhEE5f1.js").then((n) => n.h);
2031
+ slackMediaModulePromise$1 ??= import("./actions-C2HjraXv.js").then((n) => n.h);
2029
2032
  return slackMediaModulePromise$1;
2030
2033
  }
2031
2034
  function collectUniqueSlackMentionIds$1(texts) {
@@ -2539,7 +2542,7 @@ function formatSlackBotStarterThreadLabel(params) {
2539
2542
  //#region extensions/slack/src/monitor/message-handler/prepare-thread-context.ts
2540
2543
  let slackMediaModulePromise;
2541
2544
  function loadSlackMediaModule() {
2542
- slackMediaModulePromise ??= import("./actions-YkhEE5f1.js").then((n) => n.h);
2545
+ slackMediaModulePromise ??= import("./actions-C2HjraXv.js").then((n) => n.h);
2543
2546
  return slackMediaModulePromise;
2544
2547
  }
2545
2548
  const SLACK_THREAD_CONTEXT_USER_LOOKUP_CONCURRENCY = 4;
@@ -1,4 +1,4 @@
1
- import { m as normalizeSlackSlug } from "./thread-ts-Cffag8e2.js";
1
+ import { f as normalizeSlackSlug } from "./reply-blocks-DSfujQlj.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,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
- import { r as createSlackWebClient } from "./client-Cn2WwpcA.js";
2
+ import { r as createSlackWebClient } from "./client-DhaHONzg.js";
3
3
  import { t as formatSlackError } from "./errors-CZtmv-h0.js";
4
4
  import { withTimeout } from "openclaw/plugin-sdk/text-utility-runtime";
5
5
  //#region extensions/slack/src/probe.ts
@@ -1,13 +1,13 @@
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 { F as isSlackApprovalAuthorizedSender, L as isSlackExecApprovalAuthorizedSender, b as truncateSlackText, d as normalizeAllowList, f as normalizeAllowListLower, h as resolveSlackAllowListMatch, m as normalizeSlackSlug, p as normalizeSlackAllowOwnerEntry, s as SLACK_TEXT_LIMIT, u as allowListMatches, w as isSlackAnyNativeApprovalClientEnabled } from "./thread-ts-Cffag8e2.js";
4
- import { c as resolveSlackWebClientOptions } from "./client-Cn2WwpcA.js";
3
+ import { F as isSlackExecApprovalAuthorizedSender, N as isSlackApprovalAuthorizedSender, S as isSlackAnyNativeApprovalClientEnabled, a as SLACK_TEXT_LIMIT, c as allowListMatches, d as normalizeSlackAllowOwnerEntry, f as normalizeSlackSlug, l as normalizeAllowList, p as resolveSlackAllowListMatch, u as normalizeAllowListLower, v as truncateSlackText } from "./reply-blocks-DSfujQlj.js";
4
+ import { c as resolveSlackWebClientOptions } from "./client-DhaHONzg.js";
5
5
  import { n as isSlackInteractiveRepliesEnabled, t as compileSlackInteractiveReplies } from "./interactive-replies-DrBq4Mld.js";
6
6
  import { t as getOptionalSlackRuntime } from "./runtime-BOk7xkOl.js";
7
7
  import { t as formatSlackError } from "./errors-CZtmv-h0.js";
8
- import { t as resolveSlackChannelAllowlist } from "./resolve-channels-DX2GSx9c.js";
9
- import { t as resolveSlackUserAllowlist } from "./resolve-users-DOULgUwy.js";
10
- import { n as resolveSlackChannelConfig, r as resolveSlackChannelLabel, t as isSlackChannelAllowedByPolicy } from "./policy-DT3mRh58.js";
8
+ import { t as resolveSlackChannelAllowlist } from "./resolve-channels-DNiE0Z0_.js";
9
+ import { t as resolveSlackUserAllowlist } from "./resolve-users-D_TmaIfG.js";
10
+ import { n as resolveSlackChannelConfig, r as resolveSlackChannelLabel, t as isSlackChannelAllowedByPolicy } from "./policy-Dfbxkneh.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";
@@ -28,7 +28,7 @@ import { resolveNativeCommandsEnabled, resolveNativeSkillsEnabled } from "opencl
28
28
  import { registerChannelRuntimeContext } from "openclaw/plugin-sdk/channel-runtime-context";
29
29
  import { DEFAULT_GROUP_HISTORY_LIMIT } from "openclaw/plugin-sdk/reply-history";
30
30
  import { installRequestBodyLimitGuard } from "openclaw/plugin-sdk/webhook-request-guards";
31
- import { getRuntimeConfig, getRuntimeConfig as getRuntimeConfig$1 } from "openclaw/plugin-sdk/runtime-config-snapshot";
31
+ import { getRuntimeConfig, getRuntimeConfig as getRuntimeConfig$1, getRuntimeConfigSnapshot } from "openclaw/plugin-sdk/runtime-config-snapshot";
32
32
  import { isDangerousNameMatchingEnabled } from "openclaw/plugin-sdk/dangerous-name-runtime";
33
33
  import { loadSessionStore, readSessionUpdatedAt, resolveSessionKey, resolveStorePath, resolveStorePath as resolveStorePath$1, updateLastRoute } from "openclaw/plugin-sdk/session-store-runtime";
34
34
  import { resolveChannelContextVisibilityMode } from "openclaw/plugin-sdk/context-visibility-runtime";
@@ -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-1FYOQOt_.js");
2702
+ slackMessagePipelinePromise ??= import("./pipeline.runtime-ByBVsuvQ.js");
2703
2703
  return slackMessagePipelinePromise;
2704
2704
  }
2705
2705
  const APP_MENTION_RETRY_TTL_MS = 6e4;
@@ -2873,14 +2873,13 @@ function createSlackMessageHandler(params) {
2873
2873
  }
2874
2874
  //#endregion
2875
2875
  //#region extensions/slack/src/monitor/reconnect-policy.ts
2876
- const SLACK_AUTH_ERROR_RE = /account_inactive|invalid_auth|token_revoked|token_expired|not_authed|org_login_required|team_access_not_granted|missing_scope|cannot_find_service|invalid_token/i;
2876
+ const SLACK_AUTH_ERROR_RE = /account_inactive|invalid_auth|token_revoked|token_expired|not_authed|org_login_required|team_access_not_granted|user_removed_from_team|team_disabled|missing_scope|cannot_find_service|invalid_token/i;
2877
2877
  const NO_ERROR_DETAIL = "no error detail";
2878
2878
  const SLACK_SOCKET_RECONNECT_POLICY = {
2879
2879
  initialMs: 2e3,
2880
2880
  maxMs: 3e4,
2881
2881
  factor: 1.8,
2882
- jitter: .25,
2883
- maxAttempts: 12
2882
+ jitter: .25
2884
2883
  };
2885
2884
  function getSocketEmitter(app) {
2886
2885
  const receiver = app.receiver;
@@ -2928,9 +2927,8 @@ function waitForSlackSocketDisconnect(app, abortSignal) {
2928
2927
  });
2929
2928
  }
2930
2929
  /**
2931
- * Detect non-recoverable Slack API / auth errors that should NOT be retried.
2932
- * These indicate permanent credential problems (revoked bot, deactivated account, etc.)
2933
- * and retrying will never succeed — continuing to retry blocks the entire gateway.
2930
+ * Detect permanent Slack account and credential failures.
2931
+ * Transient request and HTTP failures stay in OpenClaw's reconnect loop.
2934
2932
  */
2935
2933
  function isNonRecoverableSlackAuthError(error) {
2936
2934
  return SLACK_AUTH_ERROR_RE.test(formatUnknownError(error, ""));
@@ -3341,7 +3339,7 @@ function loadSlashCommandsRuntime() {
3341
3339
  return slashCommandsRuntimePromise;
3342
3340
  }
3343
3341
  function loadSlashDispatchRuntime() {
3344
- slashDispatchRuntimePromise ??= import("./slash-dispatch.runtime-Dvvs747S.js");
3342
+ slashDispatchRuntimePromise ??= import("./slash-dispatch.runtime-9VbEQ9-6.js");
3345
3343
  return slashDispatchRuntimePromise;
3346
3344
  }
3347
3345
  function loadSlackPluginCommandsRuntime() {
@@ -3560,13 +3558,14 @@ function buildSlackCommandArgMenuBlocks(params) {
3560
3558
  }
3561
3559
  async function registerSlackMonitorSlashCommands(params) {
3562
3560
  const { ctx, account, trackEvent } = params;
3563
- const cfg = ctx.cfg;
3561
+ const startupCfg = ctx.cfg;
3564
3562
  const runtime = ctx.runtime;
3565
3563
  const supportsInteractiveArgMenus = typeof ctx.app.action === "function";
3566
3564
  let supportsExternalArgMenus = typeof ctx.app.options === "function";
3567
3565
  const slashCommand = resolveSlackSlashCommandConfig(ctx.slashCommand ?? account.config.slashCommand);
3568
3566
  const handleSlashCommand = async (p) => {
3569
3567
  const { command, ack, respond, body, prompt, commandArgs, commandDefinition } = p;
3568
+ const cfg = getRuntimeConfigSnapshot() ?? ctx.cfg;
3570
3569
  try {
3571
3570
  if (ctx.shouldDropMismatchedSlackEvent?.(body)) {
3572
3571
  await ack();
@@ -3879,19 +3878,19 @@ async function registerSlackMonitorSlashCommands(params) {
3879
3878
  const nativeEnabled = resolveNativeCommandsEnabled({
3880
3879
  providerId: "slack",
3881
3880
  providerSetting: account.config.commands?.native,
3882
- globalSetting: cfg.commands?.native
3881
+ globalSetting: startupCfg.commands?.native
3883
3882
  });
3884
3883
  const nativeSkillsEnabled = resolveNativeSkillsEnabled({
3885
3884
  providerId: "slack",
3886
3885
  providerSetting: account.config.commands?.nativeSkills,
3887
- globalSetting: cfg.commands?.nativeSkills
3886
+ globalSetting: startupCfg.commands?.nativeSkills
3888
3887
  });
3889
3888
  let nativeCommands = [];
3890
3889
  let slashCommandsRuntime = null;
3891
3890
  if (nativeEnabled) {
3892
3891
  slashCommandsRuntime = await loadSlashCommandsRuntime();
3893
- const skillCommands = nativeSkillsEnabled ? (await loadSlashSkillCommandsRuntime()).listSkillCommandsForAgents({ cfg }) : [];
3894
- nativeCommands = slashCommandsRuntime.listNativeCommandSpecsForConfig(cfg, {
3892
+ const skillCommands = nativeSkillsEnabled ? (await loadSlashSkillCommandsRuntime()).listSkillCommandsForAgents({ cfg: startupCfg }) : [];
3893
+ nativeCommands = slashCommandsRuntime.listNativeCommandSpecsForConfig(startupCfg, {
3895
3894
  skillCommands,
3896
3895
  provider: "slack"
3897
3896
  });
@@ -4071,15 +4070,13 @@ function resolveStableSlackUserAllowlistEntries(entries) {
4071
4070
  return resolved;
4072
4071
  }
4073
4072
  function formatSlackSocketReconnectMessage(params) {
4074
- const maxAttempts = params.maxAttempts > 0 ? String(params.maxAttempts) : "∞";
4075
4073
  const suffix = params.error ? ` (${formatUnknownError(params.error)})` : "";
4076
- return `slack socket disconnected (${params.event}); reconnecting in ${Math.round(params.delayMs / 1e3)}s (attempt ${params.attempt}/${maxAttempts})${suffix}`;
4074
+ return `slack socket disconnected (${params.event}); reconnecting in ${Math.round(params.delayMs / 1e3)}s (attempt ${params.attempt}/∞)${suffix}`;
4077
4075
  }
4078
4076
  function formatSlackSocketStartRetryMessage(params) {
4079
- const maxAttempts = params.maxAttempts > 0 ? String(params.maxAttempts) : "∞";
4080
4077
  const reason = formatUnknownError(params.error, "Slack Socket Mode start failed without error detail");
4081
4078
  const sdkContext = params.sdkContext?.trim() ? `; last SDK log: ${params.sdkContext.trim()}` : "";
4082
- return `slack socket mode failed to start; retry ${params.attempt}/${maxAttempts} in ${Math.round(params.delayMs / 1e3)}s reason="${reason}${sdkContext}"`;
4079
+ return `slack socket mode failed to start; retry ${params.attempt}/∞ in ${Math.round(params.delayMs / 1e3)}s reason="${reason}${sdkContext}"`;
4083
4080
  }
4084
4081
  function parseApiAppIdFromAppToken(raw) {
4085
4082
  const token = raw?.trim();
@@ -4415,12 +4412,10 @@ async function monitorSlackProvider(opts = {}) {
4415
4412
  throw disconnect.error instanceof Error ? disconnect.error : new Error(formatUnknownError(disconnect.error));
4416
4413
  }
4417
4414
  reconnectAttempts += 1;
4418
- if (SLACK_SOCKET_RECONNECT_POLICY.maxAttempts > 0 && reconnectAttempts >= SLACK_SOCKET_RECONNECT_POLICY.maxAttempts) throw new Error(`Slack socket mode reconnect max attempts reached (${reconnectAttempts}/${SLACK_SOCKET_RECONNECT_POLICY.maxAttempts}) after ${disconnect.event}`);
4419
4415
  const delayMs = computeBackoff(SLACK_SOCKET_RECONNECT_POLICY, reconnectAttempts);
4420
4416
  runtime.log?.(warn(formatSlackSocketReconnectMessage({
4421
4417
  event: disconnect.event,
4422
4418
  attempt: reconnectAttempts,
4423
- maxAttempts: SLACK_SOCKET_RECONNECT_POLICY.maxAttempts,
4424
4419
  delayMs,
4425
4420
  error: disconnect.error
4426
4421
  })));
@@ -4436,11 +4431,9 @@ async function monitorSlackProvider(opts = {}) {
4436
4431
  throw err;
4437
4432
  }
4438
4433
  reconnectAttempts += 1;
4439
- if (SLACK_SOCKET_RECONNECT_POLICY.maxAttempts > 0 && reconnectAttempts >= SLACK_SOCKET_RECONNECT_POLICY.maxAttempts) throw err;
4440
4434
  const delayMs = computeBackoff(SLACK_SOCKET_RECONNECT_POLICY, reconnectAttempts);
4441
4435
  runtime.error?.(formatSlackSocketStartRetryMessage({
4442
4436
  attempt: reconnectAttempts,
4443
- maxAttempts: SLACK_SOCKET_RECONNECT_POLICY.maxAttempts,
4444
4437
  delayMs,
4445
4438
  error: err,
4446
4439
  sdkContext: socketModeLogger.getLastMessage()
@@ -1,5 +1,5 @@
1
- import { r as resolveSlackReplyBlocks, s as SLACK_TEXT_LIMIT } from "./thread-ts-Cffag8e2.js";
2
- import { o as markdownToSlackMrkdwnChunks, t as sendMessageSlack } from "./send-rekB-Xjp.js";
1
+ import { a as SLACK_TEXT_LIMIT, t as resolveSlackReplyBlocks } from "./reply-blocks-DSfujQlj.js";
2
+ import { o as markdownToSlackMrkdwnChunks, t as sendMessageSlack } from "./send-CTnNcQeb.js";
3
3
  import { createReplyReferencePlanner } from "openclaw/plugin-sdk/reply-reference";
4
4
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
5
5
  import { SILENT_REPLY_TOKEN, chunkMarkdownTextWithMode, isSilentReplyText } from "openclaw/plugin-sdk/reply-chunking";
@@ -1,7 +1,7 @@
1
1
  import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId, n as listSlackAccountIds, o as resolveSlackAccountAllowFrom, r as mergeSlackAccountConfig } from "./accounts-f6Xcv9Vi.js";
2
- import { r as parseSlackTarget } from "./target-parsing-C7eeWg7M.js";
3
- import "./targets-nUqxHGgg.js";
4
- import { h as isSlackPluginAccountConfigured } from "./client-Cn2WwpcA.js";
2
+ import { r as parseSlackTarget } from "./target-parsing-3jYH8LfB.js";
3
+ import "./targets-Dll4NJgs.js";
4
+ import { h as isSlackPluginAccountConfigured } from "./client-DhaHONzg.js";
5
5
  import { normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
6
6
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString, normalizeStringifiedOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
7
7
  import { normalizeMessageChannel } from "openclaw/plugin-sdk/routing";
@@ -725,15 +725,4 @@ function resolveSlackReplyBlocks(payload) {
725
725
  return blocks.length > 0 ? blocks : void 0;
726
726
  }
727
727
  //#endregion
728
- //#region extensions/slack/src/thread-ts.ts
729
- const SLACK_THREAD_TS_PATTERN = /^\d+\.\d+$/;
730
- function normalizeSlackThreadTsCandidate(value) {
731
- if (typeof value !== "string") return;
732
- const normalized = normalizeOptionalString(value);
733
- return normalized && SLACK_THREAD_TS_PATTERN.test(normalized) ? normalized : void 0;
734
- }
735
- function resolveSlackThreadTsValue(params) {
736
- return normalizeSlackThreadTsCandidate(params.replyToId) ?? normalizeSlackThreadTsCandidate(params.threadId);
737
- }
738
- //#endregion
739
- export { resolveTurnSourceSlackOriginTarget as A, resolveSlackExecApprovalTarget as B, hasSlackPluginApprovers as C, resolveSessionSlackOriginTarget as D, normalizeSlackOriginTarget as E, isSlackApprovalAuthorizedSender as F, getSlackExecApprovalApprovers as I, isSlackExecApprovalAuthorizedSender as L, shouldHandleSlackPluginViaForwardingSession as M, slackTargetsMatch as N, resolveSlackApprovalKind as O, getSlackApprovalApprovers as P, isSlackExecApprovalClientEnabled as R, SLACK_REPLY_SELECT_ACTION_ID as S, normalizeSlackForwardTarget as T, shouldSuppressLocalSlackExecApprovalPrompt as V, buildSlackInteractiveBlocks as _, parseSlackBlocksInput as a, truncateSlackText as b, resolveSlackGroupRequireMention as c, normalizeAllowList as d, normalizeAllowListLower as f, resolveSlackUserAllowed as g, resolveSlackAllowListMatch as h, SLACK_MAX_BLOCKS as i, shouldHandleSlackNativeApprovalRequest as j, resolveSlackFallbackOriginTarget as k, resolveSlackGroupToolPolicy as l, normalizeSlackSlug as m, resolveSlackThreadTsValue as n, validateSlackBlocksArray as o, normalizeSlackAllowOwnerEntry as p, resolveSlackReplyBlocks as r, SLACK_TEXT_LIMIT as s, normalizeSlackThreadTsCandidate as t, allowListMatches as u, buildSlackPresentationBlocks as v, isSlackAnyNativeApprovalClientEnabled as w, SLACK_REPLY_BUTTON_ACTION_ID as x, resolveSlackInteractiveBlockOffsets as y, normalizeSlackApproverId as z };
728
+ export { shouldHandleSlackPluginViaForwardingSession as A, normalizeSlackForwardTarget as C, resolveSlackFallbackOriginTarget as D, resolveSlackApprovalKind as E, isSlackExecApprovalAuthorizedSender as F, isSlackExecApprovalClientEnabled as I, normalizeSlackApproverId as L, getSlackApprovalApprovers as M, isSlackApprovalAuthorizedSender as N, resolveTurnSourceSlackOriginTarget as O, getSlackExecApprovalApprovers as P, resolveSlackExecApprovalTarget as R, isSlackAnyNativeApprovalClientEnabled as S, resolveSessionSlackOriginTarget as T, resolveSlackInteractiveBlockOffsets as _, SLACK_TEXT_LIMIT as a, SLACK_REPLY_SELECT_ACTION_ID as b, allowListMatches as c, normalizeSlackAllowOwnerEntry as d, normalizeSlackSlug as f, buildSlackPresentationBlocks as g, buildSlackInteractiveBlocks as h, validateSlackBlocksArray as i, slackTargetsMatch as j, shouldHandleSlackNativeApprovalRequest as k, normalizeAllowList as l, resolveSlackUserAllowed as m, SLACK_MAX_BLOCKS as n, resolveSlackGroupRequireMention as o, resolveSlackAllowListMatch as p, parseSlackBlocksInput as r, resolveSlackGroupToolPolicy as s, resolveSlackReplyBlocks as t, normalizeAllowListLower as u, truncateSlackText as v, normalizeSlackOriginTarget as w, hasSlackPluginApprovers as x, SLACK_REPLY_BUTTON_ACTION_ID as y, shouldSuppressLocalSlackExecApprovalPrompt as z };
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
- import { r as createSlackWebClient } from "./client-Cn2WwpcA.js";
2
+ import { r as createSlackWebClient } from "./client-DhaHONzg.js";
3
3
  import { n as resolveSlackAllowlistEntries, t as collectSlackCursorItems } from "./resolve-allowlist-common-CP8SH0Zf.js";
4
4
  import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  //#region extensions/slack/src/resolve-channels.ts
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
- import { r as createSlackWebClient } from "./client-Cn2WwpcA.js";
2
+ import { r as createSlackWebClient } from "./client-DhaHONzg.js";
3
3
  import { n as resolveSlackAllowlistEntries, t as collectSlackCursorItems } from "./resolve-allowlist-common-CP8SH0Zf.js";
4
4
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  //#region extensions/slack/src/resolve-users.ts
@@ -1,5 +1,5 @@
1
- import "./target-parsing-C7eeWg7M.js";
2
- import "./client-Cn2WwpcA.js";
1
+ import "./target-parsing-3jYH8LfB.js";
2
+ import "./client-DhaHONzg.js";
3
3
  import "./config-api-DnT9ohtE.js";
4
4
  import "openclaw/plugin-sdk/account-id";
5
5
  import { createActionGate as createActionGate$1, imageResultFromFile, jsonResult, readPositiveIntegerParam, readReactionParams, readStringParam, withNormalizedTimestamp } from "openclaw/plugin-sdk/channel-actions";
@@ -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-Cffag8e2.js";
3
+ import { o as resolveSlackGroupRequireMention, s as resolveSlackGroupToolPolicy } from "./reply-blocks-DSfujQlj.js";
4
4
  import { n as setSlackRuntime } from "./runtime-BOk7xkOl.js";
5
- import { t as sendMessageSlack } from "./send-rekB-Xjp.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-YkhEE5f1.js";
7
- import { t as probeSlack } from "./probe-BTKzLT2u.js";
8
- import { t as resolveSlackChannelAllowlist } from "./resolve-channels-DX2GSx9c.js";
9
- import { t as resolveSlackUserAllowlist } from "./resolve-users-DOULgUwy.js";
10
- import { t as monitorSlackProvider } from "./provider-ChhYGpXx.js";
11
- import { n as slackActionRuntime, t as handleSlackAction } from "./action-runtime-CgrHdqkC.js";
12
- import { n as listSlackDirectoryGroupsLive, r as listSlackDirectoryPeersLive } from "./directory-live-C1acgXKJ.js";
13
- import "./monitor-DwDmBYfl.js";
5
+ import { t as sendMessageSlack } from "./send-CTnNcQeb.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-C2HjraXv.js";
7
+ import { t as probeSlack } from "./probe-C3PL00Ms.js";
8
+ import { t as resolveSlackChannelAllowlist } from "./resolve-channels-DNiE0Z0_.js";
9
+ import { t as resolveSlackUserAllowlist } from "./resolve-users-D_TmaIfG.js";
10
+ import { t as monitorSlackProvider } from "./provider-CxePoDl1.js";
11
+ import { n as slackActionRuntime, t as handleSlackAction } from "./action-runtime-E614LMrR.js";
12
+ import { n as listSlackDirectoryGroupsLive, r as listSlackDirectoryPeersLive } from "./directory-live-D_pIXtL1.js";
13
+ import "./monitor-BMC1e8-1.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,4 +1,4 @@
1
- import { r as createSlackWebClient } from "./client-Cn2WwpcA.js";
1
+ import { r as createSlackWebClient } from "./client-DhaHONzg.js";
2
2
  import { t as formatSlackError } from "./errors-CZtmv-h0.js";
3
3
  import { isRecord, normalizeOptionalString, normalizeStringEntries, sortUniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  //#region extensions/slack/src/scopes.ts
@@ -1,10 +1,11 @@
1
1
  import { a as resolveSlackAccount, d as resolveSlackBotToken } from "./accounts-f6Xcv9Vi.js";
2
- import { r as parseSlackTarget } from "./target-parsing-C7eeWg7M.js";
3
- import "./targets-nUqxHGgg.js";
4
- import { b as truncateSlackText, o as validateSlackBlocksArray, s as SLACK_TEXT_LIMIT, t as normalizeSlackThreadTsCandidate } from "./thread-ts-Cffag8e2.js";
5
- import { a as getSlackWriteClient, n as createSlackTokenCacheKey } from "./client-Cn2WwpcA.js";
2
+ import { r as parseSlackTarget } from "./target-parsing-3jYH8LfB.js";
3
+ import "./targets-Dll4NJgs.js";
4
+ import { a as SLACK_TEXT_LIMIT, i as validateSlackBlocksArray, v as truncateSlackText } from "./reply-blocks-DSfujQlj.js";
5
+ import { a as getSlackWriteClient, n as createSlackTokenCacheKey } from "./client-DhaHONzg.js";
6
+ import { t as normalizeSlackThreadTsCandidate } from "./thread-ts-DUGhaYKq.js";
6
7
  import { t as getOptionalSlackRuntime } from "./runtime-BOk7xkOl.js";
7
- import { i as loadOutboundMediaFromUrl } from "./runtime-api-DudG6lbf.js";
8
+ import { i as loadOutboundMediaFromUrl } from "./runtime-api-DYg05-Op.js";
8
9
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
9
10
  import { createMessageReceiptFromOutboundResults } from "openclaw/plugin-sdk/channel-outbound";
10
11
  import { withTrustedEnvProxyGuardedFetchMode } from "openclaw/plugin-sdk/fetch-runtime";
@@ -0,0 +1,2 @@
1
+ import { t as sendMessageSlack } from "./send-CTnNcQeb.js";
2
+ export { sendMessageSlack };
@@ -1,2 +1,2 @@
1
- import { t as slackSetupPlugin } from "./channel.setup-W5YnieWd.js";
1
+ import { t as slackSetupPlugin } from "./channel.setup-WLGVcaSf.js";
2
2
  export { slackSetupPlugin };
@@ -1,8 +1,8 @@
1
1
  import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId, o as resolveSlackAccountAllowFrom } from "./accounts-f6Xcv9Vi.js";
2
- import "./shared-Bkkmro6q.js";
2
+ import "./shared-BxzdaqOc.js";
3
3
  import { i as SLACK_CHANNEL, t as createSlackSetupWizardBase } from "./setup-core-POfI_bgP.js";
4
- import { t as resolveSlackChannelAllowlist } from "./resolve-channels-DX2GSx9c.js";
5
- import { t as resolveSlackUserAllowlist } from "./resolve-users-DOULgUwy.js";
4
+ import { t as resolveSlackChannelAllowlist } from "./resolve-channels-DNiE0Z0_.js";
5
+ import { t as resolveSlackUserAllowlist } from "./resolve-users-D_TmaIfG.js";
6
6
  import { normalizeStringEntries } from "openclaw/plugin-sdk/string-coerce-runtime";
7
7
  import { adaptScopedAccountAccessor } from "openclaw/plugin-sdk/channel-config-helpers";
8
8
  import { createSetupTranslator, noteChannelLookupFailure, noteChannelLookupSummary, parseMentionOrPrefixedId, promptLegacyChannelAllowFromForAccount, resolveEntriesWithOptionalToken } from "openclaw/plugin-sdk/setup-runtime";
@@ -1,6 +1,6 @@
1
1
  import { a as resolveSlackAccount, c as resolveSlackConfigAccessorAccount, i as resolveDefaultSlackAccountId, n as listSlackAccountIds, o as resolveSlackAccountAllowFrom, r as mergeSlackAccountConfig, s as resolveSlackAccountDmPolicy } from "./accounts-f6Xcv9Vi.js";
2
2
  import { t as inspectSlackAccount } from "./account-inspect-CdGk6R7l.js";
3
- import { f as getChatChannelMeta, h as isSlackPluginAccountConfigured } from "./client-Cn2WwpcA.js";
3
+ import { f as getChatChannelMeta, h as isSlackPluginAccountConfigured } from "./client-DhaHONzg.js";
4
4
  import { n as isSlackInteractiveRepliesEnabled } from "./interactive-replies-DrBq4Mld.js";
5
5
  import { i as SLACK_CHANNEL } from "./setup-core-POfI_bgP.js";
6
6
  import { t as SlackChannelConfigSchema } from "./config-schema-BjAjs8_6.js";
@@ -1,4 +1,4 @@
1
- import { r as deliverSlackSlashReplies$1 } from "./replies-Bt4nWmSd.js";
1
+ import { r as deliverSlackSlashReplies$1 } from "./replies-C_dlJ8Aw.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";
@@ -42,6 +42,11 @@ function resolveSlackChannelId(raw) {
42
42
  function normalizeSlackMessagingTarget(raw) {
43
43
  return parseSlackTarget(raw, { defaultKind: "channel" })?.normalized;
44
44
  }
45
+ function slackTargetsMatch(left, right) {
46
+ const leftTarget = normalizeSlackMessagingTarget(left);
47
+ const rightTarget = normalizeSlackMessagingTarget(right);
48
+ return Boolean(leftTarget && rightTarget && leftTarget === rightTarget);
49
+ }
45
50
  function looksLikeSlackTargetId(raw) {
46
51
  const trimmed = raw.trim();
47
52
  if (!trimmed) return false;
@@ -52,4 +57,4 @@ function looksLikeSlackTargetId(raw) {
52
57
  return /^[CUWGD][A-Z0-9]{8,}$/i.test(trimmed);
53
58
  }
54
59
  //#endregion
55
- export { resolveSlackChannelId as i, normalizeSlackMessagingTarget as n, parseSlackTarget as r, looksLikeSlackTargetId as t };
60
+ export { slackTargetsMatch as a, resolveSlackChannelId as i, normalizeSlackMessagingTarget as n, parseSlackTarget as r, looksLikeSlackTargetId as t };
@@ -0,0 +1,13 @@
1
+ import { a as slackTargetsMatch, r as parseSlackTarget } from "./target-parsing-3jYH8LfB.js";
2
+ //#region extensions/slack/src/targets.ts
3
+ function matchesResolvedUserTarget(target, currentMessagingTarget) {
4
+ const resolvedId = target.trim();
5
+ if (!/^[UW][A-Z0-9]+$/i.test(resolvedId)) return false;
6
+ const currentTarget = parseSlackTarget(currentMessagingTarget);
7
+ return currentTarget?.kind === "user" && currentTarget.id.toLowerCase() === resolvedId.toLowerCase();
8
+ }
9
+ function slackContextTargetsMatch(target, context) {
10
+ return Boolean(context.currentMessagingTarget && (slackTargetsMatch(target, context.currentMessagingTarget) || matchesResolvedUserTarget(target, context.currentMessagingTarget)) || context.currentChannelId && slackTargetsMatch(target, context.currentChannelId));
11
+ }
12
+ //#endregion
13
+ export { slackContextTargetsMatch as t };
@@ -0,0 +1,13 @@
1
+ import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
2
+ //#region extensions/slack/src/thread-ts.ts
3
+ const SLACK_THREAD_TS_PATTERN = /^\d+\.\d+$/;
4
+ function normalizeSlackThreadTsCandidate(value) {
5
+ if (typeof value !== "string") return;
6
+ const normalized = normalizeOptionalString(value);
7
+ return normalized && SLACK_THREAD_TS_PATTERN.test(normalized) ? normalized : void 0;
8
+ }
9
+ function resolveSlackThreadTsValue(params) {
10
+ return normalizeSlackThreadTsCandidate(params.replyToId) ?? normalizeSlackThreadTsCandidate(params.threadId);
11
+ }
12
+ //#endregion
13
+ export { resolveSlackThreadTsValue as n, normalizeSlackThreadTsCandidate as t };
@@ -277,6 +277,11 @@ const parseComparator = (comp, options) => {
277
277
 
278
278
  const isX = id => !id || id.toLowerCase() === 'x' || id === '*'
279
279
 
280
+ const invalidXRangeOrder = (M, m, p) => (
281
+ (isX(M) && !isX(m)) ||
282
+ (isX(m) && p && !isX(p))
283
+ )
284
+
280
285
  // ~, ~> --> * (any, kinda silly)
281
286
  // ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0
282
287
  // ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0
@@ -373,10 +378,10 @@ const replaceCaret = (comp, options) => {
373
378
  if (M === '0') {
374
379
  if (m === '0') {
375
380
  ret = `>=${M}.${m}.${p
376
- }${z} <${M}.${m}.${+p + 1}-0`
381
+ } <${M}.${m}.${+p + 1}-0`
377
382
  } else {
378
383
  ret = `>=${M}.${m}.${p
379
- }${z} <${M}.${+m + 1}.0-0`
384
+ } <${M}.${+m + 1}.0-0`
380
385
  }
381
386
  } else {
382
387
  ret = `>=${M}.${m}.${p
@@ -402,6 +407,10 @@ const replaceXRange = (comp, options) => {
402
407
  const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]
403
408
  return comp.replace(r, (ret, gtlt, M, m, p, pr) => {
404
409
  debug('xRange', comp, ret, gtlt, M, m, p, pr)
410
+ if (invalidXRangeOrder(M, m, p)) {
411
+ return comp
412
+ }
413
+
405
414
  const xM = isX(M)
406
415
  const xm = xM || isX(m)
407
416
  const xp = xm || isX(p)
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "semver",
3
- "version": "7.8.2",
3
+ "version": "7.8.4",
4
4
  "description": "The semantic version parser used by npm.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -14,7 +14,7 @@
14
14
  "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
15
15
  },
16
16
  "devDependencies": {
17
- "@npmcli/eslint-config": "^6.0.0",
17
+ "@npmcli/eslint-config": "^7.0.0",
18
18
  "@npmcli/template-oss": "5.0.0",
19
19
  "benchmark": "^2.1.4",
20
20
  "tap": "^16.0.0"
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@openclaw/slack",
3
- "version": "2026.6.8",
3
+ "version": "2026.6.9-beta.1",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@openclaw/slack",
9
- "version": "2026.6.8",
9
+ "version": "2026.6.9-beta.1",
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.6.8"
18
+ "openclaw": ">=2026.6.9-beta.1"
19
19
  },
20
20
  "peerDependenciesMeta": {
21
21
  "openclaw": {
@@ -1156,9 +1156,9 @@
1156
1156
  "license": "MIT"
1157
1157
  },
1158
1158
  "node_modules/semver": {
1159
- "version": "7.8.2",
1160
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.2.tgz",
1161
- "integrity": "sha512-c8jsqUZm3omBOI66G90z1Dyw5z622G8oLG+omfsHBJf3CWQTlOcwOjvOG6wtiNfW6anKm/eA39LMwMtMez2TiQ==",
1159
+ "version": "7.8.4",
1160
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz",
1161
+ "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==",
1162
1162
  "license": "ISC",
1163
1163
  "bin": {
1164
1164
  "semver": "bin/semver.js"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/slack",
3
- "version": "2026.6.8",
3
+ "version": "2026.6.9-beta.1",
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.6.8"
18
+ "openclaw": ">=2026.6.9-beta.1"
19
19
  },
20
20
  "peerDependenciesMeta": {
21
21
  "openclaw": {
@@ -60,13 +60,13 @@
60
60
  "allowInvalidConfigRecovery": true
61
61
  },
62
62
  "compat": {
63
- "pluginApi": ">=2026.6.8"
63
+ "pluginApi": ">=2026.6.9-beta.1"
64
64
  },
65
65
  "startup": {
66
66
  "deferConfiguredChannelFullLoadUntilAfterListen": true
67
67
  },
68
68
  "build": {
69
- "openclawVersion": "2026.6.8",
69
+ "openclawVersion": "2026.6.9-beta.1",
70
70
  "bundledDist": false
71
71
  },
72
72
  "release": {
@@ -1,2 +0,0 @@
1
- import { t as handleSlackAction } from "./action-runtime-CgrHdqkC.js";
2
- export { handleSlackAction };
@@ -1,2 +0,0 @@
1
- import { t as sendMessageSlack } from "./send-rekB-Xjp.js";
2
- export { sendMessageSlack };
@@ -1,2 +0,0 @@
1
- import "./target-parsing-C7eeWg7M.js";
2
- export {};