@framers/agentos 0.1.26 → 0.1.28

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 (79) hide show
  1. package/dist/api/AgentOSOrchestrator.js +1 -1
  2. package/dist/api/AgentOSOrchestrator.js.map +1 -1
  3. package/dist/channels/ChannelRouter.d.ts.map +1 -1
  4. package/dist/channels/ChannelRouter.js +1 -1
  5. package/dist/channels/ChannelRouter.js.map +1 -1
  6. package/dist/channels/IChannelAdapter.d.ts.map +1 -1
  7. package/dist/channels/adapters/BaseChannelAdapter.d.ts +130 -0
  8. package/dist/channels/adapters/BaseChannelAdapter.d.ts.map +1 -0
  9. package/dist/channels/adapters/BaseChannelAdapter.js +257 -0
  10. package/dist/channels/adapters/BaseChannelAdapter.js.map +1 -0
  11. package/dist/channels/adapters/DiscordChannelAdapter.d.ts +86 -0
  12. package/dist/channels/adapters/DiscordChannelAdapter.d.ts.map +1 -0
  13. package/dist/channels/adapters/DiscordChannelAdapter.js +550 -0
  14. package/dist/channels/adapters/DiscordChannelAdapter.js.map +1 -0
  15. package/dist/channels/adapters/GoogleChatChannelAdapter.d.ts +117 -0
  16. package/dist/channels/adapters/GoogleChatChannelAdapter.d.ts.map +1 -0
  17. package/dist/channels/adapters/GoogleChatChannelAdapter.js +632 -0
  18. package/dist/channels/adapters/GoogleChatChannelAdapter.js.map +1 -0
  19. package/dist/channels/adapters/IRCChannelAdapter.d.ts +86 -0
  20. package/dist/channels/adapters/IRCChannelAdapter.d.ts.map +1 -0
  21. package/dist/channels/adapters/IRCChannelAdapter.js +253 -0
  22. package/dist/channels/adapters/IRCChannelAdapter.js.map +1 -0
  23. package/dist/channels/adapters/RedditChannelAdapter.d.ts +123 -0
  24. package/dist/channels/adapters/RedditChannelAdapter.d.ts.map +1 -0
  25. package/dist/channels/adapters/RedditChannelAdapter.js +516 -0
  26. package/dist/channels/adapters/RedditChannelAdapter.js.map +1 -0
  27. package/dist/channels/adapters/SignalChannelAdapter.d.ts +120 -0
  28. package/dist/channels/adapters/SignalChannelAdapter.d.ts.map +1 -0
  29. package/dist/channels/adapters/SignalChannelAdapter.js +521 -0
  30. package/dist/channels/adapters/SignalChannelAdapter.js.map +1 -0
  31. package/dist/channels/adapters/SlackChannelAdapter.d.ts +96 -0
  32. package/dist/channels/adapters/SlackChannelAdapter.d.ts.map +1 -0
  33. package/dist/channels/adapters/SlackChannelAdapter.js +535 -0
  34. package/dist/channels/adapters/SlackChannelAdapter.js.map +1 -0
  35. package/dist/channels/adapters/TeamsChannelAdapter.d.ts +138 -0
  36. package/dist/channels/adapters/TeamsChannelAdapter.d.ts.map +1 -0
  37. package/dist/channels/adapters/TeamsChannelAdapter.js +639 -0
  38. package/dist/channels/adapters/TeamsChannelAdapter.js.map +1 -0
  39. package/dist/channels/adapters/TelegramChannelAdapter.d.ts +83 -0
  40. package/dist/channels/adapters/TelegramChannelAdapter.d.ts.map +1 -0
  41. package/dist/channels/adapters/TelegramChannelAdapter.js +463 -0
  42. package/dist/channels/adapters/TelegramChannelAdapter.js.map +1 -0
  43. package/dist/channels/adapters/TwitterChannelAdapter.d.ts +117 -0
  44. package/dist/channels/adapters/TwitterChannelAdapter.d.ts.map +1 -0
  45. package/dist/channels/adapters/TwitterChannelAdapter.js +489 -0
  46. package/dist/channels/adapters/TwitterChannelAdapter.js.map +1 -0
  47. package/dist/channels/adapters/WebChatChannelAdapter.d.ts +141 -0
  48. package/dist/channels/adapters/WebChatChannelAdapter.d.ts.map +1 -0
  49. package/dist/channels/adapters/WebChatChannelAdapter.js +539 -0
  50. package/dist/channels/adapters/WebChatChannelAdapter.js.map +1 -0
  51. package/dist/channels/adapters/WhatsAppChannelAdapter.d.ts +122 -0
  52. package/dist/channels/adapters/WhatsAppChannelAdapter.d.ts.map +1 -0
  53. package/dist/channels/adapters/WhatsAppChannelAdapter.js +643 -0
  54. package/dist/channels/adapters/WhatsAppChannelAdapter.js.map +1 -0
  55. package/dist/channels/adapters/index.d.ts +34 -0
  56. package/dist/channels/adapters/index.d.ts.map +1 -0
  57. package/dist/channels/adapters/index.js +25 -0
  58. package/dist/channels/adapters/index.js.map +1 -0
  59. package/dist/channels/index.d.ts +24 -0
  60. package/dist/channels/index.d.ts.map +1 -1
  61. package/dist/channels/index.js +16 -0
  62. package/dist/channels/index.js.map +1 -1
  63. package/dist/cognitive_substrate/personas/metaprompt_presets.d.ts.map +1 -1
  64. package/dist/cognitive_substrate/personas/metaprompt_presets.js +0 -2
  65. package/dist/cognitive_substrate/personas/metaprompt_presets.js.map +1 -1
  66. package/dist/core/provenance/crypto/HashChain.d.ts.map +1 -1
  67. package/dist/core/provenance/enforcement/AutonomyGuard.d.ts.map +1 -1
  68. package/dist/core/provenance/enforcement/ProvenanceStorageHooks.d.ts.map +1 -1
  69. package/dist/core/provenance/enforcement/ProvenanceStorageHooks.js +2 -1
  70. package/dist/core/provenance/enforcement/ProvenanceStorageHooks.js.map +1 -1
  71. package/dist/core/provenance/ledger/EventTypes.d.ts.map +1 -1
  72. package/dist/core/safety/ToolExecutionGuard.d.ts.map +1 -1
  73. package/dist/core/safety/ToolExecutionGuard.js +0 -1
  74. package/dist/core/safety/ToolExecutionGuard.js.map +1 -1
  75. package/dist/extensions/ExtensionManager.d.ts.map +1 -1
  76. package/dist/extensions/ExtensionManager.js +3 -9
  77. package/dist/extensions/ExtensionManager.js.map +1 -1
  78. package/dist/rag/RetrievalAugmentor.js.map +1 -1
  79. package/package.json +1 -1
