{"version":3,"sources":["../../../../src/agents/experimental/replan/agent.ts"],"names":["RePlanAgent","BaseAgent","emitter","Emitter","root","child","namespace","creator","input","_run","_options","context","prompt","memory","add","UserMessage","runner","createRunner","finalMessage","undefined","state","run","nextStep","type","message","toolResults","tools","calls","AssistantMessage","RePlanAssistantPrompt","render","results","JSON","stringify","intermediateMemory","UnconstrainedMemory","addMany","messages","schema","createRePlanOutputSchema","response","llm","createStructure","definition","abortSignal","signal","emit","object","Promise","all","map","call","tool","find","name","AgentError","meta","output","Tool","contextKeys","Memory","error"],"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 { Callback } from \"@/emitter/types.js\";\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 {\n  createRePlanOutputSchema,\n  RePlanState,\n  RePlanAssistantPrompt,\n} from \"@/agents/experimental/replan/prompts.js\";\nimport { BaseMemory } from \"@/memory/base.js\";\nimport { UnconstrainedMemory } from \"@/memory/unconstrainedMemory.js\";\nimport { AnyTool, Tool } from \"@/tools/base.js\";\nimport { ChatModel } from \"@/backend/chat.js\";\n\nexport interface RePlanRunInput {\n  prompt: string | null;\n}\n\nexport interface RePlanRunOutput {\n  message: Message;\n  intermediateMemory: BaseMemory;\n}\n\nexport interface RePlanToolCall {\n  name: string;\n  input: any;\n}\n\nexport interface RePlanEvents {\n  update: Callback<{ state: RePlanState }>;\n  tool: Callback<\n    | { type: \"start\"; tool: AnyTool; input: any; calls: RePlanToolCall[] }\n    | { type: \"success\"; tool: AnyTool; input: any; output: any; calls: RePlanToolCall[] }\n    | { type: \"error\"; tool: AnyTool; input: any; error: Error; calls: RePlanToolCall[] }\n  >;\n}\n\ninterface Input {\n  memory: BaseMemory;\n  tools: AnyTool[];\n  llm: ChatModel;\n}\n\nexport class RePlanAgent extends BaseAgent<RePlanRunInput, RePlanRunOutput> {\n  public emitter = Emitter.root.child<RePlanEvents>({\n    namespace: [\"agent\", \"rePlan\"],\n    creator: this,\n  });\n\n  constructor(protected readonly input: Input) {\n    super();\n  }\n\n  protected async _run(\n    input: RePlanRunInput,\n    _options: BaseAgentRunOptions,\n    context: GetRunContext<this>,\n  ): Promise<RePlanRunOutput> {\n    if (input.prompt !== null) {\n      await this.memory.add(new UserMessage(input.prompt));\n    }\n\n    const runner = await this.createRunner(context);\n\n    let finalMessage: Message | undefined = undefined;\n    while (!finalMessage) {\n      const state = await runner.run();\n\n      if (state.nextStep.type === \"message\") {\n        finalMessage = new UserMessage(state.nextStep.message);\n      } else if (state.nextStep.type === \"tool\") {\n        const toolResults = await runner.tools(state.nextStep.calls);\n        await runner.memory.add(\n          new AssistantMessage(\n            RePlanAssistantPrompt.render({\n              results: JSON.stringify(toolResults),\n            }),\n          ),\n        );\n      }\n    }\n\n    await this.memory.add(finalMessage);\n\n    return {\n      message: finalMessage,\n      intermediateMemory: runner.memory,\n    };\n  }\n\n  protected async createRunner(context: GetRunContext<this>) {\n    const memory = new UnconstrainedMemory();\n    await memory.addMany(this.memory.messages);\n\n    const run = async (): Promise<RePlanState> => {\n      const schema = await createRePlanOutputSchema(this.input.tools);\n      const response = await this.input.llm.createStructure({\n        schema: schema.definition,\n        abortSignal: context.signal,\n        messages: memory.messages,\n      });\n      await memory.add(new AssistantMessage(JSON.stringify(response)));\n      await context.emitter.emit(\"update\", { state: response.object });\n      return response.object;\n    };\n\n    const tools = async (calls: RePlanToolCall[]) => {\n      return await Promise.all(\n        calls.map(async (call) => {\n          const tool = this.input.tools.find((tool) => tool.name === call.name);\n          if (!tool) {\n            throw new AgentError(`Tool ${call.name} does not exist.`);\n          }\n\n          const meta = { input: call, tool, calls };\n          await context.emitter.emit(\"tool\", { type: \"start\", ...meta });\n          try {\n            const output = await tool.run(call.input, { signal: context.signal }).context({\n              [Tool.contextKeys.Memory]: memory,\n            });\n            await context.emitter.emit(\"tool\", { type: \"success\", ...meta, output });\n            return output;\n          } catch (error) {\n            await context.emitter.emit(\"tool\", { type: \"error\", ...meta, error });\n            throw error;\n          }\n        }),\n      );\n    };\n\n    return {\n      memory,\n      run,\n      tools,\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"]}