@openclaw/slack 2026.8.1-beta.2 → 2026.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/dist/account-configured-sUohAxZr.js +33 -0
  2. package/dist/account-inspect-CN2hBsim.js +87 -0
  3. package/dist/account-inspect-api.js +1 -1
  4. package/dist/{accounts-CK4AVI2_.js → accounts-Dm_H77gH.js} +12 -11
  5. package/dist/{accounts.runtime-Cb7QwWBz.js → accounts.runtime-DRuEK6mL.js} +1 -1
  6. package/dist/{action-runtime-BkGe7ny_.js → action-runtime-044ldvNL.js} +80 -79
  7. package/dist/action-runtime.runtime-BL3KzX13.js +2 -0
  8. package/dist/{actions-BTDXwwE3.js → actions-BI7JkfVm.js} +273 -263
  9. package/dist/api.js +14 -14
  10. package/dist/{approval-handler.runtime-CJaNzAq2.js → approval-handler.runtime-DYv0UIZS.js} +53 -174
  11. package/dist/{channel-D_tovcUL.js → channel-1vIJOzPx.js} +134 -160
  12. package/dist/channel-config-api.js +1 -1
  13. package/dist/channel-plugin-api.js +1 -1
  14. package/dist/{channel-type-B9MSdoGN.js → channel-type-DlFSKeIZ.js} +3 -7
  15. package/dist/{channel.setup-Bch9dYmA.js → channel.setup-ofDi3_Pu.js} +34 -49
  16. package/dist/{config-schema-xto5jFIx.js → config-schema-BVIMyiDN.js} +42 -19
  17. package/dist/configured-state.js +34 -0
  18. package/dist/conversation-binding-route-DFVLUdYF.js +115 -0
  19. package/dist/{directory-config-CNBz8lJa.js → directory-config-DqfQ42OV.js} +1 -1
  20. package/dist/directory-contract-api.js +1 -1
  21. package/dist/{directory-live-CFKUtW9E.js → directory-live-BPaNHjmP.js} +2 -2
  22. package/dist/{group-policy-c4RP9bjc.js → group-policy-BdwszjYn.js} +625 -773
  23. package/dist/{message-tool-api-BykQB4AU.js → message-tool-api-CJ0kjcg5.js} +23 -5
  24. package/dist/message-tool-api.js +1 -1
  25. package/dist/{monitor-1nF1NtqT.js → monitor-Dq5Cmrvp.js} +3 -3
  26. package/dist/{outbound-adapter-S81tsswN.js → outbound-adapter-DYaI8ThX.js} +101 -66
  27. package/dist/{pipeline.runtime-BvYsM5JO.js → pipeline.runtime-Bd22U0ga.js} +494 -474
  28. package/dist/{policy-TapwbeaT.js → policy-CtQVbde1.js} +2 -1
  29. package/dist/{probe-HoEg_WxB.js → probe-0usmAb0i.js} +209 -22
  30. package/dist/{provider-CDNvBXUi.js → provider-CN_8hFv2.js} +296 -178
  31. package/dist/{relay-source-C9leF11u.js → relay-source-BNGpsdwV.js} +1 -1
  32. package/dist/{replies-CeOfv82I.js → replies-BSiRQOJ1.js} +48 -27
  33. package/dist/{resolve-channels-CNPrxaXY.js → resolve-channels-Czheznc8.js} +1 -1
  34. package/dist/{resolve-users-Dzomuwnr.js → resolve-users-BAOlNimr.js} +1 -1
  35. package/dist/runtime-api.js +11 -11
  36. package/dist/{scopes-cYXKkrRD.js → scopes-COSlmhnH.js} +1 -1
  37. package/dist/security-contract-api.js +1 -1
  38. package/dist/{send-Nor0iBwY.js → send-DS9ICrBI.js} +88 -100
  39. package/dist/send-results-eeOu_HYm.js +23 -0
  40. package/dist/{send.runtime-BmgNe6S9.js → send.runtime-D_Bb6IuH.js} +1 -1
  41. package/dist/setup-plugin-api.js +1 -1
  42. package/dist/{setup-surface-CbX1-Knh.js → setup-surface-BGnd2pSe.js} +6 -6
  43. package/dist/{shared-zdT5AMp-.js → shared-D5B-5hBg.js} +35 -9
  44. package/dist/{slash-dispatch.runtime-Bnr9GR1S.js → slash-dispatch.runtime-CilDmI0c.js} +2 -2
  45. package/node_modules/@slack/bolt/node_modules/@types/node/README.md +1 -1
  46. package/node_modules/@slack/bolt/node_modules/@types/node/child_process.d.ts +0 -1
  47. package/node_modules/@slack/bolt/node_modules/@types/node/crypto.d.ts +6 -6
  48. package/node_modules/@slack/bolt/node_modules/@types/node/dns/promises.d.ts +5 -5
  49. package/node_modules/@slack/bolt/node_modules/@types/node/dns.d.ts +5 -5
  50. package/node_modules/@slack/bolt/node_modules/@types/node/fs.d.ts +7 -0
  51. package/node_modules/@slack/bolt/node_modules/@types/node/http.d.ts +30 -0
  52. package/node_modules/@slack/bolt/node_modules/@types/node/http2.d.ts +4 -4
  53. package/node_modules/@slack/bolt/node_modules/@types/node/os.d.ts +30 -30
  54. package/node_modules/@slack/bolt/node_modules/@types/node/package.json +2 -2
  55. package/node_modules/@slack/bolt/node_modules/@types/node/perf_hooks.d.ts +2 -1
  56. package/node_modules/@slack/bolt/node_modules/@types/node/process.d.ts +42 -43
  57. package/node_modules/@slack/bolt/node_modules/@types/node/quic.d.ts +1049 -84
  58. package/node_modules/@slack/bolt/node_modules/@types/node/sqlite.d.ts +14 -1
  59. package/node_modules/@slack/bolt/node_modules/@types/node/stream/iter.d.ts +3 -2
  60. package/node_modules/@slack/bolt/node_modules/@types/node/test.d.ts +61 -0
  61. package/node_modules/@slack/bolt/node_modules/@types/node/v8.d.ts +20 -23
  62. package/node_modules/@slack/bolt/node_modules/body-parser/node_modules/content-type/README.md +2 -0
  63. package/node_modules/@slack/bolt/node_modules/body-parser/node_modules/content-type/dist/index.d.ts +20 -0
  64. package/node_modules/@slack/bolt/node_modules/body-parser/node_modules/content-type/dist/index.js +20 -14
  65. package/node_modules/@slack/bolt/node_modules/body-parser/node_modules/content-type/dist/index.js.map +1 -1
  66. package/node_modules/@slack/bolt/node_modules/body-parser/node_modules/content-type/package.json +1 -1
  67. package/node_modules/@slack/bolt/node_modules/type-is/node_modules/content-type/README.md +2 -0
  68. package/node_modules/@slack/bolt/node_modules/type-is/node_modules/content-type/dist/index.d.ts +20 -0
  69. package/node_modules/@slack/bolt/node_modules/type-is/node_modules/content-type/dist/index.js +20 -14
  70. package/node_modules/@slack/bolt/node_modules/type-is/node_modules/content-type/dist/index.js.map +1 -1
  71. package/node_modules/@slack/bolt/node_modules/type-is/node_modules/content-type/package.json +1 -1
  72. package/node_modules/@slack/socket-mode/node_modules/@types/node/README.md +1 -1
  73. package/node_modules/@slack/socket-mode/node_modules/@types/node/child_process.d.ts +0 -1
  74. package/node_modules/@slack/socket-mode/node_modules/@types/node/crypto.d.ts +6 -6
  75. package/node_modules/@slack/socket-mode/node_modules/@types/node/dns/promises.d.ts +5 -5
  76. package/node_modules/@slack/socket-mode/node_modules/@types/node/dns.d.ts +5 -5
  77. package/node_modules/@slack/socket-mode/node_modules/@types/node/fs.d.ts +7 -0
  78. package/node_modules/@slack/socket-mode/node_modules/@types/node/http.d.ts +30 -0
  79. package/node_modules/@slack/socket-mode/node_modules/@types/node/http2.d.ts +4 -4
  80. package/node_modules/@slack/socket-mode/node_modules/@types/node/os.d.ts +30 -30
  81. package/node_modules/@slack/socket-mode/node_modules/@types/node/package.json +2 -2
  82. package/node_modules/@slack/socket-mode/node_modules/@types/node/perf_hooks.d.ts +2 -1
  83. package/node_modules/@slack/socket-mode/node_modules/@types/node/process.d.ts +42 -43
  84. package/node_modules/@slack/socket-mode/node_modules/@types/node/quic.d.ts +1049 -84
  85. package/node_modules/@slack/socket-mode/node_modules/@types/node/sqlite.d.ts +14 -1
  86. package/node_modules/@slack/socket-mode/node_modules/@types/node/stream/iter.d.ts +3 -2
  87. package/node_modules/@slack/socket-mode/node_modules/@types/node/test.d.ts +61 -0
  88. package/node_modules/@slack/socket-mode/node_modules/@types/node/v8.d.ts +20 -23
  89. package/node_modules/@slack/web-api/node_modules/@types/node/README.md +1 -1
  90. package/node_modules/@slack/web-api/node_modules/@types/node/child_process.d.ts +0 -1
  91. package/node_modules/@slack/web-api/node_modules/@types/node/crypto.d.ts +6 -6
  92. package/node_modules/@slack/web-api/node_modules/@types/node/dns/promises.d.ts +5 -5
  93. package/node_modules/@slack/web-api/node_modules/@types/node/dns.d.ts +5 -5
  94. package/node_modules/@slack/web-api/node_modules/@types/node/fs.d.ts +7 -0
  95. package/node_modules/@slack/web-api/node_modules/@types/node/http.d.ts +30 -0
  96. package/node_modules/@slack/web-api/node_modules/@types/node/http2.d.ts +4 -4
  97. package/node_modules/@slack/web-api/node_modules/@types/node/os.d.ts +30 -30
  98. package/node_modules/@slack/web-api/node_modules/@types/node/package.json +2 -2
  99. package/node_modules/@slack/web-api/node_modules/@types/node/perf_hooks.d.ts +2 -1
  100. package/node_modules/@slack/web-api/node_modules/@types/node/process.d.ts +42 -43
  101. package/node_modules/@slack/web-api/node_modules/@types/node/quic.d.ts +1049 -84
  102. package/node_modules/@slack/web-api/node_modules/@types/node/sqlite.d.ts +14 -1
  103. package/node_modules/@slack/web-api/node_modules/@types/node/stream/iter.d.ts +3 -2
  104. package/node_modules/@slack/web-api/node_modules/@types/node/test.d.ts +61 -0
  105. package/node_modules/@slack/web-api/node_modules/@types/node/v8.d.ts +20 -23
  106. package/node_modules/typebox/build/format/date.d.mts +1 -1
  107. package/node_modules/typebox/build/format/date.mjs +1 -1
  108. package/node_modules/typebox/build/format/date_time.d.mts +2 -2
  109. package/node_modules/typebox/build/format/date_time.mjs +3 -3
  110. package/node_modules/typebox/build/format/email.d.mts +1 -1
  111. package/node_modules/typebox/build/format/email.mjs +2 -2
  112. package/node_modules/typebox/build/format/hostname.mjs +2 -10
  113. package/node_modules/typebox/build/format/idn_email.d.mts +1 -1
  114. package/node_modules/typebox/build/format/idn_email.mjs +3 -3
  115. package/node_modules/typebox/build/format/idn_hostname.d.mts +1 -0
  116. package/node_modules/typebox/build/format/idn_hostname.mjs +3 -11
  117. package/node_modules/typebox/build/format/idna/format/bidi.d.mts +3 -0
  118. package/node_modules/typebox/build/format/idna/format/bidi.mjs +98 -0
  119. package/node_modules/typebox/build/format/idna/format/puny.d.mts +3 -0
  120. package/node_modules/typebox/build/format/idna/format/puny.mjs +144 -0
  121. package/node_modules/typebox/build/format/idna/hostname.d.mts +1 -0
  122. package/node_modules/typebox/build/format/idna/hostname.mjs +16 -0
  123. package/node_modules/typebox/build/format/idna/idn-hostname.d.mts +1 -0
  124. package/node_modules/typebox/build/format/idna/idn-hostname.mjs +23 -0
  125. package/node_modules/typebox/build/format/idna/index.d.mts +2 -0
  126. package/node_modules/typebox/build/format/idna/index.mjs +2 -0
  127. package/node_modules/typebox/build/format/idna/label/ascii.d.mts +1 -0
  128. package/node_modules/typebox/build/format/idna/label/ascii.mjs +9 -0
  129. package/node_modules/typebox/build/format/idna/label/puny.d.mts +1 -0
  130. package/node_modules/typebox/build/format/idna/label/puny.mjs +28 -0
  131. package/node_modules/typebox/build/format/idna/label/unicode.d.mts +1 -0
  132. package/node_modules/typebox/build/format/idna/label/unicode.mjs +106 -0
  133. package/node_modules/typebox/build/format/idna/pattern/pattern.d.mts +30 -0
  134. package/node_modules/typebox/build/format/idna/pattern/pattern.mjs +70 -0
  135. package/node_modules/typebox/build/format/ipv4.d.mts +0 -1
  136. package/node_modules/typebox/build/format/ipv4.mjs +2 -32
  137. package/node_modules/typebox/build/format/ipv6.mjs +2 -61
  138. package/node_modules/typebox/build/format/iri.d.mts +2 -2
  139. package/node_modules/typebox/build/format/iri.mjs +26 -8
  140. package/node_modules/typebox/build/format/iri_reference.d.mts +2 -2
  141. package/node_modules/typebox/build/format/iri_reference.mjs +9 -55
  142. package/node_modules/typebox/build/format/regex.d.mts +1 -2
  143. package/node_modules/typebox/build/format/regex.mjs +2 -6
  144. package/node_modules/typebox/build/format/time.d.mts +2 -2
  145. package/node_modules/typebox/build/format/time.mjs +19 -14
  146. package/node_modules/typebox/build/format/uri.d.mts +1 -1
  147. package/node_modules/typebox/build/format/uri.mjs +3 -130
  148. package/node_modules/typebox/build/format/uri_reference.d.mts +1 -1
  149. package/node_modules/typebox/build/format/uri_reference.mjs +2 -3
  150. package/node_modules/typebox/build/format/uri_template.d.mts +2 -3
  151. package/node_modules/typebox/build/format/uri_template.mjs +4 -5
  152. package/node_modules/typebox/build/format/url.d.mts +3 -3
  153. package/node_modules/typebox/build/format/url.mjs +4 -5
  154. package/node_modules/typebox/build/guard/emit.d.mts +3 -1
  155. package/node_modules/typebox/build/guard/emit.mjs +12 -5
  156. package/node_modules/typebox/build/guard/guard.d.mts +8 -2
  157. package/node_modules/typebox/build/guard/guard.mjs +25 -4
  158. package/node_modules/typebox/build/guard/string.d.mts +2 -2
  159. package/node_modules/typebox/build/guard/string.mjs +7 -7
  160. package/node_modules/typebox/build/schema/engine/_context.mjs +3 -3
  161. package/node_modules/typebox/build/schema/engine/_functions.mjs +1 -2
  162. package/node_modules/typebox/build/schema/engine/_regexp.d.mts +2 -0
  163. package/node_modules/typebox/build/schema/engine/_regexp.mjs +4 -0
  164. package/node_modules/typebox/build/schema/engine/_stack.mjs +12 -13
  165. package/node_modules/typebox/build/schema/engine/additionalItems.mjs +17 -7
  166. package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +4 -3
  167. package/node_modules/typebox/build/schema/engine/contains.mjs +18 -6
  168. package/node_modules/typebox/build/schema/engine/enum.mjs +1 -1
  169. package/node_modules/typebox/build/schema/engine/items.mjs +26 -6
  170. package/node_modules/typebox/build/schema/engine/maxContains.mjs +3 -3
  171. package/node_modules/typebox/build/schema/engine/minContains.mjs +14 -4
  172. package/node_modules/typebox/build/schema/engine/not.mjs +4 -2
  173. package/node_modules/typebox/build/schema/engine/oneOf.mjs +7 -6
  174. package/node_modules/typebox/build/schema/engine/pattern.mjs +3 -2
  175. package/node_modules/typebox/build/schema/engine/patternProperties.mjs +4 -3
  176. package/node_modules/typebox/build/schema/engine/ref.mjs +1 -7
  177. package/node_modules/typebox/build/schema/engine/schema.mjs +13 -4
  178. package/node_modules/typebox/build/schema/engine/type.mjs +1 -1
  179. package/node_modules/typebox/build/schema/resolve/resolve.d.mts +4 -1
  180. package/node_modules/typebox/build/schema/resolve/resolve.mjs +202 -1
  181. package/node_modules/typebox/build/schema/static/propertyNames.d.mts +5 -0
  182. package/node_modules/typebox/build/schema/static/propertyNames.mjs +3 -0
  183. package/node_modules/typebox/build/schema/static/schema.d.mts +3 -0
  184. package/node_modules/typebox/build/schema/types/index.d.mts +0 -2
  185. package/node_modules/typebox/build/schema/types/index.mjs +0 -2
  186. package/node_modules/typebox/build/system/memory/clone.mjs +14 -11
  187. package/node_modules/typebox/build/system/memory/discard.mjs +6 -5
  188. package/node_modules/typebox/build/system/settings/settings.d.mts +9 -0
  189. package/node_modules/typebox/build/system/settings/settings.mjs +2 -0
  190. package/node_modules/typebox/build/type/engine/call/distribute_arguments.d.mts +6 -1
  191. package/node_modules/typebox/build/type/engine/call/distribute_arguments.mjs +16 -3
  192. package/node_modules/typebox/build/type/engine/call/instantiate.mjs +34 -4
  193. package/node_modules/typebox/build/type/engine/evaluate/broaden.d.mts +5 -5
  194. package/node_modules/typebox/build/type/engine/evaluate/broaden.mjs +20 -26
  195. package/node_modules/typebox/build/type/engine/evaluate/compare.d.mts +6 -10
  196. package/node_modules/typebox/build/type/engine/evaluate/compare.mjs +9 -13
  197. package/node_modules/typebox/build/type/engine/evaluate/composite.d.mts +7 -4
  198. package/node_modules/typebox/build/type/engine/evaluate/composite.mjs +12 -19
  199. package/node_modules/typebox/build/type/engine/evaluate/distribute.d.mts +4 -20
  200. package/node_modules/typebox/build/type/engine/evaluate/distribute.mjs +8 -20
  201. package/node_modules/typebox/build/type/engine/evaluate/evaluate.d.mts +4 -4
  202. package/node_modules/typebox/build/type/engine/evaluate/evaluate.mjs +11 -8
  203. package/node_modules/typebox/build/type/engine/evaluate/flatten.d.mts +1 -1
  204. package/node_modules/typebox/build/type/engine/evaluate/flatten.mjs +3 -4
  205. package/node_modules/typebox/build/type/engine/evaluate/narrow.d.mts +17 -2
  206. package/node_modules/typebox/build/type/engine/evaluate/narrow.mjs +26 -6
  207. package/node_modules/typebox/build/type/engine/exclude/operation.mjs +3 -4
  208. package/node_modules/typebox/build/type/engine/extract/operation.d.mts +1 -1
  209. package/node_modules/typebox/build/type/engine/extract/operation.mjs +3 -4
  210. package/node_modules/typebox/build/type/engine/priority/priority.d.mts +2 -2
  211. package/node_modules/typebox/build/type/engine/priority/priority.mjs +3 -4
  212. package/node_modules/typebox/build/type/script/mapping.d.mts +32 -29
  213. package/node_modules/typebox/build/type/script/mapping.mjs +18 -25
  214. package/node_modules/typebox/build/type/script/parser.d.mts +19 -25
  215. package/node_modules/typebox/build/type/script/parser.mjs +27 -23
  216. package/node_modules/typebox/build/value/errors/errors.d.mts +2 -2
  217. package/node_modules/typebox/build/value/errors/errors.mjs +1 -1
  218. package/node_modules/typebox/package.json +27 -27
  219. package/node_modules/typebox/readme.md +79 -82
  220. package/node_modules/ws/lib/permessage-deflate.js +3 -1
  221. package/node_modules/ws/package.json +1 -1
  222. package/openclaw.plugin.json +57 -7
  223. package/package.json +9 -9
  224. package/dist/account-configured-BwfXBo_F.js +0 -14
  225. package/dist/account-inspect-Drw2gAiN.js +0 -89
  226. package/dist/account-reply-mode-DrUXogvO.js +0 -14
  227. package/dist/action-runtime.runtime-D9I6uc0Q.js +0 -2
  228. package/dist/actions.runtime-DLFyUkvg.js +0 -2
  229. package/dist/block-text-YtiNkqmx.js +0 -79
  230. package/dist/runtime-api-Cj9nxBNv.js +0 -10
  231. package/node_modules/p-map/index.d.ts +0 -155
  232. package/node_modules/p-map/index.js +0 -285
  233. package/node_modules/p-map/license +0 -9
  234. package/node_modules/p-map/package.json +0 -57
  235. package/node_modules/p-map/readme.md +0 -190
  236. package/node_modules/typebox/build/format/_idna.d.mts +0 -2
  237. package/node_modules/typebox/build/format/_idna.mjs +0 -246
  238. package/node_modules/typebox/build/format/_puny.d.mts +0 -1
  239. package/node_modules/typebox/build/format/_puny.mjs +0 -77
  240. package/node_modules/typebox/build/schema/resolve/ref.d.mts +0 -3
  241. package/node_modules/typebox/build/schema/resolve/ref.mjs +0 -146
  242. package/node_modules/typebox/build/schema/types/contentEncoding.d.mts +0 -9
  243. package/node_modules/typebox/build/schema/types/contentEncoding.mjs +0 -13
  244. package/node_modules/typebox/build/schema/types/contentMediaType.d.mts +0 -9
  245. package/node_modules/typebox/build/schema/types/contentMediaType.mjs +0 -13
  246. package/dist/{security-audit-DR097212.js → security-audit-B_yKr7MW.js} +1 -1
