@openclaw/slack 2026.8.1-beta.2 → 2026.9.1-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) 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-BoSeX09X.js} +76 -83
  7. package/dist/action-runtime.runtime-Dpa16J87.js +2 -0
  8. package/dist/{actions-BTDXwwE3.js → actions-XdQyjG_p.js} +134 -262
  9. package/dist/api.js +14 -14
  10. package/dist/{approval-handler.runtime-CJaNzAq2.js → approval-handler.runtime-DxXfGX_Z.js} +53 -174
  11. package/dist/{channel-D_tovcUL.js → channel-C_vnTgxo.js} +117 -72
  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-j-2lalcC.js} +3 -7
  15. package/dist/{channel.setup-Bch9dYmA.js → channel.setup-aal8tokM.js} +34 -49
  16. package/dist/{config-schema-xto5jFIx.js → config-schema-CN3XZRX5.js} +23 -7
  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-lC6X_Ru-.js} +2 -2
  22. package/dist/{group-policy-c4RP9bjc.js → group-policy-CU1tEGpS.js} +583 -642
  23. package/dist/{message-tool-api-BykQB4AU.js → message-tool-api-CWosHSi5.js} +6 -5
  24. package/dist/message-tool-api.js +1 -1
  25. package/dist/{monitor-1nF1NtqT.js → monitor-DrNCGneD.js} +3 -3
  26. package/dist/{outbound-adapter-S81tsswN.js → outbound-adapter-DkT2vUE9.js} +50 -19
  27. package/dist/{pipeline.runtime-BvYsM5JO.js → pipeline.runtime-CRRng_Nw.js} +440 -451
  28. package/dist/{policy-TapwbeaT.js → policy-BoP6t88v.js} +1 -1
  29. package/dist/{probe-HoEg_WxB.js → probe-4_aHtVT3.js} +2 -21
  30. package/dist/{provider-CDNvBXUi.js → provider-D4nDgxCh.js} +240 -95
  31. package/dist/{relay-source-C9leF11u.js → relay-source-CEmze11m.js} +1 -1
  32. package/dist/{replies-CeOfv82I.js → replies-D9XMM_S0.js} +47 -26
  33. package/dist/{resolve-channels-CNPrxaXY.js → resolve-channels-DSamDgVs.js} +1 -1
  34. package/dist/{resolve-users-Dzomuwnr.js → resolve-users-CIzwbaJR.js} +1 -1
  35. package/dist/runtime-api.js +11 -11
  36. package/dist/{scopes-cYXKkrRD.js → scopes-BBrUzpBH.js} +1 -1
  37. package/dist/security-contract-api.js +1 -1
  38. package/dist/{send-Nor0iBwY.js → send-DtjEnlLh.js} +86 -98
  39. package/dist/{send.runtime-BmgNe6S9.js → send.runtime-DQeNKa2J.js} +1 -1
  40. package/dist/setup-plugin-api.js +1 -1
  41. package/dist/{setup-surface-CbX1-Knh.js → setup-surface-CsBCM4rP.js} +6 -6
  42. package/dist/{shared-zdT5AMp-.js → shared-D9GeeR9K.js} +33 -9
  43. package/dist/{block-text-YtiNkqmx.js → slack-client-kind-hSfjXyUM.js} +17 -2
  44. package/dist/{slash-dispatch.runtime-Bnr9GR1S.js → slash-dispatch.runtime-Chr3YHnT.js} +3 -3
  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 +43 -1
  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/runtime-api-Cj9nxBNv.js +0 -10
  230. package/node_modules/p-map/index.d.ts +0 -155
  231. package/node_modules/p-map/index.js +0 -285
  232. package/node_modules/p-map/license +0 -9
  233. package/node_modules/p-map/package.json +0 -57
  234. package/node_modules/p-map/readme.md +0 -190
  235. package/node_modules/typebox/build/format/_idna.d.mts +0 -2
  236. package/node_modules/typebox/build/format/_idna.mjs +0 -246
  237. package/node_modules/typebox/build/format/_puny.d.mts +0 -1
  238. package/node_modules/typebox/build/format/_puny.mjs +0 -77
  239. package/node_modules/typebox/build/schema/resolve/ref.d.mts +0 -3
  240. package/node_modules/typebox/build/schema/resolve/ref.mjs +0 -146
  241. package/node_modules/typebox/build/schema/types/contentEncoding.d.mts +0 -9
  242. package/node_modules/typebox/build/schema/types/contentEncoding.mjs +0 -13
  243. package/node_modules/typebox/build/schema/types/contentMediaType.d.mts +0 -9
  244. package/node_modules/typebox/build/schema/types/contentMediaType.mjs +0 -13
  245. package/dist/{security-audit-DR097212.js → security-audit-B_yKr7MW.js} +1 -1
