@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,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-CiIaOW0V.js";
2
- import { r as createSlackWebClient } from "./client-CPe4GmDR.js";
3
- import { n as resolveSlackAllowlistEntries, t as collectSlackCursorItems } from "./resolve-allowlist-common-Bk3clYPK.js";
2
+ import { r as createSlackWebClient } from "./client-8r7r7aZ3.js";
3
+ import { n as resolveSlackAllowlistEntries, t as collectSlackCursorItems } from "./resolve-allowlist-common-rhfyDyWi.js";
4
4
  import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  //#region extensions/slack/src/resolve-channels.ts
6
6
  var resolve_channels_exports = /* @__PURE__ */ __exportAll({ resolveSlackChannelAllowlist: () => resolveSlackChannelAllowlist });
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-CiIaOW0V.js";
2
- import { r as createSlackWebClient } from "./client-CPe4GmDR.js";
3
- import { n as resolveSlackAllowlistEntries, t as collectSlackCursorItems } from "./resolve-allowlist-common-Bk3clYPK.js";
2
+ import { r as createSlackWebClient } from "./client-8r7r7aZ3.js";
3
+ import { n as resolveSlackAllowlistEntries, t as collectSlackCursorItems } from "./resolve-allowlist-common-rhfyDyWi.js";
4
4
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  //#region extensions/slack/src/resolve-users.ts
6
6
  var resolve_users_exports = /* @__PURE__ */ __exportAll({ resolveSlackUserAllowlist: () => resolveSlackUserAllowlist });
@@ -1,5 +1,5 @@
1
- import { a as normalizeSlackSlug, i as normalizeSlackAllowOwnerEntry, n as normalizeAllowList, o as resolveSlackAllowListMatch, r as normalizeAllowListLower, t as allowListMatches } from "./allow-list-BPnnlRPL.js";
2
- import { t as formatSlackError } from "./errors-BYFHR24f.js";
1
+ import { a as normalizeSlackSlug, i as normalizeSlackAllowOwnerEntry, n as normalizeAllowList, o as resolveSlackAllowListMatch, r as normalizeAllowListLower, t as allowListMatches } from "./allow-list-T7ZDpUsF.js";
2
+ import { t as formatSlackError } from "./errors-BrtayXHa.js";
3
3
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  import { resolveAgentRoute, resolveThreadSessionKeys } from "openclaw/plugin-sdk/routing";
5
5
  import { createChannelPairingChallengeIssuer } from "openclaw/plugin-sdk/channel-pairing";
@@ -15,6 +15,7 @@ import { resolveChannelContextVisibilityMode } from "openclaw/plugin-sdk/context
15
15
  import { resolveDefaultGroupPolicy, resolveOpenProviderRuntimeGroupPolicy, warnMissingProviderGroupPolicyFallbackOnce } from "openclaw/plugin-sdk/runtime-group-policy";
16
16
  import { resolveDefaultAgentId } from "openclaw/plugin-sdk/agent-runtime";
17
17
  import { applyChannelMatchMeta, buildChannelKeyCandidates, resolveChannelEntryMatchWithFallback } from "openclaw/plugin-sdk/channel-targets";
18
+ import { mergePairLoopGuardConfig } from "openclaw/plugin-sdk/pair-loop-guard-runtime";
18
19
  import { createChannelIngressResolver, defineStableChannelIngressIdentity, readChannelIngressStoreAllowFromForDmPolicy } from "openclaw/plugin-sdk/channel-ingress-runtime";
19
20
  import { buildUntrustedChannelMetadata } from "openclaw/plugin-sdk/security-runtime";
20
21
  //#region extensions/slack/src/monitor/commands.ts
