@openclaw/slack 2026.6.8 → 2026.6.9

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-CkD5nTPl.js} +10 -20
  2. package/dist/action-runtime.runtime-CJyuCUxj.js +2 -0
  3. package/dist/{actions-YkhEE5f1.js → actions-B2w2hCZ2.js} +7 -3
  4. package/dist/{actions.runtime-DyVzqzLc.js → actions.runtime-B56qRt06.js} +1 -1
  5. package/dist/api.js +12 -12
  6. package/dist/{approval-handler.runtime-KWkR1mEG.js → approval-handler.runtime-BS6xpR-X.js} +2 -2
  7. package/dist/{channel-BxD37X5Y.js → channel-CwSI6hhC.js} +51 -39
  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-CAdKQeRW.js} +3 -3
  17. package/dist/{outbound-adapter-DvXnHfDP.js → outbound-adapter-CBFfXlOI.js} +3 -2
  18. package/dist/{pipeline.runtime-1FYOQOt_.js → pipeline.runtime-DQBGMhhW.js} +38 -31
  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-DbHhtmBz.js} +146 -32
  22. package/dist/{replies-Bt4nWmSd.js → replies-CH4Dmgbr.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-EpqsWCGd.js} +20 -8
  30. package/dist/send.runtime-CbeGF-al.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-BOl9Cbn9.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-B56qRt06.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-CkD5nTPl.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-EpqsWCGd.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";
@@ -201,6 +201,9 @@ function createSlackMediaFetch() {
201
201
  function resolveSlackFetchForRuntime() {
202
202
  return isMockedFetch(globalThis.fetch) ? globalThis.fetch : fetchWithRuntimeDispatcher;
203
203
  }
204
+ async function cancelUnreadResponseBody(response) {
205
+ if (!response.bodyUsed) await response.body?.cancel().catch(() => void 0);
206
+ }
204
207
  /**
205
208
  * Fetches a URL with Authorization header while keeping same-origin redirects
206
209
  * authenticated and dropping auth once the redirect crosses origins.
@@ -223,6 +226,7 @@ async function fetchWithSlackAuth(url, token) {
223
226
  return initialRes;
224
227
  }
225
228
  if (resolvedUrl.protocol !== "https:") return initialRes;
229
+ await cancelUnreadResponseBody(initialRes);
226
230
  if (resolvedUrl.origin === parsed.origin) return fetchImpl(resolvedUrl.toString(), {
227
231
  headers: authHeaders,
228
232
  redirect: "follow"
@@ -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-B2w2hCZ2.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-CwSI6hhC.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-EpqsWCGd.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-B2w2hCZ2.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-DbHhtmBz.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-EpqsWCGd.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,14 +1,16 @@
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$1 } 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
- import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
12
+ import { normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
13
+ import { normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
12
14
  import { adaptScopedAccountAccessor } from "openclaw/plugin-sdk/channel-config-helpers";
13
15
  import { buildOutboundBaseSessionKey, normalizeMessageChannel } from "openclaw/plugin-sdk/routing";
14
16
  import { buildLegacyDmAccountAllowlistAdapter, createAccountScopedAllowlistNameResolver, createFlatAllowlistOverrideResolver } from "openclaw/plugin-sdk/allowlist-config-edit";
@@ -20,7 +22,7 @@ import { createChannelDirectoryAdapter, createRuntimeDirectoryLiveAdapter } from
20
22
  import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
21
23
  import { createComputedAccountStatusAdapter, createDefaultChannelRuntimeState } from "openclaw/plugin-sdk/status-helpers";
22
24
  import { isSingleUseReplyToMode } from "openclaw/plugin-sdk/reply-reference";
23
- import { createApproverRestrictedNativeApprovalCapability, splitChannelApprovalCapability } from "openclaw/plugin-sdk/approval-delivery-runtime";
25
+ import { createApproverRestrictedNativeApprovalCapability } from "openclaw/plugin-sdk/approval-delivery-runtime";
24
26
  import { createLazyChannelApprovalNativeRuntimeAdapter } from "openclaw/plugin-sdk/approval-handler-adapter-runtime";
25
27
  import { createChannelNativeOriginTargetResolver, createNativeApprovalForwardingFallbackSuppressor } from "openclaw/plugin-sdk/approval-native-runtime";
26
28
  import { readBooleanParam } from "openclaw/plugin-sdk/boolean-param";
@@ -29,10 +31,8 @@ import { readPositiveIntegerParam, readStringParam } from "openclaw/plugin-sdk/p
29
31
  //#region extensions/slack/src/action-threading.ts
30
32
  function resolveSlackAutoThreadId(params) {
31
33
  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;
34
+ if (!context?.currentChannelId && !context?.currentMessagingTarget) return;
35
+ if (!slackContextTargetsMatch(params.to, context)) return;
36
36
  if (!context.currentThreadTs) {
37
37
  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
38
  return;
@@ -133,7 +133,7 @@ const baseSlackApprovalCapability = createApproverRestrictedNativeApprovalCapabi
133
133
  approvalKind: resolveSlackApprovalKind(request),
134
134
  request
135
135
  }),
136
- load: async () => (await import("./approval-handler.runtime-KWkR1mEG.js")).slackApprovalNativeRuntime
136
+ load: async () => (await import("./approval-handler.runtime-BS6xpR-X.js")).slackApprovalNativeRuntime
137
137
  })
138
138
  });
139
139
  const baseSlackNativeAdapter = baseSlackApprovalCapability.native;
@@ -182,7 +182,6 @@ const slackApprovalCapability = {
182
182
  }
183
183
  } : void 0
184
184
  };
185
- splitChannelApprovalCapability(slackApprovalCapability);
186
185
  //#endregion
187
186
  //#region extensions/slack/src/message-action-dispatch.ts
188
187
  /** Translate generic channel action requests into Slack-specific tool invocations and payload shapes. */
@@ -296,11 +295,18 @@ async function handleSlackMessageAction(params) {
296
295
  accountId
297
296
  }, cfg);
