opera-devtools-mcp 0.2.4 → 0.3.0

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 (330) hide show
  1. package/README.md +104 -7
  2. package/build/src/McpContext.js +365 -365
  3. package/build/src/McpPage.js +475 -48
  4. package/build/src/McpResponse.js +462 -288
  5. package/build/src/SlimMcpResponse.js +1 -1
  6. package/build/src/TextSnapshot.js +101 -22
  7. package/build/src/ToolHandler.js +142 -20
  8. package/build/src/bin/check-latest-version.js +27 -1
  9. package/build/src/bin/chrome-devtools-cli-options.js +573 -10
  10. package/build/src/bin/chrome-devtools-mcp-cli-options.js +119 -32
  11. package/build/src/bin/chrome-devtools-mcp-main.js +50 -7
  12. package/build/src/bin/chrome-devtools-mcp.js +7 -4
  13. package/build/src/bin/chrome-devtools.js +57 -14
  14. package/build/src/bin/opera-devtools-cli-options.js +3 -829
  15. package/build/src/bin/opera-devtools-mcp-cli-options.js +3 -348
  16. package/build/src/bin/opera-devtools-mcp-main.js +3 -37
  17. package/build/src/bin/opera-devtools-mcp.js +4 -19
  18. package/build/src/bin/opera-devtools.js +4 -185
  19. package/build/src/browser.js +45 -5
  20. package/build/src/{PageCollector.js → collectors/PageCollector.js} +64 -133
  21. package/build/src/collectors/ServiceWorkerCollector.js +171 -0
  22. package/build/src/daemon/client.js +75 -17
  23. package/build/src/daemon/daemon.js +92 -30
  24. package/build/src/daemon/utils.js +24 -8
  25. package/build/src/{DevtoolsUtils.js → devtools/DevtoolsUtils.js} +94 -88
  26. package/build/src/devtools/McpHostBindingAdapter.js +165 -0
  27. package/build/src/{issue-descriptions.js → devtools/issueDescriptions.js} +8 -6
  28. package/build/src/formatters/ConsoleFormatter.js +44 -11
  29. package/build/src/formatters/HeapSnapshotFormatter.js +140 -9
  30. package/build/src/formatters/IssueFormatter.js +7 -7
  31. package/build/src/formatters/NetworkFormatter.js +10 -8
  32. package/build/src/index.js +101 -232
  33. package/build/src/opera/branding.js +34 -0
  34. package/build/src/opera/browserFlags.js +85 -0
  35. package/build/src/opera/browserLaunch.js +52 -0
  36. package/build/src/opera/policy.js +50 -0
  37. package/build/src/opera/serviceWorkerRetry.js +37 -0
  38. package/build/src/opera/toolHandlerHooks.js +39 -0
  39. package/build/src/{tools → opera/tools}/opera.js +9 -21
  40. package/build/src/processors/HeapSnapshotManager.js +258 -0
  41. package/build/src/{trace-processing/parse.js → processors/PerformanceTrace.js} +9 -9
  42. package/build/src/telemetry/ClearcutLogger.js +12 -119
  43. package/build/src/telemetry/WatchdogClient.js +5 -5
  44. package/build/src/telemetry/errors.js +1 -1
  45. package/build/src/telemetry/flagUtils.js +6 -6
  46. package/build/src/telemetry/{toolMetricsUtils.js → metricsRegistry.js} +4 -11
  47. package/build/src/telemetry/persistence.js +3 -3
  48. package/build/src/telemetry/transformation.js +184 -0
  49. package/build/src/telemetry/watchdog/ClearcutSender.js +11 -11
  50. package/build/src/telemetry/watchdog/main.js +6 -6
  51. package/build/src/third_party/THIRD_PARTY_NOTICES +232 -1061
  52. package/build/src/third_party/bundled-packages.json +6 -8
  53. package/build/src/third_party/devtools-formatter-worker.js +63 -22
  54. package/build/src/third_party/devtools-heap-snapshot-worker.js +809 -182
  55. package/build/src/third_party/index.js +69558 -74691
  56. package/build/src/third_party/issue-descriptions/CoepCorpNotSameOrigin.md +2 -2
  57. package/build/src/third_party/issue-descriptions/CoepCorpNotSameOriginAfterDefaultedToSameOriginByCoep.md +3 -3
  58. package/build/src/third_party/issue-descriptions/CoepCorpNotSameSite.md +2 -2
  59. package/build/src/third_party/issue-descriptions/CoepFrameResourceNeedsCoepHeader.md +1 -1
  60. package/build/src/third_party/issue-descriptions/CompatibilityModeQuirks.md +1 -1
  61. package/build/src/third_party/issue-descriptions/CookieAttributeValueExceedsMaxSize.md +2 -2
  62. package/build/src/third_party/issue-descriptions/LowTextContrast.md +1 -1
  63. package/build/src/third_party/issue-descriptions/SameSiteNoneInsecureErrorRead.md +1 -1
  64. package/build/src/third_party/issue-descriptions/SameSiteNoneInsecureErrorSet.md +1 -1
  65. package/build/src/third_party/issue-descriptions/SameSiteNoneInsecureWarnRead.md +1 -1
  66. package/build/src/third_party/issue-descriptions/SameSiteNoneInsecureWarnSet.md +1 -1
  67. package/build/src/third_party/issue-descriptions/SameSiteUnspecifiedLaxAllowUnsafeRead.md +3 -3
  68. package/build/src/third_party/issue-descriptions/SameSiteUnspecifiedLaxAllowUnsafeSet.md +3 -3
  69. package/build/src/third_party/issue-descriptions/bounceTrackingMitigations.md +1 -1
  70. package/build/src/third_party/issue-descriptions/connectionAllowlistEmbeddingRequirementNotSatisfied.md +26 -0
  71. package/build/src/third_party/issue-descriptions/connectionAllowlistIFrameAttributeLoosensEmbeddingRequirement.md +19 -0
  72. package/build/src/third_party/issue-descriptions/connectionAllowlistInvalidAllowConnectionAllowlistFrom.md +21 -0
  73. package/build/src/third_party/issue-descriptions/connectionAllowlistInvalidAllowlistItemType.md +2 -2
  74. package/build/src/third_party/issue-descriptions/connectionAllowlistInvalidHeader.md +2 -2
  75. package/build/src/third_party/issue-descriptions/connectionAllowlistInvalidUrlPattern.md +3 -3
  76. package/build/src/third_party/issue-descriptions/connectionAllowlistItemNotInnerList.md +2 -2
  77. package/build/src/third_party/issue-descriptions/connectionAllowlistMoreThanOneList.md +2 -2
  78. package/build/src/third_party/issue-descriptions/connectionAllowlistReportingEndpointNotToken.md +1 -1
  79. package/build/src/third_party/issue-descriptions/cookieCrossSiteRedirectDowngrade.md +3 -3
  80. package/build/src/third_party/issue-descriptions/cookieExcludeBlockedWithinRelatedWebsiteSet.md +1 -1
  81. package/build/src/third_party/issue-descriptions/cookieExcludePortMismatch.md +1 -1
  82. package/build/src/third_party/issue-descriptions/cookieExcludeSchemeMismatch.md +1 -1
  83. package/build/src/third_party/issue-descriptions/cookieExcludeThirdPartyPhaseoutSet.md +1 -1
  84. package/build/src/third_party/issue-descriptions/cookieWarnThirdPartyPhaseoutRead.md +1 -1
  85. package/build/src/third_party/issue-descriptions/corsAllowCredentialsRequired.md +1 -1
  86. package/build/src/third_party/issue-descriptions/corsDisabledScheme.md +2 -2
  87. package/build/src/third_party/issue-descriptions/corsDisallowedByMode.md +2 -2
  88. package/build/src/third_party/issue-descriptions/corsHeaderDisallowedByPreflightResponse.md +1 -1
  89. package/build/src/third_party/issue-descriptions/corsInvalidHeaderValues.md +3 -3
  90. package/build/src/third_party/issue-descriptions/corsLocalNetworkAccessPermissionDenied.md +1 -1
  91. package/build/src/third_party/issue-descriptions/corsMethodDisallowedByPreflightResponse.md +1 -1
  92. package/build/src/third_party/issue-descriptions/corsNoCorsRedirectModeNotFollow.md +1 -1
  93. package/build/src/third_party/issue-descriptions/corsOriginMismatch.md +3 -3
  94. package/build/src/third_party/issue-descriptions/corsPreflightResponseInvalid.md +2 -2
  95. package/build/src/third_party/issue-descriptions/corsRedirectContainsCredentials.md +3 -3
  96. package/build/src/third_party/issue-descriptions/corsWildcardOriginNotAllowed.md +4 -3
  97. package/build/src/third_party/issue-descriptions/cspEvalViolation.md +4 -4
  98. package/build/src/third_party/issue-descriptions/cspInlineViolation.md +2 -2
  99. package/build/src/third_party/issue-descriptions/cspTrustedTypesPolicyViolation.md +2 -2
  100. package/build/src/third_party/issue-descriptions/cspTrustedTypesSinkViolation.md +4 -4
  101. package/build/src/third_party/issue-descriptions/cspURLViolation.md +4 -4
  102. package/build/src/third_party/issue-descriptions/emailVerificationRequestAccountsEmptyList.md +1 -0
  103. package/build/src/third_party/issue-descriptions/emailVerificationRequestAccountsHttpNotFound.md +1 -0
  104. package/build/src/third_party/issue-descriptions/emailVerificationRequestAccountsInvalidContentType.md +1 -0
  105. package/build/src/third_party/issue-descriptions/emailVerificationRequestAccountsInvalidResponse.md +1 -0
  106. package/build/src/third_party/issue-descriptions/emailVerificationRequestAccountsNoResponse.md +1 -0
  107. package/build/src/third_party/issue-descriptions/emailVerificationRequestDnsFetchFailed.md +1 -0
  108. package/build/src/third_party/issue-descriptions/emailVerificationRequestDnsInvalidRecord.md +1 -0
  109. package/build/src/third_party/issue-descriptions/emailVerificationRequestEmailVerificationWellKnownHttpNotFound.md +1 -0
  110. package/build/src/third_party/issue-descriptions/emailVerificationRequestEmailVerificationWellKnownInvalidContentType.md +1 -0
  111. package/build/src/third_party/issue-descriptions/emailVerificationRequestEmailVerificationWellKnownInvalidResponse.md +1 -0
  112. package/build/src/third_party/issue-descriptions/emailVerificationRequestEmailVerificationWellKnownNoResponse.md +1 -0
  113. package/build/src/third_party/issue-descriptions/emailVerificationRequestInvalidEmail.md +1 -0
  114. package/build/src/third_party/issue-descriptions/emailVerificationRequestJwksHttpNotFound.md +1 -0
  115. package/build/src/third_party/issue-descriptions/emailVerificationRequestJwksInvalidResponse.md +1 -0
  116. package/build/src/third_party/issue-descriptions/emailVerificationRequestKeyBindingSigningFailed.md +1 -0
  117. package/build/src/third_party/issue-descriptions/emailVerificationRequestRpOriginIsOpaque.md +1 -0
  118. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenHttpNotFound.md +1 -0
  119. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenInvalidContentType.md +1 -0
  120. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenInvalidResponse.md +1 -0
  121. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenInvalidSdJwt.md +1 -0
  122. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenMalformedSdJwt.md +1 -0
  123. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenNoResponse.md +1 -0
  124. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationKbInvalidAudience.md +1 -0
  125. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationKbInvalidIssuedAt.md +1 -0
  126. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationKbInvalidNonce.md +1 -0
  127. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationKbInvalidSdHash.md +1 -0
  128. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationKbInvalidTyp.md +1 -0
  129. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationKbMissingAud.md +1 -0
  130. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationKbMissingCnf.md +1 -0
  131. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationKbMissingIat.md +1 -0
  132. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationKbMissingNonce.md +1 -0
  133. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationKbMissingSdHash.md +1 -0
  134. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationKbSignatureFailed.md +1 -0
  135. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationSdJwtInvalidEmail.md +1 -0
  136. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationSdJwtInvalidEmailVerified.md +1 -0
  137. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationSdJwtInvalidHolderKey.md +1 -0
  138. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationSdJwtInvalidIssuedAt.md +1 -0
  139. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationSdJwtInvalidIssuer.md +1 -0
  140. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationSdJwtJwksMissingKeys.md +1 -0
  141. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationSdJwtMissingCnf.md +1 -0
  142. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationSdJwtMissingEmail.md +1 -0
  143. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationSdJwtMissingIat.md +1 -0
  144. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationSdJwtMissingIss.md +1 -0
  145. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationSdJwtSignatureFailed.md +1 -0
  146. package/build/src/third_party/issue-descriptions/emailVerificationRequestTokenVerificationSdJwtUnsupportedHeaderAlg.md +1 -0
  147. package/build/src/third_party/issue-descriptions/emailVerificationRequestUserLoggedOut.md +1 -0
  148. package/build/src/third_party/issue-descriptions/emailVerificationRequestWellKnownAccountsEndpointCrossOrigin.md +1 -0
  149. package/build/src/third_party/issue-descriptions/emailVerificationRequestWellKnownHttpNotFound.md +1 -0
  150. package/build/src/third_party/issue-descriptions/emailVerificationRequestWellKnownInvalidContentType.md +1 -0
  151. package/build/src/third_party/issue-descriptions/emailVerificationRequestWellKnownInvalidResponse.md +1 -0
  152. package/build/src/third_party/issue-descriptions/emailVerificationRequestWellKnownIssuanceEndpointCrossOrigin.md +1 -0
  153. package/build/src/third_party/issue-descriptions/emailVerificationRequestWellKnownListEmpty.md +1 -0
  154. package/build/src/third_party/issue-descriptions/emailVerificationRequestWellKnownMissingAccountsEndpoint.md +1 -0
  155. package/build/src/third_party/issue-descriptions/emailVerificationRequestWellKnownMissingIssuanceEndpoint.md +1 -0
  156. package/build/src/third_party/issue-descriptions/emailVerificationRequestWellKnownNoResponse.md +1 -0
  157. package/build/src/third_party/issue-descriptions/emailVerificationRequestWellKnownUnsupportedSigningAlgorithm.md +1 -0
  158. package/build/src/third_party/issue-descriptions/federatedAuthRequestAccountsHttpNotFound.md +1 -1
  159. package/build/src/third_party/issue-descriptions/federatedAuthRequestAccountsInvalidResponse.md +1 -1
  160. package/build/src/third_party/issue-descriptions/federatedAuthRequestAccountsNoResponse.md +1 -1
  161. package/build/src/third_party/issue-descriptions/federatedAuthRequestApprovalDeclined.md +1 -1
  162. package/build/src/third_party/issue-descriptions/federatedAuthRequestCanceled.md +1 -1
  163. package/build/src/third_party/issue-descriptions/federatedAuthRequestErrorFetchingSignin.md +1 -1
  164. package/build/src/third_party/issue-descriptions/federatedAuthRequestErrorIdToken.md +1 -1
  165. package/build/src/third_party/issue-descriptions/federatedAuthRequestIdTokenHttpNotFound.md +1 -1
  166. package/build/src/third_party/issue-descriptions/federatedAuthRequestIdTokenInvalidRequest.md +1 -1
  167. package/build/src/third_party/issue-descriptions/federatedAuthRequestIdTokenInvalidResponse.md +1 -1
  168. package/build/src/third_party/issue-descriptions/federatedAuthRequestIdTokenNoResponse.md +1 -1
  169. package/build/src/third_party/issue-descriptions/federatedAuthRequestInvalidSigninResponse.md +1 -1
  170. package/build/src/third_party/issue-descriptions/federatedAuthRequestManifestHttpNotFound.md +1 -1
  171. package/build/src/third_party/issue-descriptions/federatedAuthRequestManifestInvalidResponse.md +1 -1
  172. package/build/src/third_party/issue-descriptions/federatedAuthRequestManifestNoResponse.md +1 -1
  173. package/build/src/third_party/issue-descriptions/federatedAuthRequestTooManyRequests.md +1 -1
  174. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestInvalidAccountsResponse.md +1 -1
  175. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestInvalidConfigOrWellKnown.md +1 -1
  176. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestNoAccountSharingPermission.md +1 -1
  177. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestNoApiPermission.md +1 -1
  178. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestNoReturningUserFromFetchedAccounts.md +1 -1
  179. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestNotIframe.md +1 -1
  180. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestNotPotentiallyTrustworthy.md +1 -1
  181. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestNotSameOrigin.md +1 -1
  182. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestNotSignedInWithIdp.md +1 -1
  183. package/build/src/third_party/issue-descriptions/fetchingPartitionedBlobURL.md +2 -2
  184. package/build/src/third_party/issue-descriptions/genericBackUINavigationWouldSkipAd.md +4 -0
  185. package/build/src/third_party/issue-descriptions/genericFormAriaLabelledByToNonExistingIdError.md +2 -2
  186. package/build/src/third_party/issue-descriptions/genericFormAutocompleteAttributeEmptyError.md +1 -1
  187. package/build/src/third_party/issue-descriptions/genericFormDuplicateIdForInputError.md +1 -1
  188. package/build/src/third_party/issue-descriptions/genericFormEmptyIdAndNameAttributesForInputError.md +2 -2
  189. package/build/src/third_party/issue-descriptions/genericFormInputAssignedAutocompleteValueToIdOrNameAttributeError.md +2 -2
  190. package/build/src/third_party/issue-descriptions/genericFormInputHasWrongButWellIntendedAutocompleteValueError.md +1 -1
  191. package/build/src/third_party/issue-descriptions/genericFormInputWithNoLabelError.md +1 -1
  192. package/build/src/third_party/issue-descriptions/genericFormLabelForMatchesNonExistingIdError.md +2 -2
  193. package/build/src/third_party/issue-descriptions/genericFormLabelForNameError.md +1 -1
  194. package/build/src/third_party/issue-descriptions/genericFormLabelHasNeitherForNorNestedInputError.md +1 -1
  195. package/build/src/third_party/issue-descriptions/genericFormModelContextMissingToolName.md +1 -1
  196. package/build/src/third_party/issue-descriptions/genericFormModelContextParameterMissingName.md +1 -1
  197. package/build/src/third_party/issue-descriptions/genericFormModelContextRequiredParameterMissingName.md +1 -1
  198. package/build/src/third_party/issue-descriptions/genericNavigationEntryMarkedSkippable.md +2 -2
  199. package/build/src/third_party/issue-descriptions/heavyAd.md +1 -1
  200. package/build/src/third_party/issue-descriptions/lazyLoadImageZeroSize.md +7 -0
  201. package/build/src/third_party/issue-descriptions/navigatingPartitionedBlobURL.md +3 -3
  202. package/build/src/third_party/issue-descriptions/permissionElementActivationDisabled.md +1 -1
  203. package/build/src/third_party/issue-descriptions/permissionElementActivationDisabledWithOccluder.md +1 -1
  204. package/build/src/third_party/issue-descriptions/permissionElementActivationDisabledWithOccluderParent.md +1 -1
  205. package/build/src/third_party/issue-descriptions/permissionElementFencedFrameDisallowed.md +2 -2
  206. package/build/src/third_party/issue-descriptions/permissionElementFontSizeTooLarge.md +2 -2
  207. package/build/src/third_party/issue-descriptions/permissionElementFontSizeTooSmall.md +2 -2
  208. package/build/src/third_party/issue-descriptions/permissionElementInsetBoxShadowUnsupported.md +1 -1
  209. package/build/src/third_party/issue-descriptions/permissionElementInvalidDisplayStyle.md +2 -2
  210. package/build/src/third_party/issue-descriptions/permissionElementInvalidSizeValue.md +2 -2
  211. package/build/src/third_party/issue-descriptions/permissionElementInvalidType.md +2 -2
  212. package/build/src/third_party/issue-descriptions/permissionElementInvalidTypeActivation.md +2 -2
  213. package/build/src/third_party/issue-descriptions/permissionElementNonOpaqueColor.md +1 -1
  214. package/build/src/third_party/issue-descriptions/permissionElementPaddingBottomUnsupported.md +2 -2
  215. package/build/src/third_party/issue-descriptions/permissionElementPaddingRightUnsupported.md +2 -2
  216. package/build/src/third_party/issue-descriptions/permissionElementRequestInProgress.md +2 -2
  217. package/build/src/third_party/issue-descriptions/permissionElementSecurityChecksFailed.md +1 -1
  218. package/build/src/third_party/issue-descriptions/permissionElementTypeNotSupported.md +2 -2
  219. package/build/src/third_party/issue-descriptions/permissionElementUntrustedEvent.md +1 -1
  220. package/build/src/third_party/issue-descriptions/placeholderDescriptionForInvisibleIssues.md +1 -1
  221. package/build/src/third_party/issue-descriptions/selectElementAccessibilityDisallowedOptGroupChild.md +1 -1
  222. package/build/src/third_party/issue-descriptions/selectElementAccessibilityDisallowedSelectChild.md +1 -1
  223. package/build/src/third_party/issue-descriptions/selectElementAccessibilityInteractiveContentAttributesSelectDescendant.md +1 -1
  224. package/build/src/third_party/issue-descriptions/selectElementAccessibilityInteractiveContentLegendChild.md +1 -1
  225. package/build/src/third_party/issue-descriptions/selectElementAccessibilityInteractiveContentOptionChild.md +1 -1
  226. package/build/src/third_party/issue-descriptions/selectElementAccessibilityNonPhrasingContentOptionChild.md +1 -1
  227. package/build/src/third_party/issue-descriptions/selectivePermissionsIntervention.md +3 -3
  228. package/build/src/third_party/issue-descriptions/sharedArrayBuffer.md +1 -1
  229. package/build/src/third_party/issue-descriptions/sharedDictionaryUseErrorCrossOriginNoCorsRequest.md +1 -1
  230. package/build/src/third_party/issue-descriptions/sharedDictionaryUseErrorMatchingDictionaryNotUsed.md +1 -1
  231. package/build/src/third_party/issue-descriptions/sharedDictionaryUseErrorUnexpectedContentDictionaryHeader.md +1 -1
  232. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorCossOriginNoCorsRequest.md +1 -1
  233. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorDisallowedBySettings.md +1 -1
  234. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorExpiredResponse.md +1 -1
  235. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorFeatureDisabled.md +2 -2
  236. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorInvalidStructuredHeader.md +1 -1
  237. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorNavigationRequest.md +2 -2
  238. package/build/src/third_party/issue-descriptions/sriInvalidSignatureHeader.md +4 -4
  239. package/build/src/third_party/issue-descriptions/sriInvalidSignatureInputHeader.md +4 -4
  240. package/build/src/third_party/issue-descriptions/sriMissingSignatureHeader.md +1 -1
  241. package/build/src/third_party/issue-descriptions/sriMissingSignatureInputHeader.md +2 -2
  242. package/build/src/third_party/issue-descriptions/sriSignatureHeaderValueIsIncorrectLength.md +2 -2
  243. package/build/src/third_party/issue-descriptions/sriSignatureHeaderValueIsNotByteSequence.md +4 -4
  244. package/build/src/third_party/issue-descriptions/sriSignatureHeaderValueIsParameterized.md +4 -4
  245. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderInvalidComponentName.md +1 -1
  246. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderInvalidComponentType.md +2 -2
  247. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderInvalidDerivedComponentParameter.md +1 -1
  248. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderInvalidHeaderComponentParameter.md +1 -1
  249. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderInvalidParameter.md +2 -2
  250. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderKeyIdLength.md +5 -5
  251. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderMissingLabel.md +3 -3
  252. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderMissingRequiredParameters.md +2 -2
  253. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderValueMissingComponents.md +2 -2
  254. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderValueNotInnerList.md +2 -2
  255. package/build/src/third_party/issue-descriptions/sriValidationFailedIntegrityMismatch.md +4 -4
  256. package/build/src/third_party/issue-descriptions/sriValidationFailedInvalidLength.md +3 -3
  257. package/build/src/third_party/issue-descriptions/sriValidationFailedSignatureExpired.md +2 -2
  258. package/build/src/third_party/issue-descriptions/sriValidationFailedSignatureMismatch.md +2 -2
  259. package/build/src/third_party/issue-descriptions/stylesheetLateImport.md +1 -1
  260. package/build/src/third_party/issue-descriptions/summaryElementAccessibilityInteractiveContentSummaryDescendant.md +1 -1
  261. package/build/src/third_party/issue-descriptions/unencodedDigestIncorrectDigestLength.md +2 -2
  262. package/build/src/third_party/issue-descriptions/unencodedDigestIncorrectDigestType.md +3 -3
  263. package/build/src/third_party/issue-descriptions/unencodedDigestMalformedDictionary.md +2 -2
  264. package/build/src/third_party/issue-descriptions/unencodedDigestUnknownAlgorithm.md +1 -1
  265. package/build/src/third_party/lighthouse-devtools-mcp-bundle.js +3177 -6340
  266. package/build/src/tools/ToolDefinition.js +2 -2
  267. package/build/src/tools/categories.js +3 -0
  268. package/build/src/tools/console.js +13 -0
  269. package/build/src/tools/emulation.js +30 -3
  270. package/build/src/tools/extensions.js +8 -1
  271. package/build/src/tools/input.js +246 -128
  272. package/build/src/tools/lighthouse.js +14 -7
  273. package/build/src/tools/memory.js +289 -25
  274. package/build/src/tools/network.js +10 -7
  275. package/build/src/tools/pages.js +33 -92
  276. package/build/src/tools/performance.js +67 -52
  277. package/build/src/tools/pwa.js +128 -0
  278. package/build/src/tools/screencast.js +35 -12
  279. package/build/src/tools/screenshot.js +234 -75
  280. package/build/src/tools/script.js +130 -45
  281. package/build/src/tools/slim/tools.js +3 -0
  282. package/build/src/tools/snapshot.js +7 -4
  283. package/build/src/tools/thirdPartyDeveloper.js +19 -9
  284. package/build/src/tools/tools.js +3 -1
  285. package/build/src/tools/webmcp.js +3 -1
  286. package/build/src/utils/WaitForHelper.js +299 -0
  287. package/build/src/utils/check-for-updates.js +8 -2
  288. package/build/src/utils/files.js +42 -3
  289. package/build/src/utils/logger.js +51 -0
  290. package/build/src/utils/polyfill.js +11 -0
  291. package/build/src/utils/url.js +43 -0
  292. package/build/src/version.js +1 -1
  293. package/package.json +42 -33
  294. package/build/src/DevToolsConnectionAdapter.js +0 -70
  295. package/build/src/HeapSnapshotManager.js +0 -110
  296. package/build/src/Mutex.js +0 -38
  297. package/build/src/WaitForHelper.js +0 -195
  298. package/build/src/bin/cliDefinitions.js +0 -616
  299. package/build/src/logger.js +0 -37
  300. package/build/src/polyfill.js +0 -8
  301. package/build/src/telemetry/metricUtils.js +0 -15
  302. package/build/src/third_party/issue-descriptions/SameSiteExcludeContextDowngradeRead.md +0 -8
  303. package/build/src/third_party/issue-descriptions/SameSiteExcludeContextDowngradeSet.md +0 -8
  304. package/build/src/third_party/issue-descriptions/SameSiteExcludeNavigationContextDowngrade.md +0 -8
  305. package/build/src/third_party/issue-descriptions/SameSiteWarnCrossDowngradeRead.md +0 -8
  306. package/build/src/third_party/issue-descriptions/SameSiteWarnCrossDowngradeSet.md +0 -8
  307. package/build/src/third_party/issue-descriptions/SameSiteWarnStrictLaxDowngradeStrict.md +0 -8
  308. package/build/src/third_party/issue-descriptions/arInsecureContext.md +0 -7
  309. package/build/src/third_party/issue-descriptions/arInvalidInfoHeader.md +0 -5
  310. package/build/src/third_party/issue-descriptions/arInvalidRegisterOsSourceHeader.md +0 -5
  311. package/build/src/third_party/issue-descriptions/arInvalidRegisterOsTriggerHeader.md +0 -5
  312. package/build/src/third_party/issue-descriptions/arInvalidRegisterSourceHeader.md +0 -5
  313. package/build/src/third_party/issue-descriptions/arInvalidRegisterTriggerHeader.md +0 -5
  314. package/build/src/third_party/issue-descriptions/arNavigationRegistrationUniqueScopeAlreadySet.md +0 -5
  315. package/build/src/third_party/issue-descriptions/arNavigationRegistrationWithoutTransientUserActivation.md +0 -6
  316. package/build/src/third_party/issue-descriptions/arNoRegisterOsSourceHeader.md +0 -5
  317. package/build/src/third_party/issue-descriptions/arNoRegisterOsTriggerHeader.md +0 -5
  318. package/build/src/third_party/issue-descriptions/arNoRegisterSourceHeader.md +0 -5
  319. package/build/src/third_party/issue-descriptions/arNoRegisterTriggerHeader.md +0 -5
  320. package/build/src/third_party/issue-descriptions/arNoWebOrOsSupport.md +0 -4
  321. package/build/src/third_party/issue-descriptions/arOsSourceIgnored.md +0 -18
  322. package/build/src/third_party/issue-descriptions/arOsTriggerIgnored.md +0 -19
  323. package/build/src/third_party/issue-descriptions/arPermissionPolicyDisabled.md +0 -8
  324. package/build/src/third_party/issue-descriptions/arSourceAndTriggerHeaders.md +0 -9
  325. package/build/src/third_party/issue-descriptions/arSourceIgnored.md +0 -13
  326. package/build/src/third_party/issue-descriptions/arTriggerIgnored.md +0 -12
  327. package/build/src/third_party/issue-descriptions/arUntrustworthyReportingOrigin.md +0 -10
  328. package/build/src/third_party/issue-descriptions/arWebAndOsHeaders.md +0 -11
  329. package/build/src/utils/string.js +0 -37
  330. package/build/src/utils/types.js +0 -7
