@openclaw/slack 2026.10.10-beta.3 → 2026.10.10-beta.5

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 (23) hide show
  1. package/dist/.setup/{action-runtime-CgYsBWl6.mjs → action-runtime-ChRfnnBu.mjs} +4 -4
  2. package/dist/.setup/action-runtime.runtime-Ck_j1YTn.mjs +1 -0
  3. package/dist/.setup/{actions-CafoV8hS.mjs → actions-By7tvpvv.mjs} +2 -2
  4. package/dist/.setup/{approval-handler.runtime-Pty8hAZ9.mjs → approval-handler.runtime-D8ArtDQt.mjs} +4 -4
  5. package/dist/.setup/{approval-message-updates-DCnXFLf3.mjs → approval-message-updates-DT7XBPbV.mjs} +1 -1
  6. package/dist/.setup/{channel-B7jkkIen.mjs → channel-6YzXl_63.mjs} +9 -9
  7. package/dist/.setup/{channel-type-BrbGGbzI.mjs → channel-type-BEFP2ORi.mjs} +1 -1
  8. package/dist/.setup/{monitor-B36YZetK.mjs → monitor-BFilOuM_.mjs} +47 -19
  9. package/dist/.setup/{outbound-adapter-BlN9vmT-.mjs → outbound-adapter-9dbnYtL1.mjs} +3 -3
  10. package/dist/.setup/{pipeline.runtime-CT7Krkyw.mjs → pipeline.runtime-BG5swHnj.mjs} +9 -9
  11. package/dist/.setup/{policy-D4eNyn8m.mjs → policy-yhn48xf5.mjs} +1 -1
  12. package/dist/.setup/{relay-source-DCfb4yWT.mjs → relay-source-oY9SbDiX.mjs} +2 -3
  13. package/dist/.setup/{replies-Dwwt4eVi.mjs → replies-CJwjTqDr.mjs} +4 -4
  14. package/dist/.setup/{reply-blocks-CoZ_dGM_.mjs → reply-blocks-Ca-raz2z.mjs} +1 -1
  15. package/dist/.setup/{send-pi6r24yv.mjs → send-C-8wY0lK.mjs} +1 -1
  16. package/dist/.setup/{session-status-DQY4hZLd.mjs → session-status-Dv8wNBEt.mjs} +8 -2
  17. package/dist/.setup/{slash-dispatch.runtime-BDEJ2s49.mjs → slash-dispatch.runtime-v5kQqJPh.mjs} +1 -1
  18. package/dist/.source-module-urls/562d694877afe9d9dcbb3b32a8883c16974738f2aa892c48d45572cdc9a62529.json +1 -0
  19. package/dist/api.js +6 -6
  20. package/dist/channel-plugin-api.js +1 -1
  21. package/dist/runtime-api.js +5 -5
  22. package/package.json +4 -4
  23. package/dist/.setup/action-runtime.runtime-WS3mGjut.mjs +0 -1
@@ -1,7 +1,7 @@
1
1
  import { a as parseSlackTarget, n as formatSlackTarget, o as resolveSlackChannelId } from "./target-parsing-FFE26kOV.mjs";
2
2
  import { t as slackContextTargetsMatch } from "./targets-C6LZQL1Q.mjs";
3
- import { Ht as resolveSlackAutoThreadId, Vt as SLACK_PRIVATE_ACTION_DELIVERY_RESULT, b as hasSlackNativeDataBlock, ht as parseSlackBlocksInput, jt as getSlackInstallationKind, m as assertSlackDetachedTargetAllowed, r as buildSlackChannelIdCandidates } from "./session-status-DQY4hZLd.mjs";
4
- import { n as resolveSlackChannelConfig, t as isSlackChannelAllowedByPolicy } from "./policy-D4eNyn8m.mjs";
3
+ import { Ht as resolveSlackAutoThreadId, Vt as SLACK_PRIVATE_ACTION_DELIVERY_RESULT, b as hasSlackNativeDataBlock, ht as parseSlackBlocksInput, jt as getSlackInstallationKind, m as assertSlackDetachedTargetAllowed, r as buildSlackChannelIdCandidates } from "./session-status-Dv8wNBEt.mjs";
4
+ import { n as resolveSlackChannelConfig, t as isSlackChannelAllowedByPolicy } from "./policy-yhn48xf5.mjs";
5
5
  import { t as mergeSlackSendResults } from "./send-results-eeOu_HYm.mjs";
6
6
  import { normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
7
7
  import { normalizeOptionalLowercaseString } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -30,10 +30,10 @@ const SLACK_REACTION_RESULT_LIMIT = 100;
30
30
  function readSlackResultLimit(params) {
31
31
  return Math.min(readPositiveIntegerParam(params, "limit", { message: "limit must be a positive integer." }) ?? SLACK_REACTION_RESULT_LIMIT, SLACK_REACTION_RESULT_LIMIT);
32
32
  }
33
- const loadSlackActionsRuntime = createLazyRuntimeModule(() => import("./actions-CafoV8hS.mjs").then((n) => n.t));
33
+ const loadSlackActionsRuntime = createLazyRuntimeModule(() => import("./actions-By7tvpvv.mjs").then((n) => n.t));
34
34
  const bindSlackAction = createLazyRuntimeMethodBinder(loadSlackActionsRuntime);
35
35
  const loadSlackAccountsRuntime = createLazyRuntimeModule(() => import("./accounts-msihSF3-.mjs").then((n) => n.t));
36
- const loadSlackChannelTypeRuntime = createLazyRuntimeModule(() => import("./channel-type-BrbGGbzI.mjs").then((n) => n.t));
36
+ const loadSlackChannelTypeRuntime = createLazyRuntimeModule(() => import("./channel-type-BEFP2ORi.mjs").then((n) => n.t));
37
37
  const bindSlackChannelType = createLazyRuntimeMethodBinder(loadSlackChannelTypeRuntime);
38
38
  const slackActionRuntime = {
39
39
  deleteSlackMessage: bindSlackAction((runtime) => runtime.deleteSlackMessage),
@@ -0,0 +1 @@
1
+ export { t as handleSlackAction } from "./action-runtime-ChRfnnBu.mjs";
@@ -1,9 +1,9 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.mjs";
2
2
  import { h as resolveSlackBotToken, o as resolveDefaultSlackAccountId, s as resolveSlackAccount } from "./accounts-msihSF3-.mjs";
3
3
  import { n as formatSlackTarget } from "./target-parsing-FFE26kOV.mjs";
4
- import { D as buildSlackCompleteBlocksFallbackText, E as buildSlackBlocksFallbackText, F as truncateSlackTextByUtf8Bytes, N as countSlackTextUtf8Bytes, O as renderSlackBlockFallbackText, Q as normalizeSlackOutboundText, T as stripSlackNativeDataBlocks, Vt as SLACK_PRIVATE_ACTION_DELIVERY_RESULT, _ as appendSlackNativeDataPlainTextFallback, b as hasSlackNativeDataBlock, g as appendSlackNativeDataFallbackText, gt as validateSlackBlocksArray, k as SLACK_EDIT_TEXT_MAX_BYTES, m as assertSlackDetachedTargetAllowed, st as escapeSlackMrkdwn, x as isSlackInvalidBlocksError } from "./session-status-DQY4hZLd.mjs";
4
+ import { D as buildSlackCompleteBlocksFallbackText, E as buildSlackBlocksFallbackText, F as truncateSlackTextByUtf8Bytes, N as countSlackTextUtf8Bytes, O as renderSlackBlockFallbackText, Q as normalizeSlackOutboundText, T as stripSlackNativeDataBlocks, Vt as SLACK_PRIVATE_ACTION_DELIVERY_RESULT, _ as appendSlackNativeDataPlainTextFallback, b as hasSlackNativeDataBlock, g as appendSlackNativeDataFallbackText, gt as validateSlackBlocksArray, k as SLACK_EDIT_TEXT_MAX_BYTES, m as assertSlackDetachedTargetAllowed, st as escapeSlackMrkdwn, x as isSlackInvalidBlocksError } from "./session-status-Dv8wNBEt.mjs";
5
5
  import { _ as getSlackWriteClient, h as createSlackWriteClient, u as createSlackLookupClient } from "./probe-IiHogLQN.mjs";
6
- import { m as buildSlackNativeDataDeliveryPlan, t as sendMessageSlack } from "./send-pi6r24yv.mjs";
6
+ import { m as buildSlackNativeDataDeliveryPlan, t as sendMessageSlack } from "./send-C-8wY0lK.mjs";
7
7
  import { normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
8
8
  import { asOptionalObjectRecord, asOptionalRecord, isRecord, normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString, readNonBlankString } from "openclaw/plugin-sdk/string-coerce-runtime";
9
9
  import { createSubsystemLogger, logVerbose } from "openclaw/plugin-sdk/runtime-env";
@@ -1,9 +1,9 @@
1
1
  import { a as parseSlackTarget } from "./target-parsing-FFE26kOV.mjs";
2
- import { F as truncateSlackTextByUtf8Bytes, Lt as normalizeSlackApproverId, P as truncateSlackText, Tt as shouldHandleSlackNativeApprovalRequest, _t as isSlackAnyNativeApprovalClientEnabled, ct as SLACK_APPROVAL_HEADER_BLOCK_ID, k as SLACK_EDIT_TEXT_MAX_BYTES, n as setSlackSessionStatus } from "./session-status-DQY4hZLd.mjs";
2
+ import { F as truncateSlackTextByUtf8Bytes, Lt as normalizeSlackApproverId, P as truncateSlackText, Tt as shouldHandleSlackNativeApprovalRequest, _t as isSlackAnyNativeApprovalClientEnabled, ct as SLACK_APPROVAL_HEADER_BLOCK_ID, k as SLACK_EDIT_TEXT_MAX_BYTES, n as setSlackSessionStatus } from "./session-status-Dv8wNBEt.mjs";
3
3
  import { g as getSlackListenerWriteClient } from "./probe-IiHogLQN.mjs";
4
- import { s as resolveSlackReplyBlocks } from "./reply-blocks-CoZ_dGM_.mjs";
5
- import { t as sendMessageSlack } from "./send-pi6r24yv.mjs";
6
- import { n as runSlackApprovalMessageUpdate } from "./approval-message-updates-DCnXFLf3.mjs";
4
+ import { s as resolveSlackReplyBlocks } from "./reply-blocks-Ca-raz2z.mjs";
5
+ import { t as sendMessageSlack } from "./send-C-8wY0lK.mjs";
6
+ import { n as runSlackApprovalMessageUpdate } from "./approval-message-updates-DT7XBPbV.mjs";
7
7
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
8
8
  import { buildChannelApprovalNativeTargetKey } from "openclaw/plugin-sdk/approval-native-runtime";
9
9
  import { buildApprovalPresentationFromActionDescriptors } from "openclaw/plugin-sdk/approval-reply-runtime";
@@ -1,4 +1,4 @@
1
- import { U as isSlackApprovalActionId, lt as decodeSlackApprovalAction } from "./session-status-DQY4hZLd.mjs";
1
+ import { U as isSlackApprovalActionId, lt as decodeSlackApprovalAction } from "./session-status-Dv8wNBEt.mjs";
2
2
  import { asOptionalRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
3
3
  import { KeyedAsyncQueue } from "openclaw/plugin-sdk/keyed-async-queue";
4
4
  //#region extensions/slack/src/approval-message-updates.ts
@@ -2,12 +2,12 @@ import { r as isSlackPluginAccountConfigured } from "./account-configured-zcR9TJ
2
2
  import { c as resolveSlackAccountAllowFrom, d as resolveSlackOperationToken, f as resolveSlackReplyToMode, i as listSlackAccountIds, n as hasImplicitDefaultSlackAccount, o as resolveDefaultSlackAccountId, s as resolveSlackAccount } from "./accounts-msihSF3-.mjs";
3
3
  import { a as parseSlackTarget, i as normalizeSlackMessagingTarget, n as formatSlackTarget, o as resolveSlackChannelId, r as looksLikeSlackTargetId, t as canonicalizeSlackApiTargetId } from "./target-parsing-FFE26kOV.mjs";
4
4
  import { t as slackContextTargetsMatch } from "./targets-C6LZQL1Q.mjs";
5
- import { At as resolveSlackApprovalTeamId, Bt as resolvePluginApprovalSlackApprovers, Ct as resolveSlackFallbackOriginTarget, Dt as slackTargetsMatch, Et as shouldHandleSlackPluginViaForwardingSession, Ft as isSlackExecApprovalAuthorizedSender, Ht as resolveSlackAutoThreadId, It as isSlackExecApprovalClientEnabled, M as SLACK_TEXT_LIMIT, Mt as isSlackWorkspaceInstallation, N as countSlackTextUtf8Bytes, Ot as getSlackApprovalApproversForTeam, Pt as getSlackExecApprovalApprovers, Q as normalizeSlackOutboundText, Rt as resolveSlackExecApprovalTarget, St as resolveSlackApproverDmTargets, Tt as shouldHandleSlackNativeApprovalRequest, _t as isSlackAnyNativeApprovalClientEnabled, a as resolveSlackGroupRequireMention, bt as normalizeSlackOriginTarget, c as qualifySlackConversationId, d as normalizeSlackRouteBindingConfig, f as resolveSlackConversationBindingRoute, ft as SLACK_PRESENTATION_CAPABILITIES, jt as getSlackInstallationKind, k as SLACK_EDIT_TEXT_MAX_BYTES, kt as isSlackPluginApprovalAuthorizedSender, l as qualifySlackRoutePeerId, m as assertSlackDetachedTargetAllowed, n as setSlackSessionStatus, o as resolveSlackGroupToolPolicy, ot as renderSlackMessagePresentationFallbackText, vt as isSlackPluginApprovalRequest, wt as resolveTurnSourceSlackOriginTarget, xt as resolveSessionSlackOriginTarget, yt as normalizeSlackForwardTarget, zt as shouldSuppressLocalSlackExecApprovalPrompt } from "./session-status-DQY4hZLd.mjs";
5
+ import { At as resolveSlackApprovalTeamId, Bt as resolvePluginApprovalSlackApprovers, Ct as resolveSlackFallbackOriginTarget, Dt as slackTargetsMatch, Et as shouldHandleSlackPluginViaForwardingSession, Ft as isSlackExecApprovalAuthorizedSender, Ht as resolveSlackAutoThreadId, It as isSlackExecApprovalClientEnabled, M as SLACK_TEXT_LIMIT, Mt as isSlackWorkspaceInstallation, N as countSlackTextUtf8Bytes, Ot as getSlackApprovalApproversForTeam, Pt as getSlackExecApprovalApprovers, Q as normalizeSlackOutboundText, Rt as resolveSlackExecApprovalTarget, St as resolveSlackApproverDmTargets, Tt as shouldHandleSlackNativeApprovalRequest, _t as isSlackAnyNativeApprovalClientEnabled, a as resolveSlackGroupRequireMention, bt as normalizeSlackOriginTarget, c as qualifySlackConversationId, d as normalizeSlackRouteBindingConfig, f as resolveSlackConversationBindingRoute, ft as SLACK_PRESENTATION_CAPABILITIES, jt as getSlackInstallationKind, k as SLACK_EDIT_TEXT_MAX_BYTES, kt as isSlackPluginApprovalAuthorizedSender, l as qualifySlackRoutePeerId, m as assertSlackDetachedTargetAllowed, n as setSlackSessionStatus, o as resolveSlackGroupToolPolicy, ot as renderSlackMessagePresentationFallbackText, vt as isSlackPluginApprovalRequest, wt as resolveTurnSourceSlackOriginTarget, xt as resolveSessionSlackOriginTarget, yt as normalizeSlackForwardTarget, zt as shouldSuppressLocalSlackExecApprovalPrompt } from "./session-status-Dv8wNBEt.mjs";
6
6
  import { _ as getSlackWriteClient, c as collectSlackCursorPages, o as formatSlackError, u as createSlackLookupClient } from "./probe-IiHogLQN.mjs";
7
- import { c as resolveSlackReplyDeliveryMessages, o as resolveSlackReplyBlockResolution, p as buildSlackPresentationBlocksIfComplete, r as normalizeSlackReplyPayload, s as resolveSlackReplyBlocks } from "./reply-blocks-CoZ_dGM_.mjs";
7
+ import { c as resolveSlackReplyDeliveryMessages, o as resolveSlackReplyBlockResolution, p as buildSlackPresentationBlocksIfComplete, r as normalizeSlackReplyPayload, s as resolveSlackReplyBlocks } from "./reply-blocks-Ca-raz2z.mjs";
8
8
  import { n as resolveSlackReplyThreadTs, r as resolveSlackThreadTsValue, t as normalizeSlackThreadTsCandidate } from "./thread-ts-Cvt7WD6B.mjs";
9
9
  import { n as extractSlackToolSend, t as describeSlackMessageTool } from "./message-tool-api-BS5ekEA_.mjs";
10
- import { n as resolveSlackChannelType, r as resolveSlackConversationInfo } from "./channel-type-BrbGGbzI.mjs";
10
+ import { n as resolveSlackChannelType, r as resolveSlackConversationInfo } from "./channel-type-BEFP2ORi.mjs";
11
11
  import { t as getOptionalSlackRuntime } from "./runtime-JSVZSWAj.mjs";
12
12
  import { n as slackPluginBase, r as slackSecurityAdapter, t as slackConfigAdapter } from "./shared-DpHCoKy2.mjs";
13
13
  import { i as SLACK_CHANNEL } from "./channel.setup-u6QQdbTa.mjs";
@@ -99,7 +99,7 @@ const baseSlackApprovalCapability = createApproverRestrictedNativeApprovalCapabi
99
99
  ],
100
100
  isConfigured: isSlackAnyNativeApprovalClientEnabled,
101
101
  shouldHandle: shouldHandleSlackNativeApprovalRequest,
102
- load: async () => (await import("./approval-handler.runtime-Pty8hAZ9.mjs")).slackApprovalNativeRuntime
102
+ load: async () => (await import("./approval-handler.runtime-D8ArtDQt.mjs")).slackApprovalNativeRuntime
103
103
  })
104
104
  });
