@openclaw/slack 2026.7.2-beta.3 → 2026.7.2-beta.4

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 (152) hide show
  1. package/dist/account-inspect-api.js +1 -1
  2. package/dist/{account-inspect-Bvbtu3iH.js → account-inspect-jn1xLaVi.js} +2 -2
  3. package/dist/account-reply-mode-DrUXogvO.js +14 -0
  4. package/dist/{accounts-DQEbYKh9.js → accounts-BSr252c_.js} +6 -27
  5. package/dist/{accounts.runtime-BIKmJdtJ.js → accounts.runtime-CjULMLTa.js} +1 -1
  6. package/dist/{action-runtime-DqkRwO3Z.js → action-runtime-CFU52n4W.js} +7 -7
  7. package/dist/action-runtime.runtime-9-17zvKH.js +2 -0
  8. package/dist/{actions-CF0tUY5q.js → actions-D51foiwR.js} +5 -5
  9. package/dist/{actions.runtime-hCbx4RXg.js → actions.runtime-BMJwtf5C.js} +1 -1
  10. package/dist/api.js +15 -14
  11. package/dist/{approval-handler.runtime-Em8I1-8-.js → approval-handler.runtime-3b4-wxMl.js} +2 -2
  12. package/dist/{channel-4-TRi1D6.js → channel-Ds8NKvfr.js} +26 -24
  13. package/dist/channel-config-api.js +1 -1
  14. package/dist/channel-plugin-api.js +1 -1
  15. package/dist/{channel-type-Cu1yjNg2.js → channel-type-DXkUajFP.js} +3 -3
  16. package/dist/{channel.setup-CgkADtZg.js → channel.setup-DOSTEDfA.js} +6 -5
  17. package/dist/{config-schema-XjJGfwQC.js → config-schema-B4j4tCOI.js} +231 -26
  18. package/dist/{directory-config-Bv0lcUlH.js → directory-config-B08pm5ZT.js} +1 -1
  19. package/dist/directory-contract-api.js +1 -1
  20. package/dist/{directory-live-CzUIB7th.js → directory-live-DpPKzPrn.js} +2 -2
  21. package/dist/{doctor-contract-DKpe5VBr.js → doctor-contract-U6oVntbM.js} +60 -89
  22. package/dist/doctor-contract-api.js +1 -1
  23. package/dist/{group-policy-Bw-65m3V.js → group-policy-CdnQzQBI.js} +32 -5
  24. package/dist/{interactive-replies-Dm_t2R9S.js → interactive-replies-C3ffk6oN.js} +1 -1
  25. package/dist/interactive-replies-api.js +1 -1
  26. package/dist/{message-tool-api-C2pcf5du.js → message-tool-api-ByVyIVOh.js} +2 -2
  27. package/dist/message-tool-api.js +1 -1
  28. package/dist/{monitor-CNFeF30h.js → monitor-CnB_WKvF.js} +3 -3
  29. package/dist/{outbound-adapter-CVi2uok0.js → outbound-adapter-DuPz2HHt.js} +3 -3
  30. package/dist/{pipeline.runtime-CTvokbty.js → pipeline.runtime-5rRYZuX5.js} +110 -77
  31. package/dist/{policy-b_dOPDCq.js → policy-C31RYSuT.js} +1 -1
  32. package/dist/{probe-Borhn9PQ.js → probe-CVRuArHA.js} +1 -1
  33. package/dist/{provider-B-HVL5ZE.js → provider-htuIJGFD.js} +365 -200
  34. package/dist/{relay-source-Ea_P9VcO.js → relay-source-Df9EaiTF.js} +1 -1
  35. package/dist/{replies-B4bOdrYb.js → replies-Cgr2Gli4.js} +3 -3
  36. package/dist/{resolve-channels-KTc568SU.js → resolve-channels-DodP2TFx.js} +1 -1
  37. package/dist/{resolve-users-DeGJf1yp.js → resolve-users-M9eF8891.js} +1 -1
  38. package/dist/{runtime-api-BFfNpzDe.js → runtime-api-D5XYMMsf.js} +3 -2
  39. package/dist/runtime-api.js +11 -11
  40. package/dist/{scopes-lx08L56K.js → scopes-CJRpHkDC.js} +1 -1
  41. package/dist/{security-audit-CikQhBUY.js → security-audit-Cz6erklv.js} +0 -10
  42. package/dist/security-contract-api.js +1 -1
  43. package/dist/{send-KuTDky7i.js → send-BZ1tPv7-.js} +4 -4
  44. package/dist/{send.runtime-CXyxws1D.js → send.runtime-a2pilFor.js} +1 -1
  45. package/dist/{setup-core-CeiAVwQ3.js → setup-core-tPxMuFez.js} +138 -40
  46. package/dist/setup-plugin-api.js +1 -1
  47. package/dist/{setup-surface-DLA0vHXp.js → setup-surface-wV-S1dE_.js} +43 -27
  48. package/dist/{shared-C4yVB0Q-.js → shared-BfMskaMx.js} +9 -8
  49. package/dist/{slash-dispatch.runtime-BT-mMm-f.js → slash-dispatch.runtime-lfeIsXTX.js} +1 -1
  50. package/node_modules/@types/node/README.md +1 -1
  51. package/node_modules/@types/node/fs/promises.d.ts +16 -6
  52. package/node_modules/@types/node/package.json +2 -2
  53. package/node_modules/agent-base/README.md +145 -0
  54. package/node_modules/agent-base/dist/src/index.d.ts +78 -0
  55. package/node_modules/agent-base/dist/src/index.js +203 -0
  56. package/node_modules/agent-base/dist/src/index.js.map +1 -0
  57. package/node_modules/agent-base/dist/src/promisify.d.ts +4 -0
  58. package/node_modules/agent-base/dist/src/promisify.js +18 -0
  59. package/node_modules/agent-base/dist/src/promisify.js.map +1 -0
  60. package/node_modules/agent-base/package.json +64 -0
  61. package/node_modules/agent-base/src/index.ts +345 -0
  62. package/node_modules/agent-base/src/promisify.ts +33 -0
  63. package/node_modules/axios/CHANGELOG.md +197 -1
  64. package/node_modules/axios/README.md +424 -256
  65. package/node_modules/axios/dist/axios.js +589 -204
  66. package/node_modules/axios/dist/axios.min.js +3 -3
  67. package/node_modules/axios/dist/axios.min.js.map +1 -1
  68. package/node_modules/axios/dist/browser/axios.cjs +630 -185
  69. package/node_modules/axios/dist/esm/axios.js +630 -185
  70. package/node_modules/axios/dist/esm/axios.min.js +2 -2
  71. package/node_modules/axios/dist/esm/axios.min.js.map +1 -1
  72. package/node_modules/axios/dist/node/axios.cjs +949 -301
  73. package/node_modules/axios/index.d.cts +28 -5
  74. package/node_modules/axios/index.d.ts +24 -3
  75. package/node_modules/axios/lib/adapters/adapters.js +1 -1
  76. package/node_modules/axios/lib/adapters/fetch.js +223 -49
  77. package/node_modules/axios/lib/adapters/http.js +408 -193
  78. package/node_modules/axios/lib/adapters/xhr.js +3 -1
  79. package/node_modules/axios/lib/core/Axios.js +4 -2
  80. package/node_modules/axios/lib/core/AxiosError.js +13 -1
  81. package/node_modules/axios/lib/core/AxiosHeaders.js +13 -42
  82. package/node_modules/axios/lib/core/buildFullPath.js +29 -1
  83. package/node_modules/axios/lib/core/mergeConfig.js +35 -0
  84. package/node_modules/axios/lib/defaults/transitional.js +2 -0
  85. package/node_modules/axios/lib/env/data.js +1 -1
  86. package/node_modules/axios/lib/helpers/AxiosURLSearchParams.js +1 -3
  87. package/node_modules/axios/lib/helpers/Http2Sessions.js +119 -0
  88. package/node_modules/axios/lib/helpers/buildURL.js +7 -4
  89. package/node_modules/axios/lib/helpers/composeSignals.js +48 -47
  90. package/node_modules/axios/lib/helpers/cookies.js +5 -1
  91. package/node_modules/axios/lib/helpers/estimateDataURLDecodedBytes.js +16 -11
  92. package/node_modules/axios/lib/helpers/formDataToJSON.js +26 -4
  93. package/node_modules/axios/lib/helpers/formDataToStream.js +2 -2
  94. package/node_modules/axios/lib/helpers/fromDataURI.js +20 -5
  95. package/node_modules/axios/lib/helpers/progressEventReducer.js +3 -0
  96. package/node_modules/axios/lib/helpers/resolveConfig.js +26 -13
  97. package/node_modules/axios/lib/helpers/sanitizeHeaderValue.js +60 -0
  98. package/node_modules/axios/lib/helpers/shouldBypassProxy.js +33 -1
  99. package/node_modules/axios/lib/helpers/toFormData.js +48 -12
  100. package/node_modules/axios/lib/helpers/validator.js +1 -1
  101. package/node_modules/axios/lib/utils.js +105 -19
  102. package/node_modules/axios/package.json +31 -13
  103. package/node_modules/https-proxy-agent/README.md +137 -0
  104. package/node_modules/https-proxy-agent/dist/agent.d.ts +30 -0
  105. package/node_modules/https-proxy-agent/dist/agent.js +177 -0
  106. package/node_modules/https-proxy-agent/dist/agent.js.map +1 -0
  107. package/node_modules/https-proxy-agent/dist/index.d.ts +23 -0
  108. package/node_modules/https-proxy-agent/dist/index.js +14 -0
  109. package/node_modules/https-proxy-agent/dist/index.js.map +1 -0
  110. package/node_modules/https-proxy-agent/dist/parse-proxy-response.d.ts +7 -0
  111. package/node_modules/https-proxy-agent/dist/parse-proxy-response.js +66 -0
  112. package/node_modules/https-proxy-agent/dist/parse-proxy-response.js.map +1 -0
  113. package/node_modules/https-proxy-agent/package.json +56 -0
  114. package/node_modules/iconv-lite/encodings/sbcs-data.js +2 -0
  115. package/node_modules/iconv-lite/encodings/utf32.js +10 -3
  116. package/node_modules/iconv-lite/package.json +2 -2
  117. package/node_modules/iconv-lite/types/encodings.d.ts +2 -0
  118. package/node_modules/path-to-regexp/Readme.md +3 -3
  119. package/node_modules/path-to-regexp/dist/index.js +135 -158
  120. package/node_modules/path-to-regexp/dist/index.js.map +1 -1
  121. package/node_modules/path-to-regexp/package.json +2 -2
  122. package/node_modules/qs/CHANGELOG.md +11 -0
  123. package/node_modules/qs/dist/qs.js +17 -17
  124. package/node_modules/qs/lib/parse.js +19 -8
  125. package/node_modules/qs/lib/utils.js +47 -8
  126. package/node_modules/qs/package.json +6 -5
  127. package/node_modules/qs/test/parse.js +230 -0
  128. package/node_modules/qs/test/utils.js +194 -0
  129. package/node_modules/typebox/build/compile/validator.d.mts +1 -4
  130. package/node_modules/typebox/build/guard/guard.d.mts +1 -1
  131. package/node_modules/typebox/build/guard/guard.mjs +5 -2
  132. package/node_modules/typebox/build/guard/string.mjs +16 -4
  133. package/node_modules/typebox/build/schema/engine/_functions.mjs +34 -15
  134. package/node_modules/typebox/build/type/action/readonly_object.d.mts +5 -0
  135. package/node_modules/typebox/build/type/action/readonly_object.mjs +8 -0
  136. package/node_modules/typebox/build/typebox.d.mts +1 -1
  137. package/node_modules/typebox/build/typebox.mjs +1 -1
  138. package/node_modules/typebox/package.json +1 -1
  139. package/node_modules/typebox/readme.md +29 -32
  140. package/node_modules/ws/lib/receiver.js +15 -32
  141. package/node_modules/ws/lib/websocket-server.js +4 -4
  142. package/node_modules/ws/lib/websocket.js +4 -4
  143. package/node_modules/ws/package.json +5 -1
  144. package/npm-shrinkwrap.json +54 -27
  145. package/openclaw.plugin.json +1759 -1908
  146. package/package.json +92 -14
  147. package/dist/action-runtime.runtime-DEWOcFM4.js +0 -2
  148. package/dist/config-api-Df9a1B8C.js +0 -3
  149. package/node_modules/axios/dist/axios.js.map +0 -1
  150. package/node_modules/axios/dist/browser/axios.cjs.map +0 -1
  151. package/node_modules/axios/dist/esm/axios.js.map +0 -1
  152. package/node_modules/axios/dist/node/axios.cjs.map +0 -1