@@ -0,0 +1,33 @@
1
+ import { hasConfiguredAccountValue } from "openclaw/plugin-sdk/account-resolution";
2
+ import { hasConfiguredSecretInput } from "openclaw/plugin-sdk/secret-input";
3
+ //#region extensions/slack/src/account-configured.ts
4
+ function hasSlackAccountCredentials(params) {
5
+ if (!params.identityTokenConfigured) return false;
6
+ const mode = params.config.mode ?? "socket";
7
+ if (mode === "http") return hasConfiguredAccountValue(params.config.signingSecret);
8
+ if (mode === "relay") {
9
+ const relay = params.config.relay;
10
+ return hasConfiguredAccountValue(relay?.url) && hasConfiguredAccountValue(relay?.authToken) && hasConfiguredAccountValue(relay?.gatewayId);
11
+ }
12
+ return params.appTokenConfigured;
13
+ }
14
+ function isSlackPluginAccountConfigured(account) {
15
+ const identityToken = account.identity === "user" ? account.userToken : account.botToken;
16
+ return hasSlackAccountCredentials({
17
+ config: account.config,
18
+ identityTokenConfigured: Boolean(identityToken?.trim()),
19
+ appTokenConfigured: Boolean(account.appToken?.trim())
20
+ });
21
+ }
22
+ function isSlackSetupAccountConfigured(account) {
23
+ if (account.config.mode === "relay") return isSlackPluginAccountConfigured(account);
24
+ const identityToken = account.identity === "user" ? account.userToken : account.botToken;
25
+ const configuredIdentityToken = account.identity === "user" ? account.config.userToken : account.config.botToken;
26
+ return hasSlackAccountCredentials({
27
+ config: account.config,
28
+ identityTokenConfigured: Boolean(identityToken?.trim()) || hasConfiguredSecretInput(configuredIdentityToken),
29
+ appTokenConfigured: Boolean(account.appToken?.trim()) || hasConfiguredSecretInput(account.config.appToken)
30
+ });
31
+ }
32
+ //#endregion
33
+ export { isSlackPluginAccountConfigured as n, isSlackSetupAccountConfigured as r, hasSlackAccountCredentials as t };
@@ -0,0 +1,87 @@
1
+ import { t as hasSlackAccountCredentials } from "./account-configured-sUohAxZr.js";
2
+ import { i as resolveDefaultSlackAccountId, r as mergeSlackAccountConfig } from "./accounts-Dm_H77gH.js";
3
+ import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
4
+ import { hasConfiguredSecretInput, normalizeSecretInputString } from "openclaw/plugin-sdk/secret-input";
5
+ import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
6
+ //#region extensions/slack/src/account-inspect.ts
7
+ function inspectSlackToken(value) {
8
+ const token = normalizeSecretInputString(value);
9
+ if (token) return {
10
+ token,
11
+ source: "config",
12
+ status: "available"
13
+ };
14
+ if (hasConfiguredSecretInput(value)) return {
15
+ source: "config",
16
+ status: "configured_unavailable"
17
+ };
18
+ return {
19
+ source: "none",
20
+ status: "missing"
21
+ };
22
+ }
23
+ function resolveInspectedSlackToken(configured, envToken) {
24
+ return configured.status === "missing" && envToken ? {
25
+ token: envToken,
26
+ source: "env",
27
+ status: "available"
28
+ } : configured;
29
+ }
30
+ function inspectSlackAccount(params) {
31
+ const accountId = normalizeAccountId(params.accountId ?? resolveDefaultSlackAccountId(params.cfg));
32
+ const merged = mergeSlackAccountConfig(params.cfg, accountId);
33
+ const enabled = params.cfg.channels?.slack?.enabled !== false && merged.enabled !== false;
34
+ const allowEnv = accountId === DEFAULT_ACCOUNT_ID;
35
+ const mode = merged.mode ?? "socket";
36
+ const identity = merged.postAs ?? "bot";
37
+ const isHttpMode = mode === "http";
38
+ const isRelayMode = mode === "relay";
39
+ const configBot = inspectSlackToken(merged.botToken);
40
+ const configApp = inspectSlackToken(merged.appToken);
41
+ const configSigningSecret = inspectSlackToken(merged.signingSecret);
42
+ const configUser = inspectSlackToken(merged.userToken);
43
+ const envBot = allowEnv ? normalizeSecretInputString(params.envBotToken ?? process.env.SLACK_BOT_TOKEN) : void 0;
44
+ const envApp = allowEnv && !isRelayMode ? normalizeSecretInputString(params.envAppToken ?? process.env.SLACK_APP_TOKEN) : void 0;
45
+ const envUser = allowEnv ? normalizeSecretInputString(params.envUserToken ?? process.env.SLACK_USER_TOKEN) : void 0;
46
+ const botCredential = resolveInspectedSlackToken(configBot, envBot);
47
+ const appCredential = resolveInspectedSlackToken(configApp, envApp);
48
+ const userCredential = resolveInspectedSlackToken(configUser, envUser);
49
+ return {
50
+ accountId,
51
+ enabled,
52
+ ...identity === "user" ? { identity } : {},
53
+ name: normalizeOptionalString(merged.name),
54
+ mode,
55
+ botToken: botCredential.token,
56
+ appToken: appCredential.token,
57
+ ...isHttpMode ? { signingSecret: configSigningSecret.token } : {},
58
+ userToken: userCredential.token,
59
+ botTokenSource: botCredential.source,
60
+ appTokenSource: appCredential.source,
61
+ ...isHttpMode ? { signingSecretSource: configSigningSecret.source } : {},
62
+ userTokenSource: userCredential.source,
63
+ botTokenStatus: botCredential.status,
64
+ appTokenStatus: appCredential.status,
65
+ ...isHttpMode ? { signingSecretStatus: configSigningSecret.status } : {},
66
+ userTokenStatus: userCredential.status,
67
+ configured: hasSlackAccountCredentials({
68
+ config: merged,
69
+ identityTokenConfigured: (identity === "user" ? userCredential : botCredential).status !== "missing",
70
+ appTokenConfigured: appCredential.status !== "missing"
71
+ }),
72
+ config: merged,
73
+ groupPolicy: merged.groupPolicy,
74
+ textChunkLimit: merged.textChunkLimit,
75
+ mediaMaxMb: merged.mediaMaxMb,
76
+ reactionNotifications: merged.reactionNotifications,
77
+ reactionAllowlist: merged.reactionAllowlist,
78
+ replyToMode: merged.replyToMode,
79
+ replyToModeByChatType: merged.replyToModeByChatType,
80
+ actions: merged.actions,
81
+ slashCommand: merged.slashCommand,
82
+ dm: merged.dm,
83
+ channels: merged.channels
84
+ };
85
+ }
86
+ //#endregion
87
+ export { inspectSlackAccount as t };
@@ -1,4 +1,4 @@
1
- import { t as inspectSlackAccount } from "./account-inspect-Drw2gAiN.js";
1
+ import { t as inspectSlackAccount } from "./account-inspect-CN2hBsim.js";
2
2
  //#region extensions/slack/account-inspect-api.ts
