@openclaw/slack 2026.5.30-beta.1 → 2026.5.31-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 (105) hide show
  1. package/dist/{action-runtime-BQ5ny5AD.js → action-runtime-DEztkt37.js} +2 -2
  2. package/dist/action-runtime.runtime-uN2B3l57.js +2 -0
  3. package/dist/{actions-DMBUHKPy.js → actions-BA_6yvPC.js} +2 -2
  4. package/dist/{actions.runtime-BfyFeTsT.js → actions.runtime-BNL71SN3.js} +1 -1
  5. package/dist/api.js +7 -7
  6. package/dist/{approval-handler.runtime-DVLnnq25.js → approval-handler.runtime-D0rHmHTC.js} +1 -1
  7. package/dist/{channel-CvkLuaXk.js → channel-ClgouPGI.js} +14 -15
  8. package/dist/channel-config-api.js +1 -1
  9. package/dist/channel-plugin-api.js +1 -1
  10. package/dist/{channel.setup-oGp4gSTP.js → channel.setup-DvU_3G7a.js} +2 -3
  11. package/dist/{client-DowBk5k0.js → client-qvqS9fQM.js} +20 -1
  12. package/dist/{config-schema-C0RewpJQ.js → config-schema-BjAjs8_6.js} +16 -0
  13. package/dist/contract-api.js +1 -1
  14. package/dist/{directory-live-BFB1pSax.js → directory-live-WZwhRYe2.js} +1 -1
  15. package/dist/{doctor-contract-DIMUXDHO.js → doctor-contract-DpGLNqS3.js} +2 -2
  16. package/dist/doctor-contract-api.js +1 -1
  17. package/dist/{monitor-BdzpEeNU.js → monitor-D5FVBchh.js} +2 -2
  18. package/dist/{outbound-adapter-BHZMgblN.js → outbound-adapter-BxKw6eWi.js} +1 -1
  19. package/dist/{pipeline.runtime-C52E8vGp.js → pipeline.runtime-Bo6reKXg.js} +37 -26
  20. package/dist/{probe-Djes9Fy6.js → probe-DczaQTdi.js} +1 -1
  21. package/dist/{provider-Ba13bui0.js → provider-DNfFBEzl.js} +6 -6
  22. package/dist/{replies-DkmWK7JW.js → replies-BmFpkBXm.js} +1 -1
  23. package/dist/{resolve-channels-zXt5f47h.js → resolve-channels-DIxJRl0F.js} +1 -1
  24. package/dist/{resolve-users-BLfGAz1v.js → resolve-users-B3vczJHE.js} +1 -1
  25. package/dist/{runtime-api-DvpUD2hw.js → runtime-api-BpGQDSTg.js} +1 -1
  26. package/dist/runtime-api.js +9 -9
  27. package/dist/{scopes-DiiHsqh1.js → scopes-Q1VjNpWb.js} +1 -1
  28. package/dist/{send-BURYyCXI.js → send-zvrcUvp2.js} +2 -3
  29. package/dist/send.runtime-iCVpfyB_.js +2 -0
  30. package/dist/setup-plugin-api.js +1 -1
  31. package/dist/{setup-surface-DJTHAguz.js → setup-surface-95xI4u2U.js} +3 -3
  32. package/dist/{shared-D9WMYymo.js → shared-D5tOdKwQ.js} +3 -4
  33. package/dist/{slash-dispatch.runtime-lsyTm_q5.js → slash-dispatch.runtime-BKo3qtpZ.js} +1 -1
  34. package/node_modules/@slack/bolt/README.md +1 -1
  35. package/node_modules/@slack/bolt/dist/App.d.ts +3 -3
  36. package/node_modules/@slack/bolt/dist/App.d.ts.map +1 -1
  37. package/node_modules/@slack/bolt/dist/App.js +8 -12
  38. package/node_modules/@slack/bolt/dist/App.js.map +1 -1
  39. package/node_modules/@slack/bolt/dist/Assistant.d.ts +1 -2
  40. package/node_modules/@slack/bolt/dist/Assistant.d.ts.map +1 -1
  41. package/node_modules/@slack/bolt/dist/Assistant.js.map +1 -1
  42. package/node_modules/@slack/bolt/dist/context/index.d.ts +5 -5
  43. package/node_modules/@slack/bolt/dist/context/index.d.ts.map +1 -1
  44. package/node_modules/@slack/bolt/dist/context/index.js +7 -7
  45. package/node_modules/@slack/bolt/dist/context/index.js.map +1 -1
  46. package/node_modules/@slack/bolt/dist/index.d.ts +19 -19
  47. package/node_modules/@slack/bolt/dist/index.d.ts.map +1 -1
  48. package/node_modules/@slack/bolt/dist/index.js +16 -16
  49. package/node_modules/@slack/bolt/dist/index.js.map +1 -1
  50. package/node_modules/@slack/bolt/dist/receivers/AwsLambdaReceiver.d.ts +1 -1
  51. package/node_modules/@slack/bolt/dist/receivers/AwsLambdaReceiver.d.ts.map +1 -1
  52. package/node_modules/@slack/bolt/dist/receivers/AwsLambdaReceiver.js +2 -0
  53. package/node_modules/@slack/bolt/dist/receivers/AwsLambdaReceiver.js.map +1 -1
  54. package/node_modules/@slack/bolt/dist/receivers/ExpressReceiver.d.ts +2 -2
  55. package/node_modules/@slack/bolt/dist/receivers/ExpressReceiver.d.ts.map +1 -1
  56. package/node_modules/@slack/bolt/dist/receivers/ExpressReceiver.js +8 -1
  57. package/node_modules/@slack/bolt/dist/receivers/ExpressReceiver.js.map +1 -1
  58. package/node_modules/@slack/bolt/dist/receivers/HTTPReceiver.d.ts +2 -2
  59. package/node_modules/@slack/bolt/dist/receivers/HTTPReceiver.d.ts.map +1 -1
  60. package/node_modules/@slack/bolt/dist/receivers/HTTPReceiver.js +4 -2
  61. package/node_modules/@slack/bolt/dist/receivers/HTTPReceiver.js.map +1 -1
  62. package/node_modules/@slack/bolt/dist/receivers/SocketModeReceiver.d.ts +1 -1
  63. package/node_modules/@slack/bolt/dist/receivers/SocketModeReceiver.d.ts.map +1 -1
  64. package/node_modules/@slack/bolt/dist/receivers/SocketModeReceiver.js +1 -1
  65. package/node_modules/@slack/bolt/dist/receivers/SocketModeReceiver.js.map +1 -1
  66. package/node_modules/@slack/bolt/dist/receivers/verify-request.d.ts.map +1 -1
  67. package/node_modules/@slack/bolt/dist/receivers/verify-request.js +3 -0
  68. package/node_modules/@slack/bolt/dist/receivers/verify-request.js.map +1 -1
  69. package/node_modules/@slack/bolt/dist/receivers/verify-signing-secret.d.ts +2 -0
  70. package/node_modules/@slack/bolt/dist/receivers/verify-signing-secret.d.ts.map +1 -0
  71. package/node_modules/@slack/bolt/dist/receivers/verify-signing-secret.js +12 -0
  72. package/node_modules/@slack/bolt/dist/receivers/verify-signing-secret.js.map +1 -0
  73. package/node_modules/@slack/bolt/dist/types/actions/index.d.ts +1 -1
  74. package/node_modules/@slack/bolt/dist/types/actions/index.d.ts.map +1 -1
  75. package/node_modules/@slack/bolt/dist/types/actions/index.js +1 -1
  76. package/node_modules/@slack/bolt/dist/types/actions/index.js.map +1 -1
  77. package/node_modules/@slack/bolt/dist/types/events/index.d.ts.map +1 -1
  78. package/node_modules/@slack/bolt/dist/types/index.d.ts +3 -3
  79. package/node_modules/@slack/bolt/dist/types/index.d.ts.map +1 -1
  80. package/node_modules/@slack/bolt/dist/types/index.js +3 -3
  81. package/node_modules/@slack/bolt/dist/types/index.js.map +1 -1
  82. package/node_modules/@slack/bolt/dist/types/options/index.d.ts.map +1 -1
  83. package/node_modules/@slack/bolt/package.json +4 -4
  84. package/node_modules/@types/retry/LICENSE +21 -21
  85. package/node_modules/@types/retry/README.md +4 -5
  86. package/node_modules/@types/retry/index.d.ts +13 -20
  87. package/node_modules/@types/retry/package.json +11 -9
  88. package/node_modules/es-object-atoms/CHANGELOG.md +21 -14
  89. package/node_modules/es-object-atoms/isObject.d.ts +1 -1
  90. package/node_modules/es-object-atoms/package.json +6 -7
  91. package/node_modules/es-object-atoms/tsconfig.json +1 -0
  92. package/node_modules/hasown/CHANGELOG.md +7 -0
  93. package/node_modules/hasown/index.d.ts +0 -1
  94. package/node_modules/hasown/package.json +4 -5
  95. package/node_modules/typebox/build/type/script/mapping.d.mts +5 -2
  96. package/node_modules/typebox/build/type/script/mapping.mjs +15 -8
  97. package/node_modules/typebox/build/type/script/parser.d.mts +3 -1
  98. package/node_modules/typebox/build/type/script/parser.mjs +2 -1
  99. package/node_modules/typebox/package.json +29 -29
  100. package/npm-shrinkwrap.json +22 -101
  101. package/openclaw.plugin.json +76 -0
  102. package/package.json +6 -6
  103. package/dist/action-runtime.runtime-C-vhDKzY.js +0 -2
  104. package/dist/channel-api-DdLCPu8a.js +0 -20
  105. package/dist/send.runtime-CKaMG3s-.js +0 -2
