@openclaw/slack 2026.5.16-beta.3 → 2026.5.16-beta.5

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 (60) hide show
  1. package/dist/account-inspect-api.js +1 -1
  2. package/dist/{account-inspect-BJyQLSkN.js → account-inspect-uMPQ6wIu.js} +1 -1
  3. package/dist/{accounts-yk5K3wQU.js → accounts-Cbw3i3Sa.js} +7 -2
  4. package/dist/accounts.runtime-z3fshUeC.js +2 -0
  5. package/dist/{action-runtime-p39JLqwf.js → action-runtime-DgzkekLM.js} +3 -3
  6. package/dist/action-runtime.runtime-CGEyxfMu.js +2 -0
  7. package/dist/{actions-BCRbHv1Q.js → actions-vFq9T_Kd.js} +3 -3
  8. package/dist/{actions.runtime-CpywQR3D.js → actions.runtime-3XZA8-ot.js} +1 -1
  9. package/dist/api.js +14 -14
  10. package/dist/{approval-handler.runtime-DXrdRbkT.js → approval-handler.runtime-C_hfvcRd.js} +4 -4
  11. package/dist/{blocks-render-BAVfd6r0.js → blocks-render-ziYgM0qF.js} +74 -3
  12. package/dist/{channel-DoFtZGpw.js → channel-D9Wzqu3W.js} +21 -21
  13. package/dist/channel-config-api.js +1 -1
  14. package/dist/channel-plugin-api.js +1 -1
  15. package/dist/{channel.setup-BDL4qn9U.js → channel.setup-C2_IZ9It.js} +4 -4
  16. package/dist/{client-C_IaJbi5.js → client-Dr7pteMR.js} +4 -2
  17. package/dist/{config-schema-CNRousxw.js → config-schema-C8tW0Db0.js} +4 -0
  18. package/dist/contract-api.js +1 -1
  19. package/dist/{directory-config-CMvFiswf.js → directory-config-qDXRTCcs.js} +1 -1
  20. package/dist/directory-contract-api.js +1 -1
  21. package/dist/{directory-live-CZPzpQZF.js → directory-live-BnN4Zawp.js} +2 -2
  22. package/dist/http-routes-api.js +1 -1
  23. package/dist/inbound-contract-test-api.js +2 -2
  24. package/dist/{interactive-replies-BSg5hXhj.js → interactive-replies-B1wwXeVn.js} +10 -1
  25. package/dist/interactive-replies-api.js +1 -1
  26. package/dist/{message-tool-api-C7gc7goF.js → message-tool-api-DRSTJhP8.js} +2 -2
  27. package/dist/message-tool-api.js +1 -1
  28. package/dist/{monitor-Djnd8pGL.js → monitor-beou_Rl6.js} +3 -3
  29. package/dist/{outbound-adapter-CHm6e-0Q.js → outbound-adapter-Dcy9jZv1.js} +26 -6
  30. package/dist/outbound-payload-test-api.js +1 -1
  31. package/dist/{outbound-payload.test-harness-C0CW7_CE.js → outbound-payload.test-harness-B8N8U_AA.js} +1 -1
  32. package/dist/{pipeline.runtime-DJcwOZky.js → pipeline.runtime-COwSmZG5.js} +131 -46
  33. package/dist/{plugin-routes-CRnfsTTX.js → plugin-routes-hrKOqBIn.js} +1 -1
  34. package/dist/{prepare-Or_6_XXl.js → prepare-BjlcuiLr.js} +132 -24
  35. package/dist/{prepare.test-helpers-CU1qB54Q.js → prepare.test-helpers-D807wdul.js} +1 -1
  36. package/dist/{probe-FL4sUJsH.js → probe-DDef8MfR.js} +1 -1
  37. package/dist/{provider-3Y7c15_J.js → provider-C7uiI7hL.js} +120 -9
  38. package/dist/{replies-Fg1T3ZzU.js → replies-ClYRn89v.js} +9 -6
  39. package/dist/{reply-blocks-BFaJ_ejG.js → reply-blocks-DgUdywKU.js} +9 -4
  40. package/dist/{resolve-channels-B_eKaOkE.js → resolve-channels-gx65A1PR.js} +1 -1
  41. package/dist/{resolve-users-BzBAJwvq.js → resolve-users-OknHaiRY.js} +1 -1
  42. package/dist/{room-context-Cd8jFpS-.js → room-context-BI26wVBb.js} +83 -2
  43. package/dist/{runtime-api-B5HGOzX3.js → runtime-api-D3pvtood.js} +1 -1
  44. package/dist/runtime-api.js +12 -12
  45. package/dist/{scopes-Bvg_ZzqZ.js → scopes-vRHcdO0m.js} +1 -1
  46. package/dist/{send-CxXFbqN1.js → send-Br_H5f6H.js} +8 -3
  47. package/dist/send.runtime-Cj0cqt6C.js +2 -0
  48. package/dist/send.runtime-CjgsYARn.js +2 -0
  49. package/dist/{setup-core-B7pou7oe.js → setup-core-BRD65LS_.js} +23 -4
  50. package/dist/setup-plugin-api.js +1 -1
  51. package/dist/{setup-surface-CJS-L7PA.js → setup-surface-DpNyddrJ.js} +5 -5
  52. package/dist/{shared-BEabCPK3.js → shared-DdgQfBV9.js} +6 -6
  53. package/dist/{slash-dispatch.runtime-Cg7uU92H.js → slash-dispatch.runtime-DYm6lWN8.js} +1 -1
  54. package/dist/test-api.js +6 -6
  55. package/openclaw.plugin.json +14 -0
  56. package/package.json +4 -4
  57. package/dist/accounts.runtime-BhbEu1ZK.js +0 -2
  58. package/dist/action-runtime.runtime-BzrPV3EA.js +0 -2
  59. package/dist/send.runtime-BHCPpSj_.js +0 -2
  60. package/dist/send.runtime-CDG5AgU3.js +0 -2