@@ -83,6 +84,7 @@ function resolveSlackChannelConfig(params) {
83
84
  allowed: firstDefined(resolved.enabled, fallback?.enabled, true) ?? true,
84
85
  requireMention: firstDefined(resolved.requireMention, fallback?.requireMention, requireMentionDefault) ?? requireMentionDefault,
85
86
  allowBots: firstDefined(resolved.allowBots, fallback?.allowBots),
87
+ botLoopProtection: mergePairLoopGuardConfig(fallback?.botLoopProtection, matched?.botLoopProtection),
86
88
  users: firstDefined(resolved.users, fallback?.users),
87
89
  skills: firstDefined(resolved.skills, fallback?.skills),
88
90
  systemPrompt: firstDefined(resolved.systemPrompt, fallback?.systemPrompt)
@@ -1,6 +1,6 @@
1
1
  import "./target-parsing-CQmv-iSm.js";
2
- import "./channel-api-B_nZwosg.js";
3
- import "./config-api-B_jq4NJW.js";
2
+ import "./channel-api-BfBK89IN.js";
3
+ import "./config-api-B48Z4H47.js";
4
4
  import { createActionGate as createActionGate$1, imageResultFromFile, jsonResult, readNumberParam, readReactionParams, readStringParam, withNormalizedTimestamp } from "openclaw/plugin-sdk/channel-actions";
5
5
  import "openclaw/plugin-sdk/account-id";
6
6
  import "openclaw/plugin-sdk/channel-status";
@@ -1,14 +1,14 @@
1
- import { a as resolveSlackAccount, d as resolveSlackBotToken, i as resolveDefaultSlackAccountId, n as listSlackAccountIds, t as listEnabledSlackAccounts, u as resolveSlackAppToken } from "./accounts-ClAPP5ry.js";
2
- import { n as resolveSlackGroupToolPolicy, t as resolveSlackGroupRequireMention } from "./group-policy-CyLUK6My.js";
3
- import { n as setSlackRuntime } from "./runtime-Bo-KHM-F.js";
4
- import { t as sendMessageSlack } from "./send-D_A9kL-C.js";
5
- 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-CYLFK-Zy.js";
6
- import { t as probeSlack } from "./probe-3eZf1FjI.js";
7
- import { t as resolveSlackChannelAllowlist } from "./resolve-channels-BRYqyNVJ.js";
8
- import { t as resolveSlackUserAllowlist } from "./resolve-users-Bd_SdP8j.js";
9
- import { t as monitorSlackProvider } from "./provider-D7uAN3Fq.js";
10
- import { t as registerSlackPluginHttpRoutes } from "./plugin-routes-DtTPmga1.js";
11
- import { n as slackActionRuntime, t as handleSlackAction } from "./action-runtime-e2UhRsNx.js";
12
- import { n as listSlackDirectoryGroupsLive, r as listSlackDirectoryPeersLive } from "./directory-live-Bf16GwDh.js";
13
- import "./monitor-a97o17G6.js";
1
+ import { a as resolveSlackAccount, d as resolveSlackBotToken, i as resolveDefaultSlackAccountId, n as listSlackAccountIds, t as listEnabledSlackAccounts, u as resolveSlackAppToken } from "./accounts-yk5K3wQU.js";
2
+ import { n as resolveSlackGroupToolPolicy, t as resolveSlackGroupRequireMention } from "./group-policy-utF2iWnE.js";
3
+ import { n as setSlackRuntime } from "./runtime--VlVtTPu.js";
4
+ import { t as sendMessageSlack } from "./send-ioky2Xpy.js";
5
+ 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-Cqyj7oRr.js";
6
+ import { t as probeSlack } from "./probe-D1wYA05H.js";
7
+ import { t as resolveSlackChannelAllowlist } from "./resolve-channels-BiVxSLVm.js";
8
+ import { t as resolveSlackUserAllowlist } from "./resolve-users-CcpSlYw-.js";
9
+ import { t as monitorSlackProvider } from "./provider-Ut7IF0Mn.js";
10
+ import { t as registerSlackPluginHttpRoutes } from "./plugin-routes-Dt_jh9W8.js";
11
+ import { n as slackActionRuntime, t as handleSlackAction } from "./action-runtime-gtC-RM3r.js";
12
+ import { n as listSlackDirectoryGroupsLive, r as listSlackDirectoryPeersLive } from "./directory-live-CuaWaGnM.js";
13
+ import "./monitor-B3QB1ysK.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,2 +1,2 @@
1
- import { n as setSlackRuntime } from "./runtime-Bo-KHM-F.js";
1
+ import { n as setSlackRuntime } from "./runtime--VlVtTPu.js";
2
2
  export { setSlackRuntime };
@@ -1,5 +1,5 @@
1
- import { r as createSlackWebClient } from "./client-CPe4GmDR.js";
2
- import { t as formatSlackError } from "./errors-BYFHR24f.js";
1
+ import { r as createSlackWebClient } from "./client-8r7r7aZ3.js";
2
+ import { t as formatSlackError } from "./errors-BrtayXHa.js";
3
3
  import { isRecord, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  //#region extensions/slack/src/scopes.ts
5
5
  function collectScopes(value, into) {
@@ -1,2 +1,2 @@
1
- import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries, t as channelSecrets } from "./secret-contract-Bo6lbSkh.js";
1
+ import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries, t as channelSecrets } from "./secret-contract-BurGIyhv.js";
2
2
  export { channelSecrets, collectRuntimeConfigAssignments, secretTargetRegistryEntries };
@@ -1,2 +1,2 @@
1
- import { t as collectSlackSecurityAuditFindings } from "./security-audit-BtHGnD3d.js";
1
+ import { t as collectSlackSecurityAuditFindings } from "./security-audit-DvOpSaZM.js";
2
2
  export { collectSlackSecurityAuditFindings };
@@ -1,11 +1,11 @@
1
- import { a as resolveSlackAccount, d as resolveSlackBotToken } from "./accounts-ClAPP5ry.js";
1
+ import { a as resolveSlackAccount, d as resolveSlackBotToken } from "./accounts-yk5K3wQU.js";
2
2
  import { r as parseSlackTarget } from "./target-parsing-CQmv-iSm.js";
3
3
  import "./targets-B1tYCAr6.js";
4
- import { i as truncateSlackText, r as SLACK_TEXT_LIMIT, t as normalizeSlackThreadTsCandidate } from "./thread-ts-C2x7c5PP.js";
5
- import { a as getSlackWriteClient, n as createSlackTokenCacheKey } from "./client-CPe4GmDR.js";
6
- import { r as validateSlackBlocksArray } from "./blocks-input-CwTFVImV.js";
7
- import { t as getOptionalSlackRuntime } from "./runtime-Bo-KHM-F.js";
8
- import { i as loadOutboundMediaFromUrl } from "./runtime-api-Dd1xIV5v.js";
4
+ import { i as truncateSlackText, r as SLACK_TEXT_LIMIT, t as normalizeSlackThreadTsCandidate } from "./thread-ts-o-QBwB3k.js";
5
+ import { a as getSlackWriteClient, n as createSlackTokenCacheKey } from "./client-8r7r7aZ3.js";
6
+ import { r as validateSlackBlocksArray } from "./blocks-input-BJZ8vv03.js";
7
+ import { t as getOptionalSlackRuntime } from "./runtime--VlVtTPu.js";
8
+ import { i as loadOutboundMediaFromUrl } from "./runtime-api-D8wiG9BS.js";
9
9
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
10
10
  import { createMessageReceiptFromOutboundResults } from "openclaw/plugin-sdk/channel-message";
11
11
  import { withTrustedEnvProxyGuardedFetchMode } from "openclaw/plugin-sdk/fetch-runtime";
@@ -0,0 +1,2 @@
1
+ import { t as sendMessageSlack } from "./send-ioky2Xpy.js";
2
+ export { sendMessageSlack };
@@ -0,0 +1,2 @@
1
+ import "./send-ioky2Xpy.js";
2
+ export {};
@@ -1,5 +1,5 @@
1
- import { a as resolveSlackAccount } from "./accounts-ClAPP5ry.js";
2
- import { t as inspectSlackAccount } from "./account-inspect-D7AZNs8C.js";
1
+ import { a as resolveSlackAccount } from "./accounts-yk5K3wQU.js";
2
+ import { t as inspectSlackAccount } from "./account-inspect-BJyQLSkN.js";
3
3
  import { hasConfiguredSecretInput } from "openclaw/plugin-sdk/secret-input";
4
4
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  import { DEFAULT_ACCOUNT_ID, createAccountScopedAllowFromSection, createAccountScopedGroupAccessSection, createAllowlistSetupWizardProxy, createEnvPatchedAccountSetupAdapter, createLegacyCompatChannelDmPolicy, createStandardChannelSetupStatus, parseMentionOrPrefixedId, patchChannelConfigForAccount, setSetupChannelEnabled } from "openclaw/plugin-sdk/setup-runtime";
@@ -1,2 +1,2 @@
1
- import { t as slackSetupPlugin } from "./channel.setup-Cayn7afd.js";
1
+ import { t as slackSetupPlugin } from "./channel.setup-jzYjY634.js";
2
2
  export { slackSetupPlugin };
@@ -1,8 +1,8 @@
1
- import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId, o as resolveSlackAccountAllowFrom } from "./accounts-ClAPP5ry.js";
2
- import "./shared-D8U42xFL.js";
3
- import { i as SLACK_CHANNEL, t as createSlackSetupWizardBase } from "./setup-core-B9NetDkM.js";
4
- import { t as resolveSlackChannelAllowlist } from "./resolve-channels-BRYqyNVJ.js";
5
- import { t as resolveSlackUserAllowlist } from "./resolve-users-Bd_SdP8j.js";
1
+ import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId, o as resolveSlackAccountAllowFrom } from "./accounts-yk5K3wQU.js";
2
+ import "./shared-CSiHkaVO.js";
3
+ import { i as SLACK_CHANNEL, t as createSlackSetupWizardBase } from "./setup-core-DgLJ7dQY.js";
4
+ import { t as resolveSlackChannelAllowlist } from "./resolve-channels-BiVxSLVm.js";
5
+ import { t as resolveSlackUserAllowlist } from "./resolve-users-CcpSlYw-.js";
6
6
  import { adaptScopedAccountAccessor } from "openclaw/plugin-sdk/channel-config-helpers";
