{"version":3,"sources":["../../../src/experimental/workflows/agent.ts"],"names":["AgentWorkflow","workflow","schema","z","object","messages","array","instanceof","BaseMessage","min","finalAnswer","string","optional","newMessages","default","constructor","name","Workflow","outputSchema","required","run","options","addAgent","agent","BaseAgent","clone","factory","memory","_add","meta","randomString","isFunction","_createFactory","delAgent","delStep","input","BeeAgent","llm","tools","description","instructions","execution","templates","system","template","fork","config","defaults","addStep","state","ctx","UnconstrainedMemory","addMany","asReadOnly","result","prompt","signal","update","text","concat","of","join"],"mappings":";;;;;;;;;;;;AA2CO,MAAMA,aAAAA,CAAAA;EA3Cb;;;AA4CqBC,EAAAA,QAAAA;EAEnB,OAAgBC,MAAAA,GAASC,MAAEC,MAAO,CAAA;IAChCC,QAAUF,EAAAA,KAAAA,CAAEG,MAAMH,KAAEI,CAAAA,UAAAA,CAAWC,uBAAAA,CAAAA,CAAAA,CAAcC,IAAI,CAAA,CAAA;IAEjDC,WAAaP,EAAAA,KAAAA,CAAEQ,MAAM,EAAA,CAAGC,QAAQ,EAAA;IAChCC,WAAaV,EAAAA,KAAAA,CAAEG,MAAMH,KAAEI,CAAAA,UAAAA,CAAWC,uBAAAA,CAAAA,CAAAA,CAAcM,OAAQ,CAAA,EAAE;GAC5D,CAAA;AAEAC,EAAAA,WAAAA,CAAYC,OAAO,eAAiB,EAAA;AAClC,IAAKf,IAAAA,CAAAA,QAAAA,GAAW,IAAIgB,qBAAS,CAAA;AAC3BD,MAAAA,IAAAA;AACAd,MAAAA,MAAAA,EAAQF,aAAcE,CAAAA,MAAAA;MACtBgB,YAAclB,EAAAA,aAAAA,CAAcE,OAAOiB,QAAQ;KAC7C,CAAA;AACF;EAEAC,GAAIf,CAAAA,QAAAA,EAAyBgB,OAAsC,GAAA,EAAI,EAAA;AACrE,IAAO,OAAA,IAAA,CAAKpB,SAASmB,GACnB,CAAA;AACEf,MAAAA;AACF,KAAA,EACAgB,OAAAA,CAAAA;AAEJ;AAEAC,EAAAA,QAAAA,CAASC,KAAyD,EAAA;AAChE,IAAA,IAAIA,iBAAiBC,kBAAW,EAAA;AAC9B,MAAMC,MAAAA,KAAAA,GAAQF,MAAME,KAAK,EAAA;AACzB,MAAMC,MAAAA,OAAAA,2BAAyBC,MAAAA,KAAAA;AAC7BF,QAAAA,KAAAA,CAAME,MAASA,GAAAA,MAAAA;AACf,QAAOF,OAAAA,KAAAA;OAFqB,EAAA,SAAA,CAAA;AAI9B,MAAA,OAAO,IAAKG,CAAAA,IAAAA,CAAKH,KAAMI,CAAAA,IAAAA,CAAKb,MAAMU,OAAAA,CAAAA;AACpC;AAEA,IAAA,MAAMV,OAAOO,KAAMP,CAAAA,IAAAA,IAAQ,CAAQc,KAAAA,EAAAA,mBAAAA,CAAa,CAAA,CAAA,CAAA,CAAA;AAChD,IAAO,OAAA,IAAA,CAAKF,IAAKZ,CAAAA,IAAAA,EAAMe,iBAAWR,CAAAA,KAAAA,IAASA,KAAQ,GAAA,IAAA,CAAKS,cAAeT,CAAAA,KAAAA,CAAAA,CAAAA;AACzE;AAEAU,EAAAA,QAAAA,CAASjB,IAAc,EAAA;AACrB,IAAO,OAAA,IAAA,CAAKf,QAASiC,CAAAA,OAAAA,CAAQlB,IAAAA,CAAAA;AAC/B;AAEUgB,EAAAA,cAAAA,CAAeG,KAAwC,EAAA;AAC/D,IAAO,OAAA,CAACR,MACN,KAAA,IAAIS,kBAAS,CAAA;AACXC,MAAAA,GAAAA,EAAKF,KAAME,CAAAA,GAAAA;MACXC,KAAOH,EAAAA,KAAAA,CAAMG,SAAS,EAAA;AACtBX,MAAAA,MAAAA;MACAE,IAAM,EAAA;AACJb,QAAAA,IAAAA,EAAMmB,KAAMnB,CAAAA,IAAAA;AACZuB,QAAAA,WAAAA,EAAaJ,MAAMK,YAAgB,IAAA;AACrC,OAAA;AACAC,MAAAA,SAAAA,EAAWN,KAAMM,CAAAA,SAAAA;AACjB,MAAA,GAAIN,MAAMK,YAAgB,IAAA;QACxBE,SAAW,EAAA;AACTC,UAAAA,MAAAA,kBAASC,MAAAA,CAAAA,CAAAA,QAAAA,KACPA,QAASC,CAAAA,IAAAA,CAAK,CAACC,MAAAA,KAAAA;AACbA,YAAAA,MAAAA,CAAOC,QAASP,CAAAA,YAAAA,GAAeL,KAAMK,CAAAA,YAAAA,IAAgBM,OAAOC,QAASP,CAAAA,YAAAA;AACvE,WAAA,CAHM,EAAA,QAAA;AAIV;AACF;KACF,CAAA;AACJ;AAEUZ,EAAAA,IAAAA,CAAKZ,MAAcU,OAAuB,EAAA;AAClD,IAAA,IAAA,CAAKzB,QAAS+C,CAAAA,OAAAA,CAAQhC,IAAM,EAAA,OAAOiC,OAAOC,GAAAA,KAAAA;AACxC,MAAMvB,MAAAA,MAAAA,GAAS,IAAIwB,2CAAAA,EAAAA;AACnB,MAAA,MAAMxB,OAAOyB,OAAQ,CAAA;WAAIH,KAAM5C,CAAAA,QAAAA;WAAa4C,KAAMpC,CAAAA;AAAY,OAAA,CAAA;AAE9D,MAAA,MAAMU,KAAQ,GAAA,MAAMG,OAAQC,CAAAA,MAAAA,CAAO0B,YAAU,CAAA;AAC7C,MAAA,MAAM,EAAEC,MAAAA,EAAW,GAAA,MAAM/B,MAAMH,GAAI,CAAA;QAAEmC,MAAQ,EAAA;OAAQ,EAAA;AAAEC,QAAAA,MAAAA,EAAQN,GAAIM,CAAAA;OAAO,CAAA;AAE1E,MAAO,OAAA;QACLC,MAAQ,EAAA;AACN/C,UAAAA,WAAAA,EAAa4C,MAAOI,CAAAA,IAAAA;AACpB7C,UAAAA,WAAAA,EAAaoC,KAAMpC,CAAAA,WAAAA,CAAY8C,MAC7BnD,CAAAA,uBAAAA,CAAYoD,EAAG,CAAA;YACb,GAAGN,MAAAA;YACHI,IAAM,EAAA;AAAC,cAAA,CAAA,gBAAA,EAAmB1C,IAAAA,CAAAA,CAAAA;AAAQ,cAAA,CAAA,oBAAA,EAAuBsC,OAAOI,IAAI,CAAA;AAAIG,aAAAA,CAAAA,IAAAA,CAAK,IAAA;AAC/E,WAAA,CAAA;AAEJ;AACF,OAAA;KACF,CAAA;AACA,IAAO,OAAA,IAAA;AACT;AACF","file":"agent.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BeeAgent } from \"@/agents/bee/agent.js\";\nimport { Workflow, WorkflowRunOptions } from \"@/experimental/workflows/workflow.js\";\nimport { BaseMessage } from \"@/llms/primitives/message.js\";\nimport { AnyTool } from \"@/tools/base.js\";\nimport { AnyChatLLM } from \"@/llms/chat.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 {\n  BeeAgentExecutionConfig,\n  BeeRunInput,\n  BeeRunOptions,\n  BeeRunOutput,\n} from \"@/agents/bee/types.js\";\nimport { isFunction, randomString } from \"remeda\";\n\ntype AgentInstance = BaseAgent<BeeRunInput, BeeRunOutput, BeeRunOptions>;\ntype AgentFactory = (memory: ReadOnlyMemory) => AgentInstance | Promise<AgentInstance>;\ninterface AgentFactoryInput {\n  name: string;\n  llm: AnyChatLLM;\n  instructions?: string;\n  tools?: AnyTool[];\n  execution?: BeeAgentExecutionConfig;\n}\n\nexport class AgentWorkflow {\n  protected readonly workflow;\n\n  static readonly schema = z.object({\n    messages: z.array(z.instanceof(BaseMessage)).min(1),\n\n    finalAnswer: z.string().optional(),\n    newMessages: z.array(z.instanceof(BaseMessage)).default([]),\n  });\n\n  constructor(name = \"AgentWorkflow\") {\n    this.workflow = new Workflow({\n      name,\n      schema: AgentWorkflow.schema,\n      outputSchema: AgentWorkflow.schema.required(),\n    });\n  }\n\n  run(messages: BaseMessage[], options: WorkflowRunOptions<string> = {}) {\n    return this.workflow.run(\n      {\n        messages,\n      },\n      options,\n    );\n  }\n\n  addAgent(agent: AgentInstance | AgentFactory | AgentFactoryInput) {\n    if (agent instanceof BaseAgent) {\n      const clone = agent.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    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 BeeAgent({\n        llm: input.llm,\n        tools: input.tools ?? [],\n        memory,\n        meta: {\n          name: input.name,\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              }),\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.messages, ...state.newMessages]);\n\n      const agent = await factory(memory.asReadOnly());\n      const { result } = await agent.run({ prompt: null }, { signal: ctx.signal });\n\n      return {\n        update: {\n          finalAnswer: result.text,\n          newMessages: state.newMessages.concat(\n            BaseMessage.of({\n              ...result,\n              text: [`Assistant Name: ${name}`, `Assistant Response: ${result.text}`].join(\"\\n\"),\n            }),\n          ),\n        },\n      };\n    });\n    return this;\n  }\n}\n"]}