@openclaw/slack 2026.9.1 → 2026.9.2

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 (70) hide show
  1. package/dist/{action-runtime-DND4Pyp2.js → action-runtime-DftQWpI4.js} +4 -4
  2. package/dist/action-runtime.runtime-rHI3UAh4.js +2 -0
  3. package/dist/{actions-fh66A6lc.js → actions-CFkvEv1d.js} +3 -3
  4. package/dist/api.js +9 -9
  5. package/dist/{approval-handler.runtime-D7d8sKM0.js → approval-handler.runtime-BeILKdw4.js} +31 -15
  6. package/dist/{channel-4m8IAdMD.js → channel-CmOuxbOD.js} +24 -23
  7. package/dist/channel-config-api.js +1 -1
  8. package/dist/channel-plugin-api.js +1 -1
  9. package/dist/{channel-type-3-SqEMVc.js → channel-type-BWt2CRaI.js} +2 -2
  10. package/dist/{channel.setup-t_ghLGb_.js → channel.setup-D5z1ReaT.js} +8 -3
  11. package/dist/{config-schema-bP3eV2ra.js → config-schema-JDx_f9Zb.js} +2 -2
  12. package/dist/{directory-live-q32AW7N1.js → directory-live-BuBPHmju.js} +1 -1
  13. package/dist/{monitor-Chwu_SiZ.js → monitor-DI07pfJl.js} +3 -3
  14. package/dist/{outbound-adapter-BB8wAjm5.js → outbound-adapter-B5QyTRpJ.js} +3 -2
  15. package/dist/{pipeline.runtime-BklS_NEj.js → pipeline.runtime-BdIwZgm4.js} +567 -733
  16. package/dist/{policy-D7PKkiet.js → policy-Bh5TOqII.js} +2 -2
  17. package/dist/{probe-gj5yQgN2.js → probe-Biy--yhL.js} +42 -10
  18. package/dist/{provider-Do50wMWn.js → provider-DoaUvAM4.js} +5583 -4921
  19. package/dist/{relay-source-DWuduiJ2.js → relay-source-D4uecp68.js} +1 -1
  20. package/dist/{replies-Dc6WVh_Q.js → replies-DENuTcPO.js} +4 -3
  21. package/dist/reply-blocks-PRkhyAN7.js +790 -0
  22. package/dist/{resolve-channels-CU7Bg5Ka.js → resolve-channels-DQGV2VrE.js} +1 -1
  23. package/dist/{resolve-users-DrhttvRQ.js → resolve-users-DRGt_Q4I.js} +1 -1
  24. package/dist/runtime-api.js +10 -10
  25. package/dist/{scopes-B9HRguDe.js → scopes-CZzeGdWV.js} +1 -1
  26. package/dist/{send-Djswy6lf.js → send-DElUcgIs.js} +10 -10
  27. package/dist/{send.runtime-__WVTWLQ.js → send.runtime-C8D6cKGm.js} +1 -1
  28. package/dist/{group-policy-BKjMqT-8.js → session-status-BynwcZSO.js} +169 -799
  29. package/dist/setup-plugin-api.js +1 -1
  30. package/dist/{setup-surface-DO0e-MMS.js → setup-surface-B1_gpGBl.js} +4 -4
  31. package/dist/{shared-DEQBEKBL.js → shared-CNQsWJT7.js} +2 -2
  32. package/dist/{slash-dispatch.runtime-C3B4h5ZM.js → slash-dispatch.runtime-DhsXavSY.js} +1 -1
  33. package/node_modules/typebox/build/format/json_pointer.d.mts +2 -2
  34. package/node_modules/typebox/build/format/json_pointer.mjs +2 -2
  35. package/node_modules/typebox/build/format/json_pointer_uri_fragment.d.mts +2 -2
  36. package/node_modules/typebox/build/format/json_pointer_uri_fragment.mjs +2 -2
  37. package/node_modules/typebox/build/format/relative_json_pointer.d.mts +2 -2
  38. package/node_modules/typebox/build/format/relative_json_pointer.mjs +2 -2
  39. package/node_modules/typebox/build/system/memory/assign.mjs +2 -1
  40. package/node_modules/typebox/build/system/memory/create.mjs +3 -4
  41. package/node_modules/typebox/build/system/memory/discard.mjs +2 -2
  42. package/node_modules/typebox/build/system/memory/freeze.d.mts +4 -0
  43. package/node_modules/typebox/build/system/memory/freeze.mjs +6 -0
  44. package/node_modules/typebox/build/system/memory/update.mjs +3 -2
  45. package/node_modules/typebox/package.json +1 -1
  46. package/node_modules/undici/lib/dispatcher/balanced-pool.js +4 -2
  47. package/node_modules/undici/lib/dispatcher/client-h1.js +12 -4
  48. package/node_modules/undici/lib/dispatcher/client-h2.js +70 -14
  49. package/node_modules/undici/lib/dispatcher/client.js +6 -2
  50. package/node_modules/undici/lib/handler/cache-handler.js +21 -5
  51. package/node_modules/undici/lib/handler/retry-handler.js +42 -7
  52. package/node_modules/undici/lib/interceptor/cache.js +20 -1
  53. package/node_modules/undici/lib/interceptor/decompress.js +146 -14
  54. package/node_modules/undici/lib/interceptor/dump.js +10 -23
  55. package/node_modules/undici/lib/web/eventsource/eventsource-stream.js +245 -150
  56. package/node_modules/undici/lib/web/websocket/connection.js +1 -1
  57. package/node_modules/undici/lib/web/websocket/permessage-deflate.js +5 -0
  58. package/node_modules/undici/lib/web/websocket/stream/websocketstream.js +8 -10
  59. package/node_modules/undici/package.json +1 -1
  60. package/node_modules/undici/types/interceptors.d.ts +2 -0
  61. package/openclaw.plugin.json +3 -3
  62. package/package.json +6 -6
  63. package/skills/_vendor/slack-skills-plugin.LICENSE +21 -0
  64. package/skills/_vendor/slack-skills-plugin.json +31 -0
  65. package/skills/block-kit/SKILL.md +37 -0
  66. package/skills/block-kit/references/official-block-kit.md +257 -0
  67. package/skills/block-kit/references/official-common-patterns.md +385 -0
  68. package/skills/slack/SKILL.md +1 -1
  69. package/dist/action-runtime.runtime-CEhbmS-Z.js +0 -2
  70. package/dist/conversation-binding-route-Vee8Dgbf.js +0 -115