@@ -1,51 +1,37 @@
1
- import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId, l as resolveSlackOperationToken, n as listSlackAccountIds, o as resolveSlackAccountAllowFrom } from "./accounts-CK4AVI2_.js";
2
- import { t as resolveSlackReplyToMode } from "./account-reply-mode-DrUXogvO.js";
1
+ import { n as isSlackPluginAccountConfigured } from "./account-configured-sUohAxZr.js";
2
+ import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId, l as resolveSlackOperationToken, n as listSlackAccountIds, o as resolveSlackAccountAllowFrom } from "./accounts-Dm_H77gH.js";
3
+ import { n as resolveSlackConversationBindingRoute, r as resolveSlackReplyToMode, t as normalizeSlackRouteBindingConfig } from "./conversation-binding-route-DFVLUdYF.js";
3
4
  import { a as parseSlackTarget, i as normalizeSlackMessagingTarget, n as formatSlackTarget, o as resolveSlackChannelId, r as looksLikeSlackTargetId, t as canonicalizeSlackApiTargetId } from "./target-parsing-BnMD2ZqZ.js";
4
5
  import { t as slackContextTargetsMatch } from "./targets-Cx5W_n3W.js";
5
- import { B as SLACK_TEXT_LIMIT, Ct as isSlackWorkspaceInstallation, Dt as getSlackExecApprovalApprovers, Et as isSlackApprovalAuthorizedSender, H as buildSlackPresentationBlocks, L as SLACK_EDIT_TEXT_MAX_BYTES, Mt as shouldSuppressLocalSlackExecApprovalPrompt, Ot as isSlackExecApprovalAuthorizedSender, Tt as getSlackApprovalApprovers, U as canRenderSlackPresentation, W as countSlackTextUtf8Bytes, _ as resolveSlackReplyBlocks, _t as resolveSlackFallbackOriginTarget, bt as shouldHandleSlackPluginViaForwardingSession, dt as hasSlackPluginApprovers, ft as isSlackAnyNativeApprovalClientEnabled, g as resolveSlackReplyBlockResolution, gt as resolveSessionSlackOriginTarget, ht as resolveEnterpriseApprovalTeamId, i as resolveSlackGroupToolPolicy, it as renderSlackMessagePresentationFallbackText, jt as resolveSlackExecApprovalTarget, kt as isSlackExecApprovalClientEnabled, mt as normalizeSlackOriginTarget, p as assertSlackDetachedTargetAllowed, pt as normalizeSlackForwardTarget, r as resolveSlackGroupRequireMention, st as SLACK_PRESENTATION_CAPABILITIES, v as resolveSlackReplyDeliveryMessages, vt as resolveTurnSourceSlackOriginTarget, xt as slackTargetsMatch, yt as shouldHandleSlackNativeApprovalRequest } from "./group-policy-c4RP9bjc.js";
6
- import { t as isSlackPluginAccountConfigured } from "./account-configured-BwfXBo_F.js";
6
+ import { $ as renderSlackMessagePresentationFallbackText, Ct as isSlackApprovalAuthorizedSender, Et as isSlackExecApprovalClientEnabled, F as canRenderSlackPresentation, I as countSlackTextUtf8Bytes, M as SLACK_TEXT_LIMIT, Ot as resolveSlackExecApprovalTarget, P as buildSlackPresentationBlocks, Q as normalizeSlackOutboundText, St as getSlackApprovalApprovers, Tt as isSlackExecApprovalAuthorizedSender, _t as shouldHandleSlackPluginViaForwardingSession, a as qualifySlackConversationId, bt as isSlackWorkspaceInstallation, c as assertSlackDetachedTargetAllowed, ct as hasSlackPluginApprovers, d as resolveSlackReplyBlockResolution, dt as normalizeSlackOriginTarget, f as resolveSlackReplyBlocks, ft as resolveEnterpriseApprovalTeamId, gt as shouldHandleSlackNativeApprovalRequest, ht as resolveTurnSourceSlackOriginTarget, i as resolveSlackGroupToolPolicy, jt as resolveSlackAutoThreadId, k as SLACK_EDIT_TEXT_MAX_BYTES, kt as shouldSuppressLocalSlackExecApprovalPrompt, lt as isSlackAnyNativeApprovalClientEnabled, mt as resolveSlackFallbackOriginTarget, o as qualifySlackRoutePeerId, p as resolveSlackReplyDeliveryMessages, pt as resolveSessionSlackOriginTarget, r as resolveSlackGroupRequireMention, rt as SLACK_PRESENTATION_CAPABILITIES, ut as normalizeSlackForwardTarget, vt as slackTargetsMatch, wt as getSlackExecApprovalApprovers, yt as getSlackInstallationKind } from "./group-policy-BdwszjYn.js";
7
7
  import { n as resolveSlackThreadTsValue, t as normalizeSlackThreadTsCandidate } from "./thread-ts-DUGhaYKq.js";
