From b8037a755c3a6bc4ce9ef0f9b495215c3371423e Mon Sep 17 00:00:00 2001 From: Hugo Dutka Date: Thu, 30 Oct 2025 17:27:21 +0100 Subject: [PATCH 1/2] fix: Slack createMessageFromEvent event types --- packages/slack/src/message.ts | 67 ++++++++++++++++++++++++++++++----- 1 file changed, 58 insertions(+), 9 deletions(-) diff --git a/packages/slack/src/message.ts b/packages/slack/src/message.ts index 1d0f398..0a278d1 100644 --- a/packages/slack/src/message.ts +++ b/packages/slack/src/message.ts @@ -1,6 +1,6 @@ import type { AnyBlock, - AppMentionEvent, + // AppMentionEvent, GenericMessageEvent, RichTextChannelMention, RichTextTeamMention, @@ -16,6 +16,7 @@ import type { } from "@slack/web-api"; import type { AssistantAppThreadBlock } from "@slack/web-api/dist/types/response/ChatPostMessageResponse"; import type { UIMessage } from "ai"; +import type { KnownEventFromType } from "@slack/bolt"; /** * Helps LLMs format messages for Slack. @@ -76,6 +77,20 @@ NEVER USE: - Double asterisks (**text**) - Slack doesn't support this - Standard markdown bold/italic conventions`; +/** + * These are the Slack event types that we currently support for automatically creating messages from events. + * The list is not exhaustive - we may want to add more in the future. + */ +type SlackEventType = + | "app_mention" + | "assistant_thread_started" + | "file_shared" + | "link_shared" + | "member_joined_channel" + | "message" + | "reaction_added" + | "reaction_removed"; + /** * CreateMessageFromEventOptions extends ExtractMessageDetailsFromEventOptions. * @@ -83,11 +98,8 @@ NEVER USE: * Feel free to use `extractMessageDetailsFromEvent` to construct your own message. */ export interface CreateMessageFromEventOptions - extends Omit< - ExtractMessagesMetadataOptions, - "messages" - > { - event: GenericMessageEvent | AppMentionEvent; + extends Omit, "messages"> { + event: KnownEventFromType; } export interface CreateMessageFromEventResult { @@ -105,7 +117,10 @@ export interface CreateMessageFromEventResult { export const createMessageFromEvent = async ( options: CreateMessageFromEventOptions ): Promise => { - const id = options.event.client_msg_id ?? crypto.randomUUID(); + const id = + ("client_msg_id" in options.event + ? options.event.client_msg_id + : undefined) ?? crypto.randomUUID(); const [botInfo, [response]] = await Promise.all([ options.client.auth @@ -122,7 +137,10 @@ export const createMessageFromEvent = async ( messages: [ { ...options.event, - files: options.event.files as GenericMessageEvent["files"], + files: + "files" in options.event + ? (options.event.files as GenericMessageEvent["files"]) + : undefined, }, ], supportedFileTypes: options.supportedFileTypes, @@ -132,10 +150,41 @@ export const createMessageFromEvent = async ( if (!response) { throw new Error("Failed to extract message metadata"); } + let message: CreatePartsFromMessageMetadataOptions["message"]; + switch (options.event.type) { + case "assistant_thread_started": + message = { + channel: options.event.assistant_thread.channel_id, + thread_ts: options.event.assistant_thread.thread_ts, + ts: options.event.event_ts, + }; + break; + case "file_shared": + message = { + channel: options.event.channel_id, + ts: options.event.event_ts, + }; + break; + case "reaction_added": + message = { + channel: options.event.item.channel, + ts: options.event.event_ts, + }; + break; + case "reaction_removed": + message = { + channel: options.event.item.channel, + ts: options.event.event_ts, + }; + break; + default: + message = options.event; + break; + } const parts = createPartsFromMessageMetadata({ metadata: response.metadata, botUserId: botInfo?.user_id, - message: options.event, + message, }); return { From 0a2fa2bd21ca4957e6b32ed86ed957bee2881b08 Mon Sep 17 00:00:00 2001 From: Hugo Dutka Date: Thu, 30 Oct 2025 18:55:36 +0100 Subject: [PATCH 2/2] chore: version 1.1.26 --- packages/blink/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/blink/package.json b/packages/blink/package.json index c52de67..9454a3e 100644 --- a/packages/blink/package.json +++ b/packages/blink/package.json @@ -1,6 +1,6 @@ { "name": "blink", - "version": "1.1.25", + "version": "1.1.26", "description": "Blink is a tool for building and deploying AI agents.", "type": "module", "bin": {