7
7
  import { noteChannelLookupFailure, noteChannelLookupSummary, parseMentionOrPrefixedId, promptLegacyChannelAllowFromForAccount, resolveEntriesWithOptionalToken } from "openclaw/plugin-sdk/setup-runtime";
8
8
  import { formatDocsLink } from "openclaw/plugin-sdk/setup-tools";
@@ -1,11 +1,11 @@
1
- import { a as resolveSlackAccount, c as resolveSlackConfigAccessorAccount, i as resolveDefaultSlackAccountId, n as listSlackAccountIds, o as resolveSlackAccountAllowFrom, s as resolveSlackAccountDmPolicy } from "./accounts-ClAPP5ry.js";
2
- import { t as inspectSlackAccount } from "./account-inspect-D7AZNs8C.js";
3
- import { n as isSlackInteractiveRepliesEnabled } from "./interactive-replies-qAIfuBor.js";
4
- import { r as getChatChannelMeta } from "./channel-api-B_nZwosg.js";
5
- import { i as SLACK_CHANNEL } from "./setup-core-B9NetDkM.js";
6
- import { t as SlackChannelConfigSchema } from "./config-schema-D9B5LB_L.js";
7
- import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-KUjHnkQm.js";
8
- import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-Bo6lbSkh.js";
1
+ import { a as resolveSlackAccount, c as resolveSlackConfigAccessorAccount, i as resolveDefaultSlackAccountId, n as listSlackAccountIds, o as resolveSlackAccountAllowFrom, s as resolveSlackAccountDmPolicy } from "./accounts-yk5K3wQU.js";
2
+ import { t as inspectSlackAccount } from "./account-inspect-BJyQLSkN.js";
3
+ import { n as isSlackInteractiveRepliesEnabled } from "./interactive-replies-CawNPL-h.js";
4
+ import { r as getChatChannelMeta } from "./channel-api-BfBK89IN.js";
5
+ import { i as SLACK_CHANNEL } from "./setup-core-DgLJ7dQY.js";
6
+ import { t as SlackChannelConfigSchema } from "./config-schema-Bueih4yH.js";
7
+ import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-DCkS8eNN.js";
8
+ import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-BurGIyhv.js";
9
9
  import { adaptScopedAccountAccessor, createScopedChannelConfigAdapter, createScopedDmSecurityResolver } from "openclaw/plugin-sdk/channel-config-helpers";
