@yezack/chrome-devtools-mcp-108 0.0.0-stage → 1.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. package/FORK-NOTICE.md +45 -0
  2. package/LICENSE +202 -0
  3. package/README.md +45 -2
  4. package/build/src/BrowserManager.js +401 -0
  5. package/build/src/McpContext.js +642 -0
  6. package/build/src/McpPage.js +850 -0
  7. package/build/src/McpResponse.js +1086 -0
  8. package/build/src/SlimMcpResponse.js +19 -0
  9. package/build/src/TextSnapshot.js +315 -0
  10. package/build/src/ToolHandler.js +322 -0
  11. package/build/src/bin/check-latest-version.js +51 -0
  12. package/build/src/bin/chrome-devtools-mcp-main.js +77 -0
  13. package/build/src/bin/chrome-devtools-mcp.js +23 -0
  14. package/build/src/bin/chrome-devtools.js +222 -0
  15. package/build/src/collectors/PageCollector.js +291 -0
  16. package/build/src/collectors/ServiceWorkerCollector.js +171 -0
  17. package/build/src/config/browser-options.js +125 -0
  18. package/build/src/config/category-options.js +89 -0
  19. package/build/src/config/cli-commands.js +26 -0
  20. package/build/src/config/cli-options.js +1473 -0
  21. package/build/src/config/mcp-options.js +417 -0
  22. package/build/src/daemon/client.js +221 -0
  23. package/build/src/daemon/daemon.js +266 -0
  24. package/build/src/daemon/types.js +7 -0
  25. package/build/src/daemon/utils.js +136 -0
  26. package/build/src/devtools/DevToolsCommentBridge.js +91 -0
  27. package/build/src/devtools/DevtoolsUtils.js +307 -0
  28. package/build/src/devtools/McpHostBindingAdapter.js +165 -0
  29. package/build/src/devtools/issueDescriptions.js +42 -0
  30. package/build/src/formatters/CommentFormatter.js +82 -0
  31. package/build/src/formatters/ConsoleFormatter.js +321 -0
  32. package/build/src/formatters/CssFormatter.js +812 -0
  33. package/build/src/formatters/HeapSnapshotFormatter.js +185 -0
  34. package/build/src/formatters/IssueFormatter.js +193 -0
  35. package/build/src/formatters/NetworkFormatter.js +241 -0
  36. package/build/src/formatters/SnapshotFormatter.js +135 -0
  37. package/build/src/index.js +237 -0
  38. package/build/src/processors/ChunkedTraceParser.js +361 -0
  39. package/build/src/processors/HeapSnapshotManager.js +270 -0
  40. package/build/src/processors/PerformanceTrace.js +132 -0
  41. package/build/src/telemetry/ClearcutLogger.js +242 -0
  42. package/build/src/telemetry/WatchdogClient.js +61 -0
  43. package/build/src/telemetry/errors.js +18 -0
  44. package/build/src/telemetry/flagUtils.js +90 -0
  45. package/build/src/telemetry/metricsRegistry.js +85 -0
  46. package/build/src/telemetry/persistence.js +82 -0
  47. package/build/src/telemetry/transformation.js +233 -0
  48. package/build/src/telemetry/types.js +36 -0
  49. package/build/src/telemetry/watchdog/ClearcutSender.js +205 -0
  50. package/build/src/telemetry/watchdog/main.js +128 -0
  51. package/build/src/third_party/THIRD_PARTY_NOTICES +4077 -0
  52. package/build/src/third_party/bundled-packages.json +12 -0
  53. package/build/src/third_party/devtools-formatter-worker.js +15494 -0
  54. package/build/src/third_party/devtools-heap-snapshot-worker.js +10979 -0
  55. package/build/src/third_party/index.js +200978 -0
  56. package/build/src/third_party/issue-descriptions/CoepCoopSandboxedIframeCannotNavigateToCoopPage.md +4 -0
  57. package/build/src/third_party/issue-descriptions/CoepCorpNotSameOrigin.md +8 -0
  58. package/build/src/third_party/issue-descriptions/CoepCorpNotSameOriginAfterDefaultedToSameOriginByCoep.md +18 -0
  59. package/build/src/third_party/issue-descriptions/CoepCorpNotSameSite.md +7 -0
  60. package/build/src/third_party/issue-descriptions/CoepFrameResourceNeedsCoepHeader.md +10 -0
  61. package/build/src/third_party/issue-descriptions/CompatibilityModeQuirks.md +5 -0
  62. package/build/src/third_party/issue-descriptions/CookieAttributeValueExceedsMaxSize.md +5 -0
  63. package/build/src/third_party/issue-descriptions/LowTextContrast.md +5 -0
  64. package/build/src/third_party/issue-descriptions/SameSiteNoneInsecureErrorRead.md +8 -0
  65. package/build/src/third_party/issue-descriptions/SameSiteNoneInsecureErrorSet.md +8 -0
  66. package/build/src/third_party/issue-descriptions/SameSiteNoneInsecureWarnRead.md +8 -0
  67. package/build/src/third_party/issue-descriptions/SameSiteNoneInsecureWarnSet.md +8 -0
  68. package/build/src/third_party/issue-descriptions/SameSiteUnspecifiedLaxAllowUnsafeRead.md +9 -0
  69. package/build/src/third_party/issue-descriptions/SameSiteUnspecifiedLaxAllowUnsafeSet.md +9 -0
  70. package/build/src/third_party/issue-descriptions/bounceTrackingMitigations.md +3 -0
  71. package/build/src/third_party/issue-descriptions/clientHintMetaTagAllowListInvalidOrigin.md +4 -0
  72. package/build/src/third_party/issue-descriptions/clientHintMetaTagModifiedHTML.md +4 -0
  73. package/build/src/third_party/issue-descriptions/connectionAllowlistEmbeddingRequirementNotSatisfied.md +26 -0
  74. package/build/src/third_party/issue-descriptions/connectionAllowlistIFrameAttributeLoosensEmbeddingRequirement.md +19 -0
  75. package/build/src/third_party/issue-descriptions/connectionAllowlistInvalidAllowConnectionAllowlistFrom.md +21 -0
  76. package/build/src/third_party/issue-descriptions/connectionAllowlistInvalidAllowlistItemType.md +12 -0
  77. package/build/src/third_party/issue-descriptions/connectionAllowlistInvalidHeader.md +12 -0
  78. package/build/src/third_party/issue-descriptions/connectionAllowlistInvalidUrlPattern.md +8 -0
  79. package/build/src/third_party/issue-descriptions/connectionAllowlistItemNotInnerList.md +12 -0
  80. package/build/src/third_party/issue-descriptions/connectionAllowlistMoreThanOneList.md +7 -0
  81. package/build/src/third_party/issue-descriptions/connectionAllowlistReportingEndpointNotToken.md +10 -0
  82. package/build/src/third_party/issue-descriptions/cookieCrossSiteRedirectDowngrade.md +12 -0
  83. package/build/src/third_party/issue-descriptions/cookieExcludeDomainNonAscii.md +11 -0
  84. package/build/src/third_party/issue-descriptions/cookieExcludePortMismatch.md +8 -0
  85. package/build/src/third_party/issue-descriptions/cookieExcludeSchemeMismatch.md +7 -0
  86. package/build/src/third_party/issue-descriptions/cookieExcludeThirdPartyPhaseoutRead.md +6 -0
  87. package/build/src/third_party/issue-descriptions/cookieExcludeThirdPartyPhaseoutSet.md +6 -0
  88. package/build/src/third_party/issue-descriptions/cookieWarnDomainNonAscii.md +11 -0
  89. package/build/src/third_party/issue-descriptions/cookieWarnMetadataGrantRead.md +4 -0
  90. package/build/src/third_party/issue-descriptions/cookieWarnMetadataGrantSet.md +4 -0
  91. package/build/src/third_party/issue-descriptions/cookieWarnThirdPartyPhaseoutRead.md +6 -0
  92. package/build/src/third_party/issue-descriptions/cookieWarnThirdPartyPhaseoutSet.md +6 -0
  93. package/build/src/third_party/issue-descriptions/corsAllowCredentialsRequired.md +6 -0
  94. package/build/src/third_party/issue-descriptions/corsDisabledScheme.md +7 -0
  95. package/build/src/third_party/issue-descriptions/corsDisallowedByMode.md +7 -0
  96. package/build/src/third_party/issue-descriptions/corsHeaderDisallowedByPreflightResponse.md +5 -0
  97. package/build/src/third_party/issue-descriptions/corsInvalidHeaderValues.md +7 -0
  98. package/build/src/third_party/issue-descriptions/corsLocalNetworkAccessPermissionDenied.md +19 -0
  99. package/build/src/third_party/issue-descriptions/corsMethodDisallowedByPreflightResponse.md +5 -0
  100. package/build/src/third_party/issue-descriptions/corsNoCorsRedirectModeNotFollow.md +5 -0
  101. package/build/src/third_party/issue-descriptions/corsOriginMismatch.md +6 -0
  102. package/build/src/third_party/issue-descriptions/corsPreflightResponseInvalid.md +5 -0
  103. package/build/src/third_party/issue-descriptions/corsRedirectContainsCredentials.md +5 -0
  104. package/build/src/third_party/issue-descriptions/corsWildcardOriginNotAllowed.md +9 -0
  105. package/build/src/third_party/issue-descriptions/cspEvalViolation.md +9 -0
  106. package/build/src/third_party/issue-descriptions/cspInlineViolation.md +10 -0
  107. package/build/src/third_party/issue-descriptions/cspTrustedTypesPolicyViolation.md +5 -0
  108. package/build/src/third_party/issue-descriptions/cspTrustedTypesSinkViolation.md +8 -0
  109. package/build/src/third_party/issue-descriptions/cspURLViolation.md +10 -0
  110. package/build/src/third_party/issue-descriptions/deprecation.md +3 -0
  111. package/build/src/third_party/issue-descriptions/emailVerificationRequestAccountsEmptyList.md +1 -0
  112. package/build/src/third_party/issue-descriptions/emailVerificationRequestAccountsHttpNotFound.md +1 -0
  113. package/build/src/third_party/issue-descriptions/emailVerificationRequestAccountsInvalidContentType.md +1 -0
  114. package/build/src/third_party/issue-descriptions/emailVerificationRequestAccountsInvalidResponse.md +1 -0
  115. package/build/src/third_party/issue-descriptions/emailVerificationRequestAccountsNoResponse.md +1 -0
  116. package/build/src/third_party/issue-descriptions/emailVerificationRequestDnsFetchFailed.md +1 -0
  117. package/build/src/third_party/issue-descriptions/emailVerificationRequestDnsInvalidRecord.md +1 -0
  118. package/build/src/third_party/issue-descriptions/emailVerificationRequestEmailVerificationWellKnownHttpNotFound.md +1 -0
  119. package/build/src/third_party/issue-descriptions/emailVerificationRequestEmailVerificationWellKnownInvalidContentType.md +1 -0
  120. package/build/src/third_party/issue-descriptions/emailVerificationRequestEmailVerificationWellKnownInvalidResponse.md +1 -0
  121. package/build/src/third_party/issue-descriptions/emailVerificationRequestEmailVerificationWellKnownNoResponse.md +1 -0
  122. package/build/src/third_party/issue-descriptions/emailVerificationRequestInvalidEmail.md +1 -0
  123. package/build/src/third_party/issue-descriptions/emailVerificationRequestJwksHttpNotFound.md +1 -0
  124. package/build/src/third_party/issue-descriptions/emailVerificationRequestJwksInvalidResponse.md +1 -0
  125. package/build/src/third_party/issue-descriptions/emailVerificationRequestKeyBindingSigningFailed.md +1 -0
  126. package/build/src/third_party/issue-descriptions/emailVerificationRequestRpOriginIsOpaque.md +1 -0
  127. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenHttpNotFound.md +1 -0
  128. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenInvalidContentType.md +1 -0
  129. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenInvalidResponse.md +1 -0
  130. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenInvalidSdJwt.md +1 -0
  131. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenMalformedSdJwt.md +1 -0
  132. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenNoResponse.md +1 -0
  133. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationKbInvalidAudience.md +1 -0
  134. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationKbInvalidIssuedAt.md +1 -0
  135. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationKbInvalidNonce.md +1 -0
  136. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationKbInvalidSdHash.md +1 -0
  137. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationKbInvalidTyp.md +1 -0
  138. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationKbMissingAud.md +1 -0
  139. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationKbMissingCnf.md +1 -0
  140. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationKbMissingIat.md +1 -0
  141. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationKbMissingNonce.md +1 -0
  142. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationKbMissingSdHash.md +1 -0
  143. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationKbSignatureFailed.md +1 -0
  144. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationSdJwtInvalidEmail.md +1 -0
  145. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationSdJwtInvalidEmailVerified.md +1 -0
  146. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationSdJwtInvalidHolderKey.md +1 -0
  147. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationSdJwtInvalidIssuedAt.md +1 -0
  148. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationSdJwtInvalidIssuer.md +1 -0
  149. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationSdJwtJwksMissingKeys.md +1 -0
  150. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationSdJwtMissingCnf.md +1 -0
  151. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationSdJwtMissingEmail.md +1 -0
  152. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationSdJwtMissingIat.md +1 -0
  153. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationSdJwtMissingIss.md +1 -0
  154. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationSdJwtSignatureFailed.md +1 -0
  155. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationSdJwtUnsupportedHeaderAlg.md +1 -0
  156. package/build/src/third_party/issue-descriptions/emailVerificationRequestUserLoggedOut.md +1 -0
  157. package/build/src/third_party/issue-descriptions/emailVerificationRequestWellKnownAccountsEndpointCrossOrigin.md +1 -0
  158. package/build/src/third_party/issue-descriptions/emailVerificationRequestWellKnownHttpNotFound.md +1 -0
  159. package/build/src/third_party/issue-descriptions/emailVerificationRequestWellKnownInvalidContentType.md +1 -0
  160. package/build/src/third_party/issue-descriptions/emailVerificationRequestWellKnownInvalidResponse.md +1 -0
  161. package/build/src/third_party/issue-descriptions/emailVerificationRequestWellKnownIssuanceEndpointCrossOrigin.md +1 -0
  162. package/build/src/third_party/issue-descriptions/emailVerificationRequestWellKnownListEmpty.md +1 -0
  163. package/build/src/third_party/issue-descriptions/emailVerificationRequestWellKnownMissingAccountsEndpoint.md +1 -0
  164. package/build/src/third_party/issue-descriptions/emailVerificationRequestWellKnownMissingIssuanceEndpoint.md +1 -0
  165. package/build/src/third_party/issue-descriptions/emailVerificationRequestWellKnownNoResponse.md +1 -0
  166. package/build/src/third_party/issue-descriptions/emailVerificationRequestWellKnownUnsupportedSigningAlgorithm.md +1 -0
  167. package/build/src/third_party/issue-descriptions/federatedAuthRequestAccountsBlockedByConnectionAllowlist.md +1 -0
  168. package/build/src/third_party/issue-descriptions/federatedAuthRequestAccountsHttpNotFound.md +1 -0
  169. package/build/src/third_party/issue-descriptions/federatedAuthRequestAccountsInvalidResponse.md +1 -0
  170. package/build/src/third_party/issue-descriptions/federatedAuthRequestAccountsNoResponse.md +1 -0
  171. package/build/src/third_party/issue-descriptions/federatedAuthRequestApprovalDeclined.md +1 -0
  172. package/build/src/third_party/issue-descriptions/federatedAuthRequestCanceled.md +1 -0
  173. package/build/src/third_party/issue-descriptions/federatedAuthRequestConfigBlockedByConnectionAllowlist.md +1 -0
  174. package/build/src/third_party/issue-descriptions/federatedAuthRequestErrorFetchingSignin.md +1 -0
  175. package/build/src/third_party/issue-descriptions/federatedAuthRequestErrorIdToken.md +1 -0
  176. package/build/src/third_party/issue-descriptions/federatedAuthRequestIdTokenBlockedByConnectionAllowlist.md +1 -0
  177. package/build/src/third_party/issue-descriptions/federatedAuthRequestIdTokenHttpNotFound.md +1 -0
  178. package/build/src/third_party/issue-descriptions/federatedAuthRequestIdTokenInvalidRequest.md +1 -0
  179. package/build/src/third_party/issue-descriptions/federatedAuthRequestIdTokenInvalidResponse.md +1 -0
  180. package/build/src/third_party/issue-descriptions/federatedAuthRequestIdTokenNoResponse.md +1 -0
  181. package/build/src/third_party/issue-descriptions/federatedAuthRequestInvalidSigninResponse.md +1 -0
  182. package/build/src/third_party/issue-descriptions/federatedAuthRequestManifestHttpNotFound.md +1 -0
  183. package/build/src/third_party/issue-descriptions/federatedAuthRequestManifestInvalidResponse.md +1 -0
  184. package/build/src/third_party/issue-descriptions/federatedAuthRequestManifestNoResponse.md +1 -0
  185. package/build/src/third_party/issue-descriptions/federatedAuthRequestTooManyRequests.md +1 -0
  186. package/build/src/third_party/issue-descriptions/federatedAuthRequestWellKnownBlockedByConnectionAllowlist.md +1 -0
  187. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestInvalidAccountsResponse.md +1 -0
  188. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestInvalidConfigOrWellKnown.md +1 -0
  189. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestNoAccountSharingPermission.md +1 -0
  190. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestNoApiPermission.md +1 -0
  191. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestNoReturningUserFromFetchedAccounts.md +1 -0
  192. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestNotIframe.md +1 -0
  193. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestNotPotentiallyTrustworthy.md +1 -0
  194. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestNotSameOrigin.md +1 -0
  195. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestNotSignedInWithIdp.md +1 -0
  196. package/build/src/third_party/issue-descriptions/fetchingPartitionedBlobURL.md +7 -0
  197. package/build/src/third_party/issue-descriptions/genericBackUINavigationWouldSkipAd.md +4 -0
  198. package/build/src/third_party/issue-descriptions/genericFormAriaLabelledByToNonExistingIdError.md +8 -0
  199. package/build/src/third_party/issue-descriptions/genericFormAutocompleteAttributeEmptyError.md +5 -0
  200. package/build/src/third_party/issue-descriptions/genericFormDuplicateIdForInputError.md +5 -0
  201. package/build/src/third_party/issue-descriptions/genericFormEmptyIdAndNameAttributesForInputError.md +5 -0
  202. package/build/src/third_party/issue-descriptions/genericFormInputAssignedAutocompleteValueToIdOrNameAttributeError.md +5 -0
  203. package/build/src/third_party/issue-descriptions/genericFormInputHasWrongButWellIntendedAutocompleteValueError.md +5 -0
  204. package/build/src/third_party/issue-descriptions/genericFormInputWithNoLabelError.md +5 -0
  205. package/build/src/third_party/issue-descriptions/genericFormLabelForMatchesNonExistingIdError.md +5 -0
  206. package/build/src/third_party/issue-descriptions/genericFormLabelForNameError.md +5 -0
  207. package/build/src/third_party/issue-descriptions/genericFormLabelHasNeitherForNorNestedInputError.md +5 -0
  208. package/build/src/third_party/issue-descriptions/genericFormModelContextMissingToolDescription.md +5 -0
  209. package/build/src/third_party/issue-descriptions/genericFormModelContextMissingToolName.md +5 -0
  210. package/build/src/third_party/issue-descriptions/genericFormModelContextParameterMissingName.md +5 -0
  211. package/build/src/third_party/issue-descriptions/genericFormModelContextParameterMissingTitleAndDescription.md +5 -0
  212. package/build/src/third_party/issue-descriptions/genericFormModelContextRequiredParameterMissingName.md +5 -0
  213. package/build/src/third_party/issue-descriptions/genericNavigationEntryMarkedSkippable.md +7 -0
  214. package/build/src/third_party/issue-descriptions/genericResponseWasBlockedByORB.md +4 -0
  215. package/build/src/third_party/issue-descriptions/heavyAd.md +10 -0
  216. package/build/src/third_party/issue-descriptions/lazyLoadImageZeroSize.md +7 -0
  217. package/build/src/third_party/issue-descriptions/mixedContent.md +5 -0
  218. package/build/src/third_party/issue-descriptions/navigatingPartitionedBlobURL.md +5 -0
  219. package/build/src/third_party/issue-descriptions/permissionElementActivationDisabled.md +7 -0
  220. package/build/src/third_party/issue-descriptions/permissionElementActivationDisabledWithOccluder.md +9 -0
  221. package/build/src/third_party/issue-descriptions/permissionElementActivationDisabledWithOccluderParent.md +9 -0
  222. package/build/src/third_party/issue-descriptions/permissionElementCspFrameAncestorsMissing.md +5 -0
  223. package/build/src/third_party/issue-descriptions/permissionElementFencedFrameDisallowed.md +5 -0
  224. package/build/src/third_party/issue-descriptions/permissionElementFontSizeTooLarge.md +5 -0
  225. package/build/src/third_party/issue-descriptions/permissionElementFontSizeTooSmall.md +5 -0
  226. package/build/src/third_party/issue-descriptions/permissionElementGeolocationDeprecated.md +5 -0
  227. package/build/src/third_party/issue-descriptions/permissionElementInsetBoxShadowUnsupported.md +5 -0
  228. package/build/src/third_party/issue-descriptions/permissionElementInvalidDisplayStyle.md +5 -0
  229. package/build/src/third_party/issue-descriptions/permissionElementInvalidSizeValue.md +5 -0
  230. package/build/src/third_party/issue-descriptions/permissionElementInvalidType.md +5 -0
  231. package/build/src/third_party/issue-descriptions/permissionElementInvalidTypeActivation.md +5 -0
  232. package/build/src/third_party/issue-descriptions/permissionElementLowContrast.md +5 -0
  233. package/build/src/third_party/issue-descriptions/permissionElementNonOpaqueColor.md +5 -0
  234. package/build/src/third_party/issue-descriptions/permissionElementPaddingBottomUnsupported.md +6 -0
  235. package/build/src/third_party/issue-descriptions/permissionElementPaddingRightUnsupported.md +6 -0
  236. package/build/src/third_party/issue-descriptions/permissionElementPermissionsPolicyBlocked.md +5 -0
  237. package/build/src/third_party/issue-descriptions/permissionElementRegistrationFailed.md +5 -0
  238. package/build/src/third_party/issue-descriptions/permissionElementRequestInProgress.md +5 -0
  239. package/build/src/third_party/issue-descriptions/permissionElementSecurityChecksFailed.md +5 -0
  240. package/build/src/third_party/issue-descriptions/permissionElementTypeNotSupported.md +5 -0
  241. package/build/src/third_party/issue-descriptions/permissionElementUntrustedEvent.md +7 -0
  242. package/build/src/third_party/issue-descriptions/placeholderDescriptionForInvisibleIssues.md +3 -0
  243. package/build/src/third_party/issue-descriptions/propertyRuleInvalidNameIssue.md +3 -0
  244. package/build/src/third_party/issue-descriptions/propertyRuleIssue.md +7 -0
  245. package/build/src/third_party/issue-descriptions/selectElementAccessibilityDisallowedOptGroupChild.md +7 -0
  246. package/build/src/third_party/issue-descriptions/selectElementAccessibilityDisallowedSelectChild.md +7 -0
  247. package/build/src/third_party/issue-descriptions/selectElementAccessibilityInteractiveContentAttributesSelectDescendant.md +3 -0
  248. package/build/src/third_party/issue-descriptions/selectElementAccessibilityInteractiveContentLegendChild.md +3 -0
  249. package/build/src/third_party/issue-descriptions/selectElementAccessibilityInteractiveContentOptionChild.md +3 -0
  250. package/build/src/third_party/issue-descriptions/selectElementAccessibilityNonPhrasingContentOptionChild.md +3 -0
  251. package/build/src/third_party/issue-descriptions/selectivePermissionsIntervention.md +7 -0
  252. package/build/src/third_party/issue-descriptions/sharedArrayBuffer.md +7 -0
  253. package/build/src/third_party/issue-descriptions/sharedDictionaryUseErrorCrossOriginNoCorsRequest.md +1 -0
  254. package/build/src/third_party/issue-descriptions/sharedDictionaryUseErrorDictionaryLoadFailure.md +3 -0
  255. package/build/src/third_party/issue-descriptions/sharedDictionaryUseErrorMatchingDictionaryNotUsed.md +3 -0
  256. package/build/src/third_party/issue-descriptions/sharedDictionaryUseErrorUnexpectedContentDictionaryHeader.md +1 -0
  257. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorCossOriginNoCorsRequest.md +1 -0
  258. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorDisallowedBySettings.md +1 -0
  259. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorExpiredResponse.md +3 -0
  260. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorFeatureDisabled.md +3 -0
  261. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorInsufficientResources.md +1 -0
  262. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorInvalidMatchField.md +1 -0
  263. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorInvalidStructuredHeader.md +1 -0
  264. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorInvalidTTLField.md +1 -0
  265. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorNavigationRequest.md +3 -0
  266. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorNoMatchField.md +1 -0
  267. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorNonIntegerTTLField.md +1 -0
  268. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorNonListMatchDestField.md +1 -0
  269. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorNonSecureContext.md +3 -0
  270. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorNonStringIdField.md +1 -0
  271. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorNonStringInMatchDestList.md +1 -0
  272. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorNonStringMatchField.md +1 -0
  273. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorNonTokenTypeField.md +1 -0
  274. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorRequestAborted.md +1 -0
  275. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorShuttingDown.md +1 -0
  276. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorTooLongIdField.md +3 -0
  277. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorUnsupportedType.md +3 -0
  278. package/build/src/third_party/issue-descriptions/sriInvalidSignatureHeader.md +14 -0
  279. package/build/src/third_party/issue-descriptions/sriInvalidSignatureInputHeader.md +15 -0
  280. package/build/src/third_party/issue-descriptions/sriMissingSignatureHeader.md +8 -0
  281. package/build/src/third_party/issue-descriptions/sriMissingSignatureInputHeader.md +7 -0
  282. package/build/src/third_party/issue-descriptions/sriSignatureHeaderValueIsIncorrectLength.md +11 -0
  283. package/build/src/third_party/issue-descriptions/sriSignatureHeaderValueIsNotByteSequence.md +14 -0
  284. package/build/src/third_party/issue-descriptions/sriSignatureHeaderValueIsParameterized.md +15 -0
  285. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderInvalidComponentName.md +8 -0
  286. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderInvalidComponentType.md +13 -0
  287. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderInvalidDerivedComponentParameter.md +4 -0
  288. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderInvalidHeaderComponentParameter.md +5 -0
  289. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderInvalidParameter.md +11 -0
  290. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderKeyIdLength.md +12 -0
  291. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderMissingLabel.md +6 -0
  292. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderMissingRequiredParameters.md +8 -0
  293. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderValueMissingComponents.md +11 -0
  294. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderValueNotInnerList.md +11 -0
  295. package/build/src/third_party/issue-descriptions/sriValidationFailedIntegrityMismatch.md +10 -0
  296. package/build/src/third_party/issue-descriptions/sriValidationFailedInvalidLength.md +5 -0
  297. package/build/src/third_party/issue-descriptions/sriValidationFailedSignatureExpired.md +6 -0
  298. package/build/src/third_party/issue-descriptions/sriValidationFailedSignatureMismatch.md +11 -0
  299. package/build/src/third_party/issue-descriptions/stylesheetLateImport.md +4 -0
  300. package/build/src/third_party/issue-descriptions/stylesheetRequestFailed.md +3 -0
  301. package/build/src/third_party/issue-descriptions/summaryElementAccessibilityInteractiveContentSummaryDescendant.md +3 -0
  302. package/build/src/third_party/issue-descriptions/unencodedDigestIncorrectDigestLength.md +12 -0
  303. package/build/src/third_party/issue-descriptions/unencodedDigestIncorrectDigestType.md +17 -0
  304. package/build/src/third_party/issue-descriptions/unencodedDigestMalformedDictionary.md +14 -0
  305. package/build/src/third_party/issue-descriptions/unencodedDigestUnknownAlgorithm.md +15 -0
  306. package/build/src/third_party/issue-descriptions/webInstallManifestMissingId.md +3 -0
  307. package/build/src/third_party/issue-descriptions/webInstallManifestMissingNameOrShortName.md +3 -0
  308. package/build/src/third_party/issue-descriptions/webInstallManifestParsingOrNetworkError.md +3 -0
  309. package/build/src/third_party/issue-descriptions/webInstallNoManifest.md +3 -0
  310. package/build/src/third_party/issue-descriptions/webInstallStartUrlInvalid.md +3 -0
  311. package/build/src/third_party/lighthouse-devtools-mcp-bundle.js +58435 -0
  312. package/build/src/tools/ToolDefinition.js +80 -0
  313. package/build/src/tools/categories.js +33 -0
  314. package/build/src/tools/comments.js +169 -0
  315. package/build/src/tools/console.js +104 -0
  316. package/build/src/tools/css.js +45 -0
  317. package/build/src/tools/emulation.js +84 -0
  318. package/build/src/tools/extensions.js +103 -0
  319. package/build/src/tools/input.js +652 -0
  320. package/build/src/tools/lighthouse.js +149 -0
  321. package/build/src/tools/memory.js +424 -0
  322. package/build/src/tools/network.js +128 -0
  323. package/build/src/tools/pages.js +363 -0
  324. package/build/src/tools/performance.js +212 -0
  325. package/build/src/tools/pwa.js +128 -0
  326. package/build/src/tools/screencast.js +119 -0
  327. package/build/src/tools/screenshot.js +277 -0
  328. package/build/src/tools/script.js +232 -0
  329. package/build/src/tools/slim/tools.js +96 -0
  330. package/build/src/tools/snapshot.js +63 -0
  331. package/build/src/tools/thirdPartyDeveloper.js +85 -0
  332. package/build/src/tools/tools.js +55 -0
  333. package/build/src/tools/webmcp.js +66 -0
  334. package/build/src/types.js +10 -0
  335. package/build/src/utils/WaitForHelper.js +316 -0
  336. package/build/src/utils/bytes.js +105 -0
  337. package/build/src/utils/check-for-updates.js +75 -0
  338. package/build/src/utils/files.js +57 -0
  339. package/build/src/utils/id.js +16 -0
  340. package/build/src/utils/keyboard.js +297 -0
  341. package/build/src/utils/logger.js +52 -0
  342. package/build/src/utils/pagination.js +50 -0
  343. package/build/src/utils/polyfill.js +11 -0
  344. package/build/src/utils/url.js +116 -0
  345. package/build/src/version.js +10 -0
  346. package/package.json +41 -4
  347. package/skills/a11y-debugging/SKILL.md +91 -0
  348. package/skills/a11y-debugging/references/a11y-snippets.md +92 -0
  349. package/skills/chrome-devtools/SKILL.md +74 -0
  350. package/skills/chrome-devtools-cli/SKILL.md +194 -0
  351. package/skills/chrome-devtools-cli/references/installation.md +14 -0
  352. package/skills/cookie-debugging/SKILL.md +149 -0
  353. package/skills/debug-optimize-lcp/SKILL.md +121 -0
  354. package/skills/debug-optimize-lcp/references/elements-and-size.md +27 -0
  355. package/skills/debug-optimize-lcp/references/lcp-breakdown.md +23 -0
  356. package/skills/debug-optimize-lcp/references/lcp-snippets.md +79 -0
  357. package/skills/debug-optimize-lcp/references/optimization-strategies.md +38 -0
  358. package/skills/memory-leak-debugging/SKILL.md +58 -0
  359. package/skills/memory-leak-debugging/references/common-leaks.md +33 -0
  360. package/skills/troubleshooting/SKILL.md +99 -0
