{"version":3,"sources":["../../src/workflows/agent.ts"],"names":["AgentWorkflow","workflow","schema","z","object","inputs","array","prompt","string","optional","context","expectedOutput","union","instanceof","ZodSchema","finalAnswer","newMessages","Message","default","name","Workflow","outputSchema","required","run","options","map","input","text","addAgent","agent","BaseAgent","clone","then","factory","memory","_add","meta","randomString","isFunction","_createFactory","delAgent","delStep","ToolCallingAgent","llm","tools","description","instructions","execution","templates","system","template","fork","config","defaults","role","addStep","state","ctx","UnconstrainedMemory","addMany","runInput","shift","undefined","asReadOnly","result","signal","push","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 { Workflow, WorkflowRunOptions } from \"@/workflows/workflow.js\";\nimport { Message, UserMessage } from \"@/backend/message.js\";\nimport { AnyTool } from \"@/tools/base.js\";\nimport { BaseMemory, ReadOnlyMemory } from \"@/memory/base.js\";\nimport { z } from \"zod\";\nimport { UnconstrainedMemory } from \"@/memory/unconstrainedMemory.js\";\nimport { BaseAgent } from \"@/agents/base.js\";\nimport { isFunction, randomString } from \"remeda\";\nimport { ChatModel } from \"@/backend/chat.js\";\nimport { ToolCallingAgent } from \"@/agents/toolCalling/agent.js\";\nimport {\n  ToolCallingAgentExecutionConfig,\n  ToolCallingAgentRunInput,\n  ToolCallingAgentRunOptions,\n  ToolCallingAgentRunOutput,\n} from \"@/agents/toolCalling/types.js\";\n\ntype AgentInstance = BaseAgent<\n  ToolCallingAgentRunInput,\n  ToolCallingAgentRunOutput,\n  ToolCallingAgentRunOptions\n>;\ntype AgentFactory = (memory: ReadOnlyMemory) => AgentInstance | Promise<AgentInstance>;\ninterface AgentFactoryInput {\n  name?: string;\n  role?: string;\n  llm: ChatModel;\n  instructions?: string;\n  tools?: AnyTool[];\n  execution?: ToolCallingAgentExecutionConfig;\n}\n\nexport class AgentWorkflow {\n  protected readonly workflow;\n\n  readonly schema = z.object({\n    inputs: z.array(\n      z.object({\n        prompt: z.string().optional(),\n        context: z.string().optional(),\n        expectedOutput: z.union([z.string(), z.instanceof(z.ZodSchema)]).optional(),\n      }),\n    ),\n\n    finalAnswer: z.string().optional(),\n    newMessages: z.array(z.instanceof(Message)).default([]),\n  });\n\n  constructor(name = \"AgentWorkflow\") {\n    this.workflow = new Workflow({\n      name,\n      schema: this.schema,\n      outputSchema: this.schema.required(),\n    });\n  }\n\n  run(inputs: (ToolCallingAgentRunInput | Message)[], options: WorkflowRunOptions<string> = {}) {\n    return this.workflow.run(\n      {\n        inputs: inputs.map((input) => (input instanceof Message ? { prompt: input.text } : input)),\n      },\n      options,\n    );\n  }\n\n  addAgent(agent: AgentFactory | AgentFactoryInput): this;\n  addAgent(agent: AgentInstance): Promise<this>;\n  addAgent(agent: AgentInstance | AgentFactory | AgentFactoryInput): this | Promise<this> {\n    if (agent instanceof BaseAgent) {\n      return agent.clone().then((clone) => {\n        const factory: AgentFactory = (memory) => {\n          clone.memory = memory;\n          return clone;\n        };\n        return this._add(clone.meta.name, factory);\n      });\n    }\n\n    const name = agent.name || `Agent${randomString(4)}`;\n    return this._add(name, isFunction(agent) ? agent : this._createFactory(agent));\n  }\n\n  delAgent(name: string) {\n    return this.workflow.delStep(name);\n  }\n\n  protected _createFactory(input: AgentFactoryInput): AgentFactory {\n    return (memory: BaseMemory) =>\n      new ToolCallingAgent({\n        llm: input.llm,\n        tools: input.tools ?? [],\n        memory,\n        meta: {\n          name: input.name || `Agent${randomString(4)}`,\n          description: input.instructions ?? \"\",\n        },\n        execution: input.execution,\n        ...(input.instructions && {\n          templates: {\n            system: (template) =>\n              template.fork((config) => {\n                config.defaults.instructions = input.instructions || config.defaults.instructions;\n                config.defaults.role = input.role || config.defaults.role;\n              }),\n          },\n        }),\n      });\n  }\n\n  protected _add(name: string, factory: AgentFactory) {\n    this.workflow.addStep(name, async (state, ctx) => {\n      const memory = new UnconstrainedMemory();\n      await memory.addMany(state.newMessages);\n\n      const runInput = state.inputs.shift() ?? { prompt: undefined };\n      const agent = await factory(memory.asReadOnly());\n      const { result } = await agent.run(runInput, { signal: ctx.signal });\n      state.finalAnswer = result.text;\n      if (runInput.prompt) {\n        state.newMessages.push(new UserMessage(runInput.prompt));\n      }\n      state.newMessages.push(result);\n    });\n    return this;\n  }\n}\n"]}