8
- import { n as extractSlackToolSend, t as describeSlackMessageTool } from "./message-tool-api-BykQB4AU.js";
9
- import { S as resolveConfiguredFromRequiredCredentialStatuses, d as getSlackWriteClient, r as formatSlackError, v as DEFAULT_ACCOUNT_ID$1, x as projectCredentialSnapshotFields, y as PAIRING_APPROVED_MESSAGE } from "./probe-HoEg_WxB.js";
10
- import { n as resolveSlackChannelType, r as resolveSlackConversationInfo } from "./channel-type-B9MSdoGN.js";
8
+ import { n as extractSlackToolSend, t as describeSlackMessageTool } from "./message-tool-api-CJ0kjcg5.js";
9
+ import { a as PAIRING_APPROVED_MESSAGE, i as DEFAULT_ACCOUNT_ID$1, n as slackConfigAdapter, o as projectCredentialSnapshotFields, r as slackSecurityAdapter, s as resolveConfiguredFromRequiredCredentialStatuses, t as createSlackPluginBase } from "./shared-D5B-5hBg.js";
10
+ import { S as getSlackWriteClient, o as formatSlackError } from "./probe-0usmAb0i.js";
11
+ import { n as resolveSlackChannelType, r as resolveSlackConversationInfo } from "./channel-type-DlFSKeIZ.js";
11
12
  import { t as getOptionalSlackRuntime } from "./runtime-JSVZSWAj.js";