@@ -1,4 +1,4 @@
1
- import { c as formatUnknownError, s as SLACK_SOCKET_RECONNECT_POLICY } from "./provider-B-HVL5ZE.js";
1
+ import { c as formatUnknownError, s as SLACK_SOCKET_RECONNECT_POLICY } from "./provider-htuIJGFD.js";
2
2
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
3
3
  import { computeBackoff, sleepWithAbort, warn } from "openclaw/plugin-sdk/runtime-env";
4
4
  import { Buffer } from "node:buffer";
@@ -1,6 +1,6 @@
1
- import { C as hasSlackNativeDataBlock, D as markdownToSlackMrkdwnChunks, F as SLACK_TEXT_LIMIT, f as hasSlackReplyStructuredContent, h as resolveSlackReplyBlocks, k as buildSlackBlocksFallbackText, m as resolveSlackReplyBlockResolution, w as isSlackInvalidBlocksError, x as buildSlackNativeDataAccessibilityText } from "./group-policy-Bw-65m3V.js";
2
- import { d as chunkSlackTextAtHardLimit, r as sendMessageSlack, u as buildSlackNativeDataDeliveryPlan } from "./send-KuTDky7i.js";
3
- import { a as createSlackResponseUrlBudget, i as SlackResponseAlreadyReportedError } from "./provider-B-HVL5ZE.js";
1
+ import { C as hasSlackNativeDataBlock, D as markdownToSlackMrkdwnChunks, F as SLACK_TEXT_LIMIT, f as hasSlackReplyStructuredContent, h as resolveSlackReplyBlocks, k as buildSlackBlocksFallbackText, m as resolveSlackReplyBlockResolution, w as isSlackInvalidBlocksError, x as buildSlackNativeDataAccessibilityText } from "./group-policy-CdnQzQBI.js";
2
+ import { d as chunkSlackTextAtHardLimit, r as sendMessageSlack, u as buildSlackNativeDataDeliveryPlan } from "./send-BZ1tPv7-.js";
3
+ import { a as createSlackResponseUrlBudget, i as SlackResponseAlreadyReportedError } from "./provider-htuIJGFD.js";
4
4
  import { createReplyReferencePlanner } from "openclaw/plugin-sdk/reply-reference";
