mirror of
https://github.com/ChromeDevTools/chrome-devtools-mcp.git
synced 2026-09-14 19:45:30 +08:00
refactor: use response page in formatting (#2349)
This commit is contained in:
@@ -10,7 +10,6 @@ import os from 'node:os';
|
||||
import path from 'node:path';
|
||||
import {fileURLToPath, pathToFileURL} from 'node:url';
|
||||
|
||||
import type {TargetUniverse} from './devtools/DevtoolsUtils.js';
|
||||
import {overrideDevToolsGlobals} from './devtools/DevtoolsUtils.js';
|
||||
import {HeapSnapshotManager} from './HeapSnapshotManager.js';
|
||||
import type {
|
||||
@@ -284,10 +283,6 @@ export class McpContext implements Context {
|
||||
return outputPath;
|
||||
}
|
||||
|
||||
getDevToolsUniverse(page: McpPage): TargetUniverse | null {
|
||||
return page.devtoolsUniverse ?? null;
|
||||
}
|
||||
|
||||
async newPage(
|
||||
background?: boolean,
|
||||
isolatedContextName?: string,
|
||||
|
||||
@@ -43,7 +43,6 @@ import type {
|
||||
GeolocationOptions,
|
||||
TextSnapshotNode,
|
||||
} from './types.js';
|
||||
import {type WithSymbolId, stableIdSymbol} from './utils/id.js';
|
||||
import {
|
||||
getNetworkMultiplierFromString,
|
||||
WaitForHelper,
|
||||
@@ -512,16 +511,6 @@ export class McpPage implements ContextPage {
|
||||
return {};
|
||||
}
|
||||
|
||||
getConsoleMessageStableId(
|
||||
message: ConsoleMessage | Error | DevTools.AggregatedIssue | UncaughtError,
|
||||
): number {
|
||||
return (message as WithSymbolId<typeof message>)[stableIdSymbol] ?? -1;
|
||||
}
|
||||
|
||||
getNetworkRequestStableId(request: HTTPRequest): number {
|
||||
return (request as WithSymbolId<typeof request>)[stableIdSymbol] ?? -1;
|
||||
}
|
||||
|
||||
async restoreEmulation() {
|
||||
const currentSetting = this.emulationSettings;
|
||||
await this.emulate(currentSetting);
|
||||
|
||||
+20
-16
@@ -40,6 +40,7 @@ import type {
|
||||
TextContent,
|
||||
JSONSchema7Definition,
|
||||
Extension,
|
||||
HTTPRequest,
|
||||
} from './third_party/index.js';
|
||||
import {handleDialog} from './tools/pages.js';
|
||||
import type {ToolGroups} from './tools/thirdPartyDeveloper.js';
|
||||
@@ -52,6 +53,8 @@ import type {
|
||||
} from './tools/ToolDefinition.js';
|
||||
import type {InsightName, TraceResult} from './trace-processing/parse.js';
|
||||
import {getInsightOutput, getTraceSummary} from './trace-processing/parse.js';
|
||||
import type {WithSymbolId} from './utils/id.js';
|
||||
import {stableIdSymbol} from './utils/id.js';
|
||||
import {paginate} from './utils/pagination.js';
|
||||
import type {PaginationOptions} from './utils/types.js';
|
||||
import type {WaitForEventsResult} from './WaitForHelper.js';
|
||||
@@ -615,8 +618,7 @@ export class McpResponse implements Response {
|
||||
);
|
||||
const formatter = await NetworkFormatter.from(request, {
|
||||
requestId: this.#attachedNetworkRequestId,
|
||||
requestIdResolver: req =>
|
||||
context.getSelectedMcpPage().getNetworkRequestStableId(req),
|
||||
requestIdResolver: req => this.getNetworkRequestStableId(req),
|
||||
fetchData: true,
|
||||
requestFilePath: this.#attachedNetworkRequestOptions?.requestFilePath,
|
||||
responseFilePath: this.#attachedNetworkRequestOptions?.responseFilePath,
|
||||
@@ -640,7 +642,7 @@ export class McpResponse implements Response {
|
||||
const consoleMessageStableId = this.#attachedConsoleMessageId;
|
||||
if ('args' in message || message instanceof UncaughtError) {
|
||||
const consoleMessage = message as ConsoleMessage | UncaughtError;
|
||||
const devTools = context.getDevToolsUniverse(this.#page);
|
||||
const devTools = this.#page.devtoolsUniverse;
|
||||
detailedConsoleMessage = await ConsoleFormatter.from(consoleMessage, {
|
||||
id: consoleMessageStableId,
|
||||
fetchDetailedData: true,
|
||||
@@ -725,18 +727,14 @@ export class McpResponse implements Response {
|
||||
await Promise.all(
|
||||
messages.map(
|
||||
async (item): Promise<ConsoleFormatter | IssueFormatter | null> => {
|
||||
const consoleMessageStableId = context
|
||||
.getSelectedMcpPage()
|
||||
.getConsoleMessageStableId(item);
|
||||
const consoleMessageStableId =
|
||||
this.getConsoleMessageStableId(item);
|
||||
if ('args' in item || item instanceof UncaughtError) {
|
||||
const consoleMessage = item as ConsoleMessage | UncaughtError;
|
||||
const devTools = page
|
||||
? context.getDevToolsUniverse(page)
|
||||
: null;
|
||||
return await ConsoleFormatter.from(consoleMessage, {
|
||||
id: consoleMessageStableId,
|
||||
fetchDetailedData: false,
|
||||
devTools: devTools ?? undefined,
|
||||
devTools: page ? page.devtoolsUniverse : undefined,
|
||||
});
|
||||
}
|
||||
if (item instanceof DevTools.AggregatedIssue) {
|
||||
@@ -779,13 +777,9 @@ export class McpResponse implements Response {
|
||||
networkRequests = await Promise.all(
|
||||
requests.map(request =>
|
||||
NetworkFormatter.from(request, {
|
||||
requestId: context
|
||||
.getSelectedMcpPage()
|
||||
.getNetworkRequestStableId(request),
|
||||
requestId: this.getNetworkRequestStableId(request),
|
||||
selectedInDevToolsUI:
|
||||
context
|
||||
.getSelectedMcpPage()
|
||||
.getNetworkRequestStableId(request) ===
|
||||
this.getNetworkRequestStableId(request) ===
|
||||
this.#networkRequestsOptions?.networkRequestIdInDevToolsUI,
|
||||
fetchData: false,
|
||||
saveFile: (data, filename, extension) =>
|
||||
@@ -818,6 +812,16 @@ export class McpResponse implements Response {
|
||||
);
|
||||
}
|
||||
|
||||
getConsoleMessageStableId(
|
||||
message: ConsoleMessage | Error | DevTools.AggregatedIssue | UncaughtError,
|
||||
): number {
|
||||
return (message as WithSymbolId<typeof message>)[stableIdSymbol] ?? -1;
|
||||
}
|
||||
|
||||
getNetworkRequestStableId(request: HTTPRequest): number {
|
||||
return (request as WithSymbolId<typeof request>)[stableIdSymbol] ?? -1;
|
||||
}
|
||||
|
||||
async format(
|
||||
toolName: string,
|
||||
context: McpContext,
|
||||
|
||||
@@ -232,9 +232,6 @@ describe('McpContext', () => {
|
||||
sinon
|
||||
.stub(context.getSelectedMcpPage(), 'getNetworkRequests')
|
||||
.returns([mockRequest]);
|
||||
sinon
|
||||
.stub(context.getSelectedMcpPage(), 'getNetworkRequestStableId')
|
||||
.returns(123);
|
||||
|
||||
response.setIncludeNetworkRequests(true);
|
||||
const result = await response.handle('test', context);
|
||||
@@ -252,9 +249,6 @@ describe('McpContext', () => {
|
||||
sinon
|
||||
.stub(context.getSelectedMcpPage(), 'getNetworkRequestById')
|
||||
.returns(mockRequest);
|
||||
sinon
|
||||
.stub(context.getSelectedMcpPage(), 'getNetworkRequestStableId')
|
||||
.returns(456);
|
||||
|
||||
response.attachNetworkRequest(456);
|
||||
const result = await response.handle('test', context);
|
||||
@@ -280,9 +274,6 @@ describe('McpContext', () => {
|
||||
sinon
|
||||
.stub(context.getSelectedMcpPage(), 'getNetworkRequestById')
|
||||
.returns(mockRequest);
|
||||
sinon
|
||||
.stub(context.getSelectedMcpPage(), 'getNetworkRequestStableId')
|
||||
.returns(789);
|
||||
|
||||
// Use os.tmpdir() so validatePath passes on all platforms (macOS tmpdir
|
||||
// is /var/folders/..., not /tmp, so hardcoded /tmp paths are rejected).
|
||||
|
||||
@@ -412,9 +412,7 @@ describe('console', () => {
|
||||
}
|
||||
}
|
||||
assert.ok(issueMsg);
|
||||
const id = context
|
||||
.getSelectedMcpPage()
|
||||
.getConsoleMessageStableId(issueMsg);
|
||||
const id = response.getConsoleMessageStableId(issueMsg);
|
||||
assert.ok(id);
|
||||
await listConsoleMessages().handler(
|
||||
{params: {types: ['issue']}, page: context.getSelectedMcpPage()},
|
||||
|
||||
@@ -212,7 +212,7 @@ describe('emulation', () => {
|
||||
it('applies cpu throttling to secondary session', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const mcpPage = context.getSelectedMcpPage();
|
||||
const universe = context.getDevToolsUniverse(mcpPage);
|
||||
const universe = mcpPage.devtoolsUniverse;
|
||||
assert.ok(universe);
|
||||
|
||||
const sendSpy = mock.method(universe.session, 'send');
|
||||
|
||||
Reference in New Issue
Block a user