Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions src/McpContext.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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,
Expand Down
11 changes: 0 additions & 11 deletions src/McpPage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ import type {
GeolocationOptions,
TextSnapshotNode,
} from './types.js';
import {type WithSymbolId, stableIdSymbol} from './utils/id.js';
import {
getNetworkMultiplierFromString,
WaitForHelper,
Expand Down Expand Up @@ -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);
Expand Down
36 changes: 20 additions & 16 deletions src/McpResponse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -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';
Expand Down Expand Up @@ -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,
Expand All @@ -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,
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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) =>
Expand Down Expand Up @@ -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,
Expand Down
9 changes: 0 additions & 9 deletions tests/McpContext.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
Expand All @@ -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).
Expand Down
4 changes: 1 addition & 3 deletions tests/tools/console.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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()},
Expand Down
2 changes: 1 addition & 1 deletion tests/tools/emulation.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand Down