File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -128,8 +128,10 @@ export class WaitForHelper {
128128 action : ( ) => Promise < unknown > ,
129129 options ?: { timeout ?: number ; handleDialog ?: 'accept' | 'dismiss' | string } ,
130130 ) : Promise < void > {
131+ let dialogOpened = false ;
131132 if ( options ?. handleDialog ) {
132133 const dialogHandler = ( dialog : Pick < Dialog , 'accept' | 'dismiss' > ) => {
134+ dialogOpened = true ;
133135 if ( options . handleDialog === 'dismiss' ) {
134136 void dialog . dismiss ( ) ;
135137 } else if ( options . handleDialog === 'accept' ) {
@@ -167,6 +169,10 @@ export class WaitForHelper {
167169 try {
168170 await navigationFinished ;
169171
172+ if ( dialogOpened ) {
173+ return ;
174+ }
175+
170176 // Wait for stable dom after navigation so we execute in
171177 // the correct context
172178 await this . waitForStableDom ( ) ;
Original file line number Diff line number Diff line change @@ -199,19 +199,22 @@ export async function createMcpServer(
199199 logger ( `${ tool . name } request: ${ JSON . stringify ( params , null , ' ' ) } ` ) ;
200200 const context = await getContext ( ) ;
201201 logger ( `${ tool . name } context: resolved` ) ;
202- await context . detectOpenDevToolsWindows ( ) ;
202+ const page =
203+ serverArgs . experimentalPageIdRouting &&
204+ params . pageId &&
205+ ! serverArgs . slim
206+ ? context . getPageById ( params . pageId )
207+ : context . getSelectedMcpPage ( ) ;
208+ // If there is a dialog open, we will skip devtools detection
209+ if ( ! page . getDialog ( ) ) {
210+ await context . detectOpenDevToolsWindows ( ) ;
211+ }
203212 const response = serverArgs . slim
204213 ? new SlimMcpResponse ( serverArgs )
205214 : new McpResponse ( serverArgs ) ;
206215
207216 response . setRedactNetworkHeaders ( serverArgs . redactNetworkHeaders ) ;
208217 if ( 'pageScoped' in tool && tool . pageScoped ) {
209- const page =
210- serverArgs . experimentalPageIdRouting &&
211- params . pageId &&
212- ! serverArgs . slim
213- ? context . getPageById ( params . pageId )
214- : context . getSelectedMcpPage ( ) ;
215218 response . setPage ( page ) ;
216219 await tool . handler (
217220 {
Original file line number Diff line number Diff line change @@ -336,6 +336,18 @@ export function definePageTool<
336336 return {
337337 ...definition ,
338338 pageScoped : true ,
339+ handler : async ( request , response , context ) => {
340+ try {
341+ await definition . handler ( request , response , context ) ;
342+ } catch ( error ) {
343+ const dialog = request . page . getDialog ( ) ;
344+ if ( dialog ) {
345+ response . appendResponseLine ( `[Blocked] Action triggered a dialog.` ) ;
346+ return ;
347+ }
348+ throw error ;
349+ }
350+ } ,
339351 } as DefinedPageTool < Schema > ;
340352}
341353
You can’t perform that action at this time.
0 commit comments