From 552987eb561afd857bff36bc5e047328308820c8 Mon Sep 17 00:00:00 2001 From: Simon <10131203+gaomeng1900@users.noreply.github.com> Date: Mon, 8 Jun 2026 21:58:16 +0800 Subject: [PATCH] fix(core): prevent concurrent execute() calls --- packages/core/src/PageAgentCore.ts | 32 +++++++++++++++--------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/core/src/PageAgentCore.ts b/packages/core/src/PageAgentCore.ts index d6ac114..9189389 100644 --- a/packages/core/src/PageAgentCore.ts +++ b/packages/core/src/PageAgentCore.ts @@ -192,10 +192,20 @@ export class PageAgentCore extends EventTarget { async execute(task: string): Promise { if (this.disposed) throw new Error('PageAgent has been disposed. Create a new instance.') + if (this.#status === 'running') throw new Error('A task is already running.') if (!task) throw new Error('Task is required') + this.task = task this.taskId = uid() + this.history = [] + this.#observations = [] + this.#states = { totalWaitTime: 0, lastURL: '', browserState: null } + this.#abortController = new AbortController() + + this.#setStatus('running') + this.#emitHistoryChange() + // Disable ask_user tool if onAskUser is not set if (!this.onAskUser) { this.tools.delete('ask_user') @@ -206,24 +216,14 @@ export class PageAgentCore extends EventTarget { const onBeforeTask = this.config.onBeforeTask const onAfterTask = this.config.onAfterTask - await onBeforeTask?.(this) - - // Show mask - await this.pageController.showMask() - - if (this.#abortController) { - this.#abortController.abort() - this.#abortController = new AbortController() + try { + await onBeforeTask?.(this) + await this.pageController.showMask() + } catch (error) { + this.#setStatus('error') + throw error } - this.history = [] - this.#setStatus('running') - this.#emitHistoryChange() - this.#observations = [] - - // Reset internal states - this.#states = { totalWaitTime: 0, lastURL: '', browserState: null } - let step = 0 let taskSuccess: boolean let taskResult: string