@openclaw/slack 2026.5.28-beta.3 → 2026.5.28

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-D8p_1twn.js";
6
+ import { a as resolveSlackAutoThreadId, i as resolveSlackChannelType, n as buildSlackThreadingToolContext, r as resetSlackChannelTypeCacheForTest, t as slackPlugin } from "./channel-BvEE3i26.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-CxMP_s2o.js";
17
+ import { n as resolveSlackRuntimeGroupPolicy } from "./provider-Do2x35qj.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-D7jGKmQk.js").then((n) => n.t);
602
+ slackMonitorModulePromise ??= import("./monitor-RVx8NyTs.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-D8p_1twn.js";
1
+ import { t as slackPlugin } from "./channel-BvEE3i26.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-CxMP_s2o.js";
2
+ import { t as monitorSlackProvider, y as buildSlackSlashCommandMatcher } from "./provider-Do2x35qj.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-CxMP_s2o.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-Do2x35qj.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";
@@ -23,6 +23,7 @@ import { createChannelHistoryWindow } from "openclaw/plugin-sdk/reply-history";
23
23
  import { resolveHumanDelayConfig } from "openclaw/plugin-sdk/agent-runtime";
24
24
  import { mergePairLoopGuardConfig } from "openclaw/plugin-sdk/pair-loop-guard-runtime";
25
25
  import { enqueueSystemEvent } from "openclaw/plugin-sdk/system-event-runtime";
26
+ import { asFiniteNumberInRange, parseStrictFiniteNumber } from "openclaw/plugin-sdk/number-runtime";
26
27
  import { buildChannelInboundEventContext, buildMentionRegexes, classifyChannelInboundEvent, dispatchChannelInboundReply, formatInboundEnvelope, hasVisibleInboundReplyDispatch, implicitMentionKindWhen, logInboundDrop, matchesMentionWithExplicit, recordDroppedChannelInboundHistory, resolveEnvelopeFormatOptions, resolveUnmentionedGroupInboundPolicy, toInboundMediaFacts } from "openclaw/plugin-sdk/channel-inbound";
27
28
  import { filterSupplementalContextItems, resolvePinnedMainDmOwnerFromAllowlist, shouldIncludeSupplementalContext } from "openclaw/plugin-sdk/security-runtime";
28
29
  import { DEFAULT_TIMING, createStatusReactionController, logAckFailure, logTypingFailure, removeAckReactionAfterReply, resolveAckReaction, shouldAckReaction } from "openclaw/plugin-sdk/channel-feedback";
@@ -580,6 +581,19 @@ async function finalizeSlackPreviewEdit(params) {
580
581
  }
581
582
  }
582
583
  //#endregion
584
+ //#region extensions/slack/src/monitor/message-handler/timestamp.ts
585
+ const SLACK_TIMESTAMP_RE = /^\d+(?:\.\d+)?$/;
586
+ const MAX_SAFE_SLACK_TIMESTAMP_SECONDS = Number.MAX_SAFE_INTEGER / 1e3;
587
+ function resolveSlackTimestampMs(ts) {
588
+ const trimmed = ts?.trim();
589
+ if (!trimmed || !SLACK_TIMESTAMP_RE.test(trimmed)) return;
590
+ const seconds = asFiniteNumberInRange(parseStrictFiniteNumber(trimmed), {
591
+ min: 0,
592
+ max: MAX_SAFE_SLACK_TIMESTAMP_SECONDS
593
+ });
594
+ return seconds === void 0 ? void 0 : Math.round(seconds * 1e3);
595
+ }
596
+ //#endregion
583
597
  //#region extensions/slack/src/monitor/message-handler/dispatch.ts
