@elizaos/plugin-matrix 2.0.0-alpha.7 → 2.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +155 -0
- package/auto-enable.ts +20 -0
- package/dist/accounts.d.ts +14 -0
- package/dist/accounts.d.ts.map +1 -0
- package/dist/connector-account-provider.d.ts +18 -0
- package/dist/connector-account-provider.d.ts.map +1 -0
- package/dist/index.d.ts +1 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +595 -645
- package/dist/index.js.map +9 -12
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/service.d.ts +15 -11
- package/dist/service.d.ts.map +1 -1
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/workflow-credential-provider.d.ts +21 -0
- package/dist/workflow-credential-provider.d.ts.map +1 -0
- package/package.json +19 -10
- package/dist/actions/joinRoom.d.ts +0 -6
- package/dist/actions/joinRoom.d.ts.map +0 -1
- package/dist/actions/listRooms.d.ts +0 -6
- package/dist/actions/listRooms.d.ts.map +0 -1
- package/dist/actions/sendMessage.d.ts +0 -6
- package/dist/actions/sendMessage.d.ts.map +0 -1
- package/dist/actions/sendReaction.d.ts +0 -6
- package/dist/actions/sendReaction.d.ts.map +0 -1
- package/dist/providers/roomState.d.ts +0 -9
- package/dist/providers/roomState.d.ts.map +0 -1
- package/dist/providers/userContext.d.ts +0 -9
- package/dist/providers/userContext.d.ts.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/index.ts", "../src/
|
|
3
|
+
"sources": ["../src/index.ts", "../src/accounts.ts", "../src/service.ts", "../src/types.ts", "../src/connector-account-provider.ts", "../src/workflow-credential-provider.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/**\n * Matrix messaging integration plugin for ElizaOS.\n *\n * This plugin provides Matrix protocol integration using matrix-js-sdk.\n */\n\nimport type { IAgentRuntime, Plugin } from \"@elizaos/core\";\nimport { logger } from \"@elizaos/core\";\n\
|
|
6
|
-
"/**\n * Matrix service implementation for ElizaOS.\n *\n * This service provides Matrix messaging capabilities using matrix-js-sdk.\n */\n\nimport { type EventPayload, type IAgentRuntime, logger, Service } from \"@elizaos/core\";\nimport * as sdk from \"matrix-js-sdk\";\nimport {\n getMatrixLocalpart,\n type IMatrixService,\n isValidMatrixRoomAlias,\n MATRIX_SERVICE_NAME,\n MatrixConfigurationError,\n MatrixEventTypes,\n type MatrixMessage,\n type MatrixMessageSendOptions,\n MatrixNotConnectedError,\n type MatrixRoom,\n type MatrixSendResult,\n type MatrixSettings,\n type MatrixUserInfo,\n} from \"./types.js\";\n\n/**\n * Matrix messaging service for ElizaOS agents.\n */\nexport class MatrixService extends Service implements IMatrixService {\n static serviceType: string = MATRIX_SERVICE_NAME;\n\n capabilityDescription = \"Matrix messaging service for chat communication\";\n\n protected declare runtime: IAgentRuntime;\n private settings!: MatrixSettings;\n private client!: sdk.MatrixClient;\n private connected: boolean = false;\n private syncing: boolean = false;\n\n /**\n * Start the Matrix service.\n */\n static async start(runtime: IAgentRuntime): Promise<MatrixService> {\n const service = new MatrixService();\n await service.initialize(runtime);\n return service;\n }\n\n /**\n * Stop the Matrix service.\n */\n static override async stopRuntime(runtime: IAgentRuntime): Promise<void> {\n const service = runtime.getService(MATRIX_SERVICE_NAME) as MatrixService | undefined;\n if (service) {\n await service.stop();\n }\n }\n\n /**\n * Initialize the Matrix service.\n */\n private async initialize(runtime: IAgentRuntime): Promise<void> {\n this.runtime = runtime;\n\n // Load configuration\n this.settings = this.loadSettings();\n\n // Validate configuration\n this.validateSettings();\n\n // Create Matrix client\n this.client = sdk.createClient({\n baseUrl: this.settings.homeserver,\n userId: this.settings.userId,\n accessToken: this.settings.accessToken,\n deviceId: this.settings.deviceId,\n });\n\n // Set up event handlers\n this.setupEventHandlers();\n\n // Start client\n await this.connect();\n\n logger.info(\n `Matrix service initialized for ${this.settings.userId} on ${this.settings.homeserver}`\n );\n }\n\n /**\n * Load settings from runtime.\n */\n private loadSettings(): MatrixSettings {\n // Helper to safely get string settings\n const getStringSetting = (key: string): string | undefined => {\n const value = this.runtime.getSetting(key);\n return typeof value === \"string\" ? value : undefined;\n };\n\n const homeserver = getStringSetting(\"MATRIX_HOMESERVER\");\n const userId = getStringSetting(\"MATRIX_USER_ID\");\n const accessToken = getStringSetting(\"MATRIX_ACCESS_TOKEN\");\n const deviceId = getStringSetting(\"MATRIX_DEVICE_ID\");\n const roomsStr = getStringSetting(\"MATRIX_ROOMS\");\n const autoJoinStr = getStringSetting(\"MATRIX_AUTO_JOIN\");\n const encryptionStr = getStringSetting(\"MATRIX_ENCRYPTION\");\n const requireMentionStr = getStringSetting(\"MATRIX_REQUIRE_MENTION\");\n\n const rooms = roomsStr\n ? roomsStr\n .split(\",\")\n .map((r: string) => r.trim())\n .filter(Boolean)\n : [];\n\n return {\n homeserver: homeserver || \"\",\n userId: userId || \"\",\n accessToken: accessToken || \"\",\n deviceId,\n rooms,\n autoJoin: autoJoinStr === \"true\",\n encryption: encryptionStr === \"true\",\n requireMention: requireMentionStr === \"true\",\n enabled: true,\n };\n }\n\n /**\n * Validate the settings.\n */\n private validateSettings(): void {\n if (!this.settings.homeserver) {\n throw new MatrixConfigurationError(\"MATRIX_HOMESERVER is required\", \"MATRIX_HOMESERVER\");\n }\n\n if (!this.settings.userId) {\n throw new MatrixConfigurationError(\"MATRIX_USER_ID is required\", \"MATRIX_USER_ID\");\n }\n\n if (!this.settings.accessToken) {\n throw new MatrixConfigurationError(\"MATRIX_ACCESS_TOKEN is required\", \"MATRIX_ACCESS_TOKEN\");\n }\n }\n\n /**\n * Set up event handlers for the Matrix client.\n */\n private setupEventHandlers(): void {\n // Sync events\n this.client.on(sdk.ClientEvent.Sync, (state) => {\n if (state === \"PREPARED\") {\n this.syncing = true;\n logger.info(\"Matrix sync complete\");\n this.runtime.emitEvent(MatrixEventTypes.SYNC_COMPLETE, {\n runtime: this.runtime,\n } as EventPayload);\n }\n });\n\n // Room timeline events (messages)\n this.client.on(sdk.RoomEvent.Timeline, (event, room, toStartOfTimeline) => {\n if (toStartOfTimeline) return;\n if (event.getType() !== \"m.room.message\") return;\n if (event.getSender() === this.settings.userId) return;\n\n this.handleRoomMessage(event, room);\n });\n\n // Room membership events\n this.client.on(sdk.RoomMemberEvent.Membership, (event, member) => {\n if (member.userId !== this.settings.userId) return;\n\n if (member.membership === \"invite\" && this.settings.autoJoin) {\n const roomId = event.getRoomId();\n if (roomId) {\n logger.info(`Auto-joining room ${roomId}`);\n this.client.joinRoom(roomId).catch((err) => {\n logger.error(`Failed to auto-join room: ${err.message}`);\n });\n }\n }\n });\n }\n\n /**\n * Handle an incoming room message.\n */\n private handleRoomMessage(event: sdk.MatrixEvent, room: sdk.Room | undefined): void {\n const content = event.getContent();\n const msgType = content.msgtype;\n\n // Only handle text messages for now\n if (msgType !== \"m.text\") return;\n\n const roomId = event.getRoomId();\n if (!roomId || !room) return;\n\n // Check mention requirement\n if (this.settings.requireMention) {\n const body = content.body || \"\";\n const localpart = getMatrixLocalpart(this.settings.userId);\n const mentionPattern = new RegExp(`@?${localpart}`, \"i\");\n if (!mentionPattern.test(body)) {\n return;\n }\n }\n\n const sender = event.getSender();\n const senderMember = room.getMember(sender || \"\");\n\n const senderInfo: MatrixUserInfo = {\n userId: sender || \"\",\n displayName: senderMember?.name,\n avatarUrl: senderMember?.getMxcAvatarUrl() || undefined,\n };\n\n // Check for reply/thread\n const relatesTo = content[\"m.relates_to\"];\n const isEdit = relatesTo?.rel_type === \"m.replace\";\n const threadId = relatesTo?.rel_type === \"m.thread\" ? relatesTo.event_id : undefined;\n const replyTo = relatesTo?.[\"m.in_reply_to\"]?.event_id;\n\n const message: MatrixMessage = {\n eventId: event.getId() || \"\",\n roomId,\n sender: sender || \"\",\n senderInfo,\n content: content.body || \"\",\n msgType,\n formattedBody: content.formatted_body,\n timestamp: event.getTs(),\n threadId,\n replyTo,\n isEdit,\n replacesEventId: isEdit ? relatesTo?.event_id : undefined,\n };\n\n const matrixRoom: MatrixRoom = {\n roomId,\n name: room.name,\n topic: room.currentState.getStateEvents(\"m.room.topic\", \"\")?.getContent()?.topic,\n canonicalAlias: room.getCanonicalAlias() || undefined,\n isEncrypted: room.hasEncryptionStateEvent(),\n isDirect:\n this.client.getAccountData(\"m.direct\")?.getContent()?.[sender || \"\"]?.includes(roomId) ||\n false,\n memberCount: room.getJoinedMemberCount(),\n };\n\n logger.debug(\n `Matrix message from ${senderInfo.displayName || sender} in ${room.name || roomId}: ${message.content.slice(0, 50)}...`\n );\n\n this.runtime.emitEvent(MatrixEventTypes.MESSAGE_RECEIVED, {\n message,\n room: matrixRoom,\n runtime: this.runtime,\n } as EventPayload);\n }\n\n /**\n * Connect to Matrix.\n */\n private async connect(): Promise<void> {\n await this.client.startClient({ initialSyncLimit: 10 });\n this.connected = true;\n\n // Wait for initial sync\n await new Promise<void>((resolve) => {\n const listener = (state: string) => {\n if (state === \"PREPARED\") {\n this.client.removeListener(sdk.ClientEvent.Sync, listener);\n resolve();\n }\n };\n this.client.on(sdk.ClientEvent.Sync, listener);\n });\n\n // Join configured rooms\n for (const room of this.settings.rooms) {\n try {\n await this.joinRoom(room);\n } catch (err) {\n logger.warn(`Failed to join room ${room}: ${err}`);\n }\n }\n }\n\n /**\n * Shutdown the service.\n */\n async stop(): Promise<void> {\n if (this.client) {\n this.client.stopClient();\n }\n this.connected = false;\n logger.info(\"Matrix service stopped\");\n }\n\n // ============================================================================\n // Public Interface\n // ============================================================================\n\n isConnected(): boolean {\n return this.connected && this.syncing;\n }\n\n getUserId(): string {\n return this.settings.userId;\n }\n\n getHomeserver(): string {\n return this.settings.homeserver;\n }\n\n async getJoinedRooms(): Promise<MatrixRoom[]> {\n const rooms = this.client.getRooms();\n return rooms\n .filter((room) => room.getMyMembership() === \"join\")\n .map((room) => ({\n roomId: room.roomId,\n name: room.name,\n topic: room.currentState.getStateEvents(\"m.room.topic\", \"\")?.getContent()?.topic,\n canonicalAlias: room.getCanonicalAlias() || undefined,\n isEncrypted: room.hasEncryptionStateEvent(),\n isDirect: false,\n memberCount: room.getJoinedMemberCount(),\n }));\n }\n\n async sendMessage(text: string, options?: MatrixMessageSendOptions): Promise<MatrixSendResult> {\n if (!this.isConnected()) {\n throw new MatrixNotConnectedError();\n }\n\n const roomId = options?.roomId;\n if (!roomId) {\n return { success: false, error: \"Room ID is required\" };\n }\n\n // Resolve room ID from alias if needed\n let resolvedRoomId = roomId;\n if (isValidMatrixRoomAlias(roomId)) {\n const resolved = await this.client.getRoomIdForAlias(roomId);\n resolvedRoomId = resolved.room_id;\n }\n\n // Build content\n const content: Record<string, unknown> = {\n msgtype: \"m.text\",\n body: text,\n };\n\n if (options?.formatted) {\n content.format = \"org.matrix.custom.html\";\n content.formatted_body = text;\n }\n\n // Handle reply/thread\n if (options?.threadId || options?.replyTo) {\n content[\"m.relates_to\"] = {};\n\n if (options.threadId) {\n (content[\"m.relates_to\"] as Record<string, unknown>).rel_type = \"m.thread\";\n (content[\"m.relates_to\"] as Record<string, unknown>).event_id = options.threadId;\n }\n\n if (options.replyTo) {\n (content[\"m.relates_to\"] as Record<string, unknown>)[\"m.in_reply_to\"] = {\n event_id: options.replyTo,\n };\n }\n }\n\n const response = await this.client.sendMessage(resolvedRoomId, content);\n const eventId = response.event_id;\n\n this.runtime.emitEvent(MatrixEventTypes.MESSAGE_SENT, {\n roomId: resolvedRoomId,\n eventId,\n content: text,\n runtime: this.runtime,\n } as EventPayload);\n\n return {\n success: true,\n eventId,\n roomId: resolvedRoomId,\n };\n }\n\n async sendReaction(roomId: string, eventId: string, emoji: string): Promise<MatrixSendResult> {\n if (!this.isConnected()) {\n throw new MatrixNotConnectedError();\n }\n\n const content = {\n \"m.relates_to\": {\n rel_type: \"m.annotation\",\n event_id: eventId,\n key: emoji,\n },\n };\n\n const response = await this.client.sendEvent(roomId, \"m.reaction\", content);\n\n return {\n success: true,\n eventId: response.event_id,\n roomId,\n };\n }\n\n async joinRoom(roomIdOrAlias: string): Promise<string> {\n if (!this.isConnected()) {\n throw new MatrixNotConnectedError();\n }\n\n const response = await this.client.joinRoom(roomIdOrAlias);\n const roomId = response.roomId;\n\n logger.info(`Joined room ${roomId}`);\n this.runtime.emitEvent(MatrixEventTypes.ROOM_JOINED, {\n room: { roomId },\n runtime: this.runtime,\n } as EventPayload);\n\n return roomId;\n }\n\n async leaveRoom(roomId: string): Promise<void> {\n if (!this.isConnected()) {\n throw new MatrixNotConnectedError();\n }\n\n await this.client.leave(roomId);\n logger.info(`Left room ${roomId}`);\n this.runtime.emitEvent(MatrixEventTypes.ROOM_LEFT, {\n roomId,\n runtime: this.runtime,\n } as EventPayload);\n }\n\n async sendTyping(roomId: string, typing: boolean, timeout: number = 30000): Promise<void> {\n if (!this.isConnected()) {\n return;\n }\n\n await this.client.sendTyping(roomId, typing, timeout);\n }\n\n async sendReadReceipt(roomId: string, eventId: string): Promise<void> {\n if (!this.isConnected()) {\n return;\n }\n\n await this.client.sendReadReceipt(new sdk.MatrixEvent({ event_id: eventId, room_id: roomId }));\n }\n}\n",
|
|
7
|
-
"/**\n * Type definitions for the Matrix plugin.\n */\n\nimport type { IAgentRuntime, Service } from \"@elizaos/core\";\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/** Maximum message length for Matrix */\nexport const MAX_MATRIX_MESSAGE_LENGTH = 4000;\n\n/** Service name constant */\nexport const MATRIX_SERVICE_NAME = \"matrix\";\n\n// ============================================================================\n// Event Types\n// ============================================================================\n\n/** Event types emitted by the Matrix plugin */\nexport enum MatrixEventTypes {\n MESSAGE_RECEIVED = \"MATRIX_MESSAGE_RECEIVED\",\n MESSAGE_SENT = \"MATRIX_MESSAGE_SENT\",\n ROOM_JOINED = \"MATRIX_ROOM_JOINED\",\n ROOM_LEFT = \"MATRIX_ROOM_LEFT\",\n INVITE_RECEIVED = \"MATRIX_INVITE_RECEIVED\",\n REACTION_RECEIVED = \"MATRIX_REACTION_RECEIVED\",\n TYPING_RECEIVED = \"MATRIX_TYPING_RECEIVED\",\n SYNC_COMPLETE = \"MATRIX_SYNC_COMPLETE\",\n CONNECTION_READY = \"MATRIX_CONNECTION_READY\",\n CONNECTION_LOST = \"MATRIX_CONNECTION_LOST\",\n}\n\n// ============================================================================\n// Configuration Types\n// ============================================================================\n\n/** Configuration settings for the Matrix plugin */\nexport interface MatrixSettings {\n /** Matrix homeserver URL */\n homeserver: string;\n /** Matrix user ID (@user:homeserver) */\n userId: string;\n /** Access token for authentication */\n accessToken: string;\n /** Device ID for this session */\n deviceId?: string;\n /** Rooms to auto-join */\n rooms: string[];\n /** Whether to auto-accept invites */\n autoJoin: boolean;\n /** Enable end-to-end encryption */\n encryption: boolean;\n /** Require mention to respond in rooms */\n requireMention: boolean;\n /** Whether this configuration is enabled */\n enabled: boolean;\n}\n\n// ============================================================================\n// Message Types\n// ============================================================================\n\n/** Information about a Matrix user */\nexport interface MatrixUserInfo {\n /** Matrix user ID (@user:homeserver) */\n userId: string;\n /** Display name */\n displayName?: string;\n /** Avatar URL */\n avatarUrl?: string;\n}\n\n/** Represents a Matrix room */\nexport interface MatrixRoom {\n /** Room ID (!room:homeserver) */\n roomId: string;\n /** Room name */\n name?: string;\n /** Room topic */\n topic?: string;\n /** Room alias (#alias:homeserver) */\n canonicalAlias?: string;\n /** Whether room is encrypted */\n isEncrypted: boolean;\n /** Whether this is a direct message room */\n isDirect: boolean;\n /** Member count */\n memberCount: number;\n}\n\n/** Represents a Matrix message */\nexport interface MatrixMessage {\n /** Event ID */\n eventId: string;\n /** Room ID */\n roomId: string;\n /** Sender user ID */\n sender: string;\n /** Sender info */\n senderInfo: MatrixUserInfo;\n /** Message content */\n content: string;\n /** Message type (m.text, m.image, etc.) */\n msgType: string;\n /** Formatted body (HTML) */\n formattedBody?: string;\n /** Timestamp */\n timestamp: number;\n /** Thread root event ID */\n threadId?: string;\n /** Reply-to event ID */\n replyTo?: string;\n /** Whether this is an edit */\n isEdit: boolean;\n /** Original event ID if this is an edit */\n replacesEventId?: string;\n}\n\n/** Options for sending a message */\nexport interface MatrixMessageSendOptions {\n /** Room ID or alias to send to */\n roomId?: string;\n /** Event ID to reply to */\n replyTo?: string;\n /** Thread root event ID */\n threadId?: string;\n /** Format as HTML */\n formatted?: boolean;\n /** Media URL to attach */\n mediaUrl?: string;\n}\n\n/** Result from sending a message */\nexport interface MatrixSendResult {\n /** Whether the send succeeded */\n success: boolean;\n /** Event ID of the sent message */\n eventId?: string;\n /** Room ID */\n roomId?: string;\n /** Error message if failed */\n error?: string;\n}\n\n// ============================================================================\n// Service Interface\n// ============================================================================\n\n/** Interface for the Matrix service */\nexport interface IMatrixService extends Service {\n /** Check if the service is connected */\n isConnected(): boolean;\n\n /** Get the user ID */\n getUserId(): string;\n\n /** Get the homeserver URL */\n getHomeserver(): string;\n\n /** Get joined rooms */\n getJoinedRooms(): Promise<MatrixRoom[]>;\n\n /** Send a message */\n sendMessage(text: string, options?: MatrixMessageSendOptions): Promise<MatrixSendResult>;\n\n /** Send a reaction */\n sendReaction(roomId: string, eventId: string, emoji: string): Promise<MatrixSendResult>;\n\n /** Join a room */\n joinRoom(roomIdOrAlias: string): Promise<string>;\n\n /** Leave a room */\n leaveRoom(roomId: string): Promise<void>;\n\n /** Send typing indicator */\n sendTyping(roomId: string, typing: boolean, timeout?: number): Promise<void>;\n\n /** Send read receipt */\n sendReadReceipt(roomId: string, eventId: string): Promise<void>;\n}\n\n// ============================================================================\n// Event Payloads\n// ============================================================================\n\n/** Payload for MESSAGE_RECEIVED event */\nexport interface MatrixMessageReceivedPayload {\n message: MatrixMessage;\n room: MatrixRoom;\n runtime: IAgentRuntime;\n}\n\n/** Payload for MESSAGE_SENT event */\nexport interface MatrixMessageSentPayload {\n roomId: string;\n eventId: string;\n content: string;\n}\n\n/** Payload for ROOM_JOINED event */\nexport interface MatrixRoomJoinedPayload {\n room: MatrixRoom;\n}\n\n/** Payload for INVITE_RECEIVED event */\nexport interface MatrixInviteReceivedPayload {\n roomId: string;\n inviter: string;\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Check if a string is a valid Matrix user ID.\n */\nexport function isValidMatrixUserId(userId: string): boolean {\n return /^@[^:]+:.+$/.test(userId);\n}\n\n/**\n * Check if a string is a valid Matrix room ID.\n */\nexport function isValidMatrixRoomId(roomId: string): boolean {\n return /^![^:]+:.+$/.test(roomId);\n}\n\n/**\n * Check if a string is a valid Matrix room alias.\n */\nexport function isValidMatrixRoomAlias(alias: string): boolean {\n return /^#[^:]+:.+$/.test(alias);\n}\n\n/**\n * Extract the localpart from a Matrix ID.\n */\nexport function getMatrixLocalpart(matrixId: string): string {\n const match = matrixId.match(/^[@#!]([^:]+):/);\n return match ? match[1] : matrixId;\n}\n\n/**\n * Extract the server part from a Matrix ID.\n */\nexport function getMatrixServerpart(matrixId: string): string {\n const match = matrixId.match(/:(.+)$/);\n return match ? match[1] : \"\";\n}\n\n/**\n * Get the best display name for a Matrix user.\n */\nexport function getMatrixUserDisplayName(user: MatrixUserInfo): string {\n return user.displayName || getMatrixLocalpart(user.userId);\n}\n\n/**\n * Convert a media URL to an HTTP URL via homeserver.\n */\nexport function matrixMxcToHttp(mxcUrl: string, homeserver: string): string | undefined {\n if (!mxcUrl.startsWith(\"mxc://\")) {\n return undefined;\n }\n const [serverName, mediaId] = mxcUrl.slice(6).split(\"/\");\n if (!serverName || !mediaId) {\n return undefined;\n }\n const base = homeserver.replace(/\\/$/, \"\");\n return `${base}/_matrix/media/v3/download/${serverName}/${mediaId}`;\n}\n\n// ============================================================================\n// Custom Errors\n// ============================================================================\n\n/** Base error class for Matrix plugin errors */\nexport class MatrixPluginError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"MatrixPluginError\";\n }\n}\n\n/** Error when the Matrix service is not initialized */\nexport class MatrixServiceNotInitializedError extends MatrixPluginError {\n constructor(message: string = \"Matrix service is not initialized\") {\n super(message);\n this.name = \"MatrixServiceNotInitializedError\";\n }\n}\n\n/** Error when the Matrix client is not connected */\nexport class MatrixNotConnectedError extends MatrixPluginError {\n constructor(message: string = \"Matrix client is not connected\") {\n super(message);\n this.name = \"MatrixNotConnectedError\";\n }\n}\n\n/** Error when there is a configuration problem */\nexport class MatrixConfigurationError extends MatrixPluginError {\n settingName?: string;\n\n constructor(message: string, settingName?: string) {\n super(message);\n this.name = \"MatrixConfigurationError\";\n this.settingName = settingName;\n }\n}\n\n/** Error when an API call fails */\nexport class MatrixApiError extends MatrixPluginError {\n errcode?: string;\n\n constructor(message: string, errcode?: string) {\n super(message);\n this.name = \"MatrixApiError\";\n this.errcode = errcode;\n }\n}\n",
|
|
8
|
-
"/**\n *
|
|
9
|
-
"/**\n *
|
|
10
|
-
"
|
|
11
|
-
"/**\n * Send reaction action for Matrix plugin.\n */\n\nimport type {\n Action,\n ActionResult,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport { composePromptFromState, ModelType, parseJSONObjectFromText } from \"@elizaos/core\";\nimport type { MatrixService } from \"../service.js\";\nimport { MATRIX_SERVICE_NAME } from \"../types.js\";\n\nconst SEND_REACTION_TEMPLATE = `You are helping to extract reaction parameters for Matrix.\n\nThe user wants to react to a Matrix message with an emoji.\n\nRecent conversation:\n{{recentMessages}}\n\nExtract the following:\n1. emoji: The emoji to react with (single emoji character)\n2. eventId: The event ID of the message to react to (starts with $)\n\nRespond with a JSON object like:\n{\n \"emoji\": \"👍\",\n \"eventId\": \"$event123\"\n}\n\nOnly respond with the JSON object, no other text.`;\n\nexport const sendReaction: Action = {\n name: \"MATRIX_SEND_REACTION\",\n similes: [\"REACT_MATRIX\", \"MATRIX_REACT\", \"ADD_MATRIX_REACTION\"],\n description: \"React to a Matrix message with an emoji\",\n\n validate: async (_runtime: IAgentRuntime, message: Memory, _state?: State): Promise<boolean> => {\n return message.content.source === \"matrix\";\n },\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 matrixService = runtime.getService(MATRIX_SERVICE_NAME) as MatrixService | undefined;\n\n if (!matrixService || !matrixService.isConnected()) {\n if (callback) {\n await callback({ text: \"Matrix service is not available.\", source: \"matrix\" });\n }\n return { success: false, error: \"Matrix service not available\" };\n }\n\n // Compose prompt - ensure state has required properties\n const composedState: State = state ?? {\n values: {},\n data: {},\n text: \"\",\n };\n const prompt = await composePromptFromState({\n template: SEND_REACTION_TEMPLATE,\n state: composedState,\n });\n\n // Extract parameters using LLM\n let reactionInfo: { emoji: string; eventId: string } | null = null;\n for (let attempt = 0; attempt < 3; attempt++) {\n const response = await runtime.useModel(ModelType.TEXT_SMALL, {\n prompt,\n });\n\n const parsed = parseJSONObjectFromText(response as string);\n if (parsed?.emoji && parsed?.eventId) {\n reactionInfo = {\n emoji: String(parsed.emoji),\n eventId: String(parsed.eventId),\n };\n break;\n }\n }\n\n if (!reactionInfo) {\n if (callback) {\n await callback({\n text: \"I couldn't understand the reaction request. Please specify the emoji and message.\",\n source: \"matrix\",\n });\n }\n return { success: false, error: \"Could not extract reaction parameters\" };\n }\n\n // Get room from state\n const roomData = state?.data?.room as Record<string, string> | undefined;\n const roomId = roomData?.roomId;\n if (!roomId) {\n if (callback) {\n await callback({\n text: \"I couldn't determine which room this is in.\",\n source: \"matrix\",\n });\n }\n return { success: false, error: \"Could not determine room\" };\n }\n\n // Send reaction\n const result = await matrixService.sendReaction(\n roomId,\n reactionInfo.eventId,\n reactionInfo.emoji\n );\n\n if (!result.success) {\n if (callback) {\n await callback({\n text: `Failed to add reaction: ${result.error}`,\n source: \"matrix\",\n });\n }\n return { success: false, error: result.error };\n }\n\n if (callback) {\n await callback({\n text: `Added ${reactionInfo.emoji} reaction.`,\n source: message.content.source as string,\n });\n }\n\n return {\n success: true,\n data: {\n emoji: reactionInfo.emoji,\n eventId: reactionInfo.eventId,\n roomId,\n },\n };\n },\n\n examples: [\n [\n {\n name: \"{{user1}}\",\n content: { text: \"React to the last message with a thumbs up\" },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"I'll add a thumbs up reaction.\",\n actions: [\"MATRIX_SEND_REACTION\"],\n },\n },\n ],\n ],\n};\n",
|
|
12
|
-
"/**\n * Room state provider for Matrix plugin.\n */\n\nimport type { IAgentRuntime, Memory, Provider, ProviderResult, State } from \"@elizaos/core\";\nimport type { MatrixService } from \"../service.js\";\nimport { getMatrixLocalpart, MATRIX_SERVICE_NAME } from \"../types.js\";\n\n/**\n * Provider that gives the agent information about the current Matrix room context.\n */\nexport const roomStateProvider: Provider = {\n name: \"matrixRoomState\",\n description: \"Provides information about the current Matrix room context\",\n\n dynamic: true,\n get: async (runtime: IAgentRuntime, message: Memory, state: State): Promise<ProviderResult> => {\n // Only provide context for Matrix messages\n if (message.content.source !== \"matrix\") {\n return {\n data: {},\n values: {},\n text: \"\",\n };\n }\n\n const matrixService = runtime.getService(MATRIX_SERVICE_NAME) as MatrixService | undefined;\n\n if (!matrixService || !matrixService.isConnected()) {\n return {\n data: { connected: false },\n values: { connected: false },\n text: \"\",\n };\n }\n\n const agentName = state?.agentName || \"The agent\";\n\n // Get room from state if available\n const room = state?.data?.room as Record<string, unknown> | undefined;\n const roomId = room?.roomId as string | undefined;\n const roomName = room?.name as string | undefined;\n const isEncrypted = room?.isEncrypted as boolean | undefined;\n const isDirect = room?.isDirect as boolean | undefined;\n const memberCount = room?.memberCount as number | undefined;\n\n const userId = matrixService.getUserId();\n const displayName = getMatrixLocalpart(userId);\n\n let responseText = \"\";\n\n if (isDirect) {\n responseText = `${agentName} is in a direct message conversation on Matrix.`;\n } else {\n const roomLabel = roomName || roomId || \"a Matrix room\";\n responseText = `${agentName} is currently in Matrix room \"${roomLabel}\".`;\n\n if (memberCount) {\n responseText += ` The room has ${memberCount} members.`;\n }\n }\n\n if (isEncrypted) {\n responseText += \" This room has end-to-end encryption enabled.\";\n }\n\n responseText += `\\n\\nMatrix is a decentralized communication protocol. ${agentName} is logged in as ${userId}.`;\n\n return {\n data: {\n roomId,\n roomName,\n isEncrypted: isEncrypted || false,\n isDirect: isDirect || false,\n memberCount: memberCount || 0,\n userId,\n displayName,\n homeserver: matrixService.getHomeserver(),\n connected: true,\n },\n values: {\n roomId,\n roomName,\n isEncrypted: isEncrypted || false,\n isDirect: isDirect || false,\n memberCount: memberCount || 0,\n userId,\n },\n text: responseText,\n };\n },\n};\n",
|
|
13
|
-
"/**\n * User context provider for Matrix plugin.\n */\n\nimport type { IAgentRuntime, Memory, Provider, ProviderResult, State } from \"@elizaos/core\";\nimport type { MatrixService } from \"../service.js\";\nimport {\n getMatrixLocalpart,\n getMatrixUserDisplayName,\n MATRIX_SERVICE_NAME,\n type MatrixUserInfo,\n} from \"../types.js\";\n\n/**\n * Provider that gives the agent information about the Matrix user context.\n */\nexport const userContextProvider: Provider = {\n name: \"matrixUserContext\",\n description: \"Provides information about the Matrix user in the current conversation\",\n\n dynamic: true,\n get: async (runtime: IAgentRuntime, message: Memory, state: State): Promise<ProviderResult> => {\n // Only provide context for Matrix messages\n if (message.content.source !== \"matrix\") {\n return {\n data: {},\n values: {},\n text: \"\",\n };\n }\n\n const matrixService = runtime.getService(MATRIX_SERVICE_NAME) as MatrixService | undefined;\n\n if (!matrixService || !matrixService.isConnected()) {\n return {\n data: {},\n values: {},\n text: \"\",\n };\n }\n\n const agentName = state?.agentName || \"The agent\";\n\n // Try to get sender info from message metadata\n const metadata = message.content.metadata as Record<string, unknown> | undefined;\n const senderInfo = metadata?.senderInfo as MatrixUserInfo | undefined;\n\n if (!senderInfo) {\n return {\n data: {},\n values: {},\n text: \"\",\n };\n }\n\n const displayName = getMatrixUserDisplayName(senderInfo);\n const localpart = getMatrixLocalpart(senderInfo.userId);\n\n const responseText = `${agentName} is talking to ${displayName} (${senderInfo.userId}) on Matrix.`;\n\n return {\n data: {\n userId: senderInfo.userId,\n displayName,\n localpart,\n avatarUrl: senderInfo.avatarUrl,\n },\n values: {\n userId: senderInfo.userId,\n displayName,\n localpart,\n },\n text: responseText,\n };\n },\n};\n"
|
|
5
|
+
"/**\n * Matrix messaging integration plugin for ElizaOS.\n *\n * This plugin provides Matrix protocol integration using matrix-js-sdk.\n */\n\nimport type { IAgentRuntime, Plugin } from \"@elizaos/core\";\nimport { getConnectorAccountManager, logger } from \"@elizaos/core\";\n\nexport * from \"./accounts.js\";\n// Service\nexport { MatrixService } from \"./service.js\";\n// Types\nexport * from \"./types.js\";\n\n// Import service for plugin\nimport { createMatrixConnectorAccountProvider } from \"./connector-account-provider.js\";\nimport { MatrixService } from \"./service.js\";\nimport { MatrixWorkflowCredentialProvider } from \"./workflow-credential-provider.js\";\n\n/**\n * Matrix plugin definition.\n */\nconst matrixPlugin: Plugin = {\n name: \"matrix\",\n description: \"Matrix messaging integration plugin for ElizaOS with E2EE support\",\n\n services: [MatrixService, MatrixWorkflowCredentialProvider],\n\n actions: [],\n\n providers: [],\n\n tests: [],\n\n // Self-declared auto-enable: activate when the \"matrix\" connector is\n // configured under config.connectors. The hardcoded CONNECTOR_PLUGINS map\n // in plugin-auto-enable-engine.ts still serves as a fallback.\n autoEnable: {\n connectorKeys: [\"matrix\"],\n },\n\n init: async (_config: Record<string, string>, runtime: IAgentRuntime): Promise<void> => {\n // Register the Matrix provider with the ConnectorAccountManager.\n try {\n const manager = getConnectorAccountManager(runtime);\n manager.registerProvider(createMatrixConnectorAccountProvider(runtime));\n } catch (err) {\n logger.warn(\n {\n src: \"plugin:matrix\",\n err: err instanceof Error ? err.message : String(err),\n },\n \"Failed to register Matrix provider with ConnectorAccountManager\"\n );\n }\n\n const homeserver = runtime.getSetting(\"MATRIX_HOMESERVER\");\n const userId = runtime.getSetting(\"MATRIX_USER_ID\");\n const accessToken = runtime.getSetting(\"MATRIX_ACCESS_TOKEN\");\n\n logger.info(\"=\".repeat(60));\n logger.info(\"Matrix Plugin Configuration\");\n logger.info(\"=\".repeat(60));\n logger.info(` Homeserver: ${homeserver ? `✓ ${homeserver}` : \"✗ Missing (required)\"}`);\n logger.info(` User ID: ${userId ? `✓ ${userId}` : \"✗ Missing (required)\"}`);\n logger.info(` Access Token: ${accessToken ? \"✓ Set\" : \"✗ Missing (required)\"}`);\n logger.info(\"=\".repeat(60));\n\n // Validate required settings\n const missing: string[] = [];\n if (!homeserver) missing.push(\"MATRIX_HOMESERVER\");\n if (!userId) missing.push(\"MATRIX_USER_ID\");\n if (!accessToken) missing.push(\"MATRIX_ACCESS_TOKEN\");\n\n if (missing.length > 0) {\n logger.warn(`Matrix plugin: Missing required configuration: ${missing.join(\", \")}`);\n }\n\n // Additional optional settings\n const deviceId = runtime.getSetting(\"MATRIX_DEVICE_ID\");\n const rooms = runtime.getSetting(\"MATRIX_ROOMS\");\n const autoJoin = runtime.getSetting(\"MATRIX_AUTO_JOIN\");\n const encryption = runtime.getSetting(\"MATRIX_ENCRYPTION\");\n const requireMention = runtime.getSetting(\"MATRIX_REQUIRE_MENTION\");\n\n if (deviceId) {\n logger.info(` Device ID: ${deviceId}`);\n }\n\n if (rooms) {\n logger.info(` Auto-join Rooms: ${rooms}`);\n }\n\n if (autoJoin === \"true\") {\n logger.info(\" Auto-join Invites: ✓ Enabled\");\n }\n\n if (encryption === \"true\") {\n logger.info(\" End-to-End Encryption: ✓ Enabled\");\n }\n\n if (requireMention === \"true\") {\n logger.info(\" Require Mention: ✓ Enabled (will only respond to mentions in rooms)\");\n }\n },\n};\n\nexport default matrixPlugin;\n",
|
|
6
|
+
"import type { IAgentRuntime } from \"@elizaos/core\";\nimport type { MatrixSettings } from \"./types.js\";\n\nexport const DEFAULT_MATRIX_ACCOUNT_ID = \"default\";\n\nexport type MatrixAccountConfig = Partial<Omit<MatrixSettings, \"rooms\" | \"accountId\">> & {\n accountId?: string;\n id?: string;\n rooms?: string[] | string;\n};\n\ntype MatrixMultiAccountConfig = MatrixAccountConfig & {\n accounts?: Record<string, MatrixAccountConfig>;\n};\n\nfunction stringSetting(runtime: IAgentRuntime, key: string): string | undefined {\n const value = runtime.getSetting(key);\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction characterConfig(runtime: IAgentRuntime): MatrixMultiAccountConfig {\n const settings = runtime.character?.settings as Record<string, unknown> | undefined;\n const raw = settings?.matrix;\n return raw && typeof raw === \"object\" ? (raw as MatrixMultiAccountConfig) : {};\n}\n\nfunction parseAccountsJson(runtime: IAgentRuntime): Record<string, MatrixAccountConfig> {\n const raw = stringSetting(runtime, \"MATRIX_ACCOUNTS\");\n if (!raw) return {};\n\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (Array.isArray(parsed)) {\n return Object.fromEntries(\n parsed\n .filter((item): item is MatrixAccountConfig => Boolean(item) && typeof item === \"object\")\n .map((item) => [normalizeMatrixAccountId(item.accountId ?? item.id), item])\n );\n }\n return parsed && typeof parsed === \"object\"\n ? (parsed as Record<string, MatrixAccountConfig>)\n : {};\n } catch {\n return {};\n }\n}\n\nfunction allAccountConfigs(runtime: IAgentRuntime): Record<string, MatrixAccountConfig> {\n return {\n ...(characterConfig(runtime).accounts ?? {}),\n ...parseAccountsJson(runtime),\n };\n}\n\nfunction accountConfig(runtime: IAgentRuntime, accountId: string): MatrixAccountConfig {\n const accounts = allAccountConfigs(runtime);\n return accounts[accountId] ?? accounts[normalizeMatrixAccountId(accountId)] ?? {};\n}\n\nfunction boolValue(value: unknown, fallback = false): boolean {\n if (typeof value === \"boolean\") return value;\n if (typeof value === \"string\") return value.trim().toLowerCase() === \"true\";\n return fallback;\n}\n\nfunction roomsValue(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.map((room) => String(room).trim()).filter(Boolean);\n }\n if (typeof value === \"string\") {\n return value\n .split(\",\")\n .map((room) => room.trim())\n .filter(Boolean);\n }\n return [];\n}\n\nexport function normalizeMatrixAccountId(accountId?: unknown): string {\n if (typeof accountId !== \"string\") return DEFAULT_MATRIX_ACCOUNT_ID;\n const trimmed = accountId.trim();\n return trimmed || DEFAULT_MATRIX_ACCOUNT_ID;\n}\n\nexport function listMatrixAccountIds(runtime: IAgentRuntime): string[] {\n const ids = new Set<string>();\n const config = characterConfig(runtime);\n\n if (\n stringSetting(runtime, \"MATRIX_ACCESS_TOKEN\") ||\n (config.homeserver && config.userId && config.accessToken)\n ) {\n ids.add(DEFAULT_MATRIX_ACCOUNT_ID);\n }\n\n for (const id of Object.keys(allAccountConfigs(runtime))) {\n ids.add(normalizeMatrixAccountId(id));\n }\n\n return Array.from(ids.size ? ids : new Set([DEFAULT_MATRIX_ACCOUNT_ID])).sort((a, b) =>\n a.localeCompare(b)\n );\n}\n\nexport function resolveDefaultMatrixAccountId(runtime: IAgentRuntime): string {\n const requested =\n stringSetting(runtime, \"MATRIX_DEFAULT_ACCOUNT_ID\") ??\n stringSetting(runtime, \"MATRIX_ACCOUNT_ID\");\n if (requested) return normalizeMatrixAccountId(requested);\n\n const ids = listMatrixAccountIds(runtime);\n return ids.includes(DEFAULT_MATRIX_ACCOUNT_ID) ? DEFAULT_MATRIX_ACCOUNT_ID : ids[0];\n}\n\nexport function readMatrixAccountId(...sources: unknown[]): string | undefined {\n for (const source of sources) {\n if (!source || typeof source !== \"object\") continue;\n const record = source as Record<string, unknown>;\n const parameters =\n record.parameters && typeof record.parameters === \"object\"\n ? (record.parameters as Record<string, unknown>)\n : {};\n const data =\n record.data && typeof record.data === \"object\"\n ? (record.data as Record<string, unknown>)\n : {};\n const metadata =\n record.metadata && typeof record.metadata === \"object\"\n ? (record.metadata as Record<string, unknown>)\n : {};\n const matrix =\n data.matrix && typeof data.matrix === \"object\"\n ? (data.matrix as Record<string, unknown>)\n : {};\n const value =\n record.accountId ??\n parameters.accountId ??\n data.accountId ??\n matrix.accountId ??\n metadata.accountId;\n if (typeof value === \"string\" && value.trim()) return normalizeMatrixAccountId(value);\n }\n return undefined;\n}\n\nexport function resolveMatrixAccountSettings(\n runtime: IAgentRuntime,\n requestedAccountId?: string | null\n): MatrixSettings {\n const accountId = normalizeMatrixAccountId(\n requestedAccountId ?? resolveDefaultMatrixAccountId(runtime)\n );\n const base = characterConfig(runtime);\n const account = accountConfig(runtime, accountId);\n const allowEnv = accountId === DEFAULT_MATRIX_ACCOUNT_ID;\n\n return {\n accountId,\n homeserver:\n account.homeserver ??\n base.homeserver ??\n (allowEnv ? stringSetting(runtime, \"MATRIX_HOMESERVER\") : undefined) ??\n \"\",\n userId:\n account.userId ??\n base.userId ??\n (allowEnv ? stringSetting(runtime, \"MATRIX_USER_ID\") : undefined) ??\n \"\",\n accessToken:\n account.accessToken ??\n base.accessToken ??\n (allowEnv ? stringSetting(runtime, \"MATRIX_ACCESS_TOKEN\") : undefined) ??\n \"\",\n deviceId:\n account.deviceId ??\n base.deviceId ??\n (allowEnv ? stringSetting(runtime, \"MATRIX_DEVICE_ID\") : undefined),\n rooms: roomsValue(\n account.rooms ?? base.rooms ?? (allowEnv ? stringSetting(runtime, \"MATRIX_ROOMS\") : undefined)\n ),\n autoJoin: boolValue(\n account.autoJoin ??\n base.autoJoin ??\n (allowEnv ? stringSetting(runtime, \"MATRIX_AUTO_JOIN\") : undefined)\n ),\n encryption: boolValue(\n account.encryption ??\n base.encryption ??\n (allowEnv ? stringSetting(runtime, \"MATRIX_ENCRYPTION\") : undefined)\n ),\n requireMention: boolValue(\n account.requireMention ??\n base.requireMention ??\n (allowEnv ? stringSetting(runtime, \"MATRIX_REQUIRE_MENTION\") : undefined)\n ),\n enabled: boolValue(account.enabled ?? base.enabled, true),\n };\n}\n",
|
|
7
|
+
"/**\n * Matrix service implementation for ElizaOS.\n *\n * This service provides Matrix messaging capabilities using matrix-js-sdk.\n */\n\nimport {\n type Content,\n type EventPayload,\n type IAgentRuntime,\n logger,\n type Memory,\n type MessageConnectorChatContext,\n type MessageConnectorTarget,\n Service,\n type TargetInfo,\n type UUID,\n} from \"@elizaos/core\";\nimport * as sdk from \"matrix-js-sdk\";\nimport type { RoomMessageEventContent } from \"matrix-js-sdk/lib/@types/events\";\nimport {\n DEFAULT_MATRIX_ACCOUNT_ID,\n listMatrixAccountIds,\n normalizeMatrixAccountId,\n readMatrixAccountId,\n resolveDefaultMatrixAccountId,\n resolveMatrixAccountSettings,\n} from \"./accounts.js\";\nimport {\n getMatrixLocalpart,\n type IMatrixService,\n isValidMatrixRoomAlias,\n isValidMatrixRoomId,\n MATRIX_SERVICE_NAME,\n MatrixConfigurationError,\n MatrixEventTypes,\n type MatrixMessage,\n type MatrixMessageSendOptions,\n MatrixNotConnectedError,\n type MatrixRoom,\n type MatrixSendResult,\n type MatrixSettings,\n type MatrixUserInfo,\n} from \"./types.js\";\n\nfunction normalizeSearchQuery(query: string): string {\n return query.trim().toLowerCase();\n}\n\nfunction matrixRoomSearchText(room: MatrixRoom): string {\n return [room.roomId, room.name, room.topic, room.canonicalAlias]\n .filter((value): value is string => typeof value === \"string\" && value.length > 0)\n .join(\" \")\n .toLowerCase();\n}\n\nfunction scoreMatrixRoom(room: MatrixRoom, query: string): number {\n const normalized = normalizeSearchQuery(query);\n if (!normalized) {\n return 0.4;\n }\n\n const candidates = [room.roomId, room.canonicalAlias, room.name].filter(\n (value): value is string => typeof value === \"string\" && value.length > 0\n );\n if (candidates.some((candidate) => candidate.toLowerCase() === normalized)) {\n return 1;\n }\n if (candidates.some((candidate) => candidate.toLowerCase().includes(normalized))) {\n return 0.85;\n }\n return matrixRoomSearchText(room).includes(normalized) ? 0.65 : 0;\n}\n\nfunction matrixRoomToConnectorTarget(\n room: MatrixRoom,\n score = 0.5,\n accountId = DEFAULT_MATRIX_ACCOUNT_ID\n): MessageConnectorTarget {\n const label = room.name || room.canonicalAlias || room.roomId;\n return {\n target: {\n source: MATRIX_SERVICE_NAME,\n accountId,\n channelId: room.roomId,\n },\n label,\n kind: room.isDirect ? \"user\" : \"room\",\n description:\n room.topic || `${room.memberCount} Matrix member${room.memberCount === 1 ? \"\" : \"s\"}`,\n score,\n contexts: [\"social\", \"connectors\"],\n metadata: {\n accountId,\n roomId: room.roomId,\n canonicalAlias: room.canonicalAlias,\n isEncrypted: room.isEncrypted,\n isDirect: room.isDirect,\n memberCount: room.memberCount,\n },\n };\n}\n\ntype ConnectorHookContext = {\n runtime: IAgentRuntime;\n roomId?: UUID;\n target?: TargetInfo;\n};\n\ntype ConnectorReadParams = {\n target?: TargetInfo;\n limit?: number;\n query?: string;\n};\n\ntype ConnectorMutationParams = {\n target?: TargetInfo;\n messageId?: string;\n eventId?: string;\n emoji?: string;\n};\n\ntype ConnectorRoomMembershipParams = {\n target?: TargetInfo;\n roomId?: string;\n roomIdOrAlias?: string;\n alias?: string;\n invite?: string;\n channelId?: string;\n};\n\ntype AdditiveMessageConnectorHooks = {\n fetchMessages?: (\n context: ConnectorHookContext,\n params?: ConnectorReadParams\n ) => Promise<Memory[]>;\n searchMessages?: (\n context: ConnectorHookContext,\n params: ConnectorReadParams & { query: string }\n ) => Promise<Memory[]>;\n reactHandler?: (runtime: IAgentRuntime, params: ConnectorMutationParams) => Promise<void>;\n joinHandler?: (runtime: IAgentRuntime, params: ConnectorRoomMembershipParams) => Promise<void>;\n leaveHandler?: (runtime: IAgentRuntime, params: ConnectorRoomMembershipParams) => Promise<void>;\n};\n\ntype ExtendedMessageConnectorRegistration = Parameters<\n IAgentRuntime[\"registerMessageConnector\"]\n>[0] &\n AdditiveMessageConnectorHooks;\n\ntype MatrixAccountState = {\n accountId: string;\n settings: MatrixSettings;\n client: sdk.MatrixClient;\n connected: boolean;\n syncing: boolean;\n};\n\nfunction normalizeConnectorLimit(limit: number | undefined, fallback = 50): number {\n if (!Number.isFinite(limit) || !limit || limit <= 0) {\n return fallback;\n }\n return Math.min(Math.floor(limit), 200);\n}\n\nasync function readStoredMessageMemories(\n runtime: IAgentRuntime,\n roomId: UUID,\n limit: number\n): Promise<Memory[]> {\n return runtime.getMemories({\n tableName: \"messages\",\n roomId,\n limit,\n orderBy: \"createdAt\",\n orderDirection: \"desc\",\n });\n}\n\nasync function readStoredMessagesForTargets(\n runtime: IAgentRuntime,\n targets: MessageConnectorTarget[],\n limit: number\n): Promise<Memory[]> {\n const roomIds = Array.from(\n new Set(targets.map((target) => target.target.roomId).filter((id): id is UUID => Boolean(id)))\n );\n const chunks = await Promise.all(\n roomIds.map((roomId) => readStoredMessageMemories(runtime, roomId, limit))\n );\n return chunks\n .flat()\n .sort((left, right) => (right.createdAt ?? 0) - (left.createdAt ?? 0))\n .slice(0, limit);\n}\n\nfunction filterMemoriesByQuery(memories: Memory[], query: string, limit: number): Memory[] {\n const normalized = query.trim().toLowerCase();\n if (!normalized) {\n return memories.slice(0, limit);\n }\n return memories\n .filter((memory) => {\n const text = typeof memory.content?.text === \"string\" ? memory.content.text : \"\";\n return text.toLowerCase().includes(normalized);\n })\n .slice(0, limit);\n}\n\nfunction extractMatrixSendOptions(content: Content, target: TargetInfo): MatrixMessageSendOptions {\n const data = content.data as Record<string, unknown> | undefined;\n const matrixData = (data?.matrix && typeof data.matrix === \"object\" ? data.matrix : data) as\n | Record<string, unknown>\n | undefined;\n\n return {\n threadId:\n target.threadId ||\n (typeof matrixData?.threadId === \"string\" ? matrixData.threadId : undefined),\n replyTo: typeof matrixData?.replyTo === \"string\" ? matrixData.replyTo : undefined,\n formatted: matrixData?.formatted === true,\n };\n}\n\n/**\n * Matrix messaging service for ElizaOS agents.\n */\nexport class MatrixService extends Service implements IMatrixService {\n static serviceType: string = MATRIX_SERVICE_NAME;\n\n capabilityDescription = \"Matrix messaging service for chat communication\";\n\n protected declare runtime: IAgentRuntime;\n private states = new Map<string, MatrixAccountState>();\n private defaultAccountId = DEFAULT_MATRIX_ACCOUNT_ID;\n\n /**\n * Start the Matrix service.\n */\n static async start(runtime: IAgentRuntime): Promise<MatrixService> {\n const service = new MatrixService();\n await service.initialize(runtime);\n return service;\n }\n\n /**\n * Stop the Matrix service.\n */\n static override async stopRuntime(runtime: IAgentRuntime): Promise<void> {\n const service = runtime.getService(MATRIX_SERVICE_NAME) as MatrixService | undefined;\n if (service) {\n await service.stop();\n }\n }\n\n static registerSendHandlers(\n runtime: IAgentRuntime,\n service: MatrixService,\n accountId = service.getAccountId(runtime)\n ): void {\n accountId = normalizeMatrixAccountId(accountId);\n const sendHandler = async (\n handlerRuntime: IAgentRuntime,\n target: TargetInfo,\n content: Content\n ): Promise<Memory | undefined> => {\n await service.handleSendMessage(handlerRuntime, target, content);\n return undefined;\n };\n\n if (typeof runtime.registerMessageConnector === \"function\") {\n const registration = {\n source: MATRIX_SERVICE_NAME,\n accountId,\n label: \"Matrix\",\n capabilities: [\n \"send_message\",\n \"send_thread_reply\",\n \"send_formatted_message\",\n \"react_to_message\",\n \"list_rooms\",\n \"join_room\",\n ],\n supportedTargetKinds: [\"room\", \"channel\", \"thread\", \"user\"],\n contexts: [\"social\", \"connectors\"],\n description:\n \"Send messages to joined Matrix rooms, aliases, encrypted rooms, and known direct-message rooms.\",\n metadata: {\n accountId,\n service: MATRIX_SERVICE_NAME,\n },\n sendHandler,\n resolveTargets: async (query) => {\n const rooms = await service.getJoinedRooms(accountId);\n return rooms\n .map((room) => ({ room, score: scoreMatrixRoom(room, query) }))\n .filter(({ score }) => score > 0)\n .sort((left, right) => right.score - left.score)\n .slice(0, 10)\n .map(({ room, score }) => matrixRoomToConnectorTarget(room, score, accountId));\n },\n listRecentTargets: async () =>\n (await service.getJoinedRooms(accountId))\n .slice(0, 10)\n .map((room) => matrixRoomToConnectorTarget(room, 0.5, accountId)),\n listRooms: async () =>\n (await service.getJoinedRooms(accountId)).map((room) =>\n matrixRoomToConnectorTarget(room, 0.5, accountId)\n ),\n fetchMessages: async (context, params) => {\n const limit = normalizeConnectorLimit(params?.limit);\n const target = params?.target ?? context.target;\n if (target?.roomId) {\n return readStoredMessageMemories(context.runtime, target.roomId, limit);\n }\n const targets = (await service.getJoinedRooms(accountId))\n .slice(0, 10)\n .map((room) => matrixRoomToConnectorTarget(room, 0.5, accountId));\n return readStoredMessagesForTargets(context.runtime, targets, limit);\n },\n searchMessages: async (context, params) => {\n const limit = normalizeConnectorLimit(params?.limit);\n const target = params?.target ?? context.target;\n const messages = target?.roomId\n ? await readStoredMessageMemories(context.runtime, target.roomId, Math.max(limit, 100))\n : await readStoredMessagesForTargets(\n context.runtime,\n (await service.getJoinedRooms(accountId))\n .slice(0, 10)\n .map((room) => matrixRoomToConnectorTarget(room, 0.5, accountId)),\n Math.max(limit, 100)\n );\n return filterMemoriesByQuery(messages, params.query, limit);\n },\n reactHandler: async (handlerRuntime, params) => {\n const target = params.target ?? ({ source: MATRIX_SERVICE_NAME } as TargetInfo);\n const room = target.roomId ? await handlerRuntime.getRoom(target.roomId) : null;\n const roomId = String(target.channelId ?? room?.channelId ?? \"\").trim();\n const mutationParams = params as ConnectorMutationParams;\n const eventId = String(mutationParams.eventId ?? params.messageId ?? \"\").trim();\n const emoji = String(params.emoji ?? \"\").trim();\n if (!roomId || !eventId || !emoji) {\n throw new Error(\"Matrix reactHandler requires room, event id, and emoji\");\n }\n const result = await service.sendReaction(roomId, eventId, emoji, accountId);\n if (!result.success) {\n throw new Error(result.error || \"Matrix reaction failed\");\n }\n },\n joinHandler: async (_handlerRuntime, params) => {\n const membershipParams = params as ConnectorRoomMembershipParams;\n const roomIdOrAlias = String(\n membershipParams.roomIdOrAlias ??\n params.alias ??\n params.invite ??\n params.channelId ??\n params.roomId ??\n \"\"\n ).trim();\n if (!roomIdOrAlias) {\n throw new Error(\"Matrix joinHandler requires a room ID or alias\");\n }\n await service.joinRoom(roomIdOrAlias, accountId);\n },\n leaveHandler: async (handlerRuntime, params) => {\n const target = params.target ?? ({ source: MATRIX_SERVICE_NAME } as TargetInfo);\n const room = target.roomId ? await handlerRuntime.getRoom(target.roomId) : null;\n const roomId = String(\n params?.roomId ?? params?.channelId ?? target.channelId ?? room?.channelId ?? \"\"\n );\n if (!roomId) {\n throw new Error(\"Matrix leaveHandler requires a room ID\");\n }\n await service.leaveRoom(roomId, accountId);\n },\n getChatContext: async (target, context) => {\n const room = target.roomId ? await context.runtime.getRoom(target.roomId) : null;\n const channelId = String(target.channelId ?? room?.channelId ?? \"\").trim();\n const joinedRoom = (await service.getJoinedRooms(accountId)).find(\n (candidate) => candidate.roomId === channelId || candidate.canonicalAlias === channelId\n );\n if (!joinedRoom) {\n return null;\n }\n\n return {\n target: {\n source: MATRIX_SERVICE_NAME,\n accountId,\n channelId: joinedRoom.roomId,\n roomId: target.roomId,\n },\n label: joinedRoom.name || joinedRoom.canonicalAlias || joinedRoom.roomId,\n summary: joinedRoom.topic,\n metadata: {\n accountId,\n roomId: joinedRoom.roomId,\n canonicalAlias: joinedRoom.canonicalAlias,\n isEncrypted: joinedRoom.isEncrypted,\n isDirect: joinedRoom.isDirect,\n memberCount: joinedRoom.memberCount,\n },\n } satisfies MessageConnectorChatContext;\n },\n getUserContext: async (entityId, context) => {\n if (typeof context.runtime.getEntityById !== \"function\") {\n return null;\n }\n const entity = await context.runtime.getEntityById(String(entityId) as UUID);\n if (!entity) {\n return null;\n }\n return {\n entityId,\n label: entity.names?.[0],\n aliases: entity.names,\n handles: {},\n metadata: entity.metadata,\n };\n },\n } as ExtendedMessageConnectorRegistration;\n runtime.registerMessageConnector(registration);\n return;\n }\n\n runtime.registerSendHandler(MATRIX_SERVICE_NAME, sendHandler);\n }\n\n /**\n * Initialize the Matrix service.\n */\n private async initialize(runtime: IAgentRuntime): Promise<void> {\n this.runtime = runtime;\n this.defaultAccountId = normalizeMatrixAccountId(resolveDefaultMatrixAccountId(runtime));\n\n const accountIds = listMatrixAccountIds(runtime);\n for (const accountId of accountIds) {\n const settings = this.loadSettings(accountId);\n if (settings.enabled === false) {\n continue;\n }\n\n this.validateSettings(settings);\n\n const state: MatrixAccountState = {\n accountId: normalizeMatrixAccountId(settings.accountId),\n settings,\n client: sdk.createClient({\n baseUrl: settings.homeserver,\n userId: settings.userId,\n accessToken: settings.accessToken,\n deviceId: settings.deviceId,\n }),\n connected: false,\n syncing: false,\n };\n\n this.states.set(state.accountId, state);\n this.setupEventHandlers(state);\n await this.connect(state);\n MatrixService.registerSendHandlers(runtime, this, state.accountId);\n\n logger.info(`Matrix service initialized for ${settings.userId} on ${settings.homeserver}`);\n }\n\n if (this.states.size === 0) {\n const settings = this.loadSettings(this.defaultAccountId);\n this.validateSettings(settings);\n }\n }\n\n /**\n * Load settings from runtime.\n */\n private loadSettings(accountId?: string): MatrixSettings {\n return resolveMatrixAccountSettings(this.runtime, accountId);\n }\n\n /**\n * Validate the settings.\n */\n private validateSettings(settings: MatrixSettings): void {\n if (!settings.homeserver) {\n throw new MatrixConfigurationError(\"MATRIX_HOMESERVER is required\", \"MATRIX_HOMESERVER\");\n }\n\n if (!settings.userId) {\n throw new MatrixConfigurationError(\"MATRIX_USER_ID is required\", \"MATRIX_USER_ID\");\n }\n\n if (!settings.accessToken) {\n throw new MatrixConfigurationError(\"MATRIX_ACCESS_TOKEN is required\", \"MATRIX_ACCESS_TOKEN\");\n }\n }\n\n /**\n * Set up event handlers for the Matrix client.\n */\n private setupEventHandlers(state: MatrixAccountState): void {\n // Sync events\n state.client.on(sdk.ClientEvent.Sync, (syncState) => {\n if (syncState === \"PREPARED\") {\n state.syncing = true;\n logger.info(\"Matrix sync complete\");\n this.runtime.emitEvent(MatrixEventTypes.SYNC_COMPLETE, {\n runtime: this.runtime,\n accountId: state.accountId,\n } as EventPayload);\n }\n });\n\n // Room timeline events (messages)\n state.client.on(sdk.RoomEvent.Timeline, (event, room, toStartOfTimeline) => {\n if (toStartOfTimeline) return;\n if (event.getType() !== \"m.room.message\") return;\n if (event.getSender() === state.settings.userId) return;\n\n this.handleRoomMessage(state, event, room);\n });\n\n // Room membership events\n state.client.on(sdk.RoomMemberEvent.Membership, (event, member) => {\n if (member.userId !== state.settings.userId) return;\n\n if (member.membership === \"invite\" && state.settings.autoJoin) {\n const roomId = event.getRoomId();\n if (roomId) {\n logger.info(`Auto-joining room ${roomId}`);\n state.client.joinRoom(roomId).catch((err) => {\n logger.error(`Failed to auto-join room: ${err.message}`);\n });\n }\n }\n });\n }\n\n /**\n * Handle an incoming room message.\n */\n private handleRoomMessage(\n state: MatrixAccountState,\n event: sdk.MatrixEvent,\n room: sdk.Room | undefined\n ): void {\n const content = event.getContent();\n const msgType = content.msgtype;\n\n // Only handle text messages for now\n if (msgType !== \"m.text\") return;\n\n const roomId = event.getRoomId();\n if (!roomId || !room) return;\n\n // Check mention requirement\n if (state.settings.requireMention) {\n const body = content.body || \"\";\n const localpart = getMatrixLocalpart(state.settings.userId);\n const mentionPattern = new RegExp(`@?${localpart}`, \"i\");\n if (!mentionPattern.test(body)) {\n return;\n }\n }\n\n const sender = event.getSender();\n const senderMember = room.getMember(sender || \"\");\n\n const senderInfo: MatrixUserInfo = {\n userId: sender || \"\",\n displayName: senderMember?.name,\n avatarUrl: senderMember?.getMxcAvatarUrl() || undefined,\n };\n\n // Check for reply/thread\n const relatesTo = content[\"m.relates_to\"];\n const isEdit = relatesTo?.rel_type === \"m.replace\";\n const threadId = relatesTo?.rel_type === \"m.thread\" ? relatesTo.event_id : undefined;\n const replyTo = relatesTo?.[\"m.in_reply_to\"]?.event_id;\n\n const message: MatrixMessage = {\n eventId: event.getId() || \"\",\n roomId,\n sender: sender || \"\",\n senderInfo,\n content: content.body || \"\",\n msgType,\n formattedBody: content.formatted_body,\n timestamp: event.getTs(),\n threadId,\n replyTo,\n isEdit,\n replacesEventId: isEdit ? relatesTo?.event_id : undefined,\n };\n\n const matrixRoom: MatrixRoom = {\n roomId,\n name: room.name,\n topic: room.currentState.getStateEvents(\"m.room.topic\", \"\")?.getContent()?.topic,\n canonicalAlias: room.getCanonicalAlias() || undefined,\n isEncrypted: room.hasEncryptionStateEvent(),\n isDirect:\n state.client\n .getAccountData(sdk.EventType.Direct)\n ?.getContent()\n ?.[sender || \"\"]?.includes(roomId) || false,\n memberCount: room.getJoinedMemberCount(),\n };\n\n logger.debug(\n `Matrix message from ${senderInfo.displayName || sender} in ${room.name || roomId}: ${message.content.slice(0, 50)}...`\n );\n\n this.runtime.emitEvent(MatrixEventTypes.MESSAGE_RECEIVED, {\n message,\n room: matrixRoom,\n runtime: this.runtime,\n accountId: state.accountId,\n } as EventPayload);\n }\n\n /**\n * Connect to Matrix.\n */\n private async connect(state: MatrixAccountState): Promise<void> {\n await state.client.startClient({ initialSyncLimit: 10 });\n state.connected = true;\n\n // Wait for initial sync\n await new Promise<void>((resolve) => {\n const listener = (syncState: string) => {\n if (syncState === \"PREPARED\") {\n state.client.removeListener(sdk.ClientEvent.Sync, listener);\n resolve();\n }\n };\n state.client.on(sdk.ClientEvent.Sync, listener);\n });\n\n // Join configured rooms\n for (const room of state.settings.rooms) {\n try {\n await this.joinRoom(room, state.accountId);\n } catch (err) {\n logger.warn(`Failed to join room ${room}: ${err}`);\n }\n }\n }\n\n /**\n * Shutdown the service.\n */\n async stop(): Promise<void> {\n for (const state of this.states.values()) {\n state.client.stopClient();\n state.connected = false;\n state.syncing = false;\n }\n logger.info(\"Matrix service stopped\");\n }\n\n // ============================================================================\n // Public Interface\n // ============================================================================\n\n isConnected(): boolean {\n const legacy = this as { connected?: boolean; syncing?: boolean };\n const states = this.states ?? new Map<string, MatrixAccountState>();\n if (states.size === 0 && typeof legacy.connected === \"boolean\") {\n return legacy.connected && (legacy.syncing ?? true);\n }\n return Array.from(states.values()).some((state) => state.connected && state.syncing);\n }\n\n getAccountId(runtime?: IAgentRuntime): string {\n const legacy = this as { settings?: MatrixSettings };\n const states = this.states ?? new Map<string, MatrixAccountState>();\n if (states.size === 0 && legacy.settings?.accountId) {\n return normalizeMatrixAccountId(legacy.settings.accountId);\n }\n return normalizeMatrixAccountId(\n this.defaultAccountId !== DEFAULT_MATRIX_ACCOUNT_ID\n ? this.defaultAccountId\n : runtime\n ? resolveDefaultMatrixAccountId(runtime)\n : this.defaultAccountId\n );\n }\n\n getUserId(): string {\n return this.getState().settings.userId;\n }\n\n getHomeserver(): string {\n return this.getState().settings.homeserver;\n }\n\n async getJoinedRooms(accountId?: string): Promise<MatrixRoom[]> {\n const state = this.getState(accountId);\n const rooms = state.client.getRooms();\n return rooms\n .filter((room) => room.getMyMembership() === \"join\")\n .map((room) => ({\n roomId: room.roomId,\n name: room.name,\n topic: room.currentState.getStateEvents(\"m.room.topic\", \"\")?.getContent()?.topic,\n canonicalAlias: room.getCanonicalAlias() || undefined,\n isEncrypted: room.hasEncryptionStateEvent(),\n isDirect: false,\n memberCount: room.getJoinedMemberCount(),\n }));\n }\n\n async sendMessage(text: string, options?: MatrixMessageSendOptions): Promise<MatrixSendResult> {\n const state = this.getState(options?.accountId);\n if (!state.connected || !state.syncing) {\n throw new MatrixNotConnectedError();\n }\n\n const roomId = options?.roomId;\n if (!roomId) {\n return { success: false, error: \"Room ID is required\" };\n }\n\n // Resolve room ID from alias if needed\n let resolvedRoomId = roomId;\n if (isValidMatrixRoomAlias(roomId)) {\n const resolved = await state.client.getRoomIdForAlias(roomId);\n resolvedRoomId = resolved.room_id;\n }\n\n // Build content\n const content: {\n body: string;\n format?: \"org.matrix.custom.html\";\n formatted_body?: string;\n msgtype: sdk.MsgType.Text;\n \"m.relates_to\"?: {\n event_id?: string;\n rel_type?: sdk.RelationType.Thread;\n \"m.in_reply_to\"?: {\n event_id: string;\n };\n };\n } = {\n msgtype: sdk.MsgType.Text,\n body: text,\n };\n\n if (options?.formatted) {\n content.format = \"org.matrix.custom.html\";\n content.formatted_body = text;\n }\n\n // Handle reply/thread\n if (options?.threadId || options?.replyTo) {\n content[\"m.relates_to\"] = {};\n\n if (options.threadId) {\n content[\"m.relates_to\"].rel_type = sdk.RelationType.Thread;\n content[\"m.relates_to\"].event_id = options.threadId;\n }\n\n if (options.replyTo) {\n content[\"m.relates_to\"][\"m.in_reply_to\"] = {\n event_id: options.replyTo,\n };\n }\n }\n\n const response = await state.client.sendMessage(\n resolvedRoomId,\n content as RoomMessageEventContent\n );\n const eventId = response.event_id;\n\n this.runtime.emitEvent(MatrixEventTypes.MESSAGE_SENT, {\n roomId: resolvedRoomId,\n eventId,\n content: text,\n runtime: this.runtime,\n accountId: state.accountId,\n } as EventPayload);\n\n return {\n success: true,\n eventId,\n roomId: resolvedRoomId,\n };\n }\n\n async sendReaction(\n roomId: string,\n eventId: string,\n emoji: string,\n accountId?: string\n ): Promise<MatrixSendResult> {\n const state = this.getState(accountId);\n if (!state.connected || !state.syncing) {\n throw new MatrixNotConnectedError();\n }\n\n const content = {\n \"m.relates_to\": {\n rel_type: sdk.RelationType.Annotation as const,\n event_id: eventId,\n key: emoji,\n },\n };\n\n const response = await state.client.sendEvent(roomId, sdk.EventType.Reaction, content);\n\n return {\n success: true,\n eventId: response.event_id,\n roomId,\n };\n }\n\n async joinRoom(roomIdOrAlias: string, accountId?: string): Promise<string> {\n const state = this.getState(accountId);\n if (!state.connected || !state.syncing) {\n throw new MatrixNotConnectedError();\n }\n\n const response = await state.client.joinRoom(roomIdOrAlias);\n const roomId = response.roomId;\n\n logger.info(`Joined room ${roomId}`);\n this.runtime.emitEvent(MatrixEventTypes.ROOM_JOINED, {\n room: { roomId },\n runtime: this.runtime,\n accountId: state.accountId,\n } as EventPayload);\n\n return roomId;\n }\n\n async leaveRoom(roomId: string, accountId?: string): Promise<void> {\n const state = this.getState(accountId);\n if (!state.connected || !state.syncing) {\n throw new MatrixNotConnectedError();\n }\n\n await state.client.leave(roomId);\n logger.info(`Left room ${roomId}`);\n this.runtime.emitEvent(MatrixEventTypes.ROOM_LEFT, {\n roomId,\n runtime: this.runtime,\n accountId: state.accountId,\n } as EventPayload);\n }\n\n async sendTyping(\n roomId: string,\n typing: boolean,\n timeout: number = 30000,\n accountId?: string\n ): Promise<void> {\n const state = this.getState(accountId);\n if (!state.connected || !state.syncing) {\n return;\n }\n\n await state.client.sendTyping(roomId, typing, timeout);\n }\n\n async sendReadReceipt(roomId: string, eventId: string, accountId?: string): Promise<void> {\n const state = this.getState(accountId);\n if (!state.connected || !state.syncing) {\n return;\n }\n\n await state.client.sendReadReceipt(new sdk.MatrixEvent({ event_id: eventId, room_id: roomId }));\n }\n\n async sendRoomMessage(roomIdOrAlias: string, content: Content): Promise<void> {\n const text = typeof content.text === \"string\" ? content.text.trim() : \"\";\n if (!text) {\n return;\n }\n await this.sendMessage(text, {\n accountId: readMatrixAccountId(content) ?? this.getAccountId(),\n roomId: roomIdOrAlias,\n });\n }\n\n async sendDirectMessage(roomIdOrAlias: string, content: Content): Promise<void> {\n await this.sendRoomMessage(roomIdOrAlias, content);\n }\n\n private async handleSendMessage(\n runtime: IAgentRuntime,\n target: TargetInfo,\n content: Content\n ): Promise<void> {\n const requestedAccountId = normalizeMatrixAccountId(\n target.accountId ?? readMatrixAccountId(content, target) ?? this.getAccountId()\n );\n this.getState(requestedAccountId);\n\n const text = typeof content.text === \"string\" ? content.text.trim() : \"\";\n if (!text) {\n return;\n }\n\n const room = target.roomId ? await runtime.getRoom(target.roomId) : null;\n const roomIdOrAlias = String(\n target.channelId ||\n room?.channelId ||\n (typeof target.roomId === \"string\" &&\n (isValidMatrixRoomId(target.roomId) || isValidMatrixRoomAlias(target.roomId))\n ? target.roomId\n : \"\")\n ).trim();\n\n if (!roomIdOrAlias) {\n throw new Error(\"Matrix target is missing a room ID or alias\");\n }\n\n await this.sendMessage(text, {\n accountId: requestedAccountId,\n roomId: roomIdOrAlias,\n ...extractMatrixSendOptions(content, target),\n });\n }\n\n private getState(accountId = this.defaultAccountId): MatrixAccountState {\n const normalized = normalizeMatrixAccountId(accountId);\n const states = this.states ?? new Map<string, MatrixAccountState>();\n const state = states.get(normalized);\n if (state) {\n return state;\n }\n\n const legacy = this as {\n settings?: MatrixSettings;\n client?: sdk.MatrixClient;\n connected?: boolean;\n syncing?: boolean;\n };\n if (legacy.settings) {\n return {\n accountId: normalizeMatrixAccountId(legacy.settings.accountId ?? normalized),\n settings: legacy.settings,\n client: legacy.client ?? ({} as sdk.MatrixClient),\n connected: legacy.connected ?? true,\n syncing: legacy.syncing ?? true,\n };\n }\n\n throw new Error(`Matrix account '${normalized}' is not available in this service instance`);\n }\n}\n",
|
|
8
|
+
"/**\n * Type definitions for the Matrix plugin.\n */\n\nimport type { IAgentRuntime, Service } from \"@elizaos/core\";\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/** Maximum message length for Matrix */\nexport const MAX_MATRIX_MESSAGE_LENGTH = 4000;\n\n/** Service name constant */\nexport const MATRIX_SERVICE_NAME = \"matrix\";\n\n// ============================================================================\n// Event Types\n// ============================================================================\n\n/** Event types emitted by the Matrix plugin */\nexport enum MatrixEventTypes {\n MESSAGE_RECEIVED = \"MATRIX_MESSAGE_RECEIVED\",\n MESSAGE_SENT = \"MATRIX_MESSAGE_SENT\",\n ROOM_JOINED = \"MATRIX_ROOM_JOINED\",\n ROOM_LEFT = \"MATRIX_ROOM_LEFT\",\n INVITE_RECEIVED = \"MATRIX_INVITE_RECEIVED\",\n REACTION_RECEIVED = \"MATRIX_REACTION_RECEIVED\",\n TYPING_RECEIVED = \"MATRIX_TYPING_RECEIVED\",\n SYNC_COMPLETE = \"MATRIX_SYNC_COMPLETE\",\n CONNECTION_READY = \"MATRIX_CONNECTION_READY\",\n CONNECTION_LOST = \"MATRIX_CONNECTION_LOST\",\n}\n\n// ============================================================================\n// Configuration Types\n// ============================================================================\n\n/** Configuration settings for the Matrix plugin */\nexport interface MatrixSettings {\n /** Connector account identifier for this Matrix bot instance */\n accountId?: string;\n /** Matrix homeserver URL */\n homeserver: string;\n /** Matrix user ID (@user:homeserver) */\n userId: string;\n /** Access token for authentication */\n accessToken: string;\n /** Device ID for this session */\n deviceId?: string;\n /** Rooms to auto-join */\n rooms: string[];\n /** Whether to auto-accept invites */\n autoJoin: boolean;\n /** Enable end-to-end encryption */\n encryption: boolean;\n /** Require mention to respond in rooms */\n requireMention: boolean;\n /** Whether this configuration is enabled */\n enabled: boolean;\n}\n\n// ============================================================================\n// Message Types\n// ============================================================================\n\n/** Information about a Matrix user */\nexport interface MatrixUserInfo {\n /** Matrix user ID (@user:homeserver) */\n userId: string;\n /** Display name */\n displayName?: string;\n /** Avatar URL */\n avatarUrl?: string;\n}\n\n/** Represents a Matrix room */\nexport interface MatrixRoom {\n /** Room ID (!room:homeserver) */\n roomId: string;\n /** Room name */\n name?: string;\n /** Room topic */\n topic?: string;\n /** Room alias (#alias:homeserver) */\n canonicalAlias?: string;\n /** Whether room is encrypted */\n isEncrypted: boolean;\n /** Whether this is a direct message room */\n isDirect: boolean;\n /** Member count */\n memberCount: number;\n}\n\n/** Represents a Matrix message */\nexport interface MatrixMessage {\n /** Event ID */\n eventId: string;\n /** Room ID */\n roomId: string;\n /** Sender user ID */\n sender: string;\n /** Sender info */\n senderInfo: MatrixUserInfo;\n /** Message content */\n content: string;\n /** Message type (m.text, m.image, etc.) */\n msgType: string;\n /** Formatted body (HTML) */\n formattedBody?: string;\n /** Timestamp */\n timestamp: number;\n /** Thread root event ID */\n threadId?: string;\n /** Reply-to event ID */\n replyTo?: string;\n /** Whether this is an edit */\n isEdit: boolean;\n /** Original event ID if this is an edit */\n replacesEventId?: string;\n}\n\n/** Options for sending a message */\nexport interface MatrixMessageSendOptions {\n /** Connector account identifier */\n accountId?: string;\n /** Room ID or alias to send to */\n roomId?: string;\n /** Event ID to reply to */\n replyTo?: string;\n /** Thread root event ID */\n threadId?: string;\n /** Format as HTML */\n formatted?: boolean;\n /** Media URL to attach */\n mediaUrl?: string;\n}\n\n/** Result from sending a message */\nexport interface MatrixSendResult {\n /** Whether the send succeeded */\n success: boolean;\n /** Event ID of the sent message */\n eventId?: string;\n /** Room ID */\n roomId?: string;\n /** Error message if failed */\n error?: string;\n}\n\n// ============================================================================\n// Service Interface\n// ============================================================================\n\n/** Interface for the Matrix service */\nexport interface IMatrixService extends Service {\n /** Check if the service is connected */\n isConnected(): boolean;\n\n /** Get the user ID */\n getUserId(): string;\n\n /** Get the homeserver URL */\n getHomeserver(): string;\n\n /** Get joined rooms */\n getJoinedRooms(): Promise<MatrixRoom[]>;\n\n /** Send a message */\n sendMessage(text: string, options?: MatrixMessageSendOptions): Promise<MatrixSendResult>;\n\n /** Send a reaction */\n sendReaction(roomId: string, eventId: string, emoji: string): Promise<MatrixSendResult>;\n\n /** Join a room */\n joinRoom(roomIdOrAlias: string): Promise<string>;\n\n /** Leave a room */\n leaveRoom(roomId: string): Promise<void>;\n\n /** Send typing indicator */\n sendTyping(roomId: string, typing: boolean, timeout?: number): Promise<void>;\n\n /** Send read receipt */\n sendReadReceipt(roomId: string, eventId: string): Promise<void>;\n}\n\n// ============================================================================\n// Event Payloads\n// ============================================================================\n\n/** Payload for MESSAGE_RECEIVED event */\nexport interface MatrixMessageReceivedPayload {\n message: MatrixMessage;\n room: MatrixRoom;\n runtime: IAgentRuntime;\n}\n\n/** Payload for MESSAGE_SENT event */\nexport interface MatrixMessageSentPayload {\n roomId: string;\n eventId: string;\n content: string;\n}\n\n/** Payload for ROOM_JOINED event */\nexport interface MatrixRoomJoinedPayload {\n room: MatrixRoom;\n}\n\n/** Payload for INVITE_RECEIVED event */\nexport interface MatrixInviteReceivedPayload {\n roomId: string;\n inviter: string;\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Check if a string is a valid Matrix user ID.\n */\nexport function isValidMatrixUserId(userId: string): boolean {\n return /^@[^:]+:.+$/.test(userId);\n}\n\n/**\n * Check if a string is a valid Matrix room ID.\n */\nexport function isValidMatrixRoomId(roomId: string): boolean {\n return /^![^:]+:.+$/.test(roomId);\n}\n\n/**\n * Check if a string is a valid Matrix room alias.\n */\nexport function isValidMatrixRoomAlias(alias: string): boolean {\n return /^#[^:]+:.+$/.test(alias);\n}\n\n/**\n * Extract the localpart from a Matrix ID.\n */\nexport function getMatrixLocalpart(matrixId: string): string {\n const match = matrixId.match(/^[@#!]([^:]+):/);\n return match ? match[1] : matrixId;\n}\n\n/**\n * Extract the server part from a Matrix ID.\n */\nexport function getMatrixServerpart(matrixId: string): string {\n const match = matrixId.match(/:(.+)$/);\n return match ? match[1] : \"\";\n}\n\n/**\n * Get the best display name for a Matrix user.\n */\nexport function getMatrixUserDisplayName(user: MatrixUserInfo): string {\n return user.displayName || getMatrixLocalpart(user.userId);\n}\n\n/**\n * Convert a media URL to an HTTP URL via homeserver.\n */\nexport function matrixMxcToHttp(mxcUrl: string, homeserver: string): string | undefined {\n if (!mxcUrl.startsWith(\"mxc://\")) {\n return undefined;\n }\n const [serverName, mediaId] = mxcUrl.slice(6).split(\"/\");\n if (!serverName || !mediaId) {\n return undefined;\n }\n const base = homeserver.replace(/\\/$/, \"\");\n return `${base}/_matrix/media/v3/download/${serverName}/${mediaId}`;\n}\n\n// ============================================================================\n// Custom Errors\n// ============================================================================\n\n/** Base error class for Matrix plugin errors */\nexport class MatrixPluginError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"MatrixPluginError\";\n }\n}\n\n/** Error when the Matrix service is not initialized */\nexport class MatrixServiceNotInitializedError extends MatrixPluginError {\n constructor(message: string = \"Matrix service is not initialized\") {\n super(message);\n this.name = \"MatrixServiceNotInitializedError\";\n }\n}\n\n/** Error when the Matrix client is not connected */\nexport class MatrixNotConnectedError extends MatrixPluginError {\n constructor(message: string = \"Matrix client is not connected\") {\n super(message);\n this.name = \"MatrixNotConnectedError\";\n }\n}\n\n/** Error when there is a configuration problem */\nexport class MatrixConfigurationError extends MatrixPluginError {\n settingName?: string;\n\n constructor(message: string, settingName?: string) {\n super(message);\n this.name = \"MatrixConfigurationError\";\n this.settingName = settingName;\n }\n}\n\n/** Error when an API call fails */\nexport class MatrixApiError extends MatrixPluginError {\n errcode?: string;\n\n constructor(message: string, errcode?: string) {\n super(message);\n this.name = \"MatrixApiError\";\n this.errcode = errcode;\n }\n}\n",
|
|
9
|
+
"/**\n * Matrix ConnectorAccountManager provider.\n *\n * Adapts the multi-account scaffolding in `accounts.ts` to the\n * `ConnectorAccountProvider` contract from\n * `@elizaos/core/connectors/account-manager`.\n *\n * Source of truth for accounts is character settings (`character.settings.matrix`)\n * + MATRIX_ACCOUNTS JSON env var + single-account env vars (MATRIX_HOMESERVER,\n * MATRIX_USER_ID, MATRIX_ACCESS_TOKEN). AccountKey is `<homeserver>/<userId>`\n * by convention; role is `OWNER` since matrix access tokens authenticate the\n * user, not a bot. E2EE keys are scoped per account by the matrix client and\n * are NOT shared between accounts.\n */\n\nimport type {\n ConnectorAccount,\n ConnectorAccountManager,\n ConnectorAccountPatch,\n ConnectorAccountProvider,\n IAgentRuntime,\n} from \"@elizaos/core\";\nimport {\n DEFAULT_MATRIX_ACCOUNT_ID,\n listMatrixAccountIds,\n normalizeMatrixAccountId,\n resolveMatrixAccountSettings,\n} from \"./accounts.js\";\nimport type { MatrixSettings } from \"./types.js\";\n\nexport const MATRIX_PROVIDER_ID = \"matrix\";\n\nfunction accountKey(settings: MatrixSettings): string {\n // Convention: <homeserver>/<userId>; falls back to the configured accountId.\n if (settings.homeserver && settings.userId) {\n return `${settings.homeserver}/${settings.userId}`;\n }\n return normalizeMatrixAccountId(settings.accountId);\n}\n\nfunction toConnectorAccount(settings: MatrixSettings): ConnectorAccount {\n const now = Date.now();\n const configured = Boolean(settings.homeserver && settings.userId && settings.accessToken);\n return {\n id: normalizeMatrixAccountId(settings.accountId),\n provider: MATRIX_PROVIDER_ID,\n label: settings.userId || settings.accountId,\n role: \"OWNER\",\n purpose: [\"messaging\"],\n accessGate: \"open\",\n status: settings.enabled !== false && configured ? \"connected\" : \"disabled\",\n externalId: accountKey(settings),\n displayHandle: settings.userId || undefined,\n createdAt: now,\n updatedAt: now,\n metadata: {\n homeserver: settings.homeserver ?? \"\",\n userId: settings.userId ?? \"\",\n deviceId: settings.deviceId ?? \"\",\n encryption: settings.encryption ?? false,\n autoJoin: settings.autoJoin ?? false,\n },\n };\n}\n\nexport function createMatrixConnectorAccountProvider(\n runtime: IAgentRuntime\n): ConnectorAccountProvider {\n return {\n provider: MATRIX_PROVIDER_ID,\n label: \"Matrix\",\n listAccounts: async (_manager: ConnectorAccountManager): Promise<ConnectorAccount[]> => {\n const ids = listMatrixAccountIds(runtime);\n if (ids.length === 0) {\n return [\n toConnectorAccount(resolveMatrixAccountSettings(runtime, DEFAULT_MATRIX_ACCOUNT_ID)),\n ];\n }\n return ids.map((id) => toConnectorAccount(resolveMatrixAccountSettings(runtime, id)));\n },\n createAccount: async (input: ConnectorAccountPatch, _manager: ConnectorAccountManager) => {\n return {\n ...input,\n provider: MATRIX_PROVIDER_ID,\n role: input.role ?? \"OWNER\",\n purpose: input.purpose ?? [\"messaging\"],\n accessGate: input.accessGate ?? \"open\",\n status: input.status ?? \"pending\",\n };\n },\n patchAccount: async (\n _accountId: string,\n patch: ConnectorAccountPatch,\n _manager: ConnectorAccountManager\n ) => {\n return { ...patch, provider: MATRIX_PROVIDER_ID };\n },\n deleteAccount: async (_accountId: string, _manager: ConnectorAccountManager) => {\n // No-op at provider layer — runtime credentials live in character\n // settings; deletion of those is out of band.\n },\n };\n}\n",
|
|
10
|
+
"import { type IAgentRuntime, Service } from \"@elizaos/core\";\n\n// Inlined to avoid adding @elizaos/plugin-workflow as a compile-time dependency.\n// The runtime duck-types the service — only the serviceType string and resolve() shape matter.\nconst WORKFLOW_CREDENTIAL_PROVIDER_TYPE = \"workflow_credential_provider\";\ntype CredentialProviderResult =\n | { status: \"credential_data\"; data: Record<string, unknown> }\n | { status: \"needs_auth\"; authUrl: string }\n | null;\n\nconst SUPPORTED = [\"matrixApi\"];\n\nexport class MatrixWorkflowCredentialProvider extends Service {\n static override readonly serviceType = WORKFLOW_CREDENTIAL_PROVIDER_TYPE;\n override capabilityDescription = \"Supplies Matrix credentials to the workflow plugin.\";\n\n static async start(runtime: IAgentRuntime): Promise<MatrixWorkflowCredentialProvider> {\n return new MatrixWorkflowCredentialProvider(runtime);\n }\n\n async stop(): Promise<void> {}\n\n async resolve(_userId: string, credType: string): Promise<CredentialProviderResult> {\n if (credType !== \"matrixApi\") return null;\n const accessToken = this.runtime.getSetting(\"MATRIX_ACCESS_TOKEN\") as string | undefined;\n const homeserver = this.runtime.getSetting(\"MATRIX_HOMESERVER\") as string | undefined;\n if (!accessToken?.trim() || !homeserver?.trim()) return null;\n return {\n status: \"credential_data\",\n data: { accessToken: accessToken.trim(), homeserverUrl: homeserver.trim() },\n };\n }\n\n checkCredentialTypes(credTypes: string[]): { supported: string[]; unsupported: string[] } {\n return {\n supported: credTypes.filter((t) => SUPPORTED.includes(t)),\n unsupported: credTypes.filter((t) => !SUPPORTED.includes(t)),\n };\n }\n}\n"
|
|
14
11
|
],
|
|
15
|
-
"mappings": "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",
|
|
16
|
-
"debugId": "
|
|
12
|
+
"mappings": "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",
|
|
13
|
+
"debugId": "2890053EB234064664756E2164756E21",
|
|
17
14
|
"names": []
|
|
18
15
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":""}
|
package/dist/service.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* This service provides Matrix messaging capabilities using matrix-js-sdk.
|
|
5
5
|
*/
|
|
6
|
-
import { type IAgentRuntime, Service } from "@elizaos/core";
|
|
6
|
+
import { type Content, type IAgentRuntime, Service } from "@elizaos/core";
|
|
7
7
|
import { type IMatrixService, type MatrixMessageSendOptions, type MatrixRoom, type MatrixSendResult } from "./types.js";
|
|
8
8
|
/**
|
|
9
9
|
* Matrix messaging service for ElizaOS agents.
|
|
@@ -12,10 +12,8 @@ export declare class MatrixService extends Service implements IMatrixService {
|
|
|
12
12
|
static serviceType: string;
|
|
13
13
|
capabilityDescription: string;
|
|
14
14
|
protected runtime: IAgentRuntime;
|
|
15
|
-
private
|
|
16
|
-
private
|
|
17
|
-
private connected;
|
|
18
|
-
private syncing;
|
|
15
|
+
private states;
|
|
16
|
+
private defaultAccountId;
|
|
19
17
|
/**
|
|
20
18
|
* Start the Matrix service.
|
|
21
19
|
*/
|
|
@@ -24,6 +22,7 @@ export declare class MatrixService extends Service implements IMatrixService {
|
|
|
24
22
|
* Stop the Matrix service.
|
|
25
23
|
*/
|
|
26
24
|
static stopRuntime(runtime: IAgentRuntime): Promise<void>;
|
|
25
|
+
static registerSendHandlers(runtime: IAgentRuntime, service: MatrixService, accountId?: string): void;
|
|
27
26
|
/**
|
|
28
27
|
* Initialize the Matrix service.
|
|
29
28
|
*/
|
|
@@ -53,14 +52,19 @@ export declare class MatrixService extends Service implements IMatrixService {
|
|
|
53
52
|
*/
|
|
54
53
|
stop(): Promise<void>;
|
|
55
54
|
isConnected(): boolean;
|
|
55
|
+
getAccountId(runtime?: IAgentRuntime): string;
|
|
56
56
|
getUserId(): string;
|
|
57
57
|
getHomeserver(): string;
|
|
58
|
-
getJoinedRooms(): Promise<MatrixRoom[]>;
|
|
58
|
+
getJoinedRooms(accountId?: string): Promise<MatrixRoom[]>;
|
|
59
59
|
sendMessage(text: string, options?: MatrixMessageSendOptions): Promise<MatrixSendResult>;
|
|
60
|
-
sendReaction(roomId: string, eventId: string, emoji: string): Promise<MatrixSendResult>;
|
|
61
|
-
joinRoom(roomIdOrAlias: string): Promise<string>;
|
|
62
|
-
leaveRoom(roomId: string): Promise<void>;
|
|
63
|
-
sendTyping(roomId: string, typing: boolean, timeout?: number): Promise<void>;
|
|
64
|
-
sendReadReceipt(roomId: string, eventId: string): Promise<void>;
|
|
60
|
+
sendReaction(roomId: string, eventId: string, emoji: string, accountId?: string): Promise<MatrixSendResult>;
|
|
61
|
+
joinRoom(roomIdOrAlias: string, accountId?: string): Promise<string>;
|
|
62
|
+
leaveRoom(roomId: string, accountId?: string): Promise<void>;
|
|
63
|
+
sendTyping(roomId: string, typing: boolean, timeout?: number, accountId?: string): Promise<void>;
|
|
64
|
+
sendReadReceipt(roomId: string, eventId: string, accountId?: string): Promise<void>;
|
|
65
|
+
sendRoomMessage(roomIdOrAlias: string, content: Content): Promise<void>;
|
|
66
|
+
sendDirectMessage(roomIdOrAlias: string, content: Content): Promise<void>;
|
|
67
|
+
private handleSendMessage;
|
|
68
|
+
private getState;
|
|
65
69
|
}
|
|
66
70
|
//# sourceMappingURL=service.d.ts.map
|
package/dist/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,KAAK,OAAO,EAEZ,KAAK,aAAa,EAKlB,OAAO,EAGR,MAAM,eAAe,CAAC;AAWvB,OAAO,EAEL,KAAK,cAAc,EAOnB,KAAK,wBAAwB,EAE7B,KAAK,UAAU,EACf,KAAK,gBAAgB,EAGtB,MAAM,YAAY,CAAC;AAqLpB;;GAEG;AACH,qBAAa,aAAc,SAAQ,OAAQ,YAAW,cAAc;IAClE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAuB;IAEjD,qBAAqB,SAAqD;IAE1E,UAAkB,OAAO,EAAE,aAAa,CAAC;IACzC,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,gBAAgB,CAA6B;IAErD;;OAEG;WACU,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAMlE;;OAEG;WACmB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxE,MAAM,CAAC,oBAAoB,CACzB,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,aAAa,EACtB,SAAS,SAAgC,GACxC,IAAI;IAyKP;;OAEG;YACW,UAAU;IAwCxB;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAcxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAsC1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgFzB;;OAEG;YACW,OAAO;IAyBrB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B,WAAW,IAAI,OAAO;IAStB,YAAY,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM;IAe7C,SAAS,IAAI,MAAM;IAInB,aAAa,IAAI,MAAM;IAIjB,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAgBzD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA8ExF,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,CAAC;IAuBtB,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBpE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe5D,UAAU,CACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,EACf,OAAO,GAAE,MAAc,EACvB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IASV,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASnF,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAWvE,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAIjE,iBAAiB;IAoC/B,OAAO,CAAC,QAAQ;CA0BjB"}
|
package/dist/types.d.ts
CHANGED
|
@@ -21,6 +21,8 @@ export declare enum MatrixEventTypes {
|
|
|
21
21
|
}
|
|
22
22
|
/** Configuration settings for the Matrix plugin */
|
|
23
23
|
export interface MatrixSettings {
|
|
24
|
+
/** Connector account identifier for this Matrix bot instance */
|
|
25
|
+
accountId?: string;
|
|
24
26
|
/** Matrix homeserver URL */
|
|
25
27
|
homeserver: string;
|
|
26
28
|
/** Matrix user ID (@user:homeserver) */
|
|
@@ -95,6 +97,8 @@ export interface MatrixMessage {
|
|
|
95
97
|
}
|
|
96
98
|
/** Options for sending a message */
|
|
97
99
|
export interface MatrixMessageSendOptions {
|
|
100
|
+
/** Connector account identifier */
|
|
101
|
+
accountId?: string;
|
|
98
102
|
/** Room ID or alias to send to */
|
|
99
103
|
roomId?: string;
|
|
100
104
|
/** Event ID to reply to */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type IAgentRuntime, Service } from "@elizaos/core";
|
|
2
|
+
type CredentialProviderResult = {
|
|
3
|
+
status: "credential_data";
|
|
4
|
+
data: Record<string, unknown>;
|
|
5
|
+
} | {
|
|
6
|
+
status: "needs_auth";
|
|
7
|
+
authUrl: string;
|
|
8
|
+
} | null;
|
|
9
|
+
export declare class MatrixWorkflowCredentialProvider extends Service {
|
|
10
|
+
static readonly serviceType = "workflow_credential_provider";
|
|
11
|
+
capabilityDescription: string;
|
|
12
|
+
static start(runtime: IAgentRuntime): Promise<MatrixWorkflowCredentialProvider>;
|
|
13
|
+
stop(): Promise<void>;
|
|
14
|
+
resolve(_userId: string, credType: string): Promise<CredentialProviderResult>;
|
|
15
|
+
checkCredentialTypes(credTypes: string[]): {
|
|
16
|
+
supported: string[];
|
|
17
|
+
unsupported: string[];
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=workflow-credential-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-credential-provider.d.ts","sourceRoot":"","sources":["../src/workflow-credential-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAK5D,KAAK,wBAAwB,GACzB;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAC5D;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACzC,IAAI,CAAC;AAIT,qBAAa,gCAAiC,SAAQ,OAAO;IAC3D,gBAAyB,WAAW,kCAAqC;IAChE,qBAAqB,SAAyD;WAE1E,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,gCAAgC,CAAC;IAI/E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAErB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAWnF,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG;QAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAA;KAAE;CAM1F"}
|