12
- import { n as slackConfigAdapter, r as slackSecurityAdapter, t as createSlackPluginBase } from "./shared-zdT5AMp-.js";
13
- import { a as slackSetupContract, i as createSlackSetupWizardProxy, o as SLACK_CHANNEL } from "./channel.setup-Bch9dYmA.js";
13
+ import { a as slackSetupContract, i as createSlackSetupWizardProxy, o as SLACK_CHANNEL } from "./channel.setup-ofDi3_Pu.js";
14
14
  import { normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
15
15
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
16
16
  import { adaptScopedAccountAccessor } from "openclaw/plugin-sdk/channel-config-helpers";
17
- import { buildOutboundBaseSessionKey, normalizeMessageChannel } from "openclaw/plugin-sdk/routing";
17
+ import { buildOutboundBaseSessionKey, normalizeMessageChannel, resolveAgentRoute } from "openclaw/plugin-sdk/routing";
18
18
  import { buildLegacyDmAccountAllowlistAdapter, createAccountScopedAllowlistNameResolver, createFlatAllowlistOverrideResolver } from "openclaw/plugin-sdk/allowlist-config-edit";
19
19
  import { buildThreadAwareOutboundSessionRoute, createChatChannelPlugin } from "openclaw/plugin-sdk/channel-core";
20
- import { createChannelMessageAdapterFromOutbound, createRuntimeOutboundDelegates, resolveOutboundSendDep } from "openclaw/plugin-sdk/channel-outbound";
20
+ import { createChannelMessageAdapterFromOutbound, createRuntimeOutboundDelegates } from "openclaw/plugin-sdk/channel-outbound";
21
21
  import { createPairingPrefixStripper } from "openclaw/plugin-sdk/channel-pairing";
22
22
  import { createChannelDirectoryAdapter, createRuntimeDirectoryLiveAdapter } from "openclaw/plugin-sdk/directory-runtime";
23
23
  import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
24
24
  import { logVerbose } from "openclaw/plugin-sdk/runtime-env";
25
25
  import { createComputedAccountStatusAdapter, createDefaultChannelRuntimeState } from "openclaw/plugin-sdk/status-helpers";
26
26
  import { sanitizeAssistantVisibleText } from "openclaw/plugin-sdk/text-chunking";
27
- import { isSingleUseReplyToMode } from "openclaw/plugin-sdk/reply-reference";
28
27
  import { createApproverRestrictedNativeApprovalCapability } from "openclaw/plugin-sdk/approval-delivery-runtime";
29
28
  import { createLazyChannelApprovalNativeRuntimeAdapter } from "openclaw/plugin-sdk/approval-handler-adapter-runtime";
30
29
  import { createChannelNativeOriginTargetResolver, createNativeApprovalForwardingFallbackSuppressor } from "openclaw/plugin-sdk/approval-native-runtime";
31
30
  import { readBooleanParam } from "openclaw/plugin-sdk/boolean-param";
32
31
  import { resolveReactionMessageId } from "openclaw/plugin-sdk/channel-actions";
33
32
  import { normalizeLegacyInteractiveReply, normalizeMessagePresentation } from "openclaw/plugin-sdk/interactive-runtime";
34
- import { readPositiveIntegerParam, readStringParam } from "openclaw/plugin-sdk/param-readers";
35
- //#region extensions/slack/src/action-threading.ts
36
- function resolveSlackAutoThreadId(params) {
37
- const context = params.toolContext;
38
- if (!context?.currentChannelId && !context?.currentMessagingTarget) return;
39
- if (!slackContextTargetsMatch(params.to, context)) return;
40
- if (!context.currentThreadTs) {
41
- if (context.sameChannelThreadRequired) throw new Error("Slack thread context is required for same-channel replies from a threaded Slack turn. Set topLevel=true or threadId=null to post at the channel root.");
42
- return;
43
- }
44
- if (context.replyToMode !== "all" && !isSingleUseReplyToMode(context.replyToMode ?? "off")) return;
45
- if (isSingleUseReplyToMode(context.replyToMode ?? "off") && context.hasRepliedRef?.value) return;
46
- return context.currentThreadTs;
47
- }
48
- //#endregion
33
+ import { resolveMarkdownTableMode } from "openclaw/plugin-sdk/markdown-table-runtime";
34
+ import { readPositiveIntegerParam as readPositiveIntegerParam$1, readStringParam as readStringParam$1 } from "openclaw/plugin-sdk/param-readers";
49
35
  //#region extensions/slack/src/approval-native.ts
50
36
  function resolveSlackNativeSuppressionAccountId({ target, request }) {
51
37
  return normalizeOptionalString(target.accountId) ?? normalizeOptionalString(request.request.turnSourceAccountId);
@@ -103,7 +89,7 @@ const baseSlackApprovalCapability = createApproverRestrictedNativeApprovalCapabi
103
89
  channelLabel: "Slack",
104
90
  describeExecApprovalSetup: ({ accountId }) => {
105
91
  const prefix = accountId && accountId !== "default" ? `channels.slack.accounts.${accountId}` : "channels.slack";
106
- return `Approve it from the Web UI or terminal UI for now. Slack supports native exec approvals for this account. Configure \`${prefix}.execApprovals.approvers\` or \`commands.ownerAllowFrom\`; leave \`${prefix}.execApprovals.enabled\` unset/\`auto\` or set it to \`true\`.`;
92
+ return `Approve it from the Web UI or terminal UI for now. Slack supports native exec approvals for this account. Configure \`${prefix}.execApprovals.approvers\` or \`commands.ownerAllowFrom\`; set \`${prefix}.execApprovals.enabled\` to \`auto\` or \`true\`. Unset or \`false\` disables native exec approval delivery.`;
107
93
  },
108
94
  listAccountIds: listSlackAccountIds,
109
95
  hasApprovers: ({ cfg, accountId }) => getSlackExecApprovalApprovers({
@@ -145,7 +131,7 @@ const baseSlackApprovalCapability = createApproverRestrictedNativeApprovalCapabi
145
131
  approvalKind,
146
132
  request
147
133
  }),
148
- load: async () => (await import("./approval-handler.runtime-CJaNzAq2.js")).slackApprovalNativeRuntime
134
+ load: async () => (await import("./approval-handler.runtime-DYv0UIZS.js")).slackApprovalNativeRuntime
149
135
  })
