@skillkit/messaging 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +190 -0
- package/README.md +189 -0
- package/dist/index.d.ts +226 -0
- package/dist/index.js +854 -0
- package/dist/index.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/storage/inbox.ts","../src/storage/sent.ts","../src/storage/archived.ts","../src/message/builder.ts","../src/message/router.ts","../src/transport/local.ts","../src/transport/remote.ts","../src/index.ts"],"sourcesContent":["export type MessagePriority = 'low' | 'normal' | 'high' | 'urgent';\nexport type MessageType = 'request' | 'response' | 'notification' | 'update';\nexport type MessageStatus = 'unread' | 'read' | 'archived';\n\nexport interface Message {\n id: string;\n from: string;\n to: string;\n type: MessageType;\n priority: MessagePriority;\n subject: string;\n body: unknown;\n replyTo?: string;\n threadId?: string;\n createdAt: string;\n readAt?: string;\n status: MessageStatus;\n metadata?: Record<string, unknown>;\n}\n\nexport interface MessageCreateInput {\n to: string;\n type?: MessageType;\n priority?: MessagePriority;\n subject: string;\n body: unknown;\n replyTo?: string;\n threadId?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface MessageFilter {\n from?: string;\n to?: string;\n type?: MessageType;\n priority?: MessagePriority;\n status?: MessageStatus;\n threadId?: string;\n since?: string;\n until?: string;\n limit?: number;\n}\n\nexport interface MessageThread {\n id: string;\n subject: string;\n participants: string[];\n messageCount: number;\n lastMessageAt: string;\n createdAt: string;\n}\n\nexport interface InboxSummary {\n total: number;\n unread: number;\n byPriority: Record<MessagePriority, number>;\n byType: Record<MessageType, number>;\n}\n\nexport interface MessageDeliveryResult {\n messageId: string;\n delivered: boolean;\n deliveredAt?: string;\n error?: string;\n via: 'local' | 'remote';\n}\n\nexport interface MessagingConfig {\n agentId: string;\n storagePath?: string;\n maxInboxSize?: number;\n retentionDays?: number;\n}\n\nexport const DEFAULT_MESSAGING_CONFIG: Partial<MessagingConfig> = {\n maxInboxSize: 1000,\n retentionDays: 30,\n};\n","import { readFile, writeFile, mkdir, readdir, unlink } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport { join, dirname } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { Message, MessageFilter, InboxSummary } from '../types.js';\n\nexport class InboxStorage {\n private basePath: string;\n\n constructor(agentId: string, basePath?: string) {\n this.basePath = basePath ?? join(homedir(), '.skillkit', 'messages', 'inbox', agentId);\n }\n\n async initialize(): Promise<void> {\n await mkdir(this.basePath, { recursive: true });\n }\n\n async save(message: Message): Promise<void> {\n const filePath = this.getMessagePath(message.id);\n await mkdir(dirname(filePath), { recursive: true });\n await writeFile(filePath, JSON.stringify(message, null, 2), 'utf-8');\n }\n\n async get(messageId: string): Promise<Message | null> {\n const filePath = this.getMessagePath(messageId);\n\n if (!existsSync(filePath)) {\n return null;\n }\n\n try {\n const content = await readFile(filePath, 'utf-8');\n return JSON.parse(content) as Message;\n } catch {\n return null;\n }\n }\n\n async delete(messageId: string): Promise<boolean> {\n const filePath = this.getMessagePath(messageId);\n\n if (!existsSync(filePath)) {\n return false;\n }\n\n try {\n await unlink(filePath);\n return true;\n } catch {\n return false;\n }\n }\n\n async list(filter: MessageFilter = {}): Promise<Message[]> {\n if (!existsSync(this.basePath)) {\n return [];\n }\n\n const files = await readdir(this.basePath);\n const messages: Message[] = [];\n\n for (const file of files) {\n if (!file.endsWith('.json')) continue;\n\n const filePath = join(this.basePath, file);\n try {\n const content = await readFile(filePath, 'utf-8');\n const message = JSON.parse(content) as Message;\n\n if (this.matchesFilter(message, filter)) {\n messages.push(message);\n }\n } catch {\n }\n }\n\n messages.sort((a, b) => {\n const priorityOrder = { urgent: 0, high: 1, normal: 2, low: 3 };\n const priorityDiff = priorityOrder[a.priority] - priorityOrder[b.priority];\n if (priorityDiff !== 0) return priorityDiff;\n\n return new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime();\n });\n\n return filter.limit ? messages.slice(0, filter.limit) : messages;\n }\n\n async markAsRead(messageId: string): Promise<Message | null> {\n const message = await this.get(messageId);\n if (!message) return null;\n\n message.status = 'read';\n message.readAt = new Date().toISOString();\n await this.save(message);\n\n return message;\n }\n\n async getUnread(): Promise<Message[]> {\n return this.list({ status: 'unread' });\n }\n\n async getSummary(): Promise<InboxSummary> {\n const messages = await this.list();\n\n const summary: InboxSummary = {\n total: messages.length,\n unread: 0,\n byPriority: { low: 0, normal: 0, high: 0, urgent: 0 },\n byType: { request: 0, response: 0, notification: 0, update: 0 },\n };\n\n for (const message of messages) {\n if (message.status === 'unread') {\n summary.unread++;\n }\n summary.byPriority[message.priority]++;\n summary.byType[message.type]++;\n }\n\n return summary;\n }\n\n async count(): Promise<number> {\n if (!existsSync(this.basePath)) return 0;\n\n const files = await readdir(this.basePath);\n return files.filter(f => f.endsWith('.json')).length;\n }\n\n async clear(): Promise<number> {\n if (!existsSync(this.basePath)) return 0;\n\n const files = await readdir(this.basePath);\n let deleted = 0;\n\n for (const file of files) {\n if (!file.endsWith('.json')) continue;\n\n try {\n await unlink(join(this.basePath, file));\n deleted++;\n } catch {\n }\n }\n\n return deleted;\n }\n\n private getMessagePath(messageId: string): string {\n return join(this.basePath, `${messageId}.json`);\n }\n\n private matchesFilter(message: Message, filter: MessageFilter): boolean {\n if (filter.from && message.from !== filter.from) return false;\n if (filter.to && message.to !== filter.to) return false;\n if (filter.type && message.type !== filter.type) return false;\n if (filter.priority && message.priority !== filter.priority) return false;\n if (filter.status && message.status !== filter.status) return false;\n if (filter.threadId && message.threadId !== filter.threadId) return false;\n\n if (filter.since) {\n const since = new Date(filter.since).getTime();\n const created = new Date(message.createdAt).getTime();\n if (created < since) return false;\n }\n\n if (filter.until) {\n const until = new Date(filter.until).getTime();\n const created = new Date(message.createdAt).getTime();\n if (created > until) return false;\n }\n\n return true;\n }\n}\n","import { readFile, writeFile, mkdir, readdir, unlink } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport { join, dirname } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { Message, MessageFilter } from '../types.js';\n\nexport class SentStorage {\n private basePath: string;\n\n constructor(agentId: string, basePath?: string) {\n this.basePath = basePath ?? join(homedir(), '.skillkit', 'messages', 'sent', agentId);\n }\n\n async initialize(): Promise<void> {\n await mkdir(this.basePath, { recursive: true });\n }\n\n async save(message: Message): Promise<void> {\n const filePath = this.getMessagePath(message.id);\n await mkdir(dirname(filePath), { recursive: true });\n await writeFile(filePath, JSON.stringify(message, null, 2), 'utf-8');\n }\n\n async get(messageId: string): Promise<Message | null> {\n const filePath = this.getMessagePath(messageId);\n\n if (!existsSync(filePath)) {\n return null;\n }\n\n try {\n const content = await readFile(filePath, 'utf-8');\n return JSON.parse(content) as Message;\n } catch {\n return null;\n }\n }\n\n async delete(messageId: string): Promise<boolean> {\n const filePath = this.getMessagePath(messageId);\n\n if (!existsSync(filePath)) {\n return false;\n }\n\n try {\n await unlink(filePath);\n return true;\n } catch {\n return false;\n }\n }\n\n async list(filter: MessageFilter = {}): Promise<Message[]> {\n if (!existsSync(this.basePath)) {\n return [];\n }\n\n const files = await readdir(this.basePath);\n const messages: Message[] = [];\n\n for (const file of files) {\n if (!file.endsWith('.json')) continue;\n\n const filePath = join(this.basePath, file);\n try {\n const content = await readFile(filePath, 'utf-8');\n const message = JSON.parse(content) as Message;\n\n if (this.matchesFilter(message, filter)) {\n messages.push(message);\n }\n } catch {\n }\n }\n\n messages.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());\n\n return filter.limit ? messages.slice(0, filter.limit) : messages;\n }\n\n async getByThread(threadId: string): Promise<Message[]> {\n return this.list({ threadId });\n }\n\n async getByRecipient(to: string): Promise<Message[]> {\n return this.list({ to });\n }\n\n async count(): Promise<number> {\n if (!existsSync(this.basePath)) return 0;\n\n const files = await readdir(this.basePath);\n return files.filter(f => f.endsWith('.json')).length;\n }\n\n async clear(): Promise<number> {\n if (!existsSync(this.basePath)) return 0;\n\n const files = await readdir(this.basePath);\n let deleted = 0;\n\n for (const file of files) {\n if (!file.endsWith('.json')) continue;\n\n try {\n await unlink(join(this.basePath, file));\n deleted++;\n } catch {\n }\n }\n\n return deleted;\n }\n\n private getMessagePath(messageId: string): string {\n return join(this.basePath, `${messageId}.json`);\n }\n\n private matchesFilter(message: Message, filter: MessageFilter): boolean {\n if (filter.to && message.to !== filter.to) return false;\n if (filter.type && message.type !== filter.type) return false;\n if (filter.priority && message.priority !== filter.priority) return false;\n if (filter.threadId && message.threadId !== filter.threadId) return false;\n\n if (filter.since) {\n const since = new Date(filter.since).getTime();\n const created = new Date(message.createdAt).getTime();\n if (created < since) return false;\n }\n\n if (filter.until) {\n const until = new Date(filter.until).getTime();\n const created = new Date(message.createdAt).getTime();\n if (created > until) return false;\n }\n\n return true;\n }\n}\n","import { readFile, writeFile, mkdir, readdir, unlink } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport { join, dirname } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { Message, MessageFilter } from '../types.js';\n\nexport class ArchivedStorage {\n private basePath: string;\n\n constructor(agentId: string, basePath?: string) {\n this.basePath = basePath ?? join(homedir(), '.skillkit', 'messages', 'archived', agentId);\n }\n\n async initialize(): Promise<void> {\n await mkdir(this.basePath, { recursive: true });\n }\n\n async save(message: Message): Promise<void> {\n const archivedMessage: Message = {\n ...message,\n status: 'archived',\n };\n\n const filePath = this.getMessagePath(message.id);\n await mkdir(dirname(filePath), { recursive: true });\n await writeFile(filePath, JSON.stringify(archivedMessage, null, 2), 'utf-8');\n }\n\n async get(messageId: string): Promise<Message | null> {\n const filePath = this.getMessagePath(messageId);\n\n if (!existsSync(filePath)) {\n return null;\n }\n\n try {\n const content = await readFile(filePath, 'utf-8');\n return JSON.parse(content) as Message;\n } catch {\n return null;\n }\n }\n\n async delete(messageId: string): Promise<boolean> {\n const filePath = this.getMessagePath(messageId);\n\n if (!existsSync(filePath)) {\n return false;\n }\n\n try {\n await unlink(filePath);\n return true;\n } catch {\n return false;\n }\n }\n\n async list(filter: MessageFilter = {}): Promise<Message[]> {\n if (!existsSync(this.basePath)) {\n return [];\n }\n\n const files = await readdir(this.basePath);\n const messages: Message[] = [];\n\n for (const file of files) {\n if (!file.endsWith('.json')) continue;\n\n const filePath = join(this.basePath, file);\n try {\n const content = await readFile(filePath, 'utf-8');\n const message = JSON.parse(content) as Message;\n\n if (this.matchesFilter(message, filter)) {\n messages.push(message);\n }\n } catch {\n }\n }\n\n messages.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());\n\n return filter.limit ? messages.slice(0, filter.limit) : messages;\n }\n\n async search(query: string, limit = 50): Promise<Message[]> {\n const messages = await this.list();\n const lowerQuery = query.toLowerCase();\n\n return messages\n .filter(m => {\n const subject = m.subject.toLowerCase();\n const bodyStr = typeof m.body === 'string' ? m.body.toLowerCase() : JSON.stringify(m.body).toLowerCase();\n return subject.includes(lowerQuery) || bodyStr.includes(lowerQuery);\n })\n .slice(0, limit);\n }\n\n async count(): Promise<number> {\n if (!existsSync(this.basePath)) return 0;\n\n const files = await readdir(this.basePath);\n return files.filter(f => f.endsWith('.json')).length;\n }\n\n async clear(): Promise<number> {\n if (!existsSync(this.basePath)) return 0;\n\n const files = await readdir(this.basePath);\n let deleted = 0;\n\n for (const file of files) {\n if (!file.endsWith('.json')) continue;\n\n try {\n await unlink(join(this.basePath, file));\n deleted++;\n } catch {\n }\n }\n\n return deleted;\n }\n\n async pruneOlderThan(days: number): Promise<number> {\n const messages = await this.list();\n const cutoff = Date.now() - days * 24 * 60 * 60 * 1000;\n let deleted = 0;\n\n for (const message of messages) {\n const createdAt = new Date(message.createdAt).getTime();\n if (createdAt < cutoff) {\n if (await this.delete(message.id)) {\n deleted++;\n }\n }\n }\n\n return deleted;\n }\n\n private getMessagePath(messageId: string): string {\n return join(this.basePath, `${messageId}.json`);\n }\n\n private matchesFilter(message: Message, filter: MessageFilter): boolean {\n if (filter.from && message.from !== filter.from) return false;\n if (filter.to && message.to !== filter.to) return false;\n if (filter.type && message.type !== filter.type) return false;\n if (filter.priority && message.priority !== filter.priority) return false;\n if (filter.threadId && message.threadId !== filter.threadId) return false;\n\n if (filter.since) {\n const since = new Date(filter.since).getTime();\n const created = new Date(message.createdAt).getTime();\n if (created < since) return false;\n }\n\n if (filter.until) {\n const until = new Date(filter.until).getTime();\n const created = new Date(message.createdAt).getTime();\n if (created > until) return false;\n }\n\n return true;\n }\n}\n","import { randomUUID } from 'node:crypto';\nimport type {\n Message,\n MessageCreateInput,\n MessageType,\n MessagePriority,\n} from '../types.js';\n\nexport class MessageBuilder {\n private message: Partial<Message>;\n\n constructor() {\n this.message = {\n id: randomUUID(),\n type: 'notification',\n priority: 'normal',\n status: 'unread',\n createdAt: new Date().toISOString(),\n };\n }\n\n static create(): MessageBuilder {\n return new MessageBuilder();\n }\n\n from(agentId: string): this {\n this.message.from = agentId;\n return this;\n }\n\n to(recipient: string): this {\n this.message.to = recipient;\n return this;\n }\n\n subject(subject: string): this {\n this.message.subject = subject;\n return this;\n }\n\n body(body: unknown): this {\n this.message.body = body;\n return this;\n }\n\n type(type: MessageType): this {\n this.message.type = type;\n return this;\n }\n\n priority(priority: MessagePriority): this {\n this.message.priority = priority;\n return this;\n }\n\n replyTo(messageId: string): this {\n this.message.replyTo = messageId;\n return this;\n }\n\n threadId(threadId: string): this {\n this.message.threadId = threadId;\n return this;\n }\n\n metadata(metadata: Record<string, unknown>): this {\n this.message.metadata = metadata;\n return this;\n }\n\n request(): this {\n this.message.type = 'request';\n return this;\n }\n\n response(): this {\n this.message.type = 'response';\n return this;\n }\n\n notification(): this {\n this.message.type = 'notification';\n return this;\n }\n\n update(): this {\n this.message.type = 'update';\n return this;\n }\n\n low(): this {\n this.message.priority = 'low';\n return this;\n }\n\n normal(): this {\n this.message.priority = 'normal';\n return this;\n }\n\n high(): this {\n this.message.priority = 'high';\n return this;\n }\n\n urgent(): this {\n this.message.priority = 'urgent';\n return this;\n }\n\n build(): Message {\n if (!this.message.from) {\n throw new Error('Message must have a \"from\" field');\n }\n if (!this.message.to) {\n throw new Error('Message must have a \"to\" field');\n }\n if (!this.message.subject) {\n throw new Error('Message must have a subject');\n }\n if (this.message.body === undefined) {\n throw new Error('Message must have a body');\n }\n\n return this.message as Message;\n }\n}\n\nexport function createMessage(from: string, input: MessageCreateInput): Message {\n const builder = MessageBuilder.create()\n .from(from)\n .to(input.to)\n .subject(input.subject)\n .body(input.body);\n\n if (input.type) builder.type(input.type);\n if (input.priority) builder.priority(input.priority);\n if (input.replyTo) builder.replyTo(input.replyTo);\n if (input.threadId) builder.threadId(input.threadId);\n if (input.metadata) builder.metadata(input.metadata);\n\n return builder.build();\n}\n\nexport function createReply(\n originalMessage: Message,\n from: string,\n body: unknown\n): Message {\n return MessageBuilder.create()\n .from(from)\n .to(originalMessage.from)\n .subject(`Re: ${originalMessage.subject}`)\n .body(body)\n .type('response')\n .priority(originalMessage.priority)\n .replyTo(originalMessage.id)\n .threadId(originalMessage.threadId ?? originalMessage.id)\n .build();\n}\n\nexport function createForward(\n originalMessage: Message,\n from: string,\n to: string,\n additionalBody?: unknown\n): Message {\n const forwardBody = {\n forwardedFrom: originalMessage.from,\n originalSubject: originalMessage.subject,\n originalBody: originalMessage.body,\n ...(additionalBody ? { note: additionalBody } : {}),\n };\n\n return MessageBuilder.create()\n .from(from)\n .to(to)\n .subject(`Fwd: ${originalMessage.subject}`)\n .body(forwardBody)\n .type(originalMessage.type)\n .priority(originalMessage.priority)\n .build();\n}\n","import type { Message, MessageDeliveryResult } from '../types.js';\nimport { InboxStorage } from '../storage/inbox.js';\nimport { SentStorage } from '../storage/sent.js';\nimport { ArchivedStorage } from '../storage/archived.js';\n\nexport interface RouterConfig {\n localAgentId: string;\n inboxStorage: InboxStorage;\n sentStorage: SentStorage;\n archivedStorage: ArchivedStorage;\n}\n\nexport interface RemoteDeliveryHandler {\n (message: Message, hostAddress: string): Promise<MessageDeliveryResult>;\n}\n\nexport class MessageRouter {\n private config: RouterConfig;\n private localAgents: Map<string, InboxStorage> = new Map();\n private remoteHandler?: RemoteDeliveryHandler;\n\n constructor(config: RouterConfig) {\n this.config = config;\n this.localAgents.set(config.localAgentId, config.inboxStorage);\n }\n\n registerLocalAgent(agentId: string, inbox: InboxStorage): void {\n this.localAgents.set(agentId, inbox);\n }\n\n unregisterLocalAgent(agentId: string): void {\n if (agentId !== this.config.localAgentId) {\n this.localAgents.delete(agentId);\n }\n }\n\n setRemoteHandler(handler: RemoteDeliveryHandler): void {\n this.remoteHandler = handler;\n }\n\n async route(message: Message): Promise<MessageDeliveryResult> {\n const recipient = this.parseRecipient(message.to);\n\n await this.config.sentStorage.save(message);\n\n if (recipient.isLocal) {\n return this.deliverLocal(message, recipient.agentId);\n }\n\n return this.deliverRemote(message, recipient.host!, recipient.agentId);\n }\n\n async deliverLocal(message: Message, agentId: string): Promise<MessageDeliveryResult> {\n const inbox = this.localAgents.get(agentId);\n\n if (!inbox) {\n return {\n messageId: message.id,\n delivered: false,\n error: `Agent ${agentId} not found locally`,\n via: 'local',\n };\n }\n\n try {\n await inbox.save(message);\n\n return {\n messageId: message.id,\n delivered: true,\n deliveredAt: new Date().toISOString(),\n via: 'local',\n };\n } catch (err: any) {\n return {\n messageId: message.id,\n delivered: false,\n error: err.message,\n via: 'local',\n };\n }\n }\n\n async deliverRemote(\n message: Message,\n hostAddress: string,\n _agentId: string\n ): Promise<MessageDeliveryResult> {\n if (!this.remoteHandler) {\n return {\n messageId: message.id,\n delivered: false,\n error: 'No remote delivery handler configured',\n via: 'remote',\n };\n }\n\n try {\n return await this.remoteHandler(message, hostAddress);\n } catch (err: any) {\n return {\n messageId: message.id,\n delivered: false,\n error: err.message,\n via: 'remote',\n };\n }\n }\n\n async archive(messageId: string): Promise<boolean> {\n const message = await this.config.inboxStorage.get(messageId);\n if (!message) return false;\n\n await this.config.archivedStorage.save(message);\n await this.config.inboxStorage.delete(messageId);\n\n return true;\n }\n\n async unarchive(messageId: string): Promise<boolean> {\n const message = await this.config.archivedStorage.get(messageId);\n if (!message) return false;\n\n message.status = 'read';\n await this.config.inboxStorage.save(message);\n await this.config.archivedStorage.delete(messageId);\n\n return true;\n }\n\n getLocalAgents(): string[] {\n return Array.from(this.localAgents.keys());\n }\n\n isLocalAgent(agentId: string): boolean {\n return this.localAgents.has(agentId);\n }\n\n private parseRecipient(to: string): {\n agentId: string;\n host?: string;\n isLocal: boolean;\n } {\n if (to.includes('@')) {\n const [agentId, host] = to.split('@');\n return { agentId, host, isLocal: false };\n }\n\n return {\n agentId: to,\n isLocal: this.localAgents.has(to),\n };\n }\n}\n","import type { Message, MessageDeliveryResult } from '../types.js';\nimport { InboxStorage } from '../storage/inbox.js';\n\nexport class LocalTransport {\n private agents: Map<string, InboxStorage> = new Map();\n\n register(agentId: string, inbox: InboxStorage): void {\n this.agents.set(agentId, inbox);\n }\n\n unregister(agentId: string): void {\n this.agents.delete(agentId);\n }\n\n async deliver(message: Message): Promise<MessageDeliveryResult> {\n const inbox = this.agents.get(message.to);\n\n if (!inbox) {\n return {\n messageId: message.id,\n delivered: false,\n error: `Agent ${message.to} not found locally`,\n via: 'local',\n };\n }\n\n try {\n await inbox.save(message);\n\n return {\n messageId: message.id,\n delivered: true,\n deliveredAt: new Date().toISOString(),\n via: 'local',\n };\n } catch (err: any) {\n return {\n messageId: message.id,\n delivered: false,\n error: err.message,\n via: 'local',\n };\n }\n }\n\n async broadcast(message: Message, excludeFrom = true): Promise<Map<string, MessageDeliveryResult>> {\n const results = new Map<string, MessageDeliveryResult>();\n\n for (const [agentId] of this.agents) {\n if (excludeFrom && agentId === message.from) continue;\n\n const targetMessage = { ...message, to: agentId };\n const result = await this.deliver(targetMessage);\n results.set(agentId, result);\n }\n\n return results;\n }\n\n getRegisteredAgents(): string[] {\n return Array.from(this.agents.keys());\n }\n\n isRegistered(agentId: string): boolean {\n return this.agents.has(agentId);\n }\n}\n\nlet globalTransport: LocalTransport | null = null;\n\nexport function getLocalTransport(): LocalTransport {\n if (!globalTransport) {\n globalTransport = new LocalTransport();\n }\n return globalTransport;\n}\n","import got from 'got';\nimport type { Message, MessageDeliveryResult } from '../types.js';\n\nexport interface RemoteTransportOptions {\n timeout?: number;\n retries?: number;\n}\n\nexport class RemoteTransport {\n private options: Required<RemoteTransportOptions>;\n\n constructor(options: RemoteTransportOptions = {}) {\n this.options = {\n timeout: options.timeout ?? 10000,\n retries: options.retries ?? 2,\n };\n }\n\n async deliver(\n message: Message,\n hostAddress: string,\n hostPort: number\n ): Promise<MessageDeliveryResult> {\n const url = `http://${hostAddress}:${hostPort}/message`;\n\n try {\n const response = await got.post(url, {\n json: message,\n timeout: { request: this.options.timeout },\n retry: { limit: this.options.retries },\n throwHttpErrors: false,\n });\n\n if (response.statusCode === 200 || response.statusCode === 201) {\n return {\n messageId: message.id,\n delivered: true,\n deliveredAt: new Date().toISOString(),\n via: 'remote',\n };\n }\n\n return {\n messageId: message.id,\n delivered: false,\n error: `HTTP ${response.statusCode}: ${response.body}`,\n via: 'remote',\n };\n } catch (err: any) {\n return {\n messageId: message.id,\n delivered: false,\n error: err.message || 'Connection failed',\n via: 'remote',\n };\n }\n }\n\n async deliverToAgent(\n message: Message,\n agentAddress: string\n ): Promise<MessageDeliveryResult> {\n const parts = agentAddress.split('@');\n if (parts.length !== 2) {\n return {\n messageId: message.id,\n delivered: false,\n error: 'Invalid agent address format. Expected: agentId@host:port',\n via: 'remote',\n };\n }\n\n const [, hostPart] = parts;\n const [host, portStr] = hostPart.split(':');\n const port = portStr ? parseInt(portStr, 10) : 9876;\n\n return this.deliver(message, host, port);\n }\n\n async broadcast(\n message: Message,\n hosts: Array<{ address: string; port: number }>\n ): Promise<Map<string, MessageDeliveryResult>> {\n const results = new Map<string, MessageDeliveryResult>();\n\n await Promise.all(\n hosts.map(async ({ address, port }) => {\n const result = await this.deliver(message, address, port);\n results.set(`${address}:${port}`, result);\n })\n );\n\n return results;\n }\n\n async ping(hostAddress: string, hostPort: number): Promise<boolean> {\n const url = `http://${hostAddress}:${hostPort}/health`;\n\n try {\n const response = await got.get(url, {\n timeout: { request: 5000 },\n retry: { limit: 0 },\n throwHttpErrors: false,\n });\n\n return response.statusCode === 200;\n } catch {\n return false;\n }\n }\n}\n","export * from './types.js';\n\nexport { InboxStorage } from './storage/inbox.js';\nexport { SentStorage } from './storage/sent.js';\nexport { ArchivedStorage } from './storage/archived.js';\n\nexport {\n MessageBuilder,\n createMessage,\n createReply,\n createForward,\n} from './message/builder.js';\n\nexport {\n MessageRouter,\n type RouterConfig,\n type RemoteDeliveryHandler,\n} from './message/router.js';\n\nexport { LocalTransport, getLocalTransport } from './transport/local.js';\nexport { RemoteTransport, type RemoteTransportOptions } from './transport/remote.js';\n\nimport { InboxStorage } from './storage/inbox.js';\nimport { SentStorage } from './storage/sent.js';\nimport { ArchivedStorage } from './storage/archived.js';\nimport { MessageRouter } from './message/router.js';\nimport { createMessage as _createMessage, createReply as _createReply, createForward as _createForward } from './message/builder.js';\nimport type { MessageCreateInput, MessageDeliveryResult, Message, MessageFilter, InboxSummary } from './types.js';\n\nexport interface MessagingServiceConfig {\n agentId: string;\n storagePath?: string;\n}\n\nexport class MessagingService {\n private config: MessagingServiceConfig;\n private inbox: InboxStorage;\n private sent: SentStorage;\n private archived: ArchivedStorage;\n private router: MessageRouter;\n\n constructor(config: MessagingServiceConfig) {\n this.config = config;\n\n this.inbox = new InboxStorage(config.agentId, config.storagePath);\n this.sent = new SentStorage(config.agentId, config.storagePath);\n this.archived = new ArchivedStorage(config.agentId, config.storagePath);\n\n this.router = new MessageRouter({\n localAgentId: config.agentId,\n inboxStorage: this.inbox,\n sentStorage: this.sent,\n archivedStorage: this.archived,\n });\n }\n\n async initialize(): Promise<void> {\n await this.inbox.initialize();\n await this.sent.initialize();\n await this.archived.initialize();\n }\n\n async send(input: MessageCreateInput): Promise<MessageDeliveryResult> {\n const message = _createMessage(this.config.agentId, input);\n return this.router.route(message);\n }\n\n async reply(messageId: string, body: unknown): Promise<MessageDeliveryResult> {\n const original = await this.inbox.get(messageId);\n if (!original) {\n throw new Error(`Message ${messageId} not found`);\n }\n\n const reply = _createReply(original, this.config.agentId, body);\n return this.router.route(reply);\n }\n\n async forward(messageId: string, to: string, note?: unknown): Promise<MessageDeliveryResult> {\n const original = await this.inbox.get(messageId);\n if (!original) {\n throw new Error(`Message ${messageId} not found`);\n }\n\n const forwarded = _createForward(original, this.config.agentId, to, note);\n return this.router.route(forwarded);\n }\n\n async getInbox(filter?: MessageFilter): Promise<Message[]> {\n return this.inbox.list(filter);\n }\n\n async getSent(filter?: MessageFilter): Promise<Message[]> {\n return this.sent.list(filter);\n }\n\n async getArchived(filter?: MessageFilter): Promise<Message[]> {\n return this.archived.list(filter);\n }\n\n async getMessage(messageId: string): Promise<Message | null> {\n return this.inbox.get(messageId);\n }\n\n async markAsRead(messageId: string): Promise<Message | null> {\n return this.inbox.markAsRead(messageId);\n }\n\n async archive(messageId: string): Promise<boolean> {\n return this.router.archive(messageId);\n }\n\n async deleteMessage(messageId: string): Promise<boolean> {\n return this.inbox.delete(messageId);\n }\n\n async getInboxSummary(): Promise<InboxSummary> {\n return this.inbox.getSummary();\n }\n\n getRouter(): MessageRouter {\n return this.router;\n }\n}\n\nexport async function createMessagingService(\n agentId: string,\n storagePath?: string\n): Promise<MessagingService> {\n const service = new MessagingService({ agentId, storagePath });\n await service.initialize();\n return service;\n}\n"],"mappings":"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","names":["readFile","writeFile","mkdir","readdir","unlink","existsSync","join","dirname","homedir","readFile","writeFile","mkdir","readdir","unlink","existsSync","join","dirname","homedir"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@skillkit/messaging",
|
|
3
|
+
"version": "1.8.0",
|
|
4
|
+
"description": "Inter-agent messaging system for SkillKit",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"got": "^14.2.0",
|
|
19
|
+
"@skillkit/mesh": "1.8.0",
|
|
20
|
+
"@skillkit/core": "1.8.0"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"tsup": "^8.0.1",
|
|
24
|
+
"typescript": "^5.3.3",
|
|
25
|
+
"vitest": "^1.2.0"
|
|
26
|
+
},
|
|
27
|
+
"engines": {
|
|
28
|
+
"node": ">=18"
|
|
29
|
+
},
|
|
30
|
+
"repository": {
|
|
31
|
+
"type": "git",
|
|
32
|
+
"url": "https://github.com/rohitg00/skillkit.git",
|
|
33
|
+
"directory": "packages/messaging"
|
|
34
|
+
},
|
|
35
|
+
"keywords": [
|
|
36
|
+
"skillkit",
|
|
37
|
+
"messaging",
|
|
38
|
+
"agents",
|
|
39
|
+
"communication"
|
|
40
|
+
],
|
|
41
|
+
"license": "Apache-2.0",
|
|
42
|
+
"scripts": {
|
|
43
|
+
"build": "tsup",
|
|
44
|
+
"dev": "tsup --watch",
|
|
45
|
+
"typecheck": "tsc --noEmit",
|
|
46
|
+
"test": "vitest run",
|
|
47
|
+
"test:watch": "vitest"
|
|
48
|
+
}
|
|
49
|
+
}
|