298
297
  }
299
- if (action === "member-info") return await invoke({
300
- action: "memberInfo",
301
- userId: readStringParam(actionParams, "userId", { required: true }),
302
- accountId
303
- }, cfg);
298
+ if (action === "member-info") {
299
+ const requesterAccountId = ctx.requesterAccountId ? normalizeAccountId(ctx.requesterAccountId) : void 0;
300
+ const targetAccountId = normalizeAccountId(accountId ?? resolveDefaultSlackAccountId(cfg));
301
+ const requesterUserId = normalizeOptionalLowercaseString(ctx.toolContext?.currentChannelProvider) === "slack" && requesterAccountId !== void 0 && requesterAccountId === targetAccountId ? normalizeOptionalString(ctx.requesterSenderId) : void 0;
302
+ const userId = readStringParam(actionParams, "userId") ?? requesterUserId;
303
+ if (!userId) throw new Error("member-info requires a userId outside a current Slack conversation.");
304
+ return await invoke({
305
+ action: "memberInfo",
306
+ userId,
307
+ accountId
308
+ }, cfg);
309
+ }
304
310
  if (action === "emoji-list") return await invoke({
305
311
  action: "emojiList",
306
312
  limit: readPositiveIntegerParam(actionParams, "limit", { message: "limit must be a positive integer." }),
@@ -355,7 +361,7 @@ const SLACK_TOOL_DELIVERY_ACTIONS = new Set([
355
361
  "uploadFile"
356
362
  ]);
357
363
  async function loadSlackActionRuntime$1() {
358
- slackActionRuntimePromise$1 ??= import("./action-runtime.runtime-D05xDf1s.js");
364
+ slackActionRuntimePromise$1 ??= import("./action-runtime.runtime-CJyuCUxj.js");
359
365
  return await slackActionRuntimePromise$1;
360
366
  }
361
367
  function resolveSlackActionContext(params) {
@@ -472,8 +478,10 @@ function buildSlackThreadingToolContext(params) {
472
478
  const currentThreadTs = messageThreadTs ?? transportThreadTs ?? replyToThreadTs;
473
479
  const hasExplicitThreadTarget = messageThreadTs != null || transportThreadTs != null || replyToThreadTs != null && currentMessageTs != null && replyToThreadTs !== currentMessageTs;
474
480
  const effectiveReplyToMode = hasExplicitThreadTarget ? "all" : configuredReplyToMode;
481
+ const currentMessagingTarget = normalizeOptionalString(params.context.To);
475
482
  return {
476
- currentChannelId: params.context.To?.startsWith("channel:") ? params.context.To.slice(8) : normalizeOptionalString(params.context.NativeChannelId),
483
+ currentChannelId: currentMessagingTarget?.startsWith("channel:") ? currentMessagingTarget.slice(8) : normalizeOptionalString(params.context.NativeChannelId) ?? currentMessagingTarget,
484
+ currentMessagingTarget,
477
485
  currentThreadTs,
478
486
  replyToMode: effectiveReplyToMode,
479
487
  hasRepliedRef: params.hasRepliedRef,
@@ -486,9 +494,9 @@ const EXTENSION_SHARED_MODULE_ID = "openclaw/plugin-sdk/extension-shared";
486
494
  const TARGET_RESOLVER_RUNTIME_MODULE_ID = "openclaw/plugin-sdk/target-resolver-runtime";
487
495
  const loadExtensionSharedSdk = createLazyRuntimeModule(() => import(EXTENSION_SHARED_MODULE_ID));
488
496
  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"));
497
+ const loadSlackSetupSurfaceModule = createLazyRuntimeModule(() => import("./setup-surface-BHsOhTJd.js"));
498
+ const loadSlackScopesModule = createLazyRuntimeModule(() => import("./scopes-CR4oXiXN.js"));
499
+ const loadSlackOutboundAdapterModule = createLazyRuntimeModule(() => import("./outbound-adapter-CBFfXlOI.js"));
492
500
  async function resolveSlackHandleAction() {
493
501
  return getOptionalSlackRuntime()?.channel?.slack?.handleSlackAction ?? (await loadSlackActionRuntime()).handleSlackAction;
494
502
  }
@@ -508,27 +516,27 @@ let slackSendRuntimePromise;
508
516
  let slackProbeModulePromise;
509
517
  let slackMonitorModulePromise;
510
518
  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));
519
+ const loadSlackDirectoryConfigModule = createLazyRuntimeModule(() => import("./directory-config-Dmhi8ECy.js").then((n) => n.t));
520
+ const loadSlackResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels-DNiE0Z0_.js").then((n) => n.n));
521
+ const loadSlackResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-D_TmaIfG.js").then((n) => n.n));
514
522
  async function loadSlackActionRuntime() {
515
- slackActionRuntimePromise ??= import("./action-runtime.runtime-D05xDf1s.js");
523
+ slackActionRuntimePromise ??= import("./action-runtime.runtime-CJyuCUxj.js");
516
524
  return await slackActionRuntimePromise;
517
525
  }
518
526
  async function loadSlackSendRuntime() {
519
- slackSendRuntimePromise ??= import("./send.runtime-DGyqPLWj.js");
527
+ slackSendRuntimePromise ??= import("./send.runtime-CbeGF-al.js");
520
528
  return await slackSendRuntimePromise;
521
529
  }
522
530
  async function loadSlackProbeModule() {
523
- slackProbeModulePromise ??= import("./probe-BTKzLT2u.js").then((n) => n.n);
531
+ slackProbeModulePromise ??= import("./probe-C3PL00Ms.js").then((n) => n.n);
524
532
  return await slackProbeModulePromise;
525
533
  }
526
534
  async function loadSlackMonitorModule() {
527
- slackMonitorModulePromise ??= import("./monitor-DwDmBYfl.js").then((n) => n.t);
535
+ slackMonitorModulePromise ??= import("./monitor-CAdKQeRW.js").then((n) => n.t);
528
536
  return await slackMonitorModulePromise;
529
537
  }
530
538
  async function loadSlackDirectoryLiveModule() {
531
- slackDirectoryLiveModulePromise ??= import("./directory-live-C1acgXKJ.js").then((n) => n.t);
539
+ slackDirectoryLiveModulePromise ??= import("./directory-live-D_pIXtL1.js").then((n) => n.t);
532
540
  return await slackDirectoryLiveModulePromise;
533
541
  }
534
542
  async function resolveSlackSendContext(params) {
@@ -883,7 +891,7 @@ const slackPlugin = createChatChannelPlugin({
883
891
  actions: createSlackActions(SLACK_CHANNEL, { invoke: async (action, cfg, toolContext) => await (await resolveSlackHandleAction())(action, cfg, toolContext) }),
884
892
  message: slackMessageAdapter,
885
893
  status: createComputedAccountStatusAdapter({
886
- defaultRuntime: createDefaultChannelRuntimeState(DEFAULT_ACCOUNT_ID),
894
+ defaultRuntime: createDefaultChannelRuntimeState(DEFAULT_ACCOUNT_ID$1),
887
895
  buildChannelSummary: async ({ snapshot }) => {
888
896
  const { buildPassiveProbedChannelStatusSummary } = await loadExtensionSharedSdk();
889
897
  return buildPassiveProbedChannelStatusSummary(snapshot, {
@@ -989,6 +997,7 @@ const slackPlugin = createChatChannelPlugin({
989
997
  } },
990
998
  security: slackSecurityAdapter,
991
999
  threading: {
1000
+ matchesToolContextTarget: ({ target, toolContext }) => slackContextTargetsMatch(target, toolContext),
992
1001
  scopedAccountReplyToMode: {
993
1002
  resolveAccount: adaptScopedAccountAccessor(resolveSlackAccount),
994
1003
  resolveReplyToMode: (account, chatType) => resolveSlackReplyToMode(account, chatType)
@@ -999,13 +1008,16 @@ const slackPlugin = createChatChannelPlugin({
999
1008
  to,
1000
1009
  toolContext
1001
1010
  })),
1002
- resolveReplyTransport: ({ threadId, replyToId }) => ({
1003
- replyToId: resolveSlackThreadTsValue({
1004
- replyToId,
1011
+ resolveReplyTransport: ({ threadId, replyToId, replyDelivery }) => {
1012
+ const resolvedReplyToId = resolveSlackThreadTsValue({
1013
+ replyToId: replyDelivery?.replyToMode === "off" ? void 0 : replyToId,
1005
1014
  threadId
1006
- }),
1007
- threadId: null
1008
- })
1015
+ });
1016
+ return {
1017
+ replyToId: replyDelivery?.replyToMode === "off" && !resolvedReplyToId ? null : resolvedReplyToId,
1018
+ threadId: null
1019
+ };
1020
+ }
1009
1021
  },
1010
1022
  outbound: slackChannelOutbound
1011
1023
  });
@@ -1,2 +1,2 @@
1
- import { t as slackPlugin } from "./channel-BxD37X5Y.js";
1
+ import { t as slackPlugin } from "./channel-CwSI6hhC.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-DbHhtmBz.js";
3
+ import { t as isSlackChannelAllowedByPolicy } from "./policy-Dfbxkneh.js";
4
+ import { o as resolveSlackThreadTs } from "./replies-CH4Dmgbr.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-CbeGF-al.js");
13
14
  return await slackSendRuntimePromise;
14
15
  }
15
16
  function resolveRenderedInteractiveBlocks(interactive, previousBlocks) {