@cuylabs/channel-slack 0.9.0 → 0.11.0
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/README.md +15 -2
- package/dist/adapter/index.d.ts +53 -0
- package/dist/adapter/index.js +13 -0
- package/dist/app-surface.d.ts +86 -0
- package/dist/app-surface.js +15 -0
- package/dist/app.d.ts +58 -0
- package/dist/app.js +86 -0
- package/dist/artifacts/index.d.ts +57 -3
- package/dist/artifacts/index.js +88 -0
- package/dist/assistant/index.d.ts +18 -53
- package/dist/assistant/index.js +15 -184
- package/dist/bolt-app-BM0tiL7c.d.ts +49 -0
- package/dist/{chunk-TWJGVDA2.js → chunk-37RN2YUI.js} +88 -1
- package/dist/chunk-IAQXQESO.js +1008 -0
- package/dist/chunk-LFQCINHI.js +187 -0
- package/dist/chunk-Q6YX7HHK.js +1062 -0
- package/dist/chunk-RHOIVQLD.js +127 -0
- package/dist/chunk-RTDLIYEE.js +446 -0
- package/dist/core.d.ts +5 -201
- package/dist/core.js +10 -12
- package/dist/feedback/index.d.ts +2 -2
- package/dist/feedback/index.js +5 -120
- package/dist/formatting-C-kwQseI.d.ts +25 -0
- package/dist/index.d.ts +8 -1
- package/dist/index.js +18 -12
- package/dist/interactive/index.d.ts +4 -91
- package/dist/options-B0xQCaez.d.ts +221 -0
- package/dist/options-DQacQDmD.d.ts +368 -0
- package/dist/runtime/index.d.ts +46 -0
- package/dist/runtime/index.js +10 -0
- package/dist/socket.d.ts +142 -0
- package/dist/socket.js +77 -0
- package/dist/transports/index.d.ts +2 -1
- package/dist/transports/socket/index.d.ts +4 -49
- package/dist/turn-BGAXddH_.d.ts +178 -0
- package/dist/types-Cywfj8Mj.d.ts +91 -0
- package/dist/types-wLZzyI9r.d.ts +375 -0
- package/docs/reference/exports.md +5 -1
- package/package.json +28 -3
- package/dist/chunk-ISOMBQXE.js +0 -89
package/dist/core.d.ts
CHANGED
|
@@ -1,184 +1,12 @@
|
|
|
1
|
-
import { S as SlackActivityInfo,
|
|
1
|
+
import { S as SlackActivityInfo, a as SlackChannelType, b as SlackUserIdentity } from './activity-ByrD9Ftr.js';
|
|
2
|
+
import { f as SlackAuthContext, k as SlackTurnRequestContext, e as SlackAssistantUtilities } from './turn-BGAXddH_.js';
|
|
3
|
+
export { S as SlackAssistantStatusUpdate, a as SlackAssistantSuggestedPrompt, b as SlackAssistantSuggestedPrompts, c as SlackAssistantTaskDisplayMode, d as SlackAssistantThreadContext, g as SlackChatStreamStartArgs, h as SlackMessageAuthorshipOptions, i as SlackThreadStatusSetter, j as SlackTurnPreparation } from './turn-BGAXddH_.js';
|
|
2
4
|
export { S as SlackApprovalRequest, a as SlackEventInteractiveRequestHandler, b as SlackHumanInputRequest, c as SlackInteractiveMessage, d as SlackInteractiveMessageRef, e as SlackInteractiveRequest, f as SlackInteractiveRequestBaseContext, g as SlackInteractiveRequestContext, h as SlackInteractiveRequestHandler, i as SlackInteractiveRequestKind, j as SlackInteractiveResponder } from './interactive-CbKYkkc_.js';
|
|
5
|
+
export { S as SlackMessageFormatter, a as SlackMessageFormattingOptions, m as markdownToSlackMrkdwn, r as resolveSlackMessageFormatter } from './formatting-C-kwQseI.js';
|
|
3
6
|
export { RegisterSlackTurnCancelActionOptions, SLACK_TURN_CANCEL_ACTION_ID, SlackTurnCancelActionContext, SlackTurnCancelActionHandler, SlackTurnCancelButtonValue, SlackTurnCancelMessage, SlackTurnCancelMessageOptions, createSlackTurnCancelMessage, decodeSlackTurnCancelButtonValue, encodeSlackTurnCancelButtonValue, registerSlackTurnCancelAction, resolveSlackTurnCancelActionId } from './turn-controls/index.js';
|
|
4
7
|
import '@slack/types';
|
|
5
8
|
import '@slack/bolt';
|
|
6
9
|
|
|
7
|
-
/**
|
|
8
|
-
* Slack auth context — credentials and identifiers resolved from the inbound
|
|
9
|
-
* request. **Sensitive**: see security note on `SlackAuthContext`.
|
|
10
|
-
*/
|
|
11
|
-
/**
|
|
12
|
-
* Slack credentials and identifiers resolved from the inbound request.
|
|
13
|
-
*
|
|
14
|
-
* Surfaced to `prepareTurn`, the ambient `currentSlackTurnContext()`, and the
|
|
15
|
-
* assistant message context so tools and middleware can call the Slack Web
|
|
16
|
-
* API or attach per-user OAuth tokens to MCP servers (see
|
|
17
|
-
* `createSlackMcpServerConfig`).
|
|
18
|
-
*
|
|
19
|
-
* Security: `botToken` and `userToken` are secrets. Do not include this auth
|
|
20
|
-
* bag in logs, telemetry attributes, baggage, tool results, message history,
|
|
21
|
-
* or model-visible prompts. Pass only the exact token needed to a trusted
|
|
22
|
-
* Slack API/MCP client.
|
|
23
|
-
*
|
|
24
|
-
* Most fields come from Bolt's enriched `args.context`. They are all optional
|
|
25
|
-
* because availability depends on the auth mode (single-workspace vs OAuth)
|
|
26
|
-
* and on whether the installer granted user scopes.
|
|
27
|
-
*/
|
|
28
|
-
interface SlackAuthContext {
|
|
29
|
-
/** Workspace bot token (`xoxb-...`). */
|
|
30
|
-
botToken?: string;
|
|
31
|
-
/** End-user OAuth token (`xoxp-...`) when user scopes were granted. */
|
|
32
|
-
userToken?: string;
|
|
33
|
-
/** Workspace ID (`T...`). */
|
|
34
|
-
teamId?: string;
|
|
35
|
-
/** Enterprise grid ID (`E...`) when applicable. */
|
|
36
|
-
enterpriseId?: string;
|
|
37
|
-
/** Bot user ID (`U...`) — useful for distinguishing bot self-mentions. */
|
|
38
|
-
botUserId?: string;
|
|
39
|
-
/** Internal Slack bot ID (`B...`). */
|
|
40
|
-
botId?: string;
|
|
41
|
-
/** Slack user ID (`U...`) of the human author of the inbound event. */
|
|
42
|
-
userId?: string;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Slack assistant lifecycle types — status updates, suggested prompts, thread
|
|
47
|
-
* context, and the channel-neutral `SlackAssistantUtilities` interface that
|
|
48
|
-
* the assistant bridge surfaces ambiently for tools and middleware.
|
|
49
|
-
*/
|
|
50
|
-
/**
|
|
51
|
-
* Slack assistant thread context — the channel of origin metadata Slack tracks
|
|
52
|
-
* while a user navigates the workspace. Surfaces the same fields Bolt's
|
|
53
|
-
* `AssistantThreadContextStore` returns.
|
|
54
|
-
*
|
|
55
|
-
* @see https://docs.slack.dev/reference/events/assistant_thread_context_changed
|
|
56
|
-
*/
|
|
57
|
-
interface SlackAssistantThreadContext {
|
|
58
|
-
channel_id?: string;
|
|
59
|
-
team_id?: string;
|
|
60
|
-
enterprise_id?: string | null;
|
|
61
|
-
}
|
|
62
|
-
/** Display mode passed to `client.chatStream`. */
|
|
63
|
-
type SlackAssistantTaskDisplayMode = "plan" | "timeline";
|
|
64
|
-
/**
|
|
65
|
-
* Slack message authorship fields supported by AI assistant status updates
|
|
66
|
-
* and native chat stream start calls.
|
|
67
|
-
*/
|
|
68
|
-
interface SlackMessageAuthorshipOptions {
|
|
69
|
-
/** Emoji shown as the message/status icon, e.g. `":robot_face:"`. */
|
|
70
|
-
icon_emoji?: string;
|
|
71
|
-
/** Image URL shown as the message/status icon. */
|
|
72
|
-
icon_url?: string;
|
|
73
|
-
/** Display name shown for the message/status. */
|
|
74
|
-
username?: string;
|
|
75
|
-
}
|
|
76
|
-
/** Optional passthrough fields for Slack's native `chat.startStream`. */
|
|
77
|
-
type SlackChatStreamStartArgs = SlackMessageAuthorshipOptions & {
|
|
78
|
-
/**
|
|
79
|
-
* Slack task display mode for streamed tool/task chunks. `timeline` shows
|
|
80
|
-
* individual task cards; `plan` groups task cards together.
|
|
81
|
-
*/
|
|
82
|
-
task_display_mode?: SlackAssistantTaskDisplayMode;
|
|
83
|
-
};
|
|
84
|
-
/** A single suggested prompt chip shown in the assistant pane. */
|
|
85
|
-
interface SlackAssistantSuggestedPrompt {
|
|
86
|
-
title: string;
|
|
87
|
-
message: string;
|
|
88
|
-
}
|
|
89
|
-
/** Suggested prompts payload for `assistant.threads.setSuggestedPrompts`. */
|
|
90
|
-
interface SlackAssistantSuggestedPrompts {
|
|
91
|
-
/** Title shown above the chips. Defaults to Slack's "Try these prompts:". */
|
|
92
|
-
title?: string;
|
|
93
|
-
prompts: SlackAssistantSuggestedPrompt[];
|
|
94
|
-
}
|
|
95
|
-
/** Status payload accepted by Bolt's assistant `setStatus`. */
|
|
96
|
-
interface SlackAssistantStatusUpdate extends SlackMessageAuthorshipOptions {
|
|
97
|
-
status: string;
|
|
98
|
-
loading_messages?: string[];
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Assistant pane utilities surfaced ambiently so tools/middleware can call
|
|
102
|
-
* them mid-turn without wiring the raw Bolt args through.
|
|
103
|
-
*
|
|
104
|
-
* Only present when the turn is running through the assistant bridge.
|
|
105
|
-
*/
|
|
106
|
-
interface SlackAssistantUtilities {
|
|
107
|
-
setStatus: (update: SlackAssistantStatusUpdate) => Promise<void>;
|
|
108
|
-
setSuggestedPrompts: (prompts: SlackAssistantSuggestedPrompts) => Promise<void>;
|
|
109
|
-
setTitle: (title: string) => Promise<void>;
|
|
110
|
-
getThreadContext: () => Promise<SlackAssistantThreadContext>;
|
|
111
|
-
saveThreadContext: () => Promise<void>;
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Status utility exposed by Bolt for any message/app_mention event with a
|
|
115
|
-
* channel + thread timestamp. It calls Slack's assistant thread status API,
|
|
116
|
-
* but unlike the full Assistant surface it does not imply suggested prompts,
|
|
117
|
-
* thread titles, or origin-channel context.
|
|
118
|
-
*/
|
|
119
|
-
type SlackThreadStatusSetter = (update: SlackAssistantStatusUpdate) => Promise<void>;
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Slack turn-request and turn-preparation contracts shared by Slack transport
|
|
123
|
-
* packages. Direct Slack fills these from Bolt events; M365-backed Slack fills
|
|
124
|
-
* the same shape from Bot Framework activities.
|
|
125
|
-
*/
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Context available while preparing a Slack turn.
|
|
129
|
-
*/
|
|
130
|
-
interface SlackTurnRequestContext {
|
|
131
|
-
/** Parsed Slack activity metadata */
|
|
132
|
-
slackActivity: SlackActivityInfo;
|
|
133
|
-
/** Extracted Slack user identity */
|
|
134
|
-
user: SlackUserIdentity;
|
|
135
|
-
/** Resolved agent session ID for this conversation */
|
|
136
|
-
sessionId: string;
|
|
137
|
-
/** Plain-text message forwarded to the host application */
|
|
138
|
-
message: string;
|
|
139
|
-
/**
|
|
140
|
-
* Slack auth + identity resolved from the inbound request.
|
|
141
|
-
*
|
|
142
|
-
* Includes the bot token, optional end-user OAuth token, team/enterprise
|
|
143
|
-
* IDs, and bot user ID. Tools and `prepareTurn` callers can use these to
|
|
144
|
-
* call the Slack Web API or attach the user token to MCP servers.
|
|
145
|
-
*/
|
|
146
|
-
auth?: SlackAuthContext;
|
|
147
|
-
/**
|
|
148
|
-
* Assistant thread context resolved by Bolt for assistant-pane turns.
|
|
149
|
-
*
|
|
150
|
-
* Tells the agent which channel/workspace the user is currently viewing
|
|
151
|
-
* while talking to the assistant — useful for context-aware system prompts
|
|
152
|
-
* and for resolving relative references like "this channel".
|
|
153
|
-
*
|
|
154
|
-
* `undefined` when the turn was not routed through the assistant bridge.
|
|
155
|
-
*/
|
|
156
|
-
threadContext?: SlackAssistantThreadContext;
|
|
157
|
-
/**
|
|
158
|
-
* Slack thread status setter available when Bolt provides `setStatus` for
|
|
159
|
-
* the inbound event. This can be present on classic `app_mention` /
|
|
160
|
-
* `message` turns as well as full Assistant-pane turns.
|
|
161
|
-
*/
|
|
162
|
-
setStatus?: SlackThreadStatusSetter;
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* Optional turn preparation result for a Slack turn.
|
|
166
|
-
*/
|
|
167
|
-
interface SlackTurnPreparation {
|
|
168
|
-
/** Optional system override for the host application */
|
|
169
|
-
system?: string;
|
|
170
|
-
/** Optional message override for the host application. */
|
|
171
|
-
message?: string;
|
|
172
|
-
/** Optional session override for this turn. */
|
|
173
|
-
sessionId?: string;
|
|
174
|
-
/** Optional custom scope name for the activity */
|
|
175
|
-
scopeName?: string;
|
|
176
|
-
/** Additional scalar attributes merged into the activity scope */
|
|
177
|
-
scopeAttributes?: Record<string, string | number | boolean | null | undefined>;
|
|
178
|
-
/** Arbitrary app-specific per-turn context exposed via AsyncLocalStorage */
|
|
179
|
-
context?: Record<string, unknown>;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
10
|
/**
|
|
183
11
|
* Raw Slack event payload parsers — produce `SlackActivityInfo` from the
|
|
184
12
|
* shapes Bolt delivers for `message` and `app_mention` events.
|
|
@@ -305,30 +133,6 @@ declare function extractSlackUserIdentity(info: SlackActivityInfo): SlackUserIde
|
|
|
305
133
|
*/
|
|
306
134
|
declare function extractSlackAuthContext(context: unknown, eventUserId?: string): SlackAuthContext;
|
|
307
135
|
|
|
308
|
-
/**
|
|
309
|
-
* Slack text formatting helpers.
|
|
310
|
-
*
|
|
311
|
-
* Agent models generally emit CommonMark-style markdown. Slack accepts its
|
|
312
|
-
* own mrkdwn dialect, so direct Slack and Slack-via-ABS transports should
|
|
313
|
-
* normalize common constructs before posting.
|
|
314
|
-
*/
|
|
315
|
-
type SlackMessageFormatter = (text: string) => string;
|
|
316
|
-
interface SlackMessageFormattingOptions {
|
|
317
|
-
/**
|
|
318
|
-
* Convert common markdown constructs to Slack mrkdwn.
|
|
319
|
-
*
|
|
320
|
-
* @default true
|
|
321
|
-
*/
|
|
322
|
-
formatChatMarkdown?: boolean;
|
|
323
|
-
/**
|
|
324
|
-
* Custom text formatter. When provided, this takes precedence over the
|
|
325
|
-
* built-in markdown-to-mrkdwn conversion.
|
|
326
|
-
*/
|
|
327
|
-
formatMessageText?: SlackMessageFormatter;
|
|
328
|
-
}
|
|
329
|
-
declare function resolveSlackMessageFormatter(options: SlackMessageFormattingOptions): SlackMessageFormatter;
|
|
330
|
-
declare function markdownToSlackMrkdwn(markdown: string): string;
|
|
331
|
-
|
|
332
136
|
declare function formatSlackAttributedFollowUp(message: string): string;
|
|
333
137
|
|
|
334
138
|
/**
|
|
@@ -387,4 +191,4 @@ interface SlackAmbientTurnContext extends SlackTurnRequestContext {
|
|
|
387
191
|
declare function currentSlackTurnContext(): Readonly<SlackAmbientTurnContext> | undefined;
|
|
388
192
|
declare function runWithSlackTurnContext<T>(value: SlackAmbientTurnContext, fn: () => T | Promise<T>): Promise<T>;
|
|
389
193
|
|
|
390
|
-
export { type ExtractSlackMessageTextOptions, type RawSlackActionTokenPayload, type RawSlackAppMentionPayload, type RawSlackAssistantThreadPayload, type RawSlackMessagePayload, SlackActivityInfo, type SlackAmbientTurnContext,
|
|
194
|
+
export { type ExtractSlackMessageTextOptions, type RawSlackActionTokenPayload, type RawSlackAppMentionPayload, type RawSlackAssistantThreadPayload, type RawSlackMessagePayload, SlackActivityInfo, type SlackAmbientTurnContext, SlackAssistantUtilities, SlackAuthContext, SlackChannelType, type SlackMessageTextPayload, SlackTurnRequestContext, SlackUserIdentity, currentSlackTurnContext, extractSlackActionToken, extractSlackAttachmentsText, extractSlackAuthContext, extractSlackBlocksText, extractSlackMessageText, extractSlackUserIdentity, formatSlackAttributedFollowUp, isProcessableMessage, parseSlackMentionActivity, parseSlackMessageActivity, resolveSlackChannelType, resolveThreadAwareSlackSessionId, runWithSlackTurnContext, stripLeadingMentions };
|
package/dist/core.js
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
currentSlackTurnContext,
|
|
3
|
+
extractSlackActionToken,
|
|
4
|
+
extractSlackAuthContext,
|
|
5
|
+
extractSlackUserIdentity,
|
|
3
6
|
formatSlackAttributedFollowUp,
|
|
7
|
+
parseSlackMentionActivity,
|
|
8
|
+
parseSlackMessageActivity,
|
|
4
9
|
resolveThreadAwareSlackSessionId,
|
|
5
10
|
runWithSlackTurnContext
|
|
6
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-37RN2YUI.js";
|
|
7
12
|
import {
|
|
8
13
|
SLACK_TURN_CANCEL_ACTION_ID,
|
|
9
14
|
createSlackTurnCancelMessage,
|
|
@@ -12,17 +17,6 @@ import {
|
|
|
12
17
|
registerSlackTurnCancelAction,
|
|
13
18
|
resolveSlackTurnCancelActionId
|
|
14
19
|
} from "./chunk-3KP3CBCC.js";
|
|
15
|
-
import {
|
|
16
|
-
markdownToSlackMrkdwn,
|
|
17
|
-
resolveSlackMessageFormatter
|
|
18
|
-
} from "./chunk-6WHFQUYQ.js";
|
|
19
|
-
import {
|
|
20
|
-
extractSlackActionToken,
|
|
21
|
-
extractSlackAuthContext,
|
|
22
|
-
extractSlackUserIdentity,
|
|
23
|
-
parseSlackMentionActivity,
|
|
24
|
-
parseSlackMessageActivity
|
|
25
|
-
} from "./chunk-TWJGVDA2.js";
|
|
26
20
|
import {
|
|
27
21
|
extractSlackAttachmentsText,
|
|
28
22
|
extractSlackBlocksText,
|
|
@@ -31,6 +25,10 @@ import {
|
|
|
31
25
|
resolveSlackChannelType,
|
|
32
26
|
stripLeadingMentions
|
|
33
27
|
} from "./chunk-FPCE5V5Y.js";
|
|
28
|
+
import {
|
|
29
|
+
markdownToSlackMrkdwn,
|
|
30
|
+
resolveSlackMessageFormatter
|
|
31
|
+
} from "./chunk-6WHFQUYQ.js";
|
|
34
32
|
export {
|
|
35
33
|
SLACK_TURN_CANCEL_ACTION_ID,
|
|
36
34
|
createSlackTurnCancelMessage,
|
package/dist/feedback/index.d.ts
CHANGED
|
@@ -89,7 +89,7 @@ interface SlackFeedbackContext {
|
|
|
89
89
|
threadTs?: string;
|
|
90
90
|
/** Slack interactivity trigger id for opening a modal from the click. */
|
|
91
91
|
triggerId?: string;
|
|
92
|
-
/** Optional
|
|
92
|
+
/** Optional runtime session id resolved by the host bridge. */
|
|
93
93
|
sessionId?: string;
|
|
94
94
|
/** Convenience helper that opens a Slack modal from the feedback click. */
|
|
95
95
|
openModal: (view: View) => Promise<void>;
|
|
@@ -117,7 +117,7 @@ interface RegisterSlackFeedbackOptions extends SlackFeedbackBlockOptions {
|
|
|
117
117
|
*/
|
|
118
118
|
negativeAck?: string | false;
|
|
119
119
|
/**
|
|
120
|
-
* Optional resolver used by higher-level bridges to attach the
|
|
120
|
+
* Optional resolver used by higher-level bridges to attach the runtime session
|
|
121
121
|
* id that produced the message.
|
|
122
122
|
*/
|
|
123
123
|
resolveSessionId?: (context: Omit<SlackFeedbackContext, "acknowledgeEphemeral" | "openModal" | "sessionId">) => string | undefined;
|
package/dist/feedback/index.js
CHANGED
|
@@ -1,124 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
function createSlackFeedbackBlock(options = {}) {
|
|
8
|
-
const actionId = (options.actionId ?? SLACK_FEEDBACK_ACTION_ID).trim();
|
|
9
|
-
if (!actionId) {
|
|
10
|
-
throw new Error(
|
|
11
|
-
"createSlackFeedbackBlock: actionId must be a non-empty string"
|
|
12
|
-
);
|
|
13
|
-
}
|
|
14
|
-
const positiveValue = options.positiveValue ?? "good-feedback";
|
|
15
|
-
const negativeValue = options.negativeValue ?? "bad-feedback";
|
|
16
|
-
const positiveLabel = options.positiveButton?.text ?? "Good Response";
|
|
17
|
-
const negativeLabel = options.negativeButton?.text ?? "Bad Response";
|
|
18
|
-
const positiveA11y = options.positiveButton?.accessibilityLabel ?? "Submit positive feedback on this response";
|
|
19
|
-
const negativeA11y = options.negativeButton?.accessibilityLabel ?? "Submit negative feedback on this response";
|
|
20
|
-
return {
|
|
21
|
-
type: "context_actions",
|
|
22
|
-
elements: [
|
|
23
|
-
{
|
|
24
|
-
type: "feedback_buttons",
|
|
25
|
-
action_id: actionId,
|
|
26
|
-
positive_button: {
|
|
27
|
-
text: { type: "plain_text", text: positiveLabel },
|
|
28
|
-
accessibility_label: positiveA11y,
|
|
29
|
-
value: positiveValue
|
|
30
|
-
},
|
|
31
|
-
negative_button: {
|
|
32
|
-
text: { type: "plain_text", text: negativeLabel },
|
|
33
|
-
accessibility_label: negativeA11y,
|
|
34
|
-
value: negativeValue
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
]
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// src/feedback/action.ts
|
|
42
|
-
function registerSlackFeedbackAction(app, options) {
|
|
43
|
-
const actionId = (options.actionId ?? SLACK_FEEDBACK_ACTION_ID).trim();
|
|
44
|
-
const positiveValue = options.positiveValue ?? "good-feedback";
|
|
45
|
-
const negativeValue = options.negativeValue ?? "bad-feedback";
|
|
46
|
-
const positiveAck = options.positiveAck === void 0 ? "Thanks for the feedback!" : options.positiveAck;
|
|
47
|
-
const negativeAck = options.negativeAck === void 0 ? "Thanks \u2014 we'll use this to improve the assistant." : options.negativeAck;
|
|
48
|
-
app.action(
|
|
49
|
-
actionId,
|
|
50
|
-
// Bolt's action args don't have a single shared exported type; the
|
|
51
|
-
// structural shape we read here (ack/body/client/logger) is stable.
|
|
52
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
53
|
-
async ({ ack, body, client, logger }) => {
|
|
54
|
-
const ackFn = ack;
|
|
55
|
-
await ackFn();
|
|
56
|
-
try {
|
|
57
|
-
if (body?.type !== "block_actions" || !Array.isArray(body.actions) || body.actions.length === 0) {
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
const action = body.actions[0];
|
|
61
|
-
if (action?.type !== "feedback_buttons") {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
const value = String(action.value ?? "");
|
|
65
|
-
const verdict = value === positiveValue ? "positive" : value === negativeValue ? "negative" : void 0;
|
|
66
|
-
if (!verdict) {
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
const channelId = body.channel?.id ?? body.container?.channel_id;
|
|
70
|
-
const userId = body.user?.id;
|
|
71
|
-
const messageTs = body.message?.ts ?? body.container?.message_ts;
|
|
72
|
-
const threadTs = body.message?.thread_ts ?? body.container?.thread_ts;
|
|
73
|
-
const triggerId = typeof body.trigger_id === "string" ? body.trigger_id : void 0;
|
|
74
|
-
if (!channelId || !userId || !messageTs) {
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
const openModal = async (view) => {
|
|
78
|
-
if (!triggerId) {
|
|
79
|
-
throw new Error(
|
|
80
|
-
"Slack feedback payload did not include trigger_id."
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
await openSlackModal({ client, triggerId, view });
|
|
84
|
-
};
|
|
85
|
-
const acknowledgeEphemeral = async (text) => {
|
|
86
|
-
await client.chat.postEphemeral({
|
|
87
|
-
channel: channelId,
|
|
88
|
-
user: userId,
|
|
89
|
-
...threadTs ? { thread_ts: threadTs } : { thread_ts: messageTs },
|
|
90
|
-
text
|
|
91
|
-
});
|
|
92
|
-
};
|
|
93
|
-
const feedbackContext = {
|
|
94
|
-
verdict,
|
|
95
|
-
value,
|
|
96
|
-
channelId,
|
|
97
|
-
userId,
|
|
98
|
-
messageTs,
|
|
99
|
-
...threadTs ? { threadTs } : {},
|
|
100
|
-
...triggerId ? { triggerId } : {}
|
|
101
|
-
};
|
|
102
|
-
const sessionId = options.resolveSessionId?.(feedbackContext);
|
|
103
|
-
await options.onFeedback({
|
|
104
|
-
...feedbackContext,
|
|
105
|
-
...sessionId ? { sessionId } : {},
|
|
106
|
-
openModal,
|
|
107
|
-
acknowledgeEphemeral
|
|
108
|
-
});
|
|
109
|
-
const ackText = verdict === "positive" ? positiveAck : negativeAck;
|
|
110
|
-
if (ackText) {
|
|
111
|
-
await acknowledgeEphemeral(ackText);
|
|
112
|
-
}
|
|
113
|
-
} catch (error) {
|
|
114
|
-
logger?.error?.(
|
|
115
|
-
`[channel-slack] feedback handler failed: ${error instanceof Error ? error.message : String(error)}`
|
|
116
|
-
);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
);
|
|
120
|
-
return { actionId, positiveValue, negativeValue };
|
|
121
|
-
}
|
|
2
|
+
SLACK_FEEDBACK_ACTION_ID,
|
|
3
|
+
createSlackFeedbackBlock,
|
|
4
|
+
registerSlackFeedbackAction
|
|
5
|
+
} from "../chunk-RHOIVQLD.js";
|
|
6
|
+
import "../chunk-IRFKUPJN.js";
|
|
122
7
|
export {
|
|
123
8
|
SLACK_FEEDBACK_ACTION_ID,
|
|
124
9
|
createSlackFeedbackBlock,
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slack text formatting helpers.
|
|
3
|
+
*
|
|
4
|
+
* Agent models generally emit CommonMark-style markdown. Slack accepts its
|
|
5
|
+
* own mrkdwn dialect, so direct Slack and Slack-via-ABS transports should
|
|
6
|
+
* normalize common constructs before posting.
|
|
7
|
+
*/
|
|
8
|
+
type SlackMessageFormatter = (text: string) => string;
|
|
9
|
+
interface SlackMessageFormattingOptions {
|
|
10
|
+
/**
|
|
11
|
+
* Convert common markdown constructs to Slack mrkdwn.
|
|
12
|
+
*
|
|
13
|
+
* @default true
|
|
14
|
+
*/
|
|
15
|
+
formatChatMarkdown?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Custom text formatter. When provided, this takes precedence over the
|
|
18
|
+
* built-in markdown-to-mrkdwn conversion.
|
|
19
|
+
*/
|
|
20
|
+
formatMessageText?: SlackMessageFormatter;
|
|
21
|
+
}
|
|
22
|
+
declare function resolveSlackMessageFormatter(options: SlackMessageFormattingOptions): SlackMessageFormatter;
|
|
23
|
+
declare function markdownToSlackMrkdwn(markdown: string): string;
|
|
24
|
+
|
|
25
|
+
export { type SlackMessageFormatter as S, type SlackMessageFormattingOptions as a, markdownToSlackMrkdwn as m, resolveSlackMessageFormatter as r };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
export { S as SlackActivityInfo, a as SlackChannelType, b as SlackUserIdentity } from './activity-ByrD9Ftr.js';
|
|
2
|
-
export {
|
|
2
|
+
export { S as SlackAssistantStatusUpdate, a as SlackAssistantSuggestedPrompt, b as SlackAssistantSuggestedPrompts, c as SlackAssistantTaskDisplayMode, d as SlackAssistantThreadContext, e as SlackAssistantUtilities, f as SlackAuthContext, g as SlackChatStreamStartArgs, h as SlackMessageAuthorshipOptions, i as SlackThreadStatusSetter, j as SlackTurnPreparation, k as SlackTurnRequestContext } from './turn-BGAXddH_.js';
|
|
3
3
|
export { S as SlackApprovalRequest, a as SlackEventInteractiveRequestHandler, b as SlackHumanInputRequest, c as SlackInteractiveMessage, d as SlackInteractiveMessageRef, e as SlackInteractiveRequest, f as SlackInteractiveRequestBaseContext, g as SlackInteractiveRequestContext, h as SlackInteractiveRequestHandler, i as SlackInteractiveRequestKind, j as SlackInteractiveResponder } from './interactive-CbKYkkc_.js';
|
|
4
|
+
export { ExtractSlackMessageTextOptions, RawSlackActionTokenPayload, RawSlackAppMentionPayload, RawSlackAssistantThreadPayload, RawSlackMessagePayload, SlackAmbientTurnContext, SlackMessageTextPayload, currentSlackTurnContext, extractSlackActionToken, extractSlackAttachmentsText, extractSlackAuthContext, extractSlackBlocksText, extractSlackMessageText, extractSlackUserIdentity, formatSlackAttributedFollowUp, isProcessableMessage, parseSlackMentionActivity, parseSlackMessageActivity, resolveSlackChannelType, resolveThreadAwareSlackSessionId, runWithSlackTurnContext, stripLeadingMentions } from './core.js';
|
|
5
|
+
export { S as SlackMessageFormatter, a as SlackMessageFormattingOptions, m as markdownToSlackMrkdwn, r as resolveSlackMessageFormatter } from './formatting-C-kwQseI.js';
|
|
4
6
|
export { RegisterSlackTurnCancelActionOptions, SLACK_TURN_CANCEL_ACTION_ID, SlackTurnCancelActionContext, SlackTurnCancelActionHandler, SlackTurnCancelButtonValue, SlackTurnCancelMessage, SlackTurnCancelMessageOptions, createSlackTurnCancelMessage, decodeSlackTurnCancelButtonValue, encodeSlackTurnCancelButtonValue, registerSlackTurnCancelAction, resolveSlackTurnCancelActionId } from './turn-controls/index.js';
|
|
5
7
|
export { InMemorySlackThreadParticipationStateStoreOptions, PostgresSlackMessagePolicyPruneResult, PostgresSlackMessagePolicyStateStore, PostgresSlackMessagePolicyStateStoreOptions, PostgresSlackThreadParticipationStateStore, PostgresSlackThreadParticipationStateStoreOptions, SlackAsyncMessagePolicyConfig, SlackAsyncMessagePolicyResolver, SlackChannelMessagePolicy, SlackMentionedThreadState, SlackMessagePolicyAcceptReason, SlackMessagePolicyAcceptedDecision, SlackMessagePolicyConfig, SlackMessagePolicyDecision, SlackMessagePolicyPostgresClient, SlackMessagePolicyRejectReason, SlackMessagePolicyRejectedDecision, SlackMessagePolicyResolver, SlackMessagePolicyStateContext, SlackMessagePolicyStateStore, SlackQuietThreadRejectedDecision, SlackSyncMessagePolicyStateStore, SlackThreadAwareMessagePolicyConfig, SlackThreadAwareMessagePolicyDecision, SlackThreadAwareMessagePolicyResolver, SlackThreadParticipationEligibility, SlackThreadParticipationEligibilityOptions, SlackThreadParticipationMode, SlackThreadParticipationPostgresClient, SlackThreadParticipationPruneResult, SlackThreadParticipationReactivation, SlackThreadParticipationState, SlackThreadParticipationStateContext, SlackThreadParticipationStateStore, SlackThreadReplyPolicy, createAsyncSlackMessagePolicyResolver, createAsyncSlackThreadAwareMessagePolicyResolver, createInMemorySlackMessagePolicyStateStore, createInMemorySlackThreadParticipationStateStore, createPostgresSlackMessagePolicyStateStore, createPostgresSlackThreadParticipationStateStore, createSlackMessagePolicyMessageKey, createSlackMessagePolicyResolver, createSlackMessagePolicyThreadKey, initializePostgresSlackMessagePolicyState, initializePostgresSlackThreadParticipationState, prunePostgresSlackMessagePolicyState, prunePostgresSlackThreadParticipationState, resolveSlackThreadParticipationEligibility, shouldRegisterSlackPassiveChannelMessages } from './policy/index.js';
|
|
8
|
+
export { UnsupportedSlackInteractiveRequestError, bridgeSlackTurnEventsToSlack } from './runtime/index.js';
|
|
9
|
+
export { S as SlackEventBridgeOptions, a as SlackFinalResponseArtifactContext, b as SlackFinalResponseArtifactDeliveryMode, c as SlackFinalResponseArtifactPublisher, d as SlackFinalResponseArtifactResult, e as SlackTurnApprovalRequestEvent, f as SlackTurnApprovalResolvedEvent, g as SlackTurnCompleteEvent, h as SlackTurnErrorEvent, i as SlackTurnEvent, j as SlackTurnEventBase, k as SlackTurnHumanInputRequestEvent, l as SlackTurnHumanInputResolvedEvent, m as SlackTurnReasoningEndEvent, n as SlackTurnReasoningStartEvent, o as SlackTurnSource, p as SlackTurnSourceChatOptions, q as SlackTurnStatus, r as SlackTurnStatusEvent, s as SlackTurnSubagentCompleteEvent, t as SlackTurnSubagentErrorEvent, u as SlackTurnSubagentEventBase, v as SlackTurnSubagentEventEvent, w as SlackTurnSubagentStartEvent, x as SlackTurnTextDeltaEvent, y as SlackTurnTextEndEvent, z as SlackTurnTextStartEvent, A as SlackTurnToolErrorEvent, B as SlackTurnToolResultEvent, C as SlackTurnToolStartEvent, D as resolveSlackEventBridgeOptions } from './options-B0xQCaez.js';
|
|
6
10
|
export { L as Logger } from './logging-Bl3HfcC8.js';
|
|
7
11
|
import '@slack/types';
|
|
8
12
|
import '@slack/bolt';
|
|
13
|
+
import './responses/index.js';
|
|
14
|
+
import './types-C8nkPuD4.js';
|
|
15
|
+
import './types-Cywfj8Mj.js';
|
package/dist/index.js
CHANGED
|
@@ -15,12 +15,22 @@ import {
|
|
|
15
15
|
resolveSlackThreadParticipationEligibility,
|
|
16
16
|
shouldRegisterSlackPassiveChannelMessages
|
|
17
17
|
} from "./chunk-DNVSH7H5.js";
|
|
18
|
+
import {
|
|
19
|
+
UnsupportedSlackInteractiveRequestError,
|
|
20
|
+
bridgeSlackTurnEventsToSlack,
|
|
21
|
+
resolveSlackEventBridgeOptions
|
|
22
|
+
} from "./chunk-IAQXQESO.js";
|
|
18
23
|
import {
|
|
19
24
|
currentSlackTurnContext,
|
|
25
|
+
extractSlackActionToken,
|
|
26
|
+
extractSlackAuthContext,
|
|
27
|
+
extractSlackUserIdentity,
|
|
20
28
|
formatSlackAttributedFollowUp,
|
|
29
|
+
parseSlackMentionActivity,
|
|
30
|
+
parseSlackMessageActivity,
|
|
21
31
|
resolveThreadAwareSlackSessionId,
|
|
22
32
|
runWithSlackTurnContext
|
|
23
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-37RN2YUI.js";
|
|
24
34
|
import {
|
|
25
35
|
SLACK_TURN_CANCEL_ACTION_ID,
|
|
26
36
|
createSlackTurnCancelMessage,
|
|
@@ -29,17 +39,6 @@ import {
|
|
|
29
39
|
registerSlackTurnCancelAction,
|
|
30
40
|
resolveSlackTurnCancelActionId
|
|
31
41
|
} from "./chunk-3KP3CBCC.js";
|
|
32
|
-
import {
|
|
33
|
-
markdownToSlackMrkdwn,
|
|
34
|
-
resolveSlackMessageFormatter
|
|
35
|
-
} from "./chunk-6WHFQUYQ.js";
|
|
36
|
-
import {
|
|
37
|
-
extractSlackActionToken,
|
|
38
|
-
extractSlackAuthContext,
|
|
39
|
-
extractSlackUserIdentity,
|
|
40
|
-
parseSlackMentionActivity,
|
|
41
|
-
parseSlackMessageActivity
|
|
42
|
-
} from "./chunk-TWJGVDA2.js";
|
|
43
42
|
import {
|
|
44
43
|
extractSlackAttachmentsText,
|
|
45
44
|
extractSlackBlocksText,
|
|
@@ -48,8 +47,14 @@ import {
|
|
|
48
47
|
resolveSlackChannelType,
|
|
49
48
|
stripLeadingMentions
|
|
50
49
|
} from "./chunk-FPCE5V5Y.js";
|
|
50
|
+
import {
|
|
51
|
+
markdownToSlackMrkdwn,
|
|
52
|
+
resolveSlackMessageFormatter
|
|
53
|
+
} from "./chunk-6WHFQUYQ.js";
|
|
51
54
|
export {
|
|
52
55
|
SLACK_TURN_CANCEL_ACTION_ID,
|
|
56
|
+
UnsupportedSlackInteractiveRequestError,
|
|
57
|
+
bridgeSlackTurnEventsToSlack,
|
|
53
58
|
createAsyncSlackMessagePolicyResolver,
|
|
54
59
|
createAsyncSlackThreadAwareMessagePolicyResolver,
|
|
55
60
|
createInMemorySlackMessagePolicyStateStore,
|
|
@@ -80,6 +85,7 @@ export {
|
|
|
80
85
|
prunePostgresSlackThreadParticipationState,
|
|
81
86
|
registerSlackTurnCancelAction,
|
|
82
87
|
resolveSlackChannelType,
|
|
88
|
+
resolveSlackEventBridgeOptions,
|
|
83
89
|
resolveSlackMessageFormatter,
|
|
84
90
|
resolveSlackThreadParticipationEligibility,
|
|
85
91
|
resolveSlackTurnCancelActionId,
|
|
@@ -1,96 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
1
|
+
import { c as SlackInteractiveApprovalRequest, S as SlackInteractiveActionIds, e as SlackInteractiveHumanInputRequest, l as SlackInteractiveResolution, i as SlackInteractiveRequestRecord, k as SlackInteractiveRequestStore } from '../types-Cywfj8Mj.js';
|
|
2
|
+
export { a as SlackInteractiveActor, b as SlackInteractiveApprovalAction, d as SlackInteractiveHumanInputOption, f as SlackInteractiveHumanInputResponse, g as SlackInteractiveMessageTarget, h as SlackInteractiveRequestHandler, j as SlackInteractiveRequestStatus, m as SlackInteractiveStoredRequest } from '../types-Cywfj8Mj.js';
|
|
3
3
|
import { View } from '@slack/types';
|
|
4
|
+
export { c as SlackInteractiveMessage, d as SlackInteractiveMessageRef, f as SlackInteractiveRequestBaseContext, g as SlackInteractiveRequestContext, i as SlackInteractiveRequestKind, j as SlackInteractiveResponder } from '../interactive-CbKYkkc_.js';
|
|
4
5
|
import '../activity-ByrD9Ftr.js';
|
|
5
6
|
|
|
6
|
-
type SlackInteractiveRequestStatus = "pending" | "resolved";
|
|
7
|
-
type SlackInteractiveApprovalAction = "allow" | "deny" | "remember";
|
|
8
|
-
type SlackInteractiveHumanInputResponse = {
|
|
9
|
-
kind: "text";
|
|
10
|
-
text: string;
|
|
11
|
-
} | {
|
|
12
|
-
kind: "confirm";
|
|
13
|
-
confirmed: boolean;
|
|
14
|
-
text: string;
|
|
15
|
-
} | {
|
|
16
|
-
kind: "choice";
|
|
17
|
-
selected: string[];
|
|
18
|
-
text: string;
|
|
19
|
-
};
|
|
20
|
-
interface SlackInteractiveApprovalRequest {
|
|
21
|
-
id: string;
|
|
22
|
-
tool: string;
|
|
23
|
-
args: unknown;
|
|
24
|
-
description: string;
|
|
25
|
-
risk: string;
|
|
26
|
-
rememberScopes?: string[];
|
|
27
|
-
defaultRememberScope?: string;
|
|
28
|
-
}
|
|
29
|
-
interface SlackInteractiveHumanInputOption {
|
|
30
|
-
label: string;
|
|
31
|
-
value?: string;
|
|
32
|
-
description?: string;
|
|
33
|
-
}
|
|
34
|
-
interface SlackInteractiveHumanInputRequest {
|
|
35
|
-
id: string;
|
|
36
|
-
kind: "text" | "confirm" | "choice";
|
|
37
|
-
title: string;
|
|
38
|
-
question: string;
|
|
39
|
-
options?: SlackInteractiveHumanInputOption[];
|
|
40
|
-
allowMultiple?: boolean;
|
|
41
|
-
placeholder?: string;
|
|
42
|
-
confirmLabel?: string;
|
|
43
|
-
denyLabel?: string;
|
|
44
|
-
}
|
|
45
|
-
type SlackInteractiveStoredRequest = SlackInteractiveApprovalRequest | SlackInteractiveHumanInputRequest;
|
|
46
|
-
type SlackInteractiveResolution = {
|
|
47
|
-
kind: "approval";
|
|
48
|
-
action: SlackInteractiveApprovalAction;
|
|
49
|
-
feedback?: string;
|
|
50
|
-
rememberScope?: string;
|
|
51
|
-
} | {
|
|
52
|
-
kind: "human-input";
|
|
53
|
-
response: SlackInteractiveHumanInputResponse;
|
|
54
|
-
};
|
|
55
|
-
interface SlackInteractiveMessageTarget {
|
|
56
|
-
channel: string;
|
|
57
|
-
ts: string;
|
|
58
|
-
threadTs?: string;
|
|
59
|
-
userId: string;
|
|
60
|
-
teamId?: string;
|
|
61
|
-
}
|
|
62
|
-
interface SlackInteractiveRequestRecord {
|
|
63
|
-
id: string;
|
|
64
|
-
kind: SlackInteractiveResolution["kind"];
|
|
65
|
-
request: SlackInteractiveStoredRequest;
|
|
66
|
-
status: SlackInteractiveRequestStatus;
|
|
67
|
-
createdAt: string;
|
|
68
|
-
updatedAt: string;
|
|
69
|
-
target?: SlackInteractiveMessageTarget;
|
|
70
|
-
resolution?: SlackInteractiveResolution;
|
|
71
|
-
}
|
|
72
|
-
interface SlackInteractiveRequestStore {
|
|
73
|
-
get(requestId: string): Promise<SlackInteractiveRequestRecord | undefined>;
|
|
74
|
-
upsert(record: SlackInteractiveRequestRecord): Promise<SlackInteractiveRequestRecord>;
|
|
75
|
-
attachTarget(requestId: string, target: SlackInteractiveMessageTarget): Promise<SlackInteractiveRequestRecord | undefined>;
|
|
76
|
-
resolve(requestId: string, resolution: SlackInteractiveResolution): Promise<SlackInteractiveRequestRecord | undefined>;
|
|
77
|
-
delete(requestId: string): Promise<void>;
|
|
78
|
-
}
|
|
79
|
-
interface SlackInteractiveActionIds {
|
|
80
|
-
approvalAllow: string;
|
|
81
|
-
approvalDeny: string;
|
|
82
|
-
approvalRemember: string;
|
|
83
|
-
humanConfirm: string;
|
|
84
|
-
humanDeny: string;
|
|
85
|
-
humanOpen: string;
|
|
86
|
-
humanSubmit: string;
|
|
87
|
-
}
|
|
88
|
-
interface SlackInteractiveActor {
|
|
89
|
-
userId: string;
|
|
90
|
-
teamId?: string;
|
|
91
|
-
}
|
|
92
|
-
type SlackInteractiveRequestHandler = (context: SlackInteractiveRequestContext) => boolean | void | Promise<boolean | void>;
|
|
93
|
-
|
|
94
7
|
declare function buildApprovalRequestMessage(request: SlackInteractiveApprovalRequest, actionIds: SlackInteractiveActionIds): {
|
|
95
8
|
text: string;
|
|
96
9
|
blocks: unknown[];
|
|
@@ -151,4 +64,4 @@ declare function prunePostgresSlackInteractiveRequestStore({ client, pruneBatchS
|
|
|
151
64
|
tableName?: string;
|
|
152
65
|
}): Promise<PostgresSlackInteractiveRequestPruneResult>;
|
|
153
66
|
|
|
154
|
-
export { type PostgresSlackInteractiveRequestPruneResult, type PostgresSlackInteractiveRequestStore, type PostgresSlackInteractiveRequestStoreOptions,
|
|
67
|
+
export { type PostgresSlackInteractiveRequestPruneResult, type PostgresSlackInteractiveRequestStore, type PostgresSlackInteractiveRequestStoreOptions, SlackInteractiveActionIds, SlackInteractiveApprovalRequest, SlackInteractiveHumanInputRequest, type SlackInteractivePostgresClient, SlackInteractiveRequestRecord, SlackInteractiveRequestStore, SlackInteractiveResolution, buildApprovalRequestMessage, buildHumanInputModal, buildHumanInputRequestMessage, buildResolvedMessage, cloneRecord, createInMemorySlackInteractiveRequestStore, createPostgresSlackInteractiveRequestStore, decodeActionValue, encodeActionValue, initializePostgresSlackInteractiveRequestStore, nowIso, prunePostgresSlackInteractiveRequestStore };
|