@@ -1,7 +1,7 @@
1
1
  import { i as resolveSlackChannelId, r as parseSlackTarget } from "./target-parsing-C7eeWg7M.js";
2
2
  import "./targets-nUqxHGgg.js";
3
3
  import { a as parseSlackBlocksInput } from "./thread-ts-NSVqWybn.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-DvpUD2hw.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-BpGQDSTg.js";
5
5
  import { n as resolveSlackChannelConfig, t as isSlackChannelAllowedByPolicy } from "./policy-BBDU-PQK.js";
6
6
  import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
7
7
  import { isSingleUseReplyToMode } from "openclaw/plugin-sdk/reply-reference";
@@ -30,7 +30,7 @@ function sameSlackChannelTarget(targetChannel, currentChannelId) {
30
30
  let slackActionsRuntimePromise;
31
31
  let slackAccountsRuntimePromise;
32
32
  function loadSlackActionsRuntime() {
33
- slackActionsRuntimePromise ??= import("./actions.runtime-BfyFeTsT.js");
33
+ slackActionsRuntimePromise ??= import("./actions.runtime-BNL71SN3.js");
34
34
  return slackActionsRuntimePromise;
35
35
  }
36
36
  function loadSlackAccountsRuntime() {
@@ -0,0 +1,2 @@
1
+ import { t as handleSlackAction } from "./action-runtime-DEztkt37.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
3
  import { b as truncateSlackText, o as validateSlackBlocksArray, s as SLACK_TEXT_LIMIT } from "./thread-ts-NSVqWybn.js";
4
- import { a as getSlackWriteClient, r as createSlackWebClient } from "./client-DowBk5k0.js";
5
- import { c as buildSlackBlocksFallbackText, t as sendMessageSlack } from "./send-BURYyCXI.js";
4
+ import { a as getSlackWriteClient, r as createSlackWebClient } from "./client-qvqS9fQM.js";
5
+ import { c as buildSlackBlocksFallbackText, t as sendMessageSlack } from "./send-zvrcUvp2.js";
6
6
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
7
7
  import { requireRuntimeConfig } from "openclaw/plugin-sdk/plugin-config-runtime";
8
8
  import { logVerbose, logVerbose as logVerbose$1 } from "openclaw/plugin-sdk/runtime-env";
@@ -1,2 +1,2 @@
1
- import { a as listSlackEmojis, c as pinSlackMessage, d as removeOwnSlackReactions, f as removeSlackReaction, i as getSlackMemberInfo, l as reactSlackMessage, m as unpinSlackMessage, n as downloadSlackFile, o as listSlackPins, p as sendSlackMessage, r as editSlackMessage, s as listSlackReactions, t as deleteSlackMessage, u as readSlackMessages } from "./actions-DMBUHKPy.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-BA_6yvPC.js";
2
2
  export { deleteSlackMessage, downloadSlackFile, editSlackMessage, getSlackMemberInfo, listSlackEmojis, listSlackPins, listSlackReactions, pinSlackMessage, reactSlackMessage, readSlackMessages, removeOwnSlackReactions, removeSlackReaction, sendSlackMessage, unpinSlackMessage };
package/dist/api.js CHANGED
@@ -3,16 +3,16 @@ import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId, l as resol
3
3
  import { t as inspectSlackAccount } from "./account-inspect-CdGk6R7l.js";
4
4
  import { i as resolveSlackChannelId, n as normalizeSlackMessagingTarget, r as parseSlackTarget, t as looksLikeSlackTargetId } from "./target-parsing-C7eeWg7M.js";
5
5
  import "./targets-nUqxHGgg.js";
6
- import { a as resolveSlackAutoThreadId, i as resolveSlackChannelType, n as buildSlackThreadingToolContext, r as resetSlackChannelTypeCacheForTest, t as slackPlugin } from "./channel-CvkLuaXk.js";
6
+ import { a as resolveSlackAutoThreadId, i as resolveSlackChannelType, n as buildSlackThreadingToolContext, r as resetSlackChannelTypeCacheForTest, t as slackPlugin } from "./channel-ClgouPGI.js";
7
7
  import { _ as buildSlackInteractiveBlocks, a as parseSlackBlocksInput, c as resolveSlackGroupRequireMention, d as normalizeAllowList, f as normalizeAllowListLower, g as resolveSlackUserAllowed, h as resolveSlackAllowListMatch, i as SLACK_MAX_BLOCKS, l as resolveSlackGroupToolPolicy, m as normalizeSlackSlug, o as validateSlackBlocksArray, p as normalizeSlackAllowOwnerEntry, u as allowListMatches, v as buildSlackPresentationBlocks } from "./thread-ts-NSVqWybn.js";
8
8
  import { n as extractSlackToolSend, r as listSlackMessageActions } from "./message-tool-api-B9M0zzlQ.js";
9
9
  import { n as isSlackInteractiveRepliesEnabled, r as parseSlackOptionsLine, t as compileSlackInteractiveReplies } from "./interactive-replies-DrBq4Mld.js";
10
- 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-DowBk5k0.js";
11
- import { t as slackSetupPlugin } from "./channel.setup-oGp4gSTP.js";
12
- import { a as recordSlackThreadParticipation, n as clearSlackThreadParticipationCache, r as hasSlackThreadParticipation } from "./send-BURYyCXI.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-DMBUHKPy.js";
10
+ import { a as getSlackWriteClient, c as resolveSlackWebClientOptions, i as createSlackWriteClient, l as resolveSlackWriteClientOptions, n as createSlackTokenCacheKey, o as SLACK_DEFAULT_RETRY_OPTIONS, r as createSlackWebClient, s as SLACK_WRITE_RETRY_OPTIONS, t as clearSlackWriteClientCacheForTest } from "./client-qvqS9fQM.js";
11
+ import { t as slackSetupPlugin } from "./channel.setup-DvU_3G7a.js";
12
+ import { a as recordSlackThreadParticipation, n as clearSlackThreadParticipationCache, r as hasSlackThreadParticipation } from "./send-zvrcUvp2.js";
13
+ import { a as listSlackEmojis, c as pinSlackMessage, d as removeOwnSlackReactions, f as removeSlackReaction, i as getSlackMemberInfo, l as reactSlackMessage, m as unpinSlackMessage, n as downloadSlackFile, o as listSlackPins, p as sendSlackMessage, r as editSlackMessage, s as listSlackReactions, t as deleteSlackMessage, u as readSlackMessages } from "./actions-BA_6yvPC.js";
14
14
  import { n as listSlackDirectoryGroupsFromConfig, r as listSlackDirectoryPeersFromConfig } from "./directory-config-8UPAEyNg.js";
15
- import { t as probeSlack } from "./probe-Djes9Fy6.js";
15
+ import { t as probeSlack } from "./probe-DczaQTdi.js";
16
16
  import { t as collectSlackSecurityAuditFindings } from "./security-audit-CikQhBUY.js";
17
- import { n as resolveSlackRuntimeGroupPolicy } from "./provider-Ba13bui0.js";
17
+ import { n as resolveSlackRuntimeGroupPolicy } from "./provider-DNfFBEzl.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
1
  import { C as isSlackAnyNativeApprovalClientEnabled, T as shouldHandleSlackNativeApprovalRequest, b as truncateSlackText, j as normalizeSlackApproverId, r as resolveSlackReplyBlocks, w as resolveSlackApprovalKind } from "./thread-ts-NSVqWybn.js";
2
- import { t as sendMessageSlack } from "./send-BURYyCXI.js";
2
+ import { t as sendMessageSlack } from "./send-zvrcUvp2.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 { logError } from "openclaw/plugin-sdk/logging-core";
@@ -4,10 +4,9 @@ import "./targets-nUqxHGgg.js";
4
4
  import { A as isSlackExecApprovalClientEnabled, C as isSlackAnyNativeApprovalClientEnabled, D as isSlackApprovalAuthorizedSender, E as getSlackApprovalApprovers, M as resolveSlackExecApprovalTarget, N as shouldSuppressLocalSlackExecApprovalPrompt, O as getSlackExecApprovalApprovers, T as shouldHandleSlackNativeApprovalRequest, _ as buildSlackInteractiveBlocks, c as resolveSlackGroupRequireMention, f as normalizeAllowListLower, k as isSlackExecApprovalAuthorizedSender, l as resolveSlackGroupToolPolicy, n as resolveSlackThreadTsValue, r as resolveSlackReplyBlocks, s as SLACK_TEXT_LIMIT, t as normalizeSlackThreadTsCandidate, v as buildSlackPresentationBlocks, w as resolveSlackApprovalKind, y as resolveSlackInteractiveBlockOffsets } from "./thread-ts-NSVqWybn.js";
5
5
  import { n as extractSlackToolSend, t as describeSlackMessageTool } from "./message-tool-api-B9M0zzlQ.js";
6
6
  import { n as isSlackInteractiveRepliesEnabled, t as compileSlackInteractiveReplies } from "./interactive-replies-DrBq4Mld.js";
7
- import { a as resolveConfiguredFromRequiredCredentialStatuses, i as projectCredentialSnapshotFields, n as PAIRING_APPROVED_MESSAGE, t as DEFAULT_ACCOUNT_ID } from "./channel-api-DdLCPu8a.js";
8
- import { r as createSlackWebClient } from "./client-DowBk5k0.js";
7
+ import { d as PAIRING_APPROVED_MESSAGE, m as resolveConfiguredFromRequiredCredentialStatuses, p as projectCredentialSnapshotFields, r as createSlackWebClient, u as DEFAULT_ACCOUNT_ID } from "./client-qvqS9fQM.js";
9
8
  import { t as getOptionalSlackRuntime } from "./runtime-BOk7xkOl.js";
10
- import { i as slackSecurityAdapter, n as isSlackPluginAccountConfigured, r as slackConfigAdapter, t as createSlackPluginBase } from "./shared-D9WMYymo.js";
9
+ import { i as slackSecurityAdapter, n as isSlackPluginAccountConfigured, r as slackConfigAdapter, t as createSlackPluginBase } from "./shared-D5tOdKwQ.js";
11
10
  import { i as SLACK_CHANNEL, n as createSlackSetupWizardProxy, r as slackSetupAdapter } from "./setup-core-POfI_bgP.js";
12
11
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
13
12
  import { adaptScopedAccountAccessor } from "openclaw/plugin-sdk/channel-config-helpers";
@@ -232,7 +231,7 @@ const baseSlackApprovalCapability = createApproverRestrictedNativeApprovalCapabi
232
231
  approvalKind: resolveSlackApprovalKind(request),
233
232
  request
234
233
  }),
