{"version":3,"file":"agent/service.mjs","sources":["webpack://@agent-infra/browser-use/./src/agent/service.ts"],"sourcesContent":["/**\n * The following code is modified based on\n * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/agent/service.ts\n *\n * Apache-2.0 License\n * Copyright (c) 2024 alexchenzl\n * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE\n */\nimport { BaseChatModel } from '@langchain/core/language_models/chat_models';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport BrowserContext from '../browser/context';\nimport { BrowserContextConfig } from '../browser/types';\nimport { Executor } from './executor';\nimport { AgentEvent, ExecutionState } from './event/types';\n\ntype RegisterNewStepCallback = (event: AgentEvent) => Promise<void>;\n// type RegisterDoneCallback = (history: any) => Promise<void>;\n\nexport class Agent {\n  private browserContext: BrowserContext;\n  private registerNewStepCallback?: RegisterNewStepCallback;\n  // private registerDoneCallback?: RegisterDoneCallback;\n  private executor?: Executor;\n\n  constructor(\n    private llm: BaseChatModel,\n    options?: {\n      browserContextConfig?: BrowserContextConfig;\n      registerNewStepCallback?: RegisterNewStepCallback;\n      // registerDoneCallback?: RegisterDoneCallback;\n    },\n  ) {\n    this.browserContext = new BrowserContext(\n      options?.browserContextConfig || {},\n    );\n\n    this.registerNewStepCallback = options?.registerNewStepCallback;\n  }\n\n  private subscribeToExecutorEvents(executor: Executor) {\n    // Clear previous event listeners to prevent multiple subscriptions\n    executor.clearExecutionEvents();\n\n    // Subscribe to new events\n    executor.subscribeExecutionEvents(async (event) => {\n      try {\n        this.registerNewStepCallback?.(event);\n      } catch (error) {\n        console.error('Failed to send message to side panel:', error);\n      }\n\n      if (\n        event.state === ExecutionState.TASK_OK ||\n        event.state === ExecutionState.TASK_FAIL ||\n        event.state === ExecutionState.TASK_CANCEL\n      ) {\n        await this.executor?.cleanup();\n      }\n    });\n  }\n\n  async run(task: string) {\n    // this.registerDoneCallback = options?.registerDoneCallback;\n\n    this.executor = new Executor(\n      task,\n      `${uuidv4()}`,\n      this.browserContext,\n      this.llm,\n      {\n        plannerLLM: this.llm,\n        validatorLLM: this.llm,\n      },\n    );\n\n    this.subscribeToExecutorEvents(this.executor);\n\n    const result = await this.executor.execute();\n    console.info('new_task execution result', result);\n  }\n}\n"],"names":["Agent","executor","event","_this","error","console","ExecutionState","_this_executor","task","Executor","uuidv4","result","llm","options","BrowserContext"],"mappings":";;;;;;;;AAOC;;;;;;;;;;AAYM,MAAMA;IAqBH,0BAA0BC,QAAkB,EAAE;QAEpDA,SAAS,oBAAoB;QAG7BA,SAAS,wBAAwB,CAAC,OAAOC;YACvC,IAAI;oBACFC,+BAAAA;wBAAAA,CAAAA,gCAAAA,AAAAA,CAAAA,QAAAA,IAAI,AAAD,EAAE,uBAAuB,AAAD,KAA3BA,8BAAAA,IAAAA,CAAAA,OAA+BD;YACjC,EAAE,OAAOE,OAAO;gBACdC,QAAQ,KAAK,CAAC,yCAAyCD;YACzD;YAEA,IACEF,MAAM,KAAK,KAAKI,eAAe,OAAO,IACtCJ,MAAM,KAAK,KAAKI,eAAe,SAAS,IACxCJ,MAAM,KAAK,KAAKI,eAAe,WAAW,EAC1C;oBACMC;gBAAN,eAAMA,CAAAA,iBAAAA,IAAI,CAAC,QAAQ,AAAD,IAAZA,KAAAA,IAAAA,eAAe,OAAO,EAAC;YAC/B;QACF;IACF;IAEA,MAAM,IAAIC,IAAY,EAAE;QAGtB,IAAI,CAAC,QAAQ,GAAG,IAAIC,SAClBD,MACA,GAAGE,MAAU,EACb,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,GAAG,EACR;YACE,YAAY,IAAI,CAAC,GAAG;YACpB,cAAc,IAAI,CAAC,GAAG;QACxB;QAGF,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,QAAQ;QAE5C,MAAMC,SAAS,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO;QAC1CN,QAAQ,IAAI,CAAC,6BAA6BM;IAC5C;IAvDA,YACUC,GAAkB,EAC1BC,OAIC,CACD;;QAZF,uBAAQ,kBAAR;QACA,uBAAQ,2BAAR;QAEA,uBAAQ,YAAR;aAGUD,GAAG,GAAHA;QAOR,IAAI,CAAC,cAAc,GAAG,IAAIE,QACxBD,AAAAA,CAAAA,QAAAA,UAAAA,KAAAA,IAAAA,QAAS,oBAAoB,AAAD,KAAK,CAAC;QAGpC,IAAI,CAAC,uBAAuB,GAAGA,QAAAA,UAAAA,KAAAA,IAAAA,QAAS,uBAAuB;IACjE;AA2CF"}