5
5
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
6
6
  import { SILENT_REPLY_TOKEN, chunkMarkdownTextWithMode, isSilentReplyText } from "openclaw/plugin-sdk/reply-chunking";
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
- import { a as createSlackLookupClient } from "./probe-Borhn9PQ.js";
2
+ import { a as createSlackLookupClient } from "./probe-CVRuArHA.js";
3
3
  import { t as collectSlackCursorPages } from "./cursor-pages-DSmTg0su.js";
4
4
  import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  import { resolveDirectoryAllowlistEntries } from "openclaw/plugin-sdk/directory-runtime";
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
- import { a as createSlackLookupClient } from "./probe-Borhn9PQ.js";
2
+ import { a as createSlackLookupClient } from "./probe-CVRuArHA.js";
3
3
  import { t as collectSlackCursorPages } from "./cursor-pages-DSmTg0su.js";
4
4
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  import { resolveDirectoryAllowlistEntries } from "openclaw/plugin-sdk/directory-runtime";
@@ -1,9 +1,10 @@
1
1
  import "./target-parsing-N6lHogYZ.js";
2
- import "./probe-Borhn9PQ.js";
3
- import "./config-api-Df9a1B8C.js";
2
+ import "./probe-CVRuArHA.js";
3
+ import "./config-schema-B4j4tCOI.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";
6
6
  import "openclaw/plugin-sdk/channel-status";
7
+ import "openclaw/plugin-sdk/channel-config-schema";
7
8
  import "openclaw/plugin-sdk/channel-plugin-common";
8
9
  import { loadOutboundMediaFromUrl } from "openclaw/plugin-sdk/outbound-media";
9
10
  export { readPositiveIntegerParam as a, withNormalizedTimestamp as c, loadOutboundMediaFromUrl as i, imageResultFromFile as n, readReactionParams as o, jsonResult as r, readStringParam as s, createActionGate$1 as t };
@@ -1,14 +1,14 @@
1
1
  import { t as registerSlackPluginHttpRoutes } from "./plugin-routes-CLp4obpN.js";
2
- import { a as resolveSlackAccount, f as resolveSlackAppToken, i as resolveDefaultSlackAccountId, n as listSlackAccountIds, p as resolveSlackBotToken, t as listEnabledSlackAccounts } from "./accounts-DQEbYKh9.js";
3
- import { n as resolveSlackGroupRequireMention, r as resolveSlackGroupToolPolicy } from "./group-policy-Bw-65m3V.js";
4
- import { t as probeSlack } from "./probe-Borhn9PQ.js";
2
+ import { a as resolveSlackAccount, d as resolveSlackAppToken, f as resolveSlackBotToken, i as resolveDefaultSlackAccountId, n as listSlackAccountIds, t as listEnabledSlackAccounts } from "./accounts-BSr252c_.js";
3
+ import { n as resolveSlackGroupRequireMention, r as resolveSlackGroupToolPolicy } from "./group-policy-CdnQzQBI.js";
4
+ import { t as probeSlack } from "./probe-CVRuArHA.js";
5
5
  import { r as setSlackRuntime } from "./runtime-JSVZSWAj.js";
6
- import { a as listSlackEmojis, c as pinSlackMessage, d as removeOwnSlackReactions, f as removeSlackReaction, h as unpinSlackMessage, i as getSlackMemberInfo, l as reactSlackMessage, m as sendSlackMessage, o as listSlackPins, r as editSlackMessage, s as listSlackReactions, t as deleteSlackMessage, u as readSlackMessages } from "./actions-CF0tUY5q.js";
7
- import { r as sendMessageSlack } from "./send-KuTDky7i.js";
8
- import { t as resolveSlackChannelAllowlist } from "./resolve-channels-KTc568SU.js";
9
- import { t as resolveSlackUserAllowlist } from "./resolve-users-DeGJf1yp.js";
10
- import { t as monitorSlackProvider } from "./provider-B-HVL5ZE.js";
11
- import { n as slackActionRuntime, t as handleSlackAction } from "./action-runtime-DqkRwO3Z.js";
12
- import { n as listSlackDirectoryGroupsLive, r as listSlackDirectoryPeersLive } from "./directory-live-CzUIB7th.js";
13
- import "./monitor-CNFeF30h.js";
6
+ import { a as listSlackEmojis, c as pinSlackMessage, d as removeOwnSlackReactions, f as removeSlackReaction, h as unpinSlackMessage, i as getSlackMemberInfo, l as reactSlackMessage, m as sendSlackMessage, o as listSlackPins, r as editSlackMessage, s as listSlackReactions, t as deleteSlackMessage, u as readSlackMessages } from "./actions-D51foiwR.js";
7
+ import { r as sendMessageSlack } from "./send-BZ1tPv7-.js";
8
+ import { t as resolveSlackChannelAllowlist } from "./resolve-channels-DodP2TFx.js";
9
+ import { t as resolveSlackUserAllowlist } from "./resolve-users-M9eF8891.js";
10
+ import { t as monitorSlackProvider } from "./provider-htuIJGFD.js";
11
+ import { n as slackActionRuntime, t as handleSlackAction } from "./action-runtime-CFU52n4W.js";
12
+ import { n as listSlackDirectoryGroupsLive, r as listSlackDirectoryPeersLive } from "./directory-live-DpPKzPrn.js";
13
+ import "./monitor-CnB_WKvF.js";
14
14
  export { deleteSlackMessage, editSlackMessage, getSlackMemberInfo, handleSlackAction, listEnabledSlackAccounts, listSlackAccountIds, listSlackDirectoryGroupsLive, listSlackDirectoryPeersLive, listSlackEmojis, listSlackPins, listSlackReactions, monitorSlackProvider, pinSlackMessage, probeSlack, reactSlackMessage, readSlackMessages, registerSlackPluginHttpRoutes, removeOwnSlackReactions, removeSlackReaction, resolveDefaultSlackAccountId, resolveSlackAccount, resolveSlackAppToken, resolveSlackBotToken, resolveSlackChannelAllowlist, resolveSlackGroupRequireMention, resolveSlackGroupToolPolicy, resolveSlackUserAllowlist, sendMessageSlack, sendSlackMessage, setSlackRuntime, slackActionRuntime, unpinSlackMessage };