@@ -1,4 +1,4 @@
1
- import { t as inspectSlackAccount } from "./account-inspect-BJyQLSkN.js";
1
+ import { t as inspectSlackAccount } from "./account-inspect-uMPQ6wIu.js";
2
2
  //#region extensions/slack/account-inspect-api.ts
3
3
  function inspectSlackReadOnlyAccount(cfg, accountId) {
4
4
  return inspectSlackAccount({
@@ -1,4 +1,4 @@
1
- import { i as resolveDefaultSlackAccountId, r as mergeSlackAccountConfig } from "./accounts-yk5K3wQU.js";
1
+ import { i as resolveDefaultSlackAccountId, r as mergeSlackAccountConfig } from "./accounts-Cbw3i3Sa.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 { DEFAULT_ACCOUNT_ID, createAccountListHelpers, normalizeAccountId, resolveMergedAccountConfig } from "openclaw/plugin-sdk/account-resolution";
1
+ import { DEFAULT_ACCOUNT_ID, createAccountListHelpers, hasConfiguredAccountValue, normalizeAccountId, resolveMergedAccountConfig } from "openclaw/plugin-sdk/account-resolution";
2
2
  import { normalizeResolvedSecretInputString } from "openclaw/plugin-sdk/secret-input";
3
3
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  import { mapAllowFromEntries, normalizeChannelDmPolicy, resolveChannelDmAllowFrom, resolveChannelDmPolicy } from "openclaw/plugin-sdk/channel-config-helpers";
@@ -38,7 +38,12 @@ function resolveSlackReplyToMode(account, chatType) {
38
38
  }
39
39
  //#endregion
40
40
  //#region extensions/slack/src/accounts.ts
41
- const { listAccountIds, resolveDefaultAccountId } = createAccountListHelpers("slack");
41
+ const { listAccountIds, resolveDefaultAccountId } = createAccountListHelpers("slack", { hasImplicitDefaultAccount: (cfg) => {
42
+ const slack = cfg.channels?.slack;
43
+ if (!(hasConfiguredAccountValue(slack?.botToken) || hasConfiguredAccountValue(process.env.SLACK_BOT_TOKEN))) return false;
44
+ if (slack?.mode === "http") return hasConfiguredAccountValue(slack.signingSecret);
45
+ return hasConfiguredAccountValue(slack?.appToken) || hasConfiguredAccountValue(process.env.SLACK_APP_TOKEN);
46
+ } });
42
47
  const listSlackAccountIds = listAccountIds;
43
48
  const resolveDefaultSlackAccountId = resolveDefaultAccountId;
44
49
  function resolveSlackAccountConfig(cfg, accountId) {
@@ -0,0 +1,2 @@
1
+ import { a as resolveSlackAccount } from "./accounts-Cbw3i3Sa.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
3
  import { i as parseSlackBlocksInput } from "./thread-ts-As_dcNbD.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-B5HGOzX3.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-D3pvtood.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-CpywQR3D.js");
31
+ slackActionsRuntimePromise ??= import("./actions.runtime-3XZA8-ot.js");
32
32
  return slackActionsRuntimePromise;
33
33
  }
34
34
  function loadSlackAccountsRuntime() {
35
- slackAccountsRuntimePromise ??= import("./accounts.runtime-BhbEu1ZK.js");
35
+ slackAccountsRuntimePromise ??= import("./accounts.runtime-z3fshUeC.js");
36
36
  return slackAccountsRuntimePromise;
37
37
  }
38
38
  function createLazySlackAction(key) {
@@ -0,0 +1,2 @@
1
+ import { t as handleSlackAction } from "./action-runtime-DgzkekLM.js";
2
+ export { handleSlackAction };
@@ -1,8 +1,8 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-CiIaOW0V.js";
2
- import { a as resolveSlackAccount, d as resolveSlackBotToken } from "./accounts-yk5K3wQU.js";
2
+ import { a as resolveSlackAccount, d as resolveSlackBotToken } from "./accounts-Cbw3i3Sa.js";
3
3
  import { a as validateSlackBlocksArray, o as SLACK_TEXT_LIMIT, s as truncateSlackText } from "./thread-ts-As_dcNbD.js";
4
- import { a as getSlackWriteClient, r as createSlackWebClient } from "./client-C_IaJbi5.js";
5
- import { c as buildSlackBlocksFallbackText, t as sendMessageSlack } from "./send-CxXFbqN1.js";
4
+ import { a as getSlackWriteClient, r as createSlackWebClient } from "./client-Dr7pteMR.js";
5
+ import { c as buildSlackBlocksFallbackText, t as sendMessageSlack } from "./send-Br_H5f6H.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-BCRbHv1Q.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-vFq9T_Kd.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-yk5K3wQU.js";
2
- import { t as inspectSlackAccount } from "./account-inspect-BJyQLSkN.js";
1
+ import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId, l as resolveSlackReplyToMode, n as listSlackAccountIds, r as mergeSlackAccountConfig, t as listEnabledSlackAccounts } from "./accounts-Cbw3i3Sa.js";
2
+ import { t as inspectSlackAccount } from "./account-inspect-uMPQ6wIu.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-DoFtZGpw.js";
6
- import { n as resolveSlackGroupRequireMention, r as resolveSlackGroupToolPolicy } from "./reply-blocks-BFaJ_ejG.js";
7
- import { n as buildSlackPresentationBlocks, t as buildSlackInteractiveBlocks } from "./blocks-render-BAVfd6r0.js";
5
+ import { i as resolveSlackChannelType, n as buildSlackThreadingToolContext, o as resolveSlackAutoThreadId, r as __resetSlackChannelTypeCacheForTest, t as slackPlugin } from "./channel-D9Wzqu3W.js";
6
+ import { n as resolveSlackGroupRequireMention, r as resolveSlackGroupToolPolicy } from "./reply-blocks-DgUdywKU.js";
7
+ import { n as buildSlackPresentationBlocks, t as buildSlackInteractiveBlocks } from "./blocks-render-ziYgM0qF.js";
8
8
  import { a as validateSlackBlocksArray, i as parseSlackBlocksInput, r as SLACK_MAX_BLOCKS } from "./thread-ts-As_dcNbD.js";
9
- import { n as extractSlackToolSend, r as listSlackMessageActions } from "./message-tool-api-C7gc7goF.js";
10
- import { n as isSlackInteractiveRepliesEnabled, r as parseSlackOptionsLine, t as compileSlackInteractiveReplies } from "./interactive-replies-BSg5hXhj.js";
11
- 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-C_IaJbi5.js";
9
+ import { n as extractSlackToolSend, r as listSlackMessageActions } from "./message-tool-api-DRSTJhP8.js";
10
+ import { n as isSlackInteractiveRepliesEnabled, r as parseSlackOptionsLine, t as compileSlackInteractiveReplies } from "./interactive-replies-B1wwXeVn.js";
11
+ 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-Dr7pteMR.js";
12
12
  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-nwXs_eCP.js";
13
- import { t as slackSetupPlugin } from "./channel.setup-BDL4qn9U.js";
14
- import { a as recordSlackThreadParticipation, n as clearSlackThreadParticipationCache, r as hasSlackThreadParticipation } from "./send-CxXFbqN1.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-BCRbHv1Q.js";
16
- import { n as listSlackDirectoryGroupsFromConfig, r as listSlackDirectoryPeersFromConfig } from "./directory-config-CMvFiswf.js";
13
+ import { t as slackSetupPlugin } from "./channel.setup-C2_IZ9It.js";
14
+ import { a as recordSlackThreadParticipation, n as clearSlackThreadParticipationCache, r as hasSlackThreadParticipation } from "./send-Br_H5f6H.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-vFq9T_Kd.js";
16
+ import { n as listSlackDirectoryGroupsFromConfig, r as listSlackDirectoryPeersFromConfig } from "./directory-config-qDXRTCcs.js";
17
17
  import { n as registerSlackHttpHandler, r as normalizeSlackWebhookPath, t as handleSlackHttpRequest } from "./registry-D2cWOLZV.js";
18
- import { t as probeSlack } from "./probe-FL4sUJsH.js";
18
+ import { t as probeSlack } from "./probe-DDef8MfR.js";
19
19
  import { t as collectSlackSecurityAuditFindings } from "./security-audit-BJzADAw3.js";
20
- import { n as resolveSlackRuntimeGroupPolicy } from "./provider-3Y7c15_J.js";
20
+ import { n as resolveSlackRuntimeGroupPolicy } from "./provider-C7uiI7hL.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 };
@@ -1,10 +1,10 @@
1
- import { c as normalizeSlackApproverId, s as isSlackExecApprovalClientEnabled, t as resolveSlackReplyBlocks, u as shouldHandleSlackExecApprovalRequest } from "./reply-blocks-BFaJ_ejG.js";
1
+ import { c as normalizeSlackApproverId, s as isSlackExecApprovalClientEnabled, t as resolveSlackReplyBlocks, u as shouldHandleSlackExecApprovalRequest } from "./reply-blocks-DgUdywKU.js";
2
2
  import { s as truncateSlackText } from "./thread-ts-As_dcNbD.js";
3
- import { t as sendMessageSlack } from "./send-CxXFbqN1.js";
3
+ import { t as sendMessageSlack } from "./send-Br_H5f6H.js";
4
4
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  import { buildChannelApprovalNativeTargetKey } from "openclaw/plugin-sdk/approval-native-runtime";
6
6
  import { logError } from "openclaw/plugin-sdk/logging-core";
7
- import { buildApprovalInteractiveReplyFromActionDescriptors } from "openclaw/plugin-sdk/approval-reply-runtime";
7
+ import { buildApprovalPresentationFromActionDescriptors } from "openclaw/plugin-sdk/approval-reply-runtime";
8
8
  import { createChannelApprovalNativeRuntimeAdapter } from "openclaw/plugin-sdk/approval-handler-runtime";
9
9
  //#region extensions/slack/src/approval-handler.runtime.ts
10
10
  const SLACK_CONTEXT_ELEMENTS_MAX = 10;
@@ -77,7 +77,7 @@ function buildSlackPendingApprovalBlocks(view) {
77
77
  const metadataElements = buildSlackMetadataContextElements(view.metadata);
78
78
  const interactiveBlocks = resolveSlackReplyBlocks({
79
79
  text: "",
80
- interactive: buildApprovalInteractiveReplyFromActionDescriptors(view.actions)
80
+ presentation: buildApprovalPresentationFromActionDescriptors(view.actions)
81
81
  }) ?? [];
82
82
  return [
83
83
  {
@@ -1,6 +1,6 @@
1
1
  import { s as truncateSlackText } from "./thread-ts-As_dcNbD.js";
2
2
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
3
- import { presentationToInteractiveControlsReply, reduceInteractiveReply } from "openclaw/plugin-sdk/interactive-runtime";
3
+ import { reduceInteractiveReply } from "openclaw/plugin-sdk/interactive-runtime";
4
4
  //#region extensions/slack/src/reply-action-ids.ts
5
5
  const SLACK_REPLY_BUTTON_ACTION_ID = "openclaw:reply_button";
6
6
  const SLACK_REPLY_SELECT_ACTION_ID = "openclaw:reply_select";
@@ -35,6 +35,7 @@ function readSlackOpenClawBlockIndex(blockId, prefix) {
35
35
  const value = Number.parseInt(blockId.slice(prefix.length), 10);
36
36
  return Number.isSafeInteger(value) && value > 0 ? value : void 0;
37
37
  }
38
+ /** Resolve existing OpenClaw Block Kit indexes so appended controls keep stable unique IDs. */
38
39
  function resolveSlackInteractiveBlockOffsets(blocks) {
39
40
  let buttonIndexOffset = 0;
40
41
  let selectIndexOffset = 0;
@@ -49,6 +50,9 @@ function resolveSlackInteractiveBlockOffsets(blocks) {
49
50
  selectIndexOffset
50
51
  };
51
52
  }
53
+ /**
54
+ * @deprecated Use buildSlackPresentationBlocks with MessagePresentation.
55
+ */
52
56
  function buildSlackInteractiveBlocks(interactive, options = {}) {
53
57
  return reduceInteractiveReply(interactive, {
54
58
  blocks: [],
@@ -120,6 +124,7 @@ function buildSlackInteractiveBlocks(interactive, options = {}) {
120
124
  return state;
121
125
  }).blocks;
122
126
  }
127
+ /** Render portable presentation blocks as Slack Block Kit blocks. */
123
128
  function buildSlackPresentationBlocks(presentation, options = {}) {
124
129
  if (!presentation) return [];
125
130
  const blocks = [];
@@ -153,9 +158,75 @@ function buildSlackPresentationBlocks(presentation, options = {}) {
153
158
  }
154
159
  if (block.type === "divider") blocks.push({ type: "divider" });
155
160
  }
156
- const interactive = presentationToInteractiveControlsReply(presentation);
157
- blocks.push(...buildSlackInteractiveBlocks(interactive, options));
161
+ let buttonIndex = options.buttonIndexOffset ?? 0;
162
+ let selectIndex = options.selectIndexOffset ?? 0;
163
+ for (const block of presentation.blocks) {
164
+ if (block.type === "buttons") {
165
+ const rendered = buildSlackPresentationButtonBlock(block, buttonIndex + 1);
166
+ if (rendered) {
167
+ buttonIndex += 1;
168
+ blocks.push(rendered);
169
+ }
170
+ continue;
171
+ }
172
+ if (block.type === "select") {
173
+ const rendered = buildSlackPresentationSelectBlock(block, selectIndex + 1);
174
+ if (rendered) {
175
+ selectIndex += 1;
176
+ blocks.push(rendered);
177
+ }
178
+ }
179
+ }
158
180
  return blocks;
159
181
  }
182
+ function buildSlackPresentationButtonBlock(block, buttonIndex) {
183
+ const elements = block.buttons.flatMap((button, choiceIndex) => {
184
+ const value = button.value && isWithinSlackLimit(button.value, SLACK_BUTTON_VALUE_MAX) ? button.value : void 0;
185
+ const url = button.url && isWithinSlackLimit(button.url, SLACK_BUTTON_URL_MAX) ? button.url : void 0;
186
+ if (!value && !url) return [];
187
+ const style = resolveSlackButtonStyle(button.style);
188
+ return [{
189
+ type: "button",
190
+ action_id: buildSlackReplyButtonActionId(buttonIndex, choiceIndex),
191
+ text: {
192
+ type: "plain_text",
193
+ text: truncateSlackText(button.label, SLACK_PLAIN_TEXT_MAX),
194
+ emoji: true
195
+ },
196
+ ...value ? { value } : {},
197
+ ...url ? { url } : {},
198
+ ...style ? { style } : {}
199
+ }];
200
+ }).slice(0, SLACK_ACTION_BLOCK_ELEMENTS_MAX);
201
+ return elements.length > 0 ? {
202
+ type: "actions",
203
+ block_id: `openclaw_reply_buttons_${buttonIndex}`,
204
+ elements
205
+ } : void 0;
206
+ }
207
+ function buildSlackPresentationSelectBlock(block, selectIndex) {
208
+ const options = block.options.filter((option) => isWithinSlackLimit(option.value, SLACK_OPTION_VALUE_MAX)).slice(0, SLACK_STATIC_SELECT_OPTIONS_MAX);
209
+ return options.length > 0 ? {
210
+ type: "actions",
211
+ block_id: `openclaw_reply_select_${selectIndex}`,
212
+ elements: [{
213
+ type: "static_select",
214
+ action_id: buildSlackReplySelectActionId(selectIndex),
215
+ placeholder: {
216
+ type: "plain_text",
217
+ text: truncateSlackText(normalizeOptionalString(block.placeholder) ?? "Choose an option", SLACK_PLAIN_TEXT_MAX),
218
+ emoji: true
219
+ },
220
+ options: options.map((option) => ({
221
+ text: {
222
+ type: "plain_text",
223
+ text: truncateSlackText(option.label, SLACK_PLAIN_TEXT_MAX),
224
+ emoji: true
225
+ },
226
+ value: option.value
227
+ }))
228
+ }]
229
+ } : void 0;
230
+ }
160
231
  //#endregion
161
232
  export { SLACK_REPLY_SELECT_ACTION_ID as a, SLACK_REPLY_BUTTON_ACTION_ID as i, buildSlackPresentationBlocks as n, resolveSlackInteractiveBlockOffsets as r, buildSlackInteractiveBlocks as t };
@@ -1,16 +1,16 @@
1
- import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId, l as resolveSlackReplyToMode, n as listSlackAccountIds, o as resolveSlackAccountAllowFrom } from "./accounts-yk5K3wQU.js";
1
+ import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId, l as resolveSlackReplyToMode, n as listSlackAccountIds, o as resolveSlackAccountAllowFrom } from "./accounts-Cbw3i3Sa.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 getSlackExecApprovalApprovers, d as shouldSuppressLocalSlackExecApprovalPrompt, i as isSlackApprovalAuthorizedSender, l as resolveSlackExecApprovalTarget, n as resolveSlackGroupRequireMention, o as isSlackExecApprovalAuthorizedSender, r as resolveSlackGroupToolPolicy, s as isSlackExecApprovalClientEnabled, t as resolveSlackReplyBlocks, u as shouldHandleSlackExecApprovalRequest } from "./reply-blocks-BFaJ_ejG.js";
5
- import { n as buildSlackPresentationBlocks, r as resolveSlackInteractiveBlockOffsets, t as buildSlackInteractiveBlocks } from "./blocks-render-BAVfd6r0.js";
4
+ import { a as getSlackExecApprovalApprovers, d as shouldSuppressLocalSlackExecApprovalPrompt, i as isSlackApprovalAuthorizedSender, l as resolveSlackExecApprovalTarget, n as resolveSlackGroupRequireMention, o as isSlackExecApprovalAuthorizedSender, r as resolveSlackGroupToolPolicy, s as isSlackExecApprovalClientEnabled, t as resolveSlackReplyBlocks, u as shouldHandleSlackExecApprovalRequest } from "./reply-blocks-DgUdywKU.js";
5
+ import { n as buildSlackPresentationBlocks, r as resolveSlackInteractiveBlockOffsets, t as buildSlackInteractiveBlocks } from "./blocks-render-ziYgM0qF.js";
6
6
  import { n as resolveSlackThreadTsValue, o as SLACK_TEXT_LIMIT, t as normalizeSlackThreadTsCandidate } from "./thread-ts-As_dcNbD.js";
7
- import { n as extractSlackToolSend, t as describeSlackMessageTool } from "./message-tool-api-C7gc7goF.js";
8
- import { n as isSlackInteractiveRepliesEnabled, t as compileSlackInteractiveReplies } from "./interactive-replies-BSg5hXhj.js";
9
- import { d as PAIRING_APPROVED_MESSAGE, m as resolveConfiguredFromRequiredCredentialStatuses, p as projectCredentialSnapshotFields, r as createSlackWebClient, u as DEFAULT_ACCOUNT_ID } from "./client-C_IaJbi5.js";
7
+ import { n as extractSlackToolSend, t as describeSlackMessageTool } from "./message-tool-api-DRSTJhP8.js";
8
+ import { n as isSlackInteractiveRepliesEnabled, t as compileSlackInteractiveReplies } from "./interactive-replies-B1wwXeVn.js";
9
+ import { d as PAIRING_APPROVED_MESSAGE, m as resolveConfiguredFromRequiredCredentialStatuses, p as projectCredentialSnapshotFields, r as createSlackWebClient, u as DEFAULT_ACCOUNT_ID } from "./client-Dr7pteMR.js";
10
10
  import { r as normalizeAllowListLower } from "./allow-list-nwXs_eCP.js";
11
11
  import { t as getOptionalSlackRuntime } from "./runtime-DQxkf7k2.js";
12
- import { i as slackSecurityAdapter, n as isSlackPluginAccountConfigured, r as slackConfigAdapter, t as createSlackPluginBase } from "./shared-BEabCPK3.js";
13
- import { i as SLACK_CHANNEL, n as createSlackSetupWizardProxy, r as slackSetupAdapter } from "./setup-core-B7pou7oe.js";
12
+ import { i as slackSecurityAdapter, n as isSlackPluginAccountConfigured, r as slackConfigAdapter, t as createSlackPluginBase } from "./shared-DdgQfBV9.js";
13
+ import { i as SLACK_CHANNEL, n as createSlackSetupWizardProxy, r as slackSetupAdapter } from "./setup-core-BRD65LS_.js";
14
14
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
15
15
  import { adaptScopedAccountAccessor } from "openclaw/plugin-sdk/channel-config-helpers";
16
16
  import { buildOutboundBaseSessionKey } from "openclaw/plugin-sdk/routing";
@@ -173,7 +173,7 @@ const slackApprovalCapability = createApproverRestrictedNativeApprovalCapability
173
173
  accountId,
174
174
  request
175
175
  }),
176
- load: async () => (await import("./approval-handler.runtime-DXrdRbkT.js")).slackApprovalNativeRuntime
176
+ load: async () => (await import("./approval-handler.runtime-C_hfvcRd.js")).slackApprovalNativeRuntime
177
177
  })