10
10
  import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
11
11
  import { formatAllowFromLowercase } from "openclaw/plugin-sdk/allow-from";
@@ -45,7 +45,7 @@ const collectSlackSecurityWarnings = createOpenProviderConfiguredRouteWarningCol
45
45
  remediation: "Set channels.slack.groupPolicy=\"allowlist\" and configure channels.slack.channels"
46
46
  }
47
47
  });
48
- const loadSlackSecurityAuditModule = createLazyRuntimeModule(() => import("./security-audit-BtHGnD3d.js").then((n) => n.n));
48
+ const loadSlackSecurityAuditModule = createLazyRuntimeModule(() => import("./security-audit-DvOpSaZM.js").then((n) => n.n));
49
49
  const slackSecurityAdapter = {
50
50
  resolveDmPolicy: resolveSlackDmPolicy,
51
51
  collectWarnings: collectSlackSecurityWarnings,
@@ -1,4 +1,4 @@
1
- import { r as deliverSlackSlashReplies$1 } from "./replies-Xe_jMR6o.js";
1
+ import { r as deliverSlackSlashReplies$1 } from "./replies-CzfjCaLG.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";
package/dist/test-api.js CHANGED
@@ -1,8 +1,8 @@
1
- import { a as createSlackActions, t as slackPlugin } from "./channel-DRjHBTDB.js";
2
- import { n as setSlackRuntime } from "./runtime-Bo-KHM-F.js";
3
- import { t as sendMessageSlack } from "./send-D_A9kL-C.js";
4
- import { t as prepareSlackMessage } from "./prepare-D3YqV8jB.js";
5
- import { t as createInboundSlackTestContext } from "./prepare.test-helpers-DVcjRhfG.js";
6
- import { t as createSlackOutboundPayloadHarness } from "./outbound-payload.test-harness-CVCamg1x.js";
7
- import { n as slackOutbound } from "./outbound-adapter-B_5sEhCg.js";
1
+ import { a as createSlackActions, t as slackPlugin } from "./channel-CC04F-xs.js";
2
+ import { n as setSlackRuntime } from "./runtime--VlVtTPu.js";
3
+ import { t as sendMessageSlack } from "./send-ioky2Xpy.js";
4
+ import { t as prepareSlackMessage } from "./prepare-CXI8nHbJ.js";
5
+ import { t as createInboundSlackTestContext } from "./prepare.test-helpers-BhFHtbz3.js";
6
+ import { t as createSlackOutboundPayloadHarness } from "./outbound-payload.test-harness-DM9ZdY2f.js";
7
+ import { n as slackOutbound } from "./outbound-adapter-DsAvCwpZ.js";
8
8
  export { createInboundSlackTestContext, createSlackActions, createSlackOutboundPayloadHarness, prepareSlackMessage, sendMessageSlack, setSlackRuntime, slackOutbound, slackPlugin };
@@ -495,6 +495,30 @@
495
495
  }