@@ -1,4 +1,4 @@
1
- import { c as createSlackWebClient, r as formatSlackError } from "./probe-Borhn9PQ.js";
1
+ import { c as createSlackWebClient, r as formatSlackError } from "./probe-CVRuArHA.js";
2
2
  import { isRecord, normalizeOptionalString, normalizeStringEntries, sortUniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
3
3
  //#region extensions/slack/src/scopes.ts
4
4
  function collectScopes(value, into) {
@@ -17,16 +17,6 @@ async function collectSlackSecurityAuditFindings(params) {
17
17
  providerSetting: coerceNativeSetting(slackCfg.commands?.nativeSkills),
18
18
  globalSetting: params.cfg.commands?.nativeSkills
19
19
  }))) return findings;
20
- if (!(params.cfg.commands?.useAccessGroups !== false)) {
21
- findings.push({
22
- checkId: "channels.slack.commands.slash.useAccessGroups_off",
23
- severity: "critical",
24
- title: "Slack slash commands bypass access groups",
25
- detail: "Slack slash/native commands are enabled while commands.useAccessGroups=false; this can allow unrestricted /… command execution from channels/users you didn't explicitly authorize.",
26
- remediation: "Set commands.useAccessGroups=true (recommended)."
27
- });
28
- return findings;
29
- }
30
20
  const allowFromRaw = slackCfg.allowFrom;
31
21
  const legacyAllowFromRaw = params.account.dm?.allowFrom;
32
22
  const allowFrom = Array.isArray(allowFromRaw) ? allowFromRaw : Array.isArray(legacyAllowFromRaw) ? legacyAllowFromRaw : [];
@@ -1,2 +1,2 @@
1
- import { t as collectSlackSecurityAuditFindings } from "./security-audit-CikQhBUY.js";
1
+ import { t as collectSlackSecurityAuditFindings } from "./security-audit-Cz6erklv.js";
2
2
  export { collectSlackSecurityAuditFindings };
@@ -1,10 +1,10 @@
1
- import { a as resolveSlackAccount, l as resolveSlackOperationToken } from "./accounts-DQEbYKh9.js";
1
+ import { a as resolveSlackAccount, l as resolveSlackOperationToken } from "./accounts-BSr252c_.js";
2
2
  import { i as parseSlackTarget, t as canonicalizeSlackApiTargetId } from "./target-parsing-N6lHogYZ.js";
3
- import { A as buildSlackCompleteBlocksFallbackText, C as hasSlackNativeDataBlock, D as markdownToSlackMrkdwnChunks, E as chunkSlackMrkdwnText, F as SLACK_TEXT_LIMIT, P as SLACK_MESSAGE_TEXT_HARD_LIMIT, S as createSlackNativeDataBaseTextConsumer, T as stripSlackNativeDataBlocks, b as appendSlackNativeDataPlainTextFallback, et as validateSlackBlocksArray, i as assertSlackDirectSendAllowed, j as renderSlackBlockFallbackText, w as isSlackInvalidBlocksError, x as buildSlackNativeDataAccessibilityText, z as truncateSlackText } from "./group-policy-Bw-65m3V.js";
3
+ import { A as buildSlackCompleteBlocksFallbackText, C as hasSlackNativeDataBlock, D as markdownToSlackMrkdwnChunks, E as chunkSlackMrkdwnText, F as SLACK_TEXT_LIMIT, P as SLACK_MESSAGE_TEXT_HARD_LIMIT, S as createSlackNativeDataBaseTextConsumer, T as stripSlackNativeDataBlocks, b as appendSlackNativeDataPlainTextFallback, et as validateSlackBlocksArray, i as assertSlackDirectSendAllowed, j as renderSlackBlockFallbackText, w as isSlackInvalidBlocksError, x as buildSlackNativeDataAccessibilityText, z as truncateSlackText } from "./group-policy-CdnQzQBI.js";
4
4
  import { n as resolveSlackThreadTsValue, t as normalizeSlackThreadTsCandidate } from "./thread-ts-DUGhaYKq.js";
5
- import { c as createSlackWebClient, d as getSlackWriteClient, s as createSlackTokenCacheKey } from "./probe-Borhn9PQ.js";
5
+ import { c as createSlackWebClient, d as getSlackWriteClient, s as createSlackTokenCacheKey } from "./probe-CVRuArHA.js";
6
6
  import { t as getOptionalSlackRuntime } from "./runtime-JSVZSWAj.js";
7
- import { i as loadOutboundMediaFromUrl } from "./runtime-api-BFfNpzDe.js";
7
+ import { i as loadOutboundMediaFromUrl } from "./runtime-api-D5XYMMsf.js";
8
8
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
9
9
  import { createMessageReceiptFromOutboundResults } from "openclaw/plugin-sdk/channel-outbound";
10
10
  import { logVerbose } from "openclaw/plugin-sdk/runtime-env";
@@ -1,2 +1,2 @@
1
- import { a as updateMessageSlack, n as resolveSlackDmChannelId, r as sendMessageSlack, t as reconcileSlackUnknownSend } from "./send-KuTDky7i.js";
1
+ import { a as updateMessageSlack, n as resolveSlackDmChannelId, r as sendMessageSlack, t as reconcileSlackUnknownSend } from "./send-BZ1tPv7-.js";
2
2
  export { reconcileSlackUnknownSend, resolveSlackDmChannelId, sendMessageSlack, updateMessageSlack };
@@ -1,8 +1,9 @@
1
- import { t as inspectSlackAccount } from "./account-inspect-Bvbtu3iH.js";
1
+ import { t as inspectSlackAccount } from "./account-inspect-jn1xLaVi.js";
2
2
  import { t as isSlackPluginAccountConfigured } from "./account-configured-BwfXBo_F.js";
3
3
  import { hasConfiguredSecretInput, normalizeSecretInputString } from "openclaw/plugin-sdk/secret-input";