178
178
  });
179
179
  splitChannelApprovalCapability(slackApprovalCapability);
@@ -340,7 +340,7 @@ async function handleSlackMessageAction(params) {
340
340
  //#region extensions/slack/src/channel-actions.ts
341
341
  let slackActionRuntimePromise$1;
342
342
  async function loadSlackActionRuntime$1() {
343
- slackActionRuntimePromise$1 ??= import("./action-runtime.runtime-BzrPV3EA.js");
343
+ slackActionRuntimePromise$1 ??= import("./action-runtime.runtime-CGEyxfMu.js");
344
344
  return await slackActionRuntimePromise$1;
345
345
  }
346
346
  function resolveSlackActionContext(params) {
@@ -468,9 +468,9 @@ const EXTENSION_SHARED_MODULE_ID = "openclaw/plugin-sdk/extension-shared";
468
468
  const TARGET_RESOLVER_RUNTIME_MODULE_ID = "openclaw/plugin-sdk/target-resolver-runtime";
469
469
  const loadExtensionSharedSdk = createLazyRuntimeModule(() => import(EXTENSION_SHARED_MODULE_ID));
470
470
  const loadTargetResolverRuntimeSdk = createLazyRuntimeModule(() => import(TARGET_RESOLVER_RUNTIME_MODULE_ID));
471
- const loadSlackSetupSurfaceModule = createLazyRuntimeModule(() => import("./setup-surface-CJS-L7PA.js"));
472
- const loadSlackScopesModule = createLazyRuntimeModule(() => import("./scopes-Bvg_ZzqZ.js"));
473
- const loadSlackOutboundAdapterModule = createLazyRuntimeModule(() => import("./outbound-adapter-CHm6e-0Q.js").then((n) => n.t));
471
+ const loadSlackSetupSurfaceModule = createLazyRuntimeModule(() => import("./setup-surface-DpNyddrJ.js"));
472
+ const loadSlackScopesModule = createLazyRuntimeModule(() => import("./scopes-vRHcdO0m.js"));
473
+ const loadSlackOutboundAdapterModule = createLazyRuntimeModule(() => import("./outbound-adapter-Dcy9jZv1.js").then((n) => n.t));
474
474
  async function resolveSlackHandleAction() {
475
475
  return getOptionalSlackRuntime()?.channel?.slack?.handleSlackAction ?? (await loadSlackActionRuntime()).handleSlackAction;
476
476
  }
@@ -490,27 +490,27 @@ let slackSendRuntimePromise;
490
490
  let slackProbeModulePromise;
491
491
  let slackMonitorModulePromise;
492
492
  let slackDirectoryLiveModulePromise;
493
- const loadSlackDirectoryConfigModule = createLazyRuntimeModule(() => import("./directory-config-CMvFiswf.js").then((n) => n.t));
494
- const loadSlackResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels-B_eKaOkE.js").then((n) => n.n));
495
- const loadSlackResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-BzBAJwvq.js").then((n) => n.n));
493
+ const loadSlackDirectoryConfigModule = createLazyRuntimeModule(() => import("./directory-config-qDXRTCcs.js").then((n) => n.t));
494
+ const loadSlackResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels-gx65A1PR.js").then((n) => n.n));
495
+ const loadSlackResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-OknHaiRY.js").then((n) => n.n));
496
496
  async function loadSlackActionRuntime() {
497
- slackActionRuntimePromise ??= import("./action-runtime.runtime-BzrPV3EA.js");
497
+ slackActionRuntimePromise ??= import("./action-runtime.runtime-CGEyxfMu.js");
498
498
  return await slackActionRuntimePromise;
499
499
  }
500
500
  async function loadSlackSendRuntime() {
501
- slackSendRuntimePromise ??= import("./send.runtime-CDG5AgU3.js");
501
+ slackSendRuntimePromise ??= import("./send.runtime-Cj0cqt6C.js");
502
502
  return await slackSendRuntimePromise;
503
503
  }
504
504
  async function loadSlackProbeModule() {
505
- slackProbeModulePromise ??= import("./probe-FL4sUJsH.js").then((n) => n.n);
505
+ slackProbeModulePromise ??= import("./probe-DDef8MfR.js").then((n) => n.n);
506
506
  return await slackProbeModulePromise;
507
507
  }
508
508
  async function loadSlackMonitorModule() {
509
- slackMonitorModulePromise ??= import("./monitor-Djnd8pGL.js").then((n) => n.t);
509
+ slackMonitorModulePromise ??= import("./monitor-beou_Rl6.js").then((n) => n.t);
510
510
  return await slackMonitorModulePromise;
511
511
  }
512
512
  async function loadSlackDirectoryLiveModule() {
513
- slackDirectoryLiveModulePromise ??= import("./directory-live-CZPzpQZF.js").then((n) => n.t);
513
+ slackDirectoryLiveModulePromise ??= import("./directory-live-BnN4Zawp.js").then((n) => n.t);
514
514
  return await slackDirectoryLiveModulePromise;
515
515
  }
516
516
  async function resolveSlackSendContext(params) {
@@ -1,2 +1,2 @@
1
- import { t as SlackChannelConfigSchema } from "./config-schema-CNRousxw.js";
1
+ import { t as SlackChannelConfigSchema } from "./config-schema-C8tW0Db0.js";
2
2
  export { SlackChannelConfigSchema };
@@ -1,2 +1,2 @@
1
- import { t as slackPlugin } from "./channel-DoFtZGpw.js";
1
+ import { t as slackPlugin } from "./channel-D9Wzqu3W.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-yk5K3wQU.js";
2
- import { a as describeSlackSetupAccount, i as SLACK_CHANNEL, n as createSlackSetupWizardProxy, o as isSlackSetupAccountConfigured, r as slackSetupAdapter } from "./setup-core-B7pou7oe.js";
3
- import { t as SlackChannelConfigSchema } from "./config-schema-CNRousxw.js";
1
+ import { a as resolveSlackAccount, c as resolveSlackConfigAccessorAccount, i as resolveDefaultSlackAccountId, n as listSlackAccountIds } from "./accounts-Cbw3i3Sa.js";
2
+ import { a as describeSlackSetupAccount, i as SLACK_CHANNEL, n as createSlackSetupWizardProxy, o as isSlackSetupAccountConfigured, r as slackSetupAdapter } from "./setup-core-BRD65LS_.js";
3
+ import { t as SlackChannelConfigSchema } from "./config-schema-C8tW0Db0.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-CJS-L7PA.js")).slackSetupWizard }));
7
+ const slackSetupWizard = createSlackSetupWizardProxy(async () => ({ slackSetupWizard: (await import("./setup-surface-DpNyddrJ.js")).slackSetupWizard }));
8
8
  const slackSetupConfigAdapter = createScopedChannelConfigAdapter({
9
9
  sectionKey: SLACK_CHANNEL,
10
10
  listAccountIds: listSlackAccountIds,
@@ -4,7 +4,7 @@ import { PAIRING_APPROVED_MESSAGE, projectCredentialSnapshotFields, resolveConfi
4
4
  import { createHash } from "node:crypto";
5
5
  import { WebClient } from "@slack/web-api";
6
6
  import { HttpsProxyAgent } from "https-proxy-agent";
7
- import { resolveEnvHttpProxyUrl } from "openclaw/plugin-sdk/fetch-runtime";
7
+ import { resolveActiveManagedProxyTlsOptions, resolveEnvHttpProxyUrl } from "openclaw/plugin-sdk/fetch-runtime";
8
8
  //#region extensions/slack/src/channel-api.ts
9
9
  const SLACK_CHANNEL_META = {
10
10
  id: "slack",
@@ -65,8 +65,10 @@ function resolveSlackProxyAgent() {
65
65
  const proxyUrl = resolveEnvHttpProxyUrl("https");
66
66
  if (!proxyUrl) return;
67
67
  if (isHostExcludedByNoProxy("slack.com")) return;
68
+ const proxyTls = resolveActiveManagedProxyTlsOptions({ proxyUrl });
69
+ const proxyAgentOptions = proxyTls?.ca ? { ca: proxyTls.ca } : void 0;
68
70
  try {
69
- return new HttpsProxyAgent(proxyUrl);
71
+ return new HttpsProxyAgent(proxyUrl, proxyAgentOptions);
70
72
  } catch {
71
73
  return;
72
74
  }
@@ -154,6 +154,10 @@ const SlackChannelConfigSchema = buildChannelConfigSchema(SlackConfigSchema, { u
154
154
  label: "Slack Progress Max Lines",
155
155
  help: "Maximum number of compact progress lines to keep below the draft label (default: 8)."
156
156
  },
157
+ "streaming.progress.maxLineChars": {
158
+ label: "Slack Progress Max Line Chars",
159
+ help: "Maximum characters per compact progress line before truncation (default: 120). Prose cuts at word boundaries; commands and paths keep useful suffixes."
160
+ },
157
161
  "streaming.progress.render": {
158
162
  label: "Slack Progress Renderer",
159
163
  help: "Progress draft renderer: \"text\" uses one portable text body; \"rich\" renders structured Slack Block Kit fields with the same text fallback."
@@ -1,5 +1,5 @@
1
1
  import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-B8QIWMs1.js";
2
2
  import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-0TL3L5Kb.js";
3
- import { n as listSlackDirectoryGroupsFromConfig, r as listSlackDirectoryPeersFromConfig } from "./directory-config-CMvFiswf.js";
3
+ import { n as listSlackDirectoryGroupsFromConfig, r as listSlackDirectoryPeersFromConfig } from "./directory-config-qDXRTCcs.js";
4
4
  import { t as collectSlackSecurityAuditFindings } from "./security-audit-BJzADAw3.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-yk5K3wQU.js";
2
+ import { i as resolveDefaultSlackAccountId, o as resolveSlackAccountAllowFrom, r as mergeSlackAccountConfig } from "./accounts-Cbw3i3Sa.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-CMvFiswf.js";
1
+ import { n as listSlackDirectoryGroupsFromConfig, r as listSlackDirectoryPeersFromConfig } from "./directory-config-qDXRTCcs.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-yk5K3wQU.js";
3
- import { r as createSlackWebClient } from "./client-C_IaJbi5.js";
2
+ import { a as resolveSlackAccount } from "./accounts-Cbw3i3Sa.js";
3
+ import { r as createSlackWebClient } from "./client-Dr7pteMR.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,2 +1,2 @@
1
- import { t as registerSlackPluginHttpRoutes } from "./plugin-routes-CRnfsTTX.js";
1
+ import { t as registerSlackPluginHttpRoutes } from "./plugin-routes-hrKOqBIn.js";
2
2
  export { registerSlackPluginHttpRoutes };
@@ -1,3 +1,3 @@
1
- import { t as prepareSlackMessage } from "./prepare-Or_6_XXl.js";
2
- import { t as createInboundSlackTestContext } from "./prepare.test-helpers-CU1qB54Q.js";
1
+ import { t as prepareSlackMessage } from "./prepare-BjlcuiLr.js";
2
+ import { t as createInboundSlackTestContext } from "./prepare.test-helpers-D807wdul.js";
3
3
  export { createInboundSlackTestContext, prepareSlackMessage };
@@ -1,4 +1,4 @@
1
- import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId } from "./accounts-yk5K3wQU.js";
1
+ import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId } from "./accounts-Cbw3i3Sa.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;
@@ -97,12 +97,18 @@ function resolveInteractiveRepliesFromCapabilities(capabilities) {
97
97
  if (typeof capabilities === "object") return capabilities.interactiveReplies === true;
98
98
  return false;
99
99
  }
100
+ /**
101
+ * @deprecated Only needed for legacy Slack reply directives. New producers should emit presentation payloads.
102
+ */
100
103
  function isSlackInteractiveRepliesEnabled(params) {
101
104
  return resolveInteractiveRepliesFromCapabilities(resolveSlackAccount({
102
105
  cfg: params.cfg,
103
106
  accountId: params.accountId ?? resolveDefaultSlackAccountId(params.cfg)
104
107
  }).config.capabilities);
105
108
  }
109
+ /**
110
+ * @deprecated Slack reply directives are legacy. New producers should emit presentation payloads.
111
+ */
106
112
  function compileSlackInteractiveReplies(payload) {
107
113
  const text = payload.text;
108
114
  if (!text) return payload;
@@ -141,6 +147,9 @@ function compileSlackInteractiveReplies(payload) {
141
147
  interactive: { blocks: [...payload.interactive?.blocks ?? [], ...generatedBlocks] }
142
148
  };
143
149
  }
150
+ /**
151
+ * @deprecated Legacy Slack directive fallback. New producers should emit presentation payloads.
152
+ */
144
153
  function parseSlackOptionsLine(payload) {
145
154
  const text = payload.text;
146
155
  if (!text || payload.interactive?.blocks?.length || hasSlackBlocks(payload)) return payload;
@@ -1,2 +1,2 @@
1
- import { n as isSlackInteractiveRepliesEnabled, t as compileSlackInteractiveReplies } from "./interactive-replies-BSg5hXhj.js";
1
+ import { n as isSlackInteractiveRepliesEnabled, t as compileSlackInteractiveReplies } from "./interactive-replies-B1wwXeVn.js";
2
2
  export { compileSlackInteractiveReplies, isSlackInteractiveRepliesEnabled };
@@ -1,5 +1,5 @@
1
- import { a as resolveSlackAccount, t as listEnabledSlackAccounts } from "./accounts-yk5K3wQU.js";
2
- import { n as isSlackInteractiveRepliesEnabled } from "./interactive-replies-BSg5hXhj.js";
1
+ import { a as resolveSlackAccount, t as listEnabledSlackAccounts } from "./accounts-Cbw3i3Sa.js";
2
+ import { n as isSlackInteractiveRepliesEnabled } from "./interactive-replies-B1wwXeVn.js";
3
3
  import { createActionGate } from "openclaw/plugin-sdk/channel-actions";
4
4
  import { extractToolSend } from "openclaw/plugin-sdk/tool-send";
5
5
  import { Type } from "typebox";
@@ -1,2 +1,2 @@
1
- import { t as describeSlackMessageTool } from "./message-tool-api-C7gc7goF.js";
1
+ import { t as describeSlackMessageTool } from "./message-tool-api-DRSTJhP8.js";
2
2
  export { describeSlackMessageTool as describeMessageTool };
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-CiIaOW0V.js";
2
- import { D as buildSlackSlashCommandMatcher, p as isSlackChannelAllowedByPolicy } from "./room-context-Cd8jFpS-.js";
3
- import { t as monitorSlackProvider } from "./provider-3Y7c15_J.js";
4
- import { o as resolveSlackThreadTs } from "./replies-Fg1T3ZzU.js";
2
+ import { h as isSlackChannelAllowedByPolicy, k as buildSlackSlashCommandMatcher } from "./room-context-BI26wVBb.js";
3
+ import { t as monitorSlackProvider } from "./provider-C7uiI7hL.js";
4
+ import { o as resolveSlackThreadTs } from "./replies-ClYRn89v.js";
5
5
  //#region extensions/slack/src/monitor.ts
6
6
  var monitor_exports = /* @__PURE__ */ __exportAll({
7
7
  buildSlackSlashCommandMatcher: () => buildSlackSlashCommandMatcher,
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-CiIaOW0V.js";
2
- import { n as buildSlackPresentationBlocks, r as resolveSlackInteractiveBlockOffsets, t as buildSlackInteractiveBlocks } from "./blocks-render-BAVfd6r0.js";
2
+ import { n as buildSlackPresentationBlocks, r as resolveSlackInteractiveBlockOffsets, t as buildSlackInteractiveBlocks } from "./blocks-render-ziYgM0qF.js";
3
3
  import { i as parseSlackBlocksInput, n as resolveSlackThreadTsValue, o as SLACK_TEXT_LIMIT } from "./thread-ts-As_dcNbD.js";
4
- import { t as compileSlackInteractiveReplies } from "./interactive-replies-BSg5hXhj.js";
4
+ import { t as compileSlackInteractiveReplies } from "./interactive-replies-B1wwXeVn.js";
5
5
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
6
6
  import { attachChannelToResult, createAttachedChannelResultAdapter } from "openclaw/plugin-sdk/channel-send-result";
7
7
  import { resolveOutboundSendDep } from "openclaw/plugin-sdk/outbound-send-deps";
@@ -12,7 +12,7 @@ var outbound_adapter_exports = /* @__PURE__ */ __exportAll({ slackOutbound: () =
12
12
  const SLACK_MAX_BLOCKS = 50;
13
13
  let slackSendRuntimePromise;
14
14
  async function loadSlackSendRuntime() {
15
- slackSendRuntimePromise ??= import("./send.runtime-CDG5AgU3.js");
15
+ slackSendRuntimePromise ??= import("./send.runtime-Cj0cqt6C.js");
16
16
  return await slackSendRuntimePromise;
17
17
  }
18
18
  function resolveRenderedInteractiveBlocks(interactive, previousBlocks) {
@@ -75,18 +75,38 @@ const slackOutbound = {
75
75
  buttons: true,
76
76
  selects: true,
77
77
  context: true,
78
- divider: true
78
+ divider: true,
79
+ limits: {
80
+ actions: {
81
+ maxActionsPerRow: 25,
82
+ maxLabelLength: 75,
83
+ maxValueBytes: 2e3,
84
+ supportsStyles: true
85
+ },
86
+ selects: {
87
+ maxOptions: 100,
88
+ maxLabelLength: 75,
89
+ maxValueBytes: 150
90
+ },
91
+ text: {
92
+ maxLength: SLACK_TEXT_LIMIT,
93
+ encoding: "characters",
94
+ markdownDialect: "slack-mrkdwn",
95
+ supportsEdit: true
96
+ }
97
+ }
79
98
  },
80
99
  renderPresentation: ({ payload, presentation }) => {
81
100
  const slackData = payload.channelData?.slack;
82
- const nativeBlocks = parseSlackBlocksInput(slackData?.blocks);
101
+ const presentationBlocks = buildSlackPresentationBlocks(presentation, resolveSlackInteractiveBlockOffsets(parseSlackBlocksInput(slackData?.blocks)));
102
+ if (presentationBlocks.length === 0) return null;
83
103
  return {
84
104
  ...payload,
85
105
  channelData: {
86
106
  ...payload.channelData,
87
107
  slack: {
88
108
  ...slackData,
89
- presentationBlocks: buildSlackPresentationBlocks(presentation, resolveSlackInteractiveBlockOffsets(nativeBlocks))
109
+ presentationBlocks
90
110
  }
91
111
  }
92
112
  };
@@ -1,2 +1,2 @@
1
- import { t as createSlackOutboundPayloadHarness } from "./outbound-payload.test-harness-C0CW7_CE.js";
1
+ import { t as createSlackOutboundPayloadHarness } from "./outbound-payload.test-harness-B8N8U_AA.js";
2
2
  export { createSlackOutboundPayloadHarness };
@@ -1,4 +1,4 @@
1
- import { n as slackOutbound } from "./outbound-adapter-CHm6e-0Q.js";
1
+ import { n as slackOutbound } from "./outbound-adapter-Dcy9jZv1.js";
2
2
  import { primeChannelOutboundSendMock } from "openclaw/plugin-sdk/channel-contract-testing";
3
3
  //#region node_modules/tinyrainbow/dist/index.js
4
4
  var b = {