UNPKG

@a2alite/sdk

Version:

A Modular SDK (Server & Client) for Agent to Agent (A2A) protocol, with easy task lifecycle management

110 lines (109 loc) 2.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MessageHandler = void 0; const uuid_1 = require("uuid"); /** * Helper class to create, modify or parse messages */ class MessageHandler { constructor(baseMessage) { this.message = { kind: "message", messageId: baseMessage?.messageId || (0, uuid_1.v4)(), role: baseMessage?.role || "user", parts: baseMessage?.parts ? [...baseMessage.parts] : [], }; } withId(messageId) { this.message.messageId = messageId; return this; } withRole(role) { this.message.role = role; return this; } inResponseTo(source) { if (source.kind === "task") { // Set context and task ID from a Task this.message.contextId = source.contextId; this.message.taskId = source.id; } else if (source.kind === "message") { // Set context, task ID, and inResponseTo from a Message this.message.contextId = source.contextId; this.message.taskId = source.taskId; } return this; } withContextId(contextId) { this.message.contextId = contextId; return this; } withParts(parts) { this.message.parts = [...parts]; return this; } addParts(parts) { this.message.parts.push(...parts); return this; } addTextPart(text, metadata) { this.message.parts.push({ kind: "text", text, ...(metadata && { metadata }), }); return this; } addFilePart(file, metadata) { this.message.parts.push({ kind: "file", file, ...(metadata && { metadata }), }); return this; } addDataPart(data, metadata) { this.message.parts.push({ kind: "data", data, ...(metadata && { metadata }), }); return this; } clearParts() { this.message.parts = []; return this; } withMetadata(metadata) { this.message.metadata = { ...this.message.metadata, ...metadata, }; return this; } getMessage() { return { ...this.message }; } getTextParts() { return this.message.parts.filter((part) => part.kind === "text"); } getText() { return this.getTextParts() .map((part) => part.text) .join("\n"); } getFileParts() { return this.message.parts.filter((part) => part.kind === "file"); } getFiles() { return this.getFileParts().map((part) => part.file); } getDataParts() { return this.message.parts.filter((part) => part.kind === "data"); } getData() { return this.getDataParts().map((part) => part.data); } } exports.MessageHandler = MessageHandler;