@openclaw/slack 2026.7.2-beta.7 → 2026.8.1-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{account-inspect-DEKpg9Ip.js → account-inspect-Drw2gAiN.js} +1 -1
- package/dist/account-inspect-api.js +1 -1
- package/dist/{accounts-CHAeNZOX.js → accounts-CK4AVI2_.js} +2 -2
- package/dist/{accounts.runtime-BHD4Ma2R.js → accounts.runtime-Cb7QwWBz.js} +1 -1
- package/dist/{action-runtime-DfuYoMjG.js → action-runtime-BkGe7ny_.js} +148 -76
- package/dist/action-runtime.runtime-D9I6uc0Q.js +2 -0
- package/dist/{actions-D3NuJvva.js → actions-BTDXwwE3.js} +85 -44
- package/dist/actions.runtime-DLFyUkvg.js +2 -0
- package/dist/api.js +15 -15
- package/dist/{approval-handler.runtime-BA05P0QT.js → approval-handler.runtime-CJaNzAq2.js} +51 -14
- package/dist/{block-text-DkHaoGem.js → block-text-YtiNkqmx.js} +1 -1
- package/dist/{channel-B9fVdW3s.js → channel-D_tovcUL.js} +151 -91
- package/dist/channel-config-api.js +1 -1
- package/dist/channel-plugin-api.js +1 -1
- package/dist/{channel-type-DXyos1d2.js → channel-type-B9MSdoGN.js} +9 -8
- package/dist/{config-adapter-CxBQH8fq.js → channel.setup-Bch9dYmA.js} +83 -25
- package/dist/{config-schema-SgZT6nXV.js → config-schema-xto5jFIx.js} +5 -11
- package/dist/{directory-config-CnCIAktf.js → directory-config-CNBz8lJa.js} +3 -3
- package/dist/directory-contract-api.js +1 -1
- package/dist/{directory-live-DKunWh3A.js → directory-live-CFKUtW9E.js} +13 -22
- package/dist/{doctor-contract-CsGH1Dfc.js → doctor-contract-BAy7-EUQ.js} +30 -3
- package/dist/doctor-contract-api.js +1 -1
- package/dist/{group-policy-NQZti9t-.js → group-policy-c4RP9bjc.js} +248 -163
- package/dist/index.js +4 -1
- package/dist/{message-tool-api-DkhFpMoy.js → message-tool-api-BykQB4AU.js} +14 -3
- package/dist/message-tool-api.js +1 -1
- package/dist/{monitor-CmKz0wtI.js → monitor-1nF1NtqT.js} +3 -3
- package/dist/{outbound-adapter-BkuMp2Vs.js → outbound-adapter-S81tsswN.js} +19 -17
- package/dist/{pipeline.runtime-DgtmuYCP.js → pipeline.runtime-BvYsM5JO.js} +1087 -682
- package/dist/{policy-PRysPn23.js → policy-TapwbeaT.js} +18 -14
- package/dist/{probe-CgDsSops.js → probe-HoEg_WxB.js} +38 -18
- package/dist/{provider-DmRizMZt.js → provider-CDNvBXUi.js} +3422 -2590
- package/dist/{relay-source-Blxj8xb4.js → relay-source-C9leF11u.js} +11 -21
- package/dist/{replies-4s_Vq_z9.js → replies-CeOfv82I.js} +52 -6
- package/dist/{resolve-channels-yEqmM-3I.js → resolve-channels-CNPrxaXY.js} +39 -12
- package/dist/{resolve-users-BOrt5K-5.js → resolve-users-Dzomuwnr.js} +28 -5
- package/dist/{runtime-api-QMb-Q5Ko.js → runtime-api-Cj9nxBNv.js} +3 -3
- package/dist/runtime-api.js +11 -11
- package/dist/{scopes-BJSrkAp6.js → scopes-cYXKkrRD.js} +1 -1
- package/dist/{send-DsLeZpST.js → send-Nor0iBwY.js} +211 -105
- package/dist/{send.runtime-gUdK6V3h.js → send.runtime-BmgNe6S9.js} +1 -1
- package/dist/setup-entry.js +1 -4
- package/dist/setup-plugin-api.js +1 -1
- package/dist/{setup-surface-BeNzrMrJ.js → setup-surface-CbX1-Knh.js} +6 -6
- package/dist/{shared-DgIN3Dcr.js → shared-zdT5AMp-.js} +36 -42
- package/dist/{slash-dispatch.runtime-zPkyl7dB.js → slash-dispatch.runtime-Bnr9GR1S.js} +1 -1
- package/dist/{streaming-compat-3_X-21wW.js → streaming-compat-B-e0mqM0.js} +3 -8
- package/dist/{target-parsing-N6lHogYZ.js → target-parsing-BnMD2ZqZ.js} +40 -2
- package/dist/{targets-KmjP2E8s.js → targets-Cx5W_n3W.js} +1 -1
- package/node_modules/@slack/bolt/node_modules/@types/node/README.md +1 -1
- package/node_modules/@slack/bolt/node_modules/@types/node/crypto.d.ts +1 -1
- package/node_modules/@slack/bolt/node_modules/@types/node/package.json +2 -2
- package/node_modules/@slack/socket-mode/node_modules/@types/node/README.md +1 -1
- package/node_modules/@slack/socket-mode/node_modules/@types/node/crypto.d.ts +1 -1
- package/node_modules/@slack/socket-mode/node_modules/@types/node/package.json +2 -2
- package/node_modules/@slack/web-api/node_modules/@types/node/README.md +1 -1
- package/node_modules/@slack/web-api/node_modules/@types/node/crypto.d.ts +1 -1
- package/node_modules/@slack/web-api/node_modules/@types/node/package.json +2 -2
- package/node_modules/undici/lib/cache/memory-cache-store.js +54 -9
- package/node_modules/undici/lib/cache/sqlite-cache-store.js +7 -1
- package/node_modules/undici/lib/core/request.js +12 -1
- package/node_modules/undici/lib/dispatcher/client-h1.js +11 -2
- package/node_modules/undici/lib/handler/cache-handler.js +246 -64
- package/node_modules/undici/lib/handler/cache-revalidation-handler.js +3 -3
- package/node_modules/undici/lib/handler/retry-handler.js +24 -0
- package/node_modules/undici/lib/interceptor/cache.js +159 -52
- package/node_modules/undici/lib/util/cache.js +324 -62
- package/node_modules/undici/lib/util/date.js +23 -6
- package/node_modules/undici/lib/web/cookies/util.js +79 -9
- package/node_modules/undici/package.json +1 -1
- package/openclaw.plugin.json +239 -34
- package/package.json +9 -9
- package/skills/slack/SKILL.md +10 -68
- package/dist/action-runtime.runtime-DQErZYpz.js +0 -2
- package/dist/actions.runtime-BIRU_G4M.js +0 -2
- package/dist/channel.setup-CLP5oTvh.js +0 -56
- package/dist/preflight-audio.runtime-D5Bgags0.js +0 -3
- package/dist/slash-plugin-commands.runtime-Dosfcx3X.js +0 -2
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { a as resolveSlackAccount, c as resolveSlackConfigAccessorAccount, i as resolveDefaultSlackAccountId, n as listSlackAccountIds } from "./accounts-
|
|
2
|
-
import { t as inspectSlackAccount } from "./account-inspect-
|
|
1
|
+
import { a as resolveSlackAccount, c as resolveSlackConfigAccessorAccount, i as resolveDefaultSlackAccountId, n as listSlackAccountIds } from "./accounts-CK4AVI2_.js";
|
|
2
|
+
import { t as inspectSlackAccount } from "./account-inspect-Drw2gAiN.js";
|
|
3
3
|
import { t as isSlackPluginAccountConfigured } from "./account-configured-BwfXBo_F.js";
|
|
4
|
+
import { t as SlackChannelConfigSchema } from "./config-schema-xto5jFIx.js";
|
|
4
5
|
import { hasConfiguredSecretInput, normalizeSecretInputString } from "openclaw/plugin-sdk/secret-input";
|
|
5
6
|
import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
6
7
|
import { adaptScopedAccountAccessor, createScopedChannelConfigAdapter } from "openclaw/plugin-sdk/channel-config-helpers";
|
|
@@ -247,7 +248,12 @@ const slackSetupAdapterBase = createPatchedAccountSetupAdapter({
|
|
|
247
248
|
const identity = setupInput.identity ?? account.config.postAs ?? "bot";
|
|
248
249
|
const mode = setupInput.mode ?? account.config.mode ?? "socket";
|
|
249
250
|
if (identity === "user" && mode === "relay") return "Slack user identity setup supports mode \"socket\" or \"http\", not \"relay\".";
|
|
250
|
-
if (setupInput.useEnv)
|
|
251
|
+
if (setupInput.useEnv) {
|
|
252
|
+
if (identity === "user") return "Slack user identity setup does not support --use-env; configure userToken and the transport credential explicitly.";
|
|
253
|
+
if (mode === "socket" && !normalizeOptionalString(setupInput.appToken) && account.appTokenStatus === "missing") return "Slack Socket Mode requires SLACK_APP_TOKEN when using --use-env.";
|
|
254
|
+
if (mode === "http" && !normalizeOptionalString(setupInput.signingSecret) && account.signingSecretStatus === "missing") return "Slack HTTP mode requires a configured signing secret when using --use-env.";
|
|
255
|
+
return null;
|
|
256
|
+
}
|
|
251
257
|
if (hasSlackSetupCredentials({
|
|
252
258
|
input: setupInput,
|
|
253
259
|
identity,
|
|
@@ -268,25 +274,6 @@ const slackSetupAdapterBase = createPatchedAccountSetupAdapter({
|
|
|
268
274
|
};
|
|
269
275
|
}
|
|
270
276
|
});
|
|
271
|
-
const slackSetupAdapter = {
|
|
272
|
-
...slackSetupAdapterBase,
|
|
273
|
-
singleAccountKeysToMove: ["appToken"],
|
|
274
|
-
applyAccountConfig: ({ cfg, accountId, input }) => {
|
|
275
|
-
const setupInput = input;
|
|
276
|
-
const identity = setupInput.identity ?? inspectSlackAccount({
|
|
277
|
-
cfg,
|
|
278
|
-
accountId
|
|
279
|
-
}).config.postAs;
|
|
280
|
-
return slackSetupAdapterBase.applyAccountConfig({
|
|
281
|
-
cfg,
|
|
282
|
-
accountId,
|
|
283
|
-
input: identity === "user" ? {
|
|
284
|
-
...setupInput,
|
|
285
|
-
identity
|
|
286
|
-
} : setupInput
|
|
287
|
-
});
|
|
288
|
-
}
|
|
289
|
-
};
|
|
290
277
|
const slackSetupContract = defineChannelSetupContract({
|
|
291
278
|
fields: {
|
|
292
279
|
botToken: {
|
|
@@ -342,10 +329,29 @@ const slackSetupContract = defineChannelSetupContract({
|
|
|
342
329
|
cli: {
|
|
343
330
|
flags: "--use-env",
|
|
344
331
|
description: "Use Slack environment credentials"
|
|
345
|
-
}
|
|
332
|
+
},
|
|
333
|
+
envVars: ["SLACK_BOT_TOKEN"]
|
|
346
334
|
}
|
|
347
335
|
},
|
|
348
|
-
legacyAdapter:
|
|
336
|
+
legacyAdapter: {
|
|
337
|
+
...slackSetupAdapterBase,
|
|
338
|
+
singleAccountKeysToMove: ["appToken"],
|
|
339
|
+
applyAccountConfig: ({ cfg, accountId, input }) => {
|
|
340
|
+
const setupInput = input;
|
|
341
|
+
const identity = setupInput.identity ?? inspectSlackAccount({
|
|
342
|
+
cfg,
|
|
343
|
+
accountId
|
|
344
|
+
}).config.postAs;
|
|
345
|
+
return slackSetupAdapterBase.applyAccountConfig({
|
|
346
|
+
cfg,
|
|
347
|
+
accountId,
|
|
348
|
+
input: identity === "user" ? {
|
|
349
|
+
...setupInput,
|
|
350
|
+
identity
|
|
351
|
+
} : setupInput
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
}
|
|
349
355
|
});
|
|
350
356
|
function createSlackSetupWizardBase(handlers) {
|
|
351
357
|
const slackDmPolicy = createChannelDmPolicy({
|
|
@@ -563,4 +569,56 @@ const slackBaseConfigAdapter = createScopedChannelConfigAdapter({
|
|
|
563
569
|
resolveDefaultTo: (account) => account.defaultTo
|
|
564
570
|
});
|
|
565
571
|
//#endregion
|
|
566
|
-
|
|
572
|
+
//#region extensions/slack/src/channel.setup.ts
|
|
573
|
+
const slackSetupWizard = createSlackSetupWizardProxy(async () => ({ slackSetupWizard: (await import("./setup-surface-CbX1-Knh.js")).slackSetupWizard }));
|
|
574
|
+
const slackSetupPlugin = {
|
|
575
|
+
id: SLACK_CHANNEL,
|
|
576
|
+
meta: {
|
|
577
|
+
id: SLACK_CHANNEL,
|
|
578
|
+
label: "Slack",
|
|
579
|
+
selectionLabel: "Slack (Socket Mode)",
|
|
580
|
+
detailLabel: "Slack Bot",
|
|
581
|
+
docsPath: "/channels/slack",
|
|
582
|
+
docsLabel: "slack",
|
|
583
|
+
blurb: "supported (Socket Mode).",
|
|
584
|
+
systemImage: "number",
|
|
585
|
+
markdownCapable: true,
|
|
586
|
+
preferSessionLookupForAnnounceTarget: true
|
|
587
|
+
},
|
|
588
|
+
setupWizard: slackSetupWizard,
|
|
589
|
+
capabilities: {
|
|
590
|
+
chatTypes: [
|
|
591
|
+
"direct",
|
|
592
|
+
"channel",
|
|
593
|
+
"thread"
|
|
594
|
+
],
|
|
595
|
+
reactions: true,
|
|
596
|
+
threads: true,
|
|
597
|
+
media: true,
|
|
598
|
+
nativeCommands: true
|
|
599
|
+
},
|
|
600
|
+
commands: {
|
|
601
|
+
nativeCommandsAutoEnabled: false,
|
|
602
|
+
nativeSkillsAutoEnabled: false,
|
|
603
|
+
resolveNativeCommandName: ({ commandKey, defaultName }) => commandKey === "status" ? "agentstatus" : defaultName
|
|
604
|
+
},
|
|
605
|
+
streaming: { blockStreamingCoalesceDefaults: {
|
|
606
|
+
minChars: 1500,
|
|
607
|
+
idleMs: 1e3
|
|
608
|
+
} },
|
|
609
|
+
reload: { configPrefixes: ["channels.slack"] },
|
|
610
|
+
configSchema: SlackChannelConfigSchema,
|
|
611
|
+
config: {
|
|
612
|
+
...slackBaseConfigAdapter,
|
|
613
|
+
hasConfiguredState: ({ env }) => [
|
|
614
|
+
"SLACK_APP_TOKEN",
|
|
615
|
+
"SLACK_BOT_TOKEN",
|
|
616
|
+
"SLACK_USER_TOKEN"
|
|
617
|
+
].some((key) => typeof env?.[key] === "string" && env[key]?.trim().length > 0),
|
|
618
|
+
isConfigured: (account) => isSlackSetupAccountConfigured(account),
|
|
619
|
+
describeAccount: (account) => describeSlackSetupAccount(account)
|
|
620
|
+
},
|
|
621
|
+
setupContract: slackSetupContract
|
|
622
|
+
};
|
|
623
|
+
//#endregion
|
|
624
|
+
export { slackSetupContract as a, createSlackSetupWizardProxy as i, slackBaseConfigAdapter as n, SLACK_CHANNEL as o, createSlackSetupWizardBase as r, slackSetupPlugin as t };
|
|
@@ -8,10 +8,6 @@ const slackChannelConfigUiHints = {
|
|
|
8
8
|
label: "Slack",
|
|
9
9
|
help: "Slack channel provider configuration for bot/app tokens, streaming behavior, and DM policy controls. Keep token handling and thread behavior explicit to avoid noisy workspace interactions."
|
|
10
10
|
},
|
|
11
|
-
enterpriseOrgInstall: {
|
|
12
|
-
label: "Slack Enterprise Grid Org Install",
|
|
13
|
-
help: "Enable only for an Enterprise Grid org-wide bot installation. OpenClaw verifies the token with Slack auth.test at startup; DMs must be disabled or use dmPolicy=\"open\" with allowFrom=[\"*\"]."
|
|
14
|
-
},
|
|
15
11
|
postAs: {
|
|
16
12
|
label: "Slack Identity",
|
|
17
13
|
help: "Select \"bot\" (default) for the classic Slack app/bot identity or \"user\" to post as the authorizing human through a user token while the app carries event transport."
|
|
@@ -28,16 +24,15 @@ const slackChannelConfigUiHints = {
|
|
|
28
24
|
nativeCommands: true,
|
|
29
25
|
implicitMentions: true,
|
|
30
26
|
streaming: {
|
|
31
|
-
"": "Unified Slack stream preview mode: \"off\" | \"partial\" | \"block\" | \"progress\". Legacy boolean/streamMode keys are auto-mapped.",
|
|
32
|
-
mode: "Canonical Slack preview mode: \"off\" | \"partial\" | \"block\" | \"progress\".",
|
|
27
|
+
"": "Unified Slack stream preview mode: \"off\" | \"partial\" | \"block\" | \"progress\" (default). Legacy boolean/streamMode keys are auto-mapped.",
|
|
28
|
+
mode: "Canonical Slack preview mode: \"off\" | \"partial\" | \"block\" | \"progress\" (default).",
|
|
33
29
|
chunkMode: "Chunking mode for outbound Slack text delivery: \"length\" (default) or \"newline\".",
|
|
34
30
|
"block.enabled": "Enable chunked block-style Slack preview delivery when channels.slack.streaming.mode=\"block\".",
|
|
35
31
|
"block.coalesce": "Merge streamed Slack block replies before final delivery.",
|
|
36
32
|
nativeTransport: "Enable native Slack text streaming (chat.startStream/chat.appendStream/chat.stopStream) when channels.slack.streaming.mode is partial (default: true). Native streaming and Slack assistant thread status require a reply thread target; top-level DMs can still use draft post-and-edit preview streaming.",
|
|
37
33
|
"preview.toolProgress": "Show tool/progress activity in the live draft preview message (default: true). Set false to hide interim tool updates while the draft preview stays active.",
|
|
38
|
-
"preview.commandText": "Command/exec detail in preview tool-progress lines: \"
|
|
39
|
-
"progress.
|
|
40
|
-
"progress.nativeTaskCards": "Opt in to Slack native task-card progress updates when channels.slack.streaming.mode=\"progress\" and streaming.nativeTransport is enabled. Default: false."
|
|
34
|
+
"preview.commandText": "Command/exec detail in preview tool-progress lines: \"status\" is the safe default; \"raw\" opts into command text.",
|
|
35
|
+
"progress.nativeTaskCards": "Slack native task-card progress updates when channels.slack.streaming.mode=\"progress\" and streaming.nativeTransport is enabled. Set false to fall back to the Block Kit progress card. Default: true."
|
|
41
36
|
},
|
|
42
37
|
progress: { labels: "openclaw" }
|
|
43
38
|
}),
|
|
@@ -99,7 +94,7 @@ const slackChannelConfigUiHints = {
|
|
|
99
94
|
},
|
|
100
95
|
execApprovals: {
|
|
101
96
|
label: "Slack Exec Approvals",
|
|
102
|
-
help: "Slack-native exec approval routing and approver authorization. When unset, OpenClaw auto-enables DM-first native approvals if approvers can be resolved for this
|
|
97
|
+
help: "Slack-native exec approval routing and approver authorization. When unset, OpenClaw auto-enables DM-first native approvals if approvers can be resolved for this Slack account."
|
|
103
98
|
},
|
|
104
99
|
presenceEvents: {
|
|
105
100
|
label: "Slack Presence Events",
|
|
@@ -199,7 +194,6 @@ const SlackAccountSchema = z.object({
|
|
|
199
194
|
"http",
|
|
200
195
|
"relay"
|
|
201
196
|
]).optional(),
|
|
202
|
-
enterpriseOrgInstall: z.boolean().optional(),
|
|
203
197
|
relay: SlackRelaySchema.optional(),
|
|
204
198
|
signingSecret: SecretInputSchema.optional(),
|
|
205
199
|
webhookPath: z.string().optional(),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
|
|
2
|
-
import { i as resolveDefaultSlackAccountId, o as resolveSlackAccountAllowFrom, r as mergeSlackAccountConfig } from "./accounts-
|
|
3
|
-
import {
|
|
4
|
-
import "./targets-
|
|
2
|
+
import { i as resolveDefaultSlackAccountId, o as resolveSlackAccountAllowFrom, r as mergeSlackAccountConfig } from "./accounts-CK4AVI2_.js";
|
|
3
|
+
import { a as parseSlackTarget } from "./target-parsing-BnMD2ZqZ.js";
|
|
4
|
+
import "./targets-Cx5W_n3W.js";
|
|
5
5
|
import { normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
|
|
6
6
|
import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
7
7
|
import { createResolvedDirectoryEntriesLister } from "openclaw/plugin-sdk/directory-config-runtime";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as listSlackDirectoryGroupsFromConfig, r as listSlackDirectoryPeersFromConfig } from "./directory-config-
|
|
1
|
+
import { n as listSlackDirectoryGroupsFromConfig, r as listSlackDirectoryPeersFromConfig } from "./directory-config-CNBz8lJa.js";
|
|
2
2
|
export { listSlackDirectoryGroupsFromConfig, listSlackDirectoryPeersFromConfig };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
|
|
2
|
-
import { a as resolveSlackAccount } from "./accounts-
|
|
3
|
-
import {
|
|
2
|
+
import { a as resolveSlackAccount } from "./accounts-CK4AVI2_.js";
|
|
3
|
+
import { i as createSlackLookupClient } from "./probe-HoEg_WxB.js";
|
|
4
|
+
import { t as collectSlackCursorPages } from "./cursor-pages-eX7p8Wwt.js";
|
|
4
5
|
import { normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
5
6
|
//#region extensions/slack/src/directory-live.ts
|
|
6
7
|
var directory_live_exports = /* @__PURE__ */ __exportAll({
|
|
@@ -67,18 +68,13 @@ async function listSlackDirectoryPeersLive(params) {
|
|
|
67
68
|
const client = createSlackDirectoryClient(params);
|
|
68
69
|
if (!client) return [];
|
|
69
70
|
const query = normalizeQuery(params.query);
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
do {
|
|
73
|
-
const res = await client.users.list({
|
|
71
|
+
const rows = (await collectSlackCursorPages({
|
|
72
|
+
fetchPage: (cursor) => client.users.list({
|
|
74
73
|
limit: 200,
|
|
75
74
|
cursor
|
|
76
|
-
})
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
cursor = next ? next : void 0;
|
|
80
|
-
} while (cursor);
|
|
81
|
-
const rows = members.filter((member) => {
|
|
75
|
+
}),
|
|
76
|
+
collectPageItems: (res) => Array.isArray(res.members) ? res.members : []
|
|
77
|
+
})).filter((member) => {
|
|
82
78
|
const candidates = [
|
|
83
79
|
member.profile?.display_name || member.profile?.real_name || member.real_name,
|
|
84
80
|
member.name,
|
|
@@ -94,20 +90,15 @@ async function listSlackDirectoryGroupsLive(params) {
|
|
|
94
90
|
const client = createSlackDirectoryClient(params);
|
|
95
91
|
if (!client) return [];
|
|
96
92
|
const query = normalizeQuery(params.query);
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
do {
|
|
100
|
-
const res = await client.conversations.list({
|
|
93
|
+
const rows = (await collectSlackCursorPages({
|
|
94
|
+
fetchPage: (cursor) => client.conversations.list({
|
|
101
95
|
types: "public_channel,private_channel",
|
|
102
96
|
exclude_archived: false,
|
|
103
97
|
limit: 1e3,
|
|
104
98
|
cursor
|
|
105
|
-
})
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
cursor = next ? next : void 0;
|
|
109
|
-
} while (cursor);
|
|
110
|
-
const rows = channels.filter((channel) => {
|
|
99
|
+
}),
|
|
100
|
+
collectPageItems: (res) => Array.isArray(res.channels) ? res.channels : []
|
|
101
|
+
})).filter((channel) => {
|
|
111
102
|
const name = normalizeOptionalLowercaseString(channel.name);
|
|
112
103
|
if (!query) return true;
|
|
113
104
|
return Boolean(name && name.includes(query));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { n as
|
|
2
|
-
import { asObjectRecord, defineChannelAliasMigration, defineKeyMoveMigration, hasLegacyAccountStreamingAliases, normalizeChannelConfigEntries } from "openclaw/plugin-sdk/runtime-doctor";
|
|
1
|
+
import { n as resolveSlackStreamingMode, t as resolveSlackNativeStreaming } from "./streaming-compat-B-e0mqM0.js";
|
|
2
|
+
import { asObjectRecord, defineChannelAliasMigration, defineKeyMoveMigration, hasLegacyAccountStreamingAliases, normalizeChannelConfigEntries, stripRetiredChannelKeys } from "openclaw/plugin-sdk/runtime-doctor-migrations";
|
|
3
3
|
//#region extensions/slack/src/doctor-contract.ts
|
|
4
4
|
const streamingAliasMigration = defineChannelAliasMigration({
|
|
5
5
|
channelId: "slack",
|
|
@@ -35,6 +35,9 @@ function hasInteractiveRepliesCapability(value) {
|
|
|
35
35
|
const capabilitiesRecord = asObjectRecord(capabilities);
|
|
36
36
|
return Boolean(capabilitiesRecord && (Object.keys(capabilitiesRecord).length === 0 || Object.hasOwn(capabilitiesRecord, "interactiveReplies")));
|
|
37
37
|
}
|
|
38
|
+
function hasEnterpriseOrgInstall(value) {
|
|
39
|
+
return Object.hasOwn(asObjectRecord(value) ?? {}, "enterpriseOrgInstall");
|
|
40
|
+
}
|
|
38
41
|
function removeInteractiveRepliesCapability(params) {
|
|
39
42
|
const capabilities = params.entry.capabilities;
|
|
40
43
|
let nextCapabilities;
|
|
@@ -66,6 +69,23 @@ function removeInteractiveRepliesCapability(params) {
|
|
|
66
69
|
}
|
|
67
70
|
const legacyConfigRules = [
|
|
68
71
|
...streamingAliasMigration.legacyConfigRules,
|
|
72
|
+
{
|
|
73
|
+
path: [
|
|
74
|
+
"channels",
|
|
75
|
+
"slack",
|
|
76
|
+
"enterpriseOrgInstall"
|
|
77
|
+
],
|
|
78
|
+
message: "channels.slack.enterpriseOrgInstall is retired; Slack now detects org-wide installations automatically. Run \"openclaw doctor --fix\"."
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
path: [
|
|
82
|
+
"channels",
|
|
83
|
+
"slack",
|
|
84
|
+
"accounts"
|
|
85
|
+
],
|
|
86
|
+
message: "channels.slack.accounts.<id>.enterpriseOrgInstall is retired; Slack now detects org-wide installations automatically. Run \"openclaw doctor --fix\".",
|
|
87
|
+
match: (value) => hasLegacyAccountStreamingAliases(value, hasEnterpriseOrgInstall)
|
|
88
|
+
},
|
|
69
89
|
{
|
|
70
90
|
path: ["channels", "slack"],
|
|
71
91
|
message: "channels.slack.capabilities.interactiveReplies is retired; use typed presentation actions instead. Run \"openclaw doctor --fix\".",
|
|
@@ -144,9 +164,16 @@ function normalizeSlackEntry(params) {
|
|
|
144
164
|
}
|
|
145
165
|
function normalizeCompatibilityConfig({ cfg }) {
|
|
146
166
|
const changes = [];
|
|
167
|
+
const retired = stripRetiredChannelKeys({
|
|
168
|
+
cfg,
|
|
169
|
+
channelId: "slack",
|
|
170
|
+
keys: /* @__PURE__ */ new Set(["enterpriseOrgInstall"]),
|
|
171
|
+
scope: "root-and-accounts",
|
|
172
|
+
onRemove: ({ key, pathPrefix }) => changes.push(`Removed retired ${pathPrefix}.${key}; Slack detects org-wide installations automatically.`)
|
|
173
|
+
});
|
|
147
174
|
return normalizeChannelConfigEntries({
|
|
148
175
|
cfg: streamingAliasMigration.normalizeChannelConfig({
|
|
149
|
-
cfg,
|
|
176
|
+
cfg: retired.config,
|
|
150
177
|
changes
|
|
151
178
|
}).config,
|
|
152
179
|
channelId: "slack",
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-
|
|
1
|
+
import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-BAy7-EUQ.js";
|
|
2
2
|
export { legacyConfigRules, normalizeCompatibilityConfig };
|