496
496
  ]
497
497
  },
498
+ "botLoopProtection": {
499
+ "type": "object",
500
+ "properties": {
501
+ "enabled": {
502
+ "type": "boolean"
503
+ },
504
+ "maxEventsPerWindow": {
505
+ "type": "integer",
506
+ "exclusiveMinimum": 0,
507
+ "maximum": 9007199254740991
508
+ },
509
+ "windowSeconds": {
510
+ "type": "integer",
511
+ "exclusiveMinimum": 0,
512
+ "maximum": 9007199254740991
513
+ },
514
+ "cooldownSeconds": {
515
+ "type": "integer",
516
+ "exclusiveMinimum": 0,
517
+ "maximum": 9007199254740991
518
+ }
519
+ },
520
+ "additionalProperties": false
521
+ },
498
522
  "dangerouslyAllowNameMatching": {
499
523
  "type": "boolean"
500
524
  },
@@ -1059,6 +1083,30 @@
1059
1083
  }
1060
1084
  ]
1061
1085
  },
1086
+ "botLoopProtection": {
1087
+ "type": "object",
1088
+ "properties": {
1089
+ "enabled": {
1090
+ "type": "boolean"
1091
+ },
1092
+ "maxEventsPerWindow": {
1093
+ "type": "integer",
1094
+ "exclusiveMinimum": 0,
1095
+ "maximum": 9007199254740991
1096
+ },
1097
+ "windowSeconds": {
1098
+ "type": "integer",
1099
+ "exclusiveMinimum": 0,
1100
+ "maximum": 9007199254740991
1101
+ },
1102
+ "cooldownSeconds": {
1103
+ "type": "integer",
1104
+ "exclusiveMinimum": 0,
1105
+ "maximum": 9007199254740991
1106
+ }
1107
+ },
1108
+ "additionalProperties": false
1109
+ },
1062
1110
  "users": {
1063
1111
  "type": "array",
1064
1112
  "items": {
@@ -1595,6 +1643,30 @@
1595
1643
  }
1596
1644
  ]