3
3
  function inspectSlackReadOnlyAccount(cfg, accountId) {
4
4
  return inspectSlackAccount({
@@ -1,3 +1,4 @@
1
+ import { t as hasSlackAccountCredentials } from "./account-configured-sUohAxZr.js";
1
2
  import { DEFAULT_ACCOUNT_ID, createAccountListHelpers, hasConfiguredAccountValue, normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
2
3
  import { normalizeResolvedSecretInputString } from "openclaw/plugin-sdk/secret-input";
3
4
  import { asOptionalRecord, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -39,19 +40,19 @@ function resolveSlackOperationToken(account, operation) {
39
40
  return account.config.userTokenReadOnly === false ? botToken ?? userToken : botToken;
40
41
  }
41
42
  const { listAccountIds, resolveDefaultAccountId, resolveAccountConfig: resolveMergedSlackAccountConfig } = createAccountListHelpers("slack", {
42
- nestedObjectKeys: ["botLoopProtection", "relay"],
43
+ nestedObjectKeys: [
44
+ "botLoopProtection",
45
+ "presenceEvents",
46
+ "relay"
47
+ ],
43
48
  hasImplicitDefaultAccount: (cfg) => {
44
49
  const slack = cfg.channels?.slack;
45
- if (slack?.postAs === "user") {
46
- if (!(hasConfiguredAccountValue(slack.userToken) || hasConfiguredAccountValue(process.env.SLACK_USER_TOKEN))) return false;
47
- if (slack.mode === "http") return hasConfiguredAccountValue(slack.signingSecret);
48
- if (slack.mode === "relay") return hasConfiguredAccountValue(slack.relay?.url) && hasConfiguredAccountValue(slack.relay?.authToken) && hasConfiguredAccountValue(slack.relay?.gatewayId);
49
- return hasConfiguredAccountValue(slack.appToken) || hasConfiguredAccountValue(process.env.SLACK_APP_TOKEN);
50
- }
51
- if (!(hasConfiguredAccountValue(slack?.botToken) || hasConfiguredAccountValue(process.env.SLACK_BOT_TOKEN))) return false;
52
- if (slack?.mode === "http") return hasConfiguredAccountValue(slack.signingSecret);
53
- if (slack?.mode === "relay") return hasConfiguredAccountValue(slack.relay?.url) && hasConfiguredAccountValue(slack.relay?.authToken) && hasConfiguredAccountValue(slack.relay?.gatewayId);
54
- return hasConfiguredAccountValue(slack?.appToken) || hasConfiguredAccountValue(process.env.SLACK_APP_TOKEN);
50
+ const userIdentity = slack?.postAs === "user";
51
+ return hasSlackAccountCredentials({
52
+ config: slack ?? {},
53
+ identityTokenConfigured: hasConfiguredAccountValue(userIdentity ? slack?.userToken : slack?.botToken) || hasConfiguredAccountValue(userIdentity ? process.env.SLACK_USER_TOKEN : process.env.SLACK_BOT_TOKEN),
54
+ appTokenConfigured: hasConfiguredAccountValue(slack?.appToken) || hasConfiguredAccountValue(process.env.SLACK_APP_TOKEN)
55
+ });
55
56
  }
56
57
  });
57
58
  const listSlackAccountIds = listAccountIds;
@@ -1,2 +1,2 @@
1
- import { a as resolveSlackAccount, l as resolveSlackOperationToken, o as resolveSlackAccountAllowFrom } from "./accounts-CK4AVI2_.js";
1
+ import { a as resolveSlackAccount, l as resolveSlackOperationToken, o as resolveSlackAccountAllowFrom } from "./accounts-Dm_H77gH.js";
2
2
  export { resolveSlackAccount, resolveSlackAccountAllowFrom, resolveSlackOperationToken };
@@ -1,13 +1,13 @@
1
1
  import { a as parseSlackTarget, n as formatSlackTarget, o as resolveSlackChannelId } from "./target-parsing-BnMD2ZqZ.js";
2
2
  import { t as slackContextTargetsMatch } from "./targets-Cx5W_n3W.js";
3
- import { St as getSlackInstallationKind, T as hasSlackNativeDataBlock, lt as parseSlackBlocksInput, p as assertSlackDetachedTargetAllowed, t as buildSlackChannelIdCandidates } from "./group-policy-c4RP9bjc.js";
4
- import { a as readPositiveIntegerParam, c as withNormalizedTimestamp, n as imageResultFromFile, o as readReactionParams, r as jsonResult, s as readStringParam, t as createActionGate } from "./runtime-api-Cj9nxBNv.js";
5
- import { n as resolveSlackChannelConfig, t as isSlackChannelAllowedByPolicy } from "./policy-TapwbeaT.js";
3
+ import { Dt as getSlackInstallationKind, O as hasSlackNativeDataBlock, Rt as SLACK_PRIVATE_ACTION_DELIVERY_RESULT, g as assertSlackDetachedTargetAllowed, mt as parseSlackBlocksInput, t as buildSlackChannelIdCandidates, zt as resolveSlackAutoThreadId } from "./group-policy-CU1tEGpS.js";
4
+ import { n as resolveSlackChannelConfig, t as isSlackChannelAllowedByPolicy } from "./policy-BoP6t88v.js";
6
5
  import { normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
7
6
  import { normalizeOptionalLowercaseString } from "openclaw/plugin-sdk/string-coerce-runtime";
8
7
  import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
9
8
  import { isSingleUseReplyToMode } from "openclaw/plugin-sdk/reply-reference";
10
9
  import { readBooleanParam } from "openclaw/plugin-sdk/boolean-param";
10
+ import { createActionGate, imageResultFromFile, jsonResult, readPositiveIntegerParam, readReactionParams, readStringParam, withNormalizedTimestamp } from "openclaw/plugin-sdk/channel-actions";
11
11
  import { resolveOpenProviderRuntimeGroupPolicy } from "openclaw/plugin-sdk/runtime-group-policy";
12
12
  //#region extensions/slack/src/action-runtime.ts
13
13
  const messagingActions = /* @__PURE__ */ new Set([
@@ -24,10 +24,10 @@ const pinActions = /* @__PURE__ */ new Set([
24
24
  "unpinMessage",
25
25
  "listPins"
26
26
  ]);
27
- const SLACK_REACTION_USER_LIMIT = 100;
28
- const loadSlackActionsRuntime = createLazyRuntimeModule(() => import("./actions.runtime-DLFyUkvg.js"));
29
- const loadSlackAccountsRuntime = createLazyRuntimeModule(() => import("./accounts.runtime-Cb7QwWBz.js"));
30
- const loadSlackChannelTypeRuntime = createLazyRuntimeModule(() => import("./channel-type-B9MSdoGN.js").then((n) => n.t));
27
+ const SLACK_REACTION_RESULT_LIMIT = 100;
28
+ const loadSlackActionsRuntime = createLazyRuntimeModule(() => import("./actions-XdQyjG_p.js").then((n) => n.t));
29
+ const loadSlackAccountsRuntime = createLazyRuntimeModule(() => import("./accounts.runtime-DRuEK6mL.js"));
30
+ const loadSlackChannelTypeRuntime = createLazyRuntimeModule(() => import("./channel-type-j-2lalcC.js").then((n) => n.t));
31
31
  function createLazySlackAction(key) {
32
32
  return (async (...args) => {
33
33
  const action = (await loadSlackActionsRuntime())[key];
@@ -54,26 +54,15 @@ const slackActionRuntime = {
54
54
  sendSlackMessage: createLazySlackAction("sendSlackMessage"),
55
55
  unpinSlackMessage: createLazySlackAction("unpinSlackMessage")
56
56
  };
57
- /**
58
- * Resolve threadTs for a Slack message based on context and replyToMode.
59
- * - "all": always inject threadTs
60
- * - "first"/"batched": inject only for the first eligible message (updates hasRepliedRef)
61
- * - "off": never auto-inject
62
- */
63
57
  function resolveThreadTsFromContext(explicitThreadTs, targetChannel, context, opts) {
64
58
  if (explicitThreadTs) return explicitThreadTs;
65
59
  if (opts?.suppressImplicitThread) return;
66
- if (!context?.currentChannelId && !context?.currentMessagingTarget) return;
67
- if (!slackContextTargetsMatch(targetChannel, context)) return;
68
- if (!context.currentThreadTs) {
69
- 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.");
70
- return;
71
- }
72
- if (context.replyToMode === "all") return context.currentThreadTs;
73
- if (isSingleUseReplyToMode(context.replyToMode ?? "off") && context.hasRepliedRef && !context.hasRepliedRef.value) {
74
- context.hasRepliedRef.value = true;
75
- return context.currentThreadTs;
76
- }
60
+ const threadTs = resolveSlackAutoThreadId({
61
+ to: targetChannel,
62
+ toolContext: context
63
+ });
64
+ if (isSingleUseReplyToMode(context?.replyToMode ?? "off") && !context?.hasRepliedRef) return;
65
+ return threadTs;
77
66
  }
78
67
  function readSlackBlocksParam(params) {
79
68
  return slackActionRuntime.parseSlackBlocksInput(params.blocks);
@@ -340,7 +329,7 @@ async function handleSlackAction(params, cfg, context) {
340
329
  });
341
330
  }
342
331
  await assertReadTargetAllowed(target);
343
- const limit = Math.min(readPositiveIntegerParam(params, "limit", { message: "limit must be a positive integer." }) ?? SLACK_REACTION_USER_LIMIT, SLACK_REACTION_USER_LIMIT);
332
+ const limit = Math.min(readPositiveIntegerParam(params, "limit", { message: "limit must be a positive integer." }) ?? SLACK_REACTION_RESULT_LIMIT, SLACK_REACTION_RESULT_LIMIT);
344
333
  return jsonResult({
345
334
  ok: true,
346
335
  reactions: (await slackActionRuntime.listSlackReactions(channelId, messageId, readOpts))?.map((reaction) => reaction.users ? Object.assign({}, reaction, { users: reaction.users.slice(0, limit) }) : reaction)
@@ -348,6 +337,17 @@ async function handleSlackAction(params, cfg, context) {
348
337
  }
349
338
  if (messagingActions.has(action)) {
350
339
  if (!isActionEnabled("messages")) throw new Error("Slack messages are disabled.");
340
+ const sendSlackMessage = async (target, content, options) => {
341
+ const replyReference = context?.hasRepliedRef && slackContextTargetsMatch(target, context) ? context.hasRepliedRef : void 0;
342
+ const result = await slackActionRuntime.sendSlackMessage(target, content, {
343
+ ...options,
344
+ ...replyReference ? { [SLACK_PRIVATE_ACTION_DELIVERY_RESULT]: () => {
345
+ replyReference.value = true;
346
+ } } : {}
347
+ });
348
+ if (replyReference) replyReference.value = true;
349
+ return result;
350
+ };
351
351
  switch (action) {
352
352
  case "sendMessage": {
353
353
  const destination = resolveSlackActionTarget(account, readStringParam(params, "to", { required: true }), context).routingTarget;
@@ -385,48 +385,46 @@ async function handleSlackAction(params, cfg, context) {
385
385
  const shouldSplitLongContent = content && content.length > 8e3 && !hasSlackNativeDataBlock(blocks);
386
386
  if (content && shouldSplitLongContent) {
387
387
  const { replyBroadcast: _replyBroadcast, ...blockSendOpts } = sendOpts;
388
- await slackActionRuntime.sendSlackMessage(destination, "", {
388
+ await sendSlackMessage(destination, "", {
389
389
  ...blockSendOpts,
390
390
  blocks
391
391
  });
392
- return await slackActionRuntime.sendSlackMessage(destination, content, sendOpts);
392
+ return await sendSlackMessage(destination, content, sendOpts);
393
393
  }
394
- return await slackActionRuntime.sendSlackMessage(destination, content ?? "", {
394
+ return await sendSlackMessage(destination, content ?? "", {
395
395
  ...sendOpts,
396
396
  blocks
397
397
  });
398
398
  };
399
- const result = preparedMessages?.length ? await (async () => {
400
- let lastResult;
401
- if (mediaUrl) lastResult = await slackActionRuntime.sendSlackMessage(destination, "", {
402
- ...baseSendOpts,
403
- mediaUrl
404
- });
405
- for (const [index, message] of preparedMessages.entries()) lastResult = await slackActionRuntime.sendSlackMessage(destination, message.text, {
406
- ...baseSendOpts,
407
- ...index === 0 && replyBroadcast ? { replyBroadcast: true } : {},
408
- ...message.blocks ? { blocks: message.blocks } : {},
409
- ...message.authoredTextPlacement ? { authoredTextPlacement: message.authoredTextPlacement } : {},
410
- ...Object.hasOwn(message, "nativeDataFallbackBaseText") ? { nativeDataFallbackBaseText: message.nativeDataFallbackBaseText } : {},
411
- ...message.textIsSlackPlainText ? { textIsSlackPlainText: true } : {}
412
- });
413
- if (!lastResult) throw new Error("Slack prepared message plan produced no delivery.");
414
- return lastResult;
415
- })() : blocks ? await (async () => {
416
- if (mediaUrl) await slackActionRuntime.sendSlackMessage(destination, "", {
417
- ...sendOpts,
418
- mediaUrl
419
- });
420
- return await sendContentAndBlocks();
421
- })() : await slackActionRuntime.sendSlackMessage(destination, content ?? "", {
422
- ...sendOpts,
423
- mediaUrl: mediaUrl ?? void 0,
424
- blocks
425
- });
426
- if (context?.hasRepliedRef && slackContextTargetsMatch(destination, context)) context.hasRepliedRef.value = true;
427
399
  return jsonResult({
428
400
  ok: true,
429
- result
401
+ result: preparedMessages?.length ? await (async () => {
402
+ let lastResult;
403
+ if (mediaUrl) lastResult = await sendSlackMessage(destination, "", {
404
+ ...baseSendOpts,
405
+ mediaUrl
406
+ });
407
+ for (const [index, message] of preparedMessages.entries()) lastResult = await sendSlackMessage(destination, message.text, {
408
+ ...baseSendOpts,
409
+ ...index === 0 && replyBroadcast ? { replyBroadcast: true } : {},
410
+ ...message.blocks ? { blocks: message.blocks } : {},
411
+ ...message.authoredTextPlacement ? { authoredTextPlacement: message.authoredTextPlacement } : {},
412
+ ...Object.hasOwn(message, "nativeDataFallbackBaseText") ? { nativeDataFallbackBaseText: message.nativeDataFallbackBaseText } : {},
413
+ ...message.textIsSlackPlainText ? { textIsSlackPlainText: true } : {}
414
+ });
415
+ if (!lastResult) throw new Error("Slack prepared message plan produced no delivery.");
416
+ return lastResult;
417
+ })() : blocks ? await (async () => {
418
+ if (mediaUrl) await sendSlackMessage(destination, "", {
419
+ ...sendOpts,
420
+ mediaUrl
421
+ });
422
+ return await sendContentAndBlocks();
423
+ })() : await sendSlackMessage(destination, content ?? "", {
424
+ ...sendOpts,
425
+ mediaUrl: mediaUrl ?? void 0,
426
+ blocks
427
+ })
430
428
  });
431
429
  }
432
430
  case "uploadFile": {
@@ -441,21 +439,19 @@ async function handleSlackAction(params, cfg, context) {
441
439
  const forceDocument = readBooleanParam(params, "forceDocument") === true;
442
440
  if (readBooleanParam(params, "replyBroadcast")) throw new Error("Slack replyBroadcast is only supported for text or block thread replies.");
443
441
  const threadTs = resolveThreadTsFromContext(readStringParam(params, "threadTs"), destination, context, { suppressImplicitThread: params.topLevel === true || params.threadTs === null });
444
- const result = await slackActionRuntime.sendSlackMessage(destination, initialComment ?? "", {
445
- ...buildActionOpts("write"),
446
- mediaUrl: filePath,
447
- mediaAccess: context?.mediaAccess,
448
- mediaLocalRoots: context?.mediaLocalRoots,
449
- mediaReadFile: context?.mediaReadFile,
450
- threadTs: threadTs ?? void 0,
451
- ...forceDocument ? { forceDocument: true } : {},
452
- ...filename ? { uploadFileName: filename } : {},
453
- ...title ? { uploadTitle: title } : {}
454
- });
455
- if (context?.hasRepliedRef && slackContextTargetsMatch(destination, context)) context.hasRepliedRef.value = true;
456
442
  return jsonResult({
457
443
  ok: true,
458
- result
444
+ result: await sendSlackMessage(destination, initialComment ?? "", {
445
+ ...buildActionOpts("write"),
446
+ mediaUrl: filePath,
447
+ mediaAccess: context?.mediaAccess,
448
+ mediaLocalRoots: context?.mediaLocalRoots,
449
+ mediaReadFile: context?.mediaReadFile,
450
+ threadTs: threadTs ?? void 0,
451
+ ...forceDocument ? { forceDocument: true } : {},
452
+ ...filename ? { uploadFileName: filename } : {},
453
+ ...title ? { uploadTitle: title } : {}
454
+ })
459
455
  });
460
456
  }
461
457
  case "editMessage": {
@@ -529,7 +525,7 @@ async function handleSlackAction(params, cfg, context) {
529
525
  });
530
526
  if (!downloaded) return jsonResult({
531
527
  ok: false,
532
- error: "File could not be downloaded (not found, too large, or inaccessible)."
528
+ error: "File could not be downloaded. Confirm the fileId came from the requested Slack channel or explicit thread and that the file is accessible and within the size limit."
533
529
  });
534
530
  if (!isImageContentType(downloaded.contentType)) return jsonResult({
535
531
  ok: true,
@@ -605,26 +601,23 @@ async function handleSlackAction(params, cfg, context) {
605
601
  }
606
602
  if (action === "emojiList") {
607
603
  if (!isActionEnabled("emojiList")) throw new Error("Slack emoji list is disabled.");
608
- const limit = readPositiveIntegerParam(params, "limit", { message: "limit must be a positive integer." });
604
+ const limit = Math.min(readPositiveIntegerParam(params, "limit", { message: "limit must be a positive integer." }) ?? SLACK_REACTION_RESULT_LIMIT, SLACK_REACTION_RESULT_LIMIT);
609
605
  const teamId = resolveTrustedCurrentSlackTeamId({
610
606
  account,
611
607
  context
612
608
  });
613
609
  assertSlackDetachedTargetAllowed(account.accountId, teamId);
614
610
  const result = await slackActionRuntime.listSlackEmojis(buildActionOpts("read", teamId));
615
- if (limit != null && limit > 0 && result.emoji != null) {
616
- const entries = Object.entries(result.emoji).toSorted(([a], [b]) => a.localeCompare(b));
617
- if (entries.length > limit) return jsonResult({
618
- ok: true,
619
- emojis: {
620
- ...result,
621
- emoji: Object.fromEntries(entries.slice(0, limit))
622
- }
623
- });
624
- }
625
611
  return jsonResult({
626
612
  ok: true,
627
- emojis: result
613
+ emojis: Object.entries(result.emoji ?? {}).toSorted(([left], [right]) => left.localeCompare(right)).slice(0, limit).map(([name, value]) => value.startsWith("alias:") ? {
614
+ name,
615
+ identifier: name,
616
+ aliasOf: value.slice(6)
617
+ } : {
618
+ name,
619
+ identifier: name
620
+ })
628
621
  });
629
622
  }
630
623
  throw new Error(`Unknown action: ${action}`);
@@ -0,0 +1,2 @@
1
+ import { t as handleSlackAction } from "./action-runtime-BoSeX09X.js";
2
+ export { handleSlackAction };