235
- load: async () => (await import("./approval-handler.runtime-DVLnnq25.js")).slackApprovalNativeRuntime
234
+ load: async () => (await import("./approval-handler.runtime-D0rHmHTC.js")).slackApprovalNativeRuntime
236
235
  })
237
236
  });
238
237
  const baseSlackNativeAdapter = baseSlackApprovalCapability.native;
@@ -431,7 +430,7 @@ async function handleSlackMessageAction(params) {
431
430
  //#region extensions/slack/src/channel-actions.ts
432
431
  let slackActionRuntimePromise$1;
433
432
  async function loadSlackActionRuntime$1() {
434
- slackActionRuntimePromise$1 ??= import("./action-runtime.runtime-C-vhDKzY.js");
433
+ slackActionRuntimePromise$1 ??= import("./action-runtime.runtime-uN2B3l57.js");
435
434
  return await slackActionRuntimePromise$1;
436
435
  }
437
436
  function resolveSlackActionContext(params) {
@@ -561,9 +560,9 @@ const EXTENSION_SHARED_MODULE_ID = "openclaw/plugin-sdk/extension-shared";
561
560
  const TARGET_RESOLVER_RUNTIME_MODULE_ID = "openclaw/plugin-sdk/target-resolver-runtime";
562
561
  const loadExtensionSharedSdk = createLazyRuntimeModule(() => import(EXTENSION_SHARED_MODULE_ID));
563
562
  const loadTargetResolverRuntimeSdk = createLazyRuntimeModule(() => import(TARGET_RESOLVER_RUNTIME_MODULE_ID));
564
- const loadSlackSetupSurfaceModule = createLazyRuntimeModule(() => import("./setup-surface-DJTHAguz.js"));
565
- const loadSlackScopesModule = createLazyRuntimeModule(() => import("./scopes-DiiHsqh1.js"));
566
- const loadSlackOutboundAdapterModule = createLazyRuntimeModule(() => import("./outbound-adapter-BHZMgblN.js"));
563
+ const loadSlackSetupSurfaceModule = createLazyRuntimeModule(() => import("./setup-surface-95xI4u2U.js"));
564
+ const loadSlackScopesModule = createLazyRuntimeModule(() => import("./scopes-Q1VjNpWb.js"));
565
+ const loadSlackOutboundAdapterModule = createLazyRuntimeModule(() => import("./outbound-adapter-BxKw6eWi.js"));
567
566
  async function resolveSlackHandleAction() {
568
567
  return getOptionalSlackRuntime()?.channel?.slack?.handleSlackAction ?? (await loadSlackActionRuntime()).handleSlackAction;
569
568
  }
@@ -584,26 +583,26 @@ let slackProbeModulePromise;
584
583
  let slackMonitorModulePromise;
585
584
  let slackDirectoryLiveModulePromise;
586
585
  const loadSlackDirectoryConfigModule = createLazyRuntimeModule(() => import("./directory-config-8UPAEyNg.js").then((n) => n.t));
587
- const loadSlackResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels-zXt5f47h.js").then((n) => n.n));
588
- const loadSlackResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-BLfGAz1v.js").then((n) => n.n));
586
+ const loadSlackResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels-DIxJRl0F.js").then((n) => n.n));
587
+ const loadSlackResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-B3vczJHE.js").then((n) => n.n));
589
588
  async function loadSlackActionRuntime() {
590
- slackActionRuntimePromise ??= import("./action-runtime.runtime-C-vhDKzY.js");
589
+ slackActionRuntimePromise ??= import("./action-runtime.runtime-uN2B3l57.js");
591
590
  return await slackActionRuntimePromise;
592
591
  }
593
592
  async function loadSlackSendRuntime() {
594
- slackSendRuntimePromise ??= import("./send.runtime-CKaMG3s-.js");
593
+ slackSendRuntimePromise ??= import("./send.runtime-iCVpfyB_.js");
595
594
  return await slackSendRuntimePromise;
596
595
  }
597
596
  async function loadSlackProbeModule() {
598
- slackProbeModulePromise ??= import("./probe-Djes9Fy6.js").then((n) => n.n);
597
+ slackProbeModulePromise ??= import("./probe-DczaQTdi.js").then((n) => n.n);
599
598
  return await slackProbeModulePromise;
600
599
  }
601
600
  async function loadSlackMonitorModule() {
602
- slackMonitorModulePromise ??= import("./monitor-BdzpEeNU.js").then((n) => n.t);
601
+ slackMonitorModulePromise ??= import("./monitor-D5FVBchh.js").then((n) => n.t);
603
602
  return await slackMonitorModulePromise;
604
603
  }
605
604
  async function loadSlackDirectoryLiveModule() {
606
- slackDirectoryLiveModulePromise ??= import("./directory-live-BFB1pSax.js").then((n) => n.t);
605
+ slackDirectoryLiveModulePromise ??= import("./directory-live-WZwhRYe2.js").then((n) => n.t);
607
606
  return await slackDirectoryLiveModulePromise;
608
607
  }
609
608
  async function resolveSlackSendContext(params) {
@@ -1,2 +1,2 @@
1
- import { t as SlackChannelConfigSchema } from "./config-schema-C0RewpJQ.js";
1
+ import { t as SlackChannelConfigSchema } from "./config-schema-BjAjs8_6.js";
2
2
  export { SlackChannelConfigSchema };
@@ -1,2 +1,2 @@
1
- import { t as slackPlugin } from "./channel-CvkLuaXk.js";
1
+ import { t as slackPlugin } from "./channel-ClgouPGI.js";
2
2
  export { slackPlugin };
@@ -1,11 +1,10 @@
1
1
  import { a as resolveSlackAccount, c as resolveSlackConfigAccessorAccount, i as resolveDefaultSlackAccountId, n as listSlackAccountIds } from "./accounts-f6Xcv9Vi.js";
2
- import "./channel-api-DdLCPu8a.js";
3
2
  import { a as describeSlackSetupAccount, i as SLACK_CHANNEL, n as createSlackSetupWizardProxy, o as isSlackSetupAccountConfigured, r as slackSetupAdapter } from "./setup-core-POfI_bgP.js";
4
- import { t as SlackChannelConfigSchema } from "./config-schema-C0RewpJQ.js";
3
+ import { t as SlackChannelConfigSchema } from "./config-schema-BjAjs8_6.js";
5
4
  import { adaptScopedAccountAccessor, createScopedChannelConfigAdapter } from "openclaw/plugin-sdk/channel-config-helpers";
6
5
  import { formatAllowFromLowercase } from "openclaw/plugin-sdk/allow-from";
7
6
  //#region extensions/slack/src/channel.setup.ts
8
- const slackSetupWizard = createSlackSetupWizardProxy(async () => ({ slackSetupWizard: (await import("./setup-surface-DJTHAguz.js")).slackSetupWizard }));
7
+ const slackSetupWizard = createSlackSetupWizardProxy(async () => ({ slackSetupWizard: (await import("./setup-surface-95xI4u2U.js")).slackSetupWizard }));
9
8
  const slackSetupConfigAdapter = createScopedChannelConfigAdapter({
10
9
  sectionKey: SLACK_CHANNEL,
11
10
  listAccountIds: listSlackAccountIds,
@@ -1,6 +1,25 @@
1
+ import "./target-parsing-C7eeWg7M.js";
2
+ import { DEFAULT_ACCOUNT_ID as DEFAULT_ACCOUNT_ID$1 } from "openclaw/plugin-sdk/account-id";
3
+ import { PAIRING_APPROVED_MESSAGE, projectCredentialSnapshotFields, resolveConfiguredFromRequiredCredentialStatuses } from "openclaw/plugin-sdk/channel-status";
1
4
  import { createHash } from "node:crypto";
2
5
  import { WebClient } from "@slack/web-api";
3
6
  import { createNodeProxyAgent } from "openclaw/plugin-sdk/fetch-runtime";
7
+ //#region extensions/slack/src/channel-api.ts
8
+ const SLACK_CHANNEL_META = {
9
+ id: "slack",
10
+ label: "Slack",
11
+ selectionLabel: "Slack",
12
+ docsPath: "/channels/slack",
13
+ docsLabel: "slack",
14
+ blurb: "supports bot + app tokens, channels, threads, and interactive replies.",
15
+ systemImage: "number.square",
16
+ markdownCapable: true
17
+ };
18
+ function getChatChannelMeta(id) {
19
+ if (id !== SLACK_CHANNEL_META.id) throw new Error(`Unsupported Slack channel meta lookup: ${id}`);
20
+ return SLACK_CHANNEL_META;
21
+ }
22
+ //#endregion
4
23
  //#region extensions/slack/src/client-options.ts
5
24
  const SLACK_DEFAULT_RETRY_OPTIONS = {
6
25
  retries: 2,
@@ -84,4 +103,4 @@ function clearSlackWriteClientCacheForTest() {
84
103
  slackWriteClientCache.clear();
85
104
  }
86
105
  //#endregion
87
- export { getSlackWriteClient as a, resolveSlackWebClientOptions as c, createSlackWriteClient as i, resolveSlackWriteClientOptions as l, createSlackTokenCacheKey as n, SLACK_DEFAULT_RETRY_OPTIONS as o, createSlackWebClient as r, SLACK_WRITE_RETRY_OPTIONS as s, clearSlackWriteClientCacheForTest as t };
106
+ export { getSlackWriteClient as a, resolveSlackWebClientOptions as c, PAIRING_APPROVED_MESSAGE as d, getChatChannelMeta as f, createSlackWriteClient as i, resolveSlackWriteClientOptions as l, resolveConfiguredFromRequiredCredentialStatuses as m, createSlackTokenCacheKey as n, SLACK_DEFAULT_RETRY_OPTIONS as o, projectCredentialSnapshotFields as p, createSlackWebClient as r, SLACK_WRITE_RETRY_OPTIONS as s, clearSlackWriteClientCacheForTest as t, DEFAULT_ACCOUNT_ID$1 as u };
@@ -18,6 +18,22 @@ const SlackChannelConfigSchema = buildChannelConfigSchema(SlackConfigSchema, { u
18
18
  label: "Slack Config Writes",
19
19
  help: "Allow Slack to write config in response to channel events/commands (default: true)."
20
20
  },
21
+ mentionPatterns: {
22
+ label: "Slack Mention Pattern Policy",
23
+ help: "Scopes configured groupChat mentionPatterns to selected Slack channel IDs. Native Slack @mentions still trigger even when regex patterns are denied."
24
+ },
25
+ "mentionPatterns.mode": {
26
+ label: "Slack Mention Pattern Mode",
27
+ help: "\"allow\" enables configured regex mention patterns unless denyIn matches; \"deny\" disables them unless allowIn matches."
28
+ },
29
+ "mentionPatterns.allowIn": {
30
+ label: "Slack Mention Pattern Allowlist",
31
+ help: "Slack channel IDs where configured regex mention patterns are enabled when mode is deny."
32
+ },
33
+ "mentionPatterns.denyIn": {
34
+ label: "Slack Mention Pattern Denylist",
35
+ help: "Slack channel IDs where configured regex mention patterns are disabled. Native @mentions still trigger."
36
+ },
21
37
  "commands.native": {
22
38
  label: "Slack Native Commands",
23
39
  help: "Override native commands for Slack (bool or \"auto\")."
@@ -1,4 +1,4 @@
1
- import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-DIMUXDHO.js";
1
+ import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-DpGLNqS3.js";
2
2
  import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-g_PPWuoD.js";
3
3
  import { n as listSlackDirectoryGroupsFromConfig, r as listSlackDirectoryPeersFromConfig } from "./directory-config-8UPAEyNg.js";
4
4
  import { t as collectSlackSecurityAuditFindings } from "./security-audit-CikQhBUY.js";
@@ -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-DowBk5k0.js";
3
+ import { r as createSlackWebClient } from "./client-qvqS9fQM.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({
@@ -7,14 +7,14 @@ function hasLegacySlackStreamingAliases(value) {
7
7
  function hasLegacySlackChannelAllowAlias(value) {
8
8
  const channels = asObjectRecord(asObjectRecord(value)?.channels);
9
9
  if (!channels) return false;
10
- return Object.values(channels).some((channel) => Object.prototype.hasOwnProperty.call(asObjectRecord(channel) ?? {}, "allow"));
10
+ return Object.values(channels).some((channel) => Object.hasOwn(asObjectRecord(channel) ?? {}, "allow"));
11
11
  }
12
12
  function normalizeSlackChannelAllowAliases(params) {
13
13
  let changed = false;
14
14
  const nextChannels = { ...params.channels };
15
15
  for (const [channelId, channelValue] of Object.entries(params.channels)) {
16
16
  const channel = asObjectRecord(channelValue);
17
- if (!channel || !Object.prototype.hasOwnProperty.call(channel, "allow")) continue;
17
+ if (!channel || !Object.hasOwn(channel, "allow")) continue;
18
18
  const nextChannel = { ...channel };
19
19
  if (nextChannel.enabled === void 0) {
20
20
  nextChannel.enabled = channel.allow;
@@ -1,2 +1,2 @@
1
- import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-DIMUXDHO.js";
1
+ import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-DpGLNqS3.js";
2
2
  export { legacyConfigRules, normalizeCompatibilityConfig };
@@ -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-Ba13bui0.js";
2
+ import { t as monitorSlackProvider, y as buildSlackSlashCommandMatcher } from "./provider-DNfFBEzl.js";
3
3
  import { t as isSlackChannelAllowedByPolicy } from "./policy-BBDU-PQK.js";
4
- import { o as resolveSlackThreadTs } from "./replies-DkmWK7JW.js";
4
+ import { o as resolveSlackThreadTs } from "./replies-BmFpkBXm.js";
5
5
  //#region extensions/slack/src/monitor.ts
6
6
  var monitor_exports = /* @__PURE__ */ __exportAll({
7
7
  buildSlackSlashCommandMatcher: () => buildSlackSlashCommandMatcher,
@@ -9,7 +9,7 @@ import { resolvePayloadMediaUrls, sendPayloadMediaSequenceAndFinalize, sendTextM
9
9
  const SLACK_MAX_BLOCKS = 50;
10
10
  let slackSendRuntimePromise;
11
11
  async function loadSlackSendRuntime() {
12
- slackSendRuntimePromise ??= import("./send.runtime-CKaMG3s-.js");
12
+ slackSendRuntimePromise ??= import("./send.runtime-iCVpfyB_.js");
13
13
  return await slackSendRuntimePromise;
14
14
  }
15
15
  function resolveRenderedInteractiveBlocks(interactive, previousBlocks) {
@@ -4,12 +4,12 @@ import "./targets-nUqxHGgg.js";
4
4
  import { b as truncateSlackText, f as normalizeAllowListLower, h as resolveSlackAllowListMatch, p as normalizeSlackAllowOwnerEntry, s as SLACK_TEXT_LIMIT } from "./thread-ts-NSVqWybn.js";
5
5
  import { n as isSlackInteractiveRepliesEnabled, t as compileSlackInteractiveReplies } from "./interactive-replies-DrBq4Mld.js";
6
6
  import { n as resolveSlackNativeStreaming, r as resolveSlackStreamingMode, t as mapStreamingModeToSlackLegacyDraftStreamMode } from "./streaming-compat-DjlgH-Be.js";
7
- import { a as recordSlackThreadParticipation, i as hasSlackThreadParticipationWithPersistence, s as normalizeSlackOutboundText, t as sendMessageSlack } from "./send-BURYyCXI.js";
8
- import { _ as resolveSlackThreadStarter, b as buildSlackEditTextPayload, f as removeSlackReaction, g as resolveSlackThreadHistory, l as reactSlackMessage, r as editSlackMessage, t as deleteSlackMessage, y as formatSlackFileReference } from "./actions-DMBUHKPy.js";
7
+ import { a as recordSlackThreadParticipation, i as hasSlackThreadParticipationWithPersistence, s as normalizeSlackOutboundText, t as sendMessageSlack } from "./send-zvrcUvp2.js";
8
+ import { _ as resolveSlackThreadStarter, b as buildSlackEditTextPayload, f as removeSlackReaction, g as resolveSlackThreadHistory, l as reactSlackMessage, r as editSlackMessage, t as deleteSlackMessage, y as formatSlackFileReference } from "./actions-BA_6yvPC.js";
9
9
  import { t as formatSlackError } from "./errors-CZtmv-h0.js";
10
- import { _ as resolveStorePath, a as escapeSlackMrkdwn, b as stripSlackMentionsForCommandDetection, c as authorizeSlackBotRoomMessage, d as buildSlackAssistantThreadMetadata, f as parseSlackAssistantThreadMetadata, g as resolveChannelContextVisibilityMode, h as readSessionUpdatedAt, i as authorizeSlackDirectMessage, l as resolveSlackCommandIngress, m as resolveSlackChatType, o as recordInboundSession, p as normalizeSlackChannelType, r as resolveSlackRoomContextHints, s as resolveConversationLabel$1, u as resolveSlackEffectiveAllowFrom, v as updateLastRoute } from "./provider-Ba13bui0.js";
10
+ import { _ as resolveStorePath, a as escapeSlackMrkdwn, b as stripSlackMentionsForCommandDetection, c as authorizeSlackBotRoomMessage, d as buildSlackAssistantThreadMetadata, f as parseSlackAssistantThreadMetadata, g as resolveChannelContextVisibilityMode, h as readSessionUpdatedAt, i as authorizeSlackDirectMessage, l as resolveSlackCommandIngress, m as resolveSlackChatType, o as recordInboundSession, p as normalizeSlackChannelType, r as resolveSlackRoomContextHints, s as resolveConversationLabel$1, u as resolveSlackEffectiveAllowFrom, v as updateLastRoute } from "./provider-DNfFBEzl.js";
11
11
  import { n as resolveSlackChannelConfig } from "./policy-BBDU-PQK.js";
12
- import { a as resolveDeliveredSlackReplyThreadTs, i as readSlackReplyBlocks, n as deliverReplies, o as resolveSlackThreadTs, t as createSlackReplyDeliveryPlan } from "./replies-DkmWK7JW.js";
12
+ import { a as resolveDeliveredSlackReplyThreadTs, i as readSlackReplyBlocks, n as deliverReplies, o as resolveSlackThreadTs, t as createSlackReplyDeliveryPlan } from "./replies-BmFpkBXm.js";
13
13
  import { asOptionalRecord, normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString, readStringValue } from "openclaw/plugin-sdk/string-coerce-runtime";
14
14
  import { resolveAgentRoute, resolveInboundLastRouteSessionKey, resolveThreadSessionKeys } from "openclaw/plugin-sdk/routing";
15
15
  import { buildChannelProgressDraftLine, buildChannelProgressDraftLineForEntry, createChannelMessageReplyPipeline, createChannelProgressDraftGate, createDraftStreamLoop, defineFinalizableLivePreviewAdapter, deliverWithFinalizableLivePreviewAdapter, formatChannelProgressDraftText, isChannelProgressDraftWorkToolName, mergeChannelProgressDraftLine, resolveAgentOutboundIdentity, resolveChannelMessageSourceReplyDeliveryMode, resolveChannelProgressDraftConfig, resolveChannelProgressDraftMaxLineChars, resolveChannelProgressDraftMaxLines, resolveChannelProgressDraftRender, resolveChannelStreamingBlockEnabled, resolveChannelStreamingNativeTransport, resolveChannelStreamingPreviewToolProgress, resolveChannelStreamingSuppressDefaultToolProgressMessages } from "openclaw/plugin-sdk/channel-outbound";
@@ -562,7 +562,6 @@ async function finalizeSlackPreviewEdit(params) {
562
562
  client: params.client,
563
563
  ...params.blocks?.length ? { blocks: params.blocks } : {}
564
564
  });
565
- return;
566
565
  } catch (err) {
567
566
  try {
568
567
  if (await didSlackPreviewEditApplyAfterError({
@@ -1039,10 +1038,11 @@ async function dispatchPreparedSlackMessage(prepared) {
1039
1038
  const deliverNormally = async (params) => {
1040
1039
  if (params.payload.isReasoning === true) return;
1041
1040
  const replyThreadTs = resolveDeliveryThreadTs(params);
1041
+ const deliveryReplyThreadTs = replyDeliveryMode === "off" && !forcedReplyThreadTs && !isThreadReply ? void 0 : replyThreadTs;
1042
1042
  if (deliveryTracker.hasDelivered({
1043
1043
  kind: params.kind,
1044
1044
  payload: params.payload,
1045
- threadTs: replyThreadTs
1045
+ threadTs: deliveryReplyThreadTs
1046
1046
  })) {
1047
1047
  logVerbose("slack: suppressed duplicate normal delivery within the same turn");
1048
1048
  return;
@@ -1055,7 +1055,7 @@ async function dispatchPreparedSlackMessage(prepared) {
1055
1055
  accountId: account.accountId,
1056
1056
  runtime,
1057
1057
  textLimit: ctx.textLimit,
1058
- replyThreadTs,
1058
+ replyThreadTs: deliveryReplyThreadTs,
1059
1059
  replyToMode: replyDeliveryMode,
1060
1060
  ...slackIdentity ? { identity: slackIdentity } : {},
1061
1061
  ...slackMessageMetadata ? { metadata: slackMessageMetadata } : {}
@@ -1065,14 +1065,14 @@ async function dispatchPreparedSlackMessage(prepared) {
1065
1065
  const deliveredThreadTs = resolveDeliveredSlackReplyThreadTs({
1066
1066
  replyToMode: replyDeliveryMode,
1067
1067
  payloadReplyToId: params.payload.replyToId,
1068
- replyThreadTs
1068
+ replyThreadTs: deliveryReplyThreadTs
1069
1069
  });
1070
1070
  rememberDeliveredThreadTs(params.kind, deliveredThreadTs);
1071
1071
  replyPlan.markSent();
1072
1072
  deliveryTracker.markDelivered({
1073
1073
  kind: params.kind,
1074
1074
  payload: params.payload,
1075
- threadTs: replyThreadTs
1075
+ threadTs: deliveryReplyThreadTs
1076
1076
  });
1077
1077
  };
1078
1078
  const deliverBufferedStreamFallback = async (params) => {
@@ -1321,7 +1321,7 @@ async function dispatchPreparedSlackMessage(prepared) {
1321
1321
  return;
1322
1322
  }
1323
1323
  }
1324
- if ((await deliverWithFinalizableLivePreviewAdapter({
1324
+ await deliverWithFinalizableLivePreviewAdapter({
1325
1325
  kind: info.kind,
1326
1326
  payload,
1327
1327
  adapter: defineFinalizableLivePreviewAdapter({
@@ -1398,7 +1398,7 @@ async function dispatchPreparedSlackMessage(prepared) {
1398
1398
  kind: info.kind
1399
1399
  });
1400
1400
  }
1401
- })).kind === "preview-finalized") return;
1401
+ });
1402
1402
  };
1403
1403
  const onSlackDeliveryError = (err, info) => {
1404
1404
  runtime.error?.(danger(`slack ${info.kind} reply failed: ${formatSlackError(err)}`));
@@ -1444,7 +1444,7 @@ async function dispatchPreparedSlackMessage(prepared) {
1444
1444
  const progressDraftMaxLineChars = resolveChannelProgressDraftMaxLineChars(account.config);
1445
1445
  const renderProgressDraft = () => {
1446
1446
  if (!draftStream || streamMode !== "status_final") return;
1447
- const progressLines = useRichProgressDraft && previewToolProgressLines.length === 0 ? lastNonEmptyPreviewToolProgressLines : previewToolProgressLines;
1447
+ const progressLines = previewToolProgressLines.length === 0 ? lastNonEmptyPreviewToolProgressLines : previewToolProgressLines;
1448
1448
  const previewText = formatChannelProgressDraftText({
1449
1449
  entry: account.config,
1450
1450
  lines: progressLines,
@@ -1639,7 +1639,7 @@ async function dispatchPreparedSlackMessage(prepared) {
1639
1639
  });
1640
1640
  };
1641
1641
  const onDraftBoundary = !shouldUseDraftStream ? void 0 : async () => {
1642
- if (hasStreamedMessage) {
1642
+ if (hasStreamedMessage && streamMode !== "status_final") {
1643
1643
  draftStream?.forceNewMessage();
1644
1644
  hasStreamedMessage = false;
1645
1645
  appendRenderedText = "";
@@ -1855,7 +1855,7 @@ const SLACK_MENTION_RESOLUTION_MAX_LOOKUPS_PER_MESSAGE = 20;
1855
1855
  const SLACK_USER_MENTION_RE$1 = /<@([A-Z0-9]+)(?:\|[^>]+)?>/gi;
1856
1856
  let slackMediaModulePromise$1;
1857
1857
  function loadSlackMediaModule$1() {
1858
- slackMediaModulePromise$1 ??= import("./actions-DMBUHKPy.js").then((n) => n.h);
1858
+ slackMediaModulePromise$1 ??= import("./actions-BA_6yvPC.js").then((n) => n.h);
1859
1859
  return slackMediaModulePromise$1;
1860
1860
  }
1861
1861
  function collectUniqueSlackMentionIds$1(texts) {
@@ -2369,7 +2369,7 @@ function formatSlackBotStarterThreadLabel(params) {
2369
2369
  //#region extensions/slack/src/monitor/message-handler/prepare-thread-context.ts
2370
2370
  let slackMediaModulePromise;
2371
2371
  function loadSlackMediaModule() {
2372
- slackMediaModulePromise ??= import("./actions-DMBUHKPy.js").then((n) => n.h);
2372
+ slackMediaModulePromise ??= import("./actions-BA_6yvPC.js").then((n) => n.h);
2373
2373
  return slackMediaModulePromise;
2374
2374
  }
2375
2375
  const SLACK_THREAD_CONTEXT_USER_LOOKUP_CONCURRENCY = 4;
@@ -2417,9 +2417,12 @@ async function resolveSlackThreadContextData(params) {
2417
2417
  });
2418
2418
  let threadStarterBody;
2419
2419
  let threadHistoryBody;
2420
- let threadSessionPreviousTimestamp;
2421
2420
  let threadLabel;
2422
2421
  let threadStarterMedia = null;
2422
+ const threadSessionPreviousTimestamp = params.isThreadReply && params.threadTs ? readSessionUpdatedAt({
2423
+ storePath: params.storePath,
2424
+ sessionKey: params.sessionKey
2425
+ }) : void 0;
2423
2426
  if (!params.isThreadReply || !params.threadTs) return {
2424
2427
  threadStarterBody,
2425
2428
  threadHistoryBody,
@@ -2460,10 +2463,6 @@ async function resolveSlackThreadContextData(params) {
2460
2463
  if (threadStarterMedia) logVerbose(`slack: hydrated thread starter file ${threadStarterMedia.map((item) => item.placeholder).join(", ")} from root message`);
2461
2464
  }
2462
2465
  } else threadLabel = `Slack thread ${params.roomLabel}`;
2463
- threadSessionPreviousTimestamp = readSessionUpdatedAt({
2464
- storePath: params.storePath,
2465
- sessionKey: params.sessionKey
2466
- });
2467
2466
  const includeBotStarterAsRootContext = shouldIncludeBotThreadStarterContext({
2468
2467
  starterIsCurrentBot,
2469
2468
  isNewThreadSession: !threadSessionPreviousTimestamp,
@@ -2713,8 +2712,13 @@ async function restoreSlackAssistantThreadContextFromMetadata(params) {
2713
2712
  logVerbose(`slack assistant context restore failed channel=${params.message.channel} ts=${threadTs}: ${formatErrorMessage(err)}`);
2714
2713
  }
2715
2714
  }
2716
- function resolveCachedMentionRegexes(ctx, agentId) {
2717
- const key = normalizeOptionalString(agentId) ?? "__default__";
2715
+ function resolveCachedMentionRegexes(ctx, agentId, options) {
2716
+ const key = [
2717
+ normalizeOptionalString(agentId) ?? "__default__",
2718
+ normalizeOptionalString(options?.provider),
2719
+ normalizeOptionalString(options?.conversationId ?? void 0),
2720
+ options?.providerPolicy ? JSON.stringify(options.providerPolicy) : ""
2721
+ ].join("");
2718
2722
  let byAgent = mentionRegexCache.get(ctx);
2719
2723
  if (!byAgent) {
2720
2724
  byAgent = /* @__PURE__ */ new Map();
@@ -2722,7 +2726,7 @@ function resolveCachedMentionRegexes(ctx, agentId) {
2722
2726
  }
2723
2727
  const cached = byAgent.get(key);
2724
2728
  if (cached) return cached;
2725
- const built = buildMentionRegexes(ctx.cfg, agentId);
2729
+ const built = buildMentionRegexes(ctx.cfg, agentId, options);
2726
2730
  byAgent.set(key, built);
2727
2731
  return built;
2728
2732
  }
@@ -2992,7 +2996,12 @@ async function prepareSlackMessage(params) {
2992
2996
  canResolveExplicit: Boolean(ctx.botUserId)
2993
2997
  }
2994
2998
  }));
2995
- let mentionRegexes = resolveCachedMentionRegexes(ctx, routing.route.agentId);
2999
+ const buildPolicyMentionRegexes = (agentId) => resolveCachedMentionRegexes(ctx, agentId, {
3000
+ provider: "slack",
3001
+ conversationId: message.channel,
3002
+ providerPolicy: account.config.mentionPatterns
3003
+ });
3004
+ let mentionRegexes = buildPolicyMentionRegexes(routing.route.agentId);
2996
3005
  let wasMentioned = resolveWasMentioned(mentionRegexes);
2997
3006
  const hasBoundSession = Boolean(routing.runtimeBoundSessionKey || routing.configuredBindingSessionKey);
2998
3007
  if (!seedTopLevelRoomThreadBySource && wasMentioned && isRoom && !routing.isThreadReply && !hasBoundSession) {
@@ -3007,10 +3016,12 @@ async function prepareSlackMessage(params) {
3007
3016
  seedTopLevelRoomThread: true,
3008
3017
  assistantThreadTs: assistantThreadContext?.threadTs
3009
3018
  });
3010
- mentionRegexes = resolveCachedMentionRegexes(ctx, routing.route.agentId);
3019
+ mentionRegexes = buildPolicyMentionRegexes(routing.route.agentId);
3011
3020
  wasMentioned = resolveWasMentioned(mentionRegexes);
3012
3021
  }
3013
3022
  const { route, runtimeBinding, configuredBinding, configuredBindingSessionKey, replyToMode, threadContext, threadTs, isThreadReply, threadKeys, sessionKey, historyKey } = routing;
3023
+ const isAssistantThreadMessage = Boolean(isDirectMessage && messageAssistantThreadContext);
3024
+ const forcedAssistantReplyThreadTs = Boolean(assistantThreadContext?.threadTs && (isThreadReply || isAssistantThreadMessage || replyToMode !== "off")) ? assistantThreadContext?.threadTs : void 0;
3014
3025
  if (runtimeBinding && shouldLogVerbose()) logVerbose(`slack: routed via bound conversation ${runtimeBinding.conversation.conversationId} -> ${runtimeBinding.targetSessionKey}`);
3015
3026
  if (configuredBinding) {
3016
3027
  const ensured = await ensureConfiguredBindingRouteReady({
@@ -3496,7 +3507,7 @@ async function prepareSlackMessage(params) {
3496
3507
  } : void 0
3497
3508
  },
3498
3509
  replyToMode,
3499
- ...assistantThreadContext?.threadTs ? { forcedReplyThreadTs: assistantThreadContext.threadTs } : {},
3510
+ ...forcedAssistantReplyThreadTs ? { forcedReplyThreadTs: forcedAssistantReplyThreadTs } : {},
3500
3511
  ...assistantThreadContext ? { slackMessageMetadata: buildSlackAssistantThreadMetadata(assistantThreadContext) } : {},
3501
3512
  requireMention: shouldRequireMention,
3502
3513
  isDirectMessage,
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
- import { r as createSlackWebClient } from "./client-DowBk5k0.js";
2
+ import { r as createSlackWebClient } from "./client-qvqS9fQM.js";
3
3
  import { t as formatSlackError } from "./errors-CZtmv-h0.js";
4
4
  import { withTimeout } from "openclaw/plugin-sdk/text-utility-runtime";
5
5
  //#region extensions/slack/src/probe.ts
@@ -2,11 +2,11 @@ import { n as registerSlackHttpHandler, r as normalizeSlackWebhookPath } from ".
2
2
  import { a as resolveSlackAccount, d as resolveSlackBotToken, o as resolveSlackAccountAllowFrom, s as resolveSlackAccountDmPolicy, u as resolveSlackAppToken } from "./accounts-f6Xcv9Vi.js";
3
3
  import { C as isSlackAnyNativeApprovalClientEnabled, D as isSlackApprovalAuthorizedSender, b as truncateSlackText, d as normalizeAllowList, f as normalizeAllowListLower, h as resolveSlackAllowListMatch, k as isSlackExecApprovalAuthorizedSender, m as normalizeSlackSlug, p as normalizeSlackAllowOwnerEntry, s as SLACK_TEXT_LIMIT, u as allowListMatches } from "./thread-ts-NSVqWybn.js";
4
4
  import { n as isSlackInteractiveRepliesEnabled, t as compileSlackInteractiveReplies } from "./interactive-replies-DrBq4Mld.js";
5
- import { c as resolveSlackWebClientOptions } from "./client-DowBk5k0.js";
5
+ import { c as resolveSlackWebClientOptions } from "./client-qvqS9fQM.js";
6
6
  import { t as getOptionalSlackRuntime } from "./runtime-BOk7xkOl.js";
7
7
  import { t as formatSlackError } from "./errors-CZtmv-h0.js";
8
- import { t as resolveSlackChannelAllowlist } from "./resolve-channels-zXt5f47h.js";
9
- import { t as resolveSlackUserAllowlist } from "./resolve-users-BLfGAz1v.js";
8
+ import { t as resolveSlackChannelAllowlist } from "./resolve-channels-DIxJRl0F.js";
9
+ import { t as resolveSlackUserAllowlist } from "./resolve-users-B3vczJHE.js";
10
10
  import { n as resolveSlackChannelConfig, r as resolveSlackChannelLabel, t as isSlackChannelAllowedByPolicy } from "./policy-BBDU-PQK.js";
11
11
  import { normalizeResolvedSecretInputString } from "openclaw/plugin-sdk/secret-input";
12
12
  import { asOptionalRecord, normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString, normalizeStringEntries, normalizeStringEntriesLower, normalizeUniqueTrimmedStringList } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -2699,7 +2699,7 @@ function createSlackThreadTsResolver(params) {
2699
2699
  //#region extensions/slack/src/monitor/message-handler.ts
2700
2700
  let slackMessagePipelinePromise;
2701
2701
  function loadSlackMessagePipeline() {
2702
- slackMessagePipelinePromise ??= import("./pipeline.runtime-C52E8vGp.js");
2702
+ slackMessagePipelinePromise ??= import("./pipeline.runtime-Bo6reKXg.js");
2703
2703
  return slackMessagePipelinePromise;
2704
2704
  }
2705
2705
  const APP_MENTION_RETRY_TTL_MS = 6e4;
@@ -3331,7 +3331,7 @@ function loadSlashCommandsRuntime() {
3331
3331
  return slashCommandsRuntimePromise;
3332
3332
  }
3333
3333
  function loadSlashDispatchRuntime() {
3334
- slashDispatchRuntimePromise ??= import("./slash-dispatch.runtime-lsyTm_q5.js");
3334
+ slashDispatchRuntimePromise ??= import("./slash-dispatch.runtime-BKo3qtpZ.js");
3335
3335
  return slashDispatchRuntimePromise;
3336
3336
  }
3337
3337
  function loadSlackPluginCommandsRuntime() {
@@ -4071,7 +4071,7 @@ function parseApiAppIdFromAppToken(raw) {
4071
4071
  async function monitorSlackProvider(opts = {}) {
4072
4072
  const cfg = opts.config ?? getRuntimeConfig$1();
4073
4073
  const runtime = opts.runtime ?? createNonExitingRuntime();
4074
- let account = resolveSlackAccount({
4074
+ const account = resolveSlackAccount({
4075
4075
  cfg,
4076
4076
  accountId: opts.accountId
4077
4077
  });
@@ -1,5 +1,5 @@
1
1
  import { r as resolveSlackReplyBlocks, s as SLACK_TEXT_LIMIT } from "./thread-ts-NSVqWybn.js";
2
- import { o as markdownToSlackMrkdwnChunks, t as sendMessageSlack } from "./send-BURYyCXI.js";
2
+ import { o as markdownToSlackMrkdwnChunks, t as sendMessageSlack } from "./send-zvrcUvp2.js";
3
3
  import { createReplyReferencePlanner } from "openclaw/plugin-sdk/reply-reference";
4
4
  import { SILENT_REPLY_TOKEN, chunkMarkdownTextWithMode, isSilentReplyText } from "openclaw/plugin-sdk/reply-chunking";
5
5
  import { deliverTextOrMediaReply, resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload";
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
- import { r as createSlackWebClient } from "./client-DowBk5k0.js";
2
+ import { r as createSlackWebClient } from "./client-qvqS9fQM.js";
3
3
  import { n as resolveSlackAllowlistEntries, t as collectSlackCursorItems } from "./resolve-allowlist-common-CP8SH0Zf.js";
4
4
  import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  //#region extensions/slack/src/resolve-channels.ts
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
- import { r as createSlackWebClient } from "./client-DowBk5k0.js";
2
+ import { r as createSlackWebClient } from "./client-qvqS9fQM.js";
3
3
  import { n as resolveSlackAllowlistEntries, t as collectSlackCursorItems } from "./resolve-allowlist-common-CP8SH0Zf.js";
4
4
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  //#region extensions/slack/src/resolve-users.ts
@@ -1,5 +1,5 @@
1
1
  import "./target-parsing-C7eeWg7M.js";
2
- import "./channel-api-DdLCPu8a.js";
2
+ import "./client-qvqS9fQM.js";
3
3
  import "./config-api-DnT9ohtE.js";
4
4
  import "openclaw/plugin-sdk/account-id";
5
5
  import { createActionGate as createActionGate$1, imageResultFromFile, jsonResult, readPositiveIntegerParam, readReactionParams, readStringParam, withNormalizedTimestamp } from "openclaw/plugin-sdk/channel-actions";