4
4
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
5
- import { DEFAULT_ACCOUNT_ID, createAccountScopedAllowFromSection, createAccountScopedGroupAccessSection, createAllowlistSetupWizardProxy, createLegacyCompatChannelDmPolicy, createPatchedAccountSetupAdapter, createSetupTranslator, createStandardChannelSetupStatus, defineTokenCredential, parseMentionOrPrefixedId, patchChannelConfigForAccount, setSetupChannelEnabled } from "openclaw/plugin-sdk/setup-runtime";
5
+ import { defineChannelSetupContract } from "openclaw/plugin-sdk/channel-setup";
6
+ import { DEFAULT_ACCOUNT_ID, createAccountScopedAllowFromSection, createAccountScopedGroupAccessSection, createAllowlistSetupWizardProxy, createPatchedAccountSetupAdapter, createSetupTranslator, createStandardChannelSetupStatus, defineTokenCredential, mergeAllowFromEntries, parseMentionOrPrefixedId, patchChannelConfigForAccount, setSetupChannelEnabled } from "openclaw/plugin-sdk/setup-runtime";
6
7
  import { formatDocsLink } from "openclaw/plugin-sdk/setup-tools";
7
8
  import { describeAccountSnapshot } from "openclaw/plugin-sdk/account-helpers";
8
9
  //#region extensions/slack/src/setup-shared.ts
@@ -24,8 +25,8 @@ function buildSlackManifest(botName = "OpenClaw") {
24
25
  messages_tab_enabled: true,
25
26
  messages_tab_read_only_enabled: false
26
27
  },
