@openclaw/slack 2026.5.28-beta.1 → 2026.5.28-beta.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.
package/dist/api.js CHANGED
@@ -3,7 +3,7 @@ import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId, l as resol
3
3
  import { t as inspectSlackAccount } from "./account-inspect-CdGk6R7l.js";
4
4
  import { i as resolveSlackChannelId, n as normalizeSlackMessagingTarget, r as parseSlackTarget, t as looksLikeSlackTargetId } from "./target-parsing-C7eeWg7M.js";
5
5
  import "./targets-nUqxHGgg.js";
6
- import { a as resolveSlackAutoThreadId, i as resolveSlackChannelType, n as buildSlackThreadingToolContext, r as resetSlackChannelTypeCacheForTest, t as slackPlugin } from "./channel-B9uavFQM.js";
6
+ import { a as resolveSlackAutoThreadId, i as resolveSlackChannelType, n as buildSlackThreadingToolContext, r as resetSlackChannelTypeCacheForTest, t as slackPlugin } from "./channel-D8p_1twn.js";
7
7
  import { _ as buildSlackInteractiveBlocks, a as parseSlackBlocksInput, c as resolveSlackGroupRequireMention, d as normalizeAllowList, f as normalizeAllowListLower, g as resolveSlackUserAllowed, h as resolveSlackAllowListMatch, i as SLACK_MAX_BLOCKS, l as resolveSlackGroupToolPolicy, m as normalizeSlackSlug, o as validateSlackBlocksArray, p as normalizeSlackAllowOwnerEntry, u as allowListMatches, v as buildSlackPresentationBlocks } from "./thread-ts-NSVqWybn.js";
8
8
  import { n as extractSlackToolSend, r as listSlackMessageActions } from "./message-tool-api-B9M0zzlQ.js";
9
9
  import { n as isSlackInteractiveRepliesEnabled, r as parseSlackOptionsLine, t as compileSlackInteractiveReplies } from "./interactive-replies-DrBq4Mld.js";
