fix: clean up event listeners in PageAgent dispose method

Co-authored-by: gaomeng1900 <10131203+gaomeng1900@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2025-12-15 09:50:28 +00:00
parent 8885bde0ec
commit 67bf38c8d5
2 changed files with 29 additions and 22 deletions

View File

@@ -78,6 +78,8 @@ export class PageAgent extends EventTarget {
#llm: LLM
#totalWaitTime = 0
#abortController = new AbortController()
#llmRetryListener: ((e: Event) => void) | null = null
#llmErrorListener: ((e: Event) => void) | null = null
/** PageController for DOM operations */
pageController: PageController
@@ -108,14 +110,16 @@ export class PageAgent extends EventTarget {
this.pageController = new PageController(this.config)
// Listen to LLM events
this.#llm.addEventListener('retry', (e) => {
this.#llmRetryListener = (e) => {
const { current, max } = (e as CustomEvent).detail
this.panel.update({ type: 'retry', current, max })
})
this.#llm.addEventListener('error', (e) => {
}
this.#llmErrorListener = (e) => {
const { error } = (e as CustomEvent).detail
this.panel.update({ type: 'error', message: `step failed: ${error.message}` })
})
}
this.#llm.addEventListener('retry', this.#llmRetryListener)
this.#llm.addEventListener('error', this.#llmErrorListener)
if (this.config.customTools) {
for (const [name, tool] of Object.entries(this.config.customTools)) {
@@ -491,6 +495,16 @@ export class PageAgent extends EventTarget {
this.history = []
this.#abortController.abort(reason ?? 'PageAgent disposed')
// Clean up LLM event listeners
if (this.#llmRetryListener) {
this.#llm.removeEventListener('retry', this.#llmRetryListener)
this.#llmRetryListener = null
}
if (this.#llmErrorListener) {
this.#llm.removeEventListener('error', this.#llmErrorListener)
this.#llmErrorListener = null
}
this.config.onDispose?.call(this, reason)
}
}