@openclaw/slack 2026.5.12 → 2026.5.14-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 (86) hide show
  1. package/dist/{account-inspect-D7AZNs8C.js → account-inspect-BJyQLSkN.js} +1 -1
  2. package/dist/account-inspect-api.js +1 -1
  3. package/dist/{accounts-ClAPP5ry.js → accounts-yk5K3wQU.js} +2 -1
  4. package/dist/accounts.runtime-CkfFIisb.js +2 -0
  5. package/dist/{action-runtime-e2UhRsNx.js → action-runtime-gtC-RM3r.js} +4 -4
  6. package/dist/action-runtime.runtime-DbVd7_Na.js +2 -0
  7. package/dist/{actions-CYLFK-Zy.js → actions-Cqyj7oRr.js} +26 -9
  8. package/dist/{actions.runtime-CO3OaTLb.js → actions.runtime-DD6hfFCA.js} +1 -1
  9. package/dist/api.js +18 -18
  10. package/dist/approval-auth-D3xf0sS6.js +28 -0
  11. package/dist/{approval-handler.runtime-CmeRr9qA.js → approval-handler.runtime-DeYBuIaU.js} +4 -4
  12. package/dist/{blocks-render-BIDw-Pom.js → blocks-render-BdLueE_v.js} +1 -1
  13. package/dist/{channel-DRjHBTDB.js → channel-CC04F-xs.js} +28 -52
  14. package/dist/channel-config-api.js +1 -1
  15. package/dist/channel-plugin-api.js +1 -1
  16. package/dist/{channel.setup-Cayn7afd.js → channel.setup-jzYjY634.js} +4 -4
  17. package/dist/{config-schema-D9B5LB_L.js → config-schema-Bueih4yH.js} +21 -1
  18. package/dist/contract-api.js +4 -4
  19. package/dist/{directory-config-B3JiHeB7.js → directory-config-BKKNBkCq.js} +1 -1
  20. package/dist/directory-contract-api.js +1 -1
  21. package/dist/{directory-live-Bf16GwDh.js → directory-live-CuaWaGnM.js} +2 -2
  22. package/dist/{doctor-contract-KUjHnkQm.js → doctor-contract-DCkS8eNN.js} +1 -1
  23. package/dist/doctor-contract-api.js +1 -1
  24. package/dist/{exec-approvals-7xUNgLi9.js → exec-approvals-BLn4Zx7V.js} +3 -3
  25. package/dist/{group-policy-CyLUK6My.js → group-policy-utF2iWnE.js} +1 -1
  26. package/dist/http-routes-api.js +1 -1
  27. package/dist/inbound-contract-test-api.js +2 -2
  28. package/dist/{interactive-replies-qAIfuBor.js → interactive-replies-CawNPL-h.js} +1 -1
  29. package/dist/interactive-replies-api.js +1 -1
  30. package/dist/{media-D1XCd1uP.js → media-B-nNpS2G.js} +32 -21
  31. package/dist/{message-tool-api-6lowf9zE.js → message-tool-api-B_bKUmP0.js} +2 -2
  32. package/dist/message-tool-api.js +1 -1
  33. package/dist/{monitor-a97o17G6.js → monitor-B3QB1ysK.js} +3 -3
  34. package/dist/{outbound-adapter-B_5sEhCg.js → outbound-adapter-DsAvCwpZ.js} +5 -5
  35. package/dist/outbound-payload-test-api.js +1 -1
  36. package/dist/{outbound-payload.test-harness-CVCamg1x.js → outbound-payload.test-harness-DM9ZdY2f.js} +2 -2
  37. package/dist/{pipeline.runtime-DT0hLnq2.js → pipeline.runtime-D-YJZZaI.js} +49 -22
  38. package/dist/{plugin-routes-DtTPmga1.js → plugin-routes-Dt_jh9W8.js} +2 -2
  39. package/dist/{prepare-D3YqV8jB.js → prepare-CXI8nHbJ.js} +10 -10
  40. package/dist/{prepare.test-helpers-DVcjRhfG.js → prepare.test-helpers-BhFHtbz3.js} +1 -1
  41. package/dist/{probe-3eZf1FjI.js → probe-D1wYA05H.js} +2 -2
  42. package/dist/{provider-D7uAN3Fq.js → provider-Ut7IF0Mn.js} +66 -29
  43. package/dist/{replies-Xe_jMR6o.js → replies-CzfjCaLG.js} +4 -4
  44. package/dist/{reply-blocks-Z5l6_R6H.js → reply-blocks-DWoZrUll.js} +2 -2
  45. package/dist/{resolve-channels-BRYqyNVJ.js → resolve-channels-BiVxSLVm.js} +2 -2
  46. package/dist/{resolve-users-Bd_SdP8j.js → resolve-users-CcpSlYw-.js} +2 -2
  47. package/dist/{room-context-0vovmZPU.js → room-context-D0hGOp8m.js} +4 -2
  48. package/dist/{runtime-api-Dd1xIV5v.js → runtime-api-D8wiG9BS.js} +2 -2
  49. package/dist/runtime-api.js +13 -13
  50. package/dist/runtime-setter-api.js +1 -1
  51. package/dist/{scopes-CDevO8jg.js → scopes-BTkB8PPE.js} +2 -2
  52. package/dist/secret-contract-api.js +1 -1
  53. package/dist/security-contract-api.js +1 -1
  54. package/dist/{send-D_A9kL-C.js → send-ioky2Xpy.js} +6 -6
  55. package/dist/send.runtime-5Kl3Wzbf.js +2 -0
  56. package/dist/send.runtime-DoifekaA.js +2 -0
  57. package/dist/{setup-core-B9NetDkM.js → setup-core-DgLJ7dQY.js} +2 -2
  58. package/dist/setup-plugin-api.js +1 -1
  59. package/dist/{setup-surface-D88QBVOW.js → setup-surface-B6w9gtds.js} +5 -5
  60. package/dist/{shared-D8U42xFL.js → shared-CSiHkaVO.js} +9 -9
  61. package/dist/{slash-dispatch.runtime-BJgT0jwV.js → slash-dispatch.runtime-DNr1EDON.js} +1 -1
  62. package/dist/test-api.js +7 -7
  63. package/openclaw.plugin.json +116 -0
  64. package/package.json +8 -6
  65. package/dist/accounts.runtime-DDVcLJUI.js +0 -2
  66. package/dist/action-runtime.runtime-BFcqMbOm.js +0 -2
  67. package/dist/send.runtime-BRE_ncCU.js +0 -2
  68. package/dist/send.runtime-_l76lUuL.js +0 -2
  69. /package/dist/{allow-list-BPnnlRPL.js → allow-list-T7ZDpUsF.js} +0 -0
  70. /package/dist/{blocks-input-CwTFVImV.js → blocks-input-BJZ8vv03.js} +0 -0
  71. /package/dist/{channel-api-B_nZwosg.js → channel-api-BfBK89IN.js} +0 -0
  72. /package/dist/{client-CPe4GmDR.js → client-8r7r7aZ3.js} +0 -0
  73. /package/dist/{config-api-B_jq4NJW.js → config-api-B48Z4H47.js} +0 -0
  74. /package/dist/{errors-BYFHR24f.js → errors-BrtayXHa.js} +0 -0
  75. /package/dist/{magic-string.es-BMaGRRZ1.js → magic-string.es-BLAi6qQC.js} +0 -0
  76. /package/dist/{mrkdwn-Cax-eSfK.js → mrkdwn-18IzcEAY.js} +0 -0
  77. /package/dist/{registry-CeaoNfoP.js → registry-BdfKYina.js} +0 -0
  78. /package/dist/{resolve-allowlist-common-Bk3clYPK.js → resolve-allowlist-common-rhfyDyWi.js} +0 -0
  79. /package/dist/{runtime-Bo-KHM-F.js → runtime--VlVtTPu.js} +0 -0
  80. /package/dist/{secret-contract-Bo6lbSkh.js → secret-contract-BurGIyhv.js} +0 -0
  81. /package/dist/{security-audit-BtHGnD3d.js → security-audit-DvOpSaZM.js} +0 -0
  82. /package/dist/{slash-commands.runtime-22kgyst2.js → slash-commands.runtime-DRkNgIQ2.js} +0 -0
  83. /package/dist/{slash-plugin-commands.runtime-CF-n3MeP.js → slash-plugin-commands.runtime-Dj5h8hmv.js} +0 -0
  84. /package/dist/{slash-skill-commands.runtime-BMs0VjTe.js → slash-skill-commands.runtime-B-_KAk0C.js} +0 -0
  85. /package/dist/{streaming-compat-RkZgTmQ2.js → streaming-compat-C6rySwiD.js} +0 -0
  86. /package/dist/{thread-ts-C2x7c5PP.js → thread-ts-o-QBwB3k.js} +0 -0
