From 975b286c22b0cd6b587dfc838faa669f661ab0b7 Mon Sep 17 00:00:00 2001 From: Wolfgang Beyer Date: Tue, 21 Apr 2026 12:27:35 +0000 Subject: [PATCH] move resolveCdpElementId --- src/McpContext.ts | 30 +----------------------------- src/McpPage.ts | 25 +++++++++++++++++++++++++ src/McpResponse.ts | 5 +---- 3 files changed, 27 insertions(+), 33 deletions(-) diff --git a/src/McpContext.ts b/src/McpContext.ts index 198a91a59..ef350681e 100644 --- a/src/McpContext.ts +++ b/src/McpContext.ts @@ -181,33 +181,6 @@ export class McpContext implements Context { return this.#networkCollector.getIdForResource(request); } - resolveCdpElementId( - page: McpPage, - cdpBackendNodeId: number, - ): string | undefined { - if (!cdpBackendNodeId) { - this.logger('no cdpBackendNodeId'); - return; - } - const snapshot = page.textSnapshot; - if (!snapshot) { - this.logger('no text snapshot'); - return; - } - // TODO: index by backendNodeId instead. - const queue = [snapshot.root]; - while (queue.length) { - const current = queue.pop()!; - if (current.backendNodeId === cdpBackendNodeId) { - return current.id; - } - for (const child of current.children) { - queue.push(child); - } - } - return; - } - getNetworkRequests( page: McpPage, includePreservedRequests?: boolean, @@ -785,8 +758,7 @@ export class McpContext implements Context { const data = devtoolsData ?? (await this.getDevToolsData(page)); if (data?.cdpBackendNodeId) { snapshot.hasSelectedElement = true; - snapshot.selectedElementUid = this.resolveCdpElementId( - page, + snapshot.selectedElementUid = page.resolveCdpElementId( data?.cdpBackendNodeId, ); } diff --git a/src/McpPage.ts b/src/McpPage.ts index 01f8473c2..35898d326 100644 --- a/src/McpPage.ts +++ b/src/McpPage.ts @@ -4,6 +4,7 @@ * SPDX-License-Identifier: Apache-2.0 */ +import {logger} from './logger.js'; import type { Dialog, ElementHandle, @@ -164,4 +165,28 @@ export class McpPage implements ContextPage { getAXNodeByUid(uid: string) { return this.textSnapshot?.idToNode.get(uid); } + + resolveCdpElementId(cdpBackendNodeId: number): string | undefined { + if (!cdpBackendNodeId) { + logger('no cdpBackendNodeId'); + return; + } + const snapshot = this.textSnapshot; + if (!snapshot) { + logger('no text snapshot'); + return; + } + // TODO: index by backendNodeId instead. + const queue = [snapshot.root]; + while (queue.length) { + const current = queue.pop()!; + if (current.backendNodeId === cdpBackendNodeId) { + return current.id; + } + for (const child of current.children) { + queue.push(child); + } + } + return; + } } diff --git a/src/McpResponse.ts b/src/McpResponse.ts index c6e47908c..9d49a9274 100644 --- a/src/McpResponse.ts +++ b/src/McpResponse.ts @@ -513,10 +513,7 @@ export class McpResponse implements Response { context, this.#page, ), - elementIdResolver: context.resolveCdpElementId.bind( - context, - this.#page, - ), + elementIdResolver: this.#page.resolveCdpElementId.bind(this.#page), }); if (!formatter.isValid()) { throw new Error(