@@ -0,0 +1,128 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { zod } from '../third_party/index.js';
7
+ import { ToolCategory } from './categories.js';
8
+ import { definePageTool } from './ToolDefinition.js';
9
+ const FILTERABLE_RESOURCE_TYPES = [
10
+ 'document',
11
+ 'stylesheet',
12
+ 'image',
13
+ 'media',
14
+ 'font',
15
+ 'script',
16
+ 'texttrack',
17
+ 'xhr',
18
+ 'fetch',
19
+ 'prefetch',
20
+ 'eventsource',
21
+ 'websocket',
22
+ 'manifest',
23
+ 'signedexchange',
24
+ 'ping',
25
+ 'cspviolationreport',
26
+ 'preflight',
27
+ 'fedcm',
28
+ 'other',
29
+ ];
30
+ export const listNetworkRequests = definePageTool(() => ({
31
+ name: 'list_network_requests',
32
+ description: `Lists the most recent requests for the target page since the last navigation.`,
33
+ annotations: {
34
+ category: ToolCategory.NETWORK,
35
+ readOnlyHint: true,
36
+ },
37
+ schema: {
38
+ pageSize: zod
39
+ .number()
40
+ .int()
41
+ .positive()
42
+ .optional()
43
+ .describe('Maximum number of requests to return. When omitted, returns all requests.'),
44
+ pageIdx: zod
45
+ .number()
46
+ .int()
47
+ .min(0)
48
+ .optional()
49
+ .describe('Page number to return (0-based). When omitted, returns the first page.'),
50
+ resourceTypes: zod
51
+ .array(zod.enum(FILTERABLE_RESOURCE_TYPES))
52
+ .optional()
53
+ .describe('Filter requests to only return requests of the specified resource types. When omitted or empty, returns all requests.'),
54
+ includePreservedRequests: zod
55
+ .boolean()
56
+ .default(false)
57
+ .optional()
58
+ .describe('Set to true to return the preserved requests over the last 3 navigations.'),
59
+ },
60
+ blockedByDialog: false,
61
+ verifyFilesSchema: {},
62
+ handler: async (request, response) => {
63
+ const data = await request.page.getDevToolsData();
64
+ response.attachDevToolsData(data);
65
+ const reqid = data?.cdpRequestId
66
+ ? request.page.resolveCdpRequestId(data.cdpRequestId)
67
+ : undefined;
68
+ response.setIncludeNetworkRequests(true, {
69
+ pageSize: request.params.pageSize,
70
+ pageIdx: request.params.pageIdx,
71
+ resourceTypes: request.params.resourceTypes,
72
+ includePreservedRequests: request.params.includePreservedRequests,
73
+ networkRequestIdInDevToolsUI: reqid,
74
+ });
75
+ },
76
+ }));
77
+ export const getNetworkRequest = definePageTool(() => ({
78
+ name: 'get_network_request',
79
+ description: `Gets a network request by an optional reqid, if omitted returns the currently selected request in the DevTools Network panel. Useful for inspecting request headers (including 'Cookie') and response headers (including 'Set-Cookie' and directives).`,
80
+ annotations: {
81
+ category: ToolCategory.NETWORK,
82
+ readOnlyHint: false,
83
+ },
84
+ schema: {
85
+ reqid: zod
86
+ .number()
87
+ .optional()
88
+ .describe('The reqid of the network request. If omitted returns the currently selected request in the DevTools Network panel.'),
89
+ requestFilePath: zod
90
+ .string()
91
+ .optional()
92
+ .describe('The absolute or relative path to a .network-request file to save the request body to. If omitted, the body is returned inline.'),
93
+ responseFilePath: zod
94
+ .string()
95
+ .optional()
96
+ .describe('The absolute or relative path to a .network-response file to save the response body to. If omitted, the body is returned inline.'),
97
+ },
98
+ blockedByDialog: true,
99
+ verifyFilesSchema: {
100
+ requestFilePath: true,
101
+ responseFilePath: true,
102
+ },
103
+ handler: async (request, response) => {
104
+ if (request.params.reqid) {
105
+ response.attachNetworkRequest(request.params.reqid, {
106
+ requestFilePath: request.params.requestFilePath,
107
+ responseFilePath: request.params.responseFilePath,
108
+ });
109
+ }
110
+ else {
111
+ const data = await request.page.getDevToolsData();
112
+ response.attachDevToolsData(data);
113
+ const reqid = data?.cdpRequestId
114
+ ? request.page.resolveCdpRequestId(data.cdpRequestId)
115
+ : undefined;
116
+ if (reqid) {
117
+ response.attachNetworkRequest(reqid, {
118
+ requestFilePath: request.params.requestFilePath,
119
+ responseFilePath: request.params.responseFilePath,
120
+ });
121
+ }
122
+ else {
123
+ response.appendResponseLine(`Nothing is currently selected in the DevTools Network panel.`);
124
+ }
125
+ }
126
+ },
127
+ }));
128
+ //# sourceMappingURL=network.js.map
@@ -0,0 +1,363 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { zod } from '../third_party/index.js';
7
+ import { logger } from '../utils/logger.js';
8
+ import { validateUrl } from '../utils/url.js';
9
+ import { ToolCategory } from './categories.js';
10
+ import { CLOSE_PAGE_ERROR, definePageTool, defineTool, timeoutSchema, } from './ToolDefinition.js';
11
+ export const listPages = defineTool((args) => {
12
+ return {
13
+ name: 'list_pages',
14
+ description: `Get a list of pages${args?.categoryExtensions ? ' including extension service workers' : ''} open in the browser.`,
15
+ annotations: {
16
+ category: ToolCategory.NAVIGATION,
17
+ readOnlyHint: true,
18
+ },
19
+ schema: {},
20
+ blockedByDialog: false,
21
+ verifyFilesSchema: {},
22
+ handler: async (_request, response) => {
23
+ response.setIncludePages(true);
24
+ response.setListThirdPartyDeveloperTools();
25
+ response.setListWebMcpTools();
26
+ },
27
+ };
28
+ });
29
+ export const selectPage = defineTool((args) => ({
30
+ name: 'select_page',
31
+ description: `Select a page as a context for future tool calls.`,
32
+ annotations: {
33
+ category: ToolCategory.NAVIGATION,
34
+ readOnlyHint: true,
35
+ },
36
+ schema: {
37
+ pageId: zod
38
+ .number()
39
+ .describe(`The ID of the page to select. Call ${listPages(args).name} to get available pages.`),
40
+ bringToFront: zod
41
+ .boolean()
42
+ .optional()
43
+ .describe('Whether to focus the page and bring it to the top.'),
44
+ },
45
+ blockedByDialog: false,
46
+ verifyFilesSchema: {},
47
+ handler: async (request, response, context) => {
48
+ const page = context.getPageById(request.params.pageId);
49
+ context.selectPage(page);
50
+ response.setIncludePages(true);
51
+ response.setListThirdPartyDeveloperTools();
52
+ response.setListWebMcpTools();
53
+ if (request.params.bringToFront) {
54
+ await page.pptrPage.bringToFront();
55
+ }
56
+ },
57
+ }));
58
+ export const closePage = defineTool(() => ({
59
+ name: 'close_page',
60
+ description: `Closes the page by its index. The last open page cannot be closed.`,
61
+ annotations: {
62
+ category: ToolCategory.NAVIGATION,
63
+ readOnlyHint: false,
64
+ },
65
+ schema: {
66
+ pageId: zod
67
+ .number()
68
+ .describe('The ID of the page to close. Call list_pages to list pages.'),
69
+ },
70
+ blockedByDialog: false,
71
+ verifyFilesSchema: {},
72
+ handler: async (request, response, context) => {
73
+ try {
74
+ await context.closePage(request.params.pageId);
75
+ }
76
+ catch (err) {
77
+ if (err.message === CLOSE_PAGE_ERROR) {
78
+ response.appendResponseLine(err.message);
79
+ }
80
+ else {
81
+ throw err;
82
+ }
83
+ }
84
+ response.setIncludePages(true);
85
+ response.setListThirdPartyDeveloperTools();
86
+ },
87
+ }));
88
+ export const newPage = defineTool((args) => {
89
+ return {
90
+ name: 'new_page',
91
+ description: `Open a new tab and load a URL. Use project URL if not specified otherwise.`,
92
+ annotations: {
93
+ category: ToolCategory.NAVIGATION,
94
+ readOnlyHint: false,
95
+ },
96
+ schema: {
97
+ url: zod.string().describe('URL to load in a new page.'),
98
+ background: zod
99
+ .boolean()
100
+ .optional()
101
+ .describe('Whether to open the page in the background without bringing it to the front. Default is false (foreground).'),
102
+ isolatedContext: zod
103
+ .string()
104
+ .optional()
105
+ .describe('If specified, the page is created in an isolated browser context with the given name. ' +
106
+ 'Pages in the same browser context share cookies and storage. ' +
107
+ 'Pages in different browser contexts are fully isolated (useful for clean-slate testing of cookies and authentication).'),
108
+ ...timeoutSchema,
109
+ },
110
+ blockedByDialog: false,
111
+ verifyFilesSchema: {},
112
+ handler: async (request, response, context) => {
113
+ validateUrl(request.params.url, {
114
+ javascriptEvaluation: args?.javascriptEvaluation,
115
+ categoryExtensions: args?.categoryExtensions,
116
+ });
117
+ const page = await context.newPage(request.params.background, request.params.isolatedContext);
118
+ await page.waitForEventsAfterAction(async () => {
119
+ await page.pptrPage.goto(request.params.url, {
120
+ timeout: request.params.timeout,
121
+ });
122
+ }, { timeout: request.params.timeout });
123
+ response.setIncludePages(true);
124
+ response.setListThirdPartyDeveloperTools();
125
+ },
126
+ };
127
+ });
128
+ export const navigatePage = definePageTool((args) => {
129
+ return {
130
+ name: 'navigate_page',
131
+ description: `Go to a URL, or back, forward, or reload. Use project URL if not specified otherwise.`,
132
+ annotations: {
133
+ category: ToolCategory.NAVIGATION,
134
+ readOnlyHint: false,
135
+ },
136
+ schema: {
137
+ type: zod
138
+ .enum(['url', 'back', 'forward', 'reload'])
139
+ .optional()
140
+ .describe('Navigate the page by URL, back or forward in history, or reload.'),
141
+ url: zod.string().optional().describe('Target URL (only type=url)'),
142
+ ignoreCache: zod
143
+ .boolean()
144
+ .optional()
145
+ .describe('Whether to ignore cache on reload.'),
146
+ handleBeforeUnload: zod
147
+ .enum(['accept', 'dismiss'])
148
+ .optional()
149
+ .describe('Whether to auto accept or beforeunload dialogs triggered by this navigation. Default is accept.'),
150
+ ...(args?.javascriptEvaluation !== false
151
+ ? {
152
+ initScript: zod
153
+ .string()
154
+ .optional()
155
+ .describe('A JavaScript script to be executed on each new document before any other scripts for the next navigation.'),
156
+ }
157
+ : {}),
158
+ ...timeoutSchema,
159
+ },
160
+ blockedByDialog: false,
161
+ verifyFilesSchema: {},
162
+ handler: async (request, response) => {
163
+ const page = request.page;
164
+ const options = {
165
+ timeout: request.params.timeout,
166
+ };
167
+ if (!request.params.type && !request.params.url) {
168
+ throw new Error('Either URL or a type is required.');
169
+ }
170
+ if (!request.params.type) {
171
+ request.params.type = 'url';
172
+ }
173
+ if (request.params.url) {
174
+ validateUrl(request.params.url, {
175
+ javascriptEvaluation: args?.javascriptEvaluation,
176
+ categoryExtensions: args?.categoryExtensions,
177
+ });
178
+ }
179
+ let initScriptId;
180
+ if (request.params.initScript) {
181
+ const { identifier } = await page.pptrPage.evaluateOnNewDocument(request.params.initScript);
182
+ initScriptId = identifier;
183
+ }
184
+ try {
185
+ const action = request.params.handleBeforeUnload ?? 'accept';
186
+ const result = await page.waitForEventsAfterAction(async () => {
187
+ switch (request.params.type) {
188
+ case 'url':
189
+ if (!request.params.url) {
190
+ throw new Error('A URL is required for navigation of type=url.');
191
+ }
192
+ try {
193
+ await page.pptrPage.goto(request.params.url, options);
194
+ response.appendResponseLine(`Successfully navigated to ${request.params.url}.`);
195
+ }
196
+ catch (error) {
197
+ response.appendResponseLine(`Unable to navigate in the selected page: ${error.message}.`);
198
+ }
199
+ break;
200
+ case 'back':
201
+ try {
202
+ await page.pptrPage.goBack(options);
203
+ response.appendResponseLine(`Successfully navigated back to ${page.pptrPage.url()}.`);
204
+ }
205
+ catch (error) {
206
+ response.appendResponseLine(`Unable to navigate back in the selected page: ${error.message}.`);
207
+ }
208
+ break;
209
+ case 'forward':
210
+ try {
211
+ await page.pptrPage.goForward(options);
212
+ response.appendResponseLine(`Successfully navigated forward to ${page.pptrPage.url()}.`);
213
+ }
214
+ catch (error) {
215
+ response.appendResponseLine(`Unable to navigate forward in the selected page: ${error.message}.`);
216
+ }
217
+ break;
218
+ case 'reload':
219
+ try {
220
+ await page.pptrPage.reload({
221
+ ...options,
222
+ ignoreCache: request.params.ignoreCache,
223
+ });
224
+ response.appendResponseLine(`Successfully reloaded the page.`);
225
+ }
226
+ catch (error) {
227
+ response.appendResponseLine(`Unable to reload the selected page: ${error.message}.`);
228
+ }
229
+ break;
230
+ }
231
+ }, {
232
+ timeout: request.params.timeout,
233
+ handleDialog: { beforeunload: action },
234
+ });
235
+ if (result.dialogHandled) {
236
+ response.appendResponseLine(`${action === 'dismiss' ? 'Dismissed' : 'Accepted'} a beforeunload dialog.`);
237
+ page.clearDialog();
238
+ }
239
+ }
240
+ finally {
241
+ if (initScriptId) {
242
+ await page.pptrPage
243
+ .removeScriptToEvaluateOnNewDocument(initScriptId)
244
+ .catch(error => {
245
+ logger?.(`Failed to remove init script`, error);
246
+ });
247
+ }
248
+ }
249
+ response.setIncludePages(true);
250
+ response.setListThirdPartyDeveloperTools();
251
+ response.setListWebMcpTools();
252
+ },
253
+ };
254
+ });
255
+ export const resizePage = definePageTool(() => ({
256
+ name: 'resize_page',
257
+ description: `Resizes the page's window so that the page has specified dimension`,
258
+ annotations: {
259
+ category: ToolCategory.EMULATION,
260
+ readOnlyHint: false,
261
+ },
262
+ schema: {
263
+ width: zod.number().describe('Page width'),
264
+ height: zod.number().describe('Page height'),
265
+ },
266
+ blockedByDialog: false,
267
+ verifyFilesSchema: {},
268
+ handler: async (request, response) => {
269
+ const page = request.page;
270
+ try {
271
+ const browser = page.pptrPage.browser();
272
+ const windowId = await page.pptrPage.windowId();
273
+ const bounds = await browser.getWindowBounds(windowId);
274
+ if (bounds.windowState === 'fullscreen') {
275
+ // Have to call this twice on Ubuntu when the window is in fullscreen mode.
276
+ await browser.setWindowBounds(windowId, { windowState: 'normal' });
277
+ await browser.setWindowBounds(windowId, { windowState: 'normal' });
278
+ }
279
+ else if (bounds.windowState !== 'normal') {
280
+ await browser.setWindowBounds(windowId, { windowState: 'normal' });
281
+ }
282
+ }
283
+ catch {
284
+ // Window APIs are not supported on all platforms
285
+ }
286
+ await page.pptrPage.resize({
287
+ contentWidth: request.params.width,
288
+ contentHeight: request.params.height,
289
+ });
290
+ response.setIncludePages(true);
291
+ },
292
+ }));
293
+ export const handleDialog = definePageTool(() => ({
294
+ name: 'handle_dialog',
295
+ description: `If a browser dialog was opened, use this command to handle it`,
296
+ annotations: {
297
+ category: ToolCategory.INPUT,
298
+ readOnlyHint: false,
299
+ },
300
+ schema: {
301
+ action: zod
302
+ .enum(['accept', 'dismiss'])
303
+ .describe('Whether to dismiss or accept the dialog'),
304
+ promptText: zod
305
+ .string()
306
+ .optional()
307
+ .describe('Optional prompt text to enter into the dialog.'),
308
+ },
309
+ blockedByDialog: false,
310
+ verifyFilesSchema: {},
311
+ handler: async (request, response) => {
312
+ const page = request.page;
313
+ const dialog = page.getDialog();
314
+ if (!dialog) {
315
+ throw new Error('No open dialog found');
316
+ }
317
+ switch (request.params.action) {
318
+ case 'accept': {
319
+ try {
320
+ await dialog.accept(request.params.promptText);
321
+ }
322
+ catch (err) {
323
+ // Likely already handled by the user outside of MCP.
324
+ logger?.(err);
325
+ }
326
+ response.appendResponseLine('Successfully accepted the dialog');
327
+ break;
328
+ }
329
+ case 'dismiss': {
330
+ try {
331
+ await dialog.dismiss();
332
+ }
333
+ catch (err) {
334
+ // Likely already handled.
335
+ logger?.(err);
336
+ }
337
+ response.appendResponseLine('Successfully dismissed the dialog');
338
+ break;
339
+ }
340
+ }
341
+ page.clearDialog();
342
+ response.setIncludePages(true);
343
+ },
344
+ }));
345
+ export const getTabId = definePageTool(() => ({
346
+ name: 'get_tab_id',
347
+ description: `Get the tab ID of the page`,
348
+ annotations: {
349
+ category: ToolCategory.NAVIGATION,
350
+ readOnlyHint: true,
351
+ conditions: ['experimentalInteropTools'],
352
+ },
353
+ schema: {},
354
+ blockedByDialog: false,
355
+ verifyFilesSchema: {},
356
+ handler: async (request, response) => {
357
+ const page = request.page;
358
+ const tabId = page.pptrPage._tabId;
359
+ response.setTabId(tabId);
360
+ response.appendResponseLine(`Tab ID: ${tabId}`);
361
+ },
362
+ }));
363
+ //# sourceMappingURL=pages.js.map