44 * SPDX-License-Identifier: Apache-2.0
55 */
66
7- import { mapIssueToMessageObject } from './DevtoolsUtils.js' ;
87import type { ConsoleMessageData } from './formatters/consoleFormatter.js' ;
98import {
109 formatConsoleEventShort ,
1110 formatConsoleEventVerbose ,
1211} from './formatters/consoleFormatter.js' ;
12+ import { IssueFormatter } from './formatters/IssueFormatter.js' ;
1313import { NetworkFormatter } from './formatters/NetworkFormatter.js' ;
1414import { SnapshotFormatter } from './formatters/SnapshotFormatter.js' ;
1515import type { McpContext } from './McpContext.js' ;
@@ -222,7 +222,7 @@ export class McpResponse implements Response {
222222 detailedNetworkRequest = formatter ;
223223 }
224224
225- let consoleData : ConsoleMessageData | undefined ;
225+ let consoleData : ConsoleMessageData | IssueFormatter | undefined ;
226226
227227 if ( this . #attachedConsoleMessageId) {
228228 const message = context . getConsoleMessageById (
@@ -247,16 +247,17 @@ export class McpResponse implements Response {
247247 ) ,
248248 } ;
249249 } else if ( message instanceof DevTools . AggregatedIssue ) {
250- const mappedIssueMessage = mapIssueToMessageObject ( message ) ;
251- if ( ! mappedIssueMessage ) {
250+ const formatter = new IssueFormatter ( message , {
251+ id : consoleMessageStableId ,
252+ requestIdResolver : context . resolveCdpRequestId . bind ( context ) ,
253+ elementIdResolver : context . resolveCdpElementId . bind ( context ) ,
254+ } ) ;
255+ if ( ! formatter . isValid ( ) ) {
252256 throw new Error (
253257 "Can't provide detals for the msgid " + consoleMessageStableId ,
254258 ) ;
255259 }
256- consoleData = {
257- consoleMessageStableId,
258- ...mappedIssueMessage ,
259- } ;
260+ consoleData = formatter ;
260261 } else {
261262 consoleData = {
262263 consoleMessageStableId,
@@ -267,7 +268,7 @@ export class McpResponse implements Response {
267268 }
268269 }
269270
270- let consoleListData : ConsoleMessageData [ ] | undefined ;
271+ let consoleListData : Array < ConsoleMessageData | IssueFormatter > | undefined ;
271272 if ( this . #consoleDataOptions?. include ) {
272273 let messages = context . getConsoleData (
273274 this . #consoleDataOptions. includePreservedMessages ,
@@ -288,44 +289,47 @@ export class McpResponse implements Response {
288289
289290 consoleListData = (
290291 await Promise . all (
291- messages . map ( async ( item ) : Promise < ConsoleMessageData | null > => {
292- const consoleMessageStableId =
293- context . getConsoleMessageStableId ( item ) ;
294- if ( 'args' in item ) {
295- const consoleMessage = item as ConsoleMessage ;
296- return {
297- consoleMessageStableId,
298- type : consoleMessage . type ( ) ,
299- message : consoleMessage . text ( ) ,
300- args : await Promise . all (
301- consoleMessage . args ( ) . map ( async arg => {
302- const stringArg = await arg . jsonValue ( ) . catch ( ( ) => {
303- // Ignore errors.
304- } ) ;
305- return typeof stringArg === 'object'
306- ? JSON . stringify ( stringArg )
307- : String ( stringArg ) ;
308- } ) ,
309- ) ,
310- } ;
311- }
312- if ( item instanceof DevTools . AggregatedIssue ) {
313- const mappedIssueMessage = mapIssueToMessageObject ( item ) ;
314- if ( ! mappedIssueMessage ) {
315- return null ;
292+ messages . map (
293+ async (
294+ item ,
295+ ) : Promise < ConsoleMessageData | IssueFormatter | null > => {
296+ const consoleMessageStableId =
297+ context . getConsoleMessageStableId ( item ) ;
298+ if ( 'args' in item ) {
299+ const consoleMessage = item as ConsoleMessage ;
300+ return {
301+ consoleMessageStableId,
302+ type : consoleMessage . type ( ) ,
303+ message : consoleMessage . text ( ) ,
304+ args : await Promise . all (
305+ consoleMessage . args ( ) . map ( async arg => {
306+ const stringArg = await arg . jsonValue ( ) . catch ( ( ) => {
307+ // Ignore errors.
308+ } ) ;
309+ return typeof stringArg === 'object'
310+ ? JSON . stringify ( stringArg )
311+ : String ( stringArg ) ;
312+ } ) ,
313+ ) ,
314+ } ;
315+ }
316+ if ( item instanceof DevTools . AggregatedIssue ) {
317+ const formatter = new IssueFormatter ( item , {
318+ id : consoleMessageStableId ,
319+ } ) ;
320+ if ( ! formatter . isValid ( ) ) {
321+ return null ;
322+ }
323+ return formatter ;
316324 }
317325 return {
318326 consoleMessageStableId,
319- ...mappedIssueMessage ,
327+ type : 'error' ,
328+ message : ( item as Error ) . message ,
329+ args : [ ] ,
320330 } ;
321- }
322- return {
323- consoleMessageStableId,
324- type : 'error' ,
325- message : ( item as Error ) . message ,
326- args : [ ] ,
327- } ;
328- } ) ,
331+ } ,
332+ ) ,
329333 )
330334 ) . filter ( item => item !== null ) ;
331335 }
@@ -380,8 +384,8 @@ export class McpResponse implements Response {
380384 toolName : string ,
381385 context : McpContext ,
382386 data : {
383- consoleData : ConsoleMessageData | undefined ;
384- consoleListData : ConsoleMessageData [ ] | undefined ;
387+ consoleData : ConsoleMessageData | IssueFormatter | undefined ;
388+ consoleListData : Array < ConsoleMessageData | IssueFormatter > | undefined ;
385389 snapshot : SnapshotFormatter | string | undefined ;
386390 detailedNetworkRequest ?: NetworkFormatter ;
387391 networkRequests ?: NetworkFormatter [ ] ;
@@ -504,7 +508,12 @@ Call ${handleDialog.name} to handle it before continuing.`);
504508 ) ;
505509 response . push ( ...data . info ) ;
506510 response . push (
507- ...data . items . map ( message => formatConsoleEventShort ( message ) ) ,
511+ ...data . items . map ( message => {
512+ if ( message instanceof IssueFormatter ) {
513+ return message . toString ( ) ;
514+ }
515+ return formatConsoleEventShort ( message ) ;
516+ } ) ,
508517 ) ;
509518 } else {
510519 response . push ( '<no console messages found>' ) ;
@@ -556,14 +565,18 @@ Call ${handleDialog.name} to handle it before continuing.`);
556565
557566 #formatConsoleData(
558567 context : McpContext ,
559- data : ConsoleMessageData | undefined ,
568+ data : ConsoleMessageData | IssueFormatter | undefined ,
560569 ) : string [ ] {
561570 const response : string [ ] = [ ] ;
562571 if ( ! data ) {
563572 return response ;
564573 }
565574
566- response . push ( formatConsoleEventVerbose ( data , context ) ) ;
575+ if ( data instanceof IssueFormatter ) {
576+ response . push ( data . toStringDetailed ( ) ) ;
577+ } else {
578+ response . push ( formatConsoleEventVerbose ( data , context ) ) ;
579+ }
567580 return response ;
568581 }
569582
0 commit comments