@@ -0,0 +1,535 @@
1
+ /**
2
+ * @fileoverview Slack Channel Adapter for AgentOS.
3
+ *
4
+ * Wraps the `@slack/bolt` npm package to connect agents to Slack
5
+ * workspaces. Supports rich messaging including text (mrkdwn), images,
6
+ * documents, Block Kit components, reactions, threads, and mentions.
7
+ *
8
+ * **Dependencies**: Requires `@slack/bolt` to be installed. The adapter
9
+ * uses a dynamic import so the package is only loaded at connection time,
10
+ * avoiding hard failures if it is not present.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const slack = new SlackChannelAdapter();
15
+ * await slack.initialize({
16
+ * platform: 'slack',
17
+ * credential: 'xoxb-BOT-TOKEN',
18
+ * params: {
19
+ * botToken: 'xoxb-BOT-TOKEN',
20
+ * signingSecret: 'SIGNING_SECRET',
21
+ * appToken: 'xapp-APP-TOKEN', // for Socket Mode
22
+ * },
23
+ * });
24
+ * ```
25
+ *
26
+ * @module @framers/agentos/channels/adapters/SlackChannelAdapter
27
+ */
28
+ import { BaseChannelAdapter } from './BaseChannelAdapter.js';
29
+ // ============================================================================
30
+ // SlackChannelAdapter
31
+ // ============================================================================
32
+ /**
33
+ * Channel adapter for Slack using the @slack/bolt SDK.
34
+ *
35
+ * Uses dynamic import so `@slack/bolt` is only required at runtime when
36
+ * the adapter is actually initialized.
37
+ *
38
+ * When `appToken` is provided, the adapter uses Socket Mode (no public
39
+ * endpoint required). Otherwise, it starts an HTTP server for receiving
40
+ * Slack events.
41
+ *
42
+ * Capabilities: text, rich_text, images, documents, reactions, threads,
43
+ * mentions, buttons, group_chat, channels, editing, deletion.
44
+ */
45
+ export class SlackChannelAdapter extends BaseChannelAdapter {
46
+ constructor() {
47
+ super(...arguments);
48
+ this.platform = 'slack';
49
+ this.displayName = 'Slack';
50
+ this.capabilities = [
51
+ 'text',
52
+ 'rich_text',
53
+ 'images',
54
+ 'documents',
55
+ 'reactions',
56
+ 'threads',
57
+ 'mentions',
58
+ 'buttons',
59
+ 'group_chat',
60
+ 'channels',
61
+ 'editing',
62
+ 'deletion',
63
+ ];
64
+ /** Whether socket mode is active. */
65
+ this.socketMode = false;
66
+ }
67
+ // ── Abstract hook implementations ──
68
+ async doConnect(auth) {
69
+ const botToken = auth.params?.botToken ?? auth.credential;
70
+ if (!botToken) {
71
+ throw new Error('Slack bot token is required. Provide it as credential or params.botToken.');
72
+ }
73
+ const signingSecret = auth.params?.signingSecret;
74
+ const appToken = auth.params?.appToken;
75
+ // Dynamic import
76
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
77
+ let BoltModule;
78
+ try {
79
+ BoltModule = await import('@slack/bolt');
80
+ }
81
+ catch {
82
+ throw new Error('The "@slack/bolt" package is required for the Slack adapter. ' +
83
+ 'Install it with: npm install @slack/bolt');
84
+ }
85
+ const AppClass = BoltModule.App ?? BoltModule.default?.App ?? BoltModule.default;
86
+ // Build app config
87
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
88
+ const appConfig = {
89
+ token: botToken,
90
+ signingSecret: signingSecret || undefined,
91
+ };
92
+ // Socket Mode (preferred when appToken is available — no public endpoint needed)
93
+ if (appToken) {
94
+ this.socketMode = true;
95
+ appConfig.socketMode = true;
96
+ appConfig.appToken = appToken;
97
+ }
98
+ else {
99
+ this.socketMode = false;
100
+ appConfig.port = parseInt(auth.params?.port ?? '3000', 10);
101
+ }
102
+ this.app = new AppClass(appConfig);
103
+ // Wire up event handlers
104
+ this.wireEventHandlers();
105
+ // Start the app
106
+ await this.app.start();
107
+ // Resolve bot identity
108
+ try {
109
+ const authResult = await this.app.client.auth.test({ token: botToken });
110
+ this.botUserId = authResult.user_id;
111
+ this.platformInfo = {
112
+ botId: authResult.user_id,
113
+ botName: authResult.user,
114
+ teamId: authResult.team_id,
115
+ teamName: authResult.team,
116
+ mode: this.socketMode ? 'socket' : 'http',
117
+ };
118
+ console.log(`[Slack] Connected as @${authResult.user ?? 'unknown'} in workspace "${authResult.team ?? 'unknown'}" (${this.socketMode ? 'socket' : 'http'} mode)`);
119
+ }
120
+ catch {
121
+ this.platformInfo = { mode: this.socketMode ? 'socket' : 'http' };
122
+ console.log(`[Slack] Connected (${this.socketMode ? 'socket' : 'http'} mode)`);
123
+ }
124
+ }
125
+ async doSendMessage(conversationId, content) {
126
+ if (!this.app) {
127
+ throw new Error('[Slack] App is not connected.');
128
+ }
129
+ // Build the message payload
130
+ const payload = this.buildSlackPayload(conversationId, content);
131
+ const result = await this.app.client.chat.postMessage(payload);
132
+ return {
133
+ messageId: result.ts ?? '',
134
+ timestamp: result.ts
135
+ ? new Date(parseFloat(result.ts) * 1000).toISOString()
136
+ : new Date().toISOString(),
137
+ };
138
+ }
139
+ async doShutdown() {
140
+ if (this.app) {
141
+ try {
142
+ await this.app.stop();
143
+ }
144
+ catch {
145
+ // Best effort
146
+ }
147
+ }
148
+ this.app = undefined;
149
+ this.botUserId = undefined;
150
+ console.log('[Slack] Adapter shut down.');
151
+ }
152
+ // ── IChannelAdapter optional methods ──
153
+ async editMessage(conversationId, messageId, content) {
154
+ if (!this.app)
155
+ throw new Error('[Slack] App is not connected.');
156
+ const textBlock = content.blocks.find((b) => b.type === 'text');
157
+ const text = textBlock && textBlock.type === 'text' ? textBlock.text : '';
158
+ const blocks = this.buildBlockKit(content);
159
+ await this.app.client.chat.update({
160
+ channel: conversationId,
161
+ ts: messageId,
162
+ text,
163
+ blocks: blocks.length > 0 ? blocks : undefined,
164
+ });
165
+ }
166
+ async deleteMessage(conversationId, messageId) {
167
+ if (!this.app)
168
+ throw new Error('[Slack] App is not connected.');
169
+ await this.app.client.chat.delete({
170
+ channel: conversationId,
171
+ ts: messageId,
172
+ });
173
+ }
174
+ async addReaction(conversationId, messageId, emoji) {
175
+ if (!this.app)
176
+ throw new Error('[Slack] App is not connected.');
177
+ // Slack emoji names don't include colons
178
+ const name = emoji.replace(/^:|:$/g, '');
179
+ await this.app.client.reactions.add({
180
+ channel: conversationId,
181
+ timestamp: messageId,
182
+ name,
183
+ });
184
+ }
185
+ async sendTypingIndicator(_conversationId, _isTyping) {
186
+ // Slack does not have a native typing indicator API for bots.
187
+ // No-op.
188
+ }
189
+ async getConversationInfo(conversationId) {
190
+ if (!this.app)
191
+ throw new Error('[Slack] App is not connected.');
192
+ const result = await this.app.client.conversations.info({
193
+ channel: conversationId,
194
+ });
195
+ const channel = result.channel;
196
+ return {
197
+ name: channel?.name ?? undefined,
198
+ memberCount: channel?.num_members ?? undefined,
199
+ isGroup: channel?.is_group || channel?.is_mpim || channel?.is_channel || false,
200
+ metadata: {
201
+ isChannel: channel?.is_channel,
202
+ isPrivate: channel?.is_private,
203
+ isArchived: channel?.is_archived,
204
+ topic: channel?.topic?.value,
205
+ purpose: channel?.purpose?.value,
206
+ },
207
+ };
208
+ }
209
+ // ── Private helpers ──
210
+ /**
211
+ * Wire up @slack/bolt event handlers for inbound messages.
212
+ */
213
+ wireEventHandlers() {
214
+ if (!this.app)
215
+ return;
216
+ // Inbound messages
217
+ this.app.message(async (args) => {
218
+ const { message, event } = args;
219
+ const msg = message ?? event;
220
+ if (!msg)
221
+ return;
222
+ // Ignore bot's own messages
223
+ if (msg.bot_id || msg.user === this.botUserId)
224
+ return;
225
+ // Ignore message subtypes that are not actual user messages
226
+ // (e.g., message_changed, message_deleted are handled separately)
227
+ if (msg.subtype && msg.subtype !== 'file_share')
228
+ return;
229
+ this.handleInboundMessage(msg);
230
+ });
231
+ // Reactions
232
+ this.app.event?.('reaction_added', async (args) => {
233
+ const { event } = args;
234
+ this.emit({
235
+ type: 'reaction_added',
236
+ platform: 'slack',
237
+ conversationId: event.item?.channel ?? '',
238
+ timestamp: new Date().toISOString(),
239
+ data: {
240
+ messageId: event.item?.ts,
241
+ emoji: event.reaction,
242
+ userId: event.user,
243
+ },
244
+ });
245
+ });
246
+ this.app.event?.('reaction_removed', async (args) => {
247
+ const { event } = args;
248
+ this.emit({
249
+ type: 'reaction_removed',
250
+ platform: 'slack',
251
+ conversationId: event.item?.channel ?? '',
252
+ timestamp: new Date().toISOString(),
253
+ data: {
254
+ messageId: event.item?.ts,
255
+ emoji: event.reaction,
256
+ userId: event.user,
257
+ },
258
+ });
259
+ });
260
+ // Member join/leave
261
+ this.app.event?.('member_joined_channel', async (args) => {
262
+ const { event } = args;
263
+ this.emit({
264
+ type: 'member_joined',
265
+ platform: 'slack',
266
+ conversationId: event.channel ?? '',
267
+ timestamp: new Date().toISOString(),
268
+ data: { userId: event.user },
269
+ });
270
+ });
271
+ this.app.event?.('member_left_channel', async (args) => {
272
+ const { event } = args;
273
+ this.emit({
274
+ type: 'member_left',
275
+ platform: 'slack',
276
+ conversationId: event.channel ?? '',
277
+ timestamp: new Date().toISOString(),
278
+ data: { userId: event.user },
279
+ });
280
+ });
281
+ // Button actions (Block Kit interactive elements)
282
+ this.app.action?.(/.*/, async (args) => {
283
+ const { action, body } = args;
284
+ this.emit({
285
+ type: 'button_callback',
286
+ platform: 'slack',
287
+ conversationId: body.channel?.id ?? '',
288
+ timestamp: new Date().toISOString(),
289
+ data: {
290
+ callbackId: action.action_id ?? '',
291
+ buttonId: action.value ?? action.action_id ?? '',
292
+ sender: {
293
+ id: body.user?.id ?? '',
294
+ displayName: body.user?.name ?? undefined,
295
+ username: body.user?.username ?? undefined,
296
+ },
297
+ messageId: body.message?.ts ?? '',
298
+ },
299
+ });
300
+ // Acknowledge the action
301
+ try {
302
+ await args.ack?.();
303
+ }
304
+ catch {
305
+ // Non-critical
306
+ }
307
+ });
308
+ }
309
+ /**
310
+ * Handle an inbound Slack message and emit a channel event.
311
+ */
312
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
313
+ handleInboundMessage(msg) {
314
+ const contentBlocks = [];
315
+ // Text content
316
+ if (msg.text) {
317
+ contentBlocks.push({ type: 'text', text: msg.text });
318
+ }
319
+ // File attachments
320
+ if (msg.files && Array.isArray(msg.files)) {
321
+ for (const file of msg.files) {
322
+ const mimeType = file.mimetype ?? '';
323
+ const url = file.url_private ?? file.permalink ?? '';
324
+ if (mimeType.startsWith('image/')) {
325
+ contentBlocks.push({
326
+ type: 'image',
327
+ url,
328
+ caption: file.title ?? undefined,
329
+ mimeType,
330
+ });
331
+ }
332
+ else if (mimeType.startsWith('video/')) {
333
+ contentBlocks.push({
334
+ type: 'video',
335
+ url,
336
+ caption: file.title ?? undefined,
337
+ mimeType,
338
+ });
339
+ }
340
+ else if (mimeType.startsWith('audio/')) {
341
+ contentBlocks.push({
342
+ type: 'audio',
343
+ url,
344
+ mimeType,
345
+ });
346
+ }
347
+ else {
348
+ contentBlocks.push({
349
+ type: 'document',
350
+ url,
351
+ filename: file.name ?? 'file',
352
+ mimeType: mimeType || undefined,
353
+ });
354
+ }
355
+ }
356
+ }
357
+ if (contentBlocks.length === 0) {
358
+ contentBlocks.push({ type: 'text', text: '' });
359
+ }
360
+ // Determine conversation type
361
+ const isThread = !!msg.thread_ts && msg.thread_ts !== msg.ts;
362
+ const channelType = msg.channel_type;
363
+ const isDM = channelType === 'im';
364
+ const channelMessage = {
365
+ messageId: msg.ts ?? '',
366
+ platform: 'slack',
367
+ conversationId: msg.channel ?? '',
368
+ conversationType: isDM
369
+ ? 'direct'
370
+ : isThread
371
+ ? 'thread'
372
+ : 'group',
373
+ sender: {
374
+ id: msg.user ?? '',
375
+ displayName: msg.user_profile?.display_name ?? undefined,
376
+ username: msg.user_profile?.name ?? undefined,
377
+ avatarUrl: msg.user_profile?.image_72 ?? undefined,
378
+ },
379
+ content: contentBlocks,
380
+ text: msg.text ?? '',
381
+ timestamp: msg.ts
382
+ ? new Date(parseFloat(msg.ts) * 1000).toISOString()
383
+ : new Date().toISOString(),
384
+ replyToMessageId: isThread ? msg.thread_ts : undefined,
385
+ rawEvent: msg,
386
+ };
387
+ this.emit({
388
+ type: 'message',
389
+ platform: 'slack',
390
+ conversationId: msg.channel ?? '',
391
+ timestamp: channelMessage.timestamp,
392
+ data: channelMessage,
393
+ });
394
+ }
395
+ /**
396
+ * Build the full Slack API payload for chat.postMessage.
397
+ */
398
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
399
+ buildSlackPayload(conversationId, content) {
400
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
401
+ const payload = {
402
+ channel: conversationId,
403
+ };
404
+ // Extract plain text for the required `text` fallback field
405
+ const textParts = [];
406
+ for (const block of content.blocks) {
407
+ if (block.type === 'text')
408
+ textParts.push(block.text);
409
+ }
410
+ payload.text = textParts.join('\n') || ' ';
411
+ // Build Block Kit blocks
412
+ const blocks = this.buildBlockKit(content);
413
+ if (blocks.length > 0) {
414
+ payload.blocks = blocks;
415
+ }
416
+ // Thread reply
417
+ if (content.replyToMessageId) {
418
+ payload.thread_ts = content.replyToMessageId;
419
+ }
420
+ // Platform options pass-through
421
+ if (content.platformOptions) {
422
+ Object.assign(payload, content.platformOptions);
423
+ }
424
+ return payload;
425
+ }
426
+ /**
427
+ * Build Slack Block Kit blocks from MessageContent.
428
+ */
429
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
430
+ buildBlockKit(content) {
431
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
432
+ const blocks = [];
433
+ for (const block of content.blocks) {
434
+ switch (block.type) {
435
+ case 'text': {
436
+ blocks.push({
437
+ type: 'section',
438
+ text: {
439
+ type: 'mrkdwn',
440
+ text: block.text,
441
+ },
442
+ });
443
+ break;
444
+ }
445
+ case 'image': {
446
+ blocks.push({
447
+ type: 'image',
448
+ image_url: block.url,
449
+ alt_text: block.caption ?? 'Image',
450
+ ...(block.caption ? { title: { type: 'plain_text', text: block.caption } } : {}),
451
+ });
452
+ break;
453
+ }
454
+ case 'document': {
455
+ // Slack doesn't have a native document block — use a section with a link
456
+ blocks.push({
457
+ type: 'section',
458
+ text: {
459
+ type: 'mrkdwn',
460
+ text: `<${block.url}|${block.filename}>`,
461
+ },
462
+ });
463
+ break;
464
+ }
465
+ case 'button_group': {
466
+ const elements = block.buttons.map((btn) => {
467
+ if (btn.action === 'url') {
468
+ return {
469
+ type: 'button',
470
+ text: { type: 'plain_text', text: btn.label },
471
+ url: btn.value,
472
+ action_id: btn.id,
473
+ };
474
+ }
475
+ return {
476
+ type: 'button',
477
+ text: { type: 'plain_text', text: btn.label },
478
+ value: btn.value,
479
+ action_id: btn.id,
480
+ };
481
+ });
482
+ blocks.push({
483
+ type: 'actions',
484
+ elements,
485
+ });
486
+ break;
487
+ }
488
+ case 'embed': {
489
+ // Render embed as a rich section
490
+ const parts = [];
491
+ if (block.title) {
492
+ parts.push(block.url ? `*<${block.url}|${block.title}>*` : `*${block.title}*`);
493
+ }
494
+ if (block.description) {
495
+ parts.push(block.description);
496
+ }
497
+ if (block.fields) {
498
+ for (const field of block.fields) {
499
+ parts.push(`*${field.name}*: ${field.value}`);
500
+ }
501
+ }
502
+ if (parts.length > 0) {
503
+ blocks.push({
504
+ type: 'section',
505
+ text: {
506
+ type: 'mrkdwn',
507
+ text: parts.join('\n'),
508
+ },
509
+ });
510
+ }
511
+ break;
512
+ }
513
+ case 'poll': {
514
+ // Slack doesn't have native polls — render as a section with options
515
+ const optionLines = block.options
516
+ .map((opt, i) => `:${i + 1}: ${opt}`)
517
+ .join('\n');
518
+ blocks.push({
519
+ type: 'section',
520
+ text: {
521
+ type: 'mrkdwn',
522
+ text: `*${block.question}*\n${optionLines}`,
523
+ },
524
+ });
525
+ break;
526
+ }
527
+ default:
528
+ // Skip unsupported block types
529
+ break;
530
+ }
531
+ }
532
+ return blocks;
533
+ }
534
+ }
535
+ //# sourceMappingURL=SlackChannelAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SlackChannelAdapter.js","sourceRoot":"","sources":["../../../src/channels/adapters/SlackChannelAdapter.ts"],"names":[],"mappings":"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"}