{"version":3,"sources":["../../src/tools/handoff.ts"],"names":["HandoffTool","Tool","propagateInputs","name","description","emitter","Emitter","root","child","namespace","creator","inputSchema","z","object","task","string","describe","target","options","toCamelCase","meta","_run","input","run","memory","getProp","context","contextKeys","Memory","ToolError","isRetryable","isFatal","messages","filter","msg","SystemMessage","lastValidMsgIndex","findLastIndex","AssistantMessage","getToolCalls","length","slice","push","UserMessage","clone","reset","addMany","response","prompt","StringToolOutput","result","text"],"mappings":";;;;;;;;;;;AA4BO,MAAMA,oBAAoBC,aAAAA,CAAAA;EA5BjC;;;;AA6BmBC,EAAAA,eAAAA;AACVC,EAAAA,IAAAA;AACAC,EAAAA,WAAAA;EAESC,OAAAA,GAA0DC,mBAAAA,CAAQC,KAAKC,KAAAA,CAAM;IAC3FC,SAAAA,EAAW;AAAC,MAAA,MAAA;AAAQ,MAAA;;IACpBC,OAAAA,EAAS;GACX,CAAA;EAEAC,WAAAA,GAAc;AACZ,IAAA,OAAOC,MAAEC,MAAAA,CAAO;AACdC,MAAAA,IAAAA,EAAMF,KAAAA,CACHG,MAAAA,EAAM,CACNC,QAAAA,CAAS,uEAAA;KACd,CAAA;AACF,EAAA;AAEA,EAAA,WAAA,CACUC,QACRC,OAAAA,EACA;AACA,IAAA,KAAA,EAAK,EAAA,KAHGD,MAAAA,GAAAA,MAAAA;AAIR,IAAA,IAAA,CAAKd,OAAOgB,kBAAAA,CAAYD,OAAAA,EAASf,QAAQ,IAAA,CAAKc,MAAAA,CAAOG,KAAKjB,IAAI,CAAA;AAC9D,IAAA,IAAA,CAAKC,WAAAA,GAAcc,OAAAA,EAASd,WAAAA,IAAe,IAAA,CAAKa,OAAOG,IAAAA,CAAKhB,WAAAA;AAC5D,IAAA,IAAA,CAAKF,eAAAA,GAAkBgB,SAAShB,eAAAA,IAAmB,IAAA;AACrD,EAAA;EAEA,MAAgBmB,IAAAA,CACdC,KAAAA,EACAJ,OAAAA,EACAK,GAAAA,EAC2B;AAC3B,IAAA,MAAMC,MAAAA,GAASC,kBAAAA,CAAQF,GAAAA,CAAIG,OAAAA,EAAS;AAACzB,MAAAA,aAAAA,CAAK0B,WAAAA,CAAYC;AAAO,KAAA,CAAA;AAE7D,IAAA,IAAI,CAACJ,MAAAA,EAAQ;AACX,MAAA,MAAM,IAAIK,kBAAAA,CAAU,CAAA,+BAAA,CAAA,EAAmC,EAAA,EAAI;QACzDC,WAAAA,EAAa,KAAA;QACbC,OAAAA,EAAS;OACX,CAAA;AACF,IAAA;AAEA,IAAA,IAAIC,QAAAA,GAAsBR,OAAOQ,QAAAA,CAASC,MAAAA,CAAO,CAACC,GAAAA,KAAQ,EAAEA,eAAeC,yBAAAA,CAAY,CAAA;AAEvF,IAAA,MAAMC,iBAAAA,GAAoBC,oBAAAA,CACxBL,QAAAA,EACA,CAACE,GAAAA,KAAQA,GAAAA,YAAeI,4BAAAA,IAAAA,CAAqBJ,GAAAA,CAAIK,YAAAA,EAAY,EAAIC,MAAAA,IAAU,CAAA,IAAK,CAAA,CAAA;AAGlF,IAAA,IAAIJ,sBAAsB,EAAA,EAAI;AAC5BJ,MAAAA,QAAAA,GAAWA,QAAAA,CAASS,KAAAA,CAAM,CAAA,EAAGL,iBAAAA,CAAAA;AAC/B,IAAA;AAEA,IAAA,IAAI,KAAKlC,eAAAA,EAAiB;AACxB8B,MAAAA,QAAAA,CAASU,IAAAA,CAAK,IAAIC,uBAAAA,CAAYrB,KAAAA,CAAMR,IAAI,CAAA,CAAA;AAC1C,IAAA;AAEA,IAAA,MAAMG,MAAAA,GAAS,MAAM,IAAA,CAAKA,MAAAA,CAAO2B,KAAAA,EAAK;AACtC3B,IAAAA,MAAAA,CAAOO,OAAOqB,KAAAA,EAAK;AACnB,IAAA,MAAM5B,MAAAA,CAAOO,MAAAA,CAAOsB,OAAAA,CAAQd,QAAAA,CAAAA;AAE5B,IAAA,MAAMe,QAAAA,GAAW,MAAM9B,MAAAA,CAAOM,GAAAA,CAAI;MAAEyB,MAAAA,EAAQ;KAAK,CAAA;AAEjD,IAAA,OAAO,IAAIC,yBAAAA,CAAiBF,QAAAA,CAASG,MAAAA,CAAOC,IAAI,CAAA;AAClD,EAAA;AACF","file":"handoff.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { z } from \"zod\";\nimport {\n  BaseToolRunOptions,\n  StringToolOutput,\n  Tool,\n  ToolEmitter,\n  ToolError,\n  ToolInput,\n} from \"./base.js\";\nimport { BaseMemory } from \"@/memory/base.js\";\nimport { AssistantMessage, Message, SystemMessage, UserMessage } from \"@/backend/message.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { AnyAgent } from \"@/agents/types.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { getProp } from \"@/internals/helpers/object.js\";\nimport { findLastIndex, toCamelCase } from \"remeda\";\n\nexport interface HandoffToolInput {\n  name?: string;\n  description?: string;\n  propagateInputs?: boolean;\n}\n\nexport class HandoffTool extends Tool<StringToolOutput> {\n  private readonly propagateInputs: boolean;\n  public name: string;\n  public description: string;\n\n  public readonly emitter: ToolEmitter<ToolInput<this>, StringToolOutput> = Emitter.root.child({\n    namespace: [\"tool\", \"handoff\"],\n    creator: this,\n  });\n\n  inputSchema() {\n    return z.object({\n      task: z\n        .string()\n        .describe(\"Clearly defined task for the agent to work on based on his abilities.\"),\n    });\n  }\n\n  constructor(\n    private target: AnyAgent,\n    options?: HandoffToolInput,\n  ) {\n    super();\n    this.name = toCamelCase(options?.name || this.target.meta.name);\n    this.description = options?.description || this.target.meta.description;\n    this.propagateInputs = options?.propagateInputs ?? true;\n  }\n\n  protected async _run(\n    input: ToolInput<this>,\n    options: Partial<BaseToolRunOptions>,\n    run: GetRunContext<typeof this>,\n  ): Promise<StringToolOutput> {\n    const memory = getProp(run.context, [Tool.contextKeys.Memory]) as BaseMemory;\n\n    if (!memory) {\n      throw new ToolError(`No memory found in the context.`, [], {\n        isRetryable: false,\n        isFatal: true,\n      });\n    }\n\n    let messages: Message[] = memory.messages.filter((msg) => !(msg instanceof SystemMessage));\n\n    const lastValidMsgIndex = findLastIndex(\n      messages,\n      (msg) => msg instanceof AssistantMessage && (msg.getToolCalls()?.length ?? 0) > 0,\n    );\n\n    if (lastValidMsgIndex !== -1) {\n      messages = messages.slice(0, lastValidMsgIndex);\n    }\n\n    if (this.propagateInputs) {\n      messages.push(new UserMessage(input.task));\n    }\n\n    const target = await this.target.clone();\n    target.memory.reset();\n    await target.memory.addMany(messages);\n\n    const response = await target.run({ prompt: null });\n\n    return new StringToolOutput(response.result.text);\n  }\n}\n"]}