27
- assistant_view: {
28
- assistant_description: `${safeName} connects Slack assistant threads to OpenClaw agents.`,
28
+ agent_view: {
29
+ agent_description: `${safeName} connects Slack Agent View conversations to OpenClaw agents.`,
29
30
  suggested_prompts: [
30
31
  {
31
32
  title: "What can you do?",
@@ -77,8 +78,7 @@ function buildSlackManifest(botName = "OpenClaw") {
77
78
  event_subscriptions: { bot_events: [
78
79
  "app_home_opened",
79
80
  "app_mention",
80
- "assistant_thread_context_changed",
81
- "assistant_thread_started",
81
+ "app_context_changed",
82
82
  "channel_rename",
83
83
  "member_joined_channel",
84
84
  "member_left_channel",
@@ -100,8 +100,8 @@ function buildSlackSetupLines() {
100
100
  "1) Slack API -> Create App -> From scratch or From manifest (with the JSON below)",
101
101
  "2) Add Socket Mode + enable it to get the app-level token (xapp-...)",
102
102
  "3) Install App to workspace to get the xoxb- bot token",
103
- "4) Enable Event Subscriptions (socket) for message, App Home, and assistant events",
104
- "5) App Home -> enable the Home tab, Messages tab for DMs, and AI assistant view",
103
+ "4) Enable Event Subscriptions (socket) for message, App Home, and Agent View events",
104
+ "5) App Home -> enable the Home tab, Messages tab for DMs, and Agent View",
105
105
  "Manifest JSON follows as plain text for copy/paste.",
106
106
  "Tip: set SLACK_BOT_TOKEN + SLACK_APP_TOKEN in your env.",
107
107
  `Docs: ${formatDocsLink("/slack", "slack")}`
@@ -157,14 +157,14 @@ function setSlackSetupIdentity(params) {
157
157
  cfg: params.cfg,
158
158
  channel: SLACK_CHANNEL,
159
159
  accountId: params.accountId,
160
- patch: params.identity === "user" ? { identity: "user" } : {}
160
+ patch: params.identity === "user" ? { postAs: "user" } : {}
161
161
  });
162
162
  if (params.identity === "user") return next;
163
163
  const slack = next.channels?.slack;
164
164
  if (!slack) return next;
165
165
  if (params.accountId === DEFAULT_ACCOUNT_ID) {
166
166
  const nextSlack = { ...slack };
167
- delete nextSlack.identity;
167
+ delete nextSlack.postAs;
168
168
  return {
169
169
  ...next,
170
170
  channels: {
@@ -176,8 +176,8 @@ function setSlackSetupIdentity(params) {
176
176
  const account = slack.accounts?.[params.accountId];
177
177
  if (!account) return next;
178
178
  const nextAccount = { ...account };
179
- if (slack.identity === "user") nextAccount.identity = "bot";
180
- else delete nextAccount.identity;
179
+ if (slack.postAs === "user") nextAccount.postAs = "bot";
180
+ else delete nextAccount.postAs;
181
181
  return {
182
182
  ...next,
183
183
  channels: {
@@ -263,55 +263,153 @@ function hasSlackSetupCredentials(params) {
263
263
  const slackSetupAdapterBase = createPatchedAccountSetupAdapter({
264
264
  channelKey: SLACK_CHANNEL,
265
265
  validateInput: ({ cfg, accountId, input }) => {
266
- if (input.useEnv && accountId !== DEFAULT_ACCOUNT_ID) return "Slack env tokens can only be used for the default account.";
266
+ const setupInput = input;
267
+ if (setupInput.useEnv && accountId !== DEFAULT_ACCOUNT_ID) return "Slack env tokens can only be used for the default account.";
267
268
  const account = inspectSlackAccount({
268
269
  cfg,
269
270
  accountId
270
271
  });
271
- const identity = input.identity ?? account.config.identity ?? "bot";
272
- const mode = input.mode ?? account.config.mode ?? "socket";
272
+ const identity = setupInput.identity ?? account.config.postAs ?? "bot";
273
+ const mode = setupInput.mode ?? account.config.mode ?? "socket";
273
274
  if (identity === "user" && mode === "relay") return "Slack user identity setup supports mode \"socket\" or \"http\", not \"relay\".";
274
- if (input.useEnv) return identity === "user" ? "Slack user identity setup does not support --use-env; configure userToken and the transport credential explicitly." : null;
275
+ if (setupInput.useEnv) return identity === "user" ? "Slack user identity setup does not support --use-env; configure userToken and the transport credential explicitly." : null;
275
276
  if (hasSlackSetupCredentials({
276
- input,
277
+ input: setupInput,
277
278
  identity,
278
279
  mode
279
280
  })) return null;
280
281
  if (identity === "user") return mode === "http" ? "Slack user identity requires --user-token and --signing-secret." : "Slack user identity requires --user-token and --app-token.";
281
282
  return "Slack requires --bot-token and --app-token (or --use-env).";
282
283
  },
283
- buildPatch: (input) => ({
284
- ...input.identity ? { identity: input.identity } : {},
285
- ...input.identity === "user" && input.mode ? { mode: input.mode } : {},
286
- ...input.botToken ? { botToken: input.botToken } : {},
287
- ...input.appToken ? { appToken: input.appToken } : {},
288
- ...input.userToken ? { userToken: input.userToken } : {},
289
- ...input.signingSecret ? { signingSecret: input.signingSecret } : {}
290
- })
284
+ buildPatch: (input) => {
285
+ const setupInput = input;
286
+ return {
287
+ ...setupInput.identity ? { postAs: setupInput.identity } : {},
288
+ ...setupInput.identity === "user" && setupInput.mode ? { mode: setupInput.mode } : {},
289
+ ...setupInput.botToken ? { botToken: setupInput.botToken } : {},
290
+ ...setupInput.appToken ? { appToken: setupInput.appToken } : {},
291
+ ...setupInput.userToken ? { userToken: setupInput.userToken } : {},
292
+ ...setupInput.signingSecret ? { signingSecret: setupInput.signingSecret } : {}
293
+ };
294
+ }
291
295
  });
292
296
  const slackSetupAdapter = {
293
297
  ...slackSetupAdapterBase,
298
+ singleAccountKeysToMove: ["appToken"],
294
299
  applyAccountConfig: ({ cfg, accountId, input }) => {
295
- const identity = input.identity ?? inspectSlackAccount({
300
+ const setupInput = input;
301
+ const identity = setupInput.identity ?? inspectSlackAccount({
296
302
  cfg,
297
303
  accountId
298
- }).config.identity;
304
+ }).config.postAs;
299
305
  return slackSetupAdapterBase.applyAccountConfig({
300
306
  cfg,
301
307
  accountId,
302
308
  input: identity === "user" ? {
303
- ...input,
309
+ ...setupInput,
304
310
  identity
305
- } : input
311
+ } : setupInput
306
312
  });
307
313
  }
308
314
  };
315
+ const slackSetupContract = defineChannelSetupContract({
316
+ fields: {
317
+ botToken: {
318
+ kind: "string",
319
+ sensitive: true,
320
+ cli: {
321
+ flags: "--bot-token <token>",
322
+ description: "Slack bot token"
323
+ }
324
+ },
325
+ appToken: {
326
+ kind: "string",
327
+ sensitive: true,
328
+ cli: {
329
+ flags: "--app-token <token>",
330
+ description: "Slack app token"
331
+ }
332
+ },
333
+ userToken: {
334
+ kind: "string",
335
+ sensitive: true,
336
+ cli: {
337
+ flags: "--user-token <token>",
338
+ description: "Slack user token"
339
+ }
340
+ },
341
+ signingSecret: {
342
+ kind: "string",
343
+ sensitive: true,
344
+ cli: {
345
+ flags: "--signing-secret <secret>",
346
+ description: "Slack signing secret"
347
+ }
348
+ },
349
+ identity: {
350
+ kind: "choice",
351
+ choices: ["bot", "user"],
352
+ cli: {
353
+ flags: "--identity <kind>",
354
+ description: "Slack identity"
355
+ }
356
+ },
357
+ mode: {
358
+ kind: "choice",
359
+ choices: ["socket", "http"],
360
+ cli: {
361
+ flags: "--mode <mode>",
362
+ description: "Slack connection mode"
363
+ }
364
+ },
365
+ useEnv: {
366
+ kind: "boolean",
367
+ cli: {
368
+ flags: "--use-env",
369
+ description: "Use Slack environment credentials"
370
+ }
371
+ }
372
+ },
373
+ legacyAdapter: slackSetupAdapter
374
+ });
309
375
  function createSlackSetupWizardBase(handlers) {
310
- const slackDmPolicy = createLegacyCompatChannelDmPolicy({
376
+ const slackDmPolicy = {
311
377
  label: "Slack",
312
378
  channel: SLACK_CHANNEL,
379
+ policyKey: "channels.slack.dmPolicy",
380
+ allowFromKey: "channels.slack.allowFrom",
381
+ resolveConfigKeys: (_cfg, accountId) => accountId && accountId !== DEFAULT_ACCOUNT_ID ? {
382
+ policyKey: `channels.slack.accounts.${accountId}.dmPolicy`,
383
+ allowFromKey: `channels.slack.accounts.${accountId}.allowFrom`
384
+ } : {
385
+ policyKey: "channels.slack.dmPolicy",
386
+ allowFromKey: "channels.slack.allowFrom"
387
+ },
388
+ getCurrent: (cfg, accountId) => inspectSlackAccount({
389
+ cfg,
390
+ accountId
391
+ }).config.dmPolicy ?? "pairing",
392
+ setPolicy: (cfg, policy, accountId) => {
393
+ const account = inspectSlackAccount({
394
+ cfg,
395
+ accountId
396
+ });
397
+ return patchChannelConfigForAccount({
398
+ cfg,
399
+ channel: SLACK_CHANNEL,
400
+ accountId: account.accountId,
401
+ patch: {
402
+ dmPolicy: policy,
403
+ ...policy === "open" ? { allowFrom: mergeAllowFromEntries(account.config.allowFrom ?? [], ["*"]) } : {},
404
+ dm: {
405
+ ...account.config.dm,
406
+ enabled: typeof account.config.dm?.enabled === "boolean" ? account.config.dm.enabled : true
407
+ }
408
+ }
409
+ });
410
+ },
313
411
  promptAllowFrom: handlers.promptAllowFrom
314
- });
412
+ };
315
413
  return {
316
414
  channel: SLACK_CHANNEL,
317
415
  status: createStandardChannelSetupStatus({
@@ -332,7 +430,7 @@ function createSlackSetupWizardBase(handlers) {
332
430
  cfg,
333
431
  accountId
334
432
  });
335
- if (currentAccount.configured && currentAccount.config.identity !== "user") return { cfg };
433
+ if (currentAccount.configured && currentAccount.config.postAs !== "user") return { cfg };
336
434
  const identity = await prompter.select({
337
435
  message: "How should OpenClaw appear in Slack?",
338
436
  options: [{
@@ -344,14 +442,14 @@ function createSlackSetupWizardBase(handlers) {
344
442
  label: "Slack user",
345
443
  hint: "Post as the authorizing human"
346
444
  }],
347
- initialValue: currentAccount.config.identity ?? "bot"
445
+ initialValue: currentAccount.config.postAs ?? "bot"
348
446
  });
349
447
  const next = setSlackSetupIdentity({
350
448
  cfg,
351
449
  accountId,
352
450
  identity
353
451
  });
354
- if (currentAccount.configured && identity === currentAccount.config.identity) return { cfg: next };
452
+ if (currentAccount.configured && identity === currentAccount.config.postAs) return { cfg: next };
355
453
  if (identity === "user") {
356
454
  if (currentAccount.config.mode === "relay") throw new Error("Slack user identity setup supports mode \"socket\" or \"http\", not \"relay\".");
357
455
  await prompter.note([
@@ -375,7 +473,7 @@ function createSlackSetupWizardBase(handlers) {
375
473
  isAvailable: ({ cfg, accountId }) => accountId === DEFAULT_ACCOUNT_ID && (inspectSlackAccount({
376
474
  cfg,
377
475
  accountId
378
- }).config.identity ?? "bot") === "bot" && Boolean(process.env.SLACK_BOT_TOKEN?.trim()) && Boolean(process.env.SLACK_APP_TOKEN?.trim()) && !inspectSlackAccount({
476
+ }).config.postAs ?? "bot") === "bot" && Boolean(process.env.SLACK_BOT_TOKEN?.trim()) && Boolean(process.env.SLACK_APP_TOKEN?.trim()) && !inspectSlackAccount({
379
477
  cfg,
380
478
  accountId
381
479
  }).configured,
@@ -392,7 +490,7 @@ function createSlackSetupWizardBase(handlers) {
392
490
  shouldPrompt: ({ cfg, accountId }) => (inspectSlackAccount({
393
491
  cfg,
394
492
  accountId
395
- }).config.identity ?? "bot") === "bot"
493
+ }).config.postAs ?? "bot") === "bot"
396
494
  }),
397
495
  createSlackTokenCredential({
398
496
  inputKey: "userToken",
@@ -404,7 +502,7 @@ function createSlackSetupWizardBase(handlers) {
404
502
  shouldPrompt: ({ cfg, accountId }) => inspectSlackAccount({
405
503
  cfg,
406
504
  accountId
407
- }).config.identity === "user"
505
+ }).config.postAs === "user"
408
506
  }),
409
507
  createSlackTokenCredential({
410
508
  inputKey: "appToken",
@@ -418,7 +516,7 @@ function createSlackSetupWizardBase(handlers) {
418
516
  cfg,
419
517
  accountId
420
518
  });
421
- return (account.config.identity ?? "bot") === "bot" || (account.config.mode ?? "socket") === "socket";
519
+ return (account.config.postAs ?? "bot") === "bot" || (account.config.mode ?? "socket") === "socket";
422
520
  }
423
521
  }),
424
522
  createSlackTokenCredential({
@@ -432,7 +530,7 @@ function createSlackSetupWizardBase(handlers) {
432
530
  cfg,
433
531
  accountId
434
532
  });
435
- return account.config.identity === "user" && account.config.mode === "http";
533
+ return account.config.postAs === "user" && account.config.mode === "http";
436
534
  }
437
535
  })
438
536
  ],
@@ -499,4 +597,4 @@ function createSlackSetupWizardProxy(loadWizard) {
499
597
  });
500
598
  }
501
599
  //#endregion
502
- export { describeSlackSetupAccount as a, SLACK_CHANNEL as i, createSlackSetupWizardProxy as n, isSlackSetupAccountConfigured as o, slackSetupAdapter as r, createSlackSetupWizardBase as t };
600
+ export { SLACK_CHANNEL as a, slackSetupContract as i, createSlackSetupWizardProxy as n, describeSlackSetupAccount as o, slackSetupAdapter as r, isSlackSetupAccountConfigured as s, createSlackSetupWizardBase as t };
@@ -1,2 +1,2 @@
1
- import { t as slackSetupPlugin } from "./channel.setup-CgkADtZg.js";
1
+ import { t as slackSetupPlugin } from "./channel.setup-DOSTEDfA.js";
2
2
  export { slackSetupPlugin };
@@ -1,17 +1,16 @@
1
- import { i as resolveDefaultSlackAccountId, o as resolveSlackAccountAllowFrom } from "./accounts-DQEbYKh9.js";
2
- import { t as inspectSlackAccount } from "./account-inspect-Bvbtu3iH.js";
3
- import "./shared-C4yVB0Q-.js";
4
- import { i as SLACK_CHANNEL, t as createSlackSetupWizardBase } from "./setup-core-CeiAVwQ3.js";
5
- import { t as resolveSlackChannelAllowlist } from "./resolve-channels-KTc568SU.js";
6
- import { t as resolveSlackUserAllowlist } from "./resolve-users-DeGJf1yp.js";
1
+ import { i as resolveDefaultSlackAccountId, o as resolveSlackAccountAllowFrom } from "./accounts-BSr252c_.js";
2
+ import { t as inspectSlackAccount } from "./account-inspect-jn1xLaVi.js";
3
+ import "./shared-BfMskaMx.js";
4
+ import { a as SLACK_CHANNEL, t as createSlackSetupWizardBase } from "./setup-core-tPxMuFez.js";
5
+ import { t as resolveSlackChannelAllowlist } from "./resolve-channels-DodP2TFx.js";
6
+ import { t as resolveSlackUserAllowlist } from "./resolve-users-M9eF8891.js";
7
7
  import { normalizeStringEntries } from "openclaw/plugin-sdk/string-coerce-runtime";
8
- import { adaptScopedAccountAccessor } from "openclaw/plugin-sdk/channel-config-helpers";
9
- import { createSetupTranslator, noteChannelLookupFailure, noteChannelLookupSummary, parseMentionOrPrefixedId, promptLegacyChannelAllowFromForAccount, resolveEntriesWithOptionalToken } from "openclaw/plugin-sdk/setup-runtime";
8
+ import { createSetupTranslator, noteChannelLookupFailure, noteChannelLookupSummary, parseMentionOrPrefixedId, patchChannelConfigForAccount, promptResolvedAllowFrom, resolveEntriesWithOptionalToken, resolveSetupAccountId, splitSetupEntries } from "openclaw/plugin-sdk/setup-runtime";
10
9
  import { formatDocsLink } from "openclaw/plugin-sdk/setup-tools";
11
10
  //#region extensions/slack/src/setup-surface.ts
12
11
  const t = createSetupTranslator();
13
12
  function resolveSlackSetupAuth(account, credentialValues) {
14
- if (account.config.identity === "user") return credentialValues.userToken || account.userToken;
13
+ if (account.config.postAs === "user") return credentialValues.userToken || account.userToken;
15
14
  return credentialValues.botToken || account.botToken;
16
15
  }
17
16
  async function resolveSlackAllowFromEntries(params) {
@@ -41,29 +40,34 @@ async function promptSlackAllowFrom(params) {
41
40
  idPattern: /^[A-Z][A-Z0-9]+$/i,
42
41
  normalizeId: (id) => id.toUpperCase()
43
42
  });
44
- return await promptLegacyChannelAllowFromForAccount({
43
+ const accountId = resolveSetupAccountId({
44
+ accountId: params.accountId,
45
+ defaultAccountId: resolveDefaultSlackAccountId(params.cfg)
46
+ });
47
+ const account = inspectSlackAccount({
45
48
  cfg: params.cfg,
46
- channel: SLACK_CHANNEL,
49
+ accountId
50
+ });
51
+ const noteTitle = t("wizard.slack.allowlistTitle");
52
+ await params.prompter.note([
53
+ t("wizard.slack.allowlistIntro"),
54
+ t("wizard.slack.examples"),
55
+ "- U12345678",
56
+ "- @alice",
57
+ t("wizard.slack.multipleEntries"),
58
+ t("wizard.channels.docs", { link: formatDocsLink("/slack", "slack") })
59
+ ].join("\n"), noteTitle);
60
+ const allowFrom = await promptResolvedAllowFrom({
47
61
  prompter: params.prompter,
48
- accountId: params.accountId,
49
- defaultAccountId: resolveDefaultSlackAccountId(params.cfg),
50
- resolveAccount: adaptScopedAccountAccessor(inspectSlackAccount),
51
- resolveExisting: (account, cfg) => resolveSlackAccountAllowFrom({
52
- cfg,
53
- accountId: account.accountId
62
+ existing: resolveSlackAccountAllowFrom({
63
+ cfg: params.cfg,
64
+ accountId
54
65
  }) ?? [],
55
- resolveToken: (account) => account.userToken ?? account.botToken ?? "",
56
- noteTitle: t("wizard.slack.allowlistTitle"),
57
- noteLines: [
58
- t("wizard.slack.allowlistIntro"),
59
- t("wizard.slack.examples"),
60
- "- U12345678",
61
- "- @alice",
62
- t("wizard.slack.multipleEntries"),
63
- t("wizard.channels.docs", { link: formatDocsLink("/slack", "slack") })
64
- ],
66
+ token: account.userToken ?? account.botToken ?? "",
65
67
  message: t("wizard.slack.allowFromPrompt"),
66
68
  placeholder: "@alice, U12345678",
69
+ label: noteTitle,
70
+ parseInputs: splitSetupEntries,
67
71
  parseId,
68
72
  invalidWithoutTokenNote: t("wizard.slack.allowFromInvalidWithoutToken"),
69
73
  resolveEntries: async ({ token, entries }) => (await resolveSlackUserAllowlist({
@@ -75,6 +79,18 @@ async function promptSlackAllowFrom(params) {
75
79
  id: entry.id ?? null
76
80
  }))
77
81
  });
82
+ return patchChannelConfigForAccount({
83
+ cfg: params.cfg,
84
+ channel: SLACK_CHANNEL,
85
+ accountId: account.accountId,
86
+ patch: {
87
+ allowFrom,
88
+ dm: {
89
+ ...account.config.dm,
90
+ enabled: typeof account.config.dm?.enabled === "boolean" ? account.config.dm.enabled : true
91
+ }
92
+ }
93
+ });
78
94
  }
79
95
  async function resolveSlackGroupAllowlist(params) {
80
96
  let keys = params.entries;
@@ -1,11 +1,11 @@
1
- import { a as resolveSlackAccount, c as resolveSlackConfigAccessorAccount, i as resolveDefaultSlackAccountId, n as listSlackAccountIds, o as resolveSlackAccountAllowFrom, r as mergeSlackAccountConfig, s as resolveSlackAccountDmPolicy } from "./accounts-DQEbYKh9.js";
2
- import { t as inspectSlackAccount } from "./account-inspect-Bvbtu3iH.js";
1
+ import { a as resolveSlackAccount, c as resolveSlackConfigAccessorAccount, i as resolveDefaultSlackAccountId, n as listSlackAccountIds, o as resolveSlackAccountAllowFrom, r as mergeSlackAccountConfig, s as resolveSlackAccountDmPolicy } from "./accounts-BSr252c_.js";
2
+ import { t as inspectSlackAccount } from "./account-inspect-jn1xLaVi.js";
3
3
  import { t as isSlackPluginAccountConfigured } from "./account-configured-BwfXBo_F.js";
4
- import { n as isSlackInteractiveRepliesEnabled } from "./interactive-replies-Dm_t2R9S.js";
5
- import { t as probeSlack, v as getChatChannelMeta } from "./probe-Borhn9PQ.js";
6
- import { i as SLACK_CHANNEL } from "./setup-core-CeiAVwQ3.js";
7
- import { t as SlackChannelConfigSchema } from "./config-schema-XjJGfwQC.js";
8
- import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-DKpe5VBr.js";
4
+ import { n as isSlackInteractiveRepliesEnabled } from "./interactive-replies-C3ffk6oN.js";
5
+ import { t as probeSlack, v as getChatChannelMeta } from "./probe-CVRuArHA.js";
6
+ import { a as SLACK_CHANNEL } from "./setup-core-tPxMuFez.js";
7
+ import { t as SlackChannelConfigSchema } from "./config-schema-B4j4tCOI.js";
8
+ import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-U6oVntbM.js";
9
9
  import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-DxmvbxBF.js";
10
10
  import { adaptScopedAccountAccessor, createScopedChannelConfigAdapter, createScopedDmSecurityResolver } from "openclaw/plugin-sdk/channel-config-helpers";
11
11
  import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
@@ -46,7 +46,7 @@ const collectSlackSecurityWarnings = createOpenProviderConfiguredRouteWarningCol
46
46
  remediation: "Set channels.slack.groupPolicy=\"allowlist\" and configure channels.slack.channels"
47
47
  }
48
48
  });
49
- const loadSlackSecurityAuditModule = createLazyRuntimeModule(() => import("./security-audit-CikQhBUY.js").then((n) => n.n));
49
+ const loadSlackSecurityAuditModule = createLazyRuntimeModule(() => import("./security-audit-Cz6erklv.js").then((n) => n.n));
50
50
  const slackSecurityAdapter = {
51
51
  resolveDmPolicy: resolveSlackDmPolicy,
52
52
  collectWarnings: collectSlackSecurityWarnings,
@@ -216,6 +216,7 @@ function createSlackPluginBase(params) {
216
216
  preferSessionLookupForAnnounceTarget: true
217
217
  },
218
218
  setupWizard: params.setupWizard,
219
+ ...params.setupContract ? { setupContract: params.setupContract } : {},
219
220
  capabilities: {
220
221
  chatTypes: [
221
222
  "direct",
@@ -1,4 +1,4 @@
1
- import { r as deliverSlackSlashReplies$1 } from "./replies-B4bOdrYb.js";
1
+ import { r as deliverSlackSlashReplies$1 } from "./replies-Cgr2Gli4.js";
2
2
  import { resolveAgentRoute as resolveAgentRoute$1 } from "openclaw/plugin-sdk/routing";
3
3
  import { resolveMarkdownTableMode as resolveMarkdownTableMode$1 } from "openclaw/plugin-sdk/markdown-table-runtime";
4
4
  import { recordInboundSessionMetaSafe as recordInboundSessionMetaSafe$1, resolveConversationLabel as resolveConversationLabel$1 } from "openclaw/plugin-sdk/conversation-runtime";
@@ -8,7 +8,7 @@ This package contains type definitions for node (https://nodejs.org/).
8
8
  Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node.
9
9
 
10
10
  ### Additional Details
11
- * Last updated: Wed, 01 Jul 2026 11:03:38 GMT
11
+ * Last updated: Wed, 08 Jul 2026 06:47:45 GMT
12
12
  * Dependencies: [undici-types](https://npmjs.com/package/undici-types)
13
13
 
14
14
  # Credits