150
136
  });
151
137
  const baseSlackNativeAdapter = baseSlackApprovalCapability.native;
@@ -207,7 +193,7 @@ function resolveSlackPresentationText(content, presentation) {
207
193
  }
208
194
  function renderSlackActionPresentation(presentation) {
209
195
  if (!presentation) return { usesPresentationTextFallback: false };
210
- const renderedBlocks = canRenderSlackPresentation(presentation) ? buildSlackPresentationBlocks(presentation) : void 0;
196
+ const renderedBlocks = !presentation.blocks.some((block) => (block.type === "text" || block.type === "context") && block.text.trim().length > 3e3) && canRenderSlackPresentation(presentation) ? buildSlackPresentationBlocks(presentation) : void 0;
211
197
  const usesPresentationTextFallback = !renderedBlocks || renderedBlocks.length > 50;
212
198
  const blocks = usesPresentationTextFallback ? void 0 : renderedBlocks;
213
199
  return {
@@ -221,16 +207,22 @@ async function handleSlackMessageAction(params) {
221
207
  const { action, cfg, params: actionParams } = ctx;
222
208
  const accountId = ctx.accountId ?? void 0;
223
209
  const resolveChannelId = () => {
224
- const channelId = readStringParam(actionParams, "channelId") ?? readStringParam(actionParams, "to", { required: true });
210
+ const channelId = readStringParam$1(actionParams, "channelId") ?? readStringParam$1(actionParams, "to", { required: true });
225
211
  return normalizeChannelId ? normalizeChannelId(channelId) : channelId;
226
212
  };
213
+ if (action === "conversation-open") return await invoke({
214
+ action: "openConversation",
215
+ userIds: actionParams.userIds,
216
+ teamId: readStringParam$1(actionParams, "teamId"),
217
+ accountId
218
+ }, cfg, ctx.toolContext);
227
219
  if (action === "send") {
228
- const to = readStringParam(actionParams, "to", { required: true });
229
- const content = readStringParam(actionParams, "message", {
220
+ const to = readStringParam$1(actionParams, "to", { required: true });
221
+ const content = readStringParam$1(actionParams, "message", {
230
222
  required: false,
231
223
  allowEmpty: true
232
224
  });
233
- const mediaUrl = readStringParam(actionParams, "media", { trim: false });
225
+ const mediaUrl = readStringParam$1(actionParams, "media", { trim: false });
234
226
  const presentation = normalizeMessagePresentation(actionParams.presentation);
235
227
  const interactive = normalizeLegacyInteractiveReply(actionParams.interactive);
236
228
  const hasStructuredContent = Boolean(presentation || interactive?.blocks.length);
@@ -247,8 +239,8 @@ async function handleSlackMessageAction(params) {
247
239
  if (!content && preparedMessages.length === 0 && !mediaUrl) throw new Error("Slack send requires message, blocks, or media.");
248
240
  const replyBroadcast = readBooleanParam(actionParams, "replyBroadcast");
249
241
  if (replyBroadcast && mediaUrl) throw new Error("Slack replyBroadcast is only supported for text or block thread replies.");
250
- const threadId = readStringParam(actionParams, "threadId");
251
- const replyTo = readStringParam(actionParams, "replyTo");
242
+ const threadId = readStringParam$1(actionParams, "threadId");
243
+ const replyTo = readStringParam$1(actionParams, "replyTo");
252
244
  const topLevel = readBooleanParam(actionParams, "topLevel") === true || actionParams.threadId === null;
253
245
  const toolContext = preparedMessages.length > 0 ? {
254
246
  ...ctx.toolContext,
@@ -261,7 +253,10 @@ async function handleSlackMessageAction(params) {
261
253
  mediaUrl: mediaUrl ?? void 0,
262
254
  ...readSlackForceDocument(actionParams) ? { forceDocument: true } : {},
263
255
  accountId,
264
- threadTs: threadId ?? replyTo ?? void 0,
256
+ threadTs: resolveSlackThreadTsValue({
257
+ replyToId: replyTo,
258
+ threadId
259
+ }),
265
260
  ...topLevel ? { topLevel: true } : {},
266
261
  ...replyBroadcast ? { replyBroadcast } : {}
267
262
  }, cfg, toolContext);
@@ -273,7 +268,7 @@ async function handleSlackMessageAction(params) {
273
268
  });
274
269
  if (messageIdRaw == null) throw new Error("messageId required. Provide messageId explicitly or react to the current inbound message.");
275
270
  const messageId = String(messageIdRaw);
276
- const emoji = readStringParam(actionParams, "emoji", { allowEmpty: true });
271
+ const emoji = readStringParam$1(actionParams, "emoji", { allowEmpty: true });
277
272
  const remove = typeof actionParams.remove === "boolean" ? actionParams.remove : void 0;
278
273
  return await invoke({
279
274
  action: "react",
@@ -285,7 +280,7 @@ async function handleSlackMessageAction(params) {
285
280
  }, cfg, ctx.toolContext);
286
281
  }
287
282
  if (action === "reactions") {
288
- const messageId = readStringParam(actionParams, "messageId", { required: true });
283
+ const messageId = readStringParam$1(actionParams, "messageId", { required: true });
289
284
  return await invoke({
290
285
  action: "reactions",
291
286
  channelId: resolveChannelId(),
@@ -299,17 +294,17 @@ async function handleSlackMessageAction(params) {
299
294
  action: "readMessages",
300
295
  channelId: resolveChannelId(),
301
296
  limit: actionParams.limit,
302
- before: readStringParam(actionParams, "before"),
303
- after: readStringParam(actionParams, "after"),
304
- messageId: readStringParam(actionParams, "messageId"),
297
+ before: readStringParam$1(actionParams, "before"),
298
+ after: readStringParam$1(actionParams, "after"),
299
+ messageId: readStringParam$1(actionParams, "messageId"),
305
300
  accountId
306
301
  };
307
- if (includeReadThreadId) readAction.threadId = readStringParam(actionParams, "threadId");
302
+ if (includeReadThreadId) readAction.threadId = readStringParam$1(actionParams, "threadId");
308
303
  return await invoke(readAction, cfg, ctx.toolContext);
309
304
  }
310
305
  if (action === "edit") {
311
- const messageId = readStringParam(actionParams, "messageId", { required: true });
312
- const content = readStringParam(actionParams, "message", { allowEmpty: true });
306
+ const messageId = readStringParam$1(actionParams, "messageId", { required: true });
307
+ const content = readStringParam$1(actionParams, "message", { allowEmpty: true });
313
308
  const presentation = normalizeMessagePresentation(actionParams.presentation);
314
309
  const renderedPresentation = renderSlackActionPresentation(presentation);
315
310
  const blocks = renderedPresentation.usesPresentationTextFallback ? void 0 : renderedPresentation.blocks;
@@ -317,7 +312,15 @@ async function handleSlackMessageAction(params) {
317
312
  text: content,
318
313
  presentation
319
314
  }) : resolveSlackPresentationText(content, presentation);
320
- if (renderedPresentation.usesPresentationTextFallback && countSlackTextUtf8Bytes(accessibleContent) > 4e3) throw new Error(`Slack presentation fallback exceeds the ${String(SLACK_EDIT_TEXT_MAX_BYTES)}-byte edit limit. Send a new message instead.`);
315
+ const tableMode = resolveMarkdownTableMode({
316
+ cfg,
317
+ channel: "slack",
318
+ accountId: accountId ?? resolveDefaultSlackAccountId(cfg)
319
+ });
320
+ if (!blocks && countSlackTextUtf8Bytes(normalizeSlackOutboundText(accessibleContent, { tableMode })) > 4e3) {
321
+ const editSubject = renderedPresentation.usesPresentationTextFallback ? "Slack presentation fallback" : "Slack edit";
322
+ throw new Error(`${editSubject} exceeds the ${String(SLACK_EDIT_TEXT_MAX_BYTES)}-byte edit limit. Send a new message instead.`);
323
+ }
321
324
  if (!accessibleContent && !blocks) throw new Error("Slack edit requires message or blocks.");
322
325
  return await invoke({
323
326
  action: "editMessage",
@@ -329,7 +332,7 @@ async function handleSlackMessageAction(params) {
329
332
  }, cfg, ctx.toolContext);
330
333
  }
331
334
  if (action === "delete") {
332
- const messageId = readStringParam(actionParams, "messageId", { required: true });
335
+ const messageId = readStringParam$1(actionParams, "messageId", { required: true });
333
336
  return await invoke({
334
337
  action: "deleteMessage",
335
338
  channelId: resolveChannelId(),
@@ -338,7 +341,7 @@ async function handleSlackMessageAction(params) {
338
341
  }, cfg, ctx.toolContext);
339
342
  }
340
343
  if (action === "pin" || action === "unpin" || action === "list-pins") {
341
- const messageId = action === "list-pins" ? void 0 : readStringParam(actionParams, "messageId", { required: true });
344
+ const messageId = action === "list-pins" ? void 0 : readStringParam$1(actionParams, "messageId", { required: true });
342
345
  return await invoke({
343
346
  action: action === "pin" ? "pinMessage" : action === "unpin" ? "unpinMessage" : "listPins",
344
347
  channelId: resolveChannelId(),
@@ -350,7 +353,7 @@ async function handleSlackMessageAction(params) {
350
353
  const requesterAccountId = ctx.requesterAccountId ? normalizeAccountId(ctx.requesterAccountId) : void 0;
351
354
  const targetAccountId = normalizeAccountId(accountId ?? resolveDefaultSlackAccountId(cfg));
352
355
  const requesterUserId = normalizeOptionalLowercaseString(ctx.toolContext?.currentChannelProvider) === "slack" && requesterAccountId !== void 0 && requesterAccountId === targetAccountId ? normalizeOptionalString(ctx.requesterSenderId) : void 0;
353
- const userId = readStringParam(actionParams, "userId") ?? requesterUserId;
356
+ const userId = readStringParam$1(actionParams, "userId") ?? requesterUserId;
354
357
  if (!userId) throw new Error("member-info requires a userId outside a current Slack conversation.");
355
358
  return await invoke({
356
359
  action: "memberInfo",
@@ -360,16 +363,16 @@ async function handleSlackMessageAction(params) {
360
363
  }
361
364
  if (action === "emoji-list") return await invoke({
362
365
  action: "emojiList",
363
- limit: readPositiveIntegerParam(actionParams, "limit", { message: "limit must be a positive integer." }),
366
+ limit: readPositiveIntegerParam$1(actionParams, "limit", { message: "limit must be a positive integer." }),
364
367
  accountId
365
368
  }, cfg, ctx.toolContext);
366
369
  if (action === "download-file") {
367
- const fileIdParam = readStringParam(actionParams, "fileId");
368
- const messageIdParam = readStringParam(actionParams, "messageId") ?? readStringParam(actionParams, "message_id");
370
+ const fileIdParam = readStringParam$1(actionParams, "fileId");
371
+ const messageIdParam = readStringParam$1(actionParams, "messageId") ?? readStringParam$1(actionParams, "message_id");
369
372
  if (!fileIdParam && messageIdParam) throw new Error("download-file requires fileId (the Slack file id, for example F0B0LTT8M36 from event.files[].id), not messageId. Did you mean to pass fileId? messageId is the Slack message timestamp and is used by react / reactions / edit / delete / pin / unpin actions, not download-file.");
370
- const fileId = readStringParam(actionParams, "fileId", { required: true });
371
- const channelId = readStringParam(actionParams, "channelId") ?? readStringParam(actionParams, "to");
372
- const threadId = readStringParam(actionParams, "threadId") ?? readStringParam(actionParams, "replyTo");
373
+ const fileId = readStringParam$1(actionParams, "fileId", { required: true });
374
+ const channelId = readStringParam$1(actionParams, "channelId") ?? readStringParam$1(actionParams, "to");
375
+ const threadId = readStringParam$1(actionParams, "threadId") ?? readStringParam$1(actionParams, "replyTo");
373
376
  return await invoke({
374
377
  action: "downloadFile",
375
378
  fileId,
@@ -380,18 +383,18 @@ async function handleSlackMessageAction(params) {
380
383
  }
381
384
  if (action === "upload-file") {
382
385
  if (readBooleanParam(actionParams, "replyBroadcast")) throw new Error("Slack replyBroadcast is only supported for text or block thread replies.");
383
- const to = readStringParam(actionParams, "to") ?? resolveChannelId();
384
- const filePath = readStringParam(actionParams, "filePath", { trim: false }) ?? readStringParam(actionParams, "path", { trim: false }) ?? readStringParam(actionParams, "media", { trim: false });
386
+ const to = readStringParam$1(actionParams, "to") ?? resolveChannelId();
387
+ const filePath = readStringParam$1(actionParams, "filePath", { trim: false }) ?? readStringParam$1(actionParams, "path", { trim: false }) ?? readStringParam$1(actionParams, "media", { trim: false });
385
388
  if (!filePath) throw new Error("upload-file requires filePath, path, or media");
386
- const threadId = readStringParam(actionParams, "threadId") ?? readStringParam(actionParams, "replyTo");
389
+ const threadId = readStringParam$1(actionParams, "threadId") ?? readStringParam$1(actionParams, "replyTo");
387
390
  const topLevel = readBooleanParam(actionParams, "topLevel") === true || actionParams.threadId === null;
388
391
  return await invoke({
389
392
  action: "uploadFile",
390
393
  to,
391
394
  filePath,
392
- initialComment: readStringParam(actionParams, "initialComment", { allowEmpty: true }) ?? readStringParam(actionParams, "message", { allowEmpty: true }) ?? "",
393
- filename: readStringParam(actionParams, "filename"),
394
- title: readStringParam(actionParams, "title"),
395
+ initialComment: readStringParam$1(actionParams, "initialComment", { allowEmpty: true }) ?? readStringParam$1(actionParams, "message", { allowEmpty: true }) ?? readStringParam$1(actionParams, "caption", { allowEmpty: true }) ?? "",
396
+ filename: readStringParam$1(actionParams, "filename"),
397
+ title: readStringParam$1(actionParams, "title"),
395
398
  threadTs: threadId ?? void 0,
396
399
  ...readSlackForceDocument(actionParams) ? { forceDocument: true } : {},
397
400
  ...topLevel ? { topLevel: true } : {},
@@ -411,7 +414,7 @@ const SLACK_TOOL_DELIVERY_ACTIONS = /* @__PURE__ */ new Set([
411
414
  "unpinMessage",
412
415
  "uploadFile"
413
416
  ]);
414
- const loadSlackActionRuntime$1 = createLazyRuntimeModule(() => import("./action-runtime.runtime-D9I6uc0Q.js"));
417
+ const loadSlackActionRuntime$1 = createLazyRuntimeModule(() => import("./action-runtime.runtime-BL3KzX13.js"));
415
418
  function resolveSlackActionContext(ctx, toolContext) {
416
419
  if (!toolContext && !ctx.mediaAccess && !ctx.mediaLocalRoots && !ctx.mediaReadFile && !ctx.conversationReadOrigin && !ctx.requesterAccountId && !ctx.requesterSenderId) return;
417
420
  return {
@@ -426,6 +429,7 @@ function resolveSlackActionContext(ctx, toolContext) {
426
429
  }
427
430
  function createSlackActions(providerId, options) {
428
431
  return {
432
+ providerOwnedReadGates: true,
429
433
  describeMessageTool: describeSlackMessageTool,
430
434
  extractToolSend: ({ args }) => extractSlackToolSend(args),
431
435
  isToolDeliveryAction: ({ args }) => typeof args.action === "string" && SLACK_TOOL_DELIVERY_ACTIONS.has(args.action),
@@ -464,6 +468,58 @@ function shouldUseWorkspaceAwareSlackActionSend(rawTarget, context) {
464
468
  return false;
465
469
  }
466
470
  //#endregion
471
+ //#region extensions/slack/src/conversation-route-owner.ts
472
+ function inspectSlackConversationRouteOwner(params) {
473
+ const installationKind = getSlackInstallationKind(params.accountId);
474
+ const direct = params.conversation.kind === "direct";
475
+ const target = parseSlackTarget(params.conversation.peerId, { defaultKind: direct ? "user" : "channel" });
476
+ if (!target || target.kind !== (direct ? "user" : "channel")) return null;
477
+ const targetIsEnterprise = Boolean(target.teamId);
478
+ if (!targetIsEnterprise && (installationKind === "degraded" || !installationKind)) return { kind: "unavailable" };
479
+ if (targetIsEnterprise && installationKind === "workspace") return null;
480
+ const contextTeamId = params.conversation.context?.teamId?.trim();
481
+ if (contextTeamId && target.teamId && contextTeamId.toLowerCase() !== target.teamId.toLowerCase()) return null;
482
+ const teamId = contextTeamId ?? target.teamId;
483
+ if (!direct && params.conversation.nativeChannelId && params.conversation.nativeChannelId.toLowerCase() !== target.id.toLowerCase()) return null;
484
+ const enterpriseRoute = installationKind === "enterprise" || targetIsEnterprise;
485
+ if (enterpriseRoute && !teamId) return null;
486
+ const enterpriseScope = enterpriseRoute && teamId ? { teamId } : void 0;
487
+ const route = resolveAgentRoute({
488
+ cfg: normalizeSlackRouteBindingConfig(params.cfg),
489
+ channel: "slack",
490
+ accountId: params.accountId,
491
+ teamId,
492
+ peer: {
493
+ kind: params.conversation.kind,
494
+ id: qualifySlackRoutePeerId({
495
+ id: target.id,
496
+ kind: direct ? "user" : "channel",
497
+ eventScope: enterpriseScope
498
+ })
499
+ }
500
+ });
501
+ const baseConversationId = qualifySlackConversationId(direct ? `user:${target.id}` : target.id, enterpriseScope);
502
+ const bindingRoute = resolveSlackConversationBindingRoute({
503
+ cfg: params.cfg,
504
+ route,
505
+ accountId: params.accountId,
506
+ baseConversationId,
507
+ runtimeBindingThreadId: params.conversation.threadId,
508
+ bindingsEnabled: !enterpriseRoute,
509
+ touchBinding: false
510
+ });
511
+ if (!bindingRoute.runtimeRoute.bindingOwnerAvailable) return { kind: "unavailable" };
512
+ if (bindingRoute.runtimeRoute.pluginId) return {
513
+ kind: "plugin",
514
+ pluginId: bindingRoute.runtimeRoute.pluginId,
515
+ fallbackAgentId: route.agentId
516
+ };
517
+ return {
518
+ kind: "agent",
519
+ agentId: bindingRoute.runtimeRoute.boundAgentId ?? bindingRoute.configuredRoute?.boundAgentId ?? route.agentId
520
+ };
521
+ }
522
+ //#endregion
467
523
  //#region extensions/slack/src/threading-tool-context.ts
468
524
  function buildSlackThreadingToolContext(params) {
469
525
  const account = resolveSlackAccount({
@@ -500,41 +556,23 @@ const EXTENSION_SHARED_MODULE_ID = "openclaw/plugin-sdk/extension-shared";
500
556
  const TARGET_RESOLVER_RUNTIME_MODULE_ID = "openclaw/plugin-sdk/target-resolver-runtime";
501
557
  const loadExtensionSharedSdk = createLazyRuntimeModule(() => import(EXTENSION_SHARED_MODULE_ID));
502
558
  const loadTargetResolverRuntimeSdk = createLazyRuntimeModule(() => import(TARGET_RESOLVER_RUNTIME_MODULE_ID));
503
- const loadSlackSetupSurfaceModule = createLazyRuntimeModule(() => import("./setup-surface-CbX1-Knh.js"));
504
- const loadSlackScopesModule = createLazyRuntimeModule(() => import("./scopes-cYXKkrRD.js"));
505
- const loadSlackOutboundAdapterModule = createLazyRuntimeModule(() => import("./outbound-adapter-S81tsswN.js"));
559
+ const loadSlackSetupSurfaceModule = createLazyRuntimeModule(() => import("./setup-surface-BGnd2pSe.js"));
560
+ const loadSlackScopesModule = createLazyRuntimeModule(() => import("./scopes-COSlmhnH.js"));
561
+ const loadSlackOutboundAdapterModule = createLazyRuntimeModule(() => import("./outbound-adapter-DYaI8ThX.js"));
506
562
  async function resolveSlackHandleAction() {
507
563
  return getOptionalSlackRuntime()?.channel?.slack?.handleSlackAction ?? (await loadSlackActionRuntime()).handleSlackAction;
508
564
  }
509
565
  function shouldTreatSlackDeliveredTextAsVisible(params) {
510
566
  return params.kind === "block" && typeof params.text === "string" && params.text.trim().length > 0;
511
567
  }
512
- const loadSlackDirectoryConfigModule = createLazyRuntimeModule(() => import("./directory-config-CNBz8lJa.js").then((n) => n.t));
513
- const loadSlackResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels-CNPrxaXY.js").then((n) => n.n));
514
- const loadSlackResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-Dzomuwnr.js").then((n) => n.n));
515
- const loadSlackActionRuntime = createLazyRuntimeModule(() => import("./action-runtime.runtime-D9I6uc0Q.js"));
516
- const loadSlackSendRuntime = createLazyRuntimeModule(() => import("./send.runtime-BmgNe6S9.js"));
517
- const loadSlackProbeModule = createLazyRuntimeModule(() => import("./probe-HoEg_WxB.js").then((n) => n.n));
518
- const loadSlackMonitorModule = createLazyRuntimeModule(() => import("./monitor-1nF1NtqT.js").then((n) => n.t));
519
- const loadSlackDirectoryLiveModule = createLazyRuntimeModule(() => import("./directory-live-CFKUtW9E.js").then((n) => n.t));
520
- async function resolveSlackSendContext(params) {
521
- const account = resolveSlackAccount({
522
- cfg: params.cfg,
523
- accountId: params.accountId
524
- });
525
- const target = parseSlackTarget(params.to, { defaultKind: "channel" });
526
- assertSlackDetachedTargetAllowed(account.accountId, target?.teamId);
527
- const send = resolveOutboundSendDep(params.deps, "slack") ?? (await loadSlackSendRuntime()).sendMessageSlack;
528
- const token = resolveSlackOperationToken(account, "write");
529
- const botToken = account.botToken?.trim();
530
- const tokenOverride = token && token !== botToken ? token : void 0;
531
- return {
532
- send,
533
- threadTsValue: resolveSlackThreadTsValue(params),
534
- tokenOverride,
535
- to: params.to
536
- };
537
- }
568
+ const loadSlackDirectoryConfigModule = createLazyRuntimeModule(() => import("./directory-config-DqfQ42OV.js").then((n) => n.t));
569
+ const loadSlackResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels-Czheznc8.js").then((n) => n.n));
570
+ const loadSlackResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-BAOlNimr.js").then((n) => n.n));
571
+ const loadSlackActionRuntime = createLazyRuntimeModule(() => import("./action-runtime.runtime-BL3KzX13.js"));
572
+ const loadSlackSendRuntime = createLazyRuntimeModule(() => import("./send.runtime-D_Bb6IuH.js"));
573
+ const loadSlackProbeModule = createLazyRuntimeModule(() => import("./probe-0usmAb0i.js").then((n) => n.n));
574
+ const loadSlackMonitorModule = createLazyRuntimeModule(() => import("./monitor-Dq5Cmrvp.js").then((n) => n.t));
575
+ const loadSlackDirectoryLiveModule = createLazyRuntimeModule(() => import("./directory-live-BPaNHjmP.js").then((n) => n.t));
538
576
  async function setSlackHeartbeatThreadStatus(params) {
539
577
  const threadTs = resolveSlackThreadTsValue({ threadId: params.threadId });
540
578
  const target = parseSlackTarget(params.to, { defaultKind: "channel" });
@@ -565,15 +603,6 @@ async function setSlackHeartbeatThreadStatus(params) {
565
603
  logVerbose(`slack heartbeat status update failed: ${formatSlackError(error)}`);
566
604
  }
567
605
  }
568
- function withSlackSendOverride(params) {
569
- return {
570
- ...params.deps,
571
- slack: async (to, text, opts) => await params.send(to, text, {
572
- ...opts,
573
- ...params.tokenOverride ? { token: params.tokenOverride } : {}
574
- })
575
- };
576
- }
577
606
  function resolveSlackRouteTarget(raw) {
578
607
  const target = parseSlackTarget(raw, { defaultKind: "channel" });
579
608
  if (!target) return null;
@@ -735,72 +764,16 @@ const slackChannelOutbound = {
735
764
  }
736
765
  }),
737
766
  sendPayload: async (ctx) => {
738
- const { send, threadTsValue, tokenOverride, to } = await resolveSlackSendContext({
739
- cfg: ctx.cfg,
740
- accountId: ctx.accountId ?? void 0,
741
- to: ctx.to,
742
- deps: ctx.deps,
743
- replyToId: ctx.replyToId,
744
- threadId: ctx.threadId
745
- });
746
767
  const { slackOutbound } = await loadSlackOutboundAdapterModule();
747
- return await slackOutbound.sendPayload({
748
- ...ctx,
749
- to,
750
- replyToId: threadTsValue,
751
- threadId: null,
752
- deliveryQueueId: void 0,
753
- deps: withSlackSendOverride({
754
- deps: ctx.deps,
755
- send,
756
- tokenOverride
757
- })
758
- });
768
+ return await slackOutbound.sendPayload(ctx);
759
769
  },
760
770
  sendText: async (ctx) => {
761
- const { send, threadTsValue, tokenOverride, to } = await resolveSlackSendContext({
762
- cfg: ctx.cfg,
763
- accountId: ctx.accountId ?? void 0,
764
- to: ctx.to,
765
- deps: ctx.deps,
766
- replyToId: ctx.replyToId,
767
- threadId: ctx.threadId
768
- });
769
771
  const { slackOutbound } = await loadSlackOutboundAdapterModule();
770
- return await slackOutbound.sendText({
771
- ...ctx,
772
- to,
773
- replyToId: threadTsValue,
774
- threadId: null,
775
- deps: withSlackSendOverride({
776
- deps: ctx.deps,
777
- send,
778
- tokenOverride
779
- })
780
- });
772
+ return await slackOutbound.sendText(ctx);
781
773
  },
782
774
  sendMedia: async (ctx) => {
783
- const { send, threadTsValue, tokenOverride, to } = await resolveSlackSendContext({
784
- cfg: ctx.cfg,
785
- accountId: ctx.accountId ?? void 0,
786
- to: ctx.to,
787
- deps: ctx.deps,
788
- replyToId: ctx.replyToId,
789
- threadId: ctx.threadId
790
- });
791
775
  const { slackOutbound } = await loadSlackOutboundAdapterModule();
792
- return await slackOutbound.sendMedia({
793
- ...ctx,
794
- to,
795
- replyToId: threadTsValue,
796
- threadId: null,
797
- deliveryQueueId: void 0,
798
- deps: withSlackSendOverride({
799
- deps: ctx.deps,
800
- send,
801
- tokenOverride
802
- })
803
- });
776
+ return await slackOutbound.sendMedia(ctx);
804
777
  }
805
778
  };
806
779
  const slackMessageAdapterBase = createChannelMessageAdapterFromOutbound({
@@ -886,6 +859,7 @@ const slackPlugin = createChatChannelPlugin({
886
859
  },
887
860
  conversationBindings: { isCurrentConversationBindingSupported: ({ accountId }) => isSlackWorkspaceInstallation(accountId) },
888
861
  messaging: {
862
+ resolveConversationRouteOwner: inspectSlackConversationRouteOwner,
889
863
  targetPrefixes: ["slack"],
890
864
  directTargetStyle: "user-prefixed",
891
865
  targetIdComparison: "lowercase",
@@ -1175,4 +1149,4 @@ const slackPlugin = createChatChannelPlugin({
1175
1149
  outbound: slackChannelOutbound
1176
1150
  });
1177
1151
  //#endregion
1178
- export { buildSlackThreadingToolContext as n, resolveSlackAutoThreadId as r, slackPlugin as t };
1152
+ export { buildSlackThreadingToolContext as n, slackPlugin as t };
@@ -1,2 +1,2 @@
1
- import { t as SlackChannelConfigSchema } from "./config-schema-xto5jFIx.js";
1
+ import { t as SlackChannelConfigSchema } from "./config-schema-BVIMyiDN.js";
2
2
  export { SlackChannelConfigSchema };
@@ -1,2 +1,2 @@
1
- import { t as slackPlugin } from "./channel-D_tovcUL.js";
1
+ import { t as slackPlugin } from "./channel-1vIJOzPx.js";
2
2
  export { slackPlugin };
@@ -1,13 +1,12 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
- import { a as resolveSlackAccount, l as resolveSlackOperationToken } from "./accounts-CK4AVI2_.js";
3
- import { p as assertSlackDetachedTargetAllowed, s as normalizeAllowListLower } from "./group-policy-c4RP9bjc.js";
4
- import { a as createSlackReadClient, c as createSlackWebClient } from "./probe-HoEg_WxB.js";
2
+ import { a as resolveSlackAccount, l as resolveSlackOperationToken } from "./accounts-Dm_H77gH.js";
3
+ import { c as assertSlackDetachedTargetAllowed } from "./group-policy-BdwszjYn.js";
4
+ import { g as createSlackReadClient, l as normalizeAllowListLower, y as createSlackWebClient } from "./probe-0usmAb0i.js";
5
5
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
6
6
  import { createHash } from "node:crypto";
7
7
  import { pruneMapToMaxSize } from "openclaw/plugin-sdk/collection-runtime";
8
8
  //#region extensions/slack/src/channel-type.ts
9
9
  var channel_type_exports = /* @__PURE__ */ __exportAll({
10
- resetSlackChannelTypeCacheForTest: () => resetSlackChannelTypeCacheForTest,
11
10
  resolveSlackChannelType: () => resolveSlackChannelType,
12
11
  resolveSlackConversationInfo: () => resolveSlackConversationInfo
13
12
  });
@@ -102,8 +101,5 @@ async function resolveSlackConversationInfo(params) {
102
101
  async function resolveSlackChannelType(params) {
103
102
  return (await resolveSlackConversationInfo(params)).type;
104
103
  }
105
- function resetSlackChannelTypeCacheForTest() {
106
- SLACK_CONVERSATION_INFO_CACHE.clear();
107
- }
108
104
  //#endregion
109
105
  export { resolveSlackChannelType as n, resolveSlackConversationInfo as r, channel_type_exports as t };