1597
1645
  },
1646
+ "botLoopProtection": {
1647
+ "type": "object",
1648
+ "properties": {
1649
+ "enabled": {
1650
+ "type": "boolean"
1651
+ },
1652
+ "maxEventsPerWindow": {
1653
+ "type": "integer",
1654
+ "exclusiveMinimum": 0,
1655
+ "maximum": 9007199254740991
1656
+ },
1657
+ "windowSeconds": {
1658
+ "type": "integer",
1659
+ "exclusiveMinimum": 0,
1660
+ "maximum": 9007199254740991
1661
+ },
1662
+ "cooldownSeconds": {
1663
+ "type": "integer",
1664
+ "exclusiveMinimum": 0,
1665
+ "maximum": 9007199254740991
1666
+ }
1667
+ },
1668
+ "additionalProperties": false
1669
+ },
1598
1670
  "dangerouslyAllowNameMatching": {
1599
1671
  "type": "boolean"
1600
1672
  },
@@ -2158,6 +2230,30 @@
2158
2230
  }
2159
2231
  ]
2160
2232
  },
2233
+ "botLoopProtection": {
2234
+ "type": "object",
2235
+ "properties": {
2236
+ "enabled": {
2237
+ "type": "boolean"
2238
+ },
2239
+ "maxEventsPerWindow": {
2240
+ "type": "integer",
2241
+ "exclusiveMinimum": 0,
2242
+ "maximum": 9007199254740991
2243
+ },
2244
+ "windowSeconds": {
2245
+ "type": "integer",
2246
+ "exclusiveMinimum": 0,
2247
+ "maximum": 9007199254740991
2248
+ },
2249
+ "cooldownSeconds": {
2250
+ "type": "integer",
2251
+ "exclusiveMinimum": 0,
2252
+ "maximum": 9007199254740991
2253
+ }
2254
+ },
2255
+ "additionalProperties": false
2256
+ },
2161
2257
  "users": {
2162
2258
  "type": "array",
2163
2259
  "items": {
@@ -2267,6 +2363,26 @@
2267
2363
  "label": "Slack Allow Bot Messages",
2268
2364
  "help": "Allow bot-authored messages to trigger Slack replies (default: false)."
2269
2365
  },
2366
+ "botLoopProtection": {
2367
+ "label": "Slack Bot Loop Protection",
2368
+ "help": "Sliding-window guard for Slack bot-to-bot loops. Default is enabled whenever allowBots lets bot-authored messages reach dispatch."
2369
+ },
2370
+ "botLoopProtection.enabled": {
2371
+ "label": "Slack Bot Loop Protection Enabled",
2372
+ "help": "Enable the bot-pair loop guard. Defaults to true when allowBots is true or \"mentions\", and false when bot messages are ignored."
2373
+ },
2374
+ "botLoopProtection.maxEventsPerWindow": {
2375
+ "label": "Slack Bot Loop Events per Window",
2376
+ "help": "Maximum accepted bot-pair messages within the sliding window before suppression starts. Default: 20."
2377
+ },
2378
+ "botLoopProtection.windowSeconds": {
2379
+ "label": "Slack Bot Loop Window Seconds",
2380
+ "help": "Sliding window length for counting bot-pair messages. Default: 60."
2381
+ },
2382
+ "botLoopProtection.cooldownSeconds": {
2383
+ "label": "Slack Bot Loop Cooldown Seconds",
2384
+ "help": "How long to suppress the bot pair after it exceeds the budget. Default: 60."
2385
+ },
2270
2386
  "socketMode": {
2271
2387
  "label": "Slack Socket Mode Transport",
2272
2388
  "help": "Slack Socket Mode transport tuning passed to the Slack SDK. Use only when investigating ping/pong timeout or stale websocket behavior."
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/slack",
3
- "version": "2026.5.12",
3
+ "version": "2026.5.14-beta.1",
4
4
  "description": "OpenClaw Slack channel plugin",
5
5
  "repository": {
6
6
  "type": "git",
@@ -12,14 +12,15 @@
12
12
  "@slack/types": "2.21.1",
13
13
  "@slack/web-api": "7.15.2",
14
14
  "https-proxy-agent": "9.0.0",
15
- "typebox": "1.1.38"
15
+ "typebox": "1.1.38",
16
+ "zod": "4.4.3"
16
17
  },
17
18
  "devDependencies": {
18
19
  "@openclaw/plugin-sdk": "workspace:*",
19
20
  "openclaw": "workspace:*"
20
21
  },
21
22
  "peerDependencies": {
22
- "openclaw": ">=2026.5.12"
23
+ "openclaw": ">=2026.5.14-beta.1"
23
24
  },
24
25
  "peerDependenciesMeta": {
25
26
  "openclaw": {
@@ -60,13 +61,14 @@
60
61
  "install": {
61
62
  "npmSpec": "@openclaw/slack",
62
63
  "defaultChoice": "npm",
63
- "minHostVersion": ">=2026.5.12-beta.6"
64
+ "minHostVersion": ">=2026.5.12-beta.1"
64
65
  },
65
66
  "compat": {
66
- "pluginApi": ">=2026.5.12"
67
+ "pluginApi": ">=2026.5.14-beta.1"
67
68
  },
68
69
  "build": {
69
- "openclawVersion": "2026.5.12"
70
+ "openclawVersion": "2026.5.14-beta.1",
71
+ "bundledDist": false
70
72
  },
71
73
  "release": {
72
74
  "publishToClawHub": true,
@@ -1,2 +0,0 @@
1
- import { a as resolveSlackAccount } from "./accounts-ClAPP5ry.js";
2
- export { resolveSlackAccount };
@@ -1,2 +0,0 @@
1
- import { t as handleSlackAction } from "./action-runtime-e2UhRsNx.js";
2
- export { handleSlackAction };
@@ -1,2 +0,0 @@
1
- import "./send-D_A9kL-C.js";
2
- export {};
@@ -1,2 +0,0 @@
1
- import { t as sendMessageSlack } from "./send-D_A9kL-C.js";
2
- export { sendMessageSlack };
File without changes
File without changes
File without changes