@@ -1,4 +1,4 @@
1
- import { i as resolveDefaultSlackAccountId, r as mergeSlackAccountConfig } from "./accounts-ClAPP5ry.js";
1
+ import { i as resolveDefaultSlackAccountId, r as mergeSlackAccountConfig } from "./accounts-yk5K3wQU.js";
2
2
  import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
3
3
  import { hasConfiguredSecretInput, normalizeSecretInputString } from "openclaw/plugin-sdk/secret-input";
4
4
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -1,4 +1,4 @@
1
- import { t as inspectSlackAccount } from "./account-inspect-D7AZNs8C.js";
1
+ import { t as inspectSlackAccount } from "./account-inspect-BJyQLSkN.js";
2
2
  //#region extensions/slack/account-inspect-api.ts
3
3
  function inspectSlackReadOnlyAccount(cfg, accountId) {
4
4
  return inspectSlackAccount({
@@ -48,7 +48,8 @@ function mergeSlackAccountConfig(cfg, accountId) {
48
48
  return resolveMergedAccountConfig({
49
49
  channelConfig: cfg.channels?.slack,
50
50
  accounts: cfg.channels?.slack?.accounts,
51
- accountId
51
+ accountId,
52
+ nestedObjectKeys: ["botLoopProtection"]
52
53
  });
53
54
  }
54
55
  function resolveSlackAccountAllowFrom(params) {
@@ -0,0 +1,2 @@
1
+ import { a as resolveSlackAccount } from "./accounts-yk5K3wQU.js";
2
+ export { resolveSlackAccount };
@@ -1,7 +1,7 @@
1
1
  import { i as resolveSlackChannelId, r as parseSlackTarget } from "./target-parsing-CQmv-iSm.js";
2
2
  import "./targets-B1tYCAr6.js";
3
- import { n as parseSlackBlocksInput } from "./blocks-input-CwTFVImV.js";
4
- import { a as readNumberParam, c as withNormalizedTimestamp, n as imageResultFromFile, o as readReactionParams, r as jsonResult, s as readStringParam, t as createActionGate } from "./runtime-api-Dd1xIV5v.js";
3
+ import { n as parseSlackBlocksInput } from "./blocks-input-BJZ8vv03.js";
4
+ import { a as readNumberParam, c as withNormalizedTimestamp, n as imageResultFromFile, o as readReactionParams, r as jsonResult, s as readStringParam, t as createActionGate } from "./runtime-api-D8wiG9BS.js";
5
5
  import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
6
6
  import { isSingleUseReplyToMode } from "openclaw/plugin-sdk/reply-reference";
7
7
  import { readBooleanParam } from "openclaw/plugin-sdk/boolean-param";
@@ -28,11 +28,11 @@ function sameSlackChannelTarget(targetChannel, currentChannelId) {
28
28
  let slackActionsRuntimePromise;
29
29
  let slackAccountsRuntimePromise;
30
30
  function loadSlackActionsRuntime() {
31
- slackActionsRuntimePromise ??= import("./actions.runtime-CO3OaTLb.js");
31
+ slackActionsRuntimePromise ??= import("./actions.runtime-DD6hfFCA.js");
32
32
  return slackActionsRuntimePromise;
33
33
  }
34
34
  function loadSlackAccountsRuntime() {
35
- slackAccountsRuntimePromise ??= import("./accounts.runtime-DDVcLJUI.js");
35
+ slackAccountsRuntimePromise ??= import("./accounts.runtime-CkfFIisb.js");
36
36
  return slackAccountsRuntimePromise;
37
37
  }
38
38
  function createLazySlackAction(key) {
@@ -0,0 +1,2 @@
1
+ import { t as handleSlackAction } from "./action-runtime-gtC-RM3r.js";
2
+ export { handleSlackAction };
@@ -1,11 +1,12 @@
1
- import { a as resolveSlackAccount, d as resolveSlackBotToken } from "./accounts-ClAPP5ry.js";
2
- import { i as truncateSlackText, r as SLACK_TEXT_LIMIT } from "./thread-ts-C2x7c5PP.js";
3
- import { a as getSlackWriteClient, r as createSlackWebClient } from "./client-CPe4GmDR.js";
4
- import { r as validateSlackBlocksArray } from "./blocks-input-CwTFVImV.js";
5
- import { c as buildSlackBlocksFallbackText, t as sendMessageSlack } from "./send-D_A9kL-C.js";
6
- import { n as resolveSlackMedia } from "./media-D1XCd1uP.js";
1
+ import { a as resolveSlackAccount, d as resolveSlackBotToken } from "./accounts-yk5K3wQU.js";
2
+ import { i as truncateSlackText, r as SLACK_TEXT_LIMIT } from "./thread-ts-o-QBwB3k.js";
3
+ import { a as getSlackWriteClient, r as createSlackWebClient } from "./client-8r7r7aZ3.js";
4
+ import { r as validateSlackBlocksArray } from "./blocks-input-BJZ8vv03.js";
5
+ import { c as buildSlackBlocksFallbackText, t as sendMessageSlack } from "./send-ioky2Xpy.js";
6
+ import { n as resolveSlackMedia } from "./media-B-nNpS2G.js";
7
7
  import { requireRuntimeConfig } from "openclaw/plugin-sdk/plugin-config-runtime";
8
8
  import { logVerbose } from "openclaw/plugin-sdk/runtime-env";
9
+ import { z } from "zod";
9
10
  //#region extensions/slack/src/edit-text.ts
10
11
  function buildSlackEditTextPayload(content, blocks) {
11
12
  const trimmedContent = content.trim();
@@ -37,6 +38,22 @@ function normalizeEmoji(raw) {
37
38
  if (!trimmed) throw new Error("Emoji is required for Slack reactions");
38
39
  return trimmed.replace(/^:+|:+$/g, "");
39
40
  }
41
+ const SLACK_TIMESTAMP_RE = /^\d+(?:\.\d+)?$/;
42
+ const ISO_8601_TIMESTAMP_SCHEMA = z.iso.datetime({ offset: true });
43
+ function formatEpochSeconds(milliseconds) {
44
+ const seconds = milliseconds / 1e3;
45
+ if (Number.isInteger(seconds)) return String(seconds);
46
+ return seconds.toFixed(3).replace(/0+$/, "").replace(/\.$/, "");
47
+ }
48
+ function normalizeSlackReadTimestamp(raw, field) {
49
+ const trimmed = raw?.trim();
50
+ if (!trimmed) return;
51
+ if (SLACK_TIMESTAMP_RE.test(trimmed)) return trimmed;
52
+ if (!ISO_8601_TIMESTAMP_SCHEMA.safeParse(trimmed).success) throw new Error(`Invalid Slack read ${field} timestamp "${trimmed}": expected a Slack timestamp or ISO-8601 date string`);
53
+ const parsed = Date.parse(trimmed);
54
+ if (!Number.isFinite(parsed)) throw new Error(`Invalid Slack read ${field} timestamp "${trimmed}": expected a Slack timestamp or ISO-8601 date string`);
55
+ return formatEpochSeconds(parsed);
56
+ }
40
57
  function hasSlackPlatformError(err, code) {
41
58
  if (!err || typeof err !== "object") return false;
42
59
  const data = err.data;
@@ -137,7 +154,6 @@ async function deleteSlackMessage(channelId, messageId, opts = {}) {
137
154
  });
138
155
  }
139
156
  async function readSlackMessages(channelId, opts = {}) {
140
- const client = await getClient(opts);
141
157
  const exactMessageId = opts.messageId?.trim();
142
158
  const readLimit = exactMessageId ? 1 : opts.limit;
143
159
  const exactBounds = exactMessageId ? {
@@ -145,9 +161,10 @@ async function readSlackMessages(channelId, opts = {}) {
145
161
  latest: exactMessageId,
146
162
  oldest: void 0
147
163
  } : {
148
- latest: opts.before,
149
- oldest: opts.after
164
+ latest: normalizeSlackReadTimestamp(opts.before, "before"),
165
+ oldest: normalizeSlackReadTimestamp(opts.after, "after")
150
166
  };
167
+ const client = await getClient(opts);
151
168
  if (opts.threadId) {
152
169
  const result = await client.conversations.replies({
153
170
  channel: channelId,
@@ -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-CYLFK-Zy.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-Cqyj7oRr.js";
2
2
  export { deleteSlackMessage, downloadSlackFile, editSlackMessage, getSlackMemberInfo, listSlackEmojis, listSlackPins, listSlackReactions, pinSlackMessage, reactSlackMessage, readSlackMessages, removeOwnSlackReactions, removeSlackReaction, sendSlackMessage, unpinSlackMessage };
package/dist/api.js CHANGED
@@ -1,21 +1,21 @@
1
- import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId, l as resolveSlackReplyToMode, n as listSlackAccountIds, r as mergeSlackAccountConfig, t as listEnabledSlackAccounts } from "./accounts-ClAPP5ry.js";
2
- import { t as inspectSlackAccount } from "./account-inspect-D7AZNs8C.js";
1
+ import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId, l as resolveSlackReplyToMode, n as listSlackAccountIds, r as mergeSlackAccountConfig, t as listEnabledSlackAccounts } from "./accounts-yk5K3wQU.js";
2
+ import { t as inspectSlackAccount } from "./account-inspect-BJyQLSkN.js";
3
3
  import { i as resolveSlackChannelId, n as normalizeSlackMessagingTarget, r as parseSlackTarget, t as looksLikeSlackTargetId } from "./target-parsing-CQmv-iSm.js";
4
4
  import "./targets-B1tYCAr6.js";
5
- import { i as resolveSlackChannelType, n as buildSlackThreadingToolContext, o as resolveSlackAutoThreadId, r as __resetSlackChannelTypeCacheForTest, t as slackPlugin } from "./channel-DRjHBTDB.js";
6
- import { n as buildSlackPresentationBlocks, t as buildSlackInteractiveBlocks } from "./blocks-render-BIDw-Pom.js";
7
- import { n as extractSlackToolSend, r as listSlackMessageActions } from "./message-tool-api-6lowf9zE.js";
8
- import { n as isSlackInteractiveRepliesEnabled, r as parseSlackOptionsLine, t as compileSlackInteractiveReplies } from "./interactive-replies-qAIfuBor.js";
9
- 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-CPe4GmDR.js";
10
- import { a as normalizeSlackSlug, i as normalizeSlackAllowOwnerEntry, n as normalizeAllowList, o as resolveSlackAllowListMatch, r as normalizeAllowListLower, s as resolveSlackUserAllowed, t as allowListMatches } from "./allow-list-BPnnlRPL.js";
11
- import { n as resolveSlackGroupToolPolicy, t as resolveSlackGroupRequireMention } from "./group-policy-CyLUK6My.js";
12
- import { n as parseSlackBlocksInput, r as validateSlackBlocksArray, t as SLACK_MAX_BLOCKS } from "./blocks-input-CwTFVImV.js";
13
- import { t as slackSetupPlugin } from "./channel.setup-Cayn7afd.js";
14
- import { a as recordSlackThreadParticipation, n as clearSlackThreadParticipationCache, r as hasSlackThreadParticipation } from "./send-D_A9kL-C.js";
15
- 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-CYLFK-Zy.js";
16
- import { n as listSlackDirectoryGroupsFromConfig, r as listSlackDirectoryPeersFromConfig } from "./directory-config-B3JiHeB7.js";
17
- import { n as registerSlackHttpHandler, r as normalizeSlackWebhookPath, t as handleSlackHttpRequest } from "./registry-CeaoNfoP.js";
18
- import { t as probeSlack } from "./probe-3eZf1FjI.js";
19
- import { t as collectSlackSecurityAuditFindings } from "./security-audit-BtHGnD3d.js";
20
- import { n as resolveSlackRuntimeGroupPolicy } from "./provider-D7uAN3Fq.js";
5
+ import { i as resolveSlackChannelType, n as buildSlackThreadingToolContext, o as resolveSlackAutoThreadId, r as __resetSlackChannelTypeCacheForTest, t as slackPlugin } from "./channel-CC04F-xs.js";
6
+ import { n as buildSlackPresentationBlocks, t as buildSlackInteractiveBlocks } from "./blocks-render-BdLueE_v.js";
7
+ import { n as extractSlackToolSend, r as listSlackMessageActions } from "./message-tool-api-B_bKUmP0.js";
8
+ import { n as isSlackInteractiveRepliesEnabled, r as parseSlackOptionsLine, t as compileSlackInteractiveReplies } from "./interactive-replies-CawNPL-h.js";
9
+ 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-8r7r7aZ3.js";
10
+ import { a as normalizeSlackSlug, i as normalizeSlackAllowOwnerEntry, n as normalizeAllowList, o as resolveSlackAllowListMatch, r as normalizeAllowListLower, s as resolveSlackUserAllowed, t as allowListMatches } from "./allow-list-T7ZDpUsF.js";
11
+ import { n as resolveSlackGroupToolPolicy, t as resolveSlackGroupRequireMention } from "./group-policy-utF2iWnE.js";
12
+ import { n as parseSlackBlocksInput, r as validateSlackBlocksArray, t as SLACK_MAX_BLOCKS } from "./blocks-input-BJZ8vv03.js";
13
+ import { t as slackSetupPlugin } from "./channel.setup-jzYjY634.js";
14
+ import { a as recordSlackThreadParticipation, n as clearSlackThreadParticipationCache, r as hasSlackThreadParticipation } from "./send-ioky2Xpy.js";
15
+ 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-Cqyj7oRr.js";
16
+ import { n as listSlackDirectoryGroupsFromConfig, r as listSlackDirectoryPeersFromConfig } from "./directory-config-BKKNBkCq.js";
17
+ import { n as registerSlackHttpHandler, r as normalizeSlackWebhookPath, t as handleSlackHttpRequest } from "./registry-BdfKYina.js";
18
+ import { t as probeSlack } from "./probe-D1wYA05H.js";
19
+ import { t as collectSlackSecurityAuditFindings } from "./security-audit-DvOpSaZM.js";
20
+ import { n as resolveSlackRuntimeGroupPolicy } from "./provider-Ut7IF0Mn.js";
21
21
  export { SLACK_DEFAULT_RETRY_OPTIONS, SLACK_MAX_BLOCKS, SLACK_WRITE_RETRY_OPTIONS, __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 };
@@ -0,0 +1,28 @@
1
+ import { a as resolveSlackAccount, o as resolveSlackAccountAllowFrom } from "./accounts-yk5K3wQU.js";
2
+ import { i as normalizeSlackApproverId } from "./exec-approvals-BLn4Zx7V.js";
3
+ import { createResolvedApproverActionAuthAdapter, resolveApprovalApprovers } from "openclaw/plugin-sdk/approval-auth-runtime";
4
+ //#region extensions/slack/src/approval-auth.ts
5
+ function getSlackApprovalApprovers(params) {
6
+ const account = resolveSlackAccount(params).config;
7
+ return resolveApprovalApprovers({
8
+ allowFrom: resolveSlackAccountAllowFrom(params),
9
+ defaultTo: account.defaultTo,
10
+ normalizeApprover: normalizeSlackApproverId,
11
+ normalizeDefaultTo: normalizeSlackApproverId
12
+ });
13
+ }
14
+ function isSlackApprovalAuthorizedSender(params) {
15
+ const senderId = params.senderId ? normalizeSlackApproverId(params.senderId) : void 0;
16
+ if (!senderId) return false;
17
+ return getSlackApprovalApprovers(params).includes(senderId);
18
+ }
19
+ createResolvedApproverActionAuthAdapter({
20
+ channelLabel: "Slack",
21
+ resolveApprovers: ({ cfg, accountId }) => getSlackApprovalApprovers({
22
+ cfg,
23
+ accountId
24
+ }),
25
+ normalizeSenderId: (value) => normalizeSlackApproverId(value)
26
+ });
27
+ //#endregion
28
+ export { isSlackApprovalAuthorizedSender as t };
@@ -1,7 +1,7 @@
1
- import { a as normalizeSlackApproverId, i as isSlackExecApprovalClientEnabled, s as shouldHandleSlackExecApprovalRequest } from "./exec-approvals-7xUNgLi9.js";
2
- import { i as truncateSlackText } from "./thread-ts-C2x7c5PP.js";
3
- import { t as resolveSlackReplyBlocks } from "./reply-blocks-Z5l6_R6H.js";
4
- import { t as sendMessageSlack } from "./send-D_A9kL-C.js";
1
+ import { i as normalizeSlackApproverId, o as shouldHandleSlackExecApprovalRequest, r as isSlackExecApprovalClientEnabled } from "./exec-approvals-BLn4Zx7V.js";
2
+ import { i as truncateSlackText } from "./thread-ts-o-QBwB3k.js";
3
+ import { t as resolveSlackReplyBlocks } from "./reply-blocks-DWoZrUll.js";
4
+ import { t as sendMessageSlack } from "./send-ioky2Xpy.js";
5
5
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
6
6
  import { buildChannelApprovalNativeTargetKey } from "openclaw/plugin-sdk/approval-native-runtime";
7
7
  import { logError } from "openclaw/plugin-sdk/logging-core";
@@ -1,4 +1,4 @@
1
- import { i as truncateSlackText } from "./thread-ts-C2x7c5PP.js";
1
+ import { i as truncateSlackText } from "./thread-ts-o-QBwB3k.js";
2
2
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
3
3
  import { presentationToInteractiveControlsReply, reduceInteractiveReply } from "openclaw/plugin-sdk/interactive-runtime";
4
4
  //#region extensions/slack/src/reply-action-ids.ts
@@ -1,19 +1,20 @@
1
- import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId, l as resolveSlackReplyToMode, n as listSlackAccountIds, o as resolveSlackAccountAllowFrom } from "./accounts-ClAPP5ry.js";
1
+ import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId, l as resolveSlackReplyToMode, n as listSlackAccountIds, o as resolveSlackAccountAllowFrom } from "./accounts-yk5K3wQU.js";
2
2
  import { i as resolveSlackChannelId, n as normalizeSlackMessagingTarget, r as parseSlackTarget, t as looksLikeSlackTargetId } from "./target-parsing-CQmv-iSm.js";
3
3
  import "./targets-B1tYCAr6.js";
4
- import { a as normalizeSlackApproverId, c as shouldSuppressLocalSlackExecApprovalPrompt, i as isSlackExecApprovalClientEnabled, o as resolveSlackExecApprovalTarget, r as isSlackExecApprovalAuthorizedSender, s as shouldHandleSlackExecApprovalRequest, t as getSlackExecApprovalApprovers } from "./exec-approvals-7xUNgLi9.js";
5
- import { n as buildSlackPresentationBlocks, r as resolveSlackInteractiveBlockOffsets, t as buildSlackInteractiveBlocks } from "./blocks-render-BIDw-Pom.js";
6
- import { n as resolveSlackThreadTsValue, r as SLACK_TEXT_LIMIT, t as normalizeSlackThreadTsCandidate } from "./thread-ts-C2x7c5PP.js";
7
- import { n as extractSlackToolSend, t as describeSlackMessageTool } from "./message-tool-api-6lowf9zE.js";
8
- import { n as isSlackInteractiveRepliesEnabled, t as compileSlackInteractiveReplies } from "./interactive-replies-qAIfuBor.js";
9
- import { a as resolveConfiguredFromRequiredCredentialStatuses, i as projectCredentialSnapshotFields, n as PAIRING_APPROVED_MESSAGE, t as DEFAULT_ACCOUNT_ID } from "./channel-api-B_nZwosg.js";
10
- import { r as createSlackWebClient } from "./client-CPe4GmDR.js";
11
- import { r as normalizeAllowListLower } from "./allow-list-BPnnlRPL.js";
12
- import { n as resolveSlackGroupToolPolicy, t as resolveSlackGroupRequireMention } from "./group-policy-CyLUK6My.js";
13
- import { t as resolveSlackReplyBlocks } from "./reply-blocks-Z5l6_R6H.js";
14
- import { t as getOptionalSlackRuntime } from "./runtime-Bo-KHM-F.js";
15
- import { i as slackSecurityAdapter, n as isSlackPluginAccountConfigured, r as slackConfigAdapter, t as createSlackPluginBase } from "./shared-D8U42xFL.js";
16
- import { i as SLACK_CHANNEL, n as createSlackSetupWizardProxy, r as slackSetupAdapter } from "./setup-core-B9NetDkM.js";
4
+ import { a as resolveSlackExecApprovalTarget, n as isSlackExecApprovalAuthorizedSender, o as shouldHandleSlackExecApprovalRequest, r as isSlackExecApprovalClientEnabled, s as shouldSuppressLocalSlackExecApprovalPrompt, t as getSlackExecApprovalApprovers } from "./exec-approvals-BLn4Zx7V.js";
5
+ import { t as isSlackApprovalAuthorizedSender } from "./approval-auth-D3xf0sS6.js";
6
+ import { n as buildSlackPresentationBlocks, r as resolveSlackInteractiveBlockOffsets, t as buildSlackInteractiveBlocks } from "./blocks-render-BdLueE_v.js";
7
+ import { n as resolveSlackThreadTsValue, r as SLACK_TEXT_LIMIT, t as normalizeSlackThreadTsCandidate } from "./thread-ts-o-QBwB3k.js";
8
+ import { n as extractSlackToolSend, t as describeSlackMessageTool } from "./message-tool-api-B_bKUmP0.js";
9
+ import { n as isSlackInteractiveRepliesEnabled, t as compileSlackInteractiveReplies } from "./interactive-replies-CawNPL-h.js";
10
+ import { a as resolveConfiguredFromRequiredCredentialStatuses, i as projectCredentialSnapshotFields, n as PAIRING_APPROVED_MESSAGE, t as DEFAULT_ACCOUNT_ID } from "./channel-api-BfBK89IN.js";
11
+ import { r as createSlackWebClient } from "./client-8r7r7aZ3.js";
12
+ import { r as normalizeAllowListLower } from "./allow-list-T7ZDpUsF.js";
13
+ import { n as resolveSlackGroupToolPolicy, t as resolveSlackGroupRequireMention } from "./group-policy-utF2iWnE.js";
14
+ import { t as resolveSlackReplyBlocks } from "./reply-blocks-DWoZrUll.js";
15
+ import { t as getOptionalSlackRuntime } from "./runtime--VlVtTPu.js";
16
+ import { i as slackSecurityAdapter, n as isSlackPluginAccountConfigured, r as slackConfigAdapter, t as createSlackPluginBase } from "./shared-CSiHkaVO.js";
17
+ import { i as SLACK_CHANNEL, n as createSlackSetupWizardProxy, r as slackSetupAdapter } from "./setup-core-DgLJ7dQY.js";
17
18
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
18
19
  import { adaptScopedAccountAccessor } from "openclaw/plugin-sdk/channel-config-helpers";
19
20
  import { buildOutboundBaseSessionKey } from "openclaw/plugin-sdk/routing";
@@ -31,7 +32,6 @@ import { createApproverRestrictedNativeApprovalCapability, splitChannelApprovalC
31
32
  import { createLazyChannelApprovalNativeRuntimeAdapter } from "openclaw/plugin-sdk/approval-handler-adapter-runtime";
32
33
  import { createChannelApproverDmTargetResolver, createChannelNativeOriginTargetResolver, resolveApprovalRequestSessionConversation } from "openclaw/plugin-sdk/approval-native-runtime";
33
34
  import { channelRouteTargetsMatchExact, stringifyRouteThreadId } from "openclaw/plugin-sdk/channel-route";
34
- import { createResolvedApproverActionAuthAdapter, resolveApprovalApprovers } from "openclaw/plugin-sdk/approval-auth-runtime";
35
35
  import { readBooleanParam } from "openclaw/plugin-sdk/boolean-param";
36
36
  import { normalizeInteractiveReply, normalizeMessagePresentation } from "openclaw/plugin-sdk/interactive-runtime";
37
37
  import { readNumberParam, readStringParam } from "openclaw/plugin-sdk/param-readers";
@@ -47,30 +47,6 @@ function resolveSlackAutoThreadId(params) {
47
47
  return context.currentThreadTs;
48
48
  }
49
49
  //#endregion
50
- //#region extensions/slack/src/approval-auth.ts
51
- function getSlackApprovalApprovers(params) {
52
- const account = resolveSlackAccount(params).config;
53
- return resolveApprovalApprovers({
54
- allowFrom: resolveSlackAccountAllowFrom(params),
55
- defaultTo: account.defaultTo,
56
- normalizeApprover: normalizeSlackApproverId,
57
- normalizeDefaultTo: normalizeSlackApproverId
58
- });
59
- }
60
- function isSlackApprovalAuthorizedSender(params) {
61
- const senderId = params.senderId ? normalizeSlackApproverId(params.senderId) : void 0;
62
- if (!senderId) return false;
63
- return getSlackApprovalApprovers(params).includes(senderId);
64
- }
65
- createResolvedApproverActionAuthAdapter({
66
- channelLabel: "Slack",
67
- resolveApprovers: ({ cfg, accountId }) => getSlackApprovalApprovers({
68
- cfg,
69
- accountId
70
- }),
71
- normalizeSenderId: (value) => normalizeSlackApproverId(value)
72
- });
73
- //#endregion
74
50
  //#region extensions/slack/src/approval-native.ts
75
51
  function extractSlackSessionKind(sessionKey) {
76
52
  if (!sessionKey) return null;
@@ -201,7 +177,7 @@ const slackApprovalCapability = createApproverRestrictedNativeApprovalCapability
201
177
  accountId,
202
178
  request
203
179
  }),
204
- load: async () => (await import("./approval-handler.runtime-CmeRr9qA.js")).slackApprovalNativeRuntime
180
+ load: async () => (await import("./approval-handler.runtime-DeYBuIaU.js")).slackApprovalNativeRuntime
205
181
  })
206
182
  });
207
183
  splitChannelApprovalCapability(slackApprovalCapability);
@@ -368,7 +344,7 @@ async function handleSlackMessageAction(params) {
368
344
  //#region extensions/slack/src/channel-actions.ts
369
345
  let slackActionRuntimePromise$1;
370
346
  async function loadSlackActionRuntime$1() {
371
- slackActionRuntimePromise$1 ??= import("./action-runtime.runtime-BFcqMbOm.js");
347
+ slackActionRuntimePromise$1 ??= import("./action-runtime.runtime-DbVd7_Na.js");
372
348
  return await slackActionRuntimePromise$1;
373
349
  }
374
350
  function resolveSlackActionContext(params) {
@@ -492,9 +468,9 @@ const EXTENSION_SHARED_MODULE_ID = "openclaw/plugin-sdk/extension-shared";
492
468
  const TARGET_RESOLVER_RUNTIME_MODULE_ID = "openclaw/plugin-sdk/target-resolver-runtime";
493
469
  const loadExtensionSharedSdk = createLazyRuntimeModule(() => import(EXTENSION_SHARED_MODULE_ID));
494
470
  const loadTargetResolverRuntimeSdk = createLazyRuntimeModule(() => import(TARGET_RESOLVER_RUNTIME_MODULE_ID));
495
- const loadSlackSetupSurfaceModule = createLazyRuntimeModule(() => import("./setup-surface-D88QBVOW.js"));
496
- const loadSlackScopesModule = createLazyRuntimeModule(() => import("./scopes-CDevO8jg.js"));
497
- const loadSlackOutboundAdapterModule = createLazyRuntimeModule(() => import("./outbound-adapter-B_5sEhCg.js").then((n) => n.t));
471
+ const loadSlackSetupSurfaceModule = createLazyRuntimeModule(() => import("./setup-surface-B6w9gtds.js"));
472
+ const loadSlackScopesModule = createLazyRuntimeModule(() => import("./scopes-BTkB8PPE.js"));
473
+ const loadSlackOutboundAdapterModule = createLazyRuntimeModule(() => import("./outbound-adapter-DsAvCwpZ.js").then((n) => n.t));
498
474
  async function resolveSlackHandleAction() {
499
475
  return getOptionalSlackRuntime()?.channel?.slack?.handleSlackAction ?? (await loadSlackActionRuntime()).handleSlackAction;
500
476
  }
@@ -514,27 +490,27 @@ let slackSendRuntimePromise;
514
490
  let slackProbeModulePromise;
515
491
  let slackMonitorModulePromise;
516
492
  let slackDirectoryLiveModulePromise;
517
- const loadSlackDirectoryConfigModule = createLazyRuntimeModule(() => import("./directory-config-B3JiHeB7.js").then((n) => n.t));
518
- const loadSlackResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels-BRYqyNVJ.js").then((n) => n.n));
519
- const loadSlackResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-Bd_SdP8j.js").then((n) => n.n));
493
+ const loadSlackDirectoryConfigModule = createLazyRuntimeModule(() => import("./directory-config-BKKNBkCq.js").then((n) => n.t));
494
+ const loadSlackResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels-BiVxSLVm.js").then((n) => n.n));
495
+ const loadSlackResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-CcpSlYw-.js").then((n) => n.n));
520
496
  async function loadSlackActionRuntime() {
521
- slackActionRuntimePromise ??= import("./action-runtime.runtime-BFcqMbOm.js");
497
+ slackActionRuntimePromise ??= import("./action-runtime.runtime-DbVd7_Na.js");
522
498
  return await slackActionRuntimePromise;
523
499
  }
524
500
  async function loadSlackSendRuntime() {
525
- slackSendRuntimePromise ??= import("./send.runtime-_l76lUuL.js");
501
+ slackSendRuntimePromise ??= import("./send.runtime-5Kl3Wzbf.js");
526
502
  return await slackSendRuntimePromise;
527
503
  }
528
504
  async function loadSlackProbeModule() {
529
- slackProbeModulePromise ??= import("./probe-3eZf1FjI.js").then((n) => n.n);
505
+ slackProbeModulePromise ??= import("./probe-D1wYA05H.js").then((n) => n.n);
530
506
  return await slackProbeModulePromise;
531
507
  }
532
508
  async function loadSlackMonitorModule() {
533
- slackMonitorModulePromise ??= import("./monitor-a97o17G6.js").then((n) => n.t);
509
+ slackMonitorModulePromise ??= import("./monitor-B3QB1ysK.js").then((n) => n.t);
534
510
  return await slackMonitorModulePromise;
535
511
  }
536
512
  async function loadSlackDirectoryLiveModule() {
537
- slackDirectoryLiveModulePromise ??= import("./directory-live-Bf16GwDh.js").then((n) => n.t);
513
+ slackDirectoryLiveModulePromise ??= import("./directory-live-CuaWaGnM.js").then((n) => n.t);
538
514
  return await slackDirectoryLiveModulePromise;
539
515
  }
540
516
  async function resolveSlackSendContext(params) {
@@ -1,2 +1,2 @@
1
- import { t as SlackChannelConfigSchema } from "./config-schema-D9B5LB_L.js";
1
+ import { t as SlackChannelConfigSchema } from "./config-schema-Bueih4yH.js";
2
2
  export { SlackChannelConfigSchema };
@@ -1,2 +1,2 @@
1
- import { t as slackPlugin } from "./channel-DRjHBTDB.js";
1
+ import { t as slackPlugin } from "./channel-CC04F-xs.js";
2
2
  export { slackPlugin };
@@ -1,10 +1,10 @@
1
- import { a as resolveSlackAccount, c as resolveSlackConfigAccessorAccount, i as resolveDefaultSlackAccountId, n as listSlackAccountIds } from "./accounts-ClAPP5ry.js";
2
- import { a as describeSlackSetupAccount, i as SLACK_CHANNEL, n as createSlackSetupWizardProxy, o as isSlackSetupAccountConfigured, r as slackSetupAdapter } from "./setup-core-B9NetDkM.js";
3
- import { t as SlackChannelConfigSchema } from "./config-schema-D9B5LB_L.js";
1
+ import { a as resolveSlackAccount, c as resolveSlackConfigAccessorAccount, i as resolveDefaultSlackAccountId, n as listSlackAccountIds } from "./accounts-yk5K3wQU.js";
2
+ import { a as describeSlackSetupAccount, i as SLACK_CHANNEL, n as createSlackSetupWizardProxy, o as isSlackSetupAccountConfigured, r as slackSetupAdapter } from "./setup-core-DgLJ7dQY.js";
3
+ import { t as SlackChannelConfigSchema } from "./config-schema-Bueih4yH.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-D88QBVOW.js")).slackSetupWizard }));
7
+ const slackSetupWizard = createSlackSetupWizardProxy(async () => ({ slackSetupWizard: (await import("./setup-surface-B6w9gtds.js")).slackSetupWizard }));
8
8
  const slackSetupConfigAdapter = createScopedChannelConfigAdapter({
9
9
  sectionKey: SLACK_CHANNEL,
10
10
  listAccountIds: listSlackAccountIds,
@@ -1,4 +1,4 @@
1
- import { n as buildChannelConfigSchema, t as SlackConfigSchema } from "./config-api-B_jq4NJW.js";
1
+ import { n as buildChannelConfigSchema, t as SlackConfigSchema } from "./config-api-B48Z4H47.js";
2
2
  //#endregion
3
3
  //#region extensions/slack/src/config-schema.ts
4
4
  const SlackChannelConfigSchema = buildChannelConfigSchema(SlackConfigSchema, { uiHints: {
@@ -30,6 +30,26 @@ const SlackChannelConfigSchema = buildChannelConfigSchema(SlackConfigSchema, { u
30
30
  label: "Slack Allow Bot Messages",
31
31
  help: "Allow bot-authored messages to trigger Slack replies (default: false)."
32
32
  },
33
+ botLoopProtection: {
34
+ label: "Slack Bot Loop Protection",
35
+ help: "Sliding-window guard for Slack bot-to-bot loops. Default is enabled whenever allowBots lets bot-authored messages reach dispatch."
36
+ },
37
+ "botLoopProtection.enabled": {
38
+ label: "Slack Bot Loop Protection Enabled",
39
+ help: "Enable the bot-pair loop guard. Defaults to true when allowBots is true or \"mentions\", and false when bot messages are ignored."
40
+ },
41
+ "botLoopProtection.maxEventsPerWindow": {
42
+ label: "Slack Bot Loop Events per Window",
43
+ help: "Maximum accepted bot-pair messages within the sliding window before suppression starts. Default: 20."
44
+ },
45
+ "botLoopProtection.windowSeconds": {
46
+ label: "Slack Bot Loop Window Seconds",
47
+ help: "Sliding window length for counting bot-pair messages. Default: 60."
48
+ },
49
+ "botLoopProtection.cooldownSeconds": {
50
+ label: "Slack Bot Loop Cooldown Seconds",
51
+ help: "How long to suppress the bot pair after it exceeds the budget. Default: 60."
52
+ },
33
53
  socketMode: {
34
54
  label: "Slack Socket Mode Transport",
35
55
  help: "Slack Socket Mode transport tuning passed to the Slack SDK. Use only when investigating ping/pong timeout or stale websocket behavior."
@@ -1,5 +1,5 @@
1
- import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-KUjHnkQm.js";
2
- import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-Bo6lbSkh.js";
3
- import { n as listSlackDirectoryGroupsFromConfig, r as listSlackDirectoryPeersFromConfig } from "./directory-config-B3JiHeB7.js";
4
- import { t as collectSlackSecurityAuditFindings } from "./security-audit-BtHGnD3d.js";
1
+ import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-DCkS8eNN.js";
2
+ import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-BurGIyhv.js";
3
+ import { n as listSlackDirectoryGroupsFromConfig, r as listSlackDirectoryPeersFromConfig } from "./directory-config-BKKNBkCq.js";
4
+ import { t as collectSlackSecurityAuditFindings } from "./security-audit-DvOpSaZM.js";
5
5
  export { collectRuntimeConfigAssignments, collectSlackSecurityAuditFindings, legacyConfigRules, listSlackDirectoryGroupsFromConfig, listSlackDirectoryPeersFromConfig, normalizeCompatibilityConfig, secretTargetRegistryEntries };
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-CiIaOW0V.js";
2
- import { i as resolveDefaultSlackAccountId, o as resolveSlackAccountAllowFrom, r as mergeSlackAccountConfig } from "./accounts-ClAPP5ry.js";
2
+ import { i as resolveDefaultSlackAccountId, o as resolveSlackAccountAllowFrom, r as mergeSlackAccountConfig } from "./accounts-yk5K3wQU.js";
3
3
  import { r as parseSlackTarget } from "./target-parsing-CQmv-iSm.js";
4
4
  import "./targets-B1tYCAr6.js";
5
5
  import { normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
@@ -1,2 +1,2 @@
1
- import { n as listSlackDirectoryGroupsFromConfig, r as listSlackDirectoryPeersFromConfig } from "./directory-config-B3JiHeB7.js";
1
+ import { n as listSlackDirectoryGroupsFromConfig, r as listSlackDirectoryPeersFromConfig } from "./directory-config-BKKNBkCq.js";
2
2
  export { listSlackDirectoryGroupsFromConfig, listSlackDirectoryPeersFromConfig };
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-CiIaOW0V.js";
2
- import { a as resolveSlackAccount } from "./accounts-ClAPP5ry.js";
3
- import { r as createSlackWebClient } from "./client-CPe4GmDR.js";
2
+ import { a as resolveSlackAccount } from "./accounts-yk5K3wQU.js";
3
+ import { r as createSlackWebClient } from "./client-8r7r7aZ3.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,4 @@
1
- import { n as resolveSlackNativeStreaming, r as resolveSlackStreamingMode } from "./streaming-compat-RkZgTmQ2.js";
1
+ import { n as resolveSlackNativeStreaming, r as resolveSlackStreamingMode } from "./streaming-compat-C6rySwiD.js";
2
2
  import { asObjectRecord, hasLegacyAccountStreamingAliases, hasLegacyStreamingAliases, normalizeLegacyChannelAliases } from "openclaw/plugin-sdk/runtime-doctor";
3
3
  //#region extensions/slack/src/doctor-contract.ts
4
4
  function hasLegacySlackStreamingAliases(value) {
@@ -1,2 +1,2 @@
1
- import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-KUjHnkQm.js";
1
+ import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-DCkS8eNN.js";
2
2
  export { legacyConfigRules, normalizeCompatibilityConfig };
@@ -1,4 +1,4 @@
1
- import { a as resolveSlackAccount } from "./accounts-ClAPP5ry.js";
1
+ import { a as resolveSlackAccount } from "./accounts-yk5K3wQU.js";
2
2
  import { normalizeStringifiedOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
3
3
  import { doesApprovalRequestMatchChannelAccount } from "openclaw/plugin-sdk/approval-native-runtime";
4
4
  import { resolveApprovalApprovers } from "openclaw/plugin-sdk/approval-auth-runtime";
@@ -49,10 +49,10 @@ const slackExecApprovalProfile = createChannelExecApprovalProfile({
49
49
  })
50
50
  });
51
51
  const isSlackExecApprovalClientEnabled = slackExecApprovalProfile.isClientEnabled;
52
- const isSlackExecApprovalApprover = slackExecApprovalProfile.isApprover;
52
+ slackExecApprovalProfile.isApprover;
53
53
  const isSlackExecApprovalAuthorizedSender = slackExecApprovalProfile.isAuthorizedSender;
54
54
  const resolveSlackExecApprovalTarget = slackExecApprovalProfile.resolveTarget;
55
55
  const shouldHandleSlackExecApprovalRequest = slackExecApprovalProfile.shouldHandleRequest;
56
56
  const shouldSuppressLocalSlackExecApprovalPrompt = slackExecApprovalProfile.shouldSuppressLocalPrompt;
57
57
  //#endregion
58
- export { normalizeSlackApproverId as a, shouldSuppressLocalSlackExecApprovalPrompt as c, isSlackExecApprovalClientEnabled as i, isSlackExecApprovalApprover as n, resolveSlackExecApprovalTarget as o, isSlackExecApprovalAuthorizedSender as r, shouldHandleSlackExecApprovalRequest as s, getSlackExecApprovalApprovers as t };
58
+ export { resolveSlackExecApprovalTarget as a, normalizeSlackApproverId as i, isSlackExecApprovalAuthorizedSender as n, shouldHandleSlackExecApprovalRequest as o, isSlackExecApprovalClientEnabled as r, shouldSuppressLocalSlackExecApprovalPrompt as s, getSlackExecApprovalApprovers as t };
@@ -1,4 +1,4 @@
1
- import { i as resolveDefaultSlackAccountId, r as mergeSlackAccountConfig } from "./accounts-ClAPP5ry.js";
1
+ import { i as resolveDefaultSlackAccountId, r as mergeSlackAccountConfig } from "./accounts-yk5K3wQU.js";
2
2
  import { normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
3
3
  import { normalizeHyphenSlug } from "openclaw/plugin-sdk/string-normalization-runtime";
4
4
  import { resolveToolsBySender } from "openclaw/plugin-sdk/channel-policy";
@@ -1,2 +1,2 @@
1
- import { t as registerSlackPluginHttpRoutes } from "./plugin-routes-DtTPmga1.js";
1
+ import { t as registerSlackPluginHttpRoutes } from "./plugin-routes-Dt_jh9W8.js";
2
2
  export { registerSlackPluginHttpRoutes };
@@ -1,3 +1,3 @@
1
- import { t as prepareSlackMessage } from "./prepare-D3YqV8jB.js";
2
- import { t as createInboundSlackTestContext } from "./prepare.test-helpers-DVcjRhfG.js";
1
+ import { t as prepareSlackMessage } from "./prepare-CXI8nHbJ.js";
2
+ import { t as createInboundSlackTestContext } from "./prepare.test-helpers-BhFHtbz3.js";
3
3
  export { createInboundSlackTestContext, prepareSlackMessage };
@@ -1,4 +1,4 @@
1
- import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId } from "./accounts-ClAPP5ry.js";
1
+ import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId } from "./accounts-yk5K3wQU.js";
2
2
  import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
3
3
  //#region extensions/slack/src/interactive-replies.ts
4
4
  const SLACK_BUTTON_MAX_ITEMS = 5;
@@ -1,2 +1,2 @@
1
- import { n as isSlackInteractiveRepliesEnabled, t as compileSlackInteractiveReplies } from "./interactive-replies-qAIfuBor.js";
1
+ import { n as isSlackInteractiveRepliesEnabled, t as compileSlackInteractiveReplies } from "./interactive-replies-CawNPL-h.js";
2
2
  export { compileSlackInteractiveReplies, isSlackInteractiveRepliesEnabled };