@memberjunction/messaging-adapters 0.0.1 → 5.18.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.
Files changed (58) hide show
  1. package/README.md +231 -43
  2. package/dist/base/BaseMessagingAdapter.d.ts +428 -0
  3. package/dist/base/BaseMessagingAdapter.d.ts.map +1 -0
  4. package/dist/base/BaseMessagingAdapter.js +934 -0
  5. package/dist/base/BaseMessagingAdapter.js.map +1 -0
  6. package/dist/base/message-formatter.d.ts +70 -0
  7. package/dist/base/message-formatter.d.ts.map +1 -0
  8. package/dist/base/message-formatter.js +201 -0
  9. package/dist/base/message-formatter.js.map +1 -0
  10. package/dist/base/types.d.ts +211 -0
  11. package/dist/base/types.d.ts.map +1 -0
  12. package/dist/base/types.js +6 -0
  13. package/dist/base/types.js.map +1 -0
  14. package/dist/index.d.ts +72 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +76 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/slack/SlackAdapter.d.ts +141 -0
  19. package/dist/slack/SlackAdapter.d.ts.map +1 -0
  20. package/dist/slack/SlackAdapter.js +291 -0
  21. package/dist/slack/SlackAdapter.js.map +1 -0
  22. package/dist/slack/SlackMessagingExtension.d.ts +148 -0
  23. package/dist/slack/SlackMessagingExtension.d.ts.map +1 -0
  24. package/dist/slack/SlackMessagingExtension.js +433 -0
  25. package/dist/slack/SlackMessagingExtension.js.map +1 -0
  26. package/dist/slack/slack-block-builder.d.ts +133 -0
  27. package/dist/slack/slack-block-builder.d.ts.map +1 -0
  28. package/dist/slack/slack-block-builder.js +748 -0
  29. package/dist/slack/slack-block-builder.js.map +1 -0
  30. package/dist/slack/slack-formatter.d.ts +37 -0
  31. package/dist/slack/slack-formatter.d.ts.map +1 -0
  32. package/dist/slack/slack-formatter.js +116 -0
  33. package/dist/slack/slack-formatter.js.map +1 -0
  34. package/dist/slack/slack-interactivity.d.ts +38 -0
  35. package/dist/slack/slack-interactivity.d.ts.map +1 -0
  36. package/dist/slack/slack-interactivity.js +414 -0
  37. package/dist/slack/slack-interactivity.js.map +1 -0
  38. package/dist/slack/slack-routes.d.ts +35 -0
  39. package/dist/slack/slack-routes.d.ts.map +1 -0
  40. package/dist/slack/slack-routes.js +98 -0
  41. package/dist/slack/slack-routes.js.map +1 -0
  42. package/dist/teams/TeamsAdapter.d.ts +155 -0
  43. package/dist/teams/TeamsAdapter.d.ts.map +1 -0
  44. package/dist/teams/TeamsAdapter.js +383 -0
  45. package/dist/teams/TeamsAdapter.js.map +1 -0
  46. package/dist/teams/TeamsMessagingExtension.d.ts +75 -0
  47. package/dist/teams/TeamsMessagingExtension.d.ts.map +1 -0
  48. package/dist/teams/TeamsMessagingExtension.js +176 -0
  49. package/dist/teams/TeamsMessagingExtension.js.map +1 -0
  50. package/dist/teams/teams-card-builder.d.ts +94 -0
  51. package/dist/teams/teams-card-builder.d.ts.map +1 -0
  52. package/dist/teams/teams-card-builder.js +648 -0
  53. package/dist/teams/teams-card-builder.js.map +1 -0
  54. package/dist/teams/teams-formatter.d.ts +39 -0
  55. package/dist/teams/teams-formatter.d.ts.map +1 -0
  56. package/dist/teams/teams-formatter.js +107 -0
  57. package/dist/teams/teams-formatter.js.map +1 -0
  58. package/package.json +40 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-block-builder.js","sourceRoot":"","sources":["../../src/slack/slack-block-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @module @memberjunction/messaging-adapters
