@openclaw/slack 2026.5.16-beta.2 → 2026.5.16-beta.4
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/{action-runtime-p39JLqwf.js → action-runtime-0RLkDKyA.js} +1 -1
- package/dist/action-runtime.runtime-DpzOXqtk.js +2 -0
- package/dist/{actions-BCRbHv1Q.js → actions-Chs6DbrP.js} +1 -1
- package/dist/{actions.runtime-CpywQR3D.js → actions.runtime-BsbIDsmT.js} +1 -1
- package/dist/api.js +5 -5
- package/dist/{approval-handler.runtime-DXrdRbkT.js → approval-handler.runtime-BmCbRrbT.js} +1 -1
- package/dist/{channel-CVSopl66.js → channel-DUS8ZO45.js} +16 -12
- package/dist/channel-plugin-api.js +1 -1
- package/dist/{channel.setup-DknBgufI.js → channel.setup-qGOC05UK.js} +2 -2
- package/dist/inbound-contract-test-api.js +2 -2
- package/dist/{monitor-CdVxsuHi.js → monitor-BhEzWuv0.js} +3 -3
- package/dist/{outbound-adapter-CHm6e-0Q.js → outbound-adapter-BoDXPksS.js} +1 -1
- package/dist/outbound-payload-test-api.js +1 -1
- package/dist/{outbound-payload.test-harness-C0CW7_CE.js → outbound-payload.test-harness-C7Izm95Q.js} +1 -1
- package/dist/{pipeline.runtime-CakcaQh9.js → pipeline.runtime-Bq754VH8.js} +41 -26
- package/dist/{prepare-DSRUr44d.js → prepare-BcznR9ok.js} +136 -24
- package/dist/{prepare.test-helpers-CU1qB54Q.js → prepare.test-helpers-D807wdul.js} +1 -1
- package/dist/{provider-bKg1hkf5.js → provider-BFnE2bgI.js} +118 -4
- package/dist/{replies-Fg1T3ZzU.js → replies-2ve_YcHy.js} +8 -5
- package/dist/{room-context-Cd8jFpS-.js → room-context-BI26wVBb.js} +83 -2
- package/dist/runtime-api.js +5 -5
- package/dist/{send-CxXFbqN1.js → send-C5PzphgC.js} +5 -0
- package/dist/send.runtime-Bgf0P22e.js +2 -0
- package/dist/send.runtime-DsEXD6MR.js +2 -0
- package/dist/{setup-core-B7pou7oe.js → setup-core-az0LCrNr.js} +21 -2
- package/dist/setup-plugin-api.js +1 -1
- package/dist/{setup-surface-D6LLzeRz.js → setup-surface-Cdq_mfjx.js} +2 -2
- package/dist/{shared-7Vi9j4aV.js → shared-BuNoOmas.js} +6 -2
- package/dist/{slash-dispatch.runtime-Cg7uU92H.js → slash-dispatch.runtime-CcbE1HtP.js} +1 -1
- package/dist/test-api.js +6 -6
- package/package.json +4 -4
- package/dist/action-runtime.runtime-BzrPV3EA.js +0 -2
- package/dist/send.runtime-BHCPpSj_.js +0 -2
- package/dist/send.runtime-CDG5AgU3.js +0 -2
|
@@ -121,6 +121,36 @@ function isSlackChannelAllowedByPolicy(params) {
|
|
|
121
121
|
}
|
|
122
122
|
//#endregion
|
|
123
123
|
//#region extensions/slack/src/monitor/context.ts
|
|
124
|
+
const SLACK_ASSISTANT_THREAD_CONTEXT_METADATA_EVENT = "assistant_thread_context";
|
|
125
|
+
function buildSlackAssistantThreadMetadata(context) {
|
|
126
|
+
const eventPayload = {};
|
|
127
|
+
if (context.channelId) eventPayload.channel_id = context.channelId;
|
|
128
|
+
if (context.teamId) eventPayload.team_id = context.teamId;
|
|
129
|
+
if (context.enterpriseId) eventPayload.enterprise_id = context.enterpriseId;
|
|
130
|
+
return {
|
|
131
|
+
event_type: SLACK_ASSISTANT_THREAD_CONTEXT_METADATA_EVENT,
|
|
132
|
+
event_payload: eventPayload
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
function parseSlackAssistantThreadMetadata(value) {
|
|
136
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return;
|
|
137
|
+
const metadata = value;
|
|
138
|
+
if (metadata.event_type !== "assistant_thread_context") return;
|
|
139
|
+
const payload = metadata.event_payload;
|
|
140
|
+
if (!payload || typeof payload !== "object" || Array.isArray(payload)) return;
|
|
141
|
+
const record = payload;
|
|
142
|
+
const stringField = (key) => {
|
|
143
|
+
const raw = record[key];
|
|
144
|
+
return typeof raw === "string" && raw.trim() ? raw.trim() : void 0;
|
|
145
|
+
};
|
|
146
|
+
return {
|
|
147
|
+
channelId: stringField("channel_id"),
|
|
148
|
+
teamId: stringField("team_id"),
|
|
149
|
+
enterpriseId: stringField("enterprise_id")
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
const SLACK_ASSISTANT_CONTEXT_TTL_MS = 1440 * 60 * 1e3;
|
|
153
|
+
const SLACK_ASSISTANT_CONTEXT_CLEANUP_INTERVAL_MS = 600 * 1e3;
|
|
124
154
|
function createSlackMonitorContext(params) {
|
|
125
155
|
const channelHistories = /* @__PURE__ */ new Map();
|
|
126
156
|
const logger = getChildLogger({ module: "slack-auto-reply" });
|
|
@@ -130,6 +160,8 @@ function createSlackMonitorContext(params) {
|
|
|
130
160
|
ttlMs: 6e4,
|
|
131
161
|
maxSize: 500
|
|
132
162
|
});
|
|
163
|
+
const assistantThreadContexts = /* @__PURE__ */ new Map();
|
|
164
|
+
let lastAssistantContextCleanupAt = Date.now();
|
|
133
165
|
const allowFrom = normalizeAllowList(params.allowFrom);
|
|
134
166
|
const groupDmChannels = normalizeAllowList(params.groupDmChannels);
|
|
135
167
|
const groupDmChannelsLower = normalizeAllowListLower(groupDmChannels);
|
|
@@ -144,6 +176,32 @@ function createSlackMonitorContext(params) {
|
|
|
144
176
|
if (!channelId || !ts) return;
|
|
145
177
|
seenMessages.delete(`${channelId}:${ts}`);
|
|
146
178
|
};
|
|
179
|
+
const assistantContextKey = (channelId, threadTs) => `${channelId}:${threadTs}`;
|
|
180
|
+
const cleanupAssistantThreadContexts = () => {
|
|
181
|
+
const now = Date.now();
|
|
182
|
+
if (now - lastAssistantContextCleanupAt < SLACK_ASSISTANT_CONTEXT_CLEANUP_INTERVAL_MS) return;
|
|
183
|
+
lastAssistantContextCleanupAt = now;
|
|
184
|
+
const cutoff = now - SLACK_ASSISTANT_CONTEXT_TTL_MS;
|
|
185
|
+
for (const [key, entry] of assistantThreadContexts) if (entry.updatedAt < cutoff) assistantThreadContexts.delete(key);
|
|
186
|
+
};
|
|
187
|
+
const getSlackAssistantThreadContext = (channelId, threadTs) => {
|
|
188
|
+
if (!channelId || !threadTs) return;
|
|
189
|
+
const key = assistantContextKey(channelId, threadTs);
|
|
190
|
+
const entry = assistantThreadContexts.get(key);
|
|
191
|
+
if (!entry) return;
|
|
192
|
+
if (Date.now() - entry.updatedAt > SLACK_ASSISTANT_CONTEXT_TTL_MS) {
|
|
193
|
+
assistantThreadContexts.delete(key);
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
return entry;
|
|
197
|
+
};
|
|
198
|
+
const saveSlackAssistantThreadContext = (context) => {
|
|
199
|
+
cleanupAssistantThreadContexts();
|
|
200
|
+
assistantThreadContexts.set(assistantContextKey(context.assistantChannelId, context.threadTs), {
|
|
201
|
+
...context,
|
|
202
|
+
updatedAt: Date.now()
|
|
203
|
+
});
|
|
204
|
+
};
|
|
147
205
|
const resolveSlackSystemEventSessionKey = (p) => {
|
|
148
206
|
const channelId = normalizeOptionalString(p.channelId) ?? "";
|
|
149
207
|
if (!channelId) return params.mainKey;
|
|
@@ -256,6 +314,26 @@ function createSlackMonitorContext(params) {
|
|
|
256
314
|
logVerbose(`slack status update failed for channel ${p.channelId}: ${formatSlackError(err)}`);
|
|
257
315
|
}
|
|
258
316
|
};
|
|
317
|
+
const setSlackAssistantSuggestedPrompts = async (p) => {
|
|
318
|
+
const prompts = p.prompts.map((prompt) => ({
|
|
319
|
+
title: prompt.title.trim(),
|
|
320
|
+
message: prompt.message.trim()
|
|
321
|
+
})).filter((prompt) => prompt.title && prompt.message).slice(0, 4);
|
|
322
|
+
if (prompts.length === 0) return false;
|
|
323
|
+
try {
|
|
324
|
+
await params.app.client.assistant.threads.setSuggestedPrompts({
|
|
325
|
+
token: params.botToken,
|
|
326
|
+
channel_id: p.channelId,
|
|
327
|
+
thread_ts: p.threadTs,
|
|
328
|
+
...p.title?.trim() ? { title: p.title.trim() } : {},
|
|
329
|
+
prompts
|
|
330
|
+
});
|
|
331
|
+
return true;
|
|
332
|
+
} catch (err) {
|
|
333
|
+
logVerbose(`slack suggested prompts update failed for channel ${p.channelId}: ${formatSlackError(err)}`);
|
|
334
|
+
return false;
|
|
335
|
+
}
|
|
336
|
+
};
|
|
259
337
|
const isChannelAllowed = (p) => {
|
|
260
338
|
const channelType = normalizeSlackChannelType(p.channelType, p.channelId);
|
|
261
339
|
const isDirectMessage = channelType === "im";
|
|
@@ -362,7 +440,10 @@ function createSlackMonitorContext(params) {
|
|
|
362
440
|
isChannelAllowed,
|
|
363
441
|
resolveChannelName,
|
|
364
442
|
resolveUserName,
|
|
365
|
-
setSlackThreadStatus
|
|
443
|
+
setSlackThreadStatus,
|
|
444
|
+
getSlackAssistantThreadContext,
|
|
445
|
+
saveSlackAssistantThreadContext,
|
|
446
|
+
setSlackAssistantSuggestedPrompts
|
|
366
447
|
};
|
|
367
448
|
}
|
|
368
449
|
//#endregion
|
|
@@ -786,4 +867,4 @@ function resolveSlackRoomContextHints(params) {
|
|
|
786
867
|
};
|
|
787
868
|
}
|
|
788
869
|
//#endregion
|
|
789
|
-
export {
|
|
870
|
+
export { resolveSlackSlashCommandConfig as A, resolveChannelContextVisibilityMode as C, updateLastRoute as D, resolveStorePath$1 as E, warnMissingProviderGroupPolicyFallbackOnce as O, readSessionUpdatedAt as S, resolveOpenProviderRuntimeGroupPolicy as T, resolveSlackChatType as _, recordInboundSession as a, getRuntimeConfig$1 as b, authorizeSlackBotRoomMessage as c, resolveSlackEffectiveAllowFrom as d, buildSlackAssistantThreadMetadata as f, normalizeSlackChannelType as g, isSlackChannelAllowedByPolicy as h, parsePluginBindingApprovalCustomId as i, stripSlackMentionsForCommandDetection as j, buildSlackSlashCommandMatcher as k, authorizeSlackSystemEventSender as l, parseSlackAssistantThreadMetadata as m, authorizeSlackDirectMessage as n, resolveConversationLabel$1 as o, createSlackMonitorContext as p, buildPluginBindingResolvedText as r, resolvePluginConversationBindingApproval as s, resolveSlackRoomContextHints as t, resolveSlackCommandIngress as u, resolveSlackChannelConfig as v, resolveDefaultGroupPolicy as w, isDangerousNameMatchingEnabled as x, resolveSlackChannelLabel as y };
|
package/dist/runtime-api.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { a as resolveSlackAccount, d as resolveSlackBotToken, i as resolveDefaultSlackAccountId, n as listSlackAccountIds, t as listEnabledSlackAccounts, u as resolveSlackAppToken } from "./accounts-yk5K3wQU.js";
|
|
2
2
|
import { n as resolveSlackGroupRequireMention, r as resolveSlackGroupToolPolicy } from "./reply-blocks-BFaJ_ejG.js";
|
|
3
3
|
import { n as setSlackRuntime } from "./runtime-DQxkf7k2.js";
|
|
4
|
-
import { t as sendMessageSlack } from "./send-
|
|
5
|
-
import { a as listSlackEmojis, c as pinSlackMessage, d as removeOwnSlackReactions, f as removeSlackReaction, i as getSlackMemberInfo, l as reactSlackMessage, m as unpinSlackMessage, o as listSlackPins, p as sendSlackMessage, r as editSlackMessage, s as listSlackReactions, t as deleteSlackMessage, u as readSlackMessages } from "./actions-
|
|
4
|
+
import { t as sendMessageSlack } from "./send-C5PzphgC.js";
|
|
5
|
+
import { a as listSlackEmojis, c as pinSlackMessage, d as removeOwnSlackReactions, f as removeSlackReaction, i as getSlackMemberInfo, l as reactSlackMessage, m as unpinSlackMessage, o as listSlackPins, p as sendSlackMessage, r as editSlackMessage, s as listSlackReactions, t as deleteSlackMessage, u as readSlackMessages } from "./actions-Chs6DbrP.js";
|
|
6
6
|
import { t as probeSlack } from "./probe-FL4sUJsH.js";
|
|
7
7
|
import { t as resolveSlackChannelAllowlist } from "./resolve-channels-B_eKaOkE.js";
|
|
8
8
|
import { t as resolveSlackUserAllowlist } from "./resolve-users-BzBAJwvq.js";
|
|
9
|
-
import { t as monitorSlackProvider } from "./provider-
|
|
9
|
+
import { t as monitorSlackProvider } from "./provider-BFnE2bgI.js";
|
|
10
10
|
import { t as registerSlackPluginHttpRoutes } from "./plugin-routes-CRnfsTTX.js";
|
|
11
|
-
import { n as slackActionRuntime, t as handleSlackAction } from "./action-runtime-
|
|
11
|
+
import { n as slackActionRuntime, t as handleSlackAction } from "./action-runtime-0RLkDKyA.js";
|
|
12
12
|
import { n as listSlackDirectoryGroupsLive, r as listSlackDirectoryPeersLive } from "./directory-live-CZPzpQZF.js";
|
|
13
|
-
import "./monitor-
|
|
13
|
+
import "./monitor-BhEzWuv0.js";
|
|
14
14
|
export { deleteSlackMessage, editSlackMessage, getSlackMemberInfo, handleSlackAction, listEnabledSlackAccounts, listSlackAccountIds, listSlackDirectoryGroupsLive, listSlackDirectoryPeersLive, listSlackEmojis, listSlackPins, listSlackReactions, monitorSlackProvider, pinSlackMessage, probeSlack, reactSlackMessage, readSlackMessages, registerSlackPluginHttpRoutes, removeOwnSlackReactions, removeSlackReaction, resolveDefaultSlackAccountId, resolveSlackAccount, resolveSlackAppToken, resolveSlackBotToken, resolveSlackChannelAllowlist, resolveSlackGroupRequireMention, resolveSlackGroupToolPolicy, resolveSlackUserAllowlist, sendMessageSlack, sendSlackMessage, setSlackRuntime, slackActionRuntime, unpinSlackMessage };
|
|
@@ -312,12 +312,14 @@ function buildSlackPostMessagePayload(params) {
|
|
|
312
312
|
channel: params.channelId,
|
|
313
313
|
text: params.text,
|
|
314
314
|
blocks: params.blocks,
|
|
315
|
+
...params.metadata ? { metadata: params.metadata } : {},
|
|
315
316
|
...threadPayload,
|
|
316
317
|
...unfurlPayload
|
|
317
318
|
};
|
|
318
319
|
return {
|
|
319
320
|
channel: params.channelId,
|
|
320
321
|
text: params.text,
|
|
322
|
+
...params.metadata ? { metadata: params.metadata } : {},
|
|
321
323
|
...threadPayload,
|
|
322
324
|
...unfurlPayload
|
|
323
325
|
};
|
|
@@ -637,6 +639,7 @@ async function sendMessageSlackQueuedInner(params) {
|
|
|
637
639
|
replyBroadcast: opts.replyBroadcast,
|
|
638
640
|
identity: opts.identity,
|
|
639
641
|
blocks,
|
|
642
|
+
metadata: opts.metadata,
|
|
640
643
|
unfurl
|
|
641
644
|
})).ts ?? "unknown";
|
|
642
645
|
return {
|
|
@@ -686,6 +689,7 @@ async function sendMessageSlackQueuedInner(params) {
|
|
|
686
689
|
threadTs: opts.threadTs,
|
|
687
690
|
replyBroadcast: sentMessageIds.length === 0 ? opts.replyBroadcast : void 0,
|
|
688
691
|
identity: opts.identity,
|
|
692
|
+
metadata: sentMessageIds.length === 0 ? opts.metadata : void 0,
|
|
689
693
|
unfurl
|
|
690
694
|
});
|
|
691
695
|
lastMessageId = response.ts ?? lastMessageId;
|
|
@@ -699,6 +703,7 @@ async function sendMessageSlackQueuedInner(params) {
|
|
|
699
703
|
threadTs: opts.threadTs,
|
|
700
704
|
replyBroadcast: sentMessageIds.length === 0 ? opts.replyBroadcast : void 0,
|
|
701
705
|
identity: opts.identity,
|
|
706
|
+
metadata: sentMessageIds.length === 0 ? opts.metadata : void 0,
|
|
702
707
|
unfurl
|
|
703
708
|
});
|
|
704
709
|
lastMessageId = response.ts ?? lastMessageId;
|
|
@@ -24,6 +24,23 @@ function buildSlackManifest(botName = "OpenClaw") {
|
|
|
24
24
|
messages_tab_enabled: true,
|
|
25
25
|
messages_tab_read_only_enabled: false
|
|
26
26
|
},
|
|
27
|
+
assistant_view: {
|
|
28
|
+
assistant_description: `${safeName} connects Slack assistant threads to OpenClaw agents.`,
|
|
29
|
+
suggested_prompts: [
|
|
30
|
+
{
|
|
31
|
+
title: "What can you do?",
|
|
32
|
+
message: "What can you help me with?"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
title: "Summarize this channel",
|
|
36
|
+
message: "Summarize the recent activity in this channel."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
title: "Draft a reply",
|
|
40
|
+
message: "Help me draft a reply."
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
},
|
|
27
44
|
slash_commands: [{
|
|
28
45
|
command: "/openclaw",
|
|
29
46
|
description: "Send a message to OpenClaw",
|
|
@@ -60,6 +77,8 @@ function buildSlackManifest(botName = "OpenClaw") {
|
|
|
60
77
|
event_subscriptions: { bot_events: [
|
|
61
78
|
"app_home_opened",
|
|
62
79
|
"app_mention",
|
|
80
|
+
"assistant_thread_context_changed",
|
|
81
|
+
"assistant_thread_started",
|
|
63
82
|
"channel_rename",
|
|
64
83
|
"member_joined_channel",
|
|
65
84
|
"member_left_channel",
|
|
@@ -81,8 +100,8 @@ function buildSlackSetupLines() {
|
|
|
81
100
|
"1) Slack API -> Create App -> From scratch or From manifest (with the JSON below)",
|
|
82
101
|
"2) Add Socket Mode + enable it to get the app-level token (xapp-...)",
|
|
83
102
|
"3) Install App to workspace to get the xoxb- bot token",
|
|
84
|
-
"4) Enable Event Subscriptions (socket) for message
|
|
85
|
-
"5) App Home -> enable the Home tab
|
|
103
|
+
"4) Enable Event Subscriptions (socket) for message, App Home, and assistant events",
|
|
104
|
+
"5) App Home -> enable the Home tab, Messages tab for DMs, and AI assistant view",
|
|
86
105
|
"Manifest JSON follows as plain text for copy/paste.",
|
|
87
106
|
"Tip: set SLACK_BOT_TOKEN + SLACK_APP_TOKEN in your env.",
|
|
88
107
|
`Docs: ${formatDocsLink("/slack", "slack")}`
|
package/dist/setup-plugin-api.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as slackSetupPlugin } from "./channel.setup-
|
|
1
|
+
import { t as slackSetupPlugin } from "./channel.setup-qGOC05UK.js";
|
|
2
2
|
export { slackSetupPlugin };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { a as resolveSlackAccount, i as resolveDefaultSlackAccountId, o as resolveSlackAccountAllowFrom } from "./accounts-yk5K3wQU.js";
|
|
2
|
-
import "./shared-
|
|
3
|
-
import { i as SLACK_CHANNEL, t as createSlackSetupWizardBase } from "./setup-core-
|
|
2
|
+
import "./shared-BuNoOmas.js";
|
|
3
|
+
import { i as SLACK_CHANNEL, t as createSlackSetupWizardBase } from "./setup-core-az0LCrNr.js";
|
|
4
4
|
import { t as resolveSlackChannelAllowlist } from "./resolve-channels-B_eKaOkE.js";
|
|
5
5
|
import { t as resolveSlackUserAllowlist } from "./resolve-users-BzBAJwvq.js";
|
|
6
6
|
import { adaptScopedAccountAccessor } from "openclaw/plugin-sdk/channel-config-helpers";
|
|
@@ -2,7 +2,7 @@ import { a as resolveSlackAccount, c as resolveSlackConfigAccessorAccount, i as
|
|
|
2
2
|
import { t as inspectSlackAccount } from "./account-inspect-BJyQLSkN.js";
|
|
3
3
|
import { n as isSlackInteractiveRepliesEnabled } from "./interactive-replies-BSg5hXhj.js";
|
|
4
4
|
import { f as getChatChannelMeta } from "./client-C_IaJbi5.js";
|
|
5
|
-
import { i as SLACK_CHANNEL } from "./setup-core-
|
|
5
|
+
import { i as SLACK_CHANNEL } from "./setup-core-az0LCrNr.js";
|
|
6
6
|
import { t as SlackChannelConfigSchema } from "./config-schema-CNRousxw.js";
|
|
7
7
|
import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-B8QIWMs1.js";
|
|
8
8
|
import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-0TL3L5Kb.js";
|
|
@@ -171,7 +171,11 @@ function createSlackPluginBase(params) {
|
|
|
171
171
|
"- Prefer Slack buttons/selects for 2-5 discrete choices or parameter picks instead of asking the user to type one.",
|
|
172
172
|
"- Slack interactive replies: use `[[slack_buttons: Label:value, Other:other]]` to add action buttons that route clicks back as Slack interaction system events.",
|
|
173
173
|
"- Slack selects: use `[[slack_select: Placeholder | Label:value, Other:other]]` to add a static select menu that routes the chosen value back as a Slack interaction system event."
|
|
174
|
-
] : ["- Slack interactive replies are disabled. If needed, ask to set `channels.slack.capabilities.interactiveReplies=true` (or the same under `channels.slack.accounts.<account>.capabilities`)."]).concat([
|
|
174
|
+
] : ["- Slack interactive replies are disabled. If needed, ask to set `channels.slack.capabilities.interactiveReplies=true` (or the same under `channels.slack.accounts.<account>.capabilities`)."]).concat([
|
|
175
|
+
"- Slack plain text sends: write standard Markdown; OpenClaw converts it to Slack mrkdwn, including `**bold**`, headings, lists, and `[label](url)` links.",
|
|
176
|
+
"- When mentioning Slack users, use the stable `<@USER_ID>` token from Slack context instead of plain `@name` text so Slack notifies and links the user.",
|
|
177
|
+
"- Slack Block Kit or presentation text fields are sent as Slack mrkdwn directly; use `*bold*`, `_italic_`, `~strike~`, `<url|label>` links, and avoid Markdown headings or pipe tables there."
|
|
178
|
+
])
|
|
175
179
|
},
|
|
176
180
|
streaming: { blockStreamingCoalesceDefaults: {
|
|
177
181
|
minChars: 1500,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as deliverSlackSlashReplies$1 } from "./replies-
|
|
1
|
+
import { r as deliverSlackSlashReplies$1 } from "./replies-2ve_YcHy.js";
|
|
2
2
|
import { resolveAgentRoute as resolveAgentRoute$1 } from "openclaw/plugin-sdk/routing";
|
|
3
3
|
import { resolveMarkdownTableMode as resolveMarkdownTableMode$1 } from "openclaw/plugin-sdk/markdown-table-runtime";
|
|
4
4
|
import { recordInboundSessionMetaSafe as recordInboundSessionMetaSafe$1, resolveConversationLabel as resolveConversationLabel$1 } from "openclaw/plugin-sdk/conversation-runtime";
|
package/dist/test-api.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { a as createSlackActions, t as slackPlugin } from "./channel-
|
|
1
|
+
import { a as createSlackActions, t as slackPlugin } from "./channel-DUS8ZO45.js";
|
|
2
2
|
import { n as setSlackRuntime } from "./runtime-DQxkf7k2.js";
|
|
3
|
-
import { t as sendMessageSlack } from "./send-
|
|
4
|
-
import { t as prepareSlackMessage } from "./prepare-
|
|
5
|
-
import { t as createInboundSlackTestContext } from "./prepare.test-helpers-
|
|
6
|
-
import { t as createSlackOutboundPayloadHarness } from "./outbound-payload.test-harness-
|
|
7
|
-
import { n as slackOutbound } from "./outbound-adapter-
|
|
3
|
+
import { t as sendMessageSlack } from "./send-C5PzphgC.js";
|
|
4
|
+
import { t as prepareSlackMessage } from "./prepare-BcznR9ok.js";
|
|
5
|
+
import { t as createInboundSlackTestContext } from "./prepare.test-helpers-D807wdul.js";
|
|
6
|
+
import { t as createSlackOutboundPayloadHarness } from "./outbound-payload.test-harness-C7Izm95Q.js";
|
|
7
|
+
import { n as slackOutbound } from "./outbound-adapter-BoDXPksS.js";
|
|
8
8
|
export { createInboundSlackTestContext, createSlackActions, createSlackOutboundPayloadHarness, prepareSlackMessage, sendMessageSlack, setSlackRuntime, slackOutbound, slackPlugin };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/slack",
|
|
3
|
-
"version": "2026.5.16-beta.
|
|
3
|
+
"version": "2026.5.16-beta.4",
|
|
4
4
|
"description": "OpenClaw Slack channel plugin",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"openclaw": "workspace:*"
|
|
21
21
|
},
|
|
22
22
|
"peerDependencies": {
|
|
23
|
-
"openclaw": ">=2026.5.16-beta.
|
|
23
|
+
"openclaw": ">=2026.5.16-beta.4"
|
|
24
24
|
},
|
|
25
25
|
"peerDependenciesMeta": {
|
|
26
26
|
"openclaw": {
|
|
@@ -65,10 +65,10 @@
|
|
|
65
65
|
"allowInvalidConfigRecovery": true
|
|
66
66
|
},
|
|
67
67
|
"compat": {
|
|
68
|
-
"pluginApi": ">=2026.5.16-beta.
|
|
68
|
+
"pluginApi": ">=2026.5.16-beta.4"
|
|
69
69
|
},
|
|
70
70
|
"build": {
|
|
71
|
-
"openclawVersion": "2026.5.16-beta.
|
|
71
|
+
"openclawVersion": "2026.5.16-beta.4",
|
|
72
72
|
"bundledDist": false
|
|
73
73
|
},
|
|
74
74
|
"release": {
|