@openclaw/slack 2026.10.10-beta.5 → 2026.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.setup/{account-configured-zcR9TJJN.mjs → account-configured-35y0-Hso.mjs} +1 -2
- package/dist/.setup/{account-inspect-CmkKiSb9.mjs → account-inspect-Bc7TVU8F.mjs} +3 -4
- package/dist/.setup/{accounts-msihSF3-.mjs → accounts-CEgdyqoW.mjs} +6 -10
- package/dist/.setup/{action-runtime-ChRfnnBu.mjs → action-runtime-DPoxYao5.mjs} +9 -10
- package/dist/.setup/action-runtime.runtime-DWKWaKgC.mjs +1 -0
- package/dist/.setup/{actions-By7tvpvv.mjs → actions-PF2cP6to.mjs} +14 -22
- package/dist/.setup/{approval-handler.runtime-D8ArtDQt.mjs → approval-handler.runtime-BtRklemy.mjs} +7 -8
- package/dist/.setup/{approval-message-updates-DT7XBPbV.mjs → approval-message-updates-CpwbsEj6.mjs} +2 -3
- package/dist/.setup/{channel-6YzXl_63.mjs → channel-BzPa5LRe.mjs} +32 -39
- package/dist/.setup/{channel-meta-C443t-lI.mjs → channel-meta-C5vsCo3a.mjs} +1 -2
- package/dist/.setup/{channel-type-BEFP2ORi.mjs → channel-type-Dh4vwh1Y.mjs} +5 -6
- package/dist/.setup/{channel.setup-u6QQdbTa.mjs → channel.setup-Cc6oaNPS.mjs} +10 -14
- package/dist/.setup/{config-schema-DNnh6bWU.mjs → config-schema-Cz3uId-c.mjs} +2 -4
- package/dist/.setup/{directory-config-Cjj0N8R0.mjs → directory-config-BEPra1E2.mjs} +5 -6
- package/dist/.setup/{directory-live-BIKD-5B_.mjs → directory-live-BkUwPrS0.mjs} +4 -5
- package/dist/.setup/{doctor-contract-Cd4-VzIM.mjs → doctor-contract-HK8aedwU.mjs} +7 -13
- package/dist/.setup/http-GpAVKwSX.mjs +2 -0
- package/dist/.setup/{message-tool-api-BS5ekEA_.mjs → message-tool-api-DeiQJoRV.mjs} +5 -7
- package/dist/.setup/{monitor-BFilOuM_.mjs → monitor-BSKi0nx-.mjs} +78 -137
- package/dist/.setup/{outbound-adapter-9dbnYtL1.mjs → outbound-adapter-C0R5jz6S.mjs} +8 -9
- package/dist/.setup/{pipeline.runtime-BG5swHnj.mjs → pipeline.runtime-zTQpztym.mjs} +41 -68
- package/dist/.setup/{plugin-routes-D4qozHVn.mjs → plugin-routes-lXsy_bNV.mjs} +2 -3
- package/dist/.setup/{policy-yhn48xf5.mjs → policy-Bp1FvE6m.mjs} +4 -6
- package/dist/.setup/{probe-IiHogLQN.mjs → probe-C5VWf3sz.mjs} +11 -19
- package/dist/.setup/{registry-DizWcnNp.mjs → registry-1G0f1zuZ.mjs} +2 -4
- package/dist/.setup/{relay-source-oY9SbDiX.mjs → relay-source-D1NGf3d2.mjs} +9 -5
- package/dist/.setup/{replies-CJwjTqDr.mjs → replies-BY9G1WZH.mjs} +7 -9
- package/dist/.setup/{reply-blocks-Ca-raz2z.mjs → reply-blocks-DOjiDr44.mjs} +4 -7
- package/dist/.setup/{resolve-channels-DRRhElwz.mjs → resolve-channels-BNQ1KZXh.mjs} +4 -5
- package/dist/.setup/{resolve-users-Cz8e17ky.mjs → resolve-users-C4dC8Z7D.mjs} +4 -5
- package/dist/.setup/{rolldown-runtime-B4FMCO8f.mjs → rolldown-runtime-nwUcYXjP.mjs} +1 -2
- package/dist/.setup/{runtime-JSVZSWAj.mjs → runtime-C6HKn7Av.mjs} +1 -2
- package/dist/.setup/runtime-setter-api-DrXr965r.mjs +2 -0
- package/dist/.setup/{scopes-DfQVi8Jw.mjs → scopes-C1aeCBa6.mjs} +2 -3
- package/dist/.setup/{secret-contract-B-Qm6aQQ.mjs → secret-contract-BH1ergYo.mjs} +3 -2
- package/dist/.setup/{secret-contract-api-DB6CMdgc.mjs → secret-contract-api-BdG3j9lT.mjs} +1 -1
- package/dist/.setup/{security-audit-DFGiFLqd.mjs → security-audit-C3hXCfDt.mjs} +2 -3
- package/dist/.setup/{send-C-8wY0lK.mjs → send-C5uXkmZV.mjs} +14 -21
- package/dist/.setup/{send-results-eeOu_HYm.mjs → send-results-D-o6PgtS.mjs} +1 -2
- package/dist/.setup/{session-status-Dv8wNBEt.mjs → session-status-CHkEn3HM.mjs} +31 -57
- package/dist/.setup/setup-plugin-api-9mACIIlc.mjs +2 -0
- package/dist/.setup/{setup-surface-9WVQgYCT.mjs → setup-surface-b9gluDhT.mjs} +7 -8
- package/dist/.setup/{shared-DpHCoKy2.mjs → shared-DbdvOUXo.mjs} +14 -18
- package/dist/.setup/{slash-dispatch.runtime-v5kQqJPh.mjs → slash-dispatch.runtime-Bf0r7kf2.mjs} +1 -1
- package/dist/.setup/{target-parsing-FFE26kOV.mjs → target-parsing-0pRZtahO.mjs} +1 -2
- package/dist/.setup/{targets-C6LZQL1Q.mjs → targets-BqXz7CpG.mjs} +2 -3
- package/dist/.setup/{thread-ts-Cvt7WD6B.mjs → thread-ts-47Au2-Yn.mjs} +1 -2
- package/dist/.source-module-urls/562d694877afe9d9dcbb3b32a8883c16974738f2aa892c48d45572cdc9a62529.json +1 -1
- package/dist/account-inspect-api.js +2 -3
- package/dist/api.js +17 -17
- package/dist/channel-config-api.js +1 -1
- package/dist/channel-entry.js +1 -2
- package/dist/channel-plugin-api.js +1 -1
- package/dist/configured-state.js +2 -3
- package/dist/directory-contract-api.js +1 -1
- package/dist/doctor-contract-api.js +1 -1
- package/dist/http-routes-api.js +1 -1
- package/dist/index.js +2 -3
- package/dist/message-tool-api.js +1 -1
- package/dist/runtime-api.js +12 -12
- package/dist/runtime-setter-api.js +1 -1
- package/dist/secret-contract-api.js +1 -1
- package/dist/security-contract-api.js +1 -1
- package/dist/setup-entry.js +4 -5
- package/dist/setup-plugin-api.js +1 -1
- package/node_modules/@slack/bolt/node_modules/body-parser/README.md +17 -13
- package/node_modules/@slack/bolt/node_modules/body-parser/lib/read.js +74 -57
- package/node_modules/@slack/bolt/node_modules/body-parser/lib/types/json.js +11 -11
- package/node_modules/@slack/bolt/node_modules/body-parser/lib/types/urlencoded.js +5 -5
- package/node_modules/@slack/bolt/node_modules/body-parser/lib/utils.js +0 -15
- package/node_modules/@slack/bolt/node_modules/body-parser/package.json +7 -12
- package/node_modules/undici/README.md +25 -3
- package/node_modules/undici/docs/docs/api/CacheStore.md +24 -9
- package/node_modules/undici/docs/docs/api/Client.md +11 -6
- package/node_modules/undici/docs/docs/api/Dispatcher.md +3 -0
- package/node_modules/undici/docs/docs/api/Errors.md +76 -1
- package/node_modules/undici/docs/docs/api/H2CClient.md +3 -2
- package/node_modules/undici/docs/docs/api/Interceptors.md +13 -6
- package/node_modules/undici/docs/docs/api/RedirectHandler.md +13 -10
- package/node_modules/undici/docs/docs/index.md +12 -12
- package/node_modules/undici/docs/docs/type-map.json +66 -66
- package/node_modules/undici/lib/cache/memory-cache-store.js +48 -13
- package/node_modules/undici/lib/cache/sqlite-cache-store.js +83 -5
- package/node_modules/undici/lib/core/connect.js +10 -4
- package/node_modules/undici/lib/core/constants.js +12 -1
- package/node_modules/undici/lib/core/errors.js +38 -1
- package/node_modules/undici/lib/core/request.js +16 -1
- package/node_modules/undici/lib/core/symbols.js +2 -0
- package/node_modules/undici/lib/core/util.js +26 -1
- package/node_modules/undici/lib/dispatcher/agent.js +6 -2
- package/node_modules/undici/lib/dispatcher/client-h1.js +116 -80
- package/node_modules/undici/lib/dispatcher/client-h2.js +46 -14
- package/node_modules/undici/lib/dispatcher/client.js +4 -1
- package/node_modules/undici/lib/dispatcher/dispatcher-base.js +3 -2
- package/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +20 -3
- package/node_modules/undici/lib/dispatcher/parser-h1.js +1064 -0
- package/node_modules/undici/lib/dispatcher/pool-base.js +65 -28
- package/node_modules/undici/lib/dispatcher/pool.js +11 -8
- package/node_modules/undici/lib/dispatcher/proxy-agent.js +18 -8
- package/node_modules/undici/lib/dispatcher/retry-agent.js +10 -0
- package/node_modules/undici/lib/dispatcher/round-robin-pool.js +15 -5
- package/node_modules/undici/lib/handler/cache-handler.js +153 -15
- package/node_modules/undici/lib/handler/deduplication-handler.js +112 -51
- package/node_modules/undici/lib/handler/redirect-handler.js +28 -8
- package/node_modules/undici/lib/handler/retry-handler.js +44 -11
- package/node_modules/undici/lib/interceptor/cache.js +11 -3
- package/node_modules/undici/lib/interceptor/decompress.js +22 -9
- package/node_modules/undici/lib/interceptor/dns.js +11 -0
- package/node_modules/undici/lib/interceptor/response-error.js +72 -28
- package/node_modules/undici/lib/milo/LICENSE.md +7 -0
- package/node_modules/undici/lib/milo/no-simd.js +1002 -0
- package/node_modules/undici/lib/milo/simd.js +1002 -0
- package/node_modules/undici/lib/mock/mock-agent.js +11 -0
- package/node_modules/undici/lib/mock/snapshot-recorder.js +3 -2
- package/node_modules/undici/lib/mock/snapshot-utils.js +3 -2
- package/node_modules/undici/lib/util/cache.js +11 -5
- package/node_modules/undici/lib/web/cookies/util.js +19 -2
- package/node_modules/undici/lib/web/eventsource/eventsource-stream.js +69 -15
- package/node_modules/undici/lib/web/eventsource/eventsource.js +25 -2
- package/node_modules/undici/lib/web/fetch/body.js +47 -38
- package/node_modules/undici/lib/web/fetch/formdata-parser.js +12 -4
- package/node_modules/undici/lib/web/fetch/headers.js +2 -2
- package/node_modules/undici/lib/web/fetch/index.js +8 -4
- package/node_modules/undici/lib/web/subresource-integrity/subresource-integrity.js +5 -5
- package/node_modules/undici/lib/web/websocket/receiver.js +25 -4
- package/node_modules/undici/package.json +7 -5
- package/node_modules/undici/types/cache-interceptor.d.ts +10 -0
- package/node_modules/undici/types/client.d.ts +10 -4
- package/node_modules/undici/types/errors.d.ts +16 -1
- package/node_modules/undici/types/h2c-client.d.ts +1 -1
- package/node_modules/undici/types/interceptors.d.ts +6 -1
- package/package.json +5 -5
- package/dist/.setup/action-runtime.runtime-Ck_j1YTn.mjs +0 -1
- package/dist/.setup/http-C9sM-FXe.mjs +0 -2
- package/dist/.setup/runtime-setter-api-Cx_PV-xu.mjs +0 -2
- package/dist/.setup/setup-plugin-api-B18kDKtr.mjs +0 -2
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { d as resolveSlackOperationToken, s as resolveSlackAccount } from "./accounts-
|
|
2
|
-
import { a as parseSlackTarget } from "./target-parsing-
|
|
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-
|
|
4
|
-
import { c as resolveSlackReplyDeliveryMessages, i as parseSlackReplyBlockSegments, o as resolveSlackReplyBlockResolution, r as normalizeSlackReplyPayload, u as resolveSlackAuthoredTextPlacement } from "./reply-blocks-
|
|
5
|
-
import { r as resolveSlackThreadTsValue } from "./thread-ts-
|
|
6
|
-
import { t as mergeSlackSendResults } from "./send-results-
|
|
1
|
+
import { d as resolveSlackOperationToken, s as resolveSlackAccount } from "./accounts-CEgdyqoW.mjs";
|
|
2
|
+
import { a as parseSlackTarget } from "./target-parsing-0pRZtahO.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-CHkEn3HM.mjs";
|
|
4
|
+
import { c as resolveSlackReplyDeliveryMessages, i as parseSlackReplyBlockSegments, o as resolveSlackReplyBlockResolution, r as normalizeSlackReplyPayload, u as resolveSlackAuthoredTextPlacement } from "./reply-blocks-DOjiDr44.mjs";
|
|
5
|
+
import { r as resolveSlackThreadTsValue } from "./thread-ts-47Au2-Yn.mjs";
|
|
6
|
+
import { t as mergeSlackSendResults } from "./send-results-D-o6PgtS.mjs";
|
|
7
7
|
import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
8
8
|
import { resolveOutboundSendDep } from "openclaw/plugin-sdk/channel-outbound";
|
|
9
9
|
import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
|
|
@@ -13,7 +13,7 @@ import { questionGatewayRuntime } from "openclaw/plugin-sdk/question-gateway-run
|
|
|
13
13
|
import { createHmac, randomBytes } from "node:crypto";
|
|
14
14
|
import { safeEqualSecret } from "openclaw/plugin-sdk/security-runtime";
|
|
15
15
|
import { attachChannelToResult } from "openclaw/plugin-sdk/channel-send-result";
|
|
16
|
-
|
|
16
|
+
// extensions/slack/src/outbound-adapter.ts
|
|
17
17
|
function toSlackOutboundResult(result) {
|
|
18
18
|
const { channelId, ...delivery } = result;
|
|
19
19
|
return attachChannelToResult("slack", channelId === void 0 ? delivery : {
|
|
@@ -44,7 +44,7 @@ function readSlackRenderedPresentation(slackData) {
|
|
|
44
44
|
return;
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
|
-
const loadSlackSendRuntime = createLazyRuntimeModule(() => import("./send-
|
|
47
|
+
const loadSlackSendRuntime = createLazyRuntimeModule(() => import("./send-C5uXkmZV.mjs").then((n) => n.n));
|
|
48
48
|
function resolveSlackSendIdentity(identity) {
|
|
49
49
|
if (!identity) return;
|
|
50
50
|
const username = normalizeOptionalString(identity.name);
|
|
@@ -254,5 +254,4 @@ const slackOutbound = {
|
|
|
254
254
|
}));
|
|
255
255
|
}
|
|
256
256
|
};
|
|
257
|
-
//#endregion
|
|
258
257
|
export { slackOutbound };
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { n as __reExport, t as __exportAll } from "./rolldown-runtime-
|
|
2
|
-
import { f as resolveSlackReplyToMode, o as resolveDefaultSlackAccountId } from "./accounts-
|
|
3
|
-
import { n as formatSlackTarget } from "./target-parsing-
|
|
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-
|
|
5
|
-
import { M as resolveSlackUserAllowed, O as normalizeSlackAllowOwnerEntry, b as writeLruMapEntry, o as formatSlackError, v as pruneExpiredMapEntries, y as readLruMapEntry } from "./probe-
|
|
6
|
-
import { a as prepareSlackReply, l as resolveSlackReplyRenderPlan, s as resolveSlackReplyBlocks } from "./reply-blocks-
|
|
7
|
-
import { n as resolveSlackReplyThreadTs } from "./thread-ts-
|
|
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-
|
|
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-
|
|
10
|
-
import { n as resolveSlackChannelConfig } from "./policy-
|
|
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-
|
|
12
|
-
import { a as emitSlackMessageSentHooks, i as sanitizeSlackMonitorReplyPayload, n as deliverReplies, t as createSlackReplyDeliveryPlan } from "./replies-
|
|
1
|
+
import { n as __reExport, t as __exportAll } from "./rolldown-runtime-nwUcYXjP.mjs";
|
|
2
|
+
import { f as resolveSlackReplyToMode, o as resolveDefaultSlackAccountId } from "./accounts-CEgdyqoW.mjs";
|
|
3
|
+
import { n as formatSlackTarget } from "./target-parsing-0pRZtahO.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-CHkEn3HM.mjs";
|
|
5
|
+
import { M as resolveSlackUserAllowed, O as normalizeSlackAllowOwnerEntry, b as writeLruMapEntry, o as formatSlackError, v as pruneExpiredMapEntries, y as readLruMapEntry } from "./probe-C5VWf3sz.mjs";
|
|
6
|
+
import { a as prepareSlackReply, l as resolveSlackReplyRenderPlan, s as resolveSlackReplyBlocks } from "./reply-blocks-DOjiDr44.mjs";
|
|
7
|
+
import { n as resolveSlackReplyThreadTs } from "./thread-ts-47Au2-Yn.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-PF2cP6to.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-C5uXkmZV.mjs";
|
|
10
|
+
import { n as resolveSlackChannelConfig } from "./policy-Bp1FvE6m.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-BSKi0nx-.mjs";
|
|
12
|
+
import { a as emitSlackMessageSentHooks, i as sanitizeSlackMonitorReplyPayload, n as deliverReplies, t as createSlackReplyDeliveryPlan } from "./replies-BY9G1WZH.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";
|
|
@@ -45,7 +45,7 @@ import { shouldHandleTextCommands } from "openclaw/plugin-sdk/command-surface";
|
|
|
45
45
|
import { resolveChannelContextVisibilityMode } from "openclaw/plugin-sdk/context-visibility-runtime";
|
|
46
46
|
import { DEFAULT_GROUP_HISTORY_LIMIT, buildHistoryContextFromEntries, buildInboundHistoryFromEntries } from "openclaw/plugin-sdk/reply-history";
|
|
47
47
|
import { createChannelPreflightAudio, formatAudioTranscriptForAgent } from "openclaw/plugin-sdk/media-understanding-runtime";
|
|
48
|
-
|
|
48
|
+
// extensions/slack/src/monitor/message-handler/timestamp.ts
|
|
49
49
|
const SLACK_TIMESTAMP_RE = /^\d+(?:\.\d+)?$/;
|
|
50
50
|
const MAX_SAFE_SLACK_TIMESTAMP_SECONDS = Number.MAX_SAFE_INTEGER / 1e3;
|
|
51
51
|
function resolveSlackTimestampMs(ts) {
|
|
@@ -57,8 +57,7 @@ function resolveSlackTimestampMs(ts) {
|
|
|
57
57
|
});
|
|
58
58
|
return seconds === void 0 ? void 0 : Math.round(seconds * 1e3);
|
|
59
59
|
}
|
|
60
|
-
|
|
61
|
-
//#region extensions/slack/src/monitor/message-handler/dispatch-helpers.ts
|
|
60
|
+
// extensions/slack/src/monitor/message-handler/dispatch-helpers.ts
|
|
62
61
|
function resolveSlackBotLoopProtection(prepared) {
|
|
63
62
|
const senderBotId = prepared.message.bot_id;
|
|
64
63
|
if (!senderBotId) return;
|
|
@@ -140,8 +139,7 @@ async function resolveSlackStreamRecipientTeamId(params) {
|
|
|
140
139
|
}
|
|
141
140
|
return params.fallbackTeamId;
|
|
142
141
|
}
|
|
143
|
-
|
|
144
|
-
//#region extensions/slack/src/draft-stream.ts
|
|
142
|
+
// extensions/slack/src/draft-stream.ts
|
|
145
143
|
const DEFAULT_THROTTLE_MS = 1e3;
|
|
146
144
|
function createSlackDraftStream(params) {
|
|
147
145
|
const maxChars = Math.min(params.maxChars ?? 8e3, SLACK_TEXT_LIMIT);
|
|
@@ -315,8 +313,7 @@ function createSlackDraftStream(params) {
|
|
|
315
313
|
channelId: () => streamMessage?.channelId
|
|
316
314
|
};
|
|
317
315
|
}
|
|
318
|
-
|
|
319
|
-
//#region extensions/slack/src/stream-mode.ts
|
|
316
|
+
// extensions/slack/src/stream-mode.ts
|
|
320
317
|
function resolveSlackStreamingConfig(params) {
|
|
321
318
|
return {
|
|
322
319
|
mode: params.streaming?.mode ?? "progress",
|
|
@@ -365,8 +362,7 @@ function applyAppendOnlyStreamUpdate(params) {
|
|
|
365
362
|
changed: true
|
|
366
363
|
};
|
|
367
364
|
}
|
|
368
|
-
|
|
369
|
-
//#region extensions/slack/src/progress-blocks.ts
|
|
365
|
+
// extensions/slack/src/progress-blocks.ts
|
|
370
366
|
const SLACK_PROGRESS_FIELD_MAX = 1800;
|
|
371
367
|
const DEFAULT_SLACK_PROGRESS_DETAIL_MAX_CHARS = 120;
|
|
372
368
|
const DEFAULT_SLACK_PROGRESS_TASK_DETAIL_MAX_CHARS = 48;
|
|
@@ -751,8 +747,7 @@ function reconcileSlackNativeTaskChunks(params) {
|
|
|
751
747
|
}
|
|
752
748
|
};
|
|
753
749
|
}
|
|
754
|
-
|
|
755
|
-
//#region extensions/slack/src/monitor/message-handler/dispatch-progress-render.ts
|
|
750
|
+
// extensions/slack/src/monitor/message-handler/dispatch-progress-render.ts
|
|
756
751
|
function resolveStructuredProgressLines(lines) {
|
|
757
752
|
return lines.map((line) => {
|
|
758
753
|
if (typeof line !== "string") return line;
|
|
@@ -793,8 +788,7 @@ function isSlackProgressTitleText(text, snapshot, explicitTitle) {
|
|
|
793
788
|
const title = normalizeProgressText(combineProgressHeadlineAndExplanation(explicitTitle ?? (snapshot.statusHeadlineFormat === "plain" ? void 0 : snapshot.statusHeadline), snapshot.planExplanationFormat === "plain" ? void 0 : snapshot.planExplanation));
|
|
794
789
|
return title.length > 0 && title.includes(candidate);
|
|
795
790
|
}
|
|
796
|
-
|
|
797
|
-
//#region extensions/slack/src/monitor/message-handler/preview-finalize.ts
|
|
791
|
+
// extensions/slack/src/monitor/message-handler/preview-finalize.ts
|
|
798
792
|
function buildExpectedSlackEditText(params) {
|
|
799
793
|
const trimmedText = params.text.trim();
|
|
800
794
|
if (trimmedText) return normalizeSlackOutboundText(trimmedText);
|
|
@@ -879,8 +873,7 @@ async function finalizeSlackPreviewEdit(params) {
|
|
|
879
873
|
throw err;
|
|
880
874
|
}
|
|
881
875
|
}
|
|
882
|
-
|
|
883
|
-
//#region extensions/slack/src/monitor/message-handler/dispatch-progress-card.ts
|
|
876
|
+
// extensions/slack/src/monitor/message-handler/dispatch-progress-card.ts
|
|
884
877
|
const MAX_VISIBLE_WORK_LINKS = 5;
|
|
885
878
|
function createSlackDraftProgressCardRuntime(params) {
|
|
886
879
|
const { cfg, prepared, slackClient } = params.setup;
|
|
@@ -1008,8 +1001,7 @@ function formatSlackProgressDraftLine(line) {
|
|
|
1008
1001
|
enclosingStyle: "italic"
|
|
1009
1002
|
})}_`;
|
|
1010
1003
|
}
|
|
1011
|
-
|
|
1012
|
-
//#region extensions/slack/src/monitor/message-handler/dispatch-progress-native.ts
|
|
1004
|
+
// extensions/slack/src/monitor/message-handler/dispatch-progress-native.ts
|
|
1013
1005
|
function createSlackNativeProgressTransport(params) {
|
|
1014
1006
|
const { replyPlan } = params.setup;
|
|
1015
1007
|
const { delivery } = params;
|
|
@@ -1070,8 +1062,7 @@ function createSlackNativeProgressTransport(params) {
|
|
|
1070
1062
|
waitForStart
|
|
1071
1063
|
};
|
|
1072
1064
|
}
|
|
1073
|
-
|
|
1074
|
-
//#region extensions/slack/src/monitor/message-handler/dispatch-progress.ts
|
|
1065
|
+
// extensions/slack/src/monitor/message-handler/dispatch-progress.ts
|
|
1075
1066
|
function createSlackProgressRuntime(runtimeParams) {
|
|
1076
1067
|
const { setup, delivery } = runtimeParams;
|
|
1077
1068
|
const { cfg, hasSlackCustomIdentity, prepared, replyPlan, runtime, slackIdentity, slackStreaming, slackProgressStyle, quietProgress, shouldUseDraftStream, useStreaming, previewStreamingEnabled } = setup;
|
|
@@ -1546,8 +1537,7 @@ function createSlackProgressRuntime(runtimeParams) {
|
|
|
1546
1537
|
updateDraftFromPartial
|
|
1547
1538
|
};
|
|
1548
1539
|
}
|
|
1549
|
-
|
|
1550
|
-
//#region extensions/slack/src/monitor/message-handler/dispatch-setup.ts
|
|
1540
|
+
// extensions/slack/src/monitor/message-handler/dispatch-setup.ts
|
|
1551
1541
|
async function createSlackDispatchSetup(prepared) {
|
|
1552
1542
|
const { ctx, account, message, route } = prepared;
|
|
1553
1543
|
const slackClient = prepared.eventScope?.client ?? ctx.app.client;
|
|
@@ -1765,8 +1755,7 @@ async function createSlackDispatchSetup(prepared) {
|
|
|
1765
1755
|
useStreaming
|
|
1766
1756
|
};
|
|
1767
1757
|
}
|
|
1768
|
-
|
|
1769
|
-
//#region extensions/slack/src/monitor/message-handler/dispatch-streaming.ts
|
|
1758
|
+
// extensions/slack/src/monitor/message-handler/dispatch-streaming.ts
|
|
1770
1759
|
function createSlackStreamingDeliveryRuntime(setup) {
|
|
1771
1760
|
const { isThreadReply, messageSentHookContext, messageSentHookTarget, prepared, replyDeliveryMode, replyPlan, runtime, slackClient, slackClientOptions, slackIdentity, slackStreamFallbackTeamId } = setup;
|
|
1772
1761
|
const { account, ctx, forcedReplyThreadTs, message, slackMessageMetadata } = prepared;
|
|
@@ -2095,8 +2084,7 @@ function createSlackStreamingDeliveryRuntime(setup) {
|
|
|
2095
2084
|
resetDeliveryTracker: () => deliveredKeys.clear()
|
|
2096
2085
|
});
|
|
2097
2086
|
}
|
|
2098
|
-
|
|
2099
|
-
//#region extensions/slack/src/monitor/message-handler/dispatch.ts
|
|
2087
|
+
// extensions/slack/src/monitor/message-handler/dispatch.ts
|
|
2100
2088
|
function formatSlackGroupThreadReply(text, participant) {
|
|
2101
2089
|
return `**${participant.name.replace(/[\\`*_{}[\]()<>#!|]/g, "\\$&").replace(/\s+/g, " ")}**\n${text}`;
|
|
2102
2090
|
}
|
|
@@ -2455,8 +2443,7 @@ async function dispatchSlackMessageWithSetup(setup, beginSessionRun, turnAdoptio
|
|
|
2455
2443
|
logVerbose(`slack: delivered ${finalCount} repl${finalCount === 1 ? "y" : "ies"} to ${prepared.replyTarget}`);
|
|
2456
2444
|
}
|
|
2457
2445
|
}
|
|
2458
|
-
|
|
2459
|
-
//#region extensions/slack/src/agent-context.ts
|
|
2446
|
+
// extensions/slack/src/agent-context.ts
|
|
2460
2447
|
function normalizeEntity(value) {
|
|
2461
2448
|
const entity = asOptionalRecord(value);
|
|
2462
2449
|
const type = normalizeOptionalString(entity?.type);
|
|
@@ -2494,8 +2481,7 @@ function normalizeSlackAppContextEntities(value) {
|
|
|
2494
2481
|
return normalized ? [normalized] : [];
|
|
2495
2482
|
});
|
|
2496
2483
|
}
|
|
2497
|
-
|
|
2498
|
-
//#region extensions/slack/src/monitor/thread.ts
|
|
2484
|
+
// extensions/slack/src/monitor/thread.ts
|
|
2499
2485
|
const THREAD_STARTER_CACHE = /* @__PURE__ */ new Map();
|
|
2500
2486
|
const THREAD_STARTER_CACHE_TTL_MS = 216e5;
|
|
2501
2487
|
const THREAD_STARTER_CACHE_MAX = 2e3;
|
|
@@ -2676,8 +2662,7 @@ async function resolveSlackChannelHistory(params) {
|
|
|
2676
2662
|
}
|
|
2677
2663
|
return messages.slice(0, params.limit).toReversed();
|
|
2678
2664
|
}
|
|
2679
|
-
|
|
2680
|
-
//#region extensions/slack/src/monitor/message-handler/preflight-audio.ts
|
|
2665
|
+
// extensions/slack/src/monitor/message-handler/preflight-audio.ts
|
|
2681
2666
|
function isSlackAudioFile(file) {
|
|
2682
2667
|
if (file.subtype === "slack_audio") return true;
|
|
2683
2668
|
if ((file.mimetype?.split(";")[0]?.trim().toLowerCase())?.startsWith("audio/")) return true;
|
|
@@ -2720,13 +2705,12 @@ const sendSlackPreflightAudioTranscriptEcho = slackPreflightAudio.send.bind(slac
|
|
|
2720
2705
|
async function discardSlackPreflightMedia(media) {
|
|
2721
2706
|
await Promise.allSettled((media ?? []).map((entry) => fs.rm(entry.path, { force: true })));
|
|
2722
2707
|
}
|
|
2723
|
-
|
|
2724
|
-
//#region extensions/slack/src/monitor/message-handler/prepare-content.ts
|
|
2708
|
+
// extensions/slack/src/monitor/message-handler/prepare-content.ts
|
|
2725
2709
|
const SLACK_MENTION_RESOLUTION_CONCURRENCY = 4;
|
|
2726
2710
|
const SLACK_MENTION_RESOLUTION_MAX_LOOKUPS_PER_MESSAGE = 20;
|
|
2727
2711
|
const SLACK_USER_MENTION_RE$1 = /<@([A-Z0-9]+)(?:\|[^>]+)?>/gi;
|
|
2728
2712
|
const MAX_SLACK_UNAVAILABLE_FILE_TEXT_CHARS = 2e3;
|
|
2729
|
-
const loadSlackMediaModule$1 = createLazyRuntimeModule(() => import("./actions-
|
|
2713
|
+
const loadSlackMediaModule$1 = createLazyRuntimeModule(() => import("./actions-PF2cP6to.mjs").then((n) => n._));
|
|
2730
2714
|
function formatSlackUnavailableMedia(params) {
|
|
2731
2715
|
let fileReferences = params.files?.map((file) => `${formatSlackFileReference(file)} unavailable (${file.reason})`).join(", ");
|
|
2732
2716
|
if (fileReferences && fileReferences.length > MAX_SLACK_UNAVAILABLE_FILE_TEXT_CHARS) fileReferences = `${truncateUtf16Safe(fileReferences, MAX_SLACK_UNAVAILABLE_FILE_TEXT_CHARS)}; … (file references truncated)`;
|
|
@@ -2834,8 +2818,7 @@ async function resolveSlackMessageContent(params) {
|
|
|
2834
2818
|
mentionStripPatterns
|
|
2835
2819
|
} : null;
|
|
2836
2820
|
}
|
|
2837
|
-
|
|
2838
|
-
//#region extensions/slack/src/monitor/message-handler/prepare-dm-history.ts
|
|
2821
|
+
// extensions/slack/src/monitor/message-handler/prepare-dm-history.ts
|
|
2839
2822
|
function resolveSlackDmHistoryLimit(params) {
|
|
2840
2823
|
const override = params.userId ? params.account.config.dms?.[params.userId]?.historyLimit : void 0;
|
|
2841
2824
|
return resolvePromptHistoryLimit(override ?? params.defaultLimit, 0);
|
|
@@ -2908,16 +2891,14 @@ async function resolveSlackDmHistoryContext(params) {
|
|
|
2908
2891
|
};
|
|
2909
2892
|
}
|
|
2910
2893
|
}
|
|
2911
|
-
|
|
2912
|
-
//#region extensions/slack/src/monitor/message-handler/prepare-thread-context-root.ts
|
|
2894
|
+
// extensions/slack/src/monitor/message-handler/prepare-thread-context-root.ts
|
|
2913
2895
|
function isSlackThreadAuthorCurrentBot(params) {
|
|
2914
2896
|
const { identity, author } = params;
|
|
2915
2897
|
if (identity.botUserId && author.userId && author.userId === identity.botUserId) return true;
|
|
2916
2898
|
if (identity.botId && author.botId && author.botId === identity.botId) return true;
|
|
2917
2899
|
return false;
|
|
2918
2900
|
}
|
|
2919
|
-
|
|
2920
|
-
//#region extensions/slack/src/monitor/message-handler/prepare-room-history.ts
|
|
2901
|
+
// extensions/slack/src/monitor/message-handler/prepare-room-history.ts
|
|
2921
2902
|
const SLACK_HISTORY_MEDIA_MAX_ATTACHMENTS = 4;
|
|
2922
2903
|
const SLACK_HISTORY_MEDIA_MAX_BYTES = 10485760;
|
|
2923
2904
|
const SLACK_HISTORY_MEDIA_IDLE_TIMEOUT_MS = 1e3;
|
|
@@ -3072,17 +3053,15 @@ async function resolveSlackHistoryMedia(params) {
|
|
|
3072
3053
|
attempted
|
|
3073
3054
|
};
|
|
3074
3055
|
}
|
|
3075
|
-
|
|
3076
|
-
//#region extensions/slack/src/monitor/message-handler/prepare-session-presentation.ts
|
|
3056
|
+
// extensions/slack/src/monitor/message-handler/prepare-session-presentation.ts
|
|
3077
3057
|
function resolveSlackGroupSessionSubject(params) {
|
|
3078
3058
|
const channelName = normalizeOptionalString(params.channelName);
|
|
3079
3059
|
const workspaceName = normalizeOptionalString(params.installationIdentity?.kind === "workspace" && params.installationIdentity.teamId === params.workspaceId ? params.installationIdentity.teamName : void 0);
|
|
3080
3060
|
if (channelName && workspaceName) return `${workspaceName} #${channelName}`;
|
|
3081
3061
|
return `Slack Channel (Workspace ID: ${params.workspaceId}, Channel ID: ${params.channelId})`;
|
|
3082
3062
|
}
|
|
3083
|
-
|
|
3084
|
-
|
|
3085
|
-
const loadSlackMediaModule = createLazyRuntimeModule(() => import("./actions-By7tvpvv.mjs").then((n) => n._));
|
|
3063
|
+
// extensions/slack/src/monitor/message-handler/prepare-thread-context.ts
|
|
3064
|
+
const loadSlackMediaModule = createLazyRuntimeModule(() => import("./actions-PF2cP6to.mjs").then((n) => n._));
|
|
3086
3065
|
const SLACK_THREAD_CONTEXT_USER_LOOKUP_CONCURRENCY = 4;
|
|
3087
3066
|
function formatSlackThreadLabelSnippet(text) {
|
|
3088
3067
|
return truncateUtf16Safe(text.replace(/\s+/g, " "), 80);
|
|
@@ -3289,8 +3268,7 @@ async function resolveSlackThreadContextData(params) {
|
|
|
3289
3268
|
threadStarterMedia
|
|
3290
3269
|
};
|
|
3291
3270
|
}
|
|
3292
|
-
|
|
3293
|
-
//#region src/channels/mention-gating.ts
|
|
3271
|
+
// src/channels/mention-gating.ts
|
|
3294
3272
|
function resolveBotThreadMentionPolicy(params) {
|
|
3295
3273
|
if (!params.isBotOwnedThread || params.requireMentionInBotThreads === void 0) return {
|
|
3296
3274
|
requireMention: params.requireMention,
|
|
@@ -3301,13 +3279,11 @@ function resolveBotThreadMentionPolicy(params) {
|
|
|
3301
3279
|
implicitMentionKinds: params.requireMentionInBotThreads ? params.implicitMentionKinds?.filter((kind) => kind === "native") : params.implicitMentionKinds
|
|
3302
3280
|
};
|
|
3303
3281
|
}
|
|
3304
|
-
|
|
3305
|
-
//#region \0openclaw:bundled-sdk:openclaw/plugin-sdk/channel-mention-gating
|
|
3282
|
+
// \0openclaw:bundled-sdk:openclaw/plugin-sdk/channel-mention-gating
|
|
3306
3283
|
var channel_mention_gating_exports = /* @__PURE__ */ __exportAll({ resolveBotThreadMentionPolicy: () => resolveBotThreadMentionPolicy });
|
|
3307
3284
|
import * as import_openclaw_plugin_sdk_channel_mention_gating from "openclaw/plugin-sdk/channel-mention-gating";
|
|
3308
3285
|
__reExport(channel_mention_gating_exports, import_openclaw_plugin_sdk_channel_mention_gating);
|
|
3309
|
-
|
|
3310
|
-
//#region extensions/slack/src/monitor/message-handler/prepare-thread-mentions.ts
|
|
3286
|
+
// extensions/slack/src/monitor/message-handler/prepare-thread-mentions.ts
|
|
3311
3287
|
async function resolveSlackThreadMentionPolicy(params) {
|
|
3312
3288
|
const { ctx, account, message, conversation, thread } = params;
|
|
3313
3289
|
const { isRoom, isDirectMessage, channelConfig } = conversation;
|
|
@@ -3341,8 +3317,7 @@ async function resolveSlackThreadMentionPolicy(params) {
|
|
|
3341
3317
|
implicitMentionKinds
|
|
3342
3318
|
});
|
|
3343
3319
|
}
|
|
3344
|
-
|
|
3345
|
-
//#region extensions/slack/src/monitor/message-handler/subteam-mentions.ts
|
|
3320
|
+
// extensions/slack/src/monitor/message-handler/subteam-mentions.ts
|
|
3346
3321
|
const SUBTEAM_MENTION_RE = /<!subteam\^([A-Z0-9]+)(?:\|[^>]*)?>/gi;
|
|
3347
3322
|
const SUBTEAM_MEMBER_CACHE_TTL_MS = 3e5;
|
|
3348
3323
|
const subteamMemberCache = /* @__PURE__ */ new WeakMap();
|
|
@@ -3407,8 +3382,7 @@ async function isSlackSubteamMentionForBot(params) {
|
|
|
3407
3382
|
})).has(botUserId)) return true;
|
|
3408
3383
|
return false;
|
|
3409
3384
|
}
|
|
3410
|
-
|
|
3411
|
-
//#region extensions/slack/src/monitor/message-handler/prepare.ts
|
|
3385
|
+
// extensions/slack/src/monitor/message-handler/prepare.ts
|
|
3412
3386
|
const mentionRegexCache = /* @__PURE__ */ new WeakMap();
|
|
3413
3387
|
const SLACK_ANY_MENTION_RE = /<@[^>]+>|<!subteam\^[^>]+>/;
|
|
3414
3388
|
const SLACK_USER_MENTION_RE = /<@([^>|]+)(?:\|[^>]+)?>/g;
|
|
@@ -4350,5 +4324,4 @@ async function prepareSlackMessage(params) {
|
|
|
4350
4324
|
ackReactionPromise
|
|
4351
4325
|
};
|
|
4352
4326
|
}
|
|
4353
|
-
//#endregion
|
|
4354
4327
|
export { dispatchPreparedSlackMessage, prepareSlackMessage };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { r as normalizeSlackWebhookPath, t as handleSlackHttpRequest } from "./registry-
|
|
1
|
+
import { r as normalizeSlackWebhookPath, t as handleSlackHttpRequest } from "./registry-1G0f1zuZ.mjs";
|
|
2
2
|
import { DEFAULT_ACCOUNT_ID } from "openclaw/plugin-sdk/account-id";
|
|
3
|
-
|
|
3
|
+
// extensions/slack/src/http/plugin-routes.ts
|
|
4
4
|
function resolveSlackWebhookPaths(config) {
|
|
5
5
|
const slack = config.channels?.slack;
|
|
6
6
|
const accountConfigs = slack?.accounts ?? {};
|
|
@@ -18,5 +18,4 @@ function registerSlackPluginHttpRoutes(api) {
|
|
|
18
18
|
handler: async (req, res) => await handleSlackHttpRequest(req, res)
|
|
19
19
|
});
|
|
20
20
|
}
|
|
21
|
-
//#endregion
|
|
22
21
|
export { registerSlackPluginHttpRoutes as t };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { i as buildSlackChannelPolicyScope, r as buildSlackChannelIdCandidates } from "./session-status-
|
|
2
|
-
import { j as resolveSlackUserAllowListForTeam, k as normalizeSlackSlug } from "./probe-
|
|
1
|
+
import { i as buildSlackChannelPolicyScope, r as buildSlackChannelIdCandidates } from "./session-status-CHkEn3HM.mjs";
|
|
2
|
+
import { j as resolveSlackUserAllowListForTeam, k as normalizeSlackSlug } from "./probe-C5VWf3sz.mjs";
|
|
3
3
|
import { applyChannelMatchMeta, buildChannelKeyCandidates } from "openclaw/plugin-sdk/channel-targets";
|
|
4
4
|
import { firstDefined } from "openclaw/plugin-sdk/allow-from";
|
|
5
5
|
import { mergePairLoopGuardConfig } from "openclaw/plugin-sdk/pair-loop-guard-runtime";
|
|
6
|
-
|
|
6
|
+
// extensions/slack/src/monitor/channel-config.ts
|
|
7
7
|
function resolveSlackChannelLabel(params) {
|
|
8
8
|
const channelName = params.channelName?.trim();
|
|
9
9
|
if (channelName) return `#${normalizeSlackSlug(channelName) || channelName}`;
|
|
@@ -52,11 +52,9 @@ function resolveSlackChannelConfig(params) {
|
|
|
52
52
|
};
|
|
53
53
|
return applyChannelMatchMeta(result, match);
|
|
54
54
|
}
|
|
55
|
-
|
|
56
|
-
//#region extensions/slack/src/monitor/policy.ts
|
|
55
|
+
// extensions/slack/src/monitor/policy.ts
|
|
57
56
|
function isSlackChannelAllowedByPolicy(params) {
|
|
58
57
|
if (params.groupPolicy === "disabled") return false;
|
|
59
58
|
return params.groupPolicy !== "allowlist" || params.channelAllowlistConfigured && params.channelAllowed;
|
|
60
59
|
}
|
|
61
|
-
//#endregion
|
|
62
60
|
export { resolveSlackChannelConfig as n, resolveSlackChannelLabel as r, isSlackChannelAllowedByPolicy as t };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { t as __exportAll } from "./rolldown-runtime-
|
|
2
|
-
import { p as formatSlackBotTokenIdentityWarning } from "./accounts-
|
|
3
|
-
import { a as parseSlackTarget } from "./target-parsing-
|
|
1
|
+
import { t as __exportAll } from "./rolldown-runtime-nwUcYXjP.mjs";
|
|
2
|
+
import { p as formatSlackBotTokenIdentityWarning } from "./accounts-CEgdyqoW.mjs";
|
|
3
|
+
import { a as parseSlackTarget } from "./target-parsing-0pRZtahO.mjs";
|
|
4
4
|
import { createRequire } from "node:module";
|
|
5
5
|
import { isRecord, normalizeOptionalLowercaseString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
6
6
|
import { sleepWithAbort } from "openclaw/plugin-sdk/runtime-env";
|
|
@@ -16,7 +16,7 @@ import { parseRetryAfterHeaderSeconds, retryAsync } from "openclaw/plugin-sdk/re
|
|
|
16
16
|
import { fetchWithRuntimeDispatcher } from "openclaw/plugin-sdk/runtime-fetch";
|
|
17
17
|
import { redactSensitiveText } from "openclaw/plugin-sdk/logging-core";
|
|
18
18
|
import { defineStableChannelIngressIdentity } from "openclaw/plugin-sdk/channel-ingress-runtime";
|
|
19
|
-
|
|
19
|
+
// extensions/slack/src/monitor/allow-list.ts
|
|
20
20
|
const SLACK_SLUG_CACHE_MAX = 512;
|
|
21
21
|
const SLACK_STABLE_USER_ID_RE = /^[ubw][a-z0-9]+$/;
|
|
22
22
|
const slackSlugCache = /* @__PURE__ */ new Map();
|
|
@@ -113,8 +113,7 @@ function resolveSlackUserAllowListForTeam(params) {
|
|
|
113
113
|
}
|
|
114
114
|
});
|
|
115
115
|
}
|
|
116
|
-
|
|
117
|
-
//#region extensions/slack/src/client-options.ts
|
|
116
|
+
// extensions/slack/src/client-options.ts
|
|
118
117
|
const SLACK_DEFAULT_RETRY_OPTIONS = {
|
|
119
118
|
retries: 2,
|
|
120
119
|
factor: 2,
|
|
@@ -286,8 +285,7 @@ function resolveSlackLookupClientOptions(options = {}, dispatcher = resolveSlack
|
|
|
286
285
|
resolved.timeout ??= SLACK_READ_TIMEOUT_MS;
|
|
287
286
|
return resolved;
|
|
288
287
|
}
|
|
289
|
-
|
|
290
|
-
//#region extensions/slack/src/monitor/lru-map-cache.ts
|
|
288
|
+
// extensions/slack/src/monitor/lru-map-cache.ts
|
|
291
289
|
/** LRU-touch read: move hit to newest so pruneMapToMaxSize keeps active keys. */
|
|
292
290
|
function readLruMapEntry(cache, cacheKey) {
|
|
293
291
|
const cached = cache.get(cacheKey);
|
|
@@ -305,8 +303,7 @@ function writeLruMapEntry(cache, cacheKey, entry, maxEntries) {
|
|
|
305
303
|
function pruneExpiredMapEntries(cache, now) {
|
|
306
304
|
for (const [key, entry] of cache) if (entry.expiresAt <= now) cache.delete(key);
|
|
307
305
|
}
|
|
308
|
-
|
|
309
|
-
//#region extensions/slack/src/client.ts
|
|
306
|
+
// extensions/slack/src/client.ts
|
|
310
307
|
const SLACK_WRITE_CLIENT_CACHE_MAX = 32;
|
|
311
308
|
const SLACK_STARTUP_AUTH_TIMEOUT_MS = 1e4;
|
|
312
309
|
const SLACK_STARTUP_AUTH_RETRY_BUDGET_MS = 35e3;
|
|
@@ -392,8 +389,7 @@ function getSlackListenerWriteClient(params) {
|
|
|
392
389
|
else if (!cached) slackListenerWriteClientCache.set(params.listenerClient, { teamId });
|
|
393
390
|
return client;
|
|
394
391
|
}
|
|
395
|
-
|
|
396
|
-
//#region extensions/slack/src/cursor-pages.ts
|
|
392
|
+
// extensions/slack/src/cursor-pages.ts
|
|
397
393
|
const SLACK_CURSOR_PAGE_LIMIT = 1e4;
|
|
398
394
|
const fetchSlackChannelListPage = (client, cursor) => client.conversations.list({
|
|
399
395
|
types: "public_channel,private_channel",
|
|
@@ -416,8 +412,7 @@ async function collectSlackCursorPages(params) {
|
|
|
416
412
|
}
|
|
417
413
|
throw new Error(`Slack cursor pagination exceeded ${SLACK_CURSOR_PAGE_LIMIT} pages`);
|
|
418
414
|
}
|
|
419
|
-
|
|
420
|
-
//#region extensions/slack/src/errors.ts
|
|
415
|
+
// extensions/slack/src/errors.ts
|
|
421
416
|
const NO_ERROR_DETAIL = "no error detail";
|
|
422
417
|
const MAX_ERROR_CAUSE_DEPTH = 32;
|
|
423
418
|
function getSlackWebApiErrorData(error) {
|
|
@@ -528,8 +523,7 @@ function formatSlackErrorWithCauses(error, fallback, seen) {
|
|
|
528
523
|
function formatSlackError(error, fallback = NO_ERROR_DETAIL) {
|
|
529
524
|
return formatSlackErrorWithCauses(error, fallback, /* @__PURE__ */ new Set());
|
|
530
525
|
}
|
|
531
|
-
|
|
532
|
-
//#region extensions/slack/src/monitor/ingress-identity.ts
|
|
526
|
+
// extensions/slack/src/monitor/ingress-identity.ts
|
|
533
527
|
const SLACK_USER_NAME_KIND = "plugin:slack-user-name";
|
|
534
528
|
const SLACK_WORKSPACE_USER_ID_KIND = "plugin:slack-workspace-user-id";
|
|
535
529
|
function normalizeSlackUserId(raw) {
|
|
@@ -629,8 +623,7 @@ function createSlackIngressSubject(params) {
|
|
|
629
623
|
}
|
|
630
624
|
};
|
|
631
625
|
}
|
|
632
|
-
|
|
633
|
-
//#region extensions/slack/src/probe.ts
|
|
626
|
+
// extensions/slack/src/probe.ts
|
|
634
627
|
var probe_exports = /* @__PURE__ */ __exportAll({ probeSlack: () => probeSlack });
|
|
635
628
|
async function probeSlack(token, timeoutMs = 2500, opts) {
|
|
636
629
|
const dispatcher = createSlackProbeDispatcher(timeoutMs);
|
|
@@ -690,5 +683,4 @@ async function probeSlack(token, timeoutMs = 2500, opts) {
|
|
|
690
683
|
await dispatcher.destroy().catch(() => void 0);
|
|
691
684
|
}
|
|
692
685
|
}
|
|
693
|
-
//#endregion
|
|
694
686
|
export { resolveSlackAllowListMatch as A, resolveSlackLookupClientOptions as C, allowListMatches as D, resolveSlackWriteClientOptions as E, resolveSlackUserAllowed as M, normalizeSlackAllowOwnerEntry as O, SLACK_WRITE_RETRY_OPTIONS as S, resolveSlackWebClientOptions as T, getSlackWriteClient as _, slackIngressIdentity as a, writeLruMapEntry as b, collectSlackCursorPages as c, createSlackReadClient as d, createSlackStartupAuthClient as f, getSlackListenerWriteClient as g, createSlackWriteClient as h, createSlackIngressSubject as i, resolveSlackUserAllowListForTeam as j, normalizeSlackSlug as k, fetchSlackChannelListPage as l, createSlackWebClient as m, probe_exports as n, formatSlackError as o, createSlackTokenCacheKey as p, SLACK_USER_NAME_KIND as r, getSlackWebApiErrorData as s, probeSlack as t, createSlackLookupClient as u, pruneExpiredMapEntries as v, resolveSlackMonitorDispatchers as w, SLACK_DEFAULT_RETRY_OPTIONS as x, readLruMapEntry as y };
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { resolveGlobalMap } from "openclaw/plugin-sdk/global-singleton";
|
|
2
|
-
|
|
2
|
+
// extensions/slack/src/http/paths.ts
|
|
3
3
|
function normalizeSlackWebhookPath(path) {
|
|
4
4
|
const trimmed = path?.trim();
|
|
5
5
|
if (!trimmed) return "/slack/events";
|
|
6
6
|
return trimmed.startsWith("/") ? trimmed : `/${trimmed}`;
|
|
7
7
|
}
|
|
8
|
-
|
|
9
|
-
//#region extensions/slack/src/http/registry.ts
|
|
8
|
+
// extensions/slack/src/http/registry.ts
|
|
10
9
|
const slackHttpRoutes = resolveGlobalMap(Symbol.for("openclaw.slack.httpRoutes.v1"));
|
|
11
10
|
function registerSlackHttpHandler(params) {
|
|
12
11
|
const normalizedPath = normalizeSlackWebhookPath(params.path);
|
|
@@ -32,5 +31,4 @@ async function handleSlackHttpRequest(req, res) {
|
|
|
32
31
|
await handler(req, res);
|
|
33
32
|
return true;
|
|
34
33
|
}
|
|
35
|
-
//#endregion
|
|
36
34
|
export { registerSlackHttpHandler as n, normalizeSlackWebhookPath as r, handleSlackHttpRequest as t };
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { o as formatSlackError } from "./probe-
|
|
2
|
-
import { d as parseSlackMessageEvent, f as requireSlackMessageEvent, x as SLACK_SOCKET_RECONNECT_POLICY } from "./monitor-
|
|
1
|
+
import { o as formatSlackError } from "./probe-C5VWf3sz.mjs";
|
|
2
|
+
import { d as parseSlackMessageEvent, f as requireSlackMessageEvent, x as SLACK_SOCKET_RECONNECT_POLICY } from "./monitor-BSKi0nx-.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";
|
|
6
6
|
import { isIP } from "node:net";
|
|
7
7
|
import { rawDataToString } from "openclaw/plugin-sdk/webhook-ingress";
|
|
8
|
-
import { WebSocket } from "openclaw/plugin-sdk/websocket-runtime";
|
|
9
|
-
|
|
8
|
+
import { WebSocket, startWebSocketKeepalive } from "openclaw/plugin-sdk/websocket-runtime";
|
|
9
|
+
// extensions/slack/src/monitor/relay-source.ts
|
|
10
10
|
const SLACK_RELAY_ROUTE_KINDS = /* @__PURE__ */ new Set([
|
|
11
11
|
"user_group",
|
|
12
12
|
"thread_affinity",
|
|
@@ -93,7 +93,12 @@ function runRelayWebSocket(params) {
|
|
|
93
93
|
const ws = params.connection;
|
|
94
94
|
let pending = Promise.resolve();
|
|
95
95
|
return new Promise((resolve, reject) => {
|
|
96
|
+
const stopKeepalive = startWebSocketKeepalive(ws, () => {
|
|
97
|
+
ws.terminate();
|
|
98
|
+
settleReject(/* @__PURE__ */ new Error("Slack relay websocket heartbeat timed out"));
|
|
99
|
+
});
|
|
96
100
|
const cleanup = () => {
|
|
101
|
+
stopKeepalive();
|
|
97
102
|
ws.off("message", onMessage);
|
|
98
103
|
ws.off("error", onError);
|
|
99
104
|
ws.off("close", onClose);
|
|
@@ -246,5 +251,4 @@ function formatRelayClose(code, reason) {
|
|
|
246
251
|
const text = reason.toString("utf8");
|
|
247
252
|
return text ? `Slack relay websocket closed (${code} ${text})` : `Slack relay websocket closed (${code})`;
|
|
248
253
|
}
|
|
249
|
-
//#endregion
|
|
250
254
|
export { SLACK_RELAY_MAX_PAYLOAD_BYTES, SlackRelayMalformedFrameError, buildRelayWebSocketOptions, buildRelayWebSocketUrl, monitorSlackRelaySource, parseRelayFrame, requireSlackMessageEvent };
|
|
@@ -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-
|
|
2
|
-
import { n as iterateSlackReplyDeliveryMessages, o as resolveSlackReplyBlockResolution, t as hasSlackReplyStructuredContent } from "./reply-blocks-
|
|
3
|
-
import { n as resolveSlackReplyThreadTs } from "./thread-ts-
|
|
4
|
-
import { h as chunkSlackTextAtHardLimit, m as buildSlackNativeDataDeliveryPlan, t as sendMessageSlack } from "./send-
|
|
5
|
-
import { a as SlackResponseAlreadyReportedError, o as createSlackResponseUrlBudget } from "./monitor-
|
|
1
|
+
import { C as isSlackNativeResponseUrlRejection, M as SLACK_TEXT_LIMIT, S as isSlackInvalidBlocksResponse, Z as markdownToSlackMrkdwnChunks, b as hasSlackNativeDataBlock } from "./session-status-CHkEn3HM.mjs";
|
|
2
|
+
import { n as iterateSlackReplyDeliveryMessages, o as resolveSlackReplyBlockResolution, t as hasSlackReplyStructuredContent } from "./reply-blocks-DOjiDr44.mjs";
|
|
3
|
+
import { n as resolveSlackReplyThreadTs } from "./thread-ts-47Au2-Yn.mjs";
|
|
4
|
+
import { h as chunkSlackTextAtHardLimit, m as buildSlackNativeDataDeliveryPlan, t as sendMessageSlack } from "./send-C5uXkmZV.mjs";
|
|
5
|
+
import { a as SlackResponseAlreadyReportedError, o as createSlackResponseUrlBudget } from "./monitor-BSKi0nx-.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";
|
|
@@ -12,7 +12,7 @@ import { SILENT_REPLY_TOKEN, chunkMarkdownTextWithMode, isSilentReplyText } from
|
|
|
12
12
|
import { getGlobalHookRunner } from "openclaw/plugin-sdk/plugin-runtime";
|
|
13
13
|
import { createAcceptedChannelDeliveryResult, createChannelPartialDeliveryError, getGroupThreadDeliverySession } from "openclaw/plugin-sdk/channel-inbound";
|
|
14
14
|
import { buildCanonicalSentMessageHookContext, createInternalHookEvent, fireAndForgetHook, toInternalMessageSentContext, toPluginMessageContext, toPluginMessageSentEvent, triggerInternalHook } from "openclaw/plugin-sdk/hook-runtime";
|
|
15
|
-
|
|
15
|
+
// extensions/slack/src/message-sent-hook.ts
|
|
16
16
|
function emitSlackMessageSentHooks(params) {
|
|
17
17
|
const hookRunner = getGlobalHookRunner();
|
|
18
18
|
const enabled = hookRunner?.hasHooks("message_sent") ?? false;
|
|
@@ -33,8 +33,7 @@ function emitSlackMessageSentHooks(params) {
|
|
|
33
33
|
if (enabled) fireAndForgetHook(Promise.resolve(hookRunner.runMessageSent(toPluginMessageSentEvent(canonical), toPluginMessageContext(canonical))), "slack: message_sent plugin hook failed");
|
|
34
34
|
if (params.sessionKeyForInternalHooks) fireAndForgetHook(triggerInternalHook(createInternalHookEvent("message", "sent", params.sessionKeyForInternalHooks, toInternalMessageSentContext(canonical))), "slack: message:sent internal hook failed");
|
|
35
35
|
}
|
|
36
|
-
|
|
37
|
-
//#region extensions/slack/src/monitor/replies.ts
|
|
36
|
+
// extensions/slack/src/monitor/replies.ts
|
|
38
37
|
function compactSlackResponseUrlFallback(messages) {
|
|
39
38
|
if (messages.length <= 1) return [...messages];
|
|
40
39
|
if (messages.every((message) => !message.blocks?.length)) return chunkSlackTextAtHardLimit(messages.map((message) => message.text).join("")).map((text) => ({
|
|
@@ -421,5 +420,4 @@ async function deliverSlackSlashReplies(params) {
|
|
|
421
420
|
});
|
|
422
421
|
}
|
|
423
422
|
}
|
|
424
|
-
//#endregion
|
|
425
423
|
export { emitSlackMessageSentHooks as a, sanitizeSlackMonitorReplyPayload as i, deliverReplies as n, deliverSlackSlashReplies as r, createSlackReplyDeliveryPlan as t };
|
|
@@ -1,10 +1,10 @@
|
|
|
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-
|
|
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-CHkEn3HM.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";
|
|
5
5
|
import { parseExecApprovalCommandText } from "openclaw/plugin-sdk/approval-reply-runtime";
|
|
6
6
|
import { resolveAskUserQuestionOptionIndex, resolveAskUserQuestionOptionIndices, resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload";
|
|
7
|
-
|
|
7
|
+
// extensions/slack/src/blocks-render.ts
|
|
8
8
|
const SLACK_BUTTON_URL_MAX = 3e3;
|
|
9
9
|
function buildSlackPlainText(text, maxLength) {
|
|
10
10
|
return {
|
|
@@ -268,8 +268,7 @@ function buildSlackPresentationSelectElements(block, selectIndex, requireComplet
|
|
|
268
268
|
}))
|
|
269
269
|
}] : [];
|
|
270
270
|
}
|
|
271
|
-
|
|
272
|
-
//#region extensions/slack/src/authored-text.ts
|
|
271
|
+
// extensions/slack/src/authored-text.ts
|
|
273
272
|
function normalizeComparableSlackText(text) {
|
|
274
273
|
return text.trim().replace(/\s+/g, " ");
|
|
275
274
|
}
|
|
@@ -298,8 +297,7 @@ function resolveSlackAuthoredTextPlacement(params) {
|
|
|
298
297
|
if (!text) return "none";
|
|
299
298
|
return params.renderedInBlocks || isSlackAuthoredTextRepresentedInFragments(text, params.renderedTextFragments ?? []) || isSlackAuthoredTextRepresentedInFragments(text, params.interactive?.blocks.flatMap((block) => block.type === "text" ? [block.text] : []) ?? []) ? "blocks" : "outside-blocks";
|
|
300
299
|
}
|
|
301
|
-
|
|
302
|
-
//#region extensions/slack/src/reply-blocks.ts
|
|
300
|
+
// extensions/slack/src/reply-blocks.ts
|
|
303
301
|
function normalizeSlackReplyPayload(payload) {
|
|
304
302
|
const previousSlackData = asOptionalRecord(payload.channelData?.slack) ?? {};
|
|
305
303
|
const { authoredPresentationText: _authoredPresentationText, ...slackData } = previousSlackData;
|
|
@@ -647,5 +645,4 @@ function resolveSlackReplyBlocks(payload) {
|
|
|
647
645
|
const { segments } = resolveSlackReplyBlockResolution(payload);
|
|
648
646
|
return segments.length === 1 && segments[0]?.kind === "blocks" ? segments[0].blocks : void 0;
|
|
649
647
|
}
|
|
650
|
-
//#endregion
|
|
651
648
|
export { prepareSlackReply as a, resolveSlackReplyDeliveryMessages as c, buildSlackInteractiveBlocks as d, buildSlackPresentationBlocks as f, parseSlackReplyBlockSegments as i, resolveSlackReplyRenderPlan as l, iterateSlackReplyDeliveryMessages as n, resolveSlackReplyBlockResolution as o, buildSlackPresentationBlocksIfComplete as p, normalizeSlackReplyPayload as r, resolveSlackReplyBlocks as s, hasSlackReplyStructuredContent as t, resolveSlackAuthoredTextPlacement as u };
|