@elizaos/plugin-slack 2.0.0-alpha.3 → 2.0.0-alpha.5
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/index.js +2 -1
- package/dist/index.js.map +4 -4
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1987,6 +1987,7 @@ class SlackService extends Service {
|
|
|
1987
1987
|
botToken = null;
|
|
1988
1988
|
appToken = null;
|
|
1989
1989
|
signingSecret = null;
|
|
1990
|
+
userToken = undefined;
|
|
1990
1991
|
allowedChannelIds = new Set;
|
|
1991
1992
|
dynamicChannelIds = new Set;
|
|
1992
1993
|
userCache = new Map;
|
|
@@ -3208,4 +3209,4 @@ export {
|
|
|
3208
3209
|
DEFAULT_ACCOUNT_ID
|
|
3209
3210
|
};
|
|
3210
3211
|
|
|
3211
|
-
//# debugId=
|
|
3212
|
+
//# debugId=2E7E3AD8220B8E3964756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../src/actions/deleteMessage.ts", "../src/types.ts", "../src/actions/editMessage.ts", "../src/actions/emojiList.ts", "../src/actions/getUserInfo.ts", "../src/actions/listChannels.ts", "../src/actions/listPins.ts", "../src/actions/pinMessage.ts", "../src/actions/reactToMessage.ts", "../src/actions/readChannel.ts", "../src/actions/sendMessage.ts", "../src/actions/unpinMessage.ts", "../src/providers/channelState.ts", "../src/providers/memberList.ts", "../src/providers/workspaceInfo.ts", "../src/service.ts", "../src/accounts.ts", "../src/formatting.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import { type IAgentRuntime, logger, type Plugin } from \"@elizaos/core\";\nimport deleteMessage from \"./actions/deleteMessage\";\nimport editMessage from \"./actions/editMessage\";\nimport emojiList from \"./actions/emojiList\";\nimport getUserInfo from \"./actions/getUserInfo\";\nimport listChannels from \"./actions/listChannels\";\nimport listPins from \"./actions/listPins\";\nimport pinMessage from \"./actions/pinMessage\";\nimport reactToMessage from \"./actions/reactToMessage\";\nimport readChannel from \"./actions/readChannel\";\n// Actions\nimport sendMessage from \"./actions/sendMessage\";\nimport unpinMessage from \"./actions/unpinMessage\";\n\n// Providers\nimport { channelStateProvider } from \"./providers/channelState\";\nimport { memberListProvider } from \"./providers/memberList\";\nimport { workspaceInfoProvider } from \"./providers/workspaceInfo\";\n\n// Service\nimport { SlackService } from \"./service\";\n\nconst slackPlugin: Plugin = {\n name: \"slack\",\n description: \"Slack integration plugin for ElizaOS with Socket Mode support\",\n services: [SlackService],\n actions: [\n sendMessage,\n reactToMessage,\n readChannel,\n editMessage,\n deleteMessage,\n pinMessage,\n unpinMessage,\n listChannels,\n getUserInfo,\n listPins,\n emojiList,\n ],\n providers: [channelStateProvider, workspaceInfoProvider, memberListProvider],\n init: async (_config: Record<string, string>, runtime: IAgentRuntime) => {\n const botToken = runtime.getSetting(\"SLACK_BOT_TOKEN\") as string;\n const appToken = runtime.getSetting(\"SLACK_APP_TOKEN\") as string;\n const signingSecret = runtime.getSetting(\"SLACK_SIGNING_SECRET\") as string;\n const userToken = runtime.getSetting(\"SLACK_USER_TOKEN\") as string;\n const channelIds = runtime.getSetting(\"SLACK_CHANNEL_IDS\") as string;\n const ignoreBotMessages = runtime.getSetting(\n \"SLACK_SHOULD_IGNORE_BOT_MESSAGES\",\n ) as string;\n const respondOnlyToMentions = runtime.getSetting(\n \"SLACK_SHOULD_RESPOND_ONLY_TO_MENTIONS\",\n ) as string;\n\n // Log configuration status\n const maskToken = (token: string | undefined): string => {\n if (!token || token.trim() === \"\") return \"[not set]\";\n if (token.length <= 8) return \"***\";\n return `${token.slice(0, 4)}...${token.slice(-4)}`;\n };\n\n logger.info(\n {\n src: \"plugin:slack\",\n agentId: runtime.agentId,\n settings: {\n botToken: maskToken(botToken),\n appToken: maskToken(appToken),\n signingSecret: signingSecret ? \"[set]\" : \"[not set]\",\n userToken: maskToken(userToken),\n channelIds: channelIds || \"[all channels]\",\n ignoreBotMessages: ignoreBotMessages || \"false\",\n respondOnlyToMentions: respondOnlyToMentions || \"false\",\n },\n },\n \"Slack plugin initializing\",\n );\n\n if (!botToken || botToken.trim() === \"\") {\n logger.warn(\n { src: \"plugin:slack\", agentId: runtime.agentId },\n \"SLACK_BOT_TOKEN not provided - Slack plugin is loaded but will not be functional\",\n );\n logger.warn(\n { src: \"plugin:slack\", agentId: runtime.agentId },\n \"To enable Slack functionality, please provide SLACK_BOT_TOKEN in your .env file\",\n );\n return;\n }\n\n if (!appToken || appToken.trim() === \"\") {\n logger.warn(\n { src: \"plugin:slack\", agentId: runtime.agentId },\n \"SLACK_APP_TOKEN not provided - Socket Mode will not work\",\n );\n logger.warn(\n { src: \"plugin:slack\", agentId: runtime.agentId },\n \"To enable Socket Mode, please provide SLACK_APP_TOKEN in your .env file\",\n );\n return;\n }\n\n // Validate token formats\n if (!botToken.startsWith(\"xoxb-\")) {\n logger.warn(\n { src: \"plugin:slack\", agentId: runtime.agentId },\n \"SLACK_BOT_TOKEN should start with 'xoxb-'. Please verify your token.\",\n );\n }\n\n if (!appToken.startsWith(\"xapp-\")) {\n logger.warn(\n { src: \"plugin:slack\", agentId: runtime.agentId },\n \"SLACK_APP_TOKEN should start with 'xapp-'. Please verify your token.\",\n );\n }\n\n if (userToken && !userToken.startsWith(\"xoxp-\")) {\n logger.warn(\n { src: \"plugin:slack\", agentId: runtime.agentId },\n \"SLACK_USER_TOKEN should start with 'xoxp-'. Please verify your token.\",\n );\n }\n\n logger.info(\n { src: \"plugin:slack\", agentId: runtime.agentId },\n \"Slack plugin configuration validated successfully\",\n );\n },\n};\n\nexport default slackPlugin;\n\n// Account management exports\nexport {\n DEFAULT_ACCOUNT_ID,\n isMultiAccountEnabled,\n listEnabledSlackAccounts,\n listSlackAccountIds,\n normalizeAccountId,\n type ResolvedSlackAccount,\n resolveDefaultSlackAccountId,\n resolveSlackAccount,\n resolveSlackAppToken,\n resolveSlackBotToken,\n resolveSlackReplyToMode,\n resolveSlackUserToken,\n type SlackAccountConfig,\n type SlackActionConfig,\n type SlackChannelConfig,\n type SlackDmConfig,\n type SlackMultiAccountConfig,\n type SlackReactionNotificationMode,\n type SlackSlashCommandConfig,\n type SlackTokenSource,\n} from \"./accounts\";\nexport { deleteMessage } from \"./actions/deleteMessage\";\nexport { editMessage } from \"./actions/editMessage\";\nexport { emojiList } from \"./actions/emojiList\";\nexport { getUserInfo } from \"./actions/getUserInfo\";\nexport { listChannels } from \"./actions/listChannels\";\nexport { listPins } from \"./actions/listPins\";\nexport { pinMessage } from \"./actions/pinMessage\";\nexport { reactToMessage } from \"./actions/reactToMessage\";\nexport { readChannel } from \"./actions/readChannel\";\n// Export actions\nexport { sendMessage } from \"./actions/sendMessage\";\nexport { unpinMessage } from \"./actions/unpinMessage\";\n// Formatting exports\nexport {\n buildSlackMessagePermalink,\n type ChunkSlackTextOpts,\n chunkSlackText,\n escapeSlackMrkdwn,\n extractChannelIdFromMention,\n extractUrlFromSlackLink,\n extractUserIdFromMention,\n formatSlackChannel,\n formatSlackChannelMention,\n formatSlackDate,\n formatSlackLink,\n formatSlackSpecialMention,\n formatSlackUserDisplayName,\n formatSlackUserGroupMention,\n formatSlackUserMention,\n getChannelTypeString,\n isDirectMessage,\n isGroupDm,\n isPrivateChannel,\n markdownToSlackMrkdwn,\n markdownToSlackMrkdwnChunks,\n parseSlackMessagePermalink,\n resolveSlackSystemLocation,\n stripSlackFormatting,\n truncateText,\n} from \"./formatting\";\n// Export providers\nexport { channelStateProvider } from \"./providers/channelState\";\nexport { memberListProvider } from \"./providers/memberList\";\nexport { workspaceInfoProvider } from \"./providers/workspaceInfo\";\n// Export service for direct access\nexport { SlackService } from \"./service\";\n// Export types\nexport type {\n ISlackService,\n SlackChannel,\n SlackChannelType,\n SlackEventPayloadMap,\n SlackFile,\n SlackMessage,\n SlackMessageReceivedPayload,\n SlackMessageSendOptions,\n SlackMessageSentPayload,\n SlackReaction,\n SlackReactionPayload,\n SlackSettings,\n SlackTeam,\n SlackUser,\n SlackUserProfile,\n} from \"./types\";\nexport {\n formatMessageTsForLink,\n getSlackChannelType,\n getSlackUserDisplayName,\n isValidChannelId,\n isValidMessageTs,\n isValidTeamId,\n isValidUserId,\n MAX_SLACK_BLOCKS,\n MAX_SLACK_FILE_SIZE,\n MAX_SLACK_MESSAGE_LENGTH,\n parseSlackMessageLink,\n SLACK_SERVICE_NAME,\n SlackApiError,\n SlackClientNotAvailableError,\n SlackConfigurationError,\n SlackEventTypes,\n SlackPluginError,\n SlackServiceNotInitializedError,\n} from \"./types\";\n",
|
|
5
|
+
"import { type IAgentRuntime, logger, type Plugin } from \"@elizaos/core\";\nimport deleteMessage from \"./actions/deleteMessage\";\nimport editMessage from \"./actions/editMessage\";\nimport emojiList from \"./actions/emojiList\";\nimport getUserInfo from \"./actions/getUserInfo\";\nimport listChannels from \"./actions/listChannels\";\nimport listPins from \"./actions/listPins\";\nimport pinMessage from \"./actions/pinMessage\";\nimport reactToMessage from \"./actions/reactToMessage\";\nimport readChannel from \"./actions/readChannel\";\n// Actions\nimport sendMessage from \"./actions/sendMessage\";\nimport unpinMessage from \"./actions/unpinMessage\";\n\n// Providers\nimport { channelStateProvider } from \"./providers/channelState\";\nimport { memberListProvider } from \"./providers/memberList\";\nimport { workspaceInfoProvider } from \"./providers/workspaceInfo\";\n\n// Service\nimport { SlackService } from \"./service\";\n\nconst slackPlugin: Plugin = {\n name: \"slack\",\n description: \"Slack integration plugin for ElizaOS with Socket Mode support\",\n services: [SlackService],\n actions: [\n sendMessage,\n reactToMessage,\n readChannel,\n editMessage,\n deleteMessage,\n pinMessage,\n unpinMessage,\n listChannels,\n getUserInfo,\n listPins,\n emojiList,\n ],\n providers: [channelStateProvider, workspaceInfoProvider, memberListProvider],\n init: async (_config: Record<string, string>, runtime: IAgentRuntime) => {\n const botToken = runtime.getSetting(\"SLACK_BOT_TOKEN\") as string;\n const appToken = runtime.getSetting(\"SLACK_APP_TOKEN\") as string;\n const signingSecret = runtime.getSetting(\"SLACK_SIGNING_SECRET\") as string;\n const userToken = runtime.getSetting(\"SLACK_USER_TOKEN\") as string;\n const channelIds = runtime.getSetting(\"SLACK_CHANNEL_IDS\") as string;\n const ignoreBotMessages = runtime.getSetting(\n \"SLACK_SHOULD_IGNORE_BOT_MESSAGES\",\n ) as string;\n const respondOnlyToMentions = runtime.getSetting(\n \"SLACK_SHOULD_RESPOND_ONLY_TO_MENTIONS\",\n ) as string;\n\n // Log configuration status\n const maskToken = (token: string | undefined): string => {\n if (!token || token.trim() === \"\") return \"[not set]\";\n if (token.length <= 8) return \"***\";\n return `${token.slice(0, 4)}...${token.slice(-4)}`;\n };\n\n logger.info(\n {\n src: \"plugin:slack\",\n agentId: runtime.agentId,\n settings: {\n botToken: maskToken(botToken),\n appToken: maskToken(appToken),\n signingSecret: signingSecret ? \"[set]\" : \"[not set]\",\n userToken: maskToken(userToken),\n channelIds: channelIds || \"[all channels]\",\n ignoreBotMessages: ignoreBotMessages || \"false\",\n respondOnlyToMentions: respondOnlyToMentions || \"false\",\n },\n },\n \"Slack plugin initializing\",\n );\n\n if (!botToken || botToken.trim() === \"\") {\n logger.warn(\n { src: \"plugin:slack\", agentId: runtime.agentId },\n \"SLACK_BOT_TOKEN not provided - Slack plugin is loaded but will not be functional\",\n );\n logger.warn(\n { src: \"plugin:slack\", agentId: runtime.agentId },\n \"To enable Slack functionality, please provide SLACK_BOT_TOKEN in your .env file\",\n );\n return;\n }\n\n if (!appToken || appToken.trim() === \"\") {\n logger.warn(\n { src: \"plugin:slack\", agentId: runtime.agentId },\n \"SLACK_APP_TOKEN not provided - Socket Mode will not work\",\n );\n logger.warn(\n { src: \"plugin:slack\", agentId: runtime.agentId },\n \"To enable Socket Mode, please provide SLACK_APP_TOKEN in your .env file\",\n );\n return;\n }\n\n // Validate token formats\n if (!botToken.startsWith(\"xoxb-\")) {\n logger.warn(\n { src: \"plugin:slack\", agentId: runtime.agentId },\n \"SLACK_BOT_TOKEN should start with 'xoxb-'. Please verify your token.\",\n );\n }\n\n if (!appToken.startsWith(\"xapp-\")) {\n logger.warn(\n { src: \"plugin:slack\", agentId: runtime.agentId },\n \"SLACK_APP_TOKEN should start with 'xapp-'. Please verify your token.\",\n );\n }\n\n if (userToken && !userToken.startsWith(\"xoxp-\")) {\n logger.warn(\n { src: \"plugin:slack\", agentId: runtime.agentId },\n \"SLACK_USER_TOKEN should start with 'xoxp-'. Please verify your token.\",\n );\n }\n\n logger.info(\n { src: \"plugin:slack\", agentId: runtime.agentId },\n \"Slack plugin configuration validated successfully\",\n );\n },\n};\n\nexport default slackPlugin;\n\n// Account management exports\nexport {\n DEFAULT_ACCOUNT_ID,\n isMultiAccountEnabled,\n listEnabledSlackAccounts,\n listSlackAccountIds,\n normalizeAccountId,\n type ResolvedSlackAccount,\n resolveDefaultSlackAccountId,\n resolveSlackAccount,\n resolveSlackAppToken,\n resolveSlackBotToken,\n resolveSlackReplyToMode,\n resolveSlackUserToken,\n type SlackAccountConfig,\n type SlackActionConfig,\n type SlackChannelConfig,\n type SlackDmConfig,\n type SlackMultiAccountConfig,\n type SlackReactionNotificationMode,\n type SlackSlashCommandConfig,\n type SlackTokenSource,\n} from \"./accounts\";\nexport { deleteMessage } from \"./actions/deleteMessage\";\nexport { editMessage } from \"./actions/editMessage\";\nexport { emojiList } from \"./actions/emojiList\";\nexport { getUserInfo } from \"./actions/getUserInfo\";\nexport { listChannels } from \"./actions/listChannels\";\nexport { listPins } from \"./actions/listPins\";\nexport { pinMessage } from \"./actions/pinMessage\";\nexport { reactToMessage } from \"./actions/reactToMessage\";\nexport { readChannel } from \"./actions/readChannel\";\n// Export actions\nexport { sendMessage } from \"./actions/sendMessage\";\nexport { unpinMessage } from \"./actions/unpinMessage\";\n// Channel configuration types\nexport type {\n SlackConfig,\n SlackThreadConfig,\n} from \"./config\";\n// Formatting exports\nexport {\n buildSlackMessagePermalink,\n type ChunkSlackTextOpts,\n chunkSlackText,\n escapeSlackMrkdwn,\n extractChannelIdFromMention,\n extractUrlFromSlackLink,\n extractUserIdFromMention,\n formatSlackChannel,\n formatSlackChannelMention,\n formatSlackDate,\n formatSlackLink,\n formatSlackSpecialMention,\n formatSlackUserDisplayName,\n formatSlackUserGroupMention,\n formatSlackUserMention,\n getChannelTypeString,\n isDirectMessage,\n isGroupDm,\n isPrivateChannel,\n markdownToSlackMrkdwn,\n markdownToSlackMrkdwnChunks,\n parseSlackMessagePermalink,\n resolveSlackSystemLocation,\n stripSlackFormatting,\n truncateText,\n} from \"./formatting\";\n// Export providers\nexport { channelStateProvider } from \"./providers/channelState\";\nexport { memberListProvider } from \"./providers/memberList\";\nexport { workspaceInfoProvider } from \"./providers/workspaceInfo\";\n// Export service for direct access\nexport { SlackService } from \"./service\";\n// Export types\nexport type {\n ISlackService,\n SlackChannel,\n SlackChannelType,\n SlackEventPayloadMap,\n SlackFile,\n SlackMessage,\n SlackMessageReceivedPayload,\n SlackMessageSendOptions,\n SlackMessageSentPayload,\n SlackReaction,\n SlackReactionPayload,\n SlackSettings,\n SlackTeam,\n SlackUser,\n SlackUserProfile,\n} from \"./types\";\nexport {\n formatMessageTsForLink,\n getSlackChannelType,\n getSlackUserDisplayName,\n isValidChannelId,\n isValidMessageTs,\n isValidTeamId,\n isValidUserId,\n MAX_SLACK_BLOCKS,\n MAX_SLACK_FILE_SIZE,\n MAX_SLACK_MESSAGE_LENGTH,\n parseSlackMessageLink,\n SLACK_SERVICE_NAME,\n SlackApiError,\n SlackClientNotAvailableError,\n SlackConfigurationError,\n SlackEventTypes,\n SlackPluginError,\n SlackServiceNotInitializedError,\n} from \"./types\";\n",
|
|
6
6
|
"import {\n type Action,\n type ActionExample,\n type ActionResult,\n type Content,\n composePromptFromState,\n type HandlerCallback,\n type HandlerOptions,\n type IAgentRuntime,\n type Memory,\n ModelType,\n parseJSONObjectFromText,\n type State,\n} from \"@elizaos/core\";\nimport type { SlackService } from \"../service\";\nimport { isValidMessageTs, SLACK_SERVICE_NAME } from \"../types\";\n\nconst deleteMessageTemplate = `You are helping to extract delete message parameters for Slack.\n\nThe user wants to delete a Slack message.\n\nRecent conversation:\n{{recentMessages}}\n\nExtract the following:\n1. messageTs: The message timestamp to delete (format: 1234567890.123456)\n2. channelId: The channel ID (optional, defaults to current channel)\n\nRespond with a JSON object like:\n{\n \"messageTs\": \"1234567890.123456\",\n \"channelId\": null\n}\n\nOnly respond with the JSON object, no other text.`;\n\nexport const deleteMessage: Action = {\n name: \"SLACK_DELETE_MESSAGE\",\n similes: [\"REMOVE_SLACK_MESSAGE\", \"DELETE_MESSAGE\", \"SLACK_REMOVE\"],\n description: \"Delete a Slack message\",\n validate: async (\n _runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n ): Promise<boolean> => {\n return message.content.source === \"slack\";\n },\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state?: State,\n _options?: HandlerOptions,\n callback?: HandlerCallback,\n ): Promise<ActionResult | undefined> => {\n const slackService = runtime.getService(SLACK_SERVICE_NAME) as SlackService;\n\n if (!slackService || !slackService.client) {\n await callback?.({\n text: \"Slack service is not available.\",\n source: \"slack\",\n });\n return { success: false, error: \"Slack service not available\" };\n }\n\n const prompt = composePromptFromState({\n state,\n template: deleteMessageTemplate,\n });\n\n let deleteInfo: {\n messageTs: string;\n channelId?: string | null;\n } | null = null;\n\n for (let attempt = 0; attempt < 3; attempt++) {\n const response = await runtime.useModel(ModelType.TEXT_SMALL, {\n prompt,\n });\n\n const parsedResponse = parseJSONObjectFromText(response);\n if (parsedResponse?.messageTs) {\n deleteInfo = {\n messageTs: String(parsedResponse.messageTs),\n channelId: parsedResponse.channelId\n ? String(parsedResponse.channelId)\n : null,\n };\n break;\n }\n }\n\n if (!deleteInfo || !deleteInfo.messageTs) {\n runtime.logger.debug(\n { src: \"plugin:slack:action:delete-message\" },\n \"[SLACK_DELETE_MESSAGE] Could not extract delete info\",\n );\n await callback?.({\n text: \"I couldn't understand which message to delete. Please specify the message timestamp.\",\n source: \"slack\",\n });\n return { success: false, error: \"Could not extract delete parameters\" };\n }\n\n if (!isValidMessageTs(deleteInfo.messageTs)) {\n await callback?.({\n text: \"The message timestamp format is invalid. Please provide a valid Slack message timestamp.\",\n source: \"slack\",\n });\n return { success: false, error: \"Invalid message timestamp\" };\n }\n\n const stateData = state?.data;\n const room = stateData?.room || (await runtime.getRoom(message.roomId));\n const channelId = deleteInfo.channelId || room?.channelId;\n\n if (!channelId) {\n await callback?.({\n text: \"I couldn't determine the channel for the message deletion.\",\n source: \"slack\",\n });\n return { success: false, error: \"Could not determine channel\" };\n }\n\n await slackService.deleteMessage(channelId, deleteInfo.messageTs);\n\n const response: Content = {\n text: \"Message deleted successfully.\",\n source: message.content.source,\n };\n\n runtime.logger.debug(\n {\n src: \"plugin:slack:action:delete-message\",\n messageTs: deleteInfo.messageTs,\n channelId,\n },\n \"[SLACK_DELETE_MESSAGE] Message deleted\",\n );\n\n await callback?.(response);\n\n return {\n success: true,\n data: {\n messageTs: deleteInfo.messageTs,\n channelId,\n },\n };\n },\n examples: [\n [\n {\n name: \"{{user1}}\",\n content: {\n text: \"Delete that last message I sent\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"I'll delete that message for you.\",\n actions: [\"SLACK_DELETE_MESSAGE\"],\n },\n },\n ],\n ] as ActionExample[][],\n};\n\nexport default deleteMessage;\n",
|
|
7
7
|
"import type {\n Character,\n EntityPayload,\n EventPayload,\n MessagePayload,\n WorldPayload,\n} from \"@elizaos/core\";\nimport type { App as BoltApp } from \"@slack/bolt\";\nimport type { WebClient } from \"@slack/web-api\";\n\n/**\n * Slack-specific event types\n */\nexport enum SlackEventTypes {\n MESSAGE_RECEIVED = \"SLACK_MESSAGE_RECEIVED\",\n MESSAGE_SENT = \"SLACK_MESSAGE_SENT\",\n REACTION_ADDED = \"SLACK_REACTION_ADDED\",\n REACTION_REMOVED = \"SLACK_REACTION_REMOVED\",\n CHANNEL_JOINED = \"SLACK_CHANNEL_JOINED\",\n CHANNEL_LEFT = \"SLACK_CHANNEL_LEFT\",\n MEMBER_JOINED_CHANNEL = \"SLACK_MEMBER_JOINED_CHANNEL\",\n MEMBER_LEFT_CHANNEL = \"SLACK_MEMBER_LEFT_CHANNEL\",\n APP_MENTION = \"SLACK_APP_MENTION\",\n SLASH_COMMAND = \"SLACK_SLASH_COMMAND\",\n FILE_SHARED = \"SLACK_FILE_SHARED\",\n THREAD_REPLY = \"SLACK_THREAD_REPLY\",\n}\n\nexport interface SlackMessageReceivedPayload extends MessagePayload {\n channelId: string;\n threadTs: string | undefined;\n userId: string;\n teamId: string | undefined;\n isThreadReply: boolean;\n files: SlackFile[];\n}\n\nexport interface SlackMessageSentPayload extends MessagePayload {\n channelId: string;\n threadTs: string | undefined;\n messageTs: string;\n}\n\nexport interface SlackReactionPayload extends EventPayload {\n reaction: string;\n userId: string;\n channelId: string;\n messageTs: string;\n itemUser: string | undefined;\n}\n\nexport interface SlackChannelPayload extends WorldPayload {\n channelId: string;\n channelName: string;\n channelType: SlackChannelType;\n}\n\nexport interface SlackMemberPayload extends EntityPayload {\n userId: string;\n channelId: string;\n}\n\nexport interface SlackAppMentionPayload extends MessagePayload {\n channelId: string;\n userId: string;\n threadTs: string | undefined;\n}\n\nexport interface SlackSlashCommandPayload extends EventPayload {\n command: string;\n text: string;\n userId: string;\n channelId: string;\n teamId: string;\n responseUrl: string;\n triggerId: string;\n}\n\nexport interface SlackFile {\n id: string;\n name: string;\n title: string;\n mimetype: string;\n filetype: string;\n size: number;\n urlPrivate: string;\n urlPrivateDownload: string | undefined;\n permalink: string;\n thumb64: string | undefined;\n thumb80: string | undefined;\n thumb360: string | undefined;\n}\n\nexport type SlackChannelType = \"channel\" | \"group\" | \"im\" | \"mpim\";\n\nexport interface SlackEventPayloadMap {\n [SlackEventTypes.MESSAGE_RECEIVED]: SlackMessageReceivedPayload;\n [SlackEventTypes.MESSAGE_SENT]: SlackMessageSentPayload;\n [SlackEventTypes.REACTION_ADDED]: SlackReactionPayload;\n [SlackEventTypes.REACTION_REMOVED]: SlackReactionPayload;\n [SlackEventTypes.CHANNEL_JOINED]: SlackChannelPayload;\n [SlackEventTypes.CHANNEL_LEFT]: SlackChannelPayload;\n [SlackEventTypes.MEMBER_JOINED_CHANNEL]: SlackMemberPayload;\n [SlackEventTypes.MEMBER_LEFT_CHANNEL]: SlackMemberPayload;\n [SlackEventTypes.APP_MENTION]: SlackAppMentionPayload;\n [SlackEventTypes.SLASH_COMMAND]: SlackSlashCommandPayload;\n [SlackEventTypes.FILE_SHARED]: SlackMessageReceivedPayload;\n [SlackEventTypes.THREAD_REPLY]: SlackMessageReceivedPayload;\n}\n\nexport interface SlackUser {\n id: string;\n teamId: string | undefined;\n name: string;\n deleted: boolean;\n realName: string | undefined;\n tz: string | undefined;\n tzLabel: string | undefined;\n tzOffset: number | undefined;\n profile: SlackUserProfile;\n isAdmin: boolean;\n isOwner: boolean;\n isPrimaryOwner: boolean;\n isRestricted: boolean;\n isUltraRestricted: boolean;\n isBot: boolean;\n isAppUser: boolean;\n updated: number;\n}\n\nexport interface SlackUserProfile {\n title: string | undefined;\n phone: string | undefined;\n skype: string | undefined;\n realName: string | undefined;\n realNameNormalized: string | undefined;\n displayName: string | undefined;\n displayNameNormalized: string | undefined;\n statusText: string | undefined;\n statusEmoji: string | undefined;\n statusExpiration: number | undefined;\n avatarHash: string | undefined;\n email: string | undefined;\n image24: string | undefined;\n image32: string | undefined;\n image48: string | undefined;\n image72: string | undefined;\n image192: string | undefined;\n image512: string | undefined;\n image1024: string | undefined;\n imageOriginal: string | undefined;\n team: string | undefined;\n}\n\nexport interface SlackChannel {\n id: string;\n name: string;\n isChannel: boolean;\n isGroup: boolean;\n isIm: boolean;\n isMpim: boolean;\n isPrivate: boolean;\n isArchived: boolean;\n isGeneral: boolean;\n isShared: boolean;\n isOrgShared: boolean;\n isMember: boolean;\n topic: SlackChannelTopic | undefined;\n purpose: SlackChannelPurpose | undefined;\n numMembers: number | undefined;\n created: number;\n creator: string;\n}\n\nexport interface SlackChannelTopic {\n value: string;\n creator: string;\n lastSet: number;\n}\n\nexport interface SlackChannelPurpose {\n value: string;\n creator: string;\n lastSet: number;\n}\n\nexport interface SlackMessage {\n type: string;\n subtype: string | undefined;\n ts: string;\n user: string | undefined;\n text: string;\n threadTs: string | undefined;\n replyCount: number | undefined;\n replyUsersCount: number | undefined;\n latestReply: string | undefined;\n reactions: SlackReaction[] | undefined;\n files: SlackFile[] | undefined;\n attachments: SlackAttachment[] | undefined;\n blocks: SlackBlock[] | undefined;\n}\n\nexport interface SlackReaction {\n name: string;\n count: number;\n users: string[];\n}\n\nexport interface SlackAttachment {\n id: number;\n fallback: string | undefined;\n color: string | undefined;\n pretext: string | undefined;\n authorName: string | undefined;\n authorLink: string | undefined;\n authorIcon: string | undefined;\n title: string | undefined;\n titleLink: string | undefined;\n text: string | undefined;\n fields: SlackAttachmentField[] | undefined;\n imageUrl: string | undefined;\n thumbUrl: string | undefined;\n footer: string | undefined;\n footerIcon: string | undefined;\n ts: string | undefined;\n}\n\nexport interface SlackAttachmentField {\n title: string;\n value: string;\n short: boolean;\n}\n\nexport interface SlackBlock {\n type: string;\n blockId: string | undefined;\n elements: SlackBlockElement[] | undefined;\n text: SlackBlockText | undefined;\n}\n\nexport interface SlackBlockElement {\n type: string;\n text: SlackBlockText | undefined;\n actionId: string | undefined;\n url: string | undefined;\n value: string | undefined;\n style: string | undefined;\n}\n\nexport interface SlackBlockText {\n type: string;\n text: string;\n emoji: boolean | undefined;\n verbatim: boolean | undefined;\n}\n\nexport interface SlackTeam {\n id: string;\n name: string;\n domain: string;\n emailDomain: string | undefined;\n icon: SlackTeamIcon;\n}\n\nexport interface SlackTeamIcon {\n image34: string | undefined;\n image44: string | undefined;\n image68: string | undefined;\n image88: string | undefined;\n image102: string | undefined;\n image132: string | undefined;\n image230: string | undefined;\n imageDefault: boolean;\n}\n\nexport interface ISlackService {\n app: BoltApp | null;\n client: WebClient | null;\n character: Character;\n botUserId: string | null;\n teamId: string | null;\n}\n\nexport const SLACK_SERVICE_NAME = \"slack\";\n\nexport const ServiceType = {\n SLACK: \"slack\",\n} as const;\n\nexport interface SlackSettings {\n allowedChannelIds: string[] | undefined;\n shouldIgnoreBotMessages: boolean;\n shouldRespondOnlyToMentions: boolean;\n}\n\nexport interface SlackMessageSendOptions {\n threadTs: string | undefined;\n replyBroadcast: boolean | undefined;\n unfurlLinks: boolean | undefined;\n unfurlMedia: boolean | undefined;\n mrkdwn: boolean | undefined;\n attachments: SlackAttachment[] | undefined;\n blocks: SlackBlock[] | undefined;\n}\n\nexport class SlackPluginError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n ) {\n super(message);\n this.name = \"SlackPluginError\";\n }\n}\n\nexport class SlackServiceNotInitializedError extends SlackPluginError {\n constructor() {\n super(\"Slack service is not initialized\", \"SERVICE_NOT_INITIALIZED\");\n this.name = \"SlackServiceNotInitializedError\";\n }\n}\n\nexport class SlackClientNotAvailableError extends SlackPluginError {\n constructor() {\n super(\"Slack client is not available\", \"CLIENT_NOT_AVAILABLE\");\n this.name = \"SlackClientNotAvailableError\";\n }\n}\n\nexport class SlackConfigurationError extends SlackPluginError {\n constructor(missingConfig: string) {\n super(`Missing required configuration: ${missingConfig}`, \"MISSING_CONFIG\");\n this.name = \"SlackConfigurationError\";\n }\n}\n\nexport class SlackApiError extends SlackPluginError {\n constructor(\n message: string,\n public readonly apiErrorCode: string | undefined,\n ) {\n super(message, \"API_ERROR\");\n this.name = \"SlackApiError\";\n }\n}\n\n/**\n * Validates a Slack channel ID format\n */\nexport function isValidChannelId(id: string): boolean {\n // Slack channel IDs start with C (public), G (private/group), or D (DM)\n return /^[CGD][A-Z0-9]{8,}$/i.test(id);\n}\n\n/**\n * Validates a Slack user ID format\n */\nexport function isValidUserId(id: string): boolean {\n // Slack user IDs start with U or W (enterprise grid)\n return /^[UW][A-Z0-9]{8,}$/i.test(id);\n}\n\n/**\n * Validates a Slack team ID format\n */\nexport function isValidTeamId(id: string): boolean {\n // Slack team IDs start with T\n return /^T[A-Z0-9]{8,}$/i.test(id);\n}\n\n/**\n * Validates a Slack message timestamp format\n */\nexport function isValidMessageTs(ts: string): boolean {\n // Slack timestamps are in the format: 1234567890.123456\n return /^\\d+\\.\\d{6}$/.test(ts);\n}\n\n/**\n * Parses a Slack message link to extract channel and message IDs\n */\nexport function parseSlackMessageLink(\n link: string,\n): { channelId: string; messageTs: string } | null {\n // Format: https://workspace.slack.com/archives/C12345678/p1234567890123456\n const match = link.match(/\\/archives\\/([CGD][A-Z0-9]+)\\/p(\\d+)/i);\n if (!match) return null;\n\n const channelId = match[1];\n const ts = match[2];\n // Convert the timestamp: p1234567890123456 -> 1234567890.123456\n const messageTs = `${ts.slice(0, 10)}.${ts.slice(10)}`;\n\n return { channelId, messageTs };\n}\n\n/**\n * Formats a message timestamp for use in Slack links\n */\nexport function formatMessageTsForLink(ts: string): string {\n // Convert: 1234567890.123456 -> p1234567890123456\n return `p${ts.replace(\".\", \"\")}`;\n}\n\n/**\n * Gets the display name for a Slack user\n */\nexport function getSlackUserDisplayName(user: SlackUser): string {\n return user.profile.displayName || user.profile.realName || user.name;\n}\n\n/**\n * Determines the channel type from a Slack channel object\n */\nexport function getSlackChannelType(channel: SlackChannel): SlackChannelType {\n if (channel.isIm) return \"im\";\n if (channel.isMpim) return \"mpim\";\n if (channel.isGroup || channel.isPrivate) return \"group\";\n return \"channel\";\n}\n\n/**\n * Maximum message length for Slack messages\n */\nexport const MAX_SLACK_MESSAGE_LENGTH = 4000;\n\n/**\n * Maximum number of blocks per message\n */\nexport const MAX_SLACK_BLOCKS = 50;\n\n/**\n * Maximum file size for uploads (in bytes) - 1GB for paid, varies for free\n */\nexport const MAX_SLACK_FILE_SIZE = 1024 * 1024 * 1024;\n",
|
|
8
8
|
"import {\n type Action,\n type ActionExample,\n type ActionResult,\n type Content,\n composePromptFromState,\n type HandlerCallback,\n type HandlerOptions,\n type IAgentRuntime,\n type Memory,\n ModelType,\n parseJSONObjectFromText,\n type State,\n} from \"@elizaos/core\";\nimport type { SlackService } from \"../service\";\nimport { isValidMessageTs, SLACK_SERVICE_NAME } from \"../types\";\n\nconst editMessageTemplate = `You are helping to extract edit message parameters for Slack.\n\nThe user wants to edit an existing Slack message.\n\nRecent conversation:\n{{recentMessages}}\n\nExtract the following:\n1. messageTs: The message timestamp to edit (format: 1234567890.123456)\n2. newText: The new text content for the message\n3. channelId: The channel ID (optional, defaults to current channel)\n\nRespond with a JSON object like:\n{\n \"messageTs\": \"1234567890.123456\",\n \"newText\": \"The updated message content\",\n \"channelId\": null\n}\n\nOnly respond with the JSON object, no other text.`;\n\nexport const editMessage: Action = {\n name: \"SLACK_EDIT_MESSAGE\",\n similes: [\n \"UPDATE_SLACK_MESSAGE\",\n \"MODIFY_MESSAGE\",\n \"CHANGE_MESSAGE\",\n \"SLACK_UPDATE\",\n ],\n description: \"Edit an existing Slack message\",\n validate: async (\n _runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n ): Promise<boolean> => {\n return message.content.source === \"slack\";\n },\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state?: State,\n _options?: HandlerOptions,\n callback?: HandlerCallback,\n ): Promise<ActionResult | undefined> => {\n const slackService = runtime.getService(SLACK_SERVICE_NAME) as SlackService;\n\n if (!slackService || !slackService.client) {\n await callback?.({\n text: \"Slack service is not available.\",\n source: \"slack\",\n });\n return { success: false, error: \"Slack service not available\" };\n }\n\n const prompt = composePromptFromState({\n state,\n template: editMessageTemplate,\n });\n\n let editInfo: {\n messageTs: string;\n newText: string;\n channelId?: string | null;\n } | null = null;\n\n for (let attempt = 0; attempt < 3; attempt++) {\n const response = await runtime.useModel(ModelType.TEXT_SMALL, {\n prompt,\n });\n\n const parsedResponse = parseJSONObjectFromText(response);\n if (parsedResponse?.messageTs && parsedResponse?.newText) {\n editInfo = {\n messageTs: String(parsedResponse.messageTs),\n newText: String(parsedResponse.newText),\n channelId: parsedResponse.channelId\n ? String(parsedResponse.channelId)\n : null,\n };\n break;\n }\n }\n\n if (!editInfo || !editInfo.messageTs || !editInfo.newText) {\n runtime.logger.debug(\n { src: \"plugin:slack:action:edit-message\" },\n \"[SLACK_EDIT_MESSAGE] Could not extract edit info\",\n );\n await callback?.({\n text: \"I couldn't understand the edit request. Please specify the message timestamp and new content.\",\n source: \"slack\",\n });\n return { success: false, error: \"Could not extract edit parameters\" };\n }\n\n if (!isValidMessageTs(editInfo.messageTs)) {\n await callback?.({\n text: \"The message timestamp format is invalid. Please provide a valid Slack message timestamp.\",\n source: \"slack\",\n });\n return { success: false, error: \"Invalid message timestamp\" };\n }\n\n const stateData = state?.data;\n const room = stateData?.room || (await runtime.getRoom(message.roomId));\n const channelId = editInfo.channelId || room?.channelId;\n\n if (!channelId) {\n await callback?.({\n text: \"I couldn't determine the channel for the message edit.\",\n source: \"slack\",\n });\n return { success: false, error: \"Could not determine channel\" };\n }\n\n await slackService.editMessage(\n channelId,\n editInfo.messageTs,\n editInfo.newText,\n );\n\n const response: Content = {\n text: \"Message edited successfully.\",\n source: message.content.source,\n };\n\n runtime.logger.debug(\n {\n src: \"plugin:slack:action:edit-message\",\n messageTs: editInfo.messageTs,\n channelId,\n },\n \"[SLACK_EDIT_MESSAGE] Message edited\",\n );\n\n await callback?.(response);\n\n return {\n success: true,\n data: {\n messageTs: editInfo.messageTs,\n channelId,\n newText: editInfo.newText,\n },\n };\n },\n examples: [\n [\n {\n name: \"{{user1}}\",\n content: {\n text: \"Edit that message to say 'Meeting at 3pm' instead\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"I'll update that message for you.\",\n actions: [\"SLACK_EDIT_MESSAGE\"],\n },\n },\n ],\n ] as ActionExample[][],\n};\n\nexport default editMessage;\n",
|
|
@@ -18,11 +18,11 @@
|
|
|
18
18
|
"import type { IAgentRuntime, Memory, Provider, State } from \"@elizaos/core\";\nimport type { SlackService } from \"../service\";\nimport { getSlackChannelType, ServiceType } from \"../types\";\n\n/**\n * Provider for retrieving Slack channel state information.\n */\nexport const channelStateProvider: Provider = {\n name: \"slackChannelState\",\n description: \"Provides information about the current Slack channel context\",\n get: async (runtime: IAgentRuntime, message: Memory, state: State) => {\n const room = state.data?.room ?? (await runtime.getRoom(message.roomId));\n if (!room) {\n return {\n data: {},\n values: {},\n text: \"\",\n };\n }\n\n // If message source is not slack, return empty\n if (message.content.source !== \"slack\") {\n return {\n data: {},\n values: {},\n text: \"\",\n };\n }\n\n const agentName = state?.agentName || \"The agent\";\n const senderName = state?.senderName || \"someone\";\n\n let responseText = \"\";\n let channelType = \"\";\n let workspaceName = \"\";\n let channelName = \"\";\n const channelId = room.channelId ?? \"\";\n const threadTs = room.metadata?.threadTs as string | undefined;\n\n const slackService = runtime.getService(ServiceType.SLACK) as SlackService;\n if (!slackService || !slackService.client) {\n runtime.logger.warn(\n {\n src: \"plugin:slack:provider:channelState\",\n agentId: runtime.agentId,\n channelId,\n },\n \"No Slack client found\",\n );\n return {\n data: {\n room,\n channelType: \"unknown\",\n channelId,\n },\n values: {\n channelType: \"unknown\",\n channelId,\n },\n text: \"\",\n };\n }\n\n // Get channel info\n const channel = channelId ? await slackService.getChannel(channelId) : null;\n if (channel) {\n channelName = channel.name;\n const slackChannelType = getSlackChannelType(channel);\n\n if (slackChannelType === \"im\") {\n channelType = \"DM\";\n responseText = `${agentName} is currently in a direct message conversation with ${senderName} on Slack. ${agentName} should engage in conversation, responding to messages that are addressed to them.`;\n } else if (slackChannelType === \"mpim\") {\n channelType = \"GROUP_DM\";\n responseText = `${agentName} is currently in a group direct message on Slack. ${agentName} should be aware that multiple people can see this conversation.`;\n } else {\n channelType =\n slackChannelType === \"group\" ? \"PRIVATE_CHANNEL\" : \"PUBLIC_CHANNEL\";\n\n if (threadTs) {\n responseText = `${agentName} is currently in a thread within the channel #${channelName} on Slack.`;\n responseText += `\\n${agentName} should keep responses focused on the thread topic and be mindful of thread etiquette.`;\n } else {\n responseText = `${agentName} is currently having a conversation in the Slack channel #${channelName}.`;\n responseText += `\\n${agentName} is in a channel with other users and should only participate when directly addressed or when the conversation is relevant to them.`;\n }\n\n if (channel.topic?.value) {\n responseText += `\\nChannel topic: ${channel.topic.value}`;\n }\n if (channel.purpose?.value) {\n responseText += `\\nChannel purpose: ${channel.purpose.value}`;\n }\n }\n } else {\n channelType = \"unknown\";\n responseText = `${agentName} is in a Slack conversation but couldn't retrieve channel details.`;\n }\n\n // Add workspace context if available\n const teamId = slackService.getTeamId();\n if (teamId && room.worldId) {\n const world = await runtime.getWorld(room.worldId);\n if (world) {\n workspaceName = world.name;\n responseText += `\\nWorkspace: ${workspaceName}`;\n }\n }\n\n // Add thread context if applicable\n if (threadTs) {\n responseText += `\\nThis is a threaded conversation (thread timestamp: ${threadTs}).`;\n }\n\n return {\n data: {\n room,\n channelType,\n workspaceName,\n channelName,\n channelId,\n threadTs,\n isThread: Boolean(threadTs),\n topic: channel?.topic?.value,\n purpose: channel?.purpose?.value,\n isPrivate: channel?.isPrivate,\n numMembers: channel?.numMembers,\n },\n values: {\n channelType,\n workspaceName,\n channelName,\n channelId,\n isThread: Boolean(threadTs),\n },\n text: responseText,\n };\n },\n};\n\nexport default channelStateProvider;\n",
|
|
19
19
|
"import type { IAgentRuntime, Memory, Provider, State } from \"@elizaos/core\";\nimport type { SlackService } from \"../service\";\nimport { getSlackUserDisplayName, ServiceType } from \"../types\";\n\n/**\n * Provider for retrieving Slack channel member information.\n */\nexport const memberListProvider: Provider = {\n name: \"slackMemberList\",\n description:\n \"Provides information about members in the current Slack channel\",\n get: async (runtime: IAgentRuntime, message: Memory, state: State) => {\n // If message source is not slack, return empty\n if (message.content.source !== \"slack\") {\n return {\n data: {},\n values: {},\n text: \"\",\n };\n }\n\n const room = state.data?.room ?? (await runtime.getRoom(message.roomId));\n if (!room || !room.channelId) {\n return {\n data: {},\n values: {},\n text: \"\",\n };\n }\n\n const slackService = runtime.getService(ServiceType.SLACK) as SlackService;\n if (!slackService || !slackService.client) {\n return {\n data: {},\n values: {},\n text: \"\",\n };\n }\n\n const channelId = room.channelId;\n\n // Get channel members\n const membersResult = await slackService.client.conversations.members({\n channel: channelId,\n limit: 100,\n });\n\n const memberIds = membersResult.members || [];\n\n if (memberIds.length === 0) {\n return {\n data: {\n channelId,\n memberCount: 0,\n members: [],\n },\n values: {\n memberCount: 0,\n },\n text: \"No members found in this channel.\",\n };\n }\n\n // Get user info for each member (limited to first 20 for performance)\n const memberLimit = 20;\n const limitedMemberIds = memberIds.slice(0, memberLimit);\n const members: Array<{\n id: string;\n name: string;\n displayName: string;\n isBot: boolean;\n isAdmin: boolean;\n }> = [];\n\n for (const memberId of limitedMemberIds) {\n const user = await slackService.getUser(memberId);\n if (user) {\n members.push({\n id: user.id,\n name: user.name,\n displayName: getSlackUserDisplayName(user),\n isBot: user.isBot,\n isAdmin: user.isAdmin || user.isOwner,\n });\n }\n }\n\n // Get channel info for name\n const channel = await slackService.getChannel(channelId);\n const channelName = channel?.name || channelId;\n\n // Format member list\n const botUserId = slackService.getBotUserId();\n const memberDescriptions = members.map((m) => {\n const tags: string[] = [];\n if (m.id === botUserId) tags.push(\"this bot\");\n if (m.isBot && m.id !== botUserId) tags.push(\"bot\");\n if (m.isAdmin) tags.push(\"admin\");\n const tagStr = tags.length > 0 ? ` (${tags.join(\", \")})` : \"\";\n return `- ${m.displayName} (@${m.name})${tagStr}`;\n });\n\n const truncationNote =\n memberIds.length > memberLimit\n ? `\\n\\n(Showing ${memberLimit} of ${memberIds.length} total members)`\n : \"\";\n\n const responseText = `Members in #${channelName}:\\n${memberDescriptions.join(\"\\n\")}${truncationNote}`;\n\n return {\n data: {\n channelId,\n channelName,\n memberCount: memberIds.length,\n members,\n hasMoreMembers: memberIds.length > memberLimit,\n },\n values: {\n channelId,\n channelName,\n memberCount: memberIds.length,\n },\n text: responseText,\n };\n },\n};\n\nexport default memberListProvider;\n",
|
|
20
20
|
"import type { IAgentRuntime, Memory, Provider, State } from \"@elizaos/core\";\nimport type { SlackService } from \"../service\";\nimport { ServiceType } from \"../types\";\n\n/**\n * Provider for retrieving Slack workspace information.\n */\nexport const workspaceInfoProvider: Provider = {\n name: \"slackWorkspaceInfo\",\n description: \"Provides information about the Slack workspace\",\n get: async (runtime: IAgentRuntime, message: Memory, state: State) => {\n // If message source is not slack, return empty\n if (message.content.source !== \"slack\") {\n return {\n data: {},\n values: {},\n text: \"\",\n };\n }\n\n const slackService = runtime.getService(ServiceType.SLACK) as SlackService;\n if (!slackService || !slackService.client) {\n return {\n data: {},\n values: {},\n text: \"\",\n };\n }\n\n const teamId = slackService.getTeamId();\n const botUserId = slackService.getBotUserId();\n const isConnected = slackService.isServiceConnected();\n\n let workspaceName = \"\";\n let domain = \"\";\n\n // Get workspace info from world if available\n const room = state.data?.room ?? (await runtime.getRoom(message.roomId));\n if (room?.worldId) {\n const world = await runtime.getWorld(room.worldId);\n if (world) {\n workspaceName = world.name;\n const worldMetadata = world.metadata as\n | Record<string, unknown>\n | undefined;\n domain = (worldMetadata?.domain as string) || \"\";\n }\n }\n\n // Get channel statistics\n const channels = await slackService.listChannels({\n types: \"public_channel,private_channel\",\n });\n const publicChannels = channels.filter(\n (ch) => !ch.isPrivate && !ch.isArchived,\n );\n const privateChannels = channels.filter(\n (ch) => ch.isPrivate && !ch.isArchived,\n );\n const memberChannels = channels.filter(\n (ch) => ch.isMember && !ch.isArchived,\n );\n\n // Get allowed channels\n const allowedChannelIds = slackService.getAllowedChannelIds();\n const hasChannelRestrictions = allowedChannelIds.length > 0;\n\n const agentName = state?.agentName || \"The agent\";\n\n let responseText = `${agentName} is connected to the Slack workspace`;\n if (workspaceName) {\n responseText += ` \"${workspaceName}\"`;\n }\n if (domain) {\n responseText += ` (${domain}.slack.com)`;\n }\n responseText += \".\";\n\n responseText += `\\n\\nWorkspace statistics:`;\n responseText += `\\n- Public channels: ${publicChannels.length}`;\n responseText += `\\n- Private channels: ${privateChannels.length}`;\n responseText += `\\n- Channels the bot is a member of: ${memberChannels.length}`;\n\n if (hasChannelRestrictions) {\n responseText += `\\n\\nNote: The bot is restricted to ${allowedChannelIds.length} specific channel(s).`;\n }\n\n return {\n data: {\n teamId,\n botUserId,\n workspaceName,\n domain,\n isConnected,\n publicChannelCount: publicChannels.length,\n privateChannelCount: privateChannels.length,\n memberChannelCount: memberChannels.length,\n hasChannelRestrictions,\n allowedChannelIds,\n },\n values: {\n teamId: teamId || \"\",\n botUserId: botUserId || \"\",\n workspaceName,\n domain,\n isConnected,\n publicChannelCount: publicChannels.length,\n privateChannelCount: privateChannels.length,\n memberChannelCount: memberChannels.length,\n },\n text: responseText,\n };\n },\n};\n\nexport default workspaceInfoProvider;\n",
|
|
21
|
-
"import {\n ChannelType,\n type Character,\n type Content,\n createUniqueUuid,\n type EventPayload,\n type HandlerCallback,\n type IAgentRuntime,\n type IMessageService,\n type Media,\n type Memory,\n type Room,\n Service,\n stringToUuid,\n type UUID,\n type World,\n} from \"@elizaos/core\";\nimport { App, LogLevel } from \"@slack/bolt\";\nimport type { WebAPICallResult, WebClient } from \"@slack/web-api\";\n\n// Define Slack event types inline to avoid import issues\ninterface SlackMessageEventType {\n type: \"message\";\n channel: string;\n user?: string;\n text?: string;\n ts: string;\n thread_ts?: string;\n team?: string;\n bot_id?: string;\n files?: Array<Record<string, unknown>>;\n}\n\ninterface SlackAppMentionEventType {\n type: \"app_mention\";\n channel: string;\n user?: string;\n text: string;\n ts: string;\n thread_ts?: string;\n event_ts: string;\n}\n\n// Helper to get message service from runtime\nconst getMessageService = (runtime: IAgentRuntime): IMessageService | null => {\n if (\"messageService\" in runtime) {\n const withMessageService = runtime as IAgentRuntime & {\n messageService?: IMessageService | null;\n };\n return withMessageService.messageService ?? null;\n }\n return null;\n};\n\nimport {\n getSlackChannelType,\n getSlackUserDisplayName,\n type ISlackService,\n isValidChannelId,\n MAX_SLACK_MESSAGE_LENGTH,\n SLACK_SERVICE_NAME,\n type SlackAttachment,\n type SlackBlock,\n type SlackChannel,\n SlackEventTypes,\n type SlackFile,\n type SlackMessage,\n type SlackMessageSendOptions,\n type SlackSettings,\n type SlackUser,\n} from \"./types\";\n\n/**\n * SlackService class for interacting with Slack via Socket Mode\n */\nexport class SlackService extends Service implements ISlackService {\n static serviceType: string = SLACK_SERVICE_NAME;\n capabilityDescription =\n \"The agent is able to send and receive messages on Slack\";\n\n app: App | null = null;\n client: WebClient | null = null;\n character: Character;\n botUserId: string | null = null;\n teamId: string | null = null;\n\n private settings: SlackSettings;\n private botToken: string | null = null;\n private appToken: string | null = null;\n private signingSecret: string | null = null;\n private allowedChannelIds: Set<string> = new Set();\n private dynamicChannelIds: Set<string> = new Set();\n private userCache: Map<string, SlackUser> = new Map();\n private channelCache: Map<string, SlackChannel> = new Map();\n private isStarting = false;\n private isConnected = false;\n\n constructor(runtime: IAgentRuntime) {\n super(runtime);\n this.character = runtime.character;\n this.settings = this.loadSettings();\n\n // Parse allowed channel IDs\n const channelIdsRaw = runtime.getSetting(\"SLACK_CHANNEL_IDS\") as\n | string\n | undefined;\n if (channelIdsRaw?.trim()) {\n channelIdsRaw\n .split(\",\")\n .map((s) => s.trim())\n .filter((s) => s.length > 0 && isValidChannelId(s))\n .forEach((id) => this.allowedChannelIds.add(id));\n\n this.runtime.logger.debug(\n {\n src: \"plugin:slack\",\n agentId: this.runtime.agentId,\n allowedChannelIds: Array.from(this.allowedChannelIds),\n },\n \"Channel restrictions enabled\",\n );\n }\n }\n\n private loadSettings(): SlackSettings {\n const ignoreBotMessages = this.runtime.getSetting(\n \"SLACK_SHOULD_IGNORE_BOT_MESSAGES\",\n );\n const respondOnlyToMentions = this.runtime.getSetting(\n \"SLACK_SHOULD_RESPOND_ONLY_TO_MENTIONS\",\n );\n\n return {\n allowedChannelIds: undefined,\n shouldIgnoreBotMessages:\n ignoreBotMessages === \"true\" || ignoreBotMessages === true,\n shouldRespondOnlyToMentions:\n respondOnlyToMentions === \"true\" || respondOnlyToMentions === true,\n };\n }\n\n static async start(runtime: IAgentRuntime): Promise<SlackService> {\n const service = new SlackService(runtime);\n\n const botToken = runtime.getSetting(\"SLACK_BOT_TOKEN\") as string;\n const appToken = runtime.getSetting(\"SLACK_APP_TOKEN\") as string;\n const signingSecret = runtime.getSetting(\"SLACK_SIGNING_SECRET\") as\n | string\n | undefined;\n const userToken = runtime.getSetting(\"SLACK_USER_TOKEN\") as\n | string\n | undefined;\n\n if (!botToken || !botToken.trim()) {\n runtime.logger.warn(\n { src: \"plugin:slack\", agentId: runtime.agentId },\n \"SLACK_BOT_TOKEN not provided, Slack service will not start\",\n );\n return service;\n }\n\n if (!appToken || !appToken.trim()) {\n runtime.logger.warn(\n { src: \"plugin:slack\", agentId: runtime.agentId },\n \"SLACK_APP_TOKEN not provided, Socket Mode will not work\",\n );\n return service;\n }\n\n service.botToken = botToken;\n service.appToken = appToken;\n service.signingSecret = signingSecret || undefined;\n service.userToken = userToken || undefined;\n\n await service.initialize();\n\n return service;\n }\n\n static async stop(runtime: IAgentRuntime): Promise<void> {\n const service = runtime.getService(SLACK_SERVICE_NAME) as\n | SlackService\n | undefined;\n if (service) {\n await service.shutdown();\n }\n }\n\n async stop(): Promise<void> {\n await this.shutdown();\n }\n\n private async initialize(): Promise<void> {\n if (this.isStarting || this.isConnected) {\n return;\n }\n\n this.isStarting = true;\n\n this.runtime.logger.info(\n { src: \"plugin:slack\", agentId: this.runtime.agentId },\n \"Initializing Slack service with Socket Mode\",\n );\n\n this.app = new App({\n token: this.botToken!,\n appToken: this.appToken!,\n socketMode: true,\n logLevel: LogLevel.INFO,\n ...(this.signingSecret ? { signingSecret: this.signingSecret } : {}),\n });\n\n this.client = this.app.client;\n\n // Get bot user info\n const authResult = await this.client.auth.test();\n this.botUserId = authResult.user_id as string;\n this.teamId = authResult.team_id as string;\n\n this.runtime.logger.info(\n {\n src: \"plugin:slack\",\n agentId: this.runtime.agentId,\n botUserId: this.botUserId,\n teamId: this.teamId,\n },\n \"Slack bot authenticated\",\n );\n\n // Register event handlers\n this.registerEventHandlers();\n\n // Start the Socket Mode connection\n await this.app.start();\n\n this.isConnected = true;\n this.isStarting = false;\n\n this.runtime.logger.info(\n { src: \"plugin:slack\", agentId: this.runtime.agentId },\n \"Slack service started successfully\",\n );\n\n // Ensure all workspaces exist\n await this.ensureWorkspaceExists();\n }\n\n private async shutdown(): Promise<void> {\n if (this.app) {\n await this.app.stop();\n this.app = null;\n this.client = null;\n this.isConnected = false;\n\n this.runtime.logger.info(\n { src: \"plugin:slack\", agentId: this.runtime.agentId },\n \"Slack service stopped\",\n );\n }\n }\n\n private registerEventHandlers(): void {\n if (!this.app) return;\n\n // Handle regular messages\n this.app.message(async ({ message, client }) => {\n await this.handleMessage(message as SlackMessageEventType, client);\n });\n\n // Handle app mentions\n this.app.event(\"app_mention\", async ({ event, client }) => {\n await this.handleAppMention(event as SlackAppMentionEventType, client);\n });\n\n // Handle reactions\n this.app.event(\"reaction_added\", async ({ event }) => {\n await this.handleReactionAdded(event);\n });\n\n this.app.event(\"reaction_removed\", async ({ event }) => {\n await this.handleReactionRemoved(event);\n });\n\n // Handle channel joins/leaves\n this.app.event(\"member_joined_channel\", async ({ event }) => {\n await this.handleMemberJoinedChannel(event);\n });\n\n this.app.event(\"member_left_channel\", async ({ event }) => {\n await this.handleMemberLeftChannel(event);\n });\n\n // Handle file shares\n this.app.event(\"file_shared\", async ({ event }) => {\n await this.handleFileShared(event);\n });\n }\n\n private async handleMessage(\n message: SlackMessageEventType,\n _client: WebClient,\n ): Promise<void> {\n // Ignore bot messages if configured\n if (this.settings.shouldIgnoreBotMessages && message.bot_id) {\n return;\n }\n\n // Ignore messages from self\n if (message.user === this.botUserId) {\n return;\n }\n\n // Check channel restrictions\n if (!this.isChannelAllowed(message.channel)) {\n this.runtime.logger.debug(\n {\n src: \"plugin:slack\",\n agentId: this.runtime.agentId,\n channelId: message.channel,\n },\n \"Message received in non-allowed channel, ignoring\",\n );\n return;\n }\n\n // Check if we should only respond to mentions\n const isMentioned = message.text?.includes(`<@${this.botUserId}>`);\n if (this.settings.shouldRespondOnlyToMentions && !isMentioned) {\n return;\n }\n\n const _isThreadReply = Boolean(\n message.thread_ts && message.thread_ts !== message.ts,\n );\n\n // Build memory from message\n const memory = await this.buildMemoryFromMessage(message);\n if (!memory) return;\n\n // Get or create room\n const room = await this.ensureRoomExists(\n message.channel,\n message.thread_ts,\n );\n\n // Store the memory\n await this.runtime.createMemory(memory, \"messages\");\n\n // Emit event\n await this.runtime.emitEvent(\n SlackEventTypes.MESSAGE_RECEIVED as string,\n {\n runtime: this.runtime,\n source: \"slack\",\n } as EventPayload,\n );\n\n // Process the message through the agent\n await this.processAgentMessage(\n memory,\n room,\n message.channel,\n message.thread_ts || message.ts,\n );\n }\n\n private async handleAppMention(\n event: SlackAppMentionEventType,\n _client: WebClient,\n ): Promise<void> {\n // Skip if no user (optional in AppMentionEvent)\n if (!event.user) return;\n\n // Build memory from mention\n const memory = await this.buildMemoryFromMention({\n user: event.user,\n text: event.text,\n channel: event.channel,\n ts: event.ts,\n thread_ts: event.thread_ts,\n });\n if (!memory) return;\n\n // Get or create room\n const room = await this.ensureRoomExists(event.channel, event.thread_ts);\n\n // Store the memory\n await this.runtime.createMemory(memory, \"messages\");\n\n // Emit event\n await this.runtime.emitEvent(\n SlackEventTypes.APP_MENTION as string,\n {\n runtime: this.runtime,\n source: \"slack\",\n } as EventPayload,\n );\n\n // Process the message\n await this.processAgentMessage(\n memory,\n room,\n event.channel,\n event.thread_ts || event.ts,\n );\n }\n\n private async handleReactionAdded(_event: {\n user: string;\n reaction: string;\n item: { type: string; channel: string; ts: string };\n item_user?: string;\n }): Promise<void> {\n await this.runtime.emitEvent(\n SlackEventTypes.REACTION_ADDED as string,\n {\n runtime: this.runtime,\n source: \"slack\",\n } as EventPayload,\n );\n }\n\n private async handleReactionRemoved(_event: {\n user: string;\n reaction: string;\n item: { type: string; channel: string; ts: string };\n item_user?: string;\n }): Promise<void> {\n await this.runtime.emitEvent(\n SlackEventTypes.REACTION_REMOVED as string,\n {\n runtime: this.runtime,\n source: \"slack\",\n } as EventPayload,\n );\n }\n\n private async handleMemberJoinedChannel(event: {\n user: string;\n channel: string;\n team?: string;\n }): Promise<void> {\n // If the bot joined, add to dynamic channels\n if (event.user === this.botUserId) {\n this.dynamicChannelIds.add(event.channel);\n await this.ensureRoomExists(event.channel);\n }\n\n await this.runtime.emitEvent(\n SlackEventTypes.MEMBER_JOINED_CHANNEL as string,\n {\n runtime: this.runtime,\n source: \"slack\",\n } as EventPayload,\n );\n }\n\n private async handleMemberLeftChannel(event: {\n user: string;\n channel: string;\n team?: string;\n }): Promise<void> {\n // If the bot left, remove from dynamic channels\n if (event.user === this.botUserId) {\n this.dynamicChannelIds.delete(event.channel);\n }\n\n await this.runtime.emitEvent(\n SlackEventTypes.MEMBER_LEFT_CHANNEL as string,\n {\n runtime: this.runtime,\n source: \"slack\",\n } as EventPayload,\n );\n }\n\n private async handleFileShared(_event: {\n file_id: string;\n user_id: string;\n channel_id: string;\n }): Promise<void> {\n await this.runtime.emitEvent(\n SlackEventTypes.FILE_SHARED as string,\n {\n runtime: this.runtime,\n source: \"slack\",\n } as EventPayload,\n );\n }\n\n private isChannelAllowed(channelId: string): boolean {\n // If no restrictions, all channels allowed\n if (\n this.allowedChannelIds.size === 0 &&\n this.dynamicChannelIds.size === 0\n ) {\n return true;\n }\n\n // Check static and dynamic allowed lists\n return (\n this.allowedChannelIds.has(channelId) ||\n this.dynamicChannelIds.has(channelId)\n );\n }\n\n private async processAgentMessage(\n memory: Memory,\n room: Room,\n channelId: string,\n threadTs: string,\n ): Promise<void> {\n const callback: HandlerCallback = async (\n response: Content,\n ): Promise<Memory[]> => {\n await this.sendMessage(channelId, response.text || \"\", {\n threadTs,\n replyBroadcast: undefined,\n unfurlLinks: undefined,\n unfurlMedia: undefined,\n mrkdwn: undefined,\n attachments: undefined,\n blocks: undefined,\n });\n\n // Create memory for the response\n const responseMemory: Memory = {\n id: createUniqueUuid(this.runtime, `slack-response-${Date.now()}`),\n agentId: this.runtime.agentId,\n roomId: room.id,\n entityId: this.runtime.agentId,\n content: {\n text: response.text || \"\",\n source: \"slack\",\n inReplyTo: memory.id,\n },\n createdAt: Date.now(),\n };\n\n await this.runtime.createMemory(responseMemory, \"messages\");\n\n await this.runtime.emitEvent(\n SlackEventTypes.MESSAGE_SENT as string,\n {\n runtime: this.runtime,\n source: \"slack\",\n } as EventPayload,\n );\n\n return [responseMemory];\n };\n\n const messageService = getMessageService(this.runtime);\n if (messageService) {\n await messageService.handleMessage(this.runtime, memory, callback);\n }\n }\n\n private async buildMemoryFromMessage(\n message: SlackMessageEventType,\n ): Promise<Memory | null> {\n if (!message.user) return null;\n\n const roomId = await this.getRoomId(message.channel, message.thread_ts);\n const entityId = this.getEntityId(message.user);\n\n // Get user info for display name\n const user = await this.getUser(message.user);\n const displayName = user ? getSlackUserDisplayName(user) : message.user;\n\n // Extract media from files\n const media: Media[] = [];\n if (\"files\" in message && message.files) {\n for (const file of message.files as unknown as SlackFile[]) {\n media.push({\n id: file.id,\n url: file.urlPrivate,\n title: file.title || file.name,\n source: \"slack\",\n description: file.name,\n });\n }\n }\n\n const memory: Memory = {\n id: createUniqueUuid(this.runtime, `slack-${message.ts}`),\n agentId: this.runtime.agentId,\n roomId,\n entityId,\n content: {\n text: message.text || \"\",\n source: \"slack\",\n name: displayName,\n ...(media.length > 0 ? { attachments: media } : {}),\n },\n createdAt: this.parseSlackTimestamp(message.ts),\n };\n\n return memory;\n }\n\n private async buildMemoryFromMention(event: {\n user: string;\n text: string;\n channel: string;\n ts: string;\n thread_ts?: string;\n }): Promise<Memory | null> {\n const roomId = await this.getRoomId(event.channel, event.thread_ts);\n const entityId = this.getEntityId(event.user);\n\n const user = await this.getUser(event.user);\n const displayName = user ? getSlackUserDisplayName(user) : event.user;\n\n // Remove the bot mention from the text\n const cleanText = event.text.replace(`<@${this.botUserId}>`, \"\").trim();\n\n const memory: Memory = {\n id: createUniqueUuid(this.runtime, `slack-mention-${event.ts}`),\n agentId: this.runtime.agentId,\n roomId,\n entityId,\n content: {\n text: cleanText,\n source: \"slack\",\n name: displayName,\n },\n createdAt: this.parseSlackTimestamp(event.ts),\n };\n\n return memory;\n }\n\n private async getRoomId(channelId: string, threadTs?: string): Promise<UUID> {\n // Use thread_ts to create unique rooms for threads\n const roomKey = threadTs ? `${channelId}-${threadTs}` : channelId;\n return createUniqueUuid(this.runtime, `slack-room-${roomKey}`);\n }\n\n private getEntityId(userId: string): UUID {\n return stringToUuid(`slack-user-${userId}`);\n }\n\n private parseSlackTimestamp(ts: string): number {\n // Slack timestamps are in the format: 1234567890.123456\n const [seconds] = ts.split(\".\");\n return parseInt(seconds, 10) * 1000;\n }\n\n private async ensureWorkspaceExists(): Promise<void> {\n if (!this.teamId || !this.client) return;\n\n const worldId = createUniqueUuid(\n this.runtime,\n `slack-workspace-${this.teamId}`,\n );\n\n const existingWorld = await this.runtime.getWorld(worldId);\n if (existingWorld) return;\n\n // Get team info\n const teamInfo = await this.client.team.info();\n const team = teamInfo.team;\n\n const world: World = {\n id: worldId,\n name:\n (team as { name?: string })?.name || `Slack Workspace ${this.teamId}`,\n agentId: this.runtime.agentId,\n metadata: {\n type: \"slack\",\n extra: {\n teamId: this.teamId,\n domain: (team as { domain?: string })?.domain,\n },\n },\n };\n\n await this.runtime.createWorld(world);\n\n this.runtime.logger.info(\n {\n src: \"plugin:slack\",\n agentId: this.runtime.agentId,\n worldId,\n teamId: this.teamId,\n },\n \"Created Slack workspace world\",\n );\n }\n\n private async ensureRoomExists(\n channelId: string,\n threadTs?: string,\n ): Promise<Room> {\n const roomId = await this.getRoomId(channelId, threadTs);\n\n const existingRoom = await this.runtime.getRoom(roomId);\n if (existingRoom) return existingRoom;\n\n // Get channel info\n const channel = await this.getChannel(channelId);\n const channelType = channel ? getSlackChannelType(channel) : \"channel\";\n\n const worldId = this.teamId\n ? createUniqueUuid(this.runtime, `slack-workspace-${this.teamId}`)\n : undefined;\n\n const elizaChannelType =\n channelType === \"im\"\n ? ChannelType.DM\n : channelType === \"mpim\"\n ? ChannelType.GROUP\n : ChannelType.GROUP;\n\n const room: Room = {\n id: roomId,\n name: channel?.name || channelId,\n agentId: this.runtime.agentId,\n source: \"slack\",\n type: elizaChannelType,\n channelId,\n worldId,\n metadata: {\n slackChannelType: channelType,\n threadTs,\n topic: channel?.topic?.value,\n purpose: channel?.purpose?.value,\n serverId: this.teamId,\n },\n };\n\n await this.runtime.createRoom(room);\n\n this.runtime.logger.debug(\n {\n src: \"plugin:slack\",\n agentId: this.runtime.agentId,\n roomId,\n channelId,\n threadTs,\n },\n \"Created Slack room\",\n );\n\n return room;\n }\n\n async getUser(userId: string): Promise<SlackUser | null> {\n // Check cache first\n if (this.userCache.has(userId)) {\n return this.userCache.get(userId)!;\n }\n\n if (!this.client) return null;\n\n const result = await this.client.users.info({ user: userId });\n if (!result.user) return null;\n\n const user: SlackUser = {\n id: result.user.id!,\n teamId: result.user.team_id,\n name: result.user.name!,\n deleted: result.user.deleted || false,\n realName: result.user.real_name,\n tz: result.user.tz,\n tzLabel: result.user.tz_label,\n tzOffset: result.user.tz_offset,\n profile: {\n title: result.user.profile?.title,\n phone: result.user.profile?.phone,\n skype: result.user.profile?.skype,\n realName: result.user.profile?.real_name,\n realNameNormalized: result.user.profile?.real_name_normalized,\n displayName: result.user.profile?.display_name,\n displayNameNormalized: result.user.profile?.display_name_normalized,\n statusText: result.user.profile?.status_text,\n statusEmoji: result.user.profile?.status_emoji,\n statusExpiration: result.user.profile?.status_expiration,\n avatarHash: result.user.profile?.avatar_hash,\n email: result.user.profile?.email,\n image24: result.user.profile?.image_24,\n image32: result.user.profile?.image_32,\n image48: result.user.profile?.image_48,\n image72: result.user.profile?.image_72,\n image192: result.user.profile?.image_192,\n image512: result.user.profile?.image_512,\n image1024: result.user.profile?.image_1024,\n imageOriginal: result.user.profile?.image_original,\n team: result.user.profile?.team,\n },\n isAdmin: result.user.is_admin || false,\n isOwner: result.user.is_owner || false,\n isPrimaryOwner: result.user.is_primary_owner || false,\n isRestricted: result.user.is_restricted || false,\n isUltraRestricted: result.user.is_ultra_restricted || false,\n isBot: result.user.is_bot || false,\n isAppUser: result.user.is_app_user || false,\n updated: result.user.updated || 0,\n };\n\n this.userCache.set(userId, user);\n return user;\n }\n\n async getChannel(channelId: string): Promise<SlackChannel | null> {\n // Check cache first\n if (this.channelCache.has(channelId)) {\n return this.channelCache.get(channelId)!;\n }\n\n if (!this.client) return null;\n\n const result = await this.client.conversations.info({ channel: channelId });\n if (!result.channel) return null;\n\n const channel: SlackChannel = {\n id: (result.channel as { id: string }).id,\n name: (result.channel as { name: string }).name || \"\",\n isChannel:\n (result.channel as { is_channel?: boolean }).is_channel || false,\n isGroup: (result.channel as { is_group?: boolean }).is_group || false,\n isIm: (result.channel as { is_im?: boolean }).is_im || false,\n isMpim: (result.channel as { is_mpim?: boolean }).is_mpim || false,\n isPrivate:\n (result.channel as { is_private?: boolean }).is_private || false,\n isArchived:\n (result.channel as { is_archived?: boolean }).is_archived || false,\n isGeneral:\n (result.channel as { is_general?: boolean }).is_general || false,\n isShared: (result.channel as { is_shared?: boolean }).is_shared || false,\n isOrgShared:\n (result.channel as { is_org_shared?: boolean }).is_org_shared || false,\n isMember: (result.channel as { is_member?: boolean }).is_member || false,\n topic: (\n result.channel as {\n topic?: { value: string; creator: string; last_set: number };\n }\n ).topic\n ? {\n value: (result.channel as { topic: { value: string } }).topic.value,\n creator: (result.channel as { topic: { creator: string } }).topic\n .creator,\n lastSet: (result.channel as { topic: { last_set: number } }).topic\n .last_set,\n }\n : undefined,\n purpose: (\n result.channel as {\n purpose?: { value: string; creator: string; last_set: number };\n }\n ).purpose\n ? {\n value: (result.channel as { purpose: { value: string } }).purpose\n .value,\n creator: (result.channel as { purpose: { creator: string } })\n .purpose.creator,\n lastSet: (result.channel as { purpose: { last_set: number } })\n .purpose.last_set,\n }\n : undefined,\n numMembers: (result.channel as { num_members?: number }).num_members,\n created: (result.channel as { created: number }).created,\n creator: (result.channel as { creator: string }).creator,\n };\n\n this.channelCache.set(channelId, channel);\n return channel;\n }\n\n async sendMessage(\n channelId: string,\n text: string,\n options?: SlackMessageSendOptions,\n ): Promise<{ ts: string; channelId: string }> {\n if (!this.client) {\n throw new Error(\"Slack client not initialized\");\n }\n\n // Split message if too long\n const messages = this.splitMessage(text);\n let lastTs = \"\";\n\n for (const msg of messages) {\n const result = await this.client.chat.postMessage({\n channel: channelId,\n text: msg,\n thread_ts: options?.threadTs,\n reply_broadcast: options?.replyBroadcast,\n unfurl_links: options?.unfurlLinks,\n unfurl_media: options?.unfurlMedia,\n mrkdwn: options?.mrkdwn ?? true,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n attachments: options?.attachments as unknown as any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n blocks: options?.blocks as unknown as any,\n });\n\n lastTs = result.ts as string;\n }\n\n return { ts: lastTs, channelId };\n }\n\n async sendReaction(\n channelId: string,\n messageTs: string,\n emoji: string,\n ): Promise<void> {\n if (!this.client) {\n throw new Error(\"Slack client not initialized\");\n }\n\n // Remove colons if present\n const cleanEmoji = emoji.replace(/^:/, \"\").replace(/:$/, \"\");\n\n await this.client.reactions.add({\n channel: channelId,\n timestamp: messageTs,\n name: cleanEmoji,\n });\n }\n\n async removeReaction(\n channelId: string,\n messageTs: string,\n emoji: string,\n ): Promise<void> {\n if (!this.client) {\n throw new Error(\"Slack client not initialized\");\n }\n\n const cleanEmoji = emoji.replace(/^:/, \"\").replace(/:$/, \"\");\n\n await this.client.reactions.remove({\n channel: channelId,\n timestamp: messageTs,\n name: cleanEmoji,\n });\n }\n\n async editMessage(\n channelId: string,\n messageTs: string,\n text: string,\n ): Promise<void> {\n if (!this.client) {\n throw new Error(\"Slack client not initialized\");\n }\n\n await this.client.chat.update({\n channel: channelId,\n ts: messageTs,\n text,\n });\n }\n\n async deleteMessage(channelId: string, messageTs: string): Promise<void> {\n if (!this.client) {\n throw new Error(\"Slack client not initialized\");\n }\n\n await this.client.chat.delete({\n channel: channelId,\n ts: messageTs,\n });\n }\n\n async pinMessage(channelId: string, messageTs: string): Promise<void> {\n if (!this.client) {\n throw new Error(\"Slack client not initialized\");\n }\n\n await this.client.pins.add({\n channel: channelId,\n timestamp: messageTs,\n });\n }\n\n async unpinMessage(channelId: string, messageTs: string): Promise<void> {\n if (!this.client) {\n throw new Error(\"Slack client not initialized\");\n }\n\n await this.client.pins.remove({\n channel: channelId,\n timestamp: messageTs,\n });\n }\n\n async listPins(channelId: string): Promise<SlackMessage[]> {\n if (!this.client) {\n throw new Error(\"Slack client not initialized\");\n }\n\n const result = await this.client.pins.list({ channel: channelId });\n\n return (result.items || [])\n .filter(\n (item): item is { type: \"message\"; message: Record<string, unknown> } =>\n item.type === \"message\" && \"message\" in item && !!item.message,\n )\n .map((item) => ({\n type: item.message.type as string,\n subtype: item.message.subtype as string | undefined,\n ts: item.message.ts as string,\n user: item.message.user as string | undefined,\n text: item.message.text as string,\n threadTs: item.message.thread_ts as string | undefined,\n replyCount: item.message.reply_count as number | undefined,\n replyUsersCount: item.message.reply_users_count as number | undefined,\n latestReply: item.message.latest_reply as string | undefined,\n reactions: item.message.reactions as\n | { name: string; count: number; users: string[] }[]\n | undefined,\n files: item.message.files as SlackFile[] | undefined,\n attachments: item.message.attachments as SlackAttachment[] | undefined,\n blocks: item.message.blocks as SlackBlock[] | undefined,\n }));\n }\n\n async readHistory(\n channelId: string,\n options?: { limit?: number; before?: string; after?: string },\n ): Promise<SlackMessage[]> {\n if (!this.client) {\n throw new Error(\"Slack client not initialized\");\n }\n\n const result = await this.client.conversations.history({\n channel: channelId,\n limit: options?.limit || 100,\n latest: options?.before,\n oldest: options?.after,\n });\n\n return (result.messages || []).map((msg) => ({\n type: msg.type as string,\n subtype: msg.subtype as string | undefined,\n ts: msg.ts as string,\n user: msg.user as string | undefined,\n text: msg.text as string,\n threadTs: msg.thread_ts as string | undefined,\n replyCount: msg.reply_count as number | undefined,\n replyUsersCount: msg.reply_users_count as number | undefined,\n latestReply: msg.latest_reply as string | undefined,\n reactions: msg.reactions as\n | { name: string; count: number; users: string[] }[]\n | undefined,\n files: msg.files as SlackFile[] | undefined,\n attachments: msg.attachments as SlackAttachment[] | undefined,\n blocks: msg.blocks as SlackBlock[] | undefined,\n }));\n }\n\n async listChannels(options?: {\n types?: string;\n limit?: number;\n }): Promise<SlackChannel[]> {\n if (!this.client) {\n throw new Error(\"Slack client not initialized\");\n }\n\n const result = await this.client.conversations.list({\n types: options?.types || \"public_channel,private_channel\",\n limit: options?.limit || 1000,\n });\n\n return (result.channels || []).map((ch) => ({\n id: ch.id!,\n name: ch.name || \"\",\n isChannel: ch.is_channel || false,\n isGroup: ch.is_group || false,\n isIm: ch.is_im || false,\n isMpim: ch.is_mpim || false,\n isPrivate: ch.is_private || false,\n isArchived: ch.is_archived || false,\n isGeneral: ch.is_general || false,\n isShared: ch.is_shared || false,\n isOrgShared: ch.is_org_shared || false,\n isMember: ch.is_member || false,\n topic: ch.topic\n ? {\n value: ch.topic.value!,\n creator: ch.topic.creator!,\n lastSet: ch.topic.last_set!,\n }\n : undefined,\n purpose: ch.purpose\n ? {\n value: ch.purpose.value!,\n creator: ch.purpose.creator!,\n lastSet: ch.purpose.last_set!,\n }\n : undefined,\n numMembers: ch.num_members,\n created: ch.created || 0,\n creator: ch.creator || \"\",\n }));\n }\n\n async getEmojiList(): Promise<Record<string, string>> {\n if (!this.client) {\n throw new Error(\"Slack client not initialized\");\n }\n\n const result = await this.client.emoji.list();\n return (result.emoji || {}) as Record<string, string>;\n }\n\n async uploadFile(\n channelId: string,\n content: Buffer | string,\n filename: string,\n options?: { title?: string; initialComment?: string; threadTs?: string },\n ): Promise<{ fileId: string; permalink: string }> {\n if (!this.client) {\n throw new Error(\"Slack client not initialized\");\n }\n\n const result = await this.client.files.uploadV2({\n channel_id: channelId,\n content: typeof content === \"string\" ? content : undefined,\n file: typeof content !== \"string\" ? content : undefined,\n filename,\n title: options?.title,\n initial_comment: options?.initialComment,\n thread_ts: options?.threadTs,\n });\n\n const resultWithFile = result as WebAPICallResult & {\n file?: { id: string; permalink: string };\n };\n const file = resultWithFile.file;\n return {\n fileId: file?.id || \"\",\n permalink: file?.permalink || \"\",\n };\n }\n\n private splitMessage(text: string): string[] {\n if (text.length <= MAX_SLACK_MESSAGE_LENGTH) {\n return [text];\n }\n\n const messages: string[] = [];\n let remaining = text;\n\n while (remaining.length > 0) {\n if (remaining.length <= MAX_SLACK_MESSAGE_LENGTH) {\n messages.push(remaining);\n break;\n }\n\n // Find a good split point (prefer newlines, then spaces)\n let splitIndex = MAX_SLACK_MESSAGE_LENGTH;\n\n const lastNewline = remaining.lastIndexOf(\"\\n\", MAX_SLACK_MESSAGE_LENGTH);\n if (lastNewline > MAX_SLACK_MESSAGE_LENGTH / 2) {\n splitIndex = lastNewline + 1;\n } else {\n const lastSpace = remaining.lastIndexOf(\" \", MAX_SLACK_MESSAGE_LENGTH);\n if (lastSpace > MAX_SLACK_MESSAGE_LENGTH / 2) {\n splitIndex = lastSpace + 1;\n }\n }\n\n messages.push(remaining.slice(0, splitIndex));\n remaining = remaining.slice(splitIndex);\n }\n\n return messages;\n }\n\n /**\n * Add a channel to the dynamic allowed list\n */\n addAllowedChannel(channelId: string): void {\n if (isValidChannelId(channelId)) {\n this.dynamicChannelIds.add(channelId);\n }\n }\n\n /**\n * Remove a channel from the dynamic allowed list\n */\n removeAllowedChannel(channelId: string): void {\n this.dynamicChannelIds.delete(channelId);\n }\n\n /**\n * Get all currently allowed channel IDs\n */\n getAllowedChannelIds(): string[] {\n return [...this.allowedChannelIds, ...this.dynamicChannelIds];\n }\n\n /**\n * Check if the service is connected\n */\n isServiceConnected(): boolean {\n return this.isConnected && this.app !== null;\n }\n\n /**\n * Get the bot's user ID\n */\n getBotUserId(): string | null {\n return this.botUserId;\n }\n\n /**\n * Get the team/workspace ID\n */\n getTeamId(): string | null {\n return this.teamId;\n }\n\n /**\n * Clear the user cache\n */\n clearUserCache(): void {\n this.userCache.clear();\n }\n\n /**\n * Clear the channel cache\n */\n clearChannelCache(): void {\n this.channelCache.clear();\n }\n}\n",
|
|
21
|
+
"import {\n ChannelType,\n type Character,\n type Content,\n createUniqueUuid,\n type EventPayload,\n type HandlerCallback,\n type IAgentRuntime,\n type IMessageService,\n type Media,\n type Memory,\n type Room,\n Service,\n stringToUuid,\n type UUID,\n type World,\n} from \"@elizaos/core\";\nimport { App, LogLevel } from \"@slack/bolt\";\nimport type { WebAPICallResult, WebClient } from \"@slack/web-api\";\n\n// Define Slack event types inline to avoid import issues\ninterface SlackMessageEventType {\n type: \"message\";\n channel: string;\n user?: string;\n text?: string;\n ts: string;\n thread_ts?: string;\n team?: string;\n bot_id?: string;\n files?: Array<Record<string, unknown>>;\n}\n\ninterface SlackAppMentionEventType {\n type: \"app_mention\";\n channel: string;\n user?: string;\n text: string;\n ts: string;\n thread_ts?: string;\n event_ts: string;\n}\n\n// Helper to get message service from runtime\nconst getMessageService = (runtime: IAgentRuntime): IMessageService | null => {\n if (\"messageService\" in runtime) {\n const withMessageService = runtime as IAgentRuntime & {\n messageService?: IMessageService | null;\n };\n return withMessageService.messageService ?? null;\n }\n return null;\n};\n\nimport {\n getSlackChannelType,\n getSlackUserDisplayName,\n type ISlackService,\n isValidChannelId,\n MAX_SLACK_MESSAGE_LENGTH,\n SLACK_SERVICE_NAME,\n type SlackAttachment,\n type SlackBlock,\n type SlackChannel,\n SlackEventTypes,\n type SlackFile,\n type SlackMessage,\n type SlackMessageSendOptions,\n type SlackSettings,\n type SlackUser,\n} from \"./types\";\n\n/**\n * SlackService class for interacting with Slack via Socket Mode\n */\nexport class SlackService extends Service implements ISlackService {\n static serviceType: string = SLACK_SERVICE_NAME;\n capabilityDescription =\n \"The agent is able to send and receive messages on Slack\";\n\n app: App | null = null;\n client: WebClient | null = null;\n character: Character;\n botUserId: string | null = null;\n teamId: string | null = null;\n\n private settings: SlackSettings;\n private botToken: string | null = null;\n private appToken: string | null = null;\n private signingSecret: string | null = null;\n private userToken: string | undefined = undefined;\n private allowedChannelIds: Set<string> = new Set();\n private dynamicChannelIds: Set<string> = new Set();\n private userCache: Map<string, SlackUser> = new Map();\n private channelCache: Map<string, SlackChannel> = new Map();\n private isStarting = false;\n private isConnected = false;\n\n constructor(runtime: IAgentRuntime) {\n super(runtime);\n this.character = runtime.character;\n this.settings = this.loadSettings();\n\n // Parse allowed channel IDs\n const channelIdsRaw = runtime.getSetting(\"SLACK_CHANNEL_IDS\") as\n | string\n | undefined;\n if (channelIdsRaw?.trim()) {\n channelIdsRaw\n .split(\",\")\n .map((s) => s.trim())\n .filter((s) => s.length > 0 && isValidChannelId(s))\n .forEach((id) => this.allowedChannelIds.add(id));\n\n this.runtime.logger.debug(\n {\n src: \"plugin:slack\",\n agentId: this.runtime.agentId,\n allowedChannelIds: Array.from(this.allowedChannelIds),\n },\n \"Channel restrictions enabled\",\n );\n }\n }\n\n private loadSettings(): SlackSettings {\n const ignoreBotMessages = this.runtime.getSetting(\n \"SLACK_SHOULD_IGNORE_BOT_MESSAGES\",\n );\n const respondOnlyToMentions = this.runtime.getSetting(\n \"SLACK_SHOULD_RESPOND_ONLY_TO_MENTIONS\",\n );\n\n return {\n allowedChannelIds: undefined,\n shouldIgnoreBotMessages:\n ignoreBotMessages === \"true\" || ignoreBotMessages === true,\n shouldRespondOnlyToMentions:\n respondOnlyToMentions === \"true\" || respondOnlyToMentions === true,\n };\n }\n\n static async start(runtime: IAgentRuntime): Promise<SlackService> {\n const service = new SlackService(runtime);\n\n const botToken = runtime.getSetting(\"SLACK_BOT_TOKEN\") as string;\n const appToken = runtime.getSetting(\"SLACK_APP_TOKEN\") as string;\n const signingSecret = runtime.getSetting(\"SLACK_SIGNING_SECRET\") as\n | string\n | undefined;\n const userToken = runtime.getSetting(\"SLACK_USER_TOKEN\") as\n | string\n | undefined;\n\n if (!botToken || !botToken.trim()) {\n runtime.logger.warn(\n { src: \"plugin:slack\", agentId: runtime.agentId },\n \"SLACK_BOT_TOKEN not provided, Slack service will not start\",\n );\n return service;\n }\n\n if (!appToken || !appToken.trim()) {\n runtime.logger.warn(\n { src: \"plugin:slack\", agentId: runtime.agentId },\n \"SLACK_APP_TOKEN not provided, Socket Mode will not work\",\n );\n return service;\n }\n\n service.botToken = botToken;\n service.appToken = appToken;\n service.signingSecret = signingSecret || undefined;\n service.userToken = userToken || undefined;\n\n await service.initialize();\n\n return service;\n }\n\n static async stop(runtime: IAgentRuntime): Promise<void> {\n const service = runtime.getService(SLACK_SERVICE_NAME) as\n | SlackService\n | undefined;\n if (service) {\n await service.shutdown();\n }\n }\n\n async stop(): Promise<void> {\n await this.shutdown();\n }\n\n private async initialize(): Promise<void> {\n if (this.isStarting || this.isConnected) {\n return;\n }\n\n this.isStarting = true;\n\n this.runtime.logger.info(\n { src: \"plugin:slack\", agentId: this.runtime.agentId },\n \"Initializing Slack service with Socket Mode\",\n );\n\n this.app = new App({\n token: this.botToken!,\n appToken: this.appToken!,\n socketMode: true,\n logLevel: LogLevel.INFO,\n ...(this.signingSecret ? { signingSecret: this.signingSecret } : {}),\n });\n\n this.client = this.app.client;\n\n // Get bot user info\n const authResult = await this.client.auth.test();\n this.botUserId = authResult.user_id as string;\n this.teamId = authResult.team_id as string;\n\n this.runtime.logger.info(\n {\n src: \"plugin:slack\",\n agentId: this.runtime.agentId,\n botUserId: this.botUserId,\n teamId: this.teamId,\n },\n \"Slack bot authenticated\",\n );\n\n // Register event handlers\n this.registerEventHandlers();\n\n // Start the Socket Mode connection\n await this.app.start();\n\n this.isConnected = true;\n this.isStarting = false;\n\n this.runtime.logger.info(\n { src: \"plugin:slack\", agentId: this.runtime.agentId },\n \"Slack service started successfully\",\n );\n\n // Ensure all workspaces exist\n await this.ensureWorkspaceExists();\n }\n\n private async shutdown(): Promise<void> {\n if (this.app) {\n await this.app.stop();\n this.app = null;\n this.client = null;\n this.isConnected = false;\n\n this.runtime.logger.info(\n { src: \"plugin:slack\", agentId: this.runtime.agentId },\n \"Slack service stopped\",\n );\n }\n }\n\n private registerEventHandlers(): void {\n if (!this.app) return;\n\n // Handle regular messages\n this.app.message(async ({ message, client }) => {\n await this.handleMessage(message as SlackMessageEventType, client);\n });\n\n // Handle app mentions\n this.app.event(\"app_mention\", async ({ event, client }) => {\n await this.handleAppMention(event as SlackAppMentionEventType, client);\n });\n\n // Handle reactions\n this.app.event(\"reaction_added\", async ({ event }) => {\n await this.handleReactionAdded(event);\n });\n\n this.app.event(\"reaction_removed\", async ({ event }) => {\n await this.handleReactionRemoved(event);\n });\n\n // Handle channel joins/leaves\n this.app.event(\"member_joined_channel\", async ({ event }) => {\n await this.handleMemberJoinedChannel(event);\n });\n\n this.app.event(\"member_left_channel\", async ({ event }) => {\n await this.handleMemberLeftChannel(event);\n });\n\n // Handle file shares\n this.app.event(\"file_shared\", async ({ event }) => {\n await this.handleFileShared(event);\n });\n }\n\n private async handleMessage(\n message: SlackMessageEventType,\n _client: WebClient,\n ): Promise<void> {\n // Ignore bot messages if configured\n if (this.settings.shouldIgnoreBotMessages && message.bot_id) {\n return;\n }\n\n // Ignore messages from self\n if (message.user === this.botUserId) {\n return;\n }\n\n // Check channel restrictions\n if (!this.isChannelAllowed(message.channel)) {\n this.runtime.logger.debug(\n {\n src: \"plugin:slack\",\n agentId: this.runtime.agentId,\n channelId: message.channel,\n },\n \"Message received in non-allowed channel, ignoring\",\n );\n return;\n }\n\n // Check if we should only respond to mentions\n const isMentioned = message.text?.includes(`<@${this.botUserId}>`);\n if (this.settings.shouldRespondOnlyToMentions && !isMentioned) {\n return;\n }\n\n const _isThreadReply = Boolean(\n message.thread_ts && message.thread_ts !== message.ts,\n );\n\n // Build memory from message\n const memory = await this.buildMemoryFromMessage(message);\n if (!memory) return;\n\n // Get or create room\n const room = await this.ensureRoomExists(\n message.channel,\n message.thread_ts,\n );\n\n // Store the memory\n await this.runtime.createMemory(memory, \"messages\");\n\n // Emit event\n await this.runtime.emitEvent(\n SlackEventTypes.MESSAGE_RECEIVED as string,\n {\n runtime: this.runtime,\n source: \"slack\",\n } as EventPayload,\n );\n\n // Process the message through the agent\n await this.processAgentMessage(\n memory,\n room,\n message.channel,\n message.thread_ts || message.ts,\n );\n }\n\n private async handleAppMention(\n event: SlackAppMentionEventType,\n _client: WebClient,\n ): Promise<void> {\n // Skip if no user (optional in AppMentionEvent)\n if (!event.user) return;\n\n // Build memory from mention\n const memory = await this.buildMemoryFromMention({\n user: event.user,\n text: event.text,\n channel: event.channel,\n ts: event.ts,\n thread_ts: event.thread_ts,\n });\n if (!memory) return;\n\n // Get or create room\n const room = await this.ensureRoomExists(event.channel, event.thread_ts);\n\n // Store the memory\n await this.runtime.createMemory(memory, \"messages\");\n\n // Emit event\n await this.runtime.emitEvent(\n SlackEventTypes.APP_MENTION as string,\n {\n runtime: this.runtime,\n source: \"slack\",\n } as EventPayload,\n );\n\n // Process the message\n await this.processAgentMessage(\n memory,\n room,\n event.channel,\n event.thread_ts || event.ts,\n );\n }\n\n private async handleReactionAdded(_event: {\n user: string;\n reaction: string;\n item: { type: string; channel: string; ts: string };\n item_user?: string;\n }): Promise<void> {\n await this.runtime.emitEvent(\n SlackEventTypes.REACTION_ADDED as string,\n {\n runtime: this.runtime,\n source: \"slack\",\n } as EventPayload,\n );\n }\n\n private async handleReactionRemoved(_event: {\n user: string;\n reaction: string;\n item: { type: string; channel: string; ts: string };\n item_user?: string;\n }): Promise<void> {\n await this.runtime.emitEvent(\n SlackEventTypes.REACTION_REMOVED as string,\n {\n runtime: this.runtime,\n source: \"slack\",\n } as EventPayload,\n );\n }\n\n private async handleMemberJoinedChannel(event: {\n user: string;\n channel: string;\n team?: string;\n }): Promise<void> {\n // If the bot joined, add to dynamic channels\n if (event.user === this.botUserId) {\n this.dynamicChannelIds.add(event.channel);\n await this.ensureRoomExists(event.channel);\n }\n\n await this.runtime.emitEvent(\n SlackEventTypes.MEMBER_JOINED_CHANNEL as string,\n {\n runtime: this.runtime,\n source: \"slack\",\n } as EventPayload,\n );\n }\n\n private async handleMemberLeftChannel(event: {\n user: string;\n channel: string;\n team?: string;\n }): Promise<void> {\n // If the bot left, remove from dynamic channels\n if (event.user === this.botUserId) {\n this.dynamicChannelIds.delete(event.channel);\n }\n\n await this.runtime.emitEvent(\n SlackEventTypes.MEMBER_LEFT_CHANNEL as string,\n {\n runtime: this.runtime,\n source: \"slack\",\n } as EventPayload,\n );\n }\n\n private async handleFileShared(_event: {\n file_id: string;\n user_id: string;\n channel_id: string;\n }): Promise<void> {\n await this.runtime.emitEvent(\n SlackEventTypes.FILE_SHARED as string,\n {\n runtime: this.runtime,\n source: \"slack\",\n } as EventPayload,\n );\n }\n\n private isChannelAllowed(channelId: string): boolean {\n // If no restrictions, all channels allowed\n if (\n this.allowedChannelIds.size === 0 &&\n this.dynamicChannelIds.size === 0\n ) {\n return true;\n }\n\n // Check static and dynamic allowed lists\n return (\n this.allowedChannelIds.has(channelId) ||\n this.dynamicChannelIds.has(channelId)\n );\n }\n\n private async processAgentMessage(\n memory: Memory,\n room: Room,\n channelId: string,\n threadTs: string,\n ): Promise<void> {\n const callback: HandlerCallback = async (\n response: Content,\n ): Promise<Memory[]> => {\n await this.sendMessage(channelId, response.text || \"\", {\n threadTs,\n replyBroadcast: undefined,\n unfurlLinks: undefined,\n unfurlMedia: undefined,\n mrkdwn: undefined,\n attachments: undefined,\n blocks: undefined,\n });\n\n // Create memory for the response\n const responseMemory: Memory = {\n id: createUniqueUuid(this.runtime, `slack-response-${Date.now()}`),\n agentId: this.runtime.agentId,\n roomId: room.id,\n entityId: this.runtime.agentId,\n content: {\n text: response.text || \"\",\n source: \"slack\",\n inReplyTo: memory.id,\n },\n createdAt: Date.now(),\n };\n\n await this.runtime.createMemory(responseMemory, \"messages\");\n\n await this.runtime.emitEvent(\n SlackEventTypes.MESSAGE_SENT as string,\n {\n runtime: this.runtime,\n source: \"slack\",\n } as EventPayload,\n );\n\n return [responseMemory];\n };\n\n const messageService = getMessageService(this.runtime);\n if (messageService) {\n await messageService.handleMessage(this.runtime, memory, callback);\n }\n }\n\n private async buildMemoryFromMessage(\n message: SlackMessageEventType,\n ): Promise<Memory | null> {\n if (!message.user) return null;\n\n const roomId = await this.getRoomId(message.channel, message.thread_ts);\n const entityId = this.getEntityId(message.user);\n\n // Get user info for display name\n const user = await this.getUser(message.user);\n const displayName = user ? getSlackUserDisplayName(user) : message.user;\n\n // Extract media from files\n const media: Media[] = [];\n if (\"files\" in message && message.files) {\n for (const file of message.files as unknown as SlackFile[]) {\n media.push({\n id: file.id,\n url: file.urlPrivate,\n title: file.title || file.name,\n source: \"slack\",\n description: file.name,\n });\n }\n }\n\n const memory: Memory = {\n id: createUniqueUuid(this.runtime, `slack-${message.ts}`),\n agentId: this.runtime.agentId,\n roomId,\n entityId,\n content: {\n text: message.text || \"\",\n source: \"slack\",\n name: displayName,\n ...(media.length > 0 ? { attachments: media } : {}),\n },\n createdAt: this.parseSlackTimestamp(message.ts),\n };\n\n return memory;\n }\n\n private async buildMemoryFromMention(event: {\n user: string;\n text: string;\n channel: string;\n ts: string;\n thread_ts?: string;\n }): Promise<Memory | null> {\n const roomId = await this.getRoomId(event.channel, event.thread_ts);\n const entityId = this.getEntityId(event.user);\n\n const user = await this.getUser(event.user);\n const displayName = user ? getSlackUserDisplayName(user) : event.user;\n\n // Remove the bot mention from the text\n const cleanText = event.text.replace(`<@${this.botUserId}>`, \"\").trim();\n\n const memory: Memory = {\n id: createUniqueUuid(this.runtime, `slack-mention-${event.ts}`),\n agentId: this.runtime.agentId,\n roomId,\n entityId,\n content: {\n text: cleanText,\n source: \"slack\",\n name: displayName,\n },\n createdAt: this.parseSlackTimestamp(event.ts),\n };\n\n return memory;\n }\n\n private async getRoomId(channelId: string, threadTs?: string): Promise<UUID> {\n // Use thread_ts to create unique rooms for threads\n const roomKey = threadTs ? `${channelId}-${threadTs}` : channelId;\n return createUniqueUuid(this.runtime, `slack-room-${roomKey}`);\n }\n\n private getEntityId(userId: string): UUID {\n return stringToUuid(`slack-user-${userId}`);\n }\n\n private parseSlackTimestamp(ts: string): number {\n // Slack timestamps are in the format: 1234567890.123456\n const [seconds] = ts.split(\".\");\n return parseInt(seconds, 10) * 1000;\n }\n\n private async ensureWorkspaceExists(): Promise<void> {\n if (!this.teamId || !this.client) return;\n\n const worldId = createUniqueUuid(\n this.runtime,\n `slack-workspace-${this.teamId}`,\n );\n\n const existingWorld = await this.runtime.getWorld(worldId);\n if (existingWorld) return;\n\n // Get team info\n const teamInfo = await this.client.team.info();\n const team = teamInfo.team;\n\n const world: World = {\n id: worldId,\n name:\n (team as { name?: string })?.name || `Slack Workspace ${this.teamId}`,\n agentId: this.runtime.agentId,\n metadata: {\n type: \"slack\",\n extra: {\n teamId: this.teamId,\n domain: (team as { domain?: string })?.domain,\n },\n },\n };\n\n await this.runtime.createWorld(world);\n\n this.runtime.logger.info(\n {\n src: \"plugin:slack\",\n agentId: this.runtime.agentId,\n worldId,\n teamId: this.teamId,\n },\n \"Created Slack workspace world\",\n );\n }\n\n private async ensureRoomExists(\n channelId: string,\n threadTs?: string,\n ): Promise<Room> {\n const roomId = await this.getRoomId(channelId, threadTs);\n\n const existingRoom = await this.runtime.getRoom(roomId);\n if (existingRoom) return existingRoom;\n\n // Get channel info\n const channel = await this.getChannel(channelId);\n const channelType = channel ? getSlackChannelType(channel) : \"channel\";\n\n const worldId = this.teamId\n ? createUniqueUuid(this.runtime, `slack-workspace-${this.teamId}`)\n : undefined;\n\n const elizaChannelType =\n channelType === \"im\"\n ? ChannelType.DM\n : channelType === \"mpim\"\n ? ChannelType.GROUP\n : ChannelType.GROUP;\n\n const room: Room = {\n id: roomId,\n name: channel?.name || channelId,\n agentId: this.runtime.agentId,\n source: \"slack\",\n type: elizaChannelType,\n channelId,\n worldId,\n metadata: {\n slackChannelType: channelType,\n threadTs,\n topic: channel?.topic?.value,\n purpose: channel?.purpose?.value,\n serverId: this.teamId,\n },\n };\n\n await this.runtime.createRoom(room);\n\n this.runtime.logger.debug(\n {\n src: \"plugin:slack\",\n agentId: this.runtime.agentId,\n roomId,\n channelId,\n threadTs,\n },\n \"Created Slack room\",\n );\n\n return room;\n }\n\n async getUser(userId: string): Promise<SlackUser | null> {\n // Check cache first\n if (this.userCache.has(userId)) {\n return this.userCache.get(userId)!;\n }\n\n if (!this.client) return null;\n\n const result = await this.client.users.info({ user: userId });\n if (!result.user) return null;\n\n const user: SlackUser = {\n id: result.user.id!,\n teamId: result.user.team_id,\n name: result.user.name!,\n deleted: result.user.deleted || false,\n realName: result.user.real_name,\n tz: result.user.tz,\n tzLabel: result.user.tz_label,\n tzOffset: result.user.tz_offset,\n profile: {\n title: result.user.profile?.title,\n phone: result.user.profile?.phone,\n skype: result.user.profile?.skype,\n realName: result.user.profile?.real_name,\n realNameNormalized: result.user.profile?.real_name_normalized,\n displayName: result.user.profile?.display_name,\n displayNameNormalized: result.user.profile?.display_name_normalized,\n statusText: result.user.profile?.status_text,\n statusEmoji: result.user.profile?.status_emoji,\n statusExpiration: result.user.profile?.status_expiration,\n avatarHash: result.user.profile?.avatar_hash,\n email: result.user.profile?.email,\n image24: result.user.profile?.image_24,\n image32: result.user.profile?.image_32,\n image48: result.user.profile?.image_48,\n image72: result.user.profile?.image_72,\n image192: result.user.profile?.image_192,\n image512: result.user.profile?.image_512,\n image1024: result.user.profile?.image_1024,\n imageOriginal: result.user.profile?.image_original,\n team: result.user.profile?.team,\n },\n isAdmin: result.user.is_admin || false,\n isOwner: result.user.is_owner || false,\n isPrimaryOwner: result.user.is_primary_owner || false,\n isRestricted: result.user.is_restricted || false,\n isUltraRestricted: result.user.is_ultra_restricted || false,\n isBot: result.user.is_bot || false,\n isAppUser: result.user.is_app_user || false,\n updated: result.user.updated || 0,\n };\n\n this.userCache.set(userId, user);\n return user;\n }\n\n async getChannel(channelId: string): Promise<SlackChannel | null> {\n // Check cache first\n if (this.channelCache.has(channelId)) {\n return this.channelCache.get(channelId)!;\n }\n\n if (!this.client) return null;\n\n const result = await this.client.conversations.info({ channel: channelId });\n if (!result.channel) return null;\n\n const channel: SlackChannel = {\n id: (result.channel as { id: string }).id,\n name: (result.channel as { name: string }).name || \"\",\n isChannel:\n (result.channel as { is_channel?: boolean }).is_channel || false,\n isGroup: (result.channel as { is_group?: boolean }).is_group || false,\n isIm: (result.channel as { is_im?: boolean }).is_im || false,\n isMpim: (result.channel as { is_mpim?: boolean }).is_mpim || false,\n isPrivate:\n (result.channel as { is_private?: boolean }).is_private || false,\n isArchived:\n (result.channel as { is_archived?: boolean }).is_archived || false,\n isGeneral:\n (result.channel as { is_general?: boolean }).is_general || false,\n isShared: (result.channel as { is_shared?: boolean }).is_shared || false,\n isOrgShared:\n (result.channel as { is_org_shared?: boolean }).is_org_shared || false,\n isMember: (result.channel as { is_member?: boolean }).is_member || false,\n topic: (\n result.channel as {\n topic?: { value: string; creator: string; last_set: number };\n }\n ).topic\n ? {\n value: (result.channel as { topic: { value: string } }).topic.value,\n creator: (result.channel as { topic: { creator: string } }).topic\n .creator,\n lastSet: (result.channel as { topic: { last_set: number } }).topic\n .last_set,\n }\n : undefined,\n purpose: (\n result.channel as {\n purpose?: { value: string; creator: string; last_set: number };\n }\n ).purpose\n ? {\n value: (result.channel as { purpose: { value: string } }).purpose\n .value,\n creator: (result.channel as { purpose: { creator: string } })\n .purpose.creator,\n lastSet: (result.channel as { purpose: { last_set: number } })\n .purpose.last_set,\n }\n : undefined,\n numMembers: (result.channel as { num_members?: number }).num_members,\n created: (result.channel as { created: number }).created,\n creator: (result.channel as { creator: string }).creator,\n };\n\n this.channelCache.set(channelId, channel);\n return channel;\n }\n\n async sendMessage(\n channelId: string,\n text: string,\n options?: SlackMessageSendOptions,\n ): Promise<{ ts: string; channelId: string }> {\n if (!this.client) {\n throw new Error(\"Slack client not initialized\");\n }\n\n // Split message if too long\n const messages = this.splitMessage(text);\n let lastTs = \"\";\n\n for (const msg of messages) {\n const result = await this.client.chat.postMessage({\n channel: channelId,\n text: msg,\n thread_ts: options?.threadTs,\n reply_broadcast: options?.replyBroadcast,\n unfurl_links: options?.unfurlLinks,\n unfurl_media: options?.unfurlMedia,\n mrkdwn: options?.mrkdwn ?? true,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n attachments: options?.attachments as unknown as any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n blocks: options?.blocks as unknown as any,\n });\n\n lastTs = result.ts as string;\n }\n\n return { ts: lastTs, channelId };\n }\n\n async sendReaction(\n channelId: string,\n messageTs: string,\n emoji: string,\n ): Promise<void> {\n if (!this.client) {\n throw new Error(\"Slack client not initialized\");\n }\n\n // Remove colons if present\n const cleanEmoji = emoji.replace(/^:/, \"\").replace(/:$/, \"\");\n\n await this.client.reactions.add({\n channel: channelId,\n timestamp: messageTs,\n name: cleanEmoji,\n });\n }\n\n async removeReaction(\n channelId: string,\n messageTs: string,\n emoji: string,\n ): Promise<void> {\n if (!this.client) {\n throw new Error(\"Slack client not initialized\");\n }\n\n const cleanEmoji = emoji.replace(/^:/, \"\").replace(/:$/, \"\");\n\n await this.client.reactions.remove({\n channel: channelId,\n timestamp: messageTs,\n name: cleanEmoji,\n });\n }\n\n async editMessage(\n channelId: string,\n messageTs: string,\n text: string,\n ): Promise<void> {\n if (!this.client) {\n throw new Error(\"Slack client not initialized\");\n }\n\n await this.client.chat.update({\n channel: channelId,\n ts: messageTs,\n text,\n });\n }\n\n async deleteMessage(channelId: string, messageTs: string): Promise<void> {\n if (!this.client) {\n throw new Error(\"Slack client not initialized\");\n }\n\n await this.client.chat.delete({\n channel: channelId,\n ts: messageTs,\n });\n }\n\n async pinMessage(channelId: string, messageTs: string): Promise<void> {\n if (!this.client) {\n throw new Error(\"Slack client not initialized\");\n }\n\n await this.client.pins.add({\n channel: channelId,\n timestamp: messageTs,\n });\n }\n\n async unpinMessage(channelId: string, messageTs: string): Promise<void> {\n if (!this.client) {\n throw new Error(\"Slack client not initialized\");\n }\n\n await this.client.pins.remove({\n channel: channelId,\n timestamp: messageTs,\n });\n }\n\n async listPins(channelId: string): Promise<SlackMessage[]> {\n if (!this.client) {\n throw new Error(\"Slack client not initialized\");\n }\n\n const result = await this.client.pins.list({ channel: channelId });\n\n return (result.items || [])\n .filter(\n (item): item is { type: \"message\"; message: Record<string, unknown> } =>\n item.type === \"message\" && \"message\" in item && !!item.message,\n )\n .map((item) => ({\n type: item.message.type as string,\n subtype: item.message.subtype as string | undefined,\n ts: item.message.ts as string,\n user: item.message.user as string | undefined,\n text: item.message.text as string,\n threadTs: item.message.thread_ts as string | undefined,\n replyCount: item.message.reply_count as number | undefined,\n replyUsersCount: item.message.reply_users_count as number | undefined,\n latestReply: item.message.latest_reply as string | undefined,\n reactions: item.message.reactions as\n | { name: string; count: number; users: string[] }[]\n | undefined,\n files: item.message.files as SlackFile[] | undefined,\n attachments: item.message.attachments as SlackAttachment[] | undefined,\n blocks: item.message.blocks as SlackBlock[] | undefined,\n }));\n }\n\n async readHistory(\n channelId: string,\n options?: { limit?: number; before?: string; after?: string },\n ): Promise<SlackMessage[]> {\n if (!this.client) {\n throw new Error(\"Slack client not initialized\");\n }\n\n const result = await this.client.conversations.history({\n channel: channelId,\n limit: options?.limit || 100,\n latest: options?.before,\n oldest: options?.after,\n });\n\n return (result.messages || []).map((msg) => ({\n type: msg.type as string,\n subtype: msg.subtype as string | undefined,\n ts: msg.ts as string,\n user: msg.user as string | undefined,\n text: msg.text as string,\n threadTs: msg.thread_ts as string | undefined,\n replyCount: msg.reply_count as number | undefined,\n replyUsersCount: msg.reply_users_count as number | undefined,\n latestReply: msg.latest_reply as string | undefined,\n reactions: msg.reactions as\n | { name: string; count: number; users: string[] }[]\n | undefined,\n files: msg.files as SlackFile[] | undefined,\n attachments: msg.attachments as SlackAttachment[] | undefined,\n blocks: msg.blocks as SlackBlock[] | undefined,\n }));\n }\n\n async listChannels(options?: {\n types?: string;\n limit?: number;\n }): Promise<SlackChannel[]> {\n if (!this.client) {\n throw new Error(\"Slack client not initialized\");\n }\n\n const result = await this.client.conversations.list({\n types: options?.types || \"public_channel,private_channel\",\n limit: options?.limit || 1000,\n });\n\n return (result.channels || []).map((ch) => ({\n id: ch.id!,\n name: ch.name || \"\",\n isChannel: ch.is_channel || false,\n isGroup: ch.is_group || false,\n isIm: ch.is_im || false,\n isMpim: ch.is_mpim || false,\n isPrivate: ch.is_private || false,\n isArchived: ch.is_archived || false,\n isGeneral: ch.is_general || false,\n isShared: ch.is_shared || false,\n isOrgShared: ch.is_org_shared || false,\n isMember: ch.is_member || false,\n topic: ch.topic\n ? {\n value: ch.topic.value!,\n creator: ch.topic.creator!,\n lastSet: ch.topic.last_set!,\n }\n : undefined,\n purpose: ch.purpose\n ? {\n value: ch.purpose.value!,\n creator: ch.purpose.creator!,\n lastSet: ch.purpose.last_set!,\n }\n : undefined,\n numMembers: ch.num_members,\n created: ch.created || 0,\n creator: ch.creator || \"\",\n }));\n }\n\n async getEmojiList(): Promise<Record<string, string>> {\n if (!this.client) {\n throw new Error(\"Slack client not initialized\");\n }\n\n const result = await this.client.emoji.list();\n return (result.emoji || {}) as Record<string, string>;\n }\n\n async uploadFile(\n channelId: string,\n content: Buffer | string,\n filename: string,\n options?: { title?: string; initialComment?: string; threadTs?: string },\n ): Promise<{ fileId: string; permalink: string }> {\n if (!this.client) {\n throw new Error(\"Slack client not initialized\");\n }\n\n const result = await this.client.files.uploadV2({\n channel_id: channelId,\n content: typeof content === \"string\" ? content : undefined,\n file: typeof content !== \"string\" ? content : undefined,\n filename,\n title: options?.title,\n initial_comment: options?.initialComment,\n thread_ts: options?.threadTs,\n });\n\n const resultWithFile = result as WebAPICallResult & {\n file?: { id: string; permalink: string };\n };\n const file = resultWithFile.file;\n return {\n fileId: file?.id || \"\",\n permalink: file?.permalink || \"\",\n };\n }\n\n private splitMessage(text: string): string[] {\n if (text.length <= MAX_SLACK_MESSAGE_LENGTH) {\n return [text];\n }\n\n const messages: string[] = [];\n let remaining = text;\n\n while (remaining.length > 0) {\n if (remaining.length <= MAX_SLACK_MESSAGE_LENGTH) {\n messages.push(remaining);\n break;\n }\n\n // Find a good split point (prefer newlines, then spaces)\n let splitIndex = MAX_SLACK_MESSAGE_LENGTH;\n\n const lastNewline = remaining.lastIndexOf(\"\\n\", MAX_SLACK_MESSAGE_LENGTH);\n if (lastNewline > MAX_SLACK_MESSAGE_LENGTH / 2) {\n splitIndex = lastNewline + 1;\n } else {\n const lastSpace = remaining.lastIndexOf(\" \", MAX_SLACK_MESSAGE_LENGTH);\n if (lastSpace > MAX_SLACK_MESSAGE_LENGTH / 2) {\n splitIndex = lastSpace + 1;\n }\n }\n\n messages.push(remaining.slice(0, splitIndex));\n remaining = remaining.slice(splitIndex);\n }\n\n return messages;\n }\n\n /**\n * Add a channel to the dynamic allowed list\n */\n addAllowedChannel(channelId: string): void {\n if (isValidChannelId(channelId)) {\n this.dynamicChannelIds.add(channelId);\n }\n }\n\n /**\n * Remove a channel from the dynamic allowed list\n */\n removeAllowedChannel(channelId: string): void {\n this.dynamicChannelIds.delete(channelId);\n }\n\n /**\n * Get all currently allowed channel IDs\n */\n getAllowedChannelIds(): string[] {\n return [...this.allowedChannelIds, ...this.dynamicChannelIds];\n }\n\n /**\n * Check if the service is connected\n */\n isServiceConnected(): boolean {\n return this.isConnected && this.app !== null;\n }\n\n /**\n * Get the bot's user ID\n */\n getBotUserId(): string | null {\n return this.botUserId;\n }\n\n /**\n * Get the team/workspace ID\n */\n getTeamId(): string | null {\n return this.teamId;\n }\n\n /**\n * Clear the user cache\n */\n clearUserCache(): void {\n this.userCache.clear();\n }\n\n /**\n * Clear the channel cache\n */\n clearChannelCache(): void {\n this.channelCache.clear();\n }\n}\n",
|
|
22
22
|
"import type { IAgentRuntime } from \"@elizaos/core\";\n\n/**\n * Default account identifier used when no specific account is configured\n */\nexport const DEFAULT_ACCOUNT_ID = \"default\";\n\n/**\n * Source of the Slack token\n */\nexport type SlackTokenSource = \"env\" | \"config\" | \"character\" | \"none\";\n\n/**\n * DM-specific configuration\n */\nexport interface SlackDmConfig {\n /** If false, ignore all incoming Slack DMs */\n enabled?: boolean;\n /** Direct message access policy */\n policy?: \"open\" | \"disabled\" | \"allowlist\";\n /** Allowlist for DM senders (ids or names) */\n allowFrom?: Array<string | number>;\n /** Reply-to mode for DMs */\n replyToMode?: \"off\" | \"first\" | \"all\";\n}\n\n/**\n * Channel-specific configuration\n */\nexport interface SlackChannelConfig {\n /** If false, ignore this channel */\n enabled?: boolean;\n /** Require bot mention to respond */\n requireMention?: boolean;\n /** User allowlist for this channel */\n users?: Array<string | number>;\n /** Reply-to mode for this channel */\n replyToMode?: \"off\" | \"first\" | \"all\";\n}\n\n/**\n * Reaction notification mode\n */\nexport type SlackReactionNotificationMode = \"off\" | \"own\" | \"all\" | \"allowlist\";\n\n/**\n * Slash command configuration\n */\nexport interface SlackSlashCommandConfig {\n /** Enable slash commands */\n enabled?: boolean;\n /** Slash command name (without leading /) */\n command?: string;\n}\n\n/**\n * Action toggles for Slack features\n */\nexport interface SlackActionConfig {\n /** Enable reactions */\n reactions?: boolean;\n /** Enable pins */\n pins?: boolean;\n /** Enable file uploads */\n files?: boolean;\n /** Enable message editing */\n edit?: boolean;\n /** Enable message deletion */\n delete?: boolean;\n /** Enable emoji list */\n emojiList?: boolean;\n /** Enable member info */\n memberInfo?: boolean;\n}\n\n/**\n * Configuration for a single Slack account\n */\nexport interface SlackAccountConfig {\n /** Optional display name for this account */\n name?: string;\n /** If false, do not start this Slack account */\n enabled?: boolean;\n /** Slack bot token (xoxb-...) */\n botToken?: string;\n /** Slack app-level token (xapp-...) */\n appToken?: string;\n /** Slack signing secret */\n signingSecret?: string;\n /** Slack user token (xoxp-...) for user actions */\n userToken?: string;\n /** Controls how channel messages are handled */\n groupPolicy?: \"open\" | \"disabled\" | \"allowlist\";\n /** Outbound text chunk size (chars) */\n textChunkLimit?: number;\n /** Max media size in MB */\n mediaMaxMb?: number;\n /** Reaction notification mode */\n reactionNotifications?: SlackReactionNotificationMode;\n /** Reaction allowlist when mode is 'allowlist' */\n reactionAllowlist?: Array<string | number>;\n /** Reply-to mode */\n replyToMode?: \"off\" | \"first\" | \"all\";\n /** Reply-to mode by chat type */\n replyToModeByChatType?: Record<string, \"off\" | \"first\" | \"all\">;\n /** Per-action toggles */\n actions?: SlackActionConfig;\n /** Slash command configuration */\n slashCommand?: SlackSlashCommandConfig;\n /** DM configuration */\n dm?: SlackDmConfig;\n /** Per-channel configuration keyed by channel ID */\n channels?: Record<string, SlackChannelConfig>;\n /** Allowed channel IDs */\n allowedChannelIds?: string[];\n /** Whether to ignore bot messages */\n shouldIgnoreBotMessages?: boolean;\n /** Whether to respond only to mentions */\n shouldRespondOnlyToMentions?: boolean;\n}\n\n/**\n * Multi-account Slack configuration structure\n */\nexport interface SlackMultiAccountConfig {\n /** Default/base configuration applied to all accounts */\n enabled?: boolean;\n botToken?: string;\n appToken?: string;\n /** Per-account configuration overrides */\n accounts?: Record<string, SlackAccountConfig>;\n}\n\n/**\n * Resolved Slack account with all configuration merged\n */\nexport interface ResolvedSlackAccount {\n accountId: string;\n enabled: boolean;\n name?: string;\n botToken?: string;\n appToken?: string;\n signingSecret?: string;\n userToken?: string;\n botTokenSource: SlackTokenSource;\n appTokenSource: SlackTokenSource;\n config: SlackAccountConfig;\n}\n\n/**\n * Normalizes an account ID, returning the default if not provided\n */\nexport function normalizeAccountId(accountId?: string | null): string {\n if (!accountId || typeof accountId !== \"string\") {\n return DEFAULT_ACCOUNT_ID;\n }\n const trimmed = accountId.trim().toLowerCase();\n return trimmed || DEFAULT_ACCOUNT_ID;\n}\n\n/**\n * Validates and normalizes a Slack token with the expected prefix\n */\nfunction normalizeSlackToken(\n raw: string | null | undefined,\n prefix: string,\n): string | undefined {\n const trimmed = raw?.trim();\n return trimmed?.startsWith(prefix) ? trimmed : undefined;\n}\n\n/**\n * Validates and normalizes a Slack bot token (xoxb-)\n */\nexport function resolveSlackBotToken(raw?: string | null): string | undefined {\n return normalizeSlackToken(raw, \"xoxb-\");\n}\n\n/**\n * Validates and normalizes a Slack app token (xapp-)\n */\nexport function resolveSlackAppToken(raw?: string | null): string | undefined {\n return normalizeSlackToken(raw, \"xapp-\");\n}\n\n/**\n * Validates and normalizes a Slack user token (xoxp-)\n */\nexport function resolveSlackUserToken(raw?: string | null): string | undefined {\n return normalizeSlackToken(raw, \"xoxp-\");\n}\n\n/**\n * Gets the multi-account configuration from runtime settings\n */\nexport function getMultiAccountConfig(\n runtime: IAgentRuntime,\n): SlackMultiAccountConfig {\n const characterSlack = runtime.character?.settings?.slack as\n | SlackMultiAccountConfig\n | undefined;\n\n return {\n enabled: characterSlack?.enabled,\n botToken: characterSlack?.botToken,\n appToken: characterSlack?.appToken,\n accounts: characterSlack?.accounts,\n };\n}\n\n/**\n * Lists all configured account IDs\n */\nexport function listSlackAccountIds(runtime: IAgentRuntime): string[] {\n const config = getMultiAccountConfig(runtime);\n const accounts = config.accounts;\n\n if (!accounts || typeof accounts !== \"object\") {\n return [DEFAULT_ACCOUNT_ID];\n }\n\n const ids = Object.keys(accounts).filter(Boolean);\n if (ids.length === 0) {\n return [DEFAULT_ACCOUNT_ID];\n }\n\n return ids.slice().sort((a, b) => a.localeCompare(b));\n}\n\n/**\n * Resolves the default account ID to use\n */\nexport function resolveDefaultSlackAccountId(runtime: IAgentRuntime): string {\n const ids = listSlackAccountIds(runtime);\n if (ids.includes(DEFAULT_ACCOUNT_ID)) {\n return DEFAULT_ACCOUNT_ID;\n }\n return ids[0] ?? DEFAULT_ACCOUNT_ID;\n}\n\n/**\n * Gets the account-specific configuration\n */\nfunction getAccountConfig(\n runtime: IAgentRuntime,\n accountId: string,\n): SlackAccountConfig | undefined {\n const config = getMultiAccountConfig(runtime);\n const accounts = config.accounts;\n\n if (!accounts || typeof accounts !== \"object\") {\n return undefined;\n }\n\n return accounts[accountId];\n}\n\n/**\n * Merges base configuration with account-specific overrides\n */\n/**\n * Removes undefined values from an object to prevent them from overwriting during spread\n */\nfunction filterDefined<T extends object>(obj: T): Partial<T> {\n return Object.fromEntries(\n Object.entries(obj).filter(([, v]) => v !== undefined),\n ) as Partial<T>;\n}\n\nfunction mergeSlackAccountConfig(\n runtime: IAgentRuntime,\n accountId: string,\n): SlackAccountConfig {\n const multiConfig = getMultiAccountConfig(runtime);\n const { accounts: _ignored, ...baseConfig } = multiConfig;\n const accountConfig = getAccountConfig(runtime, accountId) ?? {};\n\n // Get environment/runtime settings for the base config\n const envChannelIds = runtime.getSetting(\"SLACK_CHANNEL_IDS\") as\n | string\n | undefined;\n\n const envConfig: SlackAccountConfig = {\n shouldIgnoreBotMessages:\n (\n runtime.getSetting(\"SLACK_SHOULD_IGNORE_BOT_MESSAGES\") as string\n )?.toLowerCase() === \"true\",\n shouldRespondOnlyToMentions:\n (\n runtime.getSetting(\"SLACK_SHOULD_RESPOND_ONLY_TO_MENTIONS\") as string\n )?.toLowerCase() === \"true\",\n allowedChannelIds: envChannelIds\n ? envChannelIds\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean)\n : undefined,\n };\n\n // Merge order: env defaults < base config < account config\n // Filter undefined values to prevent them from overwriting defined values\n return {\n ...filterDefined(envConfig),\n ...filterDefined(baseConfig),\n ...filterDefined(accountConfig),\n };\n}\n\n/**\n * Resolves a complete Slack account configuration\n */\nexport function resolveSlackAccount(\n runtime: IAgentRuntime,\n accountId?: string | null,\n): ResolvedSlackAccount {\n const normalizedAccountId = normalizeAccountId(accountId);\n const multiConfig = getMultiAccountConfig(runtime);\n\n const baseEnabled = multiConfig.enabled !== false;\n const merged = mergeSlackAccountConfig(runtime, normalizedAccountId);\n const accountEnabled = merged.enabled !== false;\n const enabled = baseEnabled && accountEnabled;\n\n const allowEnv = normalizedAccountId === DEFAULT_ACCOUNT_ID;\n\n // Resolve bot token\n const envBotToken = allowEnv\n ? resolveSlackBotToken(runtime.getSetting(\"SLACK_BOT_TOKEN\") as string)\n : undefined;\n const configBotToken = resolveSlackBotToken(merged.botToken);\n const botToken = configBotToken ?? envBotToken;\n const botTokenSource: SlackTokenSource = configBotToken\n ? \"config\"\n : envBotToken\n ? \"env\"\n : \"none\";\n\n // Resolve app token\n const envAppToken = allowEnv\n ? resolveSlackAppToken(runtime.getSetting(\"SLACK_APP_TOKEN\") as string)\n : undefined;\n const configAppToken = resolveSlackAppToken(merged.appToken);\n const appToken = configAppToken ?? envAppToken;\n const appTokenSource: SlackTokenSource = configAppToken\n ? \"config\"\n : envAppToken\n ? \"env\"\n : \"none\";\n\n // Resolve signing secret\n const signingSecret =\n merged.signingSecret ??\n (runtime.getSetting(\"SLACK_SIGNING_SECRET\") as string);\n\n // Resolve user token\n const envUserToken = allowEnv\n ? resolveSlackUserToken(runtime.getSetting(\"SLACK_USER_TOKEN\") as string)\n : undefined;\n const configUserToken = resolveSlackUserToken(merged.userToken);\n const userToken = configUserToken ?? envUserToken;\n\n return {\n accountId: normalizedAccountId,\n enabled,\n name: merged.name?.trim() || undefined,\n botToken,\n appToken,\n signingSecret,\n userToken,\n botTokenSource,\n appTokenSource,\n config: merged,\n };\n}\n\n/**\n * Lists all enabled Slack accounts\n */\nexport function listEnabledSlackAccounts(\n runtime: IAgentRuntime,\n): ResolvedSlackAccount[] {\n return listSlackAccountIds(runtime)\n .map((accountId) => resolveSlackAccount(runtime, accountId))\n .filter((account) => account.enabled && account.botToken);\n}\n\n/**\n * Checks if multi-account mode is enabled\n */\nexport function isMultiAccountEnabled(runtime: IAgentRuntime): boolean {\n const accounts = listEnabledSlackAccounts(runtime);\n return accounts.length > 1;\n}\n\n/**\n * Resolves the reply-to mode for a specific chat type\n */\nexport function resolveSlackReplyToMode(\n account: ResolvedSlackAccount,\n chatType?: string | null,\n): \"off\" | \"first\" | \"all\" {\n const normalized = chatType?.toLowerCase().trim();\n\n // Check chat type specific override\n if (\n normalized &&\n account.config.replyToModeByChatType?.[normalized] !== undefined\n ) {\n return account.config.replyToModeByChatType[normalized] ?? \"off\";\n }\n\n // Check DM-specific setting\n if (normalized === \"direct\" || normalized === \"im\") {\n if (account.config.dm?.replyToMode !== undefined) {\n return account.config.dm.replyToMode;\n }\n }\n\n // Fall back to global setting\n return account.config.replyToMode ?? \"off\";\n}\n",
|
|
23
23
|
"import type { SlackChannel, SlackUser } from \"./types\";\n\n/**\n * Escape special characters for Slack mrkdwn format\n * Preserves Slack's angle-bracket tokens so mentions and links stay intact\n */\nfunction escapeSlackMrkdwnSegment(text: string): string {\n return text\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\");\n}\n\nconst SLACK_ANGLE_TOKEN_RE = /<[^>\\n]+>/g;\n\n/**\n * Checks if an angle-bracket token is an allowed Slack format\n */\nfunction isAllowedSlackAngleToken(token: string): boolean {\n if (!token.startsWith(\"<\") || !token.endsWith(\">\")) {\n return false;\n }\n const inner = token.slice(1, -1);\n return (\n inner.startsWith(\"@\") ||\n inner.startsWith(\"#\") ||\n inner.startsWith(\"!\") ||\n inner.startsWith(\"mailto:\") ||\n inner.startsWith(\"tel:\") ||\n inner.startsWith(\"http://\") ||\n inner.startsWith(\"https://\") ||\n inner.startsWith(\"slack://\")\n );\n}\n\n/**\n * Escapes Slack mrkdwn content while preserving valid Slack tokens\n */\nfunction escapeSlackMrkdwnContent(text: string): string {\n if (!text.includes(\"&\") && !text.includes(\"<\") && !text.includes(\">\")) {\n return text;\n }\n\n SLACK_ANGLE_TOKEN_RE.lastIndex = 0;\n const out: string[] = [];\n let lastIndex = 0;\n\n for (\n let match = SLACK_ANGLE_TOKEN_RE.exec(text);\n match;\n match = SLACK_ANGLE_TOKEN_RE.exec(text)\n ) {\n const matchIndex = match.index ?? 0;\n out.push(escapeSlackMrkdwnSegment(text.slice(lastIndex, matchIndex)));\n const token = match[0] ?? \"\";\n out.push(\n isAllowedSlackAngleToken(token) ? token : escapeSlackMrkdwnSegment(token),\n );\n lastIndex = matchIndex + token.length;\n }\n\n out.push(escapeSlackMrkdwnSegment(text.slice(lastIndex)));\n return out.join(\"\");\n}\n\n/**\n * Escapes Slack mrkdwn text, handling blockquotes specially\n */\nexport function escapeSlackMrkdwn(text: string): string {\n if (!text.includes(\"&\") && !text.includes(\"<\") && !text.includes(\">\")) {\n return text;\n }\n\n return text\n .split(\"\\n\")\n .map((line) => {\n if (line.startsWith(\"> \")) {\n return `> ${escapeSlackMrkdwnContent(line.slice(2))}`;\n }\n return escapeSlackMrkdwnContent(line);\n })\n .join(\"\\n\");\n}\n\n// Placeholder used during conversion to prevent bold from being matched as italic\nconst BOLD_PLACEHOLDER = \"\\u0000BOLD\\u0000\";\n\n/**\n * Converts markdown bold to Slack mrkdwn\n * Uses placeholder to prevent bold from being matched by italic converter\n */\nfunction convertBold(text: string): string {\n return text.replace(\n /\\*\\*(.+?)\\*\\*/g,\n `${BOLD_PLACEHOLDER}$1${BOLD_PLACEHOLDER}`,\n );\n}\n\n/**\n * Converts markdown italic to Slack mrkdwn\n */\nfunction convertItalic(text: string): string {\n // Markdown uses single * for italic, Slack uses _\n // Then restore bold placeholders to actual asterisks\n const converted = text.replace(\n /(?<!\\*)\\*(?!\\*)(.+?)(?<!\\*)\\*(?!\\*)/g,\n \"_$1_\",\n );\n return converted.replace(new RegExp(BOLD_PLACEHOLDER, \"g\"), \"*\");\n}\n\n/**\n * Converts markdown strikethrough to Slack mrkdwn\n */\nfunction convertStrikethrough(text: string): string {\n return text.replace(/~~(.+?)~~/g, \"~$1~\");\n}\n\n/**\n * Converts markdown code blocks to Slack mrkdwn\n */\nfunction convertCodeBlocks(text: string): string {\n // Slack code blocks don't support language hints in the same way\n return text.replace(/```(\\w*)\\n?([\\s\\S]*?)```/g, \"```\\n$2```\");\n}\n\n/**\n * Converts markdown links to Slack mrkdwn links\n */\nfunction convertLinks(text: string): string {\n return text.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, (_, linkText, url) => {\n const trimmedUrl = url.trim();\n const trimmedText = linkText.trim();\n // If link text matches URL, just use URL\n if (\n trimmedText === trimmedUrl ||\n trimmedText === trimmedUrl.replace(/^mailto:/, \"\")\n ) {\n return `<${escapeSlackMrkdwnSegment(trimmedUrl)}>`;\n }\n return `<${escapeSlackMrkdwnSegment(trimmedUrl)}|${escapeSlackMrkdwnSegment(trimmedText)}>`;\n });\n}\n\n/**\n * Converts markdown headings to Slack mrkdwn (bold text)\n * Uses placeholder to prevent headings from being matched by italic converter\n */\nfunction convertHeadings(text: string): string {\n return text.replace(\n /^#{1,6}\\s+(.+)$/gm,\n `${BOLD_PLACEHOLDER}$1${BOLD_PLACEHOLDER}`,\n );\n}\n\n/**\n * Converts markdown to Slack mrkdwn format\n */\nexport function markdownToSlackMrkdwn(markdown: string): string {\n if (!markdown) {\n return \"\";\n }\n\n // Process in order: code blocks -> links -> headings -> text styles -> escape\n let result = convertCodeBlocks(markdown);\n result = convertLinks(result);\n result = convertHeadings(result);\n result = convertBold(result);\n result = convertItalic(result);\n result = convertStrikethrough(result);\n result = escapeSlackMrkdwn(result);\n\n return result;\n}\n\n/**\n * Options for chunking Slack text\n */\nexport interface ChunkSlackTextOpts {\n /** Max characters per message. Default: 4000 */\n maxChars?: number;\n}\n\nconst DEFAULT_MAX_CHARS = 4000;\n\n/**\n * Chunks Slack text while preserving code blocks\n */\nexport function chunkSlackText(\n text: string,\n maxChars: number = DEFAULT_MAX_CHARS,\n): string[] {\n if (!text) {\n return [];\n }\n\n if (text.length <= maxChars) {\n return [text];\n }\n\n const chunks: string[] = [];\n let remaining = text;\n let inCodeBlock = false;\n\n while (remaining.length > 0) {\n if (remaining.length <= maxChars) {\n chunks.push(remaining);\n break;\n }\n\n // Find a good break point\n let breakPoint = maxChars;\n\n // Check if we're in a code block\n const codeBlockCount = (remaining.slice(0, maxChars).match(/```/g) || [])\n .length;\n inCodeBlock = codeBlockCount % 2 !== 0;\n\n // Try to break at a newline\n const newlineIndex = remaining.lastIndexOf(\"\\n\", maxChars);\n if (newlineIndex > maxChars * 0.5) {\n breakPoint = newlineIndex + 1;\n } else {\n // Try to break at a space\n const spaceIndex = remaining.lastIndexOf(\" \", maxChars);\n if (spaceIndex > maxChars * 0.5) {\n breakPoint = spaceIndex + 1;\n }\n }\n\n let chunk = remaining.slice(0, breakPoint);\n\n // If we're breaking inside a code block, close it\n if (inCodeBlock) {\n chunk += \"\\n```\";\n }\n\n chunks.push(chunk);\n\n remaining = remaining.slice(breakPoint);\n\n // If we were in a code block, reopen it\n if (inCodeBlock) {\n remaining = `\\`\\`\\`\\n${remaining}`;\n }\n }\n\n return chunks;\n}\n\n/**\n * Converts markdown to Slack mrkdwn and splits into chunks\n */\nexport function markdownToSlackMrkdwnChunks(\n markdown: string,\n limit: number,\n): string[] {\n return chunkSlackText(markdownToSlackMrkdwn(markdown), limit);\n}\n\n/**\n * Formats a Slack user mention\n */\nexport function formatSlackUserMention(userId: string): string {\n return `<@${userId}>`;\n}\n\n/**\n * Formats a Slack channel mention\n */\nexport function formatSlackChannelMention(channelId: string): string {\n return `<#${channelId}>`;\n}\n\n/**\n * Formats a Slack user group mention\n */\nexport function formatSlackUserGroupMention(groupId: string): string {\n return `<!subteam^${groupId}>`;\n}\n\n/**\n * Formats a Slack special mention (@here, @channel, @everyone)\n */\nexport function formatSlackSpecialMention(\n type: \"here\" | \"channel\" | \"everyone\",\n): string {\n return `<!${type}>`;\n}\n\n/**\n * Formats a Slack link\n */\nexport function formatSlackLink(url: string, text?: string): string {\n const safeUrl = escapeSlackMrkdwnSegment(url);\n if (text && text !== url) {\n return `<${safeUrl}|${escapeSlackMrkdwnSegment(text)}>`;\n }\n return `<${safeUrl}>`;\n}\n\n/**\n * Formats a Slack date\n */\nexport function formatSlackDate(\n timestamp: number | Date,\n format: string = \"{date_short_pretty} at {time}\",\n fallbackText?: string,\n): string {\n const unix = Math.floor(\n (typeof timestamp === \"number\" ? timestamp : timestamp.getTime()) / 1000,\n );\n const fallback = fallbackText || new Date(unix * 1000).toISOString();\n return `<!date^${unix}^${format}|${fallback}>`;\n}\n\n/**\n * Extracts user ID from a Slack mention\n */\nexport function extractUserIdFromMention(mention: string): string | null {\n const match = mention.match(/^<@([UW][A-Z0-9]+)(?:\\|[^>]*)?>$/i);\n return match ? match[1] : null;\n}\n\n/**\n * Extracts channel ID from a Slack mention\n */\nexport function extractChannelIdFromMention(mention: string): string | null {\n const match = mention.match(/^<#([CGD][A-Z0-9]+)(?:\\|[^>]*)?>$/i);\n return match ? match[1] : null;\n}\n\n/**\n * Extracts URL from a Slack link\n */\nexport function extractUrlFromSlackLink(link: string): string | null {\n const match = link.match(/^<(https?:\\/\\/[^|>]+)(?:\\|[^>]*)?>$/);\n return match ? match[1] : null;\n}\n\n/**\n * Formats a user's display name\n */\nexport function formatSlackUserDisplayName(user: SlackUser): string {\n return user.profile.displayName || user.profile.realName || user.name;\n}\n\n/**\n * Formats a channel for display\n */\nexport function formatSlackChannel(channel: SlackChannel): string {\n if (channel.isIm) {\n return \"Direct Message\";\n }\n if (channel.isMpim) {\n return `Group DM: ${channel.name}`;\n }\n return `#${channel.name}`;\n}\n\n/**\n * Gets the channel type as a human-readable string\n */\nexport function getChannelTypeString(channel: SlackChannel): string {\n if (channel.isIm) {\n return \"DM\";\n }\n if (channel.isMpim) {\n return \"Group DM\";\n }\n if (channel.isPrivate || channel.isGroup) {\n return \"Private Channel\";\n }\n return \"Channel\";\n}\n\n/**\n * Resolves the system location string for logging/display\n */\nexport function resolveSlackSystemLocation(\n channel: SlackChannel,\n teamName?: string,\n): string {\n const channelType = getChannelTypeString(channel);\n const channelName = formatSlackChannel(channel);\n if (teamName) {\n return `${teamName} - ${channelType}: ${channelName}`;\n }\n return `${channelType}: ${channelName}`;\n}\n\n/**\n * Checks if a channel is a direct message\n */\nexport function isDirectMessage(channel: SlackChannel): boolean {\n return channel.isIm;\n}\n\n/**\n * Checks if a channel is a group DM (multi-party IM)\n */\nexport function isGroupDm(channel: SlackChannel): boolean {\n return channel.isMpim;\n}\n\n/**\n * Checks if a channel is a private channel\n */\nexport function isPrivateChannel(channel: SlackChannel): boolean {\n return channel.isPrivate || channel.isGroup;\n}\n\n/**\n * Truncates text to a maximum length with an ellipsis\n */\nexport function truncateText(\n text: string,\n maxLength: number,\n ellipsis = \"…\",\n): string {\n if (text.length <= maxLength) {\n return text;\n }\n return text.slice(0, maxLength - ellipsis.length) + ellipsis;\n}\n\n/**\n * Strips Slack mrkdwn formatting from text\n */\nexport function stripSlackFormatting(text: string): string {\n return text\n .replace(/```[\\s\\S]*?```/g, \"\") // Code blocks (must be before inline code)\n .replace(/\\*([^*]+)\\*/g, \"$1\") // Bold\n .replace(/_([^_]+)_/g, \"$1\") // Italic\n .replace(/~([^~]+)~/g, \"$1\") // Strikethrough\n .replace(/`([^`]+)`/g, \"$1\") // Inline code\n .replace(/<@[UW][A-Z0-9]+(?:\\|[^>]*)?>/gi, \"\") // User mentions\n .replace(/<#[CGD][A-Z0-9]+(?:\\|[^>]*)?>/gi, \"\") // Channel mentions\n .replace(/<!subteam\\^[A-Z0-9]+(?:\\|[^>]*)?>/gi, \"\") // User group mentions\n .replace(/<!(?:here|channel|everyone)(?:\\|[^>]*)?>/gi, \"\") // Special mentions\n .replace(/<(https?:\\/\\/[^|>]+)(?:\\|([^>]*))?>/, \"$2\") // Links with text\n .replace(/<(https?:\\/\\/[^>]+)>/, \"$1\") // Plain links\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .trim();\n}\n\n/**\n * Builds a Slack message permalink\n */\nexport function buildSlackMessagePermalink(\n workspaceDomain: string,\n channelId: string,\n messageTs: string,\n): string {\n const formattedTs = `p${messageTs.replace(\".\", \"\")}`;\n return `https://${workspaceDomain}.slack.com/archives/${channelId}/${formattedTs}`;\n}\n\n/**\n * Parses a Slack message permalink\n */\nexport function parseSlackMessagePermalink(\n link: string,\n): { workspaceDomain: string; channelId: string; messageTs: string } | null {\n const match = link.match(\n /^https?:\\/\\/([^.]+)\\.slack\\.com\\/archives\\/([CGD][A-Z0-9]+)\\/p(\\d+)/i,\n );\n if (!match) {\n return null;\n }\n\n const ts = match[3];\n // Convert p1234567890123456 to 1234567890.123456\n const messageTs = `${ts.slice(0, 10)}.${ts.slice(10)}`;\n\n return {\n workspaceDomain: match[1],\n channelId: match[2],\n messageTs,\n };\n}\n"
|
|
24
24
|
],
|
|
25
|
-
"mappings": "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",
|
|
26
|
-
"debugId": "
|
|
25
|
+
"mappings": "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",
|
|
26
|
+
"debugId": "2E7E3AD8220B8E3964756E2164756E21",
|
|
27
27
|
"names": []
|
|
28
28
|
}
|