@@ -30,6 +30,48 @@ export const commands = {
30
30
  },
31
31
  },
32
32
  },
33
+ click_at: {
34
+ description: 'Clicks at the provided coordinates (requires flag: --experimentalVision=true)',
35
+ category: 'Input automation',
36
+ args: {
37
+ x: {
38
+ name: 'x',
39
+ type: 'number',
40
+ description: 'The x coordinate',
41
+ required: true,
42
+ },
43
+ y: {
44
+ name: 'y',
45
+ type: 'number',
46
+ description: 'The y coordinate',
47
+ required: true,
48
+ },
49
+ dblClick: {
50
+ name: 'dblClick',
51
+ type: 'boolean',
52
+ description: 'Set to true for double clicks. Default is false.',
53
+ required: false,
54
+ },
55
+ includeSnapshot: {
56
+ name: 'includeSnapshot',
57
+ type: 'boolean',
58
+ description: 'Whether to include a snapshot in the response. Default is false.',
59
+ required: false,
60
+ },
61
+ },
62
+ },
63
+ close_heapsnapshot: {
64
+ description: 'Closes a previously loaded memory heapsnapshot, freeing its memory. (requires flag: --memoryDebugging=true)',
65
+ category: 'Memory',
66
+ args: {
67
+ filePath: {
68
+ name: 'filePath',
69
+ type: 'string',
70
+ description: 'A path to the .heapsnapshot file to close.',
71
+ required: true,
72
+ },
73
+ },
74
+ },
33
75
  close_page: {
34
76
  description: 'Closes the page by its index. The last open page cannot be closed.',
35
77
  category: 'Navigation automation',
@@ -42,6 +84,30 @@ export const commands = {
42
84
  },
43
85
  },