@@ -1,7 +1,7 @@
1
+ import { Mt as resolveSlackAutoThreadId, bt as getSlackInstallationKind, f as assertSlackDetachedTargetAllowed, jt as SLACK_PRIVATE_ACTION_DELIVERY_RESULT, r as buildSlackChannelIdCandidates, st as parseSlackBlocksInput, v as hasSlackNativeDataBlock } from "./session-status-BynwcZSO.js";
1
2
  import { a as parseSlackTarget, n as formatSlackTarget, o as resolveSlackChannelId } from "./target-parsing-PbxGDbr9.js";
2
3
  import { t as slackContextTargetsMatch } from "./targets-7FexXJ62.js";
3
- import { At as SLACK_PRIVATE_ACTION_DELIVERY_RESULT, b as hasSlackNativeDataBlock, c as assertSlackDetachedTargetAllowed, jt as resolveSlackAutoThreadId, ot as parseSlackBlocksInput, t as buildSlackChannelIdCandidates, yt as getSlackInstallationKind } from "./group-policy-BKjMqT-8.js";
4
- import { n as resolveSlackChannelConfig, t as isSlackChannelAllowedByPolicy } from "./policy-D7PKkiet.js";
4
+ import { n as resolveSlackChannelConfig, t as isSlackChannelAllowedByPolicy } from "./policy-Bh5TOqII.js";
5
5
  import { t as mergeSlackSendResults } from "./send-results-eeOu_HYm.js";
