{"version":3,"sources":["../../../../src/agents/experimental/replan/agent.ts"],"names":["RePlanAgent","BaseAgent","emitter","constructor","input","Emitter","root","child","namespace","creator","_run","_options","context","prompt","memory","add","BaseMessage","of","role","Role","USER","text","runner","createRunner","finalMessage","undefined","state","run","nextStep","type","message","toolResults","tools","calls","ASSISTANT","RePlanAssistantPrompt","render","results","JSON","stringify","intermediateMemory","UnconstrainedMemory","addMany","messages","driver","JsonDriver","fromTemplate","RePlanSystemPrompt","llm","schema","createRePlanOutputSchema","response","generate","json","options","signal","raw","getTextContent","emit","parsed","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 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 { 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 { BaseMessage, Role } from \"@/llms/primitives/message.js\";\nimport {\n  createRePlanOutputSchema,\n  RePlanState,\n  RePlanSystemPrompt,\n  RePlanAssistantPrompt,\n} from \"@/agents/experimental/replan/prompts.js\";\nimport { BaseMemory } from \"@/memory/base.js\";\nimport { UnconstrainedMemory } from \"@/memory/unconstrainedMemory.js\";\nimport { JsonDriver } from \"@/llms/drivers/json.js\";\nimport { AnyTool, Tool } from \"@/tools/base.js\";\nimport { AnyChatLLM } from \"@/llms/chat.js\";\n\nexport interface RePlanRunInput {\n  prompt: string | null;\n}\n\nexport interface RePlanRunOutput {\n  message: BaseMessage;\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: AnyChatLLM;\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(\n        BaseMessage.of({\n          role: Role.USER,\n          text: input.prompt,\n        }),\n      );\n    }\n\n    const runner = await this.createRunner(context);\n\n    let finalMessage: BaseMessage | undefined = undefined;\n    while (!finalMessage) {\n      const state = await runner.run();\n\n      if (state.nextStep.type === \"message\") {\n        finalMessage = BaseMessage.of({\n          role: Role.USER,\n          text: state.nextStep.message,\n        });\n      } else if (state.nextStep.type === \"tool\") {\n        const toolResults = await runner.tools(state.nextStep.calls);\n        await runner.memory.add(\n          BaseMessage.of({\n            role: Role.ASSISTANT,\n            text: 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 driver = JsonDriver.fromTemplate(RePlanSystemPrompt, this.input.llm);\n      const schema = await createRePlanOutputSchema(this.input.tools);\n      const response = await driver.generate<RePlanState>(schema.json, memory.messages, {\n        options: { signal: context.signal },\n      });\n      await memory.add(\n        BaseMessage.of({\n          role: Role.ASSISTANT,\n          text: response.raw.getTextContent(),\n        }),\n      );\n      await context.emitter.emit(\"update\", { state: response.parsed });\n      return response.parsed;\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"]}