584
598
  const UNICODE_TO_SLACK = {
585
599
  "👀": "eyes",
@@ -609,10 +623,7 @@ const SLACK_REASONING_TAG_RE = /<\s*(\/?)\s*(?:think(?:ing)?|thought|antthinking
609
623
  const SLACK_REASONING_LABEL_PREFIX_RE = /^\s*(?:>\s*)?Reasoning:\s*/iu;
610
624
  const SLACK_THINKING_LABEL_PREFIX_RE = /^\s*(?:>\s*)?Thinking\.{0,3}(?=\s*(?:\n|_))/iu;
611
625
  function resolveSlackMessageTimestampMs(message) {
612
- const ts = message.event_ts ?? message.ts;
613
- if (!ts) return;
614
- const parsed = Number(ts);
615
- return Number.isFinite(parsed) ? Math.trunc(parsed * 1e3) : void 0;
626
+ return resolveSlackTimestampMs(message.event_ts ?? message.ts);
616
627
  }
617
628
  function resolveSlackBotLoopProtection(prepared) {
618
629
  const senderBotId = prepared.message.bot_id;
@@ -2119,7 +2130,7 @@ async function resolveSlackDmHistoryContext(params) {
2119
2130
  const isCurrentBot = params.ctx.botUserId && message.user === params.ctx.botUserId || params.ctx.botId && message.bot_id === params.ctx.botId;
2120
2131
  const role = isCurrentBot || message.bot_id ? "assistant" : "user";
2121
2132
  const sender = `${isCurrentBot ? "Assistant" : message.user ? await resolveUserLabel(message.user) : normalizeOptionalString(message.username) ?? (message.bot_id ? "Bot" : "Unknown")} (${role})`;
2122
- const timestamp = message.ts ? Math.round(Number(message.ts) * 1e3) : void 0;
2133
+ const timestamp = resolveSlackTimestampMs(message.ts);
2123
2134
  entries.push({
2124
2135
  sender,
2125
2136
  body,
@@ -2534,7 +2545,7 @@ async function resolveSlackThreadContextData(params) {
2534
2545
  historyParts.push(formatInboundEnvelope({
2535
2546
  channel: "Slack",
2536
2547
  from: `${msgSenderName} (${role})`,
2537
- timestamp: historyMsg.ts ? Math.round(Number(historyMsg.ts) * 1e3) : void 0,
2548
+ timestamp: resolveSlackTimestampMs(historyMsg.ts),
2538
2549
  body: msgWithId,
2539
2550
  chatType: "channel",
2540
2551
  envelope: params.envelopeOptions
@@ -3133,7 +3144,7 @@ async function prepareSlackMessage(params) {
3133
3144
  threadTs,
3134
3145
  client: ctx.app.client
3135
3146
  }) : null;
3136
- const timestamp = message.ts ? Math.round(Number(message.ts) * 1e3) : void 0;
3147
+ const timestamp = resolveSlackTimestampMs(message.ts);
3137
3148
  const senderName = pendingBody ? await resolveSenderName() : void 0;
3138
3149
  await recordDroppedChannelInboundHistory({
3139
3150
  input: {
@@ -3268,7 +3279,7 @@ async function prepareSlackMessage(params) {
3268
3279
  let combinedBody = formatInboundEnvelope({
3269
3280
  channel: "Slack",
3270
3281
  from: envelopeFrom,
3271
- timestamp: message.ts ? Math.round(Number(message.ts) * 1e3) : void 0,
3282
+ timestamp: resolveSlackTimestampMs(message.ts),
3272
3283
  body: textWithId,
3273
3284
  chatType,
3274
3285
  sender: {
@@ -3338,7 +3349,7 @@ async function prepareSlackMessage(params) {
3338
3349
  channel: "slack",
3339
3350
  accountId: route.accountId,
3340
3351
  messageId: message.ts,
3341
- timestamp: message.ts ? Math.round(Number(message.ts) * 1e3) : void 0,
3352
+ timestamp: resolveSlackTimestampMs(message.ts),
3342
3353
  from: slackFrom,
3343
3354
  sender: {
3344
3355
  id: senderId,
@@ -3419,7 +3430,7 @@ async function prepareSlackMessage(params) {
3419
3430
  entry: {
3420
3431
  sender: senderName,
3421
3432
  body: rawBody,
3422
- timestamp: message.ts ? Math.round(Number(message.ts) * 1e3) : void 0,
3433
+ timestamp: resolveSlackTimestampMs(message.ts),
3423
3434
  messageId: message.ts
3424
3435
  }
3425
3436
  });
@@ -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-xM6ppqQZ.js");
2685
+ slackMessagePipelinePromise ??= import("./pipeline.runtime-CwtZdUTK.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-CxMP_s2o.js";
10
+ import { t as monitorSlackProvider } from "./provider-Do2x35qj.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-D7jGKmQk.js";
13
+ import "./monitor-RVx8NyTs.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.3",
3
+ "version": "2026.5.28",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@openclaw/slack",
9
- "version": "2026.5.28-beta.3",
9
+ "version": "2026.5.28",
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.3"
18
+ "openclaw": ">=2026.5.28"
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.3",
3
+ "version": "2026.5.28",
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.3"
18
+ "openclaw": ">=2026.5.28"
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.3"
63
+ "pluginApi": ">=2026.5.28"
64
64
  },
65
65
  "startup": {
66
66
  "deferConfiguredChannelFullLoadUntilAfterListen": true
67
67
  },
68
68
  "build": {
69
- "openclawVersion": "2026.5.28-beta.3",
69
+ "openclawVersion": "2026.5.28",
70
70
  "bundledDist": false
71
71
  },
72
72
  "release": {