3
+ * @description Convert Markdown agent responses to Slack Block Kit format.
4
+ *
5
+ * Slack Block Kit has specific formatting requirements and limitations:
6
+ * - Text blocks have a 3000-character limit
7
+ * - Uses `mrkdwn` format (similar to but not identical to Markdown)
8
+ * - Bold: `*text*` (not `**text**`)
9
+ * - Links: `<url|text>` (not `[text](url)`)
10
+ * - Code blocks: triple backticks work the same
11
+ * - Headers use a dedicated `header` block type
12
+ *
13
+ * @see https://api.slack.com/reference/block-kit
14
+ */
15
+ /**
16
+ * Convert Markdown text from an agent response to Slack Block Kit blocks.
17
+ *
18
+ * Handles:
19
+ * - ATX headers → Block Kit `header` blocks
20
+ * - Fenced code blocks → `section` blocks with triple backtick wrapping
21
+ * - Paragraphs → `section` blocks with `mrkdwn` formatting
22
+ * - Long text → auto-split into multiple blocks to respect the 3000-char limit
23
+ *
24
+ * @param markdown - Raw Markdown text from an agent response.
25
+ * @returns Array of Slack Block Kit block objects.
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * const blocks = markdownToBlocks('# Hello\n\nThis is **bold** text.');
30
+ * // [
31
+ * // { type: 'header', text: { type: 'plain_text', text: 'Hello' } },
32
+ * // { type: 'section', text: { type: 'mrkdwn', text: 'This is *bold* text.' } }
33
+ * // ]
34
+ * ```
35
+ */
36
+ export declare function markdownToBlocks(markdown: string): Record<string, unknown>[];
37
+ //# sourceMappingURL=slack-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-formatter.d.ts","sourceRoot":"","sources":["../../src/slack/slack-formatter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAUH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CA2B5E"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * @module @memberjunction/messaging-adapters
3
+ * @description Convert Markdown agent responses to Slack Block Kit format.
4
+ *
5
+ * Slack Block Kit has specific formatting requirements and limitations:
6
+ * - Text blocks have a 3000-character limit
7
+ * - Uses `mrkdwn` format (similar to but not identical to Markdown)
8
+ * - Bold: `*text*` (not `**text**`)
9
+ * - Links: `<url|text>` (not `[text](url)`)
10
+ * - Code blocks: triple backticks work the same
11
+ * - Headers use a dedicated `header` block type
12
+ *
13
+ * @see https://api.slack.com/reference/block-kit
14
+ */
15
+ import { splitMarkdownIntoSections, convertToSlackMrkdwn, splitTextIntoChunks } from '../base/message-formatter.js';
16
+ /** Maximum character length for a single Slack text element. */
17
+ const SLACK_TEXT_BLOCK_MAX_LENGTH = 3000;
18
+ /** Maximum character length for a Slack header text element. */
19
+ const SLACK_HEADER_MAX_LENGTH = 150;
20
+ /**
21
+ * Convert Markdown text from an agent response to Slack Block Kit blocks.
22
+ *
23
+ * Handles:
24
+ * - ATX headers → Block Kit `header` blocks
25
+ * - Fenced code blocks → `section` blocks with triple backtick wrapping
26
+ * - Paragraphs → `section` blocks with `mrkdwn` formatting
27
+ * - Long text → auto-split into multiple blocks to respect the 3000-char limit
28
+ *
29
+ * @param markdown - Raw Markdown text from an agent response.
30
+ * @returns Array of Slack Block Kit block objects.
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * const blocks = markdownToBlocks('# Hello\n\nThis is **bold** text.');
35
+ * // [
36
+ * // { type: 'header', text: { type: 'plain_text', text: 'Hello' } },
37
+ * // { type: 'section', text: { type: 'mrkdwn', text: 'This is *bold* text.' } }
38
+ * // ]
39
+ * ```
40
+ */
41
+ export function markdownToBlocks(markdown) {
42
+ const blocks = [];
43
+ const sections = splitMarkdownIntoSections(markdown);
44
+ for (const section of sections) {
45
+ switch (section.Type) {
46
+ case 'header':
47
+ blocks.push(createHeaderBlock(section.Content));
48
+ break;
49
+ case 'code':
50
+ blocks.push(...createCodeBlocks(section.Content));
51
+ break;
52
+ case 'text':
53
+ blocks.push(...createTextBlocks(section.Content));
54
+ break;
55
+ }
56
+ }
57
+ // Ensure we always return at least one block
58
+ if (blocks.length === 0) {
59
+ blocks.push({
60
+ type: 'section',
61
+ text: { type: 'mrkdwn', text: markdown || '(empty response)' }
62
+ });
63
+ }
64
+ return blocks;
65
+ }
66
+ /**
67
+ * Create a Slack header block. Truncates if the header text exceeds the limit.
68
+ */
69
+ function createHeaderBlock(text) {
70
+ const headerText = text.length > SLACK_HEADER_MAX_LENGTH
71
+ ? text.substring(0, SLACK_HEADER_MAX_LENGTH - 3) + '...'
72
+ : text;
73
+ return {
74
+ type: 'header',
75
+ text: { type: 'plain_text', text: headerText, emoji: true }
76
+ };
77
+ }
78
+ /**
79
+ * Create Slack section blocks for a code block.
80
+ * Wraps in triple backticks and splits if too long.
81
+ */
82
+ function createCodeBlocks(code) {
83
+ const wrapped = '```\n' + code + '\n```';
84
+ if (wrapped.length <= SLACK_TEXT_BLOCK_MAX_LENGTH) {
85
+ return [{
86
+ type: 'section',
87
+ text: { type: 'mrkdwn', text: wrapped }
88
+ }];
89
+ }
90
+ // Split long code blocks
91
+ const chunks = splitTextIntoChunks(code, SLACK_TEXT_BLOCK_MAX_LENGTH - 10); // Account for backtick wrapping
92
+ return chunks.map(chunk => ({
93
+ type: 'section',
94
+ text: { type: 'mrkdwn', text: '```\n' + chunk + '\n```' }
95
+ }));
96
+ }
97
+ /**
98
+ * Create Slack section blocks for text content.
99
+ * Converts Markdown formatting to Slack mrkdwn and splits if too long.
100
+ */
101
+ function createTextBlocks(text) {
102
+ const mrkdwn = convertToSlackMrkdwn(text);
103
+ if (mrkdwn.length <= SLACK_TEXT_BLOCK_MAX_LENGTH) {
104
+ return [{
105
+ type: 'section',
106
+ text: { type: 'mrkdwn', text: mrkdwn }
107
+ }];
108
+ }
109
+ // Split long text blocks
110
+ const chunks = splitTextIntoChunks(mrkdwn, SLACK_TEXT_BLOCK_MAX_LENGTH);
111
+ return chunks.map(chunk => ({
112
+ type: 'section',
113
+ text: { type: 'mrkdwn', text: chunk }
114
+ }));
115
+ }
116
+ //# sourceMappingURL=slack-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-formatter.js","sourceRoot":"","sources":["../../src/slack/slack-formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @module @memberjunction/messaging-adapters
3
+ * @description Handler for Slack interactive message payloads (button clicks, etc.).
4
+ *
5
+ * When users click buttons in Block Kit messages (e.g., "View Full Report"),
6
+ * Slack sends an interaction payload to the configured Request URL. This module
7
+ * routes those payloads to the appropriate handler.
8
+ *
9
+ * ## Slack App Setup
10
+ *
11
+ * 1. Go to your Slack App → Interactivity & Shortcuts
12
+ * 2. Enable Interactivity
13
+ * 3. Set Request URL to: `{your-server}/webhook/slack/interact`
14
+ *
15
+ * @see https://api.slack.com/reference/interaction-payloads
16
+ */
17
+ import { WebClient } from '@slack/web-api';
18
+ import type { AgentResponseForm } from '@memberjunction/ai-core-plus';
19
+ import type { SlackAdapter } from './SlackAdapter.js';
20
+ /**
21
+ * Register a response form for a given channel/thread so it can be opened as a modal.
22
+ * Called by the block builder when a form with non-choice questions is rendered.
23
+ */
24
+ export declare function registerActiveForm(channelId: string, threadTs: string, form: AgentResponseForm): void;
25
+ /**
26
+ * Handle a Slack interactivity payload.
27
+ *
28
+ * Routes by `action_id` prefix:
29
+ * - `mj:view_full:*` — Opens a modal with the full agent response
30
+ * - `mj:action_*` — Custom agent action buttons (logged, no-op for now)
31
+ * - URL buttons are handled client-side and don't trigger callbacks
32
+ *
33
+ * @param rawPayload - The raw JSON string from the `payload` form field.
34
+ * @param client - Slack WebClient for API calls (e.g., opening modals).
35
+ * @param adapter - Optional SlackAdapter for form round-trip (posting choices back as messages).
36
+ */
37
+ export declare function handleSlackInteraction(rawPayload: string, client: WebClient, adapter?: SlackAdapter): Promise<void>;
38
+ //# sourceMappingURL=slack-interactivity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-interactivity.d.ts","sourceRoot":"","sources":["../../src/slack/slack-interactivity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAWtD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CASrG;AA2BD;;;;;;;;;;;GAWG;AACH,wBAAsB,sBAAsB,CACxC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,SAAS,EACjB,OAAO,CAAC,EAAE,YAAY,GACvB,OAAO,CAAC,IAAI,CAAC,CAuBf"}
@@ -0,0 +1,414 @@
1
+ /**
2
+ * @module @memberjunction/messaging-adapters
3
+ * @description Handler for Slack interactive message payloads (button clicks, etc.).
4
+ *
5
+ * When users click buttons in Block Kit messages (e.g., "View Full Report"),
6
+ * Slack sends an interaction payload to the configured Request URL. This module
7
+ * routes those payloads to the appropriate handler.
8
+ *
9
+ * ## Slack App Setup
10
+ *
11
+ * 1. Go to your Slack App → Interactivity & Shortcuts
12
+ * 2. Enable Interactivity
13
+ * 3. Set Request URL to: `{your-server}/webhook/slack/interact`
14
+ *
15
+ * @see https://api.slack.com/reference/interaction-payloads
16
+ */
17
+ import { LogError, LogStatus } from '@memberjunction/core';
18
+ import { buildFormModal, getFullResponseText } from './slack-block-builder.js';
19
+ /**
20
+ * In-memory store for active response forms, keyed by `channelId:threadTs`.
21
+ * Allows the modal open handler to look up the form definition.
22
+ * Entries expire after 30 minutes.
23
+ */
24
+ const activeFormStore = new Map();
25
+ const FORM_STORE_TTL_MS = 30 * 60 * 1000;
26
+ /**
27
+ * Register a response form for a given channel/thread so it can be opened as a modal.
28
+ * Called by the block builder when a form with non-choice questions is rendered.
29
+ */
30
+ export function registerActiveForm(channelId, threadTs, form) {
31
+ const key = `${channelId}:${threadTs}`;
32
+ activeFormStore.set(key, { form, timestamp: Date.now() });
33
+ // Cleanup old entries
34
+ for (const [k, v] of activeFormStore) {
35
+ if (Date.now() - v.timestamp > FORM_STORE_TTL_MS) {
36
+ activeFormStore.delete(k);
37
+ }
38
+ }
39
+ }
40
+ /**
41
+ * Handle a Slack interactivity payload.
42
+ *
43
+ * Routes by `action_id` prefix:
44
+ * - `mj:view_full:*` — Opens a modal with the full agent response
45
+ * - `mj:action_*` — Custom agent action buttons (logged, no-op for now)
46
+ * - URL buttons are handled client-side and don't trigger callbacks
47
+ *
48
+ * @param rawPayload - The raw JSON string from the `payload` form field.
49
+ * @param client - Slack WebClient for API calls (e.g., opening modals).
50
+ * @param adapter - Optional SlackAdapter for form round-trip (posting choices back as messages).
51
+ */
52
+ export async function handleSlackInteraction(rawPayload, client, adapter) {
53
+ let payload;
54
+ try {
55
+ payload = JSON.parse(rawPayload);
56
+ }
57
+ catch {
58
+ LogError('Failed to parse Slack interaction payload');
59
+ return;
60
+ }
61
+ if (payload.type === 'view_submission') {
62
+ await handleModalSubmission(payload, client, adapter);
63
+ return;
64
+ }
65
+ if (payload.type !== 'block_actions') {
66
+ LogStatus(`Slack interaction: ignoring type '${payload.type}'`);
67
+ return;
68
+ }
69
+ const actions = payload.actions ?? [];
70
+ for (const action of actions) {
71
+ await routeAction(action, payload, client, adapter);
72
+ }
73
+ }
74
+ /**
75
+ * Route a single Slack action to its handler.
76
+ */
77
+ async function routeAction(action, payload, client, adapter) {
78
+ const actionId = action.action_id;
79
+ LogStatus(`Slack interaction: action_id='${actionId}', user='${payload.user?.name}'`);
80
+ if (actionId.startsWith('mj:view_full:')) {
81
+ await handleViewFull(action, payload, client);
82
+ }
83
+ else if (actionId === 'mj:view_artifact') {
84
+ // URL buttons — handled client-side, no server action needed
85
+ LogStatus('Slack interaction: artifact view button clicked (URL button, no-op)');
86
+ }
87
+ else if (actionId === 'mj:form_modal:open') {
88
+ await handleFormModalOpen(payload, client);
89
+ }
90
+ else if (actionId.startsWith('mj:form_choice:')) {
91
+ await handleFormChoice(action, payload, client, adapter);
92
+ }
93
+ else if (actionId.startsWith('mj:action_')) {
94
+ LogStatus(`Slack interaction: custom action '${actionId}' clicked by ${payload.user?.name}`);
95
+ }
96
+ else {
97
+ LogStatus(`Slack interaction: unhandled action_id '${actionId}'`);
98
+ }
99
+ }
100
+ /**
101
+ * Handle "View Full Report" button: open a Slack modal with the full content.
102
+ *
103
+ * The action_id format is `mj:view_full:{identifier}`.
104
+ * The full content is pulled from the original message blocks.
105
+ */
106
+ async function handleViewFull(action, payload, client) {
107
+ try {
108
+ // Try to retrieve stored full text first (preserves content lost during truncation)
109
+ const storeKey = action.value;
110
+ const storedText = storeKey ? getFullResponseText(storeKey) : null;
111
+ // Fall back to extracting from already-truncated blocks
112
+ const messageBlocks = payload.message?.blocks ?? [];
113
+ const fullText = storedText ?? extractTextFromBlocks(messageBlocks);
114
+ // Split content into modal blocks (modal has same 50-block limit)
115
+ const modalBlocks = buildModalContentBlocks(fullText);
116
+ await client.views.open({
117
+ trigger_id: payload.trigger_id,
118
+ view: {
119
+ type: 'modal',
120
+ title: {
121
+ type: 'plain_text',
122
+ text: 'Full Response',
123
+ emoji: true
124
+ },
125
+ close: {
126
+ type: 'plain_text',
127
+ text: 'Close'
128
+ },
129
+ blocks: modalBlocks
130
+ }
131
+ });
132
+ }
133
+ catch (error) {
134
+ LogError('Failed to open Slack modal for full response:', undefined, error);
135
+ }
136
+ }
137
+ /**
138
+ * Extract plain text content from Block Kit blocks.
139
+ */
140
+ function extractTextFromBlocks(blocks) {
141
+ const textParts = [];
142
+ for (const block of blocks) {
143
+ const blockType = block.type;
144
+ if (blockType === 'section' || blockType === 'header') {
145
+ const textObj = block.text;
146
+ if (textObj && typeof textObj.text === 'string') {
147
+ textParts.push(textObj.text);
148
+ }
149
+ }
150
+ else if (blockType === 'context') {
151
+ const elements = block.elements;
152
+ if (elements) {
153
+ for (const el of elements) {
154
+ if (typeof el.text === 'string') {
155
+ textParts.push(el.text);
156
+ }
157
+ }
158
+ }
159
+ }
160
+ }
161
+ return textParts.join('\n\n');
162
+ }
163
+ /**
164
+ * Handle "Fill Out Form" button: open a Slack modal with input fields.
165
+ *
166
+ * The form definition is stored in the button's `value` field as JSON.
167
+ * Falls back to the in-memory form store if the value is too large.
168
+ */
169
+ async function handleFormModalOpen(payload, client) {
170
+ try {
171
+ const channelId = payload.channel?.id;
172
+ // Use thread_ts (thread root) if available, fall back to message ts.
173
+ // This ensures form responses post back to the original thread, not a sub-thread.
174
+ const threadTs = payload.message?.thread_ts ?? payload.message?.ts;
175
+ if (!channelId) {
176
+ LogStatus('Slack form modal: missing channel');
177
+ return;
178
+ }
179
+ // Try to get the form from the button value first
180
+ const action = payload.actions?.[0];
181
+ let form = null;
182
+ if (action?.value && action.value !== 'too_large') {
183
+ try {
184
+ form = JSON.parse(action.value);
185
+ }
186
+ catch {
187
+ LogStatus('Slack form modal: failed to parse form from button value');
188
+ }
189
+ }
190
+ // Fall back to in-memory store
191
+ if (!form) {
192
+ const key = `${channelId}:${threadTs}`;
193
+ const stored = activeFormStore.get(key);
194
+ if (stored) {
195
+ form = stored.form;
196
+ }
197
+ }
198
+ if (!form) {
199
+ await client.chat.postEphemeral({
200
+ channel: channelId,
201
+ user: payload.user.id,
202
+ text: 'This form has expired. Please ask the agent again.'
203
+ });
204
+ return;
205
+ }
206
+ const modalView = buildFormModal(form);
207
+ // Store channel/thread in private_metadata so we can post the response back
208
+ modalView.private_metadata = JSON.stringify({ channelId, threadTs });
209
+ await client.views.open({
210
+ trigger_id: payload.trigger_id,
211
+ view: modalView
212
+ });
213
+ }
214
+ catch (error) {
215
+ LogError('Failed to open form modal:', undefined, error);
216
+ }
217
+ }
218
+ /**
219
+ * Handle a modal form submission (view_submission callback).
220
+ * Extracts field values, formats as `@{_mode:"form",...}`, and posts back to the thread.
221
+ */
222
+ async function handleModalSubmission(payload, client, adapter) {
223
+ try {
224
+ const view = payload.view;
225
+ if (!view || view.callback_id !== 'mj:form_modal:submit')
226
+ return;
227
+ // Parse channel/thread from private_metadata
228
+ let channelId;
229
+ let threadTs;
230
+ if (view.private_metadata) {
231
+ try {
232
+ const meta = JSON.parse(view.private_metadata);
233
+ channelId = meta.channelId;
234
+ threadTs = meta.threadTs;
235
+ }
236
+ catch {
237
+ // Invalid metadata
238
+ }
239
+ }
240
+ if (!channelId) {
241
+ LogStatus('Slack modal submit: missing channel metadata');
242
+ return;
243
+ }
244
+ // Extract field values from modal state
245
+ const values = view.state?.values ?? {};
246
+ const fields = [];
247
+ for (const [blockId, blockValues] of Object.entries(values)) {
248
+ // Block IDs are formatted as mj_form_{questionId}
249
+ const questionId = blockId.replace('mj_form_', '');
250
+ for (const [, fieldState] of Object.entries(blockValues)) {
251
+ let fieldValue = '';
252
+ let displayVal = '';
253
+ if (fieldState.selected_option) {
254
+ fieldValue = fieldState.selected_option.value;
255
+ displayVal = fieldValue;
256
+ }
257
+ else if (fieldState.selected_options && fieldState.selected_options.length > 0) {
258
+ fieldValue = fieldState.selected_options.map(o => o.value).join(',');
259
+ displayVal = fieldValue;
260
+ }
261
+ else if (fieldState.value != null) {
262
+ fieldValue = fieldState.value;
263
+ displayVal = fieldValue;
264
+ }
265
+ if (fieldValue) {
266
+ fields.push({
267
+ name: questionId,
268
+ value: fieldValue,
269
+ label: questionId,
270
+ displayValue: displayVal
271
+ });
272
+ }
273
+ }
274
+ }
275
+ if (fields.length === 0) {
276
+ LogStatus('Slack modal submit: no fields extracted');
277
+ return;
278
+ }
279
+ LogStatus(`Slack modal submit: user='${payload.user?.name}', fields=${fields.length}`);
280
+ await postFormSubmission({
281
+ fields,
282
+ channelId,
283
+ threadTs,
284
+ userId: payload.user.id,
285
+ userName: payload.user.name,
286
+ client,
287
+ adapter
288
+ });
289
+ }
290
+ catch (error) {
291
+ LogError('Failed to handle modal submission:', undefined, error);
292
+ }
293
+ }
294
+ /**
295
+ * Handle a form choice button click with full round-trip back to the agent.
296
+ *
297
+ * The action_id format is `mj:form_choice:{questionId}:{value}`.
298
+ *
299
+ * Flow (mirrors MJ Explorer):
300
+ * 1. Parse the selected value from the action_id
301
+ * 2. Format it as a `@{_mode:"form",...}` message (same format Explorer uses)
302
+ * 3. Post the choice as a visible user message in the thread
303
+ * 4. Route the message through the adapter so the agent processes it
304
+ */
305
+ async function handleFormChoice(action, payload, client, adapter) {
306
+ try {
307
+ // Parse action_id: mj:form_choice:{questionId}:{value}
308
+ const parts = action.action_id.split(':');
309
+ const questionId = parts[2] ?? 'unknown';
310
+ const chosenValue = parts.slice(3).join(':') || action.value || 'unknown';
311
+ const displayValue = action.value || chosenValue;
312
+ LogStatus(`Slack form choice: user='${payload.user?.name}', question='${questionId}', value='${chosenValue}'`);
313
+ const channelId = payload.channel?.id;
314
+ const threadTs = payload.message?.thread_ts ?? payload.message?.ts;
315
+ if (!channelId)
316
+ return;
317
+ await postFormSubmission({
318
+ fields: [{
319
+ name: questionId,
320
+ value: chosenValue,
321
+ label: questionId,
322
+ displayValue
323
+ }],
324
+ channelId,
325
+ threadTs,
326
+ userId: payload.user.id,
327
+ userName: payload.user.name,
328
+ client,
329
+ adapter
330
+ });
331
+ }
332
+ catch (error) {
333
+ LogError('Failed to handle form choice interaction:', undefined, error);
334
+ }
335
+ }
336
+ /**
337
+ * Post a form submission back to a Slack thread and route it through the adapter.
338
+ *
339
+ * Shared by handleFormChoice() and handleModalSubmission() — both build
340
+ * `@{_mode:"form",...}` JSON and post it as a visible message in the thread,
341
+ * then hand it to the adapter for agent re-execution.
342
+ */
343
+ async function postFormSubmission(params) {
344
+ const { fields, channelId, threadTs, userId, userName, client, adapter } = params;
345
+ // Build @{_mode:"form"} message matching Explorer's format
346
+ const formResponse = JSON.stringify({
347
+ _mode: 'form',
348
+ action: 'formSubmit',
349
+ fields
350
+ });
351
+ const messageText = `@${formResponse}`;
352
+ // Post as a visible message in the thread
353
+ const displayText = fields.map(f => `${f.label}: ${f.displayValue}`).join(', ');
354
+ const postResult = await client.chat.postMessage({
355
+ channel: channelId,
356
+ thread_ts: threadTs,
357
+ text: displayText
358
+ });
359
+ // Route through adapter for agent re-execution
360
+ if (adapter && postResult.ts) {
361
+ const incomingMessage = {
362
+ MessageID: postResult.ts,
363
+ Text: messageText,
364
+ SenderID: userId,
365
+ SenderName: userName,
366
+ ChannelID: channelId,
367
+ ThreadID: threadTs ?? null,
368
+ IsDirectMessage: false,
369
+ IsBotMention: true,
370
+ Timestamp: new Date(),
371
+ RawEvent: {}
372
+ };
373
+ adapter.HandleMessage(incomingMessage).catch(err => {
374
+ LogError('Failed to re-execute agent after form submission:', undefined, err);
375
+ });
376
+ }
377
+ }
378
+ /**
379
+ * Build Block Kit blocks for the modal content.
380
+ */
381
+ function buildModalContentBlocks(text) {
382
+ const maxBlockTextLength = 3000;
383
+ const blocks = [];
384
+ // Split text into chunks that fit in section blocks
385
+ let remaining = text;
386
+ while (remaining.length > 0 && blocks.length < 48) {
387
+ const chunk = remaining.substring(0, maxBlockTextLength);
388
+ remaining = remaining.substring(maxBlockTextLength);
389
+ blocks.push({
390
+ type: 'section',
391
+ text: {
392
+ type: 'mrkdwn',
393
+ text: chunk || '(empty)'
394
+ }
395
+ });
396
+ }
397
+ if (remaining.length > 0) {
398
+ blocks.push({
399
+ type: 'context',
400
+ elements: [{
401
+ type: 'mrkdwn',
402
+ text: '⋯ _Content truncated due to length._'
403
+ }]
404
+ });
405
+ }
406
+ if (blocks.length === 0) {
407
+ blocks.push({
408
+ type: 'section',
409
+ text: { type: 'mrkdwn', text: '(No content available)' }
410
+ });
411
+ }
412
+ return blocks;
413
+ }
414
+ //# sourceMappingURL=slack-interactivity.js.map