6
6
  import { normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
7
7
  import { normalizeOptionalLowercaseString } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -27,9 +27,9 @@ const pinActions = /* @__PURE__ */ new Set([
27
27
  "listPins"
28
28
  ]);
29
29
  const SLACK_REACTION_RESULT_LIMIT = 100;
30
- const loadSlackActionsRuntime = createLazyRuntimeModule(() => import("./actions-fh66A6lc.js").then((n) => n.t));
30
+ const loadSlackActionsRuntime = createLazyRuntimeModule(() => import("./actions-CFkvEv1d.js").then((n) => n.t));
31
31
  const loadSlackAccountsRuntime = createLazyRuntimeModule(() => import("./accounts.runtime-DRuEK6mL.js"));
32
- const loadSlackChannelTypeRuntime = createLazyRuntimeModule(() => import("./channel-type-3-SqEMVc.js").then((n) => n.t));
32
+ const loadSlackChannelTypeRuntime = createLazyRuntimeModule(() => import("./channel-type-BWt2CRaI.js").then((n) => n.t));
33
33
  function createLazySlackAction(key) {
34
34
  return (async (...args) => {
35
35
  const action = (await loadSlackActionsRuntime())[key];
@@ -0,0 +1,2 @@
1
+ import { t as handleSlackAction } from "./action-runtime-DftQWpI4.js";
2
+ export { handleSlackAction };
@@ -1,9 +1,9 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
2
  import { a as resolveSlackAccount, f as resolveSlackBotToken, i as resolveDefaultSlackAccountId } from "./accounts-Dm_H77gH.js";
3
+ import { A as countSlackTextUtf8Bytes, C as buildSlackBlocksFallbackText, E as SLACK_EDIT_TEXT_MAX_BYTES, M as truncateSlackTextByUtf8Bytes, S as stripSlackNativeDataBlocks, T as renderSlackBlockFallbackText, Y as normalizeSlackOutboundText, at as escapeSlackMrkdwn, ct as validateSlackBlocksArray, f as assertSlackDetachedTargetAllowed, h as appendSlackNativeDataPlainTextFallback, jt as SLACK_PRIVATE_ACTION_DELIVERY_RESULT, m as appendSlackNativeDataFallbackText, v as hasSlackNativeDataBlock, w as buildSlackCompleteBlocksFallbackText, y as isSlackInvalidBlocksError } from "./session-status-BynwcZSO.js";
3
4
  import { n as formatSlackTarget } from "./target-parsing-PbxGDbr9.js";
4
- import { At as SLACK_PRIVATE_ACTION_DELIVERY_RESULT, D as renderSlackBlockFallbackText, E as buildSlackCompleteBlocksFallbackText, I as countSlackTextUtf8Bytes, Q as normalizeSlackOutboundText, R as truncateSlackTextByUtf8Bytes, T as buildSlackBlocksFallbackText, _ as appendSlackNativeDataPlainTextFallback, b as hasSlackNativeDataBlock, c as assertSlackDetachedTargetAllowed, et as escapeSlackMrkdwn, g as appendSlackNativeDataFallbackText, k as SLACK_EDIT_TEXT_MAX_BYTES, st as validateSlackBlocksArray, w as stripSlackNativeDataBlocks, x as isSlackInvalidBlocksError } from "./group-policy-BKjMqT-8.js";
5
- import { m as getSlackWriteClient, s as createSlackLookupClient } from "./probe-gj5yQgN2.js";
6
- import { m as buildSlackNativeDataDeliveryPlan, r as sendMessageSlack } from "./send-Djswy6lf.js";
5
+ import { m as getSlackWriteClient, s as createSlackLookupClient } from "./probe-Biy--yhL.js";
6
+ import { m as buildSlackNativeDataDeliveryPlan, r as sendMessageSlack } from "./send-DElUcgIs.js";
7
7
  import { normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
8
8
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
9
9
  import { createSubsystemLogger, logVerbose, logVerbose as logVerbose$1 } from "openclaw/plugin-sdk/runtime-env";
package/dist/api.js CHANGED
@@ -1,18 +1,18 @@
1
1
  import { n as registerSlackHttpHandler, r as normalizeSlackWebhookPath, t as handleSlackHttpRequest } from "./registry-bbjH7IHX.js";
2
2
  import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId, n as listSlackAccountIds, r as mergeSlackAccountConfig, t as listEnabledSlackAccounts } from "./accounts-Dm_H77gH.js";
3
- import { r as resolveSlackReplyToMode } from "./conversation-binding-route-Vee8Dgbf.js";
3
+ import { Mt as resolveSlackAutoThreadId, Nt as resolveSlackReplyToMode, a as resolveSlackGroupRequireMention, ct as validateSlackBlocksArray, o as resolveSlackGroupToolPolicy, ot as SLACK_MAX_BLOCKS, st as parseSlackBlocksInput } from "./session-status-BynwcZSO.js";
4
4
  import { t as inspectSlackAccount } from "./account-inspect-C3sePHWa.js";
5
5
  import { a as parseSlackTarget, i as normalizeSlackMessagingTarget, o as resolveSlackChannelId, r as looksLikeSlackTargetId } from "./target-parsing-PbxGDbr9.js";
6
6
  import "./targets-7FexXJ62.js";
7
- import { N as buildSlackInteractiveBlocks, P as buildSlackPresentationBlocks, at as SLACK_MAX_BLOCKS, i as resolveSlackGroupToolPolicy, jt as resolveSlackAutoThreadId, ot as parseSlackBlocksInput, r as resolveSlackGroupRequireMention, st as validateSlackBlocksArray } from "./group-policy-BKjMqT-8.js";
8
- import { C as normalizeAllowListLower, E as resolveSlackAllowListMatch, O as resolveSlackUserAllowed, S as normalizeAllowList, T as normalizeSlackSlug, b as resolveSlackWriteClientOptions, d as createSlackWebClient, f as createSlackWriteClient, g as SLACK_WRITE_RETRY_OPTIONS, h as SLACK_DEFAULT_RETRY_OPTIONS, m as getSlackWriteClient, t as probeSlack, u as createSlackTokenCacheKey, w as normalizeSlackAllowOwnerEntry, x as allowListMatches, y as resolveSlackWebClientOptions } from "./probe-gj5yQgN2.js";
9
- import { n as buildSlackThreadingToolContext, t as slackPlugin } from "./channel-4m8IAdMD.js";
7
+ import { C as normalizeAllowListLower, E as resolveSlackAllowListMatch, O as resolveSlackUserAllowed, S as normalizeAllowList, T as normalizeSlackSlug, b as resolveSlackWriteClientOptions, d as createSlackWebClient, f as createSlackWriteClient, g as SLACK_WRITE_RETRY_OPTIONS, h as SLACK_DEFAULT_RETRY_OPTIONS, m as getSlackWriteClient, t as probeSlack, u as createSlackTokenCacheKey, w as normalizeSlackAllowOwnerEntry, x as allowListMatches, y as resolveSlackWebClientOptions } from "./probe-Biy--yhL.js";
8
+ import { n as buildSlackThreadingToolContext, t as slackPlugin } from "./channel-CmOuxbOD.js";
9
+ import { c as buildSlackInteractiveBlocks, l as buildSlackPresentationBlocks } from "./reply-blocks-PRkhyAN7.js";
10
10
  import { n as extractSlackToolSend, r as listSlackMessageActions } from "./message-tool-api-uNEfQYGY.js";
11
- import { n as resolveSlackChannelType } from "./channel-type-3-SqEMVc.js";
12
- import { t as slackSetupPlugin } from "./channel.setup-t_ghLGb_.js";
13
- import { c as listSlackPins, d as reactSlackMessage, f as readSlackMessages, g as unpinSlackMessage, h as sendSlackMessage, i as editSlackMessage, l as listSlackReactions, m as removeSlackReaction, n as deleteSlackMessage, o as getSlackMemberInfo, p as removeOwnSlackReactions, r as downloadSlackFile, s as listSlackEmojis, u as pinSlackMessage } from "./actions-fh66A6lc.js";
14
- import { f as recordSlackThreadParticipation, l as hasSlackThreadParticipation, s as clearSlackThreadParticipationCache } from "./send-Djswy6lf.js";
11
+ import { n as resolveSlackChannelType } from "./channel-type-BWt2CRaI.js";
12
+ import { t as slackSetupPlugin } from "./channel.setup-D5z1ReaT.js";
13
+ import { c as listSlackPins, d as reactSlackMessage, f as readSlackMessages, g as unpinSlackMessage, h as sendSlackMessage, i as editSlackMessage, l as listSlackReactions, m as removeSlackReaction, n as deleteSlackMessage, o as getSlackMemberInfo, p as removeOwnSlackReactions, r as downloadSlackFile, s as listSlackEmojis, u as pinSlackMessage } from "./actions-CFkvEv1d.js";
14
+ import { f as recordSlackThreadParticipation, l as hasSlackThreadParticipation, s as clearSlackThreadParticipationCache } from "./send-DElUcgIs.js";
15
15
  import { n as listSlackDirectoryGroupsFromConfig, r as listSlackDirectoryPeersFromConfig } from "./directory-config-Bmw4ykSy.js";
16
16
  import { t as collectSlackSecurityAuditFindings } from "./security-audit-B_yKr7MW.js";
17
- import { n as resolveSlackRuntimeGroupPolicy } from "./provider-Do50wMWn.js";
17
+ import { n as resolveSlackRuntimeGroupPolicy } from "./provider-DoaUvAM4.js";
18
18
  export { SLACK_DEFAULT_RETRY_OPTIONS, SLACK_MAX_BLOCKS, SLACK_WRITE_RETRY_OPTIONS, allowListMatches, buildSlackInteractiveBlocks, buildSlackPresentationBlocks, buildSlackThreadingToolContext, clearSlackThreadParticipationCache, collectSlackSecurityAuditFindings, createSlackTokenCacheKey, createSlackWebClient, createSlackWriteClient, deleteSlackMessage, downloadSlackFile, editSlackMessage, extractSlackToolSend, getSlackMemberInfo, getSlackWriteClient, handleSlackHttpRequest, hasSlackThreadParticipation, inspectSlackAccount, listEnabledSlackAccounts, listSlackAccountIds, listSlackDirectoryGroupsFromConfig, listSlackDirectoryPeersFromConfig, listSlackEmojis, listSlackMessageActions, listSlackPins, listSlackReactions, looksLikeSlackTargetId, mergeSlackAccountConfig, normalizeAllowList, normalizeAllowListLower, normalizeSlackAllowOwnerEntry, normalizeSlackMessagingTarget, normalizeSlackSlug, normalizeSlackWebhookPath, parseSlackBlocksInput, parseSlackTarget, pinSlackMessage, probeSlack, reactSlackMessage, readSlackMessages, recordSlackThreadParticipation, registerSlackHttpHandler, removeOwnSlackReactions, removeSlackReaction, resolveDefaultSlackAccountId, resolveSlackAccount, resolveSlackAllowListMatch, resolveSlackAutoThreadId, resolveSlackChannelId, resolveSlackChannelType, resolveSlackGroupRequireMention, resolveSlackGroupToolPolicy, resolveSlackReplyToMode, resolveSlackRuntimeGroupPolicy, resolveSlackUserAllowed, resolveSlackWebClientOptions, resolveSlackWriteClientOptions, sendSlackMessage, slackPlugin, slackSetupPlugin, unpinSlackMessage, validateSlackBlocksArray };
@@ -1,6 +1,8 @@
1
+ import { E as SLACK_EDIT_TEXT_MAX_BYTES, M as truncateSlackTextByUtf8Bytes, Ot as normalizeSlackApproverId, _t as shouldHandleSlackNativeApprovalRequest, n as setSlackSessionStatus, ut as isSlackAnyNativeApprovalClientEnabled } from "./session-status-BynwcZSO.js";
1
2
  import { a as parseSlackTarget } from "./target-parsing-PbxGDbr9.js";
2
- import { Dt as normalizeSlackApproverId, R as truncateSlackTextByUtf8Bytes, f as resolveSlackReplyBlocks, gt as shouldHandleSlackNativeApprovalRequest, k as SLACK_EDIT_TEXT_MAX_BYTES, lt as isSlackAnyNativeApprovalClientEnabled, tt as SLACK_APPROVAL_HEADER_BLOCK_ID } from "./group-policy-BKjMqT-8.js";
3
- import { r as sendMessageSlack } from "./send-Djswy6lf.js";
3
+ import { p as getSlackListenerWriteClient } from "./probe-Biy--yhL.js";
4
+ import { i as resolveSlackReplyBlocks, p as SLACK_APPROVAL_HEADER_BLOCK_ID } from "./reply-blocks-PRkhyAN7.js";
5
+ import { r as sendMessageSlack } from "./send-DElUcgIs.js";
4
6
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
5
7
  import { buildChannelApprovalNativeTargetKey } from "openclaw/plugin-sdk/approval-native-runtime";
6
8
  import { buildApprovalPresentationFromActionDescriptors } from "openclaw/plugin-sdk/approval-reply-runtime";
@@ -222,7 +224,15 @@ const slackApprovalNativeRuntime = createChannelApprovalNativeRuntimeAdapter({
222
224
  if (!resolved) return null;
223
225
  const client = resolveApprovalClient(resolved.context, preparedTarget.teamId);
224
226
  const to = await resolveApprovalChannel(client, preparedTarget.to, preparedTarget.teamId);
225
- const eventScope = resolveApprovalEventScope(client, preparedTarget.teamId);
227
+ const eventScope = preparedTarget.teamId ? {
228
+ teamId: preparedTarget.teamId,
229
+ client,
230
+ writeClient: getSlackListenerWriteClient({
231
+ listenerClient: client,
232
+ teamId: preparedTarget.teamId,
233
+ clientOptions: resolved.context.app.webClientOptions
234
+ })
235
+ } : void 0;
226
236
  const message = await sendMessageSlack(to, pendingPayload.text, {
227
237
  cfg,
228
238
  accountId: resolved.accountId,
@@ -231,26 +241,39 @@ const slackApprovalNativeRuntime = createChannelApprovalNativeRuntimeAdapter({
231
241
  client,
232
242
  eventScope
233
243
  });
244
+ await setSlackSessionStatus({
245
+ client,
246
+ channelId: message.channelId,
247
+ threadTs: preparedTarget.threadTs,
248
+ status: "suspended"
249
+ });
234
250
  return {
235
251
  channelId: message.channelId,
236
252
  messageTs: message.messageId,
253
+ threadTs: preparedTarget.threadTs,
237
254
  teamId: preparedTarget.teamId
238
255
  };
239
256
  },
240
- updateEntry: async ({ cfg, accountId, context, entry, payload }) => {
257
+ updateEntry: async ({ cfg, accountId, context, entry, payload, phase }) => {
241
258
  const resolved = resolveHandlerContext({
242
259
  cfg,
243
260
  accountId,
244
261
  context
245
262
  });
246
263
  if (!resolved) return;
247
- const nextPayload = payload;
264
+ const client = resolveApprovalClient(resolved.context, entry.teamId);
248
265
  await updateMessage({
249
- client: resolveApprovalClient(resolved.context, entry.teamId),
266
+ client,
250
267
  channelId: entry.channelId,
251
268
  messageTs: entry.messageTs,
252
- text: nextPayload.text,
253
- blocks: nextPayload.blocks
269
+ text: payload.text,
270
+ blocks: payload.blocks
271
+ });
272
+ await setSlackSessionStatus({
273
+ client,
274
+ channelId: entry.channelId,
275
+ threadTs: entry.threadTs,
276
+ status: phase === "resolved" ? "processing" : "active"
254
277
  });
255
278
  }
256
279
  },
@@ -265,13 +288,6 @@ function resolveApprovalClient(context, teamId) {
265
288
  if (!client) throw new Error("Slack Enterprise Grid approval client is unavailable");
266
289
  return client;
267
290
  }
268
- function resolveApprovalEventScope(client, teamId) {
269
- if (!teamId) return;
270
- return {
271
- teamId,
272
- client
273
- };
274
- }
275
291
  async function resolveApprovalChannel(client, target, teamId) {
276
292
  if (!teamId) return target;
277
293
  const parsed = parseSlackTarget(target, { defaultKind: "channel" });
@@ -1,16 +1,16 @@
1
1
  import { n as isSlackPluginAccountConfigured } from "./account-configured-sUohAxZr.js";
2
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-Vee8Dgbf.js";
3
+ import { A as countSlackTextUtf8Bytes, At as shouldSuppressLocalSlackExecApprovalPrompt, Ct as getSlackApprovalApproversForTeam, Dt as isSlackExecApprovalClientEnabled, E as SLACK_EDIT_TEXT_MAX_BYTES, Et as isSlackExecApprovalAuthorizedSender, Mt as resolveSlackAutoThreadId, Nt as resolveSlackReplyToMode, Tt as getSlackExecApprovalApprovers, Y as normalizeSlackOutboundText, _t as shouldHandleSlackNativeApprovalRequest, a as resolveSlackGroupRequireMention, bt as getSlackInstallationKind, c as qualifySlackRoutePeerId, d as resolveSlackConversationBindingRoute, dt as normalizeSlackForwardTarget, f as assertSlackDetachedTargetAllowed, ft as normalizeSlackOriginTarget, gt as resolveTurnSourceSlackOriginTarget, ht as resolveSlackFallbackOriginTarget, it as renderSlackMessagePresentationFallbackText, k as SLACK_TEXT_LIMIT, kt as resolveSlackExecApprovalTarget, lt as hasSlackPluginApprovers, mt as resolveSessionSlackOriginTarget, n as setSlackSessionStatus, o as resolveSlackGroupToolPolicy, pt as resolveEnterpriseApprovalTeamId, s as qualifySlackConversationId, u as normalizeSlackRouteBindingConfig, ut as isSlackAnyNativeApprovalClientEnabled, vt as shouldHandleSlackPluginViaForwardingSession, wt as isSlackApprovalAuthorizedSender, xt as isSlackWorkspaceInstallation, yt as slackTargetsMatch } from "./session-status-BynwcZSO.js";
4
4
  import { a as parseSlackTarget, i as normalizeSlackMessagingTarget, n as formatSlackTarget, o as resolveSlackChannelId, r as looksLikeSlackTargetId, t as canonicalizeSlackApiTargetId } from "./target-parsing-PbxGDbr9.js";
5
5
  import { t as slackContextTargetsMatch } from "./targets-7FexXJ62.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 getSlackApprovalApproversForTeam, 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-BKjMqT-8.js";
7
- import { m as getSlackWriteClient, o as formatSlackError } from "./probe-gj5yQgN2.js";
6
+ import { m as getSlackWriteClient, o as formatSlackError } from "./probe-Biy--yhL.js";
7
+ import { a as resolveSlackReplyDeliveryMessages, h as SLACK_PRESENTATION_CAPABILITIES, i as resolveSlackReplyBlocks, l as buildSlackPresentationBlocks, r as resolveSlackReplyBlockResolution, u as canRenderSlackPresentation } from "./reply-blocks-PRkhyAN7.js";
8
8
  import { n as resolveSlackReplyThreadTs, r as resolveSlackThreadTsValue, t as normalizeSlackThreadTsCandidate } from "./thread-ts-CukseRVL.js";
9
9
  import { n as extractSlackToolSend, t as describeSlackMessageTool } from "./message-tool-api-uNEfQYGY.js";
10
- 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-DEQBEKBL.js";
11
- import { n as resolveSlackChannelType, r as resolveSlackConversationInfo } from "./channel-type-3-SqEMVc.js";
10
+ 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-CNQsWJT7.js";
11
+ import { n as resolveSlackChannelType, r as resolveSlackConversationInfo } from "./channel-type-BWt2CRaI.js";
12
12
  import { t as getOptionalSlackRuntime } from "./runtime-JSVZSWAj.js";
13
- import { a as slackSetupContract, i as createSlackSetupWizardProxy, o as SLACK_CHANNEL } from "./channel.setup-t_ghLGb_.js";
13
+ import { a as slackSetupContract, i as createSlackSetupWizardProxy, o as SLACK_CHANNEL } from "./channel.setup-D5z1ReaT.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";
@@ -141,7 +141,7 @@ const baseSlackApprovalCapability = createApproverRestrictedNativeApprovalCapabi
141
141
  approvalKind,
142
142
  request
143
143
  }),
144
- load: async () => (await import("./approval-handler.runtime-D7d8sKM0.js")).slackApprovalNativeRuntime
144
+ load: async () => (await import("./approval-handler.runtime-BeILKdw4.js")).slackApprovalNativeRuntime
145
145
  })
146
146
  });
147
147
  const baseSlackNativeAdapter = baseSlackApprovalCapability.native;
@@ -425,7 +425,7 @@ const SLACK_TOOL_DELIVERY_ACTIONS = /* @__PURE__ */ new Set([
425
425
  "unpinMessage",
426
426
  "uploadFile"
427
427
  ]);
428
- const loadSlackActionRuntime$1 = createLazyRuntimeModule(() => import("./action-runtime.runtime-CEhbmS-Z.js"));
428
+ const loadSlackActionRuntime$1 = createLazyRuntimeModule(() => import("./action-runtime.runtime-rHI3UAh4.js"));
429
429
  function resolveSlackActionContext(ctx, toolContext) {
430
430
  if (!toolContext && !ctx.mediaAccess && !ctx.mediaLocalRoots && !ctx.mediaReadFile && !ctx.conversationReadOrigin && !ctx.requesterAccountId && !ctx.requesterSenderId) return;
431
431
  return {
@@ -567,9 +567,9 @@ const EXTENSION_SHARED_MODULE_ID = "openclaw/plugin-sdk/extension-shared";
567
567
  const TARGET_RESOLVER_RUNTIME_MODULE_ID = "openclaw/plugin-sdk/target-resolver-runtime";
568
568
  const loadExtensionSharedSdk = createLazyRuntimeModule(() => import(EXTENSION_SHARED_MODULE_ID));
569
569
  const loadTargetResolverRuntimeSdk = createLazyRuntimeModule(() => import(TARGET_RESOLVER_RUNTIME_MODULE_ID));
570
- const loadSlackSetupSurfaceModule = createLazyRuntimeModule(() => import("./setup-surface-DO0e-MMS.js"));
571
- const loadSlackScopesModule = createLazyRuntimeModule(() => import("./scopes-B9HRguDe.js"));
572
- const loadSlackOutboundAdapterModule = createLazyRuntimeModule(() => import("./outbound-adapter-BB8wAjm5.js"));
570
+ const loadSlackSetupSurfaceModule = createLazyRuntimeModule(() => import("./setup-surface-B1_gpGBl.js"));
571
+ const loadSlackScopesModule = createLazyRuntimeModule(() => import("./scopes-CZzeGdWV.js"));
572
+ const loadSlackOutboundAdapterModule = createLazyRuntimeModule(() => import("./outbound-adapter-B5QyTRpJ.js"));
573
573
  async function resolveSlackHandleAction() {
574
574
  return getOptionalSlackRuntime()?.channel?.slack?.handleSlackAction ?? (await loadSlackActionRuntime()).handleSlackAction;
575
575
  }
@@ -577,13 +577,13 @@ function shouldTreatSlackDeliveredTextAsVisible(params) {
577
577
  return params.kind === "block" && typeof params.text === "string" && params.text.trim().length > 0;
578
578
  }
579
579
  const loadSlackDirectoryConfigModule = createLazyRuntimeModule(() => import("./directory-config-Bmw4ykSy.js").then((n) => n.t));
580
- const loadSlackResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels-CU7Bg5Ka.js").then((n) => n.n));
581
- const loadSlackResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-DrhttvRQ.js").then((n) => n.n));
582
- const loadSlackActionRuntime = createLazyRuntimeModule(() => import("./action-runtime.runtime-CEhbmS-Z.js"));
583
- const loadSlackSendRuntime = createLazyRuntimeModule(() => import("./send.runtime-__WVTWLQ.js"));
584
- const loadSlackProbeModule = createLazyRuntimeModule(() => import("./probe-gj5yQgN2.js").then((n) => n.n));
585
- const loadSlackMonitorModule = createLazyRuntimeModule(() => import("./monitor-Chwu_SiZ.js").then((n) => n.t));
586
- const loadSlackDirectoryLiveModule = createLazyRuntimeModule(() => import("./directory-live-q32AW7N1.js").then((n) => n.t));
580
+ const loadSlackResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels-DQGV2VrE.js").then((n) => n.n));
581
+ const loadSlackResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-DRGt_Q4I.js").then((n) => n.n));
582
+ const loadSlackActionRuntime = createLazyRuntimeModule(() => import("./action-runtime.runtime-rHI3UAh4.js"));
583
+ const loadSlackSendRuntime = createLazyRuntimeModule(() => import("./send.runtime-C8D6cKGm.js"));
584
+ const loadSlackProbeModule = createLazyRuntimeModule(() => import("./probe-Biy--yhL.js").then((n) => n.n));
585
+ const loadSlackMonitorModule = createLazyRuntimeModule(() => import("./monitor-DI07pfJl.js").then((n) => n.t));
586
+ const loadSlackDirectoryLiveModule = createLazyRuntimeModule(() => import("./directory-live-BuBPHmju.js").then((n) => n.t));
587
587
  async function setSlackHeartbeatThreadStatus(params) {
588
588
  const threadTs = resolveSlackThreadTsValue({ threadId: params.threadId });
589
589
  const target = parseSlackTarget(params.to, { defaultKind: "channel" });
@@ -604,10 +604,11 @@ async function setSlackHeartbeatThreadStatus(params) {
604
604
  accountId: account.accountId,
605
605
  token: botToken
606
606
  });
607
- await client.assistant.threads.setStatus({
607
+ await setSlackSessionStatus({
608
+ client,
608
609
  token: botToken,
609
- channel_id: channelId,
610
- thread_ts: threadTs,
610
+ channelId,
611
+ threadTs,
611
612
  status: params.status
612
613
  });
613
614
  } catch (error) {
@@ -963,7 +964,7 @@ const slackPlugin = createChatChannelPlugin({
963
964
  to,
964
965
  accountId,
965
966
  threadId,
966
- status: "is typing..."
967
+ status: "processing"
967
968
  });
968
969
  },
969
970
  clearTyping: async ({ cfg, to, accountId, threadId }) => {
@@ -972,7 +973,7 @@ const slackPlugin = createChatChannelPlugin({
972
973
  to,
973
974
  accountId,
974
975
  threadId,
975
- status: ""
976
+ status: "active"
976
977
  });
977
978
  }
978
979
  },
@@ -1,2 +1,2 @@
1
- import { t as SlackChannelConfigSchema } from "./config-schema-bP3eV2ra.js";
1
+ import { t as SlackChannelConfigSchema } from "./config-schema-JDx_f9Zb.js";
2
2
  export { SlackChannelConfigSchema };
@@ -1,2 +1,2 @@
1
- import { t as slackPlugin } from "./channel-4m8IAdMD.js";
1
+ import { t as slackPlugin } from "./channel-CmOuxbOD.js";
2
2
  export { slackPlugin };
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
2
  import { a as resolveSlackAccount, l as resolveSlackOperationToken } from "./accounts-Dm_H77gH.js";
3
- import { c as assertSlackDetachedTargetAllowed } from "./group-policy-BKjMqT-8.js";
4
- import { C as normalizeAllowListLower, c as createSlackReadClient, d as createSlackWebClient } from "./probe-gj5yQgN2.js";
3
+ import { f as assertSlackDetachedTargetAllowed } from "./session-status-BynwcZSO.js";
4
+ import { C as normalizeAllowListLower, c as createSlackReadClient, d as createSlackWebClient } from "./probe-Biy--yhL.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";
@@ -1,7 +1,7 @@
1
1
  import { r as isSlackSetupAccountConfigured } from "./account-configured-sUohAxZr.js";
2
2
  import { a as resolveSlackAccount, c as resolveSlackConfigAccessorAccount, i as resolveDefaultSlackAccountId, n as listSlackAccountIds } from "./accounts-Dm_H77gH.js";
3
3
  import { t as inspectSlackAccount } from "./account-inspect-C3sePHWa.js";
4
- import { t as SlackChannelConfigSchema } from "./config-schema-bP3eV2ra.js";
4
+ import { t as SlackChannelConfigSchema } from "./config-schema-JDx_f9Zb.js";
5
5
  import { normalizeSecretInputString } from "openclaw/plugin-sdk/secret-input";
6
6
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
7
7
  import { adaptScopedAccountAccessor, createScopedChannelConfigAdapter } from "openclaw/plugin-sdk/channel-config-helpers";
@@ -84,6 +84,8 @@ function buildSlackManifest(botName = "OpenClaw") {
84
84
  "app_home_opened",
85
85
  "app_mention",
86
86
  "app_context_changed",
87
+ "agent_session_stopped",
88
+ "agent_session_title_changed",
87
89
  "channel_rename",
88
90
  "member_joined_channel",
89
91
  "member_left_channel",
@@ -556,7 +558,7 @@ const slackBaseConfigAdapter = createScopedChannelConfigAdapter({
556
558
  });
557
559
  //#endregion
558
560
  //#region extensions/slack/src/channel.setup.ts
559
- const slackSetupWizard = createSlackSetupWizardProxy(async () => ({ slackSetupWizard: (await import("./setup-surface-DO0e-MMS.js")).slackSetupWizard }));
561
+ const slackSetupWizard = createSlackSetupWizardProxy(async () => ({ slackSetupWizard: (await import("./setup-surface-B1_gpGBl.js")).slackSetupWizard }));
560
562
  const slackSetupPlugin = {
561
563
  id: SLACK_CHANNEL,
562
564
  meta: {
@@ -592,7 +594,10 @@ const slackSetupPlugin = {
592
594
  minChars: 1500,
593
595
  idleMs: 1e3
594
596
  } },
595
- reload: { configPrefixes: ["channels.slack"] },
597
+ reload: {
598
+ configPrefixes: ["channels.slack"],
599
+ noopPrefixes: ["messages.inbound", "messages.ackReactionScope"]
600
+ },
596
601
  configSchema: SlackChannelConfigSchema,
597
602
  config: {
598
603
  ...slackBaseConfigAdapter,
@@ -29,10 +29,10 @@ const slackChannelConfigUiHints = {
29
29
  chunkMode: "Chunking mode for outbound Slack text delivery: \"length\" (default) or \"newline\".",
30
30
  "block.enabled": "Enable chunked block-style Slack preview delivery when channels.slack.streaming.mode=\"block\".",
31
31
  "block.coalesce": "Merge streamed Slack block replies before final delivery.",
32
- nativeTransport: "Enable native Slack text streaming (chat.startStream/chat.appendStream/chat.stopStream) when channels.slack.streaming.mode is partial (default: true). Native streaming and Slack assistant thread status require a reply thread target; top-level DMs can still use draft post-and-edit preview streaming.",
32
+ nativeTransport: "Enable native Slack text streaming (chat.startStream/chat.appendStream/chat.stopStream) when channels.slack.streaming.mode is partial (default: true). Native streaming and Slack session status require a reply thread target; top-level DMs can still use draft post-and-edit preview streaming.",
33
33
  "preview.toolProgress": "Show tool/progress activity in the live draft preview message (default: true). Set false to hide interim tool updates while the draft preview stays active.",
34
34
  "preview.commandText": "Command/exec detail in preview tool-progress lines: \"status\" is the safe default; \"raw\" opts into command text.",
35
- "progress.style": "Slack progress presentation: \"card\" uses structured task/session cards; \"compact\" keeps one editable text draft that the final answer replaces in place when Slack can safely edit it. Defaults to \"compact\" when progress.toolProgress is false, otherwise \"card\".",
35
+ "progress.style": "Slack progress presentation: \"card\" uses structured task/session cards; \"compact\" keeps a temporary editable text draft. The final response is posted as a new message, then the draft is deleted after confirmed delivery. Defaults to \"compact\" when progress.toolProgress is explicitly false, otherwise \"card\".",
36
36
  "progress.nativeTaskCards": "Slack native task-card progress updates when channels.slack.streaming.mode=\"progress\", progress.style=\"card\", and streaming.nativeTransport is enabled. Set false to fall back to the Block Kit progress card. Default: true."
37
37
  },
38
38
  progress: { labels: "openclaw" }
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
2
  import { a as resolveSlackAccount } from "./accounts-Dm_H77gH.js";
3
- import { s as createSlackLookupClient } from "./probe-gj5yQgN2.js";
3
+ import { s as createSlackLookupClient } from "./probe-Biy--yhL.js";
4
4
  import { n as fetchSlackChannelListPage, t as collectSlackCursorPages } from "./cursor-pages-ByFwo-Py.js";
5
5
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
6
6
  //#region extensions/slack/src/directory-live.ts
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
- import { T as buildSlackSlashCommandMatcher, t as monitorSlackProvider } from "./provider-Do50wMWn.js";
3
- import { t as isSlackChannelAllowedByPolicy } from "./policy-D7PKkiet.js";
4
- import { a as resolveSlackThreadTs } from "./replies-Dc6WVh_Q.js";
2
+ import { M as buildSlackSlashCommandMatcher, t as monitorSlackProvider } from "./provider-DoaUvAM4.js";
3
+ import { t as isSlackChannelAllowedByPolicy } from "./policy-Bh5TOqII.js";
4
+ import { a as resolveSlackThreadTs } from "./replies-DENuTcPO.js";
5
5
  //#region extensions/slack/src/monitor.ts
6
6
  var monitor_exports = /* @__PURE__ */ __exportAll({
7
7
  buildSlackSlashCommandMatcher: () => buildSlackSlashCommandMatcher,
@@ -1,6 +1,7 @@
1
1
  import { a as resolveSlackAccount, l as resolveSlackOperationToken } from "./accounts-Dm_H77gH.js";
2
+ import { K as resolveSlackQuestionActionIds, R as SLACK_QUESTION_FINALIZATION_BLOCKS, at as escapeSlackMrkdwn, f as assertSlackDetachedTargetAllowed, k as SLACK_TEXT_LIMIT } from "./session-status-BynwcZSO.js";
2
3
  import { a as parseSlackTarget } from "./target-parsing-PbxGDbr9.js";
3
- import { M as SLACK_TEXT_LIMIT, O as resolveSlackAuthoredTextPlacement, c as assertSlackDetachedTargetAllowed, d as resolveSlackReplyBlockResolution, et as escapeSlackMrkdwn, p as resolveSlackReplyDeliveryMessages, q as resolveSlackQuestionActionIds, rt as SLACK_PRESENTATION_CAPABILITIES, u as parseSlackReplyBlockSegments, z as SLACK_QUESTION_FINALIZATION_BLOCKS } from "./group-policy-BKjMqT-8.js";
4
+ import { a as resolveSlackReplyDeliveryMessages, h as SLACK_PRESENTATION_CAPABILITIES, n as parseSlackReplyBlockSegments, r as resolveSlackReplyBlockResolution, s as resolveSlackAuthoredTextPlacement } from "./reply-blocks-PRkhyAN7.js";
4
5
  import { r as resolveSlackThreadTsValue } from "./thread-ts-CukseRVL.js";
5
6
  import { t as mergeSlackSendResults } from "./send-results-eeOu_HYm.js";
6
7
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -51,7 +52,7 @@ function readSlackRenderedPresentation(slackData) {
51
52
  return;
52
53
  }
53
54
  }
54
- const loadSlackSendRuntime = createLazyRuntimeModule(() => import("./send.runtime-__WVTWLQ.js"));
55
+ const loadSlackSendRuntime = createLazyRuntimeModule(() => import("./send.runtime-C8D6cKGm.js"));
55
56
  function resolveSlackSendIdentity(identity) {
56
57
  if (!identity) return;
57
58
  const username = normalizeOptionalString(identity.name);