44
86
  },
87
+ compare_heapsnapshots: {
88
+ description: 'Loads two memory heapsnapshots and returns the comparison. If classIndex is provided, returns detailed diff for that class, otherwise returns summary diff. (requires flag: --memoryDebugging=true)',
89
+ category: 'Memory',
90
+ args: {
91
+ baseFilePath: {
92
+ name: 'baseFilePath',
93
+ type: 'string',
94
+ description: 'A path to the base .heapsnapshot file (earlier snapshot).',
95
+ required: true,
96
+ },
97
+ currentFilePath: {
98
+ name: 'currentFilePath',
99
+ type: 'string',
100
+ description: 'A path to the current .heapsnapshot file (later snapshot).',
101
+ required: true,
102
+ },
103
+ classIndex: {
104
+ name: 'classIndex',
105
+ type: 'number',
106
+ description: 'Optional 0-based index of the class in the summary list to filter results, showing individual objects.',
107
+ required: false,
108
+ },
109
+ },
110
+ },
45
111
  drag: {
46
112
  description: 'Drag an element onto another element',
47
113
  category: 'Input automation',
@@ -86,7 +152,7 @@ export const commands = {
86
152
  geolocation: {
87
153
  name: 'geolocation',
88
154
  type: 'string',
89
- description: 'Geolocation (`<latitude>x<longitude>`) to emulate. Latitude between -90 and 90. Longitude between -180 and 180. Omit to clear the geolocation override.',
155
+ description: 'Geolocation (`<latitude>,<longitude>`) to emulate. Latitude between -90 and 90. Longitude between -180 and 180. Omit to clear the geolocation override.',
90
156
  required: false,
91
157
  },
92
158
  userAgent: {
@@ -108,16 +174,22 @@ export const commands = {
108
174
  description: "Emulate device viewports '<width>x<height>x<devicePixelRatio>[,mobile][,touch][,landscape]'. 'touch' and 'mobile' to emulate mobile devices. 'landscape' to emulate landscape mode.",
109
175
  required: false,
110
176
  },
177
+ extraHttpHeaders: {
178
+ name: 'extraHttpHeaders',
179
+ type: 'string',
180
+ description: 'Extra HTTP headers as a JSON string object, e.g. {"X-Custom": "value", "Authorization": "Bearer token"}. Headers are included into every HTTP request originating from the page and persist across navigations until cleared. Pass an empty string to clear all extra headers.',
181
+ required: false,
182
+ },
111
183
  },
112
184
  },
113
185
  evaluate_script: {
114
- description: 'Evaluate a JavaScript function inside the currently selected page. Returns the response as JSON,\nso returned values have to be JSON-serializable.',
186
+ description: 'Evaluate a JavaScript function inside the currently selected page. Returns the response as JSON, so returned values have to be JSON-serializable.',
115
187
  category: 'Debugging',
116
188
  args: {
117
189
  function: {
118
190
  name: 'function',
119
191
  type: 'string',
120
- description: 'A JavaScript function declaration to be executed by the tool in the currently selected page.\nExample without arguments: `() => {\n return document.title\n}` or `async () => {\n return await fetch("example.com")\n}`.\nExample with arguments: `(el) => {\n return el.innerText;\n}`\n',
192
+ description: 'A JavaScript function declaration to be executed by the tool in the currently selected page.\nExample without arguments: `() => document.title` or `async () => await fetch("example.com")`.\nExample with arguments: `(el) => el.innerText`\n',
121
193
  required: true,
122
194
  },
123
195
  args: {
@@ -126,12 +198,60 @@ export const commands = {
126
198
  description: 'An optional list of arguments to pass to the function.',
127
199
  required: false,
128
200
  },
201
+ filePath: {
202
+ name: 'filePath',
203
+ type: 'string',
204
+ description: 'The absolute or relative path to a file to save the script output to. If omitted, the output is returned inline.',
205
+ required: false,
206
+ },
129
207
  dialogAction: {
130
208
  name: 'dialogAction',
131
209
  type: 'string',
132
210
  description: 'Handle dialogs while execution. "accept", "dismiss", or string for response of window.prompt. Defaults to accept.',
133
211
  required: false,
134
212
  },
213
+ waitForStableDom: {
214
+ name: 'waitForStableDom',
215
+ type: 'boolean',
216
+ description: 'Whether to wait for the DOM to settle. Pass false if the script only reads data. Defaults to true.',
217
+ required: false,
218
+ },
219
+ },
220
+ },
221
+ execute_3p_developer_tool: {
222
+ description: 'Executes a tool exposed by the page. (requires flag: --categoryExperimentalThirdParty=true)',
223
+ category: 'Third-party',
224
+ args: {
225
+ toolName: {
226
+ name: 'toolName',
227
+ type: 'string',
228
+ description: 'The name of the tool to execute',
229
+ required: true,
230
+ },
231
+ params: {
232
+ name: 'params',
233
+ type: 'string',
234
+ description: 'The JSON-stringified parameters to pass to the tool',
235
+ required: false,
236
+ },
237
+ },
238
+ },
239
+ execute_webmcp_tool: {
240
+ description: 'Executes a WebMCP tool exposed by the page. (requires flag: --categoryExperimentalWebmcp=true)',
241
+ category: 'WebMCP',
242
+ args: {
243
+ toolName: {
244
+ name: 'toolName',
245
+ type: 'string',
246
+ description: 'The name of the WebMCP tool to execute',
247
+ required: true,
248
+ },
249
+ input: {
250
+ name: 'input',
251
+ type: 'string',
252
+ description: 'The JSON-stringified parameters to pass to the WebMCP tool',
253
+ required: false,
254
+ },
135
255
  },
136
256
  },
137
257
  fill: {
@@ -170,6 +290,289 @@ export const commands = {
170
290
  },
171
291
  },
172
292
  },
293
+ get_heapsnapshot_class_nodes: {
294
+ description: 'Loads a memory heapsnapshot and returns instances of a specific class with their IDs. (requires flag: --memoryDebugging=true)',
295
+ category: 'Memory',
296
+ args: {
297
+ filePath: {
298
+ name: 'filePath',
299
+ type: 'string',
300
+ description: 'A path to a .heapsnapshot file to read.',
301
+ required: true,
302
+ },
303
+ id: {
304
+ name: 'id',
305
+ type: 'number',
306
+ description: 'The ID for the class, obtained from details.',
307
+ required: true,
308
+ },
309
+ filterName: {
310
+ name: 'filterName',
311
+ type: 'string',
312
+ description: 'An optional filter to apply to the nodes.',
313
+ required: false,
314
+ enum: [
315
+ 'objectsRetainedByDetachedDomNodes',
316
+ 'objectsRetainedByConsole',
317
+ 'objectsRetainedByEventHandlers',
318
+ 'objectsRetainedByContexts',
319
+ 'sharedNativeContext',
320
+ 'noNativeContext',
321
+ 'attributedToSpecificNativeContext',
322
+ ],
323
+ },
324
+ objectId: {
325
+ name: 'objectId',
326
+ type: 'number',
327
+ description: 'The object ID (nodeId) of the specific native context to filter by when filterName is attributedToSpecificNativeContext.',
328
+ required: false,
329
+ },
330
+ pageIdx: {
331
+ name: 'pageIdx',
332
+ type: 'number',
333
+ description: 'The page index for pagination.',
334
+ required: false,
335
+ },
336
+ pageSize: {
337
+ name: 'pageSize',
338
+ type: 'number',
339
+ description: 'The page size for pagination.',
340
+ required: false,
341
+ },
342
+ },
343
+ },
344
+ get_heapsnapshot_details: {
345
+ description: 'Loads a memory heapsnapshot and returns all available information including statistics, static data, and aggregated node information. Supports pagination for aggregates. (requires flag: --memoryDebugging=true)',
346
+ category: 'Memory',
347
+ args: {
348
+ filePath: {
349
+ name: 'filePath',
350
+ type: 'string',
351
+ description: 'A path to a .heapsnapshot file to read.',
352
+ required: true,
353
+ },
354
+ filterName: {
355
+ name: 'filterName',
356
+ type: 'string',
357
+ description: 'An optional filter to apply to the aggregates.',
358
+ required: false,
359
+ enum: [
360
+ 'objectsRetainedByDetachedDomNodes',
361
+ 'objectsRetainedByConsole',
362
+ 'objectsRetainedByEventHandlers',
363
+ 'objectsRetainedByContexts',
364
+ 'sharedNativeContext',
365
+ 'noNativeContext',
366
+ 'attributedToSpecificNativeContext',
367
+ ],
368
+ },
369
+ objectId: {
370
+ name: 'objectId',
371
+ type: 'number',
372
+ description: 'The object ID (nodeId) of the specific native context to filter by when filterName is attributedToSpecificNativeContext.',
373
+ required: false,
374
+ },
375
+ pageIdx: {
376
+ name: 'pageIdx',
377
+ type: 'number',
378
+ description: 'The page index for pagination of aggregates.',
379
+ required: false,
380
+ },
381
+ pageSize: {
382
+ name: 'pageSize',
383
+ type: 'number',
384
+ description: 'The page size for pagination of aggregates.',
385
+ required: false,
386
+ },
387
+ },
388
+ },
389
+ get_heapsnapshot_dominators: {
390
+ description: 'Loads a memory heapsnapshot and returns the dominator chain for a specific node ID. This helps to identify which objects are keeping the target node alive. (requires flag: --memoryDebugging=true)',
391
+ category: 'Memory',
392
+ args: {
393
+ filePath: {
394
+ name: 'filePath',
395
+ type: 'string',
396
+ description: 'A path to a .heapsnapshot file to read.',
397
+ required: true,
398
+ },
399
+ nodeId: {
400
+ name: 'nodeId',
401
+ type: 'number',
402
+ description: 'The node ID to get the dominator chain for.',
403
+ required: true,
404
+ },
405
+ },
406
+ },
407
+ get_heapsnapshot_duplicate_strings: {
408
+ description: 'Loads a memory heapsnapshot and returns duplicate strings grouped by their value. (requires flag: --memoryDebugging=true)',
409
+ category: 'Memory',
410
+ args: {
411
+ filePath: {
412
+ name: 'filePath',
413
+ type: 'string',
414
+ description: 'A path to a .heapsnapshot file to read.',
415
+ required: true,
416
+ },
417
+ pageIdx: {
418
+ name: 'pageIdx',
419
+ type: 'number',
420
+ description: 'The page index for pagination.',
421
+ required: false,
422
+ },
423
+ pageSize: {
424
+ name: 'pageSize',
425
+ type: 'number',
426
+ description: 'The page size for pagination.',
427
+ required: false,
428
+ },
429
+ },
430
+ },
431
+ get_heapsnapshot_edges: {
432
+ description: 'Loads a memory heapsnapshot and returns outgoing edges (references) for a specific node ID. (requires flag: --memoryDebugging=true)',
433
+ category: 'Memory',
434
+ args: {
435
+ filePath: {
436
+ name: 'filePath',
437
+ type: 'string',
438
+ description: 'A path to a .heapsnapshot file to read.',
439
+ required: true,
440
+ },
441
+ nodeId: {
442
+ name: 'nodeId',
443
+ type: 'number',
444
+ description: 'The node ID to get outgoing edges for.',
445
+ required: true,
446
+ },
447
+ sortBy: {
448
+ name: 'sortBy',
449
+ type: 'string',
450
+ description: 'Sort order for edges. Default is retainedSize.',
451
+ required: false,
452
+ enum: ['retainedSize', 'selfSize', 'name'],
453
+ },
454
+ minRetainedSize: {
455
+ name: 'minRetainedSize',
456
+ type: 'number',
457
+ description: 'Minimum retained size in bytes for target nodes.',
458
+ required: false,
459
+ },
460
+ excludePrimitives: {
461
+ name: 'excludePrimitives',
462
+ type: 'boolean',
463
+ description: 'Whether to exclude primitive target nodes. Default is true.',
464
+ required: false,
465
+ },
466
+ pageIdx: {
467
+ name: 'pageIdx',
468
+ type: 'number',
469
+ description: 'The page index for pagination.',
470
+ required: false,
471
+ },
472
+ pageSize: {
473
+ name: 'pageSize',
474
+ type: 'number',
475
+ description: 'The page size for pagination.',
476
+ required: false,
477
+ },
478
+ },
479
+ },
480
+ get_heapsnapshot_object_details: {
481
+ description: 'Loads a memory heapsnapshot and returns detailed information about a specific object by its node ID, including size, type, distance, and DOM detachedness. (requires flag: --memoryDebugging=true)',
482
+ category: 'Memory',
483
+ args: {
484
+ filePath: {
485
+ name: 'filePath',
486
+ type: 'string',
487
+ description: 'A path to a .heapsnapshot file to read.',
488
+ required: true,
489
+ },
490
+ nodeId: {
491
+ name: 'nodeId',
492
+ type: 'number',
493
+ description: 'The node ID to get object details for.',
494
+ required: true,
495
+ },
496
+ },
497
+ },
498
+ get_heapsnapshot_retainers: {
499
+ description: 'Loads a memory heapsnapshot and returns retainers for a specific node ID. (requires flag: --memoryDebugging=true)',
500
+ category: 'Memory',
501
+ args: {
502
+ filePath: {
503
+ name: 'filePath',
504
+ type: 'string',
505
+ description: 'A path to a .heapsnapshot file to read.',
506
+ required: true,
507
+ },
508
+ nodeId: {
509
+ name: 'nodeId',
510
+ type: 'number',
511
+ description: 'The node ID to get retainers for.',
512
+ required: true,
513
+ },
514
+ pageIdx: {
515
+ name: 'pageIdx',
516
+ type: 'number',
517
+ description: 'The page index for pagination.',
518
+ required: false,
519
+ },
520
+ pageSize: {
521
+ name: 'pageSize',
522
+ type: 'number',
523
+ description: 'The page size for pagination.',
524
+ required: false,
525
+ },
526
+ },
527
+ },
528
+ get_heapsnapshot_retaining_paths: {
529
+ description: 'Loads a memory heapsnapshot and returns retaining paths for a specific node ID. This helps to understand why a node is not being garbage collected. (requires flag: --memoryDebugging=true)',
530
+ category: 'Memory',
531
+ args: {
532
+ filePath: {
533
+ name: 'filePath',
534
+ type: 'string',
535
+ description: 'A path to a .heapsnapshot file to read.',
536
+ required: true,
537
+ },
538
+ nodeId: {
539
+ name: 'nodeId',
540
+ type: 'number',
541
+ description: 'The node ID to get retaining paths for.',
542
+ required: true,
543
+ },
544
+ maxDepth: {
545
+ name: 'maxDepth',
546
+ type: 'number',
547
+ description: 'The maximum depth to search for retaining paths.',
548
+ required: false,
549
+ },
550
+ maxNodes: {
551
+ name: 'maxNodes',
552
+ type: 'number',
553
+ description: 'The maximum number of nodes to return.',
554
+ required: false,
555
+ },
556
+ maxSiblings: {
557
+ name: 'maxSiblings',
558
+ type: 'number',
559
+ description: 'The maximum number of siblings to return.',
560
+ required: false,
561
+ },
562
+ },
563
+ },
564
+ get_heapsnapshot_summary: {
565
+ description: 'Loads a memory heapsnapshot and returns snapshot summary stats, including native contexts and their sizes, and retained by context summary. (requires flag: --memoryDebugging=true)',
566
+ category: 'Memory',
567
+ args: {
568
+ filePath: {
569
+ name: 'filePath',
570
+ type: 'string',
571
+ description: 'A path to a .heapsnapshot file to read.',
572
+ required: true,
573
+ },
574
+ },
575
+ },
173
576
  get_network_request: {
174
577
  description: 'Gets a network request by an optional reqid, if omitted returns the currently selected request in the DevTools Network panel.',
175
578
  category: 'Network',
@@ -194,6 +597,18 @@ export const commands = {
194
597
  },
195
598
  },
196
599
  },
