{"version":3,"sources":["../../../../src/adapters/a2a/agents/agent.ts"],"names":["A2AAgent","BaseAgent","_memory","emitter","url","agentCard","agentCardPath","contextId","taskId","referenceTaskIds","input","Emitter","root","child","namespace","toCamelCase","name","creator","AgentError","isFatal","memory","AGENT_CARD_PATH","split","_run","_options","context","setRunParams","clearContext","loadAgentCard","client","A2AClient","lastEvent","messages","task","stream","sendMessageStream","message","convertToA2AMessage","event","kind","id","includes","push","content","status","artifact","final","state","undefined","emit","value","inputMessages","Array","isArray","addMany","map","convertToFrameworkMessage","results","artifacts","history","length","assistantMessages","result","AssistantMessage","err","error","toString","fromCardUrl","URL","href","getAgentCard","checkAgentExists","isEmpty","createSnapshot","shallowCopy","role","parts","text","messageId","uuid4","Message","convertFrameworkContentToA2APart","UserMessage","convertA2AMessageToFrameworkMessage","type","rest","data","image","decoder","TextDecoder","file","uri","bytes","decode","mimeType","mediaType","filename","metadata","providerOptions"],"mappings":"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","file":"agent.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { v4 as uuid4 } from \"uuid\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { AgentError, BaseAgent } from \"@/agents/base.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { AssistantMessage, MessageContentPart, UserMessage } from \"@/backend/message.js\";\nimport { BaseMemory } from \"@/memory/base.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { A2AAgentInput, A2AAgentRunInput, A2AAgentRunOutput, A2AAgentRunOptions } from \"./types.js\";\nimport { A2AAgentEvents } from \"./events.js\";\nimport { toCamelCase } from \"remeda\";\nimport {\n  AGENT_CARD_PATH,\n  AgentCard,\n  Message as A2AMessage,\n  Task,\n  Artifact,\n  Part,\n  FileWithUri,\n  FileWithBytes,\n} from \"@a2a-js/sdk\";\nimport { A2AClient } from \"@a2a-js/sdk/client\";\nimport { Message } from \"@/backend/message.js\";\nimport { convertA2AMessageToFrameworkMessage } from \"./utils.js\";\n\nexport class A2AAgent extends BaseAgent<A2AAgentRunInput, A2AAgentRunOutput> {\n  private _memory!: BaseMemory;\n  public readonly emitter: Emitter<A2AAgentEvents>;\n  protected url: string | undefined;\n  public agentCard: AgentCard | undefined;\n  protected agentCardPath: string;\n  protected contextId: string | undefined;\n  protected taskId: string | undefined;\n  protected referenceTaskIds: string[] = [];\n\n  constructor(protected readonly input: A2AAgentInput) {\n    super();\n    this.emitter = Emitter.root.child<A2AAgentEvents>({\n      namespace: [\"a2a\", \"agent\", toCamelCase(this.name)],\n      creator: this,\n    });\n    if (input.url) {\n      this.url = input.url;\n    } else if (input.agentCard) {\n      this.agentCard = input.agentCard;\n    } else {\n      throw new AgentError(\"Either url or agentCard must be provided in A2AAgentInput\", [], {\n        isFatal: true,\n      });\n    }\n\n    this.memory = input.memory;\n    this.agentCardPath = input.agentCardPath || AGENT_CARD_PATH;\n  }\n\n  get name() {\n    return this.agentCard ? this.agentCard.name : `agent_${this.url?.split(\":\")[-1]}`;\n  }\n\n  protected async _run(\n    input: A2AAgentRunInput,\n    _options: A2AAgentRunOptions,\n    context: GetRunContext<this>,\n  ): Promise<A2AAgentRunOutput> {\n    this.setRunParams(_options?.contextId, _options?.taskId, _options?.clearContext);\n\n    if (!this.agentCard) {\n      await this.loadAgentCard();\n    }\n\n    const client = new A2AClient(this.agentCard!);\n\n    let lastEvent = null;\n    const messages: (A2AMessage | Artifact)[] = [];\n    let task: Task | null = null;\n\n    try {\n      const stream = client.sendMessageStream({ message: this.convertToA2AMessage(input.input) });\n\n      for await (const event of stream) {\n        lastEvent = event;\n\n        const taskId = event.kind === \"task\" ? event.id : event.taskId;\n        const contextId = event.contextId;\n        if (taskId && taskId !== this.taskId) {\n          this.taskId = taskId;\n        }\n        if (contextId && contextId !== this.contextId) {\n          this.contextId = contextId;\n        }\n        if (taskId && !this.referenceTaskIds.includes(taskId)) {\n          this.referenceTaskIds.push(taskId);\n        }\n\n        if (event.kind === \"status-update\" || event.kind === \"artifact-update\") {\n          const content = event.kind === \"status-update\" ? event.status.message : event.artifact;\n          if (content) {\n            messages.push(content);\n          }\n          if (\n            event.kind === \"status-update\" &&\n            event.final &&\n            event.status.state !== \"input-required\"\n          ) {\n            this.taskId = undefined;\n          }\n        } else if (event.kind === \"message\") {\n          messages.push(event);\n        } else if (event.kind === \"task\") {\n          task = event;\n        }\n\n        await context.emitter.emit(\"update\", { value: event });\n      }\n\n      if (!lastEvent) {\n        throw new AgentError(\"No result received from agent.\");\n      }\n\n      // add input messages to memory\n      const inputMessages = Array.isArray(input.input) ? input.input : [input.input];\n      await this.memory.addMany(inputMessages.map(this.convertToFrameworkMessage));\n\n      let results: (A2AMessage | Artifact)[];\n      if (task) {\n        if (task.artifacts) {\n          results = task.artifacts;\n        } else if (task.history) {\n          results = task.history;\n        } else if (task.status.message) {\n          results = [task.status.message];\n        } else {\n          results = [];\n        }\n      } else {\n        results = messages;\n      }\n\n      // retrieve the assistant's response\n      if (results.length > 0) {\n        const assistantMessages = results.map(this.convertToFrameworkMessage);\n        await this.memory.addMany(assistantMessages);\n        return {\n          result: assistantMessages[assistantMessages.length - 1],\n          event: lastEvent,\n        };\n      } else {\n        return {\n          result: new AssistantMessage(\"No response from agent.\"),\n          event: lastEvent,\n        };\n      }\n    } catch (err) {\n      let message: string;\n\n      if (err.message) {\n        message = err.message;\n      } else if (err.error) {\n        message = err.error.toString();\n      } else {\n        message = \"Unknown error\";\n      }\n\n      await context.emitter.emit(\"error\", { message });\n\n      throw new AgentError(message, [err], {\n        context: lastEvent ?? undefined,\n      });\n    }\n  }\n\n  protected setRunParams(contextId?: string, taskId?: string, clearContext = false) {\n    if (contextId) {\n      this.contextId = contextId;\n    }\n    this.taskId = taskId;\n    if (clearContext) {\n      this.contextId = undefined;\n      this.taskId = undefined;\n      this.referenceTaskIds = [];\n    }\n  }\n\n  async loadAgentCard() {\n    if (this.agentCard) {\n      return;\n    }\n\n    if (!this.url) {\n      throw new AgentError(\"URL must be provided to load the agent card.\", [], { isFatal: true });\n    }\n\n    try {\n      const client = await A2AClient.fromCardUrl(new URL(this.agentCardPath, this.url).href, {\n        agentCardPath: this.agentCardPath,\n      });\n      this.agentCard = await client.getAgentCard();\n    } catch (error) {\n      throw new AgentError(`Can not load agent card: ${error.message}`, [error], {\n        isFatal: true,\n      });\n    }\n  }\n\n  async checkAgentExists() {\n    await this.loadAgentCard();\n    if (!this.agentCard) {\n      throw new AgentError(`Agent ${this.name} does not exist.`, [], { isFatal: true });\n    }\n  }\n\n  get memory() {\n    return this._memory;\n  }\n\n  set memory(memory: BaseMemory) {\n    if (!memory.isEmpty()) {\n      throw new AgentError(\"Memory must be empty before setting.\");\n    }\n    this._memory = memory;\n  }\n\n  createSnapshot() {\n    return {\n      ...super.createSnapshot(),\n      input: shallowCopy(this.input),\n      emitter: this.emitter,\n    };\n  }\n\n  protected convertToA2AMessage(input: string | Message | Message[] | A2AMessage): A2AMessage {\n    if (typeof input === \"string\") {\n      return {\n        kind: \"message\",\n        role: \"user\",\n        parts: [\n          {\n            kind: \"text\",\n            text: input,\n          },\n        ],\n        messageId: uuid4(),\n        contextId: this.contextId,\n        taskId: this.taskId,\n        referenceTaskIds: this.referenceTaskIds,\n      };\n    } else if (input instanceof Message) {\n      const parts = input.content.map(convertFrameworkContentToA2APart);\n      return {\n        kind: \"message\",\n        role: input.role == \"assistant\" ? \"agent\" : \"user\",\n        parts: parts,\n        messageId: uuid4(),\n        contextId: this.contextId,\n        taskId: this.taskId,\n        referenceTaskIds: this.referenceTaskIds,\n      };\n    } else if (\"kind\" in input && input.kind === \"message\") {\n      return input;\n    } else if (Array.isArray(input) && input.length > 0) {\n      return this.convertToA2AMessage(input[input.length - 1]);\n    } else {\n      throw new AgentError(\"Unsupported input type\");\n    }\n  }\n\n  protected convertToFrameworkMessage(input: string | Message | A2AMessage | Artifact): Message {\n    if (typeof input === \"string\") {\n      return new UserMessage(input);\n    } else if (input instanceof Message) {\n      return input;\n    } else if ((\"kind\" in input && input.kind === \"message\") || \"artifactId\" in input) {\n      return convertA2AMessageToFrameworkMessage(input);\n    } else {\n      throw new AgentError(\"Unsupported input type\");\n    }\n  }\n}\n\nfunction convertFrameworkContentToA2APart(content: MessageContentPart): Part {\n  const { type, ...rest } = content;\n  switch (type) {\n    case \"text\":\n      return { kind: \"text\", text: content.text };\n    case \"file\":\n    case \"image\": {\n      const data = type === \"file\" ? content.data : content.image;\n      const decoder = new TextDecoder(\"utf-8\");\n      const file =\n        data instanceof URL\n          ? ({ uri: data.href } as FileWithUri)\n          : ({\n              bytes: typeof data === \"string\" ? data : decoder.decode(data),\n            } as FileWithBytes);\n      return {\n        kind: \"file\",\n        file: {\n          ...file,\n          mimeType: content.mediaType,\n          name: \"filename\" in content ? content.filename : undefined,\n        },\n        metadata: {\n          providerOptions: content.providerOptions,\n        },\n      };\n    }\n    case \"tool-call\":\n    case \"tool-result\":\n      return {\n        kind: \"data\",\n        data: rest,\n      };\n  }\n}\n"]}