@@ -14,5 +14,5 @@ import { a as listSlackEmojis, c as pinSlackMessage, d as removeOwnSlackReaction
14
14
  import { n as listSlackDirectoryGroupsFromConfig, r as listSlackDirectoryPeersFromConfig } from "./directory-config-8UPAEyNg.js";
15
15
  import { t as probeSlack } from "./probe-Djes9Fy6.js";
16
16
  import { t as collectSlackSecurityAuditFindings } from "./security-audit-CikQhBUY.js";
17
- import { n as resolveSlackRuntimeGroupPolicy } from "./provider-CfZypaNV.js";
17
+ import { n as resolveSlackRuntimeGroupPolicy } from "./provider-CxMP_s2o.js";
18
18
  export { SLACK_DEFAULT_RETRY_OPTIONS, SLACK_MAX_BLOCKS, SLACK_WRITE_RETRY_OPTIONS, resetSlackChannelTypeCacheForTest as __resetSlackChannelTypeCacheForTest, resetSlackChannelTypeCacheForTest, allowListMatches, buildSlackInteractiveBlocks, buildSlackPresentationBlocks, buildSlackThreadingToolContext, clearSlackThreadParticipationCache, clearSlackWriteClientCacheForTest, collectSlackSecurityAuditFindings, compileSlackInteractiveReplies, createSlackTokenCacheKey, createSlackWebClient, createSlackWriteClient, deleteSlackMessage, downloadSlackFile, editSlackMessage, extractSlackToolSend, getSlackMemberInfo, getSlackWriteClient, handleSlackHttpRequest, hasSlackThreadParticipation, inspectSlackAccount, isSlackInteractiveRepliesEnabled, listEnabledSlackAccounts, listSlackAccountIds, listSlackDirectoryGroupsFromConfig, listSlackDirectoryPeersFromConfig, listSlackEmojis, listSlackMessageActions, listSlackPins, listSlackReactions, looksLikeSlackTargetId, mergeSlackAccountConfig, normalizeAllowList, normalizeAllowListLower, normalizeSlackAllowOwnerEntry, normalizeSlackMessagingTarget, normalizeSlackSlug, normalizeSlackWebhookPath, parseSlackBlocksInput, parseSlackOptionsLine, parseSlackTarget, pinSlackMessage, probeSlack, reactSlackMessage, readSlackMessages, recordSlackThreadParticipation, registerSlackHttpHandler, removeOwnSlackReactions, removeSlackReaction, resolveDefaultSlackAccountId, resolveSlackAccount, resolveSlackAllowListMatch, resolveSlackAutoThreadId, resolveSlackChannelId, resolveSlackChannelType, resolveSlackGroupRequireMention, resolveSlackGroupToolPolicy, resolveSlackReplyToMode, resolveSlackRuntimeGroupPolicy, resolveSlackUserAllowed, resolveSlackWebClientOptions, resolveSlackWriteClientOptions, sendSlackMessage, slackPlugin, slackSetupPlugin, unpinSlackMessage, validateSlackBlocksArray };
@@ -599,7 +599,7 @@ async function loadSlackProbeModule() {
599
599
  return await slackProbeModulePromise;
600
600
  }
601
601
  async function loadSlackMonitorModule() {
602
- slackMonitorModulePromise ??= import("./monitor-BzzGqB63.js").then((n) => n.t);
602
+ slackMonitorModulePromise ??= import("./monitor-D7jGKmQk.js").then((n) => n.t);
603
603
  return await slackMonitorModulePromise;
604
604
  }
605
605
  async function loadSlackDirectoryLiveModule() {
@@ -1,2 +1,2 @@
1
- import { t as slackPlugin } from "./channel-B9uavFQM.js";
1
+ import { t as slackPlugin } from "./channel-D8p_1twn.js";
2
2
  export { slackPlugin };
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
- import { t as monitorSlackProvider, y as buildSlackSlashCommandMatcher } from "./provider-CfZypaNV.js";
2
+ import { t as monitorSlackProvider, y as buildSlackSlashCommandMatcher } from "./provider-CxMP_s2o.js";
3
3
  import { t as isSlackChannelAllowedByPolicy } from "./policy-BBDU-PQK.js";
4
4
  import { o as resolveSlackThreadTs } from "./replies-DkmWK7JW.js";
5
5
  //#region extensions/slack/src/monitor.ts
@@ -7,7 +7,7 @@ import { n as resolveSlackNativeStreaming, r as resolveSlackStreamingMode, t as
7
7
  import { a as recordSlackThreadParticipation, i as hasSlackThreadParticipationWithPersistence, s as normalizeSlackOutboundText, t as sendMessageSlack } from "./send-BURYyCXI.js";
8
8
  import { _ as resolveSlackThreadStarter, b as buildSlackEditTextPayload, f as removeSlackReaction, g as resolveSlackThreadHistory, l as reactSlackMessage, r as editSlackMessage, t as deleteSlackMessage, y as formatSlackFileReference } from "./actions-zfVWcIY6.js";
9
9
  import { t as formatSlackError } from "./errors-CZtmv-h0.js";
10
- import { _ as resolveStorePath, a as escapeSlackMrkdwn, b as stripSlackMentionsForCommandDetection, c as authorizeSlackBotRoomMessage, d as buildSlackAssistantThreadMetadata, f as parseSlackAssistantThreadMetadata, g as resolveChannelContextVisibilityMode, h as readSessionUpdatedAt, i as authorizeSlackDirectMessage, l as resolveSlackCommandIngress, m as resolveSlackChatType, o as recordInboundSession, p as normalizeSlackChannelType, r as resolveSlackRoomContextHints, s as resolveConversationLabel$1, u as resolveSlackEffectiveAllowFrom, v as updateLastRoute } from "./provider-CfZypaNV.js";
10
+ import { _ as resolveStorePath, a as escapeSlackMrkdwn, b as stripSlackMentionsForCommandDetection, c as authorizeSlackBotRoomMessage, d as buildSlackAssistantThreadMetadata, f as parseSlackAssistantThreadMetadata, g as resolveChannelContextVisibilityMode, h as readSessionUpdatedAt, i as authorizeSlackDirectMessage, l as resolveSlackCommandIngress, m as resolveSlackChatType, o as recordInboundSession, p as normalizeSlackChannelType, r as resolveSlackRoomContextHints, s as resolveConversationLabel$1, u as resolveSlackEffectiveAllowFrom, v as updateLastRoute } from "./provider-CxMP_s2o.js";
11
11
  import { n as resolveSlackChannelConfig } from "./policy-BBDU-PQK.js";
12
12
  import { a as resolveDeliveredSlackReplyThreadTs, i as readSlackReplyBlocks, n as deliverReplies, o as resolveSlackThreadTs, t as createSlackReplyDeliveryPlan } from "./replies-DkmWK7JW.js";
13
13
  import { asOptionalRecord, normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString, readStringValue } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -17,6 +17,7 @@ import { createHash } from "node:crypto";
17
17
  import { danger, logVerbose, shouldLogVerbose, sleep } from "openclaw/plugin-sdk/runtime-env";
18
18
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
19
19
  import { buildTtsSupplementMediaPayload, getReplyPayloadTtsSupplement, resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload";
20
+ import { stripReasoningTagsFromText } from "openclaw/plugin-sdk/text-chunking";
20
21
  import { ensureConfiguredBindingRouteReady, resolveConfiguredBindingRoute, resolveRuntimeConversationBindingRoute } from "openclaw/plugin-sdk/conversation-runtime";
21
22
  import { createChannelHistoryWindow } from "openclaw/plugin-sdk/reply-history";
22
23
  import { resolveHumanDelayConfig } from "openclaw/plugin-sdk/agent-runtime";
@@ -604,6 +605,9 @@ const UNICODE_TO_SLACK = {
604
605
  "🛠️": "hammer_and_wrench",
605
606
  "💻": "computer"
606
607
  };
608
+ const SLACK_REASONING_TAG_RE = /<\s*(\/?)\s*(?:think(?:ing)?|thought|antthinking)\b[^<>]*>/gi;
609
+ const SLACK_REASONING_LABEL_PREFIX_RE = /^\s*(?:>\s*)?Reasoning:\s*/iu;
610
+ const SLACK_THINKING_LABEL_PREFIX_RE = /^\s*(?:>\s*)?Thinking\.{0,3}(?=\s*(?:\n|_))/iu;
607
611
  function resolveSlackMessageTimestampMs(message) {
608
612
  const ts = message.event_ts ?? message.ts;
609
613
  if (!ts) return;
@@ -702,6 +706,43 @@ function rememberSlackStreamRecipientTeam(params) {
702
706
  if (oldest) slackStreamRecipientTeamCache.delete(oldest);
703
707
  }
704
708
  }
709
+ function normalizeSlackReasoningProgressLine(text) {
710
+ return (extractSlackReasoningTagText(text) || stripReasoningTagsFromText(text, {
711
+ mode: "strict",
712
+ trim: "both"
713
+ })).replace(SLACK_REASONING_LABEL_PREFIX_RE, "").replace(SLACK_THINKING_LABEL_PREFIX_RE, "").split(/\r?\n/u).map((line) => stripSimpleItalicMarkers(line)).filter(Boolean).join(" ").replace(/\s+/g, " ").trim();
714
+ }
715
+ function extractSlackReasoningTagText(text) {
716
+ if (!text) return "";
717
+ let result = "";
718
+ let lastIndex = 0;
719
+ let inReasoning = false;
720
+ SLACK_REASONING_TAG_RE.lastIndex = 0;
721
+ for (const match of text.matchAll(SLACK_REASONING_TAG_RE)) {
722
+ const index = match.index ?? 0;
723
+ if (inReasoning) result += text.slice(lastIndex, index);
724
+ inReasoning = match[1] !== "/";
725
+ lastIndex = index + match[0].length;
726
+ }
727
+ if (inReasoning) result += text.slice(lastIndex);
728
+ return result.trim();
729
+ }
730
+ function stripSimpleItalicMarkers(line) {
731
+ const trimmed = line.trim();
732
+ if (trimmed.length >= 2 && trimmed.startsWith("_") && trimmed.endsWith("_")) return trimmed.slice(1, -1).trim();
733
+ return trimmed;
734
+ }
735
+ function mergeSlackReasoningProgressText(current, incoming, options) {
736
+ if (!current) return incoming;
737
+ const normalizedCurrent = normalizeSlackReasoningProgressLine(current);
738
+ const normalizedIncoming = normalizeSlackReasoningProgressLine(incoming);
739
+ if (!normalizedIncoming || normalizedIncoming === normalizedCurrent) return current;
740
+ if (options?.snapshot === true || isSlackReasoningSnapshotText(incoming) || normalizedIncoming.startsWith(normalizedCurrent)) return incoming;
741
+ return `${current}${incoming}`;
742
+ }
743
+ function isSlackReasoningSnapshotText(text) {
744
+ return SLACK_REASONING_LABEL_PREFIX_RE.test(text) || SLACK_THINKING_LABEL_PREFIX_RE.test(text);
745
+ }
705
746
  function createSlackEventDeliveryTracker() {
706
747
  const deliveredKeys = /* @__PURE__ */ new Set();
707
748
  return {
@@ -1379,6 +1420,7 @@ async function dispatchPreparedSlackMessage(prepared) {
1379
1420
  let lastNonEmptyPreviewToolProgressLines = [];
1380
1421
  let appendRenderedText = "";
1381
1422
  let appendSourceText = "";
1423
+ let reasoningProgressRawText = "";
1382
1424
  let statusUpdateCount = 0;
1383
1425
  let nativeProgressCompletionSent = false;
1384
1426
  let nativeProgressChunkKey;
@@ -1570,6 +1612,18 @@ async function dispatchPreparedSlackMessage(prepared) {
1570
1612
  draftStream?.update(trimmed);
1571
1613
  hasStreamedMessage = true;
1572
1614
  };
1615
+ const pushReasoningProgress = async (payload) => {
1616
+ if (!payload?.text) return;
1617
+ reasoningProgressRawText = mergeSlackReasoningProgressText(reasoningProgressRawText, payload.text, { snapshot: payload.isReasoningSnapshot === true });
1618
+ const normalized = normalizeSlackReasoningProgressLine(reasoningProgressRawText);
1619
+ if (!normalized) return;
1620
+ await pushPreviewToolProgress({
1621
+ id: "reasoning",
1622
+ kind: "item",
1623
+ text: normalized,
1624
+ label: "Reasoning"
1625
+ });
1626
+ };
1573
1627
  const onDraftBoundary = !shouldUseDraftStream ? void 0 : async () => {
1574
1628
  if (hasStreamedMessage) {
1575
1629
  draftStream?.forceNewMessage();
@@ -1578,6 +1632,7 @@ async function dispatchPreparedSlackMessage(prepared) {
1578
1632
  appendSourceText = "";
1579
1633
  statusUpdateCount = 0;
1580
1634
  }
1635
+ reasoningProgressRawText = "";
1581
1636
  previewToolProgressSuppressed = false;
1582
1637
  previewToolProgressLines = [];
1583
1638
  };
@@ -1618,7 +1673,9 @@ async function dispatchPreparedSlackMessage(prepared) {
1618
1673
  },
1619
1674
  onAssistantMessageStart: onDraftBoundary,
1620
1675
  onReasoningEnd: onDraftBoundary,
1621
- onReasoningStream: statusReactionsEnabled ? async () => {
1676
+ onReasoningStream: statusReactionsEnabled || previewToolProgressEnabled ? async (payload) => {
1677
+ await pushReasoningProgress(payload);
1678
+ if (!statusReactionsEnabled) return;
1622
1679
  await statusReactions.setThinking();
1623
1680
  } : void 0,
1624
1681
  onToolStart: async (payload) => {
@@ -39,7 +39,7 @@ import { resolveApprovalOverGateway } from "openclaw/plugin-sdk/approval-gateway
39
39
  import { parseExecApprovalCommandText } from "openclaw/plugin-sdk/approval-reply-runtime";
40
40
  import { formatCommandArgMenuTitle, resolveCommandAuthorization, resolveNativeCommandSessionTargets, resolveStoredModelOverride } from "openclaw/plugin-sdk/command-auth-native";
41
41
  import { requestHeartbeat } from "openclaw/plugin-sdk/heartbeat-runtime";
42
- import { parseStrictFiniteNumber } from "openclaw/plugin-sdk/number-runtime";
42
+ import { parseFiniteNumber, parseStrictFiniteNumber } from "openclaw/plugin-sdk/number-runtime";
43
43
  import { createInteractiveConversationBindingHelpers, dispatchPluginInteractiveHandler } from "openclaw/plugin-sdk/plugin-runtime";
44
44
  import { createChannelIngressResolver, defineStableChannelIngressIdentity, readChannelIngressStoreAllowFromForDmPolicy } from "openclaw/plugin-sdk/channel-ingress-runtime";
45
45
  import { createChannelInboundDebouncer, shouldDebounceTextInbound } from "openclaw/plugin-sdk/channel-inbound";
@@ -2615,8 +2615,8 @@ async function resolveThreadTsFromHistory(params) {
2615
2615
  }
2616
2616
  }
2617
2617
  function createSlackThreadTsResolver(params) {
2618
- const ttlMs = Math.max(0, params.cacheTtlMs ?? DEFAULT_THREAD_TS_CACHE_TTL_MS);
2619
- const maxSize = Math.max(0, params.maxSize ?? DEFAULT_THREAD_TS_CACHE_MAX);
2618
+ const ttlMs = Math.max(0, parseFiniteNumber(params.cacheTtlMs) ?? DEFAULT_THREAD_TS_CACHE_TTL_MS);
2619
+ const maxSize = Math.max(0, parseFiniteNumber(params.maxSize) ?? DEFAULT_THREAD_TS_CACHE_MAX);
2620
2620
  const cache = /* @__PURE__ */ new Map();
2621
2621
  const inflight = /* @__PURE__ */ new Map();
2622
2622
  const getCached = (key, now) => {
@@ -2682,7 +2682,7 @@ function createSlackThreadTsResolver(params) {
2682
2682
  //#region extensions/slack/src/monitor/message-handler.ts
2683
2683
  let slackMessagePipelinePromise;
2684
2684
  function loadSlackMessagePipeline() {
2685
- slackMessagePipelinePromise ??= import("./pipeline.runtime-XK36f1W3.js");
2685
+ slackMessagePipelinePromise ??= import("./pipeline.runtime-xM6ppqQZ.js");
2686
2686
  return slackMessagePipelinePromise;
2687
2687
  }
2688
2688
  const APP_MENTION_RETRY_TTL_MS = 6e4;
@@ -7,8 +7,8 @@ import { a as listSlackEmojis, c as pinSlackMessage, d as removeOwnSlackReaction
7
7
  import { t as probeSlack } from "./probe-Djes9Fy6.js";
8
8
  import { t as resolveSlackChannelAllowlist } from "./resolve-channels-zXt5f47h.js";
9
9
  import { t as resolveSlackUserAllowlist } from "./resolve-users-BLfGAz1v.js";
10
- import { t as monitorSlackProvider } from "./provider-CfZypaNV.js";
10
+ import { t as monitorSlackProvider } from "./provider-CxMP_s2o.js";
11
11
  import { n as slackActionRuntime, t as handleSlackAction } from "./action-runtime-BOEgcnv6.js";
12
12
  import { n as listSlackDirectoryGroupsLive, r as listSlackDirectoryPeersLive } from "./directory-live-BFB1pSax.js";
13
- import "./monitor-BzzGqB63.js";
13
+ import "./monitor-D7jGKmQk.js";
14
14
  export { deleteSlackMessage, editSlackMessage, getSlackMemberInfo, handleSlackAction, listEnabledSlackAccounts, listSlackAccountIds, listSlackDirectoryGroupsLive, listSlackDirectoryPeersLive, listSlackEmojis, listSlackPins, listSlackReactions, monitorSlackProvider, pinSlackMessage, probeSlack, reactSlackMessage, readSlackMessages, registerSlackPluginHttpRoutes, removeOwnSlackReactions, removeSlackReaction, resolveDefaultSlackAccountId, resolveSlackAccount, resolveSlackAppToken, resolveSlackBotToken, resolveSlackChannelAllowlist, resolveSlackGroupRequireMention, resolveSlackGroupToolPolicy, resolveSlackUserAllowlist, sendMessageSlack, sendSlackMessage, setSlackRuntime, slackActionRuntime, unpinSlackMessage };
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@openclaw/slack",
3
- "version": "2026.5.28-beta.1",
3
+ "version": "2026.5.28-beta.2",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@openclaw/slack",
9
- "version": "2026.5.28-beta.1",
9
+ "version": "2026.5.28-beta.2",
10
10
  "dependencies": {
11
11
  "@slack/bolt": "4.7.2",
12
12
  "@slack/types": "2.21.1",
@@ -15,7 +15,7 @@
15
15
  "zod": "4.4.3"
16
16
  },
17
17
  "peerDependencies": {
18
- "openclaw": ">=2026.5.28-beta.1"
18
+ "openclaw": ">=2026.5.28-beta.2"
19
19
  },
20
20
  "peerDependenciesMeta": {
21
21
  "openclaw": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/slack",
3
- "version": "2026.5.28-beta.1",
3
+ "version": "2026.5.28-beta.2",
4
4
  "description": "OpenClaw Slack channel plugin for channels, DMs, commands, and app events.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -15,7 +15,7 @@
15
15
  "zod": "4.4.3"
16
16
  },
17
17
  "peerDependencies": {
18
- "openclaw": ">=2026.5.28-beta.1"
18
+ "openclaw": ">=2026.5.28-beta.2"
19
19
  },
20
20
  "peerDependenciesMeta": {
21
21
  "openclaw": {
@@ -60,13 +60,13 @@
60
60
  "allowInvalidConfigRecovery": true
61
61
  },
62
62
  "compat": {
63
- "pluginApi": ">=2026.5.28-beta.1"
63
+ "pluginApi": ">=2026.5.28-beta.2"
64
64
  },
65
65
  "startup": {
66
66
  "deferConfiguredChannelFullLoadUntilAfterListen": true
67
67
  },
68
68
  "build": {
69
- "openclawVersion": "2026.5.28-beta.1",
69
+ "openclawVersion": "2026.5.28-beta.2",
70
70
  "bundledDist": false
71
71
  },
72
72
  "release": {