600
+ get_os_app_state: {
601
+ description: 'Returns the OS integration state (badge count and registered file handlers) for an installed web app, identified by its manifest ID. (requires flag: --categoryPwa=true)',
602
+ category: 'Progressive Web Apps',
603
+ args: {
604
+ manifestId: {
605
+ name: 'manifestId',
606
+ type: 'string',
607
+ description: 'The manifest ID of the web app: the resolved `id` member of its manifest. If `id` is omitted, it defaults to the resolved `start_url` (e.g. "https://example.com/"). See https://w3c.github.io/manifest/#id-member.',
608
+ required: true,
609
+ },
610
+ },
611
+ },
197
612
  handle_dialog: {
198
613
  description: 'If a browser dialog was opened, use this command to handle it',
199
614
  category: 'Input automation',
@@ -231,6 +646,61 @@ export const commands = {
231
646
  },
232
647
  },
233
648
  },
649
+ install_extension: {
650
+ description: 'Installs a Chrome extension from the given path. (requires flag: --categoryExtensions=true)',
651
+ category: 'Extensions',
652
+ args: {
653
+ path: {
654
+ name: 'path',
655
+ type: 'string',
656
+ description: 'Absolute path to the unpacked extension folder.',
657
+ required: true,
658
+ },
659
+ },
660
+ },
661
+ install_pwa: {
662
+ description: 'Installs a Progressive Web App (PWA) identified by its manifest ID. This installs through the PWA CDP domain without a user gesture or install dialog. DevTools installs default to browser display mode. (requires flag: --categoryPwa=true)',
663
+ category: 'Progressive Web Apps',
664
+ args: {
665
+ manifestId: {
666
+ name: 'manifestId',
667
+ type: 'string',
668
+ description: 'The manifest ID of the web app: the resolved `id` member of its manifest. If `id` is omitted, it defaults to the resolved `start_url` (e.g. "https://example.com/"). See https://w3c.github.io/manifest/#id-member.',
669
+ required: true,
670
+ },
671
+ installUrlOrBundleUrl: {
672
+ name: 'installUrlOrBundleUrl',
673
+ type: 'string',
674
+ description: 'The location of the app or bundle. For a normal site this is the page URL; for an Isolated Web App it can be a file:// or http(s):// signed web bundle.',
675
+ required: true,
676
+ },
677
+ displayMode: {
678
+ name: 'displayMode',
679
+ type: 'string',
680
+ description: 'Optional user display mode preference applied after install. "standalone" opens the app in its own window; "browser" opens it as a tab. Installs via the PWA CDP domain default to "browser" because they do not simulate the install dialog, so pass "standalone" to get an app-window experience.',
681
+ required: false,
682
+ enum: ['standalone', 'browser'],
683
+ },
684
+ },
685
+ },
686
+ launch_pwa: {
687
+ description: 'Launches an installed Progressive Web App using its saved display mode. Optionally opens a specific URL within the same app instead of the default start URL. (requires flag: --categoryPwa=true)',
688
+ category: 'Progressive Web Apps',
689
+ args: {
690
+ manifestId: {
691
+ name: 'manifestId',
692
+ type: 'string',
693
+ description: 'The manifest ID of the web app: the resolved `id` member of its manifest. If `id` is omitted, it defaults to the resolved `start_url` (e.g. "https://example.com/"). See https://w3c.github.io/manifest/#id-member.',
694
+ required: true,
695
+ },
696
+ url: {
697
+ name: 'url',
698
+ type: 'string',
699
+ description: 'Optional URL within the app to open instead of the default start URL.',
700
+ required: false,
701
+ },
702
+ },
703
+ },
234
704
  lighthouse_audit: {
235
705
  description: 'Get Lighthouse score and reports for accessibility, SEO, best practices, and agentic browsing. This excludes performance. For performance audits, run performance_start_trace',
236
706
  category: 'Debugging',
@@ -259,6 +729,11 @@ export const commands = {
259
729
  },
260
730
  },
