{"version":3,"sources":["../../../../src/adapters/acp/agents/agent.ts"],"names":["ACPAgent","BaseAgent","emitter","client","input","Emitter","root","child","namespace","toCamelCase","agentName","creator","RestfulClient","baseUrl","url","headers","paths","runs","agents","_run","_options","context","inputs","Array","isArray","map","convertToACPMessage","generator","stream","body","JSON","stringify","agent_name","mode","signal","eventData","event","parse","data","emit","key","type","value","undefined","message","AgentError","run","error","text","output","reduce","acc","parts","acc2","part","content","assistantMessage","AssistantMessage","inputMessages","convertToMessage","memory","addMany","add","result","checkAgentExists","response","fetch","find","agent","name","isFatal","createSnapshot","shallowCopy","role","Message","UserMessage"],"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 { Emitter } from \"@/emitter/emitter.js\";\nimport { AgentError, BaseAgent, BaseAgentRunOptions } from \"@/agents/base.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { AssistantMessage, Message, UserMessage } from \"@/backend/message.js\";\nimport { BaseMemory } from \"@/memory/base.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { RestfulClient } from \"@/internals/fetcher.js\";\nimport { ACPAgentInput, ACPAgentRunInput, ACPAgentRunOutput } from \"./types.js\";\nimport { ACPAgentEvents } from \"./events.js\";\nimport { toCamelCase } from \"remeda\";\n\nexport class ACPAgent extends BaseAgent<ACPAgentRunInput, ACPAgentRunOutput> {\n  public readonly emitter: Emitter<ACPAgentEvents>;\n  protected client: RestfulClient<{ runs: string; agents: string }>;\n\n  constructor(protected readonly input: ACPAgentInput) {\n    super();\n    this.emitter = Emitter.root.child<ACPAgentEvents>({\n      namespace: [\"agent\", \"acp\", toCamelCase(this.input.agentName)],\n      creator: this,\n    });\n    this.client = new RestfulClient({\n      baseUrl: this.input.url,\n      headers: async () => ({\n        \"Accept\": \"application/json\",\n        \"Content-Type\": \"application/json\",\n      }),\n      paths: { runs: `/runs`, agents: `/agents` },\n    });\n  }\n\n  protected async _run(\n    input: ACPAgentRunInput,\n    _options: BaseAgentRunOptions,\n    context: GetRunContext<this>,\n  ): Promise<ACPAgentRunOutput> {\n    const inputs = Array.isArray(input.input)\n      ? input.input.map(this.convertToACPMessage)\n      : [this.convertToACPMessage(input.input)];\n\n    const generator = this.client.stream(\"runs\", {\n      body: JSON.stringify({\n        agent_name: this.input.agentName,\n        input: inputs,\n        mode: \"stream\",\n      }),\n      signal: context.signal,\n    });\n\n    let eventData: any = null;\n    for await (const event of generator) {\n      try {\n        eventData = JSON.parse(event.data);\n        await context.emitter.emit(\"update\", {\n          key: eventData.type,\n          value: { ...eventData, type: undefined },\n        });\n      } catch {\n        await context.emitter.emit(\"error\", {\n          message: \"Error parsing JSON\",\n        });\n      }\n    }\n\n    if (!eventData) {\n      throw new AgentError(\"No event received from agent.\");\n    }\n\n    if (eventData.type === \"run.failed\") {\n      const message =\n        eventData.run?.error?.message || \"Something went wrong with the agent communication.\";\n      await context.emitter.emit(\"error\", { message });\n      throw new AgentError(message);\n    } else if (eventData.type === \"run.completed\") {\n      const text = eventData.run.output.reduce(\n        (acc: string, output: any) =>\n          acc + output.parts.reduce((acc2: string, part: any) => acc2 + part.content, \"\"),\n        \"\",\n      );\n      const assistantMessage: Message = new AssistantMessage(text, { event: eventData });\n      const inputMessages = Array.isArray(input.input)\n        ? input.input.map(this.convertToMessage)\n        : [this.convertToMessage(input.input)];\n\n      await this.memory.addMany(inputMessages);\n      await this.memory.add(assistantMessage);\n\n      return { result: assistantMessage, event: eventData };\n    } else {\n      return { result: new AssistantMessage(\"No response from agent.\"), event: eventData };\n    }\n  }\n\n  async checkAgentExists() {\n    try {\n      const response = await this.client.fetch(\"agents\");\n      return !!response.agents.find((agent: any) => agent.name === this.input.agentName);\n    } catch (error) {\n      throw new AgentError(`Error while checking agent existence: ${error.message}`, [], {\n        isFatal: true,\n      });\n    }\n  }\n\n  get memory() {\n    return this.input.memory;\n  }\n\n  set memory(memory: BaseMemory) {\n    this.input.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 convertToACPMessage(input: string | Message): any {\n    if (typeof input === \"string\") {\n      return { parts: [{ content: input, role: \"user\" }] };\n    } else if (input instanceof Message) {\n      return { parts: [{ content: input.content, role: input.role }] };\n    } else {\n      throw new AgentError(\"Unsupported input type\");\n    }\n  }\n\n  protected convertToMessage(input: string | Message): any {\n    if (typeof input === \"string\") {\n      return new UserMessage(input);\n    } else if (input instanceof Message) {\n      return input;\n    } else {\n      throw new AgentError(\"Unsupported input type\");\n    }\n  }\n}\n"]}