105
105
  const baseSlackNativeAdapter = baseSlackApprovalCapability.nativeAsync;
@@ -378,7 +378,7 @@ const SLACK_TOOL_DELIVERY_ACTIONS = /* @__PURE__ */ new Set([
378
378
  "unpinMessage",
379
379
  "uploadFile"
380
380
  ]);
381
- const loadSlackActionRuntime$1 = createLazyRuntimeModule(() => import("./action-runtime.runtime-WS3mGjut.mjs"));
381
+ const loadSlackActionRuntime$1 = createLazyRuntimeModule(() => import("./action-runtime.runtime-Ck_j1YTn.mjs"));
382
382
  function resolveSlackActionContext(ctx, toolContext) {
383
383
  if (!toolContext && !ctx.mediaAccess && !ctx.mediaLocalRoots && !ctx.mediaReadFile && !ctx.conversationReadOrigin && !ctx.requesterAccountId && !ctx.requesterSenderId && !ctx.assertDirectAdapterHandoff) return;
384
384
  return {
@@ -613,7 +613,7 @@ function buildSlackThreadingToolContext(params) {
613
613
  const loadExtensionSharedSdk = createLazyRuntimeModule(() => import("openclaw/plugin-sdk/extension-shared"));
614
614
  const loadTargetResolverRuntimeSdk = createLazyRuntimeModule(() => import("openclaw/plugin-sdk/target-resolver-runtime"));
615
615
  const loadSlackScopesModule = createLazyRuntimeModule(() => import("./scopes-DfQVi8Jw.mjs"));
616
- const loadSlackOutboundAdapterModule = createLazyRuntimeModule(() => import("./outbound-adapter-BlN9vmT-.mjs"));
616
+ const loadSlackOutboundAdapterModule = createLazyRuntimeModule(() => import("./outbound-adapter-9dbnYtL1.mjs"));
617
617
  const bindSlackOutbound = createLazyRuntimeMethodBinder(loadSlackOutboundAdapterModule);
618
618
  async function resolveSlackHandleAction() {
619
619
  return getOptionalSlackRuntime()?.channel?.slack?.handleSlackAction ?? (await loadSlackActionRuntime()).handleSlackAction;
@@ -621,10 +621,10 @@ async function resolveSlackHandleAction() {
621
621
  const loadSlackDirectoryConfigModule = createLazyRuntimeModule(() => import("./directory-config-Cjj0N8R0.mjs").then((n) => n.t));
622
622
  const loadSlackResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels-DRRhElwz.mjs").then((n) => n.n));
623
623
  const loadSlackResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-Cz8e17ky.mjs").then((n) => n.n));
624
- const loadSlackActionRuntime = createLazyRuntimeModule(() => import("./action-runtime.runtime-WS3mGjut.mjs"));
625
- const loadSlackSendRuntime = createLazyRuntimeModule(() => import("./send-pi6r24yv.mjs").then((n) => n.n));
624
+ const loadSlackActionRuntime = createLazyRuntimeModule(() => import("./action-runtime.runtime-Ck_j1YTn.mjs"));
625
+ const loadSlackSendRuntime = createLazyRuntimeModule(() => import("./send-C-8wY0lK.mjs").then((n) => n.n));
626
626
  const loadSlackProbeModule = createLazyRuntimeModule(() => import("./probe-IiHogLQN.mjs").then((n) => n.n));
627
- const loadSlackMonitorModule = createLazyRuntimeModule(() => import("./monitor-B36YZetK.mjs").then((n) => n.t));
627
+ const loadSlackMonitorModule = createLazyRuntimeModule(() => import("./monitor-BFilOuM_.mjs").then((n) => n.t));
628
628
  const loadSlackDirectoryLiveModule = createLazyRuntimeModule(() => import("./directory-live-BIKD-5B_.mjs").then((n) => n.t));
629
629
  async function setSlackHeartbeatThreadStatus(params) {
630
630
  const threadTs = resolveSlackThreadTsValue({ threadId: params.threadId });
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.mjs";
2
2
  import { d as resolveSlackOperationToken, s as resolveSlackAccount } from "./accounts-msihSF3-.mjs";
3
- import { m as assertSlackDetachedTargetAllowed } from "./session-status-DQY4hZLd.mjs";
3
+ import { m as assertSlackDetachedTargetAllowed } from "./session-status-Dv8wNBEt.mjs";
4
4
  import { d as createSlackReadClient, m as createSlackWebClient, y as readLruMapEntry } from "./probe-IiHogLQN.mjs";
5
5
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
6
6
  import { normalizeStringEntriesLower } from "openclaw/plugin-sdk/string-normalization-runtime";
@@ -2,17 +2,17 @@ import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.mjs";
2
2
  import { n as registerSlackHttpHandler, r as normalizeSlackWebhookPath } from "./registry-DizWcnNp.mjs";
3
3
  import { a as mergeSlackAccountConfig, c as resolveSlackAccountAllowFrom, f as resolveSlackReplyToMode, h as resolveSlackBotToken, l as resolveSlackAccountDmPolicy, m as resolveSlackAppToken, o as resolveDefaultSlackAccountId, p as formatSlackBotTokenIdentityWarning, s as resolveSlackAccount } from "./accounts-msihSF3-.mjs";
4
4
  import { a as parseSlackTarget, n as formatSlackTarget } from "./target-parsing-FFE26kOV.mjs";
5
- import { D as buildSlackCompleteBlocksFallbackText, Ft as isSlackExecApprovalAuthorizedSender, G as isSlackQuestionActionId, M as SLACK_TEXT_LIMIT, Nt as registerSlackInstallationState, P as truncateSlackText, U as isSlackApprovalActionId, W as isSlackCallbackActionId, Y as resolveSlackQuestionAction, _t as isSlackAnyNativeApprovalClientEnabled, c as qualifySlackConversationId, d as normalizeSlackRouteBindingConfig, kt as isSlackPluginApprovalAuthorizedSender, l as qualifySlackRoutePeerId, lt as decodeSlackApprovalAction, n as setSlackSessionStatus, p as resolveSlackConversationBindingRouteAsync, q as decodeSlackQuestionAction, r as buildSlackChannelIdCandidates, s as setSlackChannelPolicyBindings, st as escapeSlackMrkdwn, t as renameSlackSession, u as resolveSlackAgentRoute } from "./session-status-DQY4hZLd.mjs";
5
+ import { D as buildSlackCompleteBlocksFallbackText, Ft as isSlackExecApprovalAuthorizedSender, G as isSlackQuestionActionId, M as SLACK_TEXT_LIMIT, Nt as registerSlackInstallationState, P as truncateSlackText, U as isSlackApprovalActionId, W as isSlackCallbackActionId, Y as resolveSlackQuestionAction, _t as isSlackAnyNativeApprovalClientEnabled, c as qualifySlackConversationId, d as normalizeSlackRouteBindingConfig, kt as isSlackPluginApprovalAuthorizedSender, l as qualifySlackRoutePeerId, lt as decodeSlackApprovalAction, n as setSlackSessionStatus, p as resolveSlackConversationBindingRouteAsync, q as decodeSlackQuestionAction, r as buildSlackChannelIdCandidates, s as setSlackChannelPolicyBindings, st as escapeSlackMrkdwn, t as renameSlackSession, u as resolveSlackAgentRoute } from "./session-status-Dv8wNBEt.mjs";
6
6
  import { A as resolveSlackAllowListMatch, C as resolveSlackLookupClientOptions, D as allowListMatches, O as normalizeSlackAllowOwnerEntry, T as resolveSlackWebClientOptions, a as slackIngressIdentity, b as writeLruMapEntry, c as collectSlackCursorPages, f as createSlackStartupAuthClient, g as getSlackListenerWriteClient, i as createSlackIngressSubject, j as resolveSlackUserAllowListForTeam, k as normalizeSlackSlug, m as createSlackWebClient, o as formatSlackError, v as pruneExpiredMapEntries, w as resolveSlackMonitorDispatchers, y as readLruMapEntry } from "./probe-IiHogLQN.mjs";
7
7
  import { n as getSlackRuntime, t as getOptionalSlackRuntime } from "./runtime-JSVZSWAj.mjs";
8
8
  import { t as DEFAULT_SLACK_SUGGESTED_PROMPTS } from "./channel-meta-C443t-lI.mjs";
9
- import { S as hasSlackMessageTableBlock, f as readSlackMessages, v as isGovSlackClient, y as saveRemoteMedia } from "./actions-CafoV8hS.mjs";
10
- import { d as requireSlackPostMessageTimestamp, f as buildSlackMessageIdentityPayload, r as setSlackDefaultSendIdentity } from "./send-pi6r24yv.mjs";
9
+ import { S as hasSlackMessageTableBlock, f as readSlackMessages, v as isGovSlackClient, y as saveRemoteMedia } from "./actions-By7tvpvv.mjs";
10
+ import { d as requireSlackPostMessageTimestamp, f as buildSlackMessageIdentityPayload, r as setSlackDefaultSendIdentity } from "./send-C-8wY0lK.mjs";
11
11
  import "./http-C9sM-FXe.mjs";
12
- import { n as resolveSlackChannelConfig, r as resolveSlackChannelLabel, t as isSlackChannelAllowedByPolicy } from "./policy-D4eNyn8m.mjs";
12
+ import { n as resolveSlackChannelConfig, r as resolveSlackChannelLabel, t as isSlackChannelAllowedByPolicy } from "./policy-yhn48xf5.mjs";
13
13
  import { t as resolveSlackChannelAllowlist } from "./resolve-channels-DRRhElwz.mjs";
14
14
  import { t as resolveSlackUserAllowlist } from "./resolve-users-Cz8e17ky.mjs";
15
- import { n as runSlackApprovalMessageUpdate, t as hasSlackApprovalControl } from "./approval-message-updates-DCnXFLf3.mjs";
15
+ import { n as runSlackApprovalMessageUpdate, t as hasSlackApprovalControl } from "./approval-message-updates-DT7XBPbV.mjs";
16
16
  import { normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
17
17
  import { normalizeResolvedSecretInputString } from "openclaw/plugin-sdk/secret-input";
18
18
  import { asNonArrayRecord, asOptionalObjectRecord, asOptionalRecord, isRecord, normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString, normalizeStringEntries, normalizeUniqueTrimmedStringList } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -485,6 +485,9 @@ function resolveSlackIdentityHealth(params) {
485
485
  //#endregion
486
486
  //#region extensions/slack/src/monitor/reconnect-policy.ts
487
487
  const SLACK_AUTH_ERROR_RE = /account_inactive|invalid_auth|token_revoked|token_expired|not_authed|org_login_required|team_access_not_granted|user_removed_from_team|team_disabled|missing_scope|cannot_find_service|invalid_token/i;
488
+ const SLACK_DEFINITIVE_AUTH_ERROR_RE = /account_inactive|token_revoked|token_expired|not_authed|org_login_required|team_access_not_granted|user_removed_from_team|team_disabled|missing_scope|cannot_find_service|invalid_token/i;
489
+ /** Consecutive isolated invalid_auth failures before the channel turns terminal. */
490
+ const SLACK_ISOLATED_INVALID_AUTH_TERMINAL_LIMIT = 3;
488
491
  const SLACK_SOCKET_RECONNECT_POLICY = {
489
492
  initialMs: 2e3,
490
493
  maxMs: 3e4,
@@ -578,6 +581,28 @@ function waitForSlackSocketDisconnect(app, abortSignal) {
578
581
  function isNonRecoverableSlackAuthError(error) {
579
582
  return SLACK_AUTH_ERROR_RE.test(formatSlackError(error, ""));
580
583
  }
584
+ /** Terminal, retryable-isolated, or undefined (not auth-shaped) for this failure. */
585
+ function nextSlackAuthFailureState(error, consecutiveInvalidAuth) {
586
+ if (error && isIsolatedInvalidAuthSlackError(error)) {
587
+ const next = consecutiveInvalidAuth + 1;
588
+ return next >= SLACK_ISOLATED_INVALID_AUTH_TERMINAL_LIMIT ? {
589
+ decision: "terminal",
590
+ consecutiveInvalidAuth: next
591
+ } : {
592
+ decision: "retry-isolated",
593
+ consecutiveInvalidAuth: next
594
+ };
595
+ }
596
+ return {
597
+ decision: error && isNonRecoverableSlackAuthError(error) ? "terminal" : void 0,
598
+ consecutiveInvalidAuth
599
+ };
600
+ }
601
+ /** Isolated invalid_auth: auth-shaped, but not a definitive credential verdict. */
602
+ function isIsolatedInvalidAuthSlackError(error) {
603
+ const text = formatSlackError(error, "");
604
+ return /invalid_auth/i.test(text) && !SLACK_DEFINITIVE_AUTH_ERROR_RE.test(text);
605
+ }
581
606
  //#endregion
582
607
  //#region extensions/slack/src/monitor/socket-mode-envelope.ts
583
608
  function installSlackSocketModeEnvelopeGuard(client, acknowledge, logger) {
@@ -700,6 +725,14 @@ function publishSlackConnectedStatus(setStatus, identityHealth = {
700
725
  lastConnectedAt
701
726
  }) : channelReadyPatch({ lastConnectedAt }));
702
727
  }
728
+ function trackSlackAuthFailure(failure, phase, setStatus, logError, state) {
729
+ const auth = nextSlackAuthFailureState(failure, state.consecutiveInvalidAuth);
730
+ state.consecutiveInvalidAuth = auth.consecutiveInvalidAuth;
731
+ if (auth.decision !== "terminal") return;
732
+ publishSlackBlockedStatus(setStatus, failure);
733
+ logError(`slack ${phase} (${formatSlackError(failure)})`);
734
+ throw failure instanceof Error ? failure : new Error(formatSlackError(failure));
735
+ }
703
736
  function publishSlackBlockedStatus(setStatus, error) {
704
737
  if (!setStatus) return;
705
738
  setStatus(channelBlockedPatch(formatSlackError(error), { connected: false }));
@@ -2888,7 +2921,7 @@ const SLACK_COMMAND_ARG_BUTTON_VALUE_MAX = 2e3;
2888
2921
  const SLACK_COMMAND_ARG_CONFIRM_TEXT_MAX = 300;
2889
2922
  const SLACK_HEADER_TEXT_MAX = 150;
2890
2923
  const SLACK_COMMAND_ARG_ACTION_BLOCKS_MAX = 47;
2891
- const loadSlashDispatchRuntime = createLazyRuntimeModule(() => import("./slash-dispatch.runtime-BDEJ2s49.mjs"));
2924
+ const loadSlashDispatchRuntime = createLazyRuntimeModule(() => import("./slash-dispatch.runtime-v5kQqJPh.mjs"));
2892
2925
  const loadPluginCommandRuntime = createLazyRuntimeModule(() => import("openclaw/plugin-sdk/plugin-command-runtime"));
2893
2926
  const slackExternalArgMenuStore = createSlackExternalArgMenuStore();
2894
2927
  function buildSlackArgMenuConfirm(params) {
@@ -4507,7 +4540,7 @@ async function handleSlackApprovalInteraction(params) {
4507
4540
  channelId,
4508
4541
  messageTs
4509
4542
  }, async () => {
4510
- const { readSlackMessages } = await import("./actions-CafoV8hS.mjs").then((n) => n.t);
4543
+ const { readSlackMessages } = await import("./actions-By7tvpvv.mjs").then((n) => n.t);
4511
4544
  const { messages } = await readSlackMessages(channelId, {
4512
4545
  client: params.eventScope?.client ?? params.ctx.app.client,
4513
4546
  messageId: messageTs,
@@ -5846,7 +5879,7 @@ function buildSlackDebounceKey(message, accountId, teamId) {
5846
5879
  }
5847
5880
  //#endregion
5848
5881
  //#region extensions/slack/src/monitor/message-handler.ts
5849
- const loadSlackMessagePipeline = createLazyRuntimeModule(() => import("./pipeline.runtime-CT7Krkyw.mjs"));
5882
+ const loadSlackMessagePipeline = createLazyRuntimeModule(() => import("./pipeline.runtime-BG5swHnj.mjs"));
5850
5883
  const RETRYABLE_FLUSH_MAX_ATTEMPTS = 3;
5851
5884
  function shouldDebounceSlackMessage(message, cfg) {
5852
5885
  const textForCommandDetection = stripSlackMentionsForCommandDetection(message.text ?? "");
@@ -6381,7 +6414,7 @@ async function getSlackBoltInterop() {
6381
6414
  }
6382
6415
  return slackBoltInterop;
6383
6416
  }
6384
- const loadSlackRelaySource = createLazyRuntimeModule(() => import("./relay-source-DCfb4yWT.mjs"));
6417
+ const loadSlackRelaySource = createLazyRuntimeModule(() => import("./relay-source-oY9SbDiX.mjs"));
6385
6418
  function resolveSlackRuntimeIdentity(params) {
6386
6419
  const botUserId = normalizeOptionalString(params.botUserId);
6387
6420
  const botId = normalizeOptionalString(params.botId);
@@ -6778,6 +6811,8 @@ async function monitorSlackProvider(opts) {
6778
6811
  }
6779
6812
  if (slackMode === "socket") {
6780
6813
  let reconnectAttempts = 0;
6814
+ const authState = { consecutiveInvalidAuth: 0 };
6815
+ const logError = (message) => runtime.error?.(message);
6781
6816
  let hasLoggedSocketConnected = false;
6782
6817
  while (!opts.abortSignal?.aborted) {
6783
6818
  let delayMs;
@@ -6787,6 +6822,7 @@ async function monitorSlackProvider(opts) {
6787
6822
  abortSignal: opts.abortSignal,
6788
6823
  onStarted: async () => {
6789
6824
  reconnectAttempts = 0;
6825
+ authState.consecutiveInvalidAuth = 0;
6790
6826
  await recoverSlackIdentity();
6791
6827
  publishSlackConnectedStatus(opts.setStatus, ctx.identityHealth);
6792
6828
  if (!hasLoggedSocketConnected) {
@@ -6798,11 +6834,7 @@ async function monitorSlackProvider(opts) {
6798
6834
  if (!disconnect) break;
6799
6835
  if (opts.abortSignal?.aborted) break;
6800
6836
  publishSlackDisconnectedStatus(opts.setStatus, disconnect.error);
6801
- if (disconnect.error && isNonRecoverableSlackAuthError(disconnect.error)) {
6802
- publishSlackBlockedStatus(opts.setStatus, disconnect.error);
6803
- runtime.error?.(`slack socket mode disconnected due to non-recoverable auth error — skipping channel (${formatSlackError(disconnect.error)})`);
6804
- throw disconnect.error instanceof Error ? disconnect.error : new Error(formatSlackError(disconnect.error));
6805
- }
6837
+ trackSlackAuthFailure(disconnect.error, "auth: disconnected, skipping channel", opts.setStatus, logError, authState);
6806
6838
  reconnectAttempts += 1;
6807
6839
  delayMs = computeBackoff(SLACK_SOCKET_RECONNECT_POLICY, reconnectAttempts);
6808
6840
  runtime.log?.(warn(formatSlackSocketReconnectMessage({
@@ -6813,11 +6845,7 @@ async function monitorSlackProvider(opts) {
6813
6845
  })));
6814
6846
  await gracefulStopSlackApp(app);
6815
6847
  } catch (err) {
6816
- if (isNonRecoverableSlackAuthError(err)) {
6817
- publishSlackBlockedStatus(opts.setStatus, err);
6818
- runtime.error?.(`slack socket mode failed to start due to non-recoverable auth error — skipping channel (${formatSlackError(err)})`);
6819
- throw err;
6820
- }
6848
+ trackSlackAuthFailure(err, "auth: start failed, skipping channel", opts.setStatus, logError, authState);
6821
6849
  publishSlackDisconnectedStatus(opts.setStatus, err);
6822
6850
  reconnectAttempts += 1;
6823
6851
  delayMs = computeBackoff(SLACK_SOCKET_RECONNECT_POLICY, reconnectAttempts);
@@ -1,7 +1,7 @@
1
1
  import { d as resolveSlackOperationToken, s as resolveSlackAccount } from "./accounts-msihSF3-.mjs";
2
2
  import { a as parseSlackTarget } from "./target-parsing-FFE26kOV.mjs";
3
- import { K as resolveSlackQuestionActionIds, L as SLACK_QUESTION_FINALIZATION_BLOCKS, M as SLACK_TEXT_LIMIT, ft as SLACK_PRESENTATION_CAPABILITIES, m as assertSlackDetachedTargetAllowed, st as escapeSlackMrkdwn } from "./session-status-DQY4hZLd.mjs";
4
- import { c as resolveSlackReplyDeliveryMessages, i as parseSlackReplyBlockSegments, o as resolveSlackReplyBlockResolution, r as normalizeSlackReplyPayload, u as resolveSlackAuthoredTextPlacement } from "./reply-blocks-CoZ_dGM_.mjs";
3
+ import { K as resolveSlackQuestionActionIds, L as SLACK_QUESTION_FINALIZATION_BLOCKS, M as SLACK_TEXT_LIMIT, ft as SLACK_PRESENTATION_CAPABILITIES, m as assertSlackDetachedTargetAllowed, st as escapeSlackMrkdwn } from "./session-status-Dv8wNBEt.mjs";
4
+ import { c as resolveSlackReplyDeliveryMessages, i as parseSlackReplyBlockSegments, o as resolveSlackReplyBlockResolution, r as normalizeSlackReplyPayload, u as resolveSlackAuthoredTextPlacement } from "./reply-blocks-Ca-raz2z.mjs";
5
5
  import { r as resolveSlackThreadTsValue } from "./thread-ts-Cvt7WD6B.mjs";
6
6
  import { t as mergeSlackSendResults } from "./send-results-eeOu_HYm.mjs";
7
7
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -44,7 +44,7 @@ function readSlackRenderedPresentation(slackData) {
44
44
  return;
45
45
  }
46
46
  }
47
- const loadSlackSendRuntime = createLazyRuntimeModule(() => import("./send-pi6r24yv.mjs").then((n) => n.n));
47
+ const loadSlackSendRuntime = createLazyRuntimeModule(() => import("./send-C-8wY0lK.mjs").then((n) => n.n));
48
48
  function resolveSlackSendIdentity(identity) {
49
49
  if (!identity) return;
50
50
  const username = normalizeOptionalString(identity.name);
@@ -1,15 +1,15 @@
1
1
  import { n as __reExport, t as __exportAll } from "./rolldown-runtime-B4FMCO8f.mjs";
2
2
  import { f as resolveSlackReplyToMode, o as resolveDefaultSlackAccountId } from "./accounts-msihSF3-.mjs";
3
3
  import { n as formatSlackTarget } from "./target-parsing-FFE26kOV.mjs";
4
- import { D as buildSlackCompleteBlocksFallbackText, E as buildSlackBlocksFallbackText, F as truncateSlackTextByUtf8Bytes, H as SLACK_SESSION_LINK_ACTION_ID, M as SLACK_TEXT_LIMIT, N as countSlackTextUtf8Bytes, P as truncateSlackText, Q as normalizeSlackOutboundText, b as hasSlackNativeDataBlock, k as SLACK_EDIT_TEXT_MAX_BYTES, l as qualifySlackRoutePeerId, st as escapeSlackMrkdwn } from "./session-status-DQY4hZLd.mjs";
4
+ import { D as buildSlackCompleteBlocksFallbackText, E as buildSlackBlocksFallbackText, F as truncateSlackTextByUtf8Bytes, H as SLACK_SESSION_LINK_ACTION_ID, M as SLACK_TEXT_LIMIT, N as countSlackTextUtf8Bytes, P as truncateSlackText, Q as normalizeSlackOutboundText, b as hasSlackNativeDataBlock, k as SLACK_EDIT_TEXT_MAX_BYTES, l as qualifySlackRoutePeerId, st as escapeSlackMrkdwn } from "./session-status-Dv8wNBEt.mjs";
5
5
  import { M as resolveSlackUserAllowed, O as normalizeSlackAllowOwnerEntry, b as writeLruMapEntry, o as formatSlackError, v as pruneExpiredMapEntries, y as readLruMapEntry } from "./probe-IiHogLQN.mjs";
6
- import { a as prepareSlackReply, l as resolveSlackReplyRenderPlan, s as resolveSlackReplyBlocks } from "./reply-blocks-CoZ_dGM_.mjs";
6
+ import { a as prepareSlackReply, l as resolveSlackReplyRenderPlan, s as resolveSlackReplyBlocks } from "./reply-blocks-Ca-raz2z.mjs";
7
7
  import { n as resolveSlackReplyThreadTs } from "./thread-ts-Cvt7WD6B.mjs";
8
- import { C as hasSlackTableBlock, D as buildSlackEditTextPayload, E as resolveSlackMessageText$1, T as resolveSlackBlocksText, a as editSlackRenderedMessage, b as formatSlackFileReference, d as reactSlackMessage, i as editSlackMessage, m as removeSlackReaction, n as deleteSlackMessage, w as isSlackUnfurlAttachment, x as formatSlackFileReferenceList } from "./actions-CafoV8hS.mjs";
9
- import { c as hasSlackThreadParticipationWithPersistence, i as clearSlackThreadFailureNotice, l as recordSlackThreadFailureNotice, m as buildSlackNativeDataDeliveryPlan, o as hasSlackThreadFailureNotice, p as hasSlackMessageIdentity, s as hasSlackThreadParticipation, t as sendMessageSlack, u as recordSlackThreadParticipation } from "./send-pi6r24yv.mjs";
10
- import { n as resolveSlackChannelConfig } from "./policy-D4eNyn8m.mjs";
11
- import { C as resolveSlackChatType, E as stripSlackMentionsForCommandDetection, S as normalizeSlackChannelType, T as readSlackAssistantThreadContext, _ as appendSlackStream, b as stopSlackStream, c as resolveSlackRoutingContext, g as SlackStreamNotDeliveredError, h as resolveSlackEffectiveAllowFrom, i as resolveSlackRoomContextHints, l as registerSlackSessionRun, m as resolveSlackCommandIngress, p as authorizeSlackBotRoomMessage, r as trackSlackDraftMessage, s as authorizeSlackDirectMessage, u as resolveSlackThreadContext, v as markSlackStreamFallbackDelivered, w as buildSlackAssistantThreadMetadata, y as startSlackStream } from "./monitor-B36YZetK.mjs";
12
- import { a as emitSlackMessageSentHooks, i as sanitizeSlackMonitorReplyPayload, n as deliverReplies, t as createSlackReplyDeliveryPlan } from "./replies-Dwwt4eVi.mjs";
8
+ import { C as hasSlackTableBlock, D as buildSlackEditTextPayload, E as resolveSlackMessageText$1, T as resolveSlackBlocksText, a as editSlackRenderedMessage, b as formatSlackFileReference, d as reactSlackMessage, i as editSlackMessage, m as removeSlackReaction, n as deleteSlackMessage, w as isSlackUnfurlAttachment, x as formatSlackFileReferenceList } from "./actions-By7tvpvv.mjs";
9
+ import { c as hasSlackThreadParticipationWithPersistence, i as clearSlackThreadFailureNotice, l as recordSlackThreadFailureNotice, m as buildSlackNativeDataDeliveryPlan, o as hasSlackThreadFailureNotice, p as hasSlackMessageIdentity, s as hasSlackThreadParticipation, t as sendMessageSlack, u as recordSlackThreadParticipation } from "./send-C-8wY0lK.mjs";
10
+ import { n as resolveSlackChannelConfig } from "./policy-yhn48xf5.mjs";
11
+ import { C as resolveSlackChatType, E as stripSlackMentionsForCommandDetection, S as normalizeSlackChannelType, T as readSlackAssistantThreadContext, _ as appendSlackStream, b as stopSlackStream, c as resolveSlackRoutingContext, g as SlackStreamNotDeliveredError, h as resolveSlackEffectiveAllowFrom, i as resolveSlackRoomContextHints, l as registerSlackSessionRun, m as resolveSlackCommandIngress, p as authorizeSlackBotRoomMessage, r as trackSlackDraftMessage, s as authorizeSlackDirectMessage, u as resolveSlackThreadContext, v as markSlackStreamFallbackDelivered, w as buildSlackAssistantThreadMetadata, y as startSlackStream } from "./monitor-BFilOuM_.mjs";
12
+ import { a as emitSlackMessageSentHooks, i as sanitizeSlackMonitorReplyPayload, n as deliverReplies, t as createSlackReplyDeliveryPlan } from "./replies-CJwjTqDr.mjs";
13
13
  import { asOptionalRecord, normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString, readNonBlankString } from "openclaw/plugin-sdk/string-coerce-runtime";
14
14
  import { resolveInboundLastRouteSessionKey } from "openclaw/plugin-sdk/routing";
15
15
  import { buildChannelProgressDraftLine, compactChannelProgressDraftLine, createChannelMessageReplyPipeline, createChannelProgressDraftCompositor, createChannelProgressWorkCounter, createDraftStreamLoop, createFinalizableDraftLifecycle, createLivePreviewLifecycle, createMessageReceiptFromOutboundResults, resolveAgentOutboundIdentity, resolveChannelMessageSourceReplyDeliveryMode, resolveChannelProgressDraftConfig, resolveChannelProgressDraftMaxLineChars, resolveChannelStreamingBlockEnabled, resolveChannelStreamingPreviewToolProgress, resolveChannelStreamingSuppressDefaultToolProgressMessages, selectPlanChecklistSteps } from "openclaw/plugin-sdk/channel-outbound";
@@ -2726,7 +2726,7 @@ const SLACK_MENTION_RESOLUTION_CONCURRENCY = 4;
2726
2726
  const SLACK_MENTION_RESOLUTION_MAX_LOOKUPS_PER_MESSAGE = 20;
2727
2727
  const SLACK_USER_MENTION_RE$1 = /<@([A-Z0-9]+)(?:\|[^>]+)?>/gi;
2728
2728
  const MAX_SLACK_UNAVAILABLE_FILE_TEXT_CHARS = 2e3;
2729
- const loadSlackMediaModule$1 = createLazyRuntimeModule(() => import("./actions-CafoV8hS.mjs").then((n) => n._));
2729
+ const loadSlackMediaModule$1 = createLazyRuntimeModule(() => import("./actions-By7tvpvv.mjs").then((n) => n._));
2730
2730
  function formatSlackUnavailableMedia(params) {
2731
2731
  let fileReferences = params.files?.map((file) => `${formatSlackFileReference(file)} unavailable (${file.reason})`).join(", ");
2732
2732
  if (fileReferences && fileReferences.length > MAX_SLACK_UNAVAILABLE_FILE_TEXT_CHARS) fileReferences = `${truncateUtf16Safe(fileReferences, MAX_SLACK_UNAVAILABLE_FILE_TEXT_CHARS)}; … (file references truncated)`;
@@ -3082,7 +3082,7 @@ function resolveSlackGroupSessionSubject(params) {
3082
3082
  }
3083
3083
  //#endregion
3084
3084
  //#region extensions/slack/src/monitor/message-handler/prepare-thread-context.ts
3085
- const loadSlackMediaModule = createLazyRuntimeModule(() => import("./actions-CafoV8hS.mjs").then((n) => n._));
3085
+ const loadSlackMediaModule = createLazyRuntimeModule(() => import("./actions-By7tvpvv.mjs").then((n) => n._));
3086
3086
  const SLACK_THREAD_CONTEXT_USER_LOOKUP_CONCURRENCY = 4;
3087
3087
  function formatSlackThreadLabelSnippet(text) {
3088
3088
  return truncateUtf16Safe(text.replace(/\s+/g, " "), 80);
@@ -1,4 +1,4 @@
1
- import { i as buildSlackChannelPolicyScope, r as buildSlackChannelIdCandidates } from "./session-status-DQY4hZLd.mjs";
1
+ import { i as buildSlackChannelPolicyScope, r as buildSlackChannelIdCandidates } from "./session-status-Dv8wNBEt.mjs";
2
2
  import { j as resolveSlackUserAllowListForTeam, k as normalizeSlackSlug } from "./probe-IiHogLQN.mjs";
3
3
  import { applyChannelMatchMeta, buildChannelKeyCandidates } from "openclaw/plugin-sdk/channel-targets";
4
4
  import { firstDefined } from "openclaw/plugin-sdk/allow-from";
@@ -1,5 +1,5 @@
1
1
  import { o as formatSlackError } from "./probe-IiHogLQN.mjs";
2
- import { d as parseSlackMessageEvent, f as requireSlackMessageEvent, x as SLACK_SOCKET_RECONNECT_POLICY } from "./monitor-B36YZetK.mjs";
2
+ import { d as parseSlackMessageEvent, f as requireSlackMessageEvent, x as SLACK_SOCKET_RECONNECT_POLICY } from "./monitor-BFilOuM_.mjs";
3
3
  import { asOptionalRecord, normalizeOptionalString, readStringValue } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  import { computeBackoff, sleepWithAbort, warn } from "openclaw/plugin-sdk/runtime-env";
5
5
  import { createNodeProxyAgent } from "openclaw/plugin-sdk/fetch-runtime";
@@ -137,8 +137,7 @@ function runRelayWebSocket(params) {
137
137
  });
138
138
  };
139
139
  const onError = (error) => {
140
- cleanup();
141
- reject(error);
140
+ settleReject(error);
142
141
  };
143
142
  const onClose = (code, reason) => {
144
143
  const closeReason = formatRelayClose(code, reason);
@@ -1,8 +1,8 @@
1
- import { C as isSlackNativeResponseUrlRejection, M as SLACK_TEXT_LIMIT, S as isSlackInvalidBlocksResponse, Z as markdownToSlackMrkdwnChunks, b as hasSlackNativeDataBlock } from "./session-status-DQY4hZLd.mjs";
2
- import { n as iterateSlackReplyDeliveryMessages, o as resolveSlackReplyBlockResolution, t as hasSlackReplyStructuredContent } from "./reply-blocks-CoZ_dGM_.mjs";
1
+ import { C as isSlackNativeResponseUrlRejection, M as SLACK_TEXT_LIMIT, S as isSlackInvalidBlocksResponse, Z as markdownToSlackMrkdwnChunks, b as hasSlackNativeDataBlock } from "./session-status-Dv8wNBEt.mjs";
2
+ import { n as iterateSlackReplyDeliveryMessages, o as resolveSlackReplyBlockResolution, t as hasSlackReplyStructuredContent } from "./reply-blocks-Ca-raz2z.mjs";
3
3
  import { n as resolveSlackReplyThreadTs } from "./thread-ts-Cvt7WD6B.mjs";
4
- import { h as chunkSlackTextAtHardLimit, m as buildSlackNativeDataDeliveryPlan, t as sendMessageSlack } from "./send-pi6r24yv.mjs";
5
- import { a as SlackResponseAlreadyReportedError, o as createSlackResponseUrlBudget } from "./monitor-B36YZetK.mjs";
4
+ import { h as chunkSlackTextAtHardLimit, m as buildSlackNativeDataDeliveryPlan, t as sendMessageSlack } from "./send-C-8wY0lK.mjs";
5
+ import { a as SlackResponseAlreadyReportedError, o as createSlackResponseUrlBudget } from "./monitor-BFilOuM_.mjs";
6
6
  import { sanitizeAssistantVisibleText } from "openclaw/plugin-sdk/text-chunking";
7
7
  import { createReplyReferencePlanner } from "openclaw/plugin-sdk/reply-reference";
8
8
  import { deliverTextOrMediaReply, getReplyPayloadTtsSupplement, resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload";
@@ -1,4 +1,4 @@
1
- import { $ as buildSlackDataVisualizationBlock, D as buildSlackCompleteBlocksFallbackText, E as buildSlackBlocksFallbackText, I as SLACK_BUTTON_ACTION_IDS, J as encodeSlackQuestionAction, O as renderSlackBlockFallbackText, P as truncateSlackText, V as SLACK_SELECT_ACTION_IDS, X as chunkSlackMrkdwnText, Z as markdownToSlackMrkdwnChunks, at as renderSlackMessagePresentationChartFallbackText, b as hasSlackNativeDataBlock, et as hasSlackDataVisualizationBlock, g as appendSlackNativeDataFallbackText, ht as parseSlackBlocksInput, it as countSlackDataTableCellCharacters, nt as buildSlackDataTableBlock, pt as SLACK_SECTION_TEXT_MAX, rt as countSlackDataTableBlocksCellCharacters, ut as encodeSlackApprovalAction, v as buildSlackNativeDataAccessibilityText } from "./session-status-DQY4hZLd.mjs";
1
+ import { $ as buildSlackDataVisualizationBlock, D as buildSlackCompleteBlocksFallbackText, E as buildSlackBlocksFallbackText, I as SLACK_BUTTON_ACTION_IDS, J as encodeSlackQuestionAction, O as renderSlackBlockFallbackText, P as truncateSlackText, V as SLACK_SELECT_ACTION_IDS, X as chunkSlackMrkdwnText, Z as markdownToSlackMrkdwnChunks, at as renderSlackMessagePresentationChartFallbackText, b as hasSlackNativeDataBlock, et as hasSlackDataVisualizationBlock, g as appendSlackNativeDataFallbackText, ht as parseSlackBlocksInput, it as countSlackDataTableCellCharacters, nt as buildSlackDataTableBlock, pt as SLACK_SECTION_TEXT_MAX, rt as countSlackDataTableBlocksCellCharacters, ut as encodeSlackApprovalAction, v as buildSlackNativeDataAccessibilityText } from "./session-status-Dv8wNBEt.mjs";
2
2
  import { asOptionalRecord, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
3
3
  import { chunkTextForOutbound } from "openclaw/plugin-sdk/text-chunking";
4
4
  import { legacyInteractiveReplyToPresentation, normalizeMessagePresentation, renderMessagePresentationFallbackText, resolveMessagePresentationButtonAction, resolveMessagePresentationOptionAction } from "openclaw/plugin-sdk/interactive-runtime";
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.mjs";
2
2
  import { d as resolveSlackOperationToken, s as resolveSlackAccount } from "./accounts-msihSF3-.mjs";
3
3
  import { a as parseSlackTarget, t as canonicalizeSlackApiTargetId } from "./target-parsing-FFE26kOV.mjs";
4
- import { A as SLACK_MESSAGE_TEXT_HARD_LIMIT, D as buildSlackCompleteBlocksFallbackText, F as truncateSlackTextByUtf8Bytes, K as resolveSlackQuestionActionIds, L as SLACK_QUESTION_FINALIZATION_BLOCKS, M as SLACK_TEXT_LIMIT, O as renderSlackBlockFallbackText, P as truncateSlackText, T as stripSlackNativeDataBlocks, X as chunkSlackMrkdwnText, Z as markdownToSlackMrkdwnChunks, b as hasSlackNativeDataBlock, gt as validateSlackBlocksArray, j as SLACK_MESSAGE_TEXT_RECOMMENDED_LIMIT, k as SLACK_EDIT_TEXT_MAX_BYTES, m as assertSlackDetachedTargetAllowed, v as buildSlackNativeDataAccessibilityText, w as renderSlackNativeDataPlainTextBlock, x as isSlackInvalidBlocksError, y as createSlackNativeDataBaseTextConsumer } from "./session-status-DQY4hZLd.mjs";
4
+ import { A as SLACK_MESSAGE_TEXT_HARD_LIMIT, D as buildSlackCompleteBlocksFallbackText, F as truncateSlackTextByUtf8Bytes, K as resolveSlackQuestionActionIds, L as SLACK_QUESTION_FINALIZATION_BLOCKS, M as SLACK_TEXT_LIMIT, O as renderSlackBlockFallbackText, P as truncateSlackText, T as stripSlackNativeDataBlocks, X as chunkSlackMrkdwnText, Z as markdownToSlackMrkdwnChunks, b as hasSlackNativeDataBlock, gt as validateSlackBlocksArray, j as SLACK_MESSAGE_TEXT_RECOMMENDED_LIMIT, k as SLACK_EDIT_TEXT_MAX_BYTES, m as assertSlackDetachedTargetAllowed, v as buildSlackNativeDataAccessibilityText, w as renderSlackNativeDataPlainTextBlock, x as isSlackInvalidBlocksError, y as createSlackNativeDataBaseTextConsumer } from "./session-status-Dv8wNBEt.mjs";
5
5
  import { _ as getSlackWriteClient, b as writeLruMapEntry, d as createSlackReadClient, h as createSlackWriteClient, o as formatSlackError, p as createSlackTokenCacheKey, s as getSlackWebApiErrorData } from "./probe-IiHogLQN.mjs";
6
6
  import { r as resolveSlackThreadTsValue, t as normalizeSlackThreadTsCandidate } from "./thread-ts-Cvt7WD6B.mjs";
7
7
  import { t as getOptionalSlackRuntime } from "./runtime-JSVZSWAj.mjs";
@@ -67,7 +67,7 @@ function normalizeSlackApproverTarget(value) {
67
67
  const trimmed = normalizeStringifiedOptionalString(value);
68
68
  if (!trimmed) return;
69
69
  try {
70
- const target = parseSlackTarget(trimmed, { defaultKind: "user" });
70
+ const target = parseSlackTarget(trimmed.replace(/^slack:/i, ""), { defaultKind: "user" });
71
71
  const id = target?.kind === "user" ? normalizeSlackUserLikeId(target.id) : void 0;
72
72
  return target?.teamId && id ? formatSlackTarget({
73
73
  kind: "user",
@@ -632,7 +632,13 @@ function renderSlackRichText(value, mode, separator = "") {
632
632
  const name = read(element.name);
633
633
  return name ? `:${name}:` : "";
634
634
  }
635
- case "date": return literal(read(element.fallback) ?? "");
635
+ case "date": {
636
+ const fallback = read(element.fallback);
637
+ if (fallback) return literal(fallback);
638
+ if (typeof element.timestamp !== "number") return "";
639
+ const date = /* @__PURE__ */ new Date(element.timestamp * 1e3);
640
+ return Number.isNaN(date.getTime()) ? "" : date.toISOString();
641
+ }
636
642
  default: return "";
637
643
  }
638
644
  }).filter(Boolean).join(separator);
@@ -1,4 +1,4 @@
1
- import { i as sanitizeSlackMonitorReplyPayload, r as deliverSlackSlashReplies } from "./replies-Dwwt4eVi.mjs";
1
+ import { i as sanitizeSlackMonitorReplyPayload, r as deliverSlackSlashReplies } from "./replies-CJwjTqDr.mjs";
2
2
  import { resolveAgentRoute } from "openclaw/plugin-sdk/routing";
3
3
  import { resolveMarkdownTableMode } from "openclaw/plugin-sdk/markdown-table-runtime";
4
4
  import { resolveConversationLabel } from "openclaw/plugin-sdk/conversation-runtime";
@@ -0,0 +1 @@
1
+ {"version":3,"entries":[{"output":"account-inspect-api.js","source":"extensions/slack/account-inspect-api.ts"},{"output":"api.js","source":"extensions/slack/api.ts"},{"output":"channel-config-api.js","source":"extensions/slack/channel-config-api.ts"},{"output":"channel-entry.js","source":"extensions/slack/channel-entry.ts"},{"output":"channel-plugin-api.js","source":"extensions/slack/channel-plugin-api.ts"},{"output":"configured-state.js","source":"extensions/slack/configured-state.ts"},{"output":"contract-api.js","source":"extensions/slack/contract-api.ts"},{"output":"directory-contract-api.js","source":"extensions/slack/directory-contract-api.ts"},{"output":"doctor-contract-api.js","source":"extensions/slack/doctor-contract-api.ts"},{"output":"http-routes-api.js","source":"extensions/slack/http-routes-api.ts"},{"output":"index.js","source":"extensions/slack/index.ts"},{"output":"message-tool-api.js","source":"extensions/slack/message-tool-api.ts"},{"output":"runtime-api.js","source":"extensions/slack/runtime-api.ts"},{"output":"runtime-setter-api.js","source":"extensions/slack/runtime-setter-api.ts"},{"output":"secret-contract-api.js","source":"extensions/slack/secret-contract-api.ts"},{"output":"security-contract-api.js","source":"extensions/slack/security-contract-api.ts"},{"output":"setup-entry.js","source":"extensions/slack/setup-entry.ts"},{"output":"setup-plugin-api.js","source":"extensions/slack/setup-plugin-api.ts"}],"chunks":[{"output":".setup/account-configured-zcR9TJJN.mjs","sha256":"51dab8a8d80e33310313d3ae5f3244a30c5d343d55da630a1dbbf6da192d25b5","facadeSource":null,"sources":["extensions/slack/src/account-configured.ts"]},{"output":".setup/account-inspect-CmkKiSb9.mjs","sha256":"2c5bdf1ddee264fba341b7ada8fee5af1c65946b90085fc2767dc2dd7d225285","facadeSource":null,"sources":["extensions/slack/src/account-inspect.ts"]},{"output":".setup/accounts-msihSF3-.mjs","sha256":"86ad2fe90c510e820702f74f60af7a0b532e2b1d0845afa269e5efffa98910ca","facadeSource":null,"sources":["extensions/slack/src/account-reply-mode.ts","extensions/slack/src/account-surface-fields.ts","extensions/slack/src/accounts.ts","extensions/slack/src/token.ts"]},{"output":".setup/action-runtime-ChRfnnBu.mjs","sha256":"bd37904ea269e6df706660a62060c9ddc8845e98e78621beda3ff9035f66706d","facadeSource":null,"sources":["extensions/slack/src/action-runtime.ts"]},{"output":".setup/action-runtime.runtime-Ck_j1YTn.mjs","sha256":"5e834068cab4a29645920311646558065513aa045a003d7fbf5e74773359f23e","facadeSource":"extensions/slack/src/action-runtime.runtime.ts","sources":[]},{"output":".setup/actions-By7tvpvv.mjs","sha256":"bec77d797a9f2e016b8b3c23f3fb745a5075cdf579ee36adb88e7709a95744ac","facadeSource":null,"sources":["extensions/slack/src/actions.ts","extensions/slack/src/conversation-open.ts","extensions/slack/src/edit-text.ts","extensions/slack/src/file-reference.ts","extensions/slack/src/monitor/block-text.ts","extensions/slack/src/monitor/media.runtime.ts","extensions/slack/src/monitor/media.ts","extensions/slack/src/monitor/slack-client-kind.ts"]},{"output":".setup/approval-handler.runtime-D8ArtDQt.mjs","sha256":"5f910a9333a998a9b30efaa83e0f544532570dab4e24c846f43cf471dd4f65b8","facadeSource":"extensions/slack/src/approval-handler.runtime.ts","sources":["extensions/slack/src/approval-handler.runtime.ts"]},{"output":".setup/approval-message-updates-DT7XBPbV.mjs","sha256":"a33310a83eaf033e4195c241400828ab7e8624edb10388e605b328bd0715bfb8","facadeSource":null,"sources":["extensions/slack/src/approval-message-updates.ts"]},{"output":".setup/channel-6YzXl_63.mjs","sha256":"d8ccd62302ed1275274783e132c2d57284f6890a6e0ad4af4044f71e47b92902","facadeSource":null,"sources":["extensions/slack/src/approval-native.ts","extensions/slack/src/channel-actions.ts","extensions/slack/src/channel.ts","extensions/slack/src/conversation-route-owner.ts","extensions/slack/src/enterprise-user-route.ts","extensions/slack/src/message-action-dispatch.ts","extensions/slack/src/threading-tool-context.ts"]},{"output":".setup/channel-meta-C443t-lI.mjs","sha256":"9c2859245e7b4af118b9e83309cfa1199171e136cee1722317d28e0d31a87180","facadeSource":null,"sources":["extensions/slack/src/channel-meta.ts"]},{"output":".setup/channel-type-BEFP2ORi.mjs","sha256":"5d8c2e9a5ebd512f518d8b98bb8589f381c697e9c9fa8ee3b0cd2fcf53571bb4","facadeSource":null,"sources":["extensions/slack/src/channel-type.ts"]},{"output":".setup/channel.setup-u6QQdbTa.mjs","sha256":"bc16e25e0afa4df2edeaca7fdbdf2051d5b001617bfee62ebc6cdd87afc6983f","facadeSource":null,"sources":["extensions/slack/src/channel.setup.ts","extensions/slack/src/config-adapter.ts","extensions/slack/src/setup-core.ts","extensions/slack/src/setup-shared.ts"]},{"output":".setup/config-schema-DNnh6bWU.mjs","sha256":"e401e89beabbe935ae0eed9940d5d3216ce4047f989f4b39785f7f59b7a55d65","facadeSource":null,"sources":["extensions/slack/src/config-schema.ts","extensions/slack/src/config-ui-hints.ts"]},{"output":".setup/directory-config-Cjj0N8R0.mjs","sha256":"92405527bbf10aa8b5b77b431e5ed7c03d9f664777ac30d7ccdf1febebb9d322","facadeSource":null,"sources":["extensions/slack/src/directory-config.ts"]},{"output":".setup/directory-live-BIKD-5B_.mjs","sha256":"01d978086c97d72ef2453ca5413cfaaa0dbb30c50085d045d29cd2ebd3af39d1","facadeSource":null,"sources":["extensions/slack/src/directory-live.ts"]},{"output":".setup/doctor-contract-Cd4-VzIM.mjs","sha256":"b49d6223ab4fd59425141a9172be434537905dd9d9a4d1f77503d9d629a67151","facadeSource":null,"sources":["extensions/slack/src/doctor-contract.ts","extensions/slack/src/streaming-compat.ts","packages/normalization-core/src/record-coerce.ts","src/config/channel-config-normalization.ts","src/plugin-sdk/legacy-webhook-listener-migration.ts"]},{"output":".setup/http-C9sM-FXe.mjs","sha256":"fdb8c6687c87eeaf1c10ec0ee707c0698badb0e96e33f8290d76b0da2ff5bbfa","facadeSource":null,"sources":[]},{"output":".setup/message-tool-api-BS5ekEA_.mjs","sha256":"1cdc28cc7db57cabea87dd455dc39e54ec3ae033f3274eaeafa0bb4d70b24b01","facadeSource":null,"sources":["extensions/slack/src/message-actions.ts","extensions/slack/src/message-tool-api.ts"]},{"output":".setup/monitor-BFilOuM_.mjs","sha256":"8037d49b00bf9b67985730ada01aa7b51994317112188628429b18035491a25f","facadeSource":null,"sources":["extensions/slack/src/channel-migration.ts","extensions/slack/src/draft-message-boundaries.ts","extensions/slack/src/interactive-dispatch.ts","extensions/slack/src/modal-metadata.ts","extensions/slack/src/monitor.ts","extensions/slack/src/monitor/agent-view-state.ts","extensions/slack/src/monitor/approval-runtime-context.ts","extensions/slack/src/monitor/assistant-thread-context.ts","extensions/slack/src/monitor/auth.ts","extensions/slack/src/monitor/channel-type.ts","extensions/slack/src/monitor/commands.ts","extensions/slack/src/monitor/context.ts","extensions/slack/src/monitor/deferred-action-routing.ts","extensions/slack/src/monitor/dm-auth.ts","extensions/slack/src/monitor/enterprise-install.ts","extensions/slack/src/monitor/event-scope.ts","extensions/slack/src/monitor/events.ts","extensions/slack/src/monitor/events/agent.ts","extensions/slack/src/monitor/events/assistant.ts","extensions/slack/src/monitor/events/channels.ts","extensions/slack/src/monitor/events/home.ts","extensions/slack/src/monitor/events/interaction-event.ts","extensions/slack/src/monitor/events/interactions.approval-sender.ts","extensions/slack/src/monitor/events/interactions.block-actions.ts","extensions/slack/src/monitor/events/interactions.modal.ts","extensions/slack/src/monitor/events/interactions.shortcuts.ts","extensions/slack/src/monitor/events/interactions.ts","extensions/slack/src/monitor/events/members.ts","extensions/slack/src/monitor/events/message-subtype-handlers.ts","extensions/slack/src/monitor/events/messages.ts","extensions/slack/src/monitor/events/modal-input-summary.ts","extensions/slack/src/monitor/events/pins.ts","extensions/slack/src/monitor/events/reactions.ts","extensions/slack/src/monitor/events/system-event-context.ts","extensions/slack/src/monitor/external-arg-menu-store.ts","extensions/slack/src/monitor/http-handler.ts","extensions/slack/src/monitor/ingress.ts","extensions/slack/src/monitor/message-dispatch-dedupe.ts","extensions/slack/src/monitor/message-handler.ts","extensions/slack/src/monitor/message-handler/debounce-key.ts","extensions/slack/src/monitor/message-handler/prepare-routing.ts","extensions/slack/src/monitor/presence-cooldown-store.ts","extensions/slack/src/monitor/presence-monitor.ts","extensions/slack/src/monitor/provider-support.ts","extensions/slack/src/monitor/provider.ts","extensions/slack/src/monitor/reconnect-policy.ts","extensions/slack/src/monitor/response-url-budget.ts","extensions/slack/src/monitor/room-context.ts","extensions/slack/src/monitor/runtime-policy.ts","extensions/slack/src/monitor/session-run-targets.ts","extensions/slack/src/monitor/slash-menu-model-context.ts","extensions/slack/src/monitor/slash.ts","extensions/slack/src/monitor/socket-mode-envelope.ts","extensions/slack/src/monitor/suggested-prompts.ts","extensions/slack/src/monitor/system-event-session.ts","extensions/slack/src/monitor/thread-resolution.ts","extensions/slack/src/streaming.ts","extensions/slack/src/threading.ts","extensions/slack/src/types.ts"]},{"output":".setup/outbound-adapter-9dbnYtL1.mjs","sha256":"100c4ef62c70df141e078348a34ca7560aebbf0d0287778e8d19f324aceea4a7","facadeSource":"extensions/slack/src/outbound-adapter.ts","sources":["extensions/slack/src/outbound-adapter.ts"]},{"output":".setup/pipeline.runtime-BG5swHnj.mjs","sha256":"376f87ce124d9e748cbc346dfcab9e859913a2917325f77eff56d380abca1f08","facadeSource":"extensions/slack/src/monitor/message-handler/pipeline.runtime.ts","sources":["extensions/slack/src/agent-context.ts","extensions/slack/src/draft-stream.ts","extensions/slack/src/monitor/message-handler/dispatch-helpers.ts","extensions/slack/src/monitor/message-handler/dispatch-progress-card.ts","extensions/slack/src/monitor/message-handler/dispatch-progress-native.ts","extensions/slack/src/monitor/message-handler/dispatch-progress-render.ts","extensions/slack/src/monitor/message-handler/dispatch-progress.ts","extensions/slack/src/monitor/message-handler/dispatch-setup.ts","extensions/slack/src/monitor/message-handler/dispatch-streaming.ts","extensions/slack/src/monitor/message-handler/dispatch.ts","extensions/slack/src/monitor/message-handler/preflight-audio.ts","extensions/slack/src/monitor/message-handler/prepare-content.ts","extensions/slack/src/monitor/message-handler/prepare-dm-history.ts","extensions/slack/src/monitor/message-handler/prepare-room-history.ts","extensions/slack/src/monitor/message-handler/prepare-session-presentation.ts","extensions/slack/src/monitor/message-handler/prepare-thread-context-root.ts","extensions/slack/src/monitor/message-handler/prepare-thread-context.ts","extensions/slack/src/monitor/message-handler/prepare-thread-mentions.ts","extensions/slack/src/monitor/message-handler/prepare.ts","extensions/slack/src/monitor/message-handler/preview-finalize.ts","extensions/slack/src/monitor/message-handler/subteam-mentions.ts","extensions/slack/src/monitor/message-handler/timestamp.ts","extensions/slack/src/monitor/thread.ts","extensions/slack/src/progress-blocks.ts","extensions/slack/src/stream-mode.ts","src/channels/mention-gating.ts"]},{"output":".setup/plugin-routes-D4qozHVn.mjs","sha256":"4979805f2d613c1d6e513fb0bf714958bbaff4a25506795869ec275a28bf95f8","facadeSource":null,"sources":["extensions/slack/src/http/plugin-routes.ts"]},{"output":".setup/policy-yhn48xf5.mjs","sha256":"3eaef93b1c265a2ae875d5e404e46ec0620213d3ca7727929663c15fd4363879","facadeSource":null,"sources":["extensions/slack/src/monitor/channel-config.ts","extensions/slack/src/monitor/policy.ts"]},{"output":".setup/probe-IiHogLQN.mjs","sha256":"331b2706e7b29cbef025402140f60516d90410152745616c548353f88f80d209","facadeSource":null,"sources":["extensions/slack/src/client-options.ts","extensions/slack/src/client.ts","extensions/slack/src/cursor-pages.ts","extensions/slack/src/errors.ts","extensions/slack/src/monitor/allow-list.ts","extensions/slack/src/monitor/ingress-identity.ts","extensions/slack/src/monitor/lru-map-cache.ts","extensions/slack/src/probe.ts"]},{"output":".setup/registry-DizWcnNp.mjs","sha256":"23f02278d4df7444e010ca7c407a48ed4000f715988cd635b75e0f9900d79fac","facadeSource":null,"sources":["extensions/slack/src/http/paths.ts","extensions/slack/src/http/registry.ts"]},{"output":".setup/relay-source-oY9SbDiX.mjs","sha256":"103df33df0d7cc2f0fd239f8acb9368573ff458a82b25959d9d0154de0df7284","facadeSource":"extensions/slack/src/monitor/relay-source.ts","sources":["extensions/slack/src/monitor/relay-source.ts"]},{"output":".setup/replies-CJwjTqDr.mjs","sha256":"0ff63c9bc4f26e674d9430467b9fc5e2fe2f7310edd0c5b3c3308da8b15dac4d","facadeSource":null,"sources":["extensions/slack/src/message-sent-hook.ts","extensions/slack/src/monitor/replies.ts"]},{"output":".setup/reply-blocks-Ca-raz2z.mjs","sha256":"7acc35f0730ae839facefcc6b98762d53936fbc287859156af003b80fecbaf2f","facadeSource":null,"sources":["extensions/slack/src/authored-text.ts","extensions/slack/src/blocks-render.ts","extensions/slack/src/reply-blocks.ts"]},{"output":".setup/resolve-channels-DRRhElwz.mjs","sha256":"56ec8be1c4723566c11ec73c9de52df724326f770468728ddccd0b2778acf3d9","facadeSource":null,"sources":["extensions/slack/src/resolve-channels.ts"]},{"output":".setup/resolve-users-Cz8e17ky.mjs","sha256":"b76586aca432ed8f615023ad8e2aee61257d8c423e3e89a0cf727897c1193cf3","facadeSource":null,"sources":["extensions/slack/src/resolve-users.ts"]},{"output":".setup/rolldown-runtime-B4FMCO8f.mjs","sha256":"fcbee43c448920f8fe98ecc6ec974d3d100a0d6d19a223f5a135bfb261512c97","facadeSource":null,"sources":[]},{"output":".setup/runtime-JSVZSWAj.mjs","sha256":"bdc12ab895b35efc1ea3abeac2b050dbd7223c3accca9aad94baa9aaadb9123a","facadeSource":null,"sources":["extensions/slack/src/runtime.ts"]},{"output":".setup/runtime-setter-api-Cx_PV-xu.mjs","sha256":"459d6d1bc508399dbbfe2e5f654387d549a61897e2758c2f3b7537751aa847d8","facadeSource":"extensions/slack/runtime-setter-api.ts","sources":[]},{"output":".setup/scopes-DfQVi8Jw.mjs","sha256":"25169fa929340f6c265c5d195647dcb05bf503b891009520edea337696f07489","facadeSource":"extensions/slack/src/scopes.ts","sources":["extensions/slack/src/scopes.ts"]},{"output":".setup/secret-contract-api-DB6CMdgc.mjs","sha256":"e58cb722749a1a3a36f21e41bdcc569b558e96eb3e2500e150805676ab505a25","facadeSource":"extensions/slack/secret-contract-api.ts","sources":[]},{"output":".setup/secret-contract-B-Qm6aQQ.mjs","sha256":"13a6b1b82f9522922cea6e54bca4069017e35bed96e28a3c4e41fbd5e1f621c5","facadeSource":null,"sources":["extensions/slack/src/secret-contract.ts"]},{"output":".setup/security-audit-DFGiFLqd.mjs","sha256":"a0b01c0f66ae006698facdb66f39b62727487f60160056d72f744ceb661894fc","facadeSource":null,"sources":["extensions/slack/src/security-audit.ts"]},{"output":".setup/send-C-8wY0lK.mjs","sha256":"f1b6c719e343ce3d51896178f66ab652febdcd5846f8cdb2d12d0286d2fb0b94","facadeSource":null,"sources":["extensions/slack/src/client-delivery.ts","extensions/slack/src/native-data-fallback.ts","extensions/slack/src/post-message-identity.ts","extensions/slack/src/post-message-payload.ts","extensions/slack/src/send.ts","extensions/slack/src/sent-thread-cache.ts","extensions/slack/src/slack-dm-channel-cache.ts"]},{"output":".setup/send-results-eeOu_HYm.mjs","sha256":"537adf38bb52b98f8693b8904c1bb0161f5a61c08ced67cd8ffa95ecc44b8778","facadeSource":null,"sources":["extensions/slack/src/send-results.ts"]},{"output":".setup/session-status-Dv8wNBEt.mjs","sha256":"4efde72a5269c54713d401d975fe76147804b24b0f90f759296239bff2348c53","facadeSource":null,"sources":["extensions/slack/src/action-threading.ts","extensions/slack/src/approval-actions.ts","extensions/slack/src/approval-auth.ts","extensions/slack/src/approval-native-gates.ts","extensions/slack/src/approval-plugin-policy.ts","extensions/slack/src/blocks-fallback.ts","extensions/slack/src/blocks-input.ts","extensions/slack/src/channel-policy-state.ts","extensions/slack/src/conversation-binding-route.ts","extensions/slack/src/data-table.ts","extensions/slack/src/data-visualization.ts","extensions/slack/src/detached-target-admission.ts","extensions/slack/src/exec-approvals.ts","extensions/slack/src/format.ts","extensions/slack/src/group-policy.ts","extensions/slack/src/installation-identity-state.ts","extensions/slack/src/limits.ts","extensions/slack/src/monitor/mrkdwn.ts","extensions/slack/src/monitor/workspace-routing.ts","extensions/slack/src/native-data-blocks.ts","extensions/slack/src/presentation-fallback.ts","extensions/slack/src/presentation.ts","extensions/slack/src/question-actions.ts","extensions/slack/src/reply-action-ids.ts","extensions/slack/src/rich-text.ts","extensions/slack/src/session-status.ts","extensions/slack/src/truncate.ts"]},{"output":".setup/setup-plugin-api-B18kDKtr.mjs","sha256":"c547a2004daaa649722c77dd0716383f74cb100f2bd2ba9cfb7dee37529b1e09","facadeSource":"extensions/slack/setup-plugin-api.ts","sources":[]},{"output":".setup/setup-surface-9WVQgYCT.mjs","sha256":"937e656fe65526eadbd8c246463050b859fbc53e360bffff70f79e624bdbaa16","facadeSource":"extensions/slack/src/setup-surface.ts","sources":["extensions/slack/src/setup-surface.ts"]},{"output":".setup/shared-DpHCoKy2.mjs","sha256":"8d0acaf5f5f08c0586429c04de8902dc7d44ed35bd25dc9f3b6b837ed52a857d","facadeSource":null,"sources":["extensions/slack/src/doctor.ts","extensions/slack/src/security-doctor.ts","extensions/slack/src/security.ts","extensions/slack/src/shared.ts"]},{"output":".setup/slash-dispatch.runtime-v5kQqJPh.mjs","sha256":"931f20bb589468e02044221e51a1e2eff19c331634f608b87102b26edf56f42c","facadeSource":"extensions/slack/src/monitor/slash-dispatch.runtime.ts","sources":[]},{"output":".setup/target-parsing-FFE26kOV.mjs","sha256":"89456e9a292d400c036b295073e5c95655912c002a655dac7b9cd6b53df0d4b8","facadeSource":null,"sources":["extensions/slack/src/target-parsing.ts"]},{"output":".setup/targets-C6LZQL1Q.mjs","sha256":"e977c787d9c4f44bc2eea643e072e7f98af6814125dc1a96d25266264e2017a8","facadeSource":null,"sources":["extensions/slack/src/targets.ts"]},{"output":".setup/thread-ts-Cvt7WD6B.mjs","sha256":"00e816eefbf22d06ca8a285a83b40fea4a2bfbb9d0561e3c80a9ef08b161fa41","facadeSource":null,"sources":["extensions/slack/src/thread-ts.ts"]},{"output":"account-inspect-api.js","sha256":"1ed12e50226b178ef109492fd65f4201568bc769e0ae98696ea94b70083a7dc8","facadeSource":"extensions/slack/account-inspect-api.ts","sources":["extensions/slack/account-inspect-api.ts"]},{"output":"api.js","sha256":"dfd63bfb3cdb5807ab50f4669eaa4664363e323de8874b28053e92aed6a4a56f","facadeSource":"extensions/slack/api.ts","sources":[]},{"output":"channel-config-api.js","sha256":"40f53cbe5e2cc265bec23fe10bcc2a0ee8e210a61feb10c29cd56a1568e18c43","facadeSource":"extensions/slack/channel-config-api.ts","sources":[]},{"output":"channel-entry.js","sha256":"db4699f8ffe20a62ca6011814b4a20f3fcf49c905f9864c97cb41fabef0e0ba4","facadeSource":"extensions/slack/channel-entry.ts","sources":["extensions/slack/channel-entry.ts"]},{"output":"channel-plugin-api.js","sha256":"50c5f1011eee12d33f0fa6eb4d9b301d23eb8b4b8c2cc74e3fe9f319e4878262","facadeSource":"extensions/slack/channel-plugin-api.ts","sources":[]},{"output":"configured-state.js","sha256":"e3269def4c411a8feeb67f01b26a54719792a3feea118a1280ef5a975bcc8e67","facadeSource":"extensions/slack/configured-state.ts","sources":["extensions/slack/configured-state.ts"]},{"output":"contract-api.js","sha256":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","facadeSource":"extensions/slack/contract-api.ts","sources":[]},{"output":"directory-contract-api.js","sha256":"c2a5cf413346f564bf82d8e6f780ee7748db56d3731cf3f11456f8c73d15da06","facadeSource":"extensions/slack/directory-contract-api.ts","sources":[]},{"output":"doctor-contract-api.js","sha256":"9e7afbb04ac8ce8e4ca6a801bb43533ae879c4f781245156d38bfa4afb12d994","facadeSource":"extensions/slack/doctor-contract-api.ts","sources":[]},{"output":"http-routes-api.js","sha256":"1d1098c43c868e2548e17176a7e3b01c6ea37fae59401e1293077a7837ff09da","facadeSource":"extensions/slack/http-routes-api.ts","sources":[]},{"output":"index.js","sha256":"f9c0fc13dbaaa023ad44898c93fe542a66f710f54a8d9dd39a7a0344b4c4b249","facadeSource":"extensions/slack/index.ts","sources":["extensions/slack/index.ts"]},{"output":"message-tool-api.js","sha256":"4ed90884b20ab1ae9705930d7b441ca374dcb3e0bd34945ab580fa1abeb535c1","facadeSource":"extensions/slack/message-tool-api.ts","sources":[]},{"output":"runtime-api.js","sha256":"aa1032c13c858f55b058428addf0a3afa788f0dd33b5077da354d3056e8a4f92","facadeSource":"extensions/slack/runtime-api.ts","sources":[]},{"output":"runtime-setter-api.js","sha256":"922b8e00df9d5b8ec92d98bda060404d5abd7644b3b5184db64a58077dbe0b5b","facadeSource":"extensions/slack/runtime-setter-api.ts","sources":[]},{"output":"secret-contract-api.js","sha256":"a425405a2ec529b178696bd3fafe02783a492644bb4e9b7cdd54f68d51cd2e8b","facadeSource":"extensions/slack/secret-contract-api.ts","sources":[]},{"output":"security-contract-api.js","sha256":"de3eb5bfb0e5a9045e0686dd934f23d053b02a241b4143e39c8b761d8d714fe0","facadeSource":"extensions/slack/security-contract-api.ts","sources":[]},{"output":"setup-entry.js","sha256":"9f6cabcc71ce62e931ecaa0a1095c4855666e12c7062ca9639d2e0d6bbc0c97f","facadeSource":"extensions/slack/setup-entry.ts","sources":["extensions/slack/setup-entry.ts"]},{"output":"setup-plugin-api.js","sha256":"464c3b79ba088b66bd4b2d9137fca35db433ae82dfad73e0d260e484bcb96b79","facadeSource":"extensions/slack/setup-plugin-api.ts","sources":[]}],"unrenderedSources":["extensions/slack/api.ts","extensions/slack/channel-config-api.ts","extensions/slack/channel-plugin-api.ts","extensions/slack/config-doctor-api.ts","extensions/slack/contract-api.ts","extensions/slack/directory-contract-api.ts","extensions/slack/doctor-contract-api.ts","extensions/slack/http-routes-api.ts","extensions/slack/message-tool-api.ts","extensions/slack/runtime-api.ts","extensions/slack/runtime-setter-api.ts","extensions/slack/secret-contract-api.ts","extensions/slack/security-contract-api.ts","extensions/slack/setup-plugin-api.ts","extensions/slack/src/action-runtime.runtime.ts","extensions/slack/src/http/index.ts","extensions/slack/src/monitor/media-types.ts","extensions/slack/src/monitor/message-handler/pipeline.runtime.ts","extensions/slack/src/monitor/slash-dispatch.runtime.ts"]}
package/dist/api.js CHANGED
@@ -3,15 +3,15 @@ import { a as mergeSlackAccountConfig, f as resolveSlackReplyToMode, i as listSl
3
3
  import { t as inspectSlackAccount } from "./.setup/account-inspect-CmkKiSb9.mjs";
4
4
  import { a as parseSlackTarget, i as normalizeSlackMessagingTarget, o as resolveSlackChannelId, r as looksLikeSlackTargetId } from "./.setup/target-parsing-FFE26kOV.mjs";
5
5
  import "./.setup/targets-C6LZQL1Q.mjs";
6
- import { Ht as resolveSlackAutoThreadId, a as resolveSlackGroupRequireMention, gt as validateSlackBlocksArray, ht as parseSlackBlocksInput, mt as SLACK_MAX_BLOCKS, o as resolveSlackGroupToolPolicy } from "./.setup/session-status-DQY4hZLd.mjs";
6
+ import { Ht as resolveSlackAutoThreadId, a as resolveSlackGroupRequireMention, gt as validateSlackBlocksArray, ht as parseSlackBlocksInput, mt as SLACK_MAX_BLOCKS, o as resolveSlackGroupToolPolicy } from "./.setup/session-status-Dv8wNBEt.mjs";
7
7
  import { A as resolveSlackAllowListMatch, D as allowListMatches, E as resolveSlackWriteClientOptions, M as resolveSlackUserAllowed, O as normalizeSlackAllowOwnerEntry, S as SLACK_WRITE_RETRY_OPTIONS, T as resolveSlackWebClientOptions, _ as getSlackWriteClient, h as createSlackWriteClient, k as normalizeSlackSlug, m as createSlackWebClient, p as createSlackTokenCacheKey, t as probeSlack, x as SLACK_DEFAULT_RETRY_OPTIONS } from "./.setup/probe-IiHogLQN.mjs";
8
- import { n as buildSlackThreadingToolContext, t as slackPlugin } from "./.setup/channel-B7jkkIen.mjs";
9
- import { d as buildSlackInteractiveBlocks, f as buildSlackPresentationBlocks } from "./.setup/reply-blocks-CoZ_dGM_.mjs";
8
+ import { n as buildSlackThreadingToolContext, t as slackPlugin } from "./.setup/channel-6YzXl_63.mjs";
9
+ import { d as buildSlackInteractiveBlocks, f as buildSlackPresentationBlocks } from "./.setup/reply-blocks-Ca-raz2z.mjs";
10
10
  import { n as extractSlackToolSend, r as listSlackMessageActions } from "./.setup/message-tool-api-BS5ekEA_.mjs";
11
- import { n as resolveSlackChannelType } from "./.setup/channel-type-BrbGGbzI.mjs";
11
+ import { n as resolveSlackChannelType } from "./.setup/channel-type-BEFP2ORi.mjs";
12
12
  import { t as slackSetupPlugin } from "./.setup/channel.setup-u6QQdbTa.mjs";
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 "./.setup/actions-CafoV8hS.mjs";
14
- import { a as clearSlackThreadParticipationCache, s as hasSlackThreadParticipation, u as recordSlackThreadParticipation } from "./.setup/send-pi6r24yv.mjs";
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 "./.setup/actions-By7tvpvv.mjs";
14
+ import { a as clearSlackThreadParticipationCache, s as hasSlackThreadParticipation, u as recordSlackThreadParticipation } from "./.setup/send-C-8wY0lK.mjs";
15
15
  import { n as listSlackDirectoryGroupsFromConfig, r as listSlackDirectoryPeersFromConfig } from "./.setup/directory-config-Cjj0N8R0.mjs";
16
16
  import "./.setup/http-C9sM-FXe.mjs";
17
17
  import { t as collectSlackSecurityAuditFindings } from "./.setup/security-audit-DFGiFLqd.mjs";
@@ -1 +1 @@
1
- export { t as slackPlugin } from "./.setup/channel-B7jkkIen.mjs";
1
+ export { t as slackPlugin } from "./.setup/channel-6YzXl_63.mjs";
@@ -1,13 +1,13 @@
1
1
  import { t as registerSlackPluginHttpRoutes } from "./.setup/plugin-routes-D4qozHVn.mjs";
2
2
  import { h as resolveSlackBotToken, i as listSlackAccountIds, m as resolveSlackAppToken, o as resolveDefaultSlackAccountId, r as listEnabledSlackAccounts, s as resolveSlackAccount } from "./.setup/accounts-msihSF3-.mjs";
3
- import { a as resolveSlackGroupRequireMention, o as resolveSlackGroupToolPolicy } from "./.setup/session-status-DQY4hZLd.mjs";
3
+ import { a as resolveSlackGroupRequireMention, o as resolveSlackGroupToolPolicy } from "./.setup/session-status-Dv8wNBEt.mjs";
4
4
  import { t as probeSlack } from "./.setup/probe-IiHogLQN.mjs";
5
5
  import { r as setSlackRuntime } from "./.setup/runtime-JSVZSWAj.mjs";
6
- 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, s as listSlackEmojis, u as pinSlackMessage } from "./.setup/actions-CafoV8hS.mjs";
7
- import { t as sendMessageSlack } from "./.setup/send-pi6r24yv.mjs";
8
- import { n as slackActionRuntime, t as handleSlackAction } from "./.setup/action-runtime-CgYsBWl6.mjs";
6
+ 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, s as listSlackEmojis, u as pinSlackMessage } from "./.setup/actions-By7tvpvv.mjs";
7
+ import { t as sendMessageSlack } from "./.setup/send-C-8wY0lK.mjs";
8
+ import { n as slackActionRuntime, t as handleSlackAction } from "./.setup/action-runtime-ChRfnnBu.mjs";
9
9
  import { n as listSlackDirectoryGroupsLive, r as listSlackDirectoryPeersLive } from "./.setup/directory-live-BIKD-5B_.mjs";
10
- import { n as monitorSlackProvider } from "./.setup/monitor-B36YZetK.mjs";
10
+ import { n as monitorSlackProvider } from "./.setup/monitor-BFilOuM_.mjs";
11
11
  import { t as resolveSlackChannelAllowlist } from "./.setup/resolve-channels-DRRhElwz.mjs";
12
12
  import { t as resolveSlackUserAllowlist } from "./.setup/resolve-users-Cz8e17ky.mjs";
13
13
  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 };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/slack",
3
- "version": "2026.10.10-beta.3",
3
+ "version": "2026.10.10-beta.5",
4
4
  "description": "OpenClaw Slack channel plugin for channels, DMs, commands, and app events.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -17,7 +17,7 @@
17
17
  "zod": "4.6.5"
18
18
  },
19
19
  "peerDependencies": {
20
- "openclaw": ">=2026.10.10-beta.3"
20
+ "openclaw": ">=2026.10.10-beta.5"
21
21
  },
22
22
  "peerDependenciesMeta": {
23
23
  "openclaw": {
@@ -150,10 +150,10 @@
150
150
  "allowInvalidConfigRecovery": true
151
151
  },
152
152
  "compat": {
153
- "pluginApi": ">=2026.10.10-beta.3"
153
+ "pluginApi": ">=2026.10.10-beta.5"
154
154
  },
155
155
  "build": {
156
- "openclawVersion": "2026.10.10-beta.3",
156
+ "openclawVersion": "2026.10.10-beta.5",
157
157
  "bundledDist": false
158
158
  },
159
159
  "release": {
@@ -1 +0,0 @@
1
- export { t as handleSlackAction } from "./action-runtime-CgYsBWl6.mjs";