261
731
  },
732
+ list_3p_developer_tools: {
733
+ description: "Lists all third-party developer tools the page exposes for providing runtime information.\nThird-party developer tools can be called via the 'execute_3p_developer_tool()' MCP tool.\nAlternatively, third-party developer tools can be executed by calling 'evaluate_script' and adding the\nfollowing command to the script:\n`window.__dtmcp.executeTool(toolName, params)`\nThis might be helpful when the third-party developer tools return non-serializable values or when composing\nthird-party developer tools with additional functionality. (requires flag: --categoryExperimentalThirdParty=true)",
734
+ category: 'Third-party',
735
+ args: {},
736
+ },
262
737
  list_console_messages: {
263
738
  description: 'List all console messages for the currently selected page since the last navigation.',
264
739
  category: 'Debugging',
@@ -288,10 +763,28 @@ export const commands = {
288
763
  required: false,
289
764
  default: false,
290
765
  },
766
+ includeStackTraces: {
767
+ name: 'includeStackTraces',
768
+ type: 'boolean',
769
+ description: 'Set to true to include the stack trace for each message when available. Increases the response size.',
770
+ required: false,
771
+ default: false,
772
+ },
773
+ serviceWorkerId: {
774
+ name: 'serviceWorkerId',
775
+ type: 'string',
776
+ description: 'Filter messages to only return messages of the specified service worker.',
777
+ required: false,
778
+ },
291
779
  },
292
780
  },
781
+ list_extensions: {
782
+ description: 'Lists all the Chrome extensions installed in the browser. This includes their name, ID, version, and enabled status. (requires flag: --categoryExtensions=true)',
783
+ category: 'Extensions',
784
+ args: {},
785
+ },
293
786
  list_network_requests: {
294
- description: 'List all requests for the currently selected page since the last navigation.',
787
+ description: 'Lists the most recent requests for the currently selected page since the last navigation.',
295
788
  category: 'Network',
296
789
  args: {
297
790
  pageSize: {
@@ -326,6 +819,11 @@ export const commands = {
326
819
  category: 'Navigation automation',
327
820
  args: {},
328
821
  },
822
+ list_webmcp_tools: {
823
+ description: 'Lists all WebMCP tools the page exposes. (requires flag: --categoryExperimentalWebmcp=true)',
824
+ category: 'WebMCP',
825
+ args: {},
826
+ },
329
827
  navigate_page: {
330
828
  description: 'Go to a URL, or back, forward, or reload. Use project URL if not specified otherwise.',
331
829
  category: 'Navigation automation',
@@ -354,7 +852,7 @@ export const commands = {
354
852
  type: 'string',
355
853
  description: 'Whether to auto accept or beforeunload dialogs triggered by this navigation. Default is accept.',
356
854
  required: false,
357
- enum: ['accept', 'decline'],
855
+ enum: ['accept', 'dismiss'],
358
856
  },
359
857
  initScript: {
360
858
  name: 'initScript',
@@ -540,6 +1038,18 @@ export const commands = {
540
1038
  },
541
1039
  },
542
1040
  },
1041
+ reload_extension: {
1042
+ description: 'Reloads an unpacked Chrome extension by its ID. (requires flag: --categoryExtensions=true)',
1043
+ category: 'Extensions',
1044
+ args: {
1045
+ id: {
1046
+ name: 'id',
1047
+ type: 'string',
1048
+ description: 'ID of the extension to reload.',
1049
+ required: true,
1050
+ },
1051
+ },
1052
+ },
543
1053
  resize_page: {
544
1054
  description: "Resizes the selected page's window so that the page has specified dimension",
545
1055
  category: 'Emulation',
@@ -558,6 +1068,23 @@ export const commands = {
558
1068
  },
559
1069
  },
560
1070
  },
1071
+ screencast_start: {
1072
+ description: 'Starts recording a screencast (video) of the selected page in specified format. (requires flag: --experimentalScreencast=true)',
1073
+ category: 'Debugging',
1074
+ args: {
1075
+ filePath: {
1076
+ name: 'filePath',
1077
+ type: 'string',
1078
+ description: 'Output file path (.webm,.mp4 are supported). Uses mkdtemp to generate a unique path if not provided.',
1079
+ required: false,
1080
+ },
1081
+ },
1082
+ },
1083
+ screencast_stop: {
1084
+ description: 'Stops the active screencast recording on the selected page. (requires flag: --experimentalScreencast=true)',
1085
+ category: 'Debugging',
1086
+ args: {},
1087
+ },
561
1088
  select_page: {
562
1089
  description: 'Select a page as a context for future tool calls.',
563
1090
  category: 'Navigation automation',
@@ -576,7 +1103,7 @@ export const commands = {
576
1103
  },
577
1104
  },
578
1105
  },
579
- take_memory_snapshot: {
1106
+ take_heapsnapshot: {
580
1107
  description: 'Capture a heap snapshot of the currently selected page. Use to analyze the memory distribution of JavaScript objects and debug memory leaks.',
581
1108
  category: 'Memory',
582
1109
  args: {
@@ -644,6 +1171,18 @@ export const commands = {
644
1171
  },
645
1172
  },
646
1173
  },
1174
+ trigger_extension_action: {
1175
+ description: 'Triggers the default action of an extension by its ID. (requires flag: --categoryExtensions=true)',
1176
+ category: 'Extensions',
1177
+ args: {
1178
+ id: {
1179
+ name: 'id',
1180
+ type: 'string',
1181
+ description: 'ID of the extension to trigger the action for.',
1182
+ required: true,
1183
+ },
1184
+ },
1185
+ },
647
1186
  type_text: {
648
1187
  description: 'Type text using keyboard into a previously focused input',
649
1188
  category: 'Input automation',
@@ -662,6 +1201,30 @@ export const commands = {
662
1201
  },
663
1202
  },
664
1203
  },
1204
+ uninstall_extension: {
1205
+ description: 'Uninstalls a Chrome extension by its ID. (requires flag: --categoryExtensions=true)',
1206
+ category: 'Extensions',
1207
+ args: {
1208
+ id: {
1209
+ name: 'id',
1210
+ type: 'string',
1211
+ description: 'ID of the extension to uninstall.',
1212
+ required: true,
1213
+ },
1214
+ },
1215
+ },
1216
+ uninstall_pwa: {
1217
+ description: 'Uninstalls a Progressive Web App identified by its manifest ID and closes any open app windows. (requires flag: --categoryPwa=true)',
1218
+ category: 'Progressive Web Apps',
1219
+ args: {
1220
+ manifestId: {
1221
+ name: 'manifestId',
1222
+ type: 'string',
1223
+ description: 'The manifest ID of the web app: the resolved `id` member of its manifest. If `id` is omitted, it defaults to the resolved `start_url` (e.g. "https://example.com/"). See https://w3c.github.io/manifest/#id-member.',
1224
+ required: true,
1225
+ },
1226
+ },
1227
+ },
665
1228
  upload_file: {
666
1229
  description: 'Upload a file through a provided element.',
667
1230
  category: 'Input automation',
@@ -672,10 +1235,10 @@ export const commands = {
672
1235
  description: 'The uid of the file input element or an element that will open file chooser on the page from the page content snapshot',
673
1236
  required: true,
674
1237
  },
675
- filePath: {
676
- name: 'filePath',
677
- type: 'string',
678
- description: 'The local path of the file to upload',
1238
+ filePaths: {
1239
+ name: 'filePaths',
1240
+ type: 'array',
1241
+ description: 'One or more files paths to upload. File paths have to be local to the browser instance (not the MCP).',
679
1242
  required: true,
680
1243
  },
681
1244
  includeSnapshot: {