@skyramp/mcp 0.4.1 → 0.4.2-rc.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.
- package/build/commands/localDevTestChangesCommand.js +2 -1
- package/build/commands/recommendTestsAndExecuteCommand.js +15 -7
- package/build/commands/testThisEndpointCommand.js +35 -6
- package/build/execution/wrapperConfig.d.ts +56 -0
- package/build/execution/wrapperConfig.js +155 -0
- package/build/index.js +40 -10
- package/build/playwright/blueprintDigest.js +28 -7
- package/build/playwright/registerPlaywrightTools.js +47 -28
- package/build/playwright/traceExportStore.d.ts +22 -0
- package/build/playwright/traceExportStore.js +81 -0
- package/build/playwright/traceRecordingPrompt.js +11 -3
- package/build/prompts/code-reuse.js +118 -49
- package/build/prompts/fix-error-prompt.d.ts +9 -1
- package/build/prompts/fix-error-prompt.js +31 -28
- package/build/prompts/local-dev/local-dev-plan.d.ts +3 -0
- package/build/prompts/local-dev/local-dev-plan.js +8 -23
- package/build/prompts/local-dev/local-dev-prompts.d.ts +1 -1
- package/build/prompts/local-dev/local-dev-prompts.js +31 -4
- package/build/prompts/modularization/integration-test-modularization.js +13 -6
- package/build/prompts/modularization/ui-test-modularization.js +1 -1
- package/build/prompts/personas.js +1 -1
- package/build/prompts/pom-aware-code-reuse.js +7 -9
- package/build/prompts/reuse-hand-off.d.ts +64 -0
- package/build/prompts/reuse-hand-off.js +130 -0
- package/build/prompts/shared-helper-policy.d.ts +124 -2
- package/build/prompts/shared-helper-policy.js +178 -12
- package/build/prompts/startTraceCollectionPrompts.js +1 -1
- package/build/prompts/sut-setup/modes/adaptWorkflowPrompt.js +7 -8
- package/build/prompts/sut-setup/modes/dockerComposePrompt.js +1 -1
- package/build/prompts/sut-setup/shared.d.ts +4 -1
- package/build/prompts/sut-setup/shared.js +6 -4
- package/build/prompts/test-maintenance/actionsInstructions.d.ts +19 -11
- package/build/prompts/test-maintenance/actionsInstructions.js +47 -26
- package/build/prompts/test-maintenance/drift-analysis-prompt.d.ts +16 -8
- package/build/prompts/test-maintenance/drift-analysis-prompt.js +93 -38
- package/build/prompts/test-maintenance/driftAnalysisSections.js +5 -3
- package/build/prompts/test-maintenance/driftAnalysisShared.js +4 -2
- package/build/prompts/test-maintenance/uiDriftAnalysisSections.js +8 -5
- package/build/prompts/test-recommendation/recommendationSections.js +19 -8
- package/build/prompts/test-recommendation/recommendationShared.d.ts +1 -1
- package/build/prompts/test-recommendation/recommendationShared.js +0 -1
- package/build/prompts/test-recommendation/registerRecommendTestsPrompt.js +5 -2
- package/build/prompts/test-recommendation/test-recommendation-prompt.js +10 -7
- package/build/prompts/testbot/testbot-prompts.js +133 -63
- package/build/recommendation/answers.js +18 -9
- package/build/recommendation/pullRequestText.js +1 -1
- package/build/recommendation/registerPlan.js +31 -17
- package/build/recommendation/subjectStep.d.ts +8 -10
- package/build/recommendation/subjectStep.js +17 -16
- package/build/recommendation/types.d.ts +71 -17
- package/build/recommendation/types.js +9 -15
- package/build/recommendation/verifierContracts.d.ts +7 -3
- package/build/recommendation/verifierContracts.js +8 -4
- package/build/recommendation/verifiers/changedFile.js +11 -13
- package/build/recommendation/verifiers/citedPath.d.ts +8 -0
- package/build/recommendation/verifiers/citedPath.js +16 -2
- package/build/recommendation/verifiers/coverage.d.ts +2 -2
- package/build/recommendation/verifiers/coverage.js +190 -134
- package/build/recommendation/verifiers/defects.js +56 -16
- package/build/recommendation/verifiers/deliveredMatchesPlan.d.ts +7 -1
- package/build/recommendation/verifiers/deliveredMatchesPlan.js +28 -14
- package/build/recommendation/verifiers/endpointGrounded.js +14 -8
- package/build/recommendation/verifiers/existingCoverage.d.ts +6 -0
- package/build/recommendation/verifiers/existingCoverage.js +30 -21
- package/build/recommendation/verifiers/expectedOutcome.js +17 -8
- package/build/recommendation/verifiers/expectedValueSourced.js +54 -43
- package/build/recommendation/verifiers/issueTraceability.d.ts +5 -0
- package/build/recommendation/verifiers/issueTraceability.js +64 -7
- package/build/recommendation/verifiers/removedElementGuarded.js +19 -11
- package/build/recommendation/verifiers/reportedCategory.js +9 -4
- package/build/recommendation/verifiers/requirementSourced.js +34 -21
- package/build/recommendation/verifiers/screenRoute.js +15 -10
- package/build/recommendation/verifiers/statedDifference.js +15 -8
- package/build/recommendation/verifiers/uiElementGrounded.js +50 -16
- package/build/resources/analysisResources.js +7 -3
- package/build/resources/progressResource.js +4 -2
- package/build/resources/sutSetupResource.js +20 -2
- package/build/resources/testbotResource.js +19 -1
- package/build/services/AnalyticsService.js +3 -1
- package/build/services/ScenarioGenerationService.js +5 -5
- package/build/services/TestDiscoveryService.js +53 -9
- package/build/services/TestExecutionService.js +63 -21
- package/build/services/TestGenerationService.d.ts +1 -1
- package/build/services/TestGenerationService.js +43 -24
- package/build/skills/enhanceAssertionsSkill.d.ts +45 -0
- package/build/skills/enhanceAssertionsSkill.js +103 -0
- package/build/skills/fixTestImportErrorsSkill.d.ts +2 -2
- package/build/skills/fixTestImportErrorsSkill.js +2 -2
- package/build/skills/runTestSkill.d.ts +6 -0
- package/build/skills/runTestSkill.js +17 -0
- package/build/skills/skillFiles.d.ts +38 -0
- package/build/skills/skillFiles.js +94 -0
- package/build/skills/validateAssertionAlignmentSkill.d.ts +34 -0
- package/build/skills/validateAssertionAlignmentSkill.js +59 -0
- package/build/tool-phases.js +4 -1
- package/build/tools/auth/loginTool.js +3 -1
- package/build/tools/auth/logoutTool.js +3 -1
- package/build/tools/budgetExcuse.d.ts +15 -0
- package/build/tools/budgetExcuse.js +113 -0
- package/build/tools/code-refactor/alignAssertionsTool.d.ts +2 -0
- package/build/tools/code-refactor/alignAssertionsTool.js +51 -0
- package/build/tools/code-refactor/assertion-state.d.ts +1 -1
- package/build/tools/code-refactor/assertion-state.js +1 -1
- package/build/tools/code-refactor/assertionOperations.d.ts +44 -0
- package/build/tools/code-refactor/assertionOperations.js +82 -0
- package/build/tools/code-refactor/assertionSkillTools.d.ts +3 -0
- package/build/tools/code-refactor/assertionSkillTools.js +86 -0
- package/build/tools/code-refactor/codeReuseTool.js +27 -3
- package/build/tools/code-refactor/enhanceAssertionsTool.js +19 -83
- package/build/tools/code-refactor/gate-markers.d.ts +51 -0
- package/build/tools/code-refactor/gate-markers.js +95 -0
- package/build/tools/code-refactor/retrofit-state.d.ts +3 -1
- package/build/tools/code-refactor/retrofit-state.js +44 -2
- package/build/tools/code-refactor/reuse-outcome.d.ts +23 -1
- package/build/tools/code-refactor/reuse-outcome.js +36 -13
- package/build/tools/code-refactor/reuse-state.d.ts +90 -16
- package/build/tools/code-refactor/reuse-state.js +191 -61
- package/build/tools/code-refactor/utils-verify-gates.d.ts +4 -0
- package/build/tools/code-refactor/utils-verify-gates.js +269 -30
- package/build/tools/code-refactor/verify-gates.d.ts +15 -1
- package/build/tools/code-refactor/verify-gates.js +36 -4
- package/build/tools/enrichTestWithMocksTool.d.ts +1 -1
- package/build/tools/enrichTestWithMocksTool.js +9 -5
- package/build/tools/executeSkyrampTestTool.d.ts +118 -48
- package/build/tools/executeSkyrampTestTool.js +998 -372
- package/build/tools/execution-video-state.js +1 -1
- package/build/tools/fixErrorTool.js +5 -6
- package/build/tools/generate-tests/batchMockGenerationTool.js +1 -1
- package/build/tools/generate-tests/generateBatchScenarioRestTool.js +114 -73
- package/build/tools/generate-tests/generateContractRestTool.js +34 -16
- package/build/tools/generate-tests/generateE2ERestTool.d.ts +1 -0
- package/build/tools/generate-tests/generateE2ERestTool.js +9 -1
- package/build/tools/generate-tests/generateIntegrationRestTool.js +22 -7
- package/build/tools/generate-tests/generateMockRestTool.js +3 -1
- package/build/tools/generate-tests/generateUIRestTool.d.ts +2 -0
- package/build/tools/generate-tests/generateUIRestTool.js +11 -2
- package/build/tools/generate-tests/loadTestSchema.js +1 -3
- package/build/tools/generate-tests/planGuard.js +6 -3
- package/build/tools/generate-tests/scenarioFileIdentity.js +4 -1
- package/build/tools/generate-tests/scenarioLint.js +17 -5
- package/build/tools/generate-tests/trace-reuse-guard.js +5 -2
- package/build/tools/generateEnrichedIntegrationTestTool.js +9 -3
- package/build/tools/one-click/oneClickTool.js +3 -1
- package/build/tools/preflightMockCheckTool.js +23 -7
- package/build/tools/submitReportTool.d.ts +51 -12
- package/build/tools/submitReportTool.js +988 -161
- package/build/tools/test-management/actionsTool.js +241 -51
- package/build/tools/test-management/analyzeChangesTool.d.ts +8 -9
- package/build/tools/test-management/analyzeChangesTool.js +127 -68
- package/build/tools/test-management/analyzeTestHealthTool.d.ts +0 -11
- package/build/tools/test-management/analyzeTestHealthTool.js +42 -76
- package/build/tools/test-management/registerTestPlanTool.d.ts +44 -34
- package/build/tools/test-management/registerTestPlanTool.js +255 -111
- package/build/tools/test-management/resolveScreenTool.js +33 -9
- package/build/tools/test-management/testsOwedBeforeRun.d.ts +28 -0
- package/build/tools/test-management/testsOwedBeforeRun.js +53 -0
- package/build/tools/trace/startTraceCollectionTool.js +3 -1
- package/build/tools/trace/stopTraceCollectionTool.js +42 -6
- package/build/tools/verifyTestDependenciesTool.d.ts +3 -0
- package/build/tools/verifyTestDependenciesTool.js +54 -0
- package/build/tools/workspace/initScanWorkspaceTool.js +9 -3
- package/build/tools/workspace/initializeWorkspaceTool.js +3 -1
- package/build/types/AssertionOutcome.d.ts +1 -1
- package/build/types/EnhanceType.d.ts +6 -0
- package/build/types/EnhanceType.js +1 -0
- package/build/types/RepositoryAnalysis.d.ts +32 -72
- package/build/types/ReuseOutcome.d.ts +100 -7
- package/build/types/ReuseOutcome.js +16 -0
- package/build/types/StepMethod.js +20 -6
- package/build/types/TestAnalysis.d.ts +10 -2
- package/build/types/TestExecution.d.ts +45 -0
- package/build/types/TestRecommendation.d.ts +1 -1
- package/build/types/TestRecommendation.js +4 -1
- package/build/types/TestTypes.d.ts +16 -0
- package/build/types/TestTypes.js +40 -3
- package/build/types/TestbotPromptOptions.d.ts +9 -1
- package/build/types/TestbotReport.d.ts +45 -9
- package/build/utils/AnalysisStateManager.d.ts +137 -34
- package/build/utils/AnalysisStateManager.js +228 -44
- package/build/utils/assertion-verify/api-shared-lints.js +34 -16
- package/build/utils/assertion-verify/metrics.js +39 -6
- package/build/utils/assertion-verify/ui-lints.js +4 -2
- package/build/utils/branchDiff.js +47 -12
- package/build/utils/canonicalJson.js +3 -1
- package/build/utils/connectionErrors.d.ts +10 -0
- package/build/utils/connectionErrors.js +10 -0
- package/build/utils/dartRouteExtractor.js +36 -7
- package/build/utils/fixAttempts.d.ts +26 -0
- package/build/utils/fixAttempts.js +109 -0
- package/build/utils/frontendSelectors.js +23 -4
- package/build/utils/generatedTestRecord.d.ts +19 -0
- package/build/utils/generatedTestRecord.js +61 -0
- package/build/utils/gitStaging.js +7 -2
- package/build/utils/initAgent.js +26 -6
- package/build/utils/language-helper.js +60 -45
- package/build/utils/pathMatching.js +2 -1
- package/build/utils/pathSignatures.js +6 -2
- package/build/utils/planMatchKeys.d.ts +2 -2
- package/build/utils/planMatchKeys.js +20 -14
- package/build/utils/pom-catalog-parse.js +7 -2
- package/build/utils/pom-scope/import-expansion.js +6 -1
- package/build/utils/pom-scope/index.js +50 -12
- package/build/utils/pom-scope/scoring.js +13 -3
- package/build/utils/pom-scope/selector-extractor.js +16 -3
- package/build/utils/pom-scope/strip.d.ts +8 -0
- package/build/utils/pom-scope/strip.js +238 -0
- package/build/utils/pom-scope/testIdDiscovery.js +14 -2
- package/build/utils/pom-verify/__fixtures__/af-style/asset-list.page.d.ts +1 -1
- package/build/utils/pom-verify/__fixtures__/af-style/asset-list.page.js +4 -2
- package/build/utils/pom-verify/__fixtures__/af-style/report.iframe.page.js +3 -1
- package/build/utils/pom-verify/__fixtures__/af-style/workflow-footer.page.js +3 -1
- package/build/utils/pom-verify/bindings.js +5 -1
- package/build/utils/pom-verify/calls.js +9 -2
- package/build/utils/pom-verify/verify.js +27 -5
- package/build/utils/pr-comment-parser.js +20 -7
- package/build/utils/progress.d.ts +1 -1
- package/build/utils/progress.js +1 -1
- package/build/utils/proxy-terminal.d.ts +19 -1
- package/build/utils/proxy-terminal.js +346 -21
- package/build/utils/rebaselineSnapshots.d.ts +1 -1
- package/build/utils/rebaselineSnapshots.js +6 -16
- package/build/utils/removedUiElements.js +1 -1
- package/build/utils/reportLanguage.js +35 -7
- package/build/utils/reportVerification.d.ts +14 -8
- package/build/utils/reportVerification.js +19 -19
- package/build/utils/repositorySlug.d.ts +32 -0
- package/build/utils/repositorySlug.js +77 -0
- package/build/utils/reuseRouting.d.ts +10 -0
- package/build/utils/reuseRouting.js +21 -2
- package/build/utils/runContextGauge.d.ts +27 -0
- package/build/utils/runContextGauge.js +181 -0
- package/build/utils/runSerialized.d.ts +3 -0
- package/build/utils/runSerialized.js +39 -0
- package/build/utils/screenRoutes.js +74 -18
- package/build/utils/skyrampMdContent.d.ts +1 -1
- package/build/utils/skyrampMdContent.js +1 -1
- package/build/utils/skyrampSdkVersion.d.ts +9 -0
- package/build/utils/skyrampSdkVersion.js +16 -0
- package/build/utils/sourceRouteExtractor.js +13 -6
- package/build/utils/telemetry.d.ts +1 -0
- package/build/utils/telemetry.js +8 -5
- package/build/utils/testDependencyPolicy.d.ts +9 -0
- package/build/utils/testDependencyPolicy.js +809 -0
- package/build/utils/testExecutionRecord.d.ts +94 -0
- package/build/utils/testExecutionRecord.js +269 -0
- package/build/utils/testFileClassification.d.ts +8 -0
- package/build/utils/testFileClassification.js +39 -4
- package/build/utils/trace-parser.js +62 -14
- package/build/utils/urlPath.js +3 -1
- package/build/utils/utils-verify/action-key.d.ts +46 -0
- package/build/utils/utils-verify/action-key.js +120 -38
- package/build/utils/utils-verify/action-sites.d.ts +32 -0
- package/build/utils/utils-verify/action-sites.js +202 -0
- package/build/utils/utils-verify/allow.d.ts +122 -3
- package/build/utils/utils-verify/allow.js +146 -21
- package/build/utils/utils-verify/body-reach.d.ts +120 -0
- package/build/utils/utils-verify/body-reach.js +333 -0
- package/build/utils/utils-verify/call-sites.d.ts +31 -7
- package/build/utils/utils-verify/call-sites.js +80 -13
- package/build/utils/utils-verify/delivered-imports.d.ts +43 -0
- package/build/utils/utils-verify/delivered-imports.js +84 -0
- package/build/utils/utils-verify/fixed-sleep.d.ts +96 -0
- package/build/utils/utils-verify/fixed-sleep.js +461 -0
- package/build/utils/utils-verify/in-house.d.ts +93 -0
- package/build/utils/utils-verify/in-house.js +719 -0
- package/build/utils/utils-verify/incumbent.d.ts +3 -0
- package/build/utils/utils-verify/incumbent.js +75 -0
- package/build/utils/utils-verify/index.d.ts +2 -0
- package/build/utils/utils-verify/index.js +2 -0
- package/build/utils/utils-verify/language-spec.d.ts +51 -10
- package/build/utils/utils-verify/language-spec.js +232 -21
- package/build/utils/utils-verify/locate.d.ts +26 -0
- package/build/utils/utils-verify/locate.js +125 -23
- package/build/utils/utils-verify/module-name.d.ts +40 -0
- package/build/utils/utils-verify/module-name.js +98 -0
- package/build/utils/utils-verify/parse.d.ts +56 -7
- package/build/utils/utils-verify/parse.js +195 -40
- package/build/utils/utils-verify/retrofit-equivalence.d.ts +5 -0
- package/build/utils/utils-verify/retrofit-equivalence.js +4 -2
- package/build/utils/utils-verify/stage.d.ts +5 -0
- package/build/utils/utils-verify/stage.js +47 -2
- package/build/utils/utils-verify/status-once.d.ts +62 -0
- package/build/utils/utils-verify/status-once.js +207 -0
- package/build/utils/utils-verify/typecheck.d.ts +61 -0
- package/build/utils/utils-verify/typecheck.js +338 -0
- package/build/utils/utils-verify/verify.d.ts +79 -3
- package/build/utils/utils-verify/verify.js +531 -61
- package/build/utils/versions.d.ts +3 -3
- package/build/utils/versions.js +1 -1
- package/build/utils/workspaceAuth.js +107 -37
- package/build/workspace/queryParamResolution.js +11 -4
- package/build/workspace/workspace.d.ts +72 -52
- package/build/workspace/workspace.js +19 -15
- package/node_modules/playwright/ThirdPartyNotices.txt +19 -19
- package/node_modules/playwright/lib/mcp/skyramp/assertTool.js +8 -2
- package/node_modules/playwright/lib/mcp/skyramp/common/cssValue.js +87 -0
- package/node_modules/playwright/lib/mcp/skyramp/loadTraceTool.js +31 -0
- package/node_modules/playwright/lib/mcp/skyramp/skyRampImport.js +3 -0
- package/node_modules/playwright/lib/mcp/skyramp/traceRecordingBackend.js +181 -15
- package/node_modules/playwright/lib/mcp/test/skyRampExport.js +24 -0
- package/node_modules/playwright/lib/transform/babelBundleImpl.js +2353 -190
- package/node_modules/playwright/node_modules/playwright-core/ThirdPartyNotices.txt +62 -34
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/.package-lock.json +72 -41
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/dist/serve-static.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/dist/serve-static.mjs +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/package.json +2 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/README.md +16 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/index.js +4 -20
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/read.js +17 -17
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/json.js +60 -32
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/raw.js +3 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/text.js +3 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/urlencoded.js +16 -20
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/utils.js +18 -16
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/LICENSE +22 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/README.md +71 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.d.ts +46 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.js +176 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.js.map +1 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/package.json +52 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/package.json +23 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/CHANGELOG.md +21 -14
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/isObject.d.ts +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/package.json +6 -7
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/tsconfig.json +1 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/index.js +266 -45
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/lib/schemes.js +9 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/lib/utils.js +396 -92
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/package.json +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/component-safe-serialization.test.js +163 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/equal.test.js +31 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/fixtures/uri-js-parse.json +2 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/ipv6-canonical.test.js +34 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/ipv6-validation.test.js +124 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/malformed-percent.test.js +77 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/malformed-urn.test.js +61 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/parse.test.js +7 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/query-fragment-normalization.test.js +33 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/reserved-path-normalization.test.js +109 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/scheme-validation.test.js +124 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/security-normalization.test.js +101 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/security.test.js +301 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/urn-full-input.test.js +29 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/websocket-query-preservation.test.js +24 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/CHANGELOG.md +7 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/index.d.ts +0 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/package.json +4 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/client/client.js +30 -16
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/client/utils.js +4 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/context.js +32 -13
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/accepts/accepts.js +36 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/proxy/index.js +4 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/ssg/ssg.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/ssg/utils.js +30 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/streaming/sse.js +5 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/hono-base.js +10 -8
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/base.js +44 -23
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/components.js +25 -26
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/context.js +5 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/dom/render.js +2 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/dom/server.js +5 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/hooks/index.js +16 -13
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +3 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/streaming.js +4 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/cache/index.js +103 -8
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/compress/index.js +5 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/cors/index.js +17 -14
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/csrf/index.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/etag/digest.js +47 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/etag/index.js +7 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +9 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +9 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/language/language.js +10 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/method-not-allowed/index.js +90 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +3 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/secure-headers/secure-headers.js +16 -7
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/request.js +20 -13
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/linear-router/router.js +7 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/pattern-router/router.js +3 -9
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +65 -59
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +71 -128
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +14 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/trie-router/node.js +47 -70
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/trie-router/router.js +3 -11
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/utils.js +27 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/accept.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/body.js +21 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/cookie.js +4 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/ipaddr.js +5 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/stream.js +12 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/url.js +19 -11
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/client/client.js +30 -16
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/client/utils.js +4 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/context.js +32 -13
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/accepts/accepts.js +36 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/proxy/index.js +4 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/ssg/ssg.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/ssg/utils.js +30 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/streaming/sse.js +5 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/hono-base.js +10 -8
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/base.js +41 -23
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/components.js +26 -27
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/context.js +6 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/dom/render.js +2 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/dom/server.js +5 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/hooks/index.js +16 -13
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/intrinsic-element/components.js +4 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/streaming.js +5 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/cache/index.js +103 -8
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/compress/index.js +5 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/cors/index.js +17 -14
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/csrf/index.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/etag/digest.js +47 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/etag/index.js +7 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/jwk/jwk.js +9 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/jwt/jwt.js +9 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/language/language.js +10 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/method-not-allowed/index.js +68 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/pretty-json/index.js +3 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/secure-headers/secure-headers.js +16 -7
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/request.js +21 -14
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/linear-router/router.js +7 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/pattern-router/router.js +3 -9
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/node.js +61 -58
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/router.js +77 -129
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/trie.js +14 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/trie-router/node.js +47 -70
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/trie-router/router.js +3 -11
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/utils.js +5 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/adapter/aws-lambda/types.d.ts +9 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/client/types.d.ts +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/context.d.ts +6 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/hono-base.d.ts +4 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/base.d.ts +7 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/index.d.ts +5 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/intrinsic-element/components.d.ts +2 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/server.d.ts +5 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/hooks/index.d.ts +8 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/index.d.ts +5 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/cache/index.d.ts +6 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/combine/index.d.ts +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/cors/index.d.ts +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +2 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jwk/jwk.d.ts +2 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jwt/jwt.d.ts +2 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/method-not-allowed/index.d.ts +49 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/secure-headers/permissions-policy.d.ts +3 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +4 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +2 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/trie-router/node.d.ts +1 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/trie-router/router.d.ts +0 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/utils.d.ts +1 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router.d.ts +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/utils/headers.d.ts +2 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/utils/url.d.ts +5 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/accept.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/body.js +21 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/cookie.js +5 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/ipaddr.js +5 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/stream.js +12 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/url.js +17 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/package.json +11 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/README.md +173 -143
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/address-error.d.ts +11 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/address-error.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.d.ts +49 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.js +79 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.d.ts +78 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.js +119 -24
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.d.ts +151 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.js +316 -90
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.d.ts +12 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.js +45 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.d.ts +14 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.js +50 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/package.json +6 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/.github/THREAT_MODEL.md +3 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/CHANGELOG.md +26 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/README.md +19 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/dist/qs.js +25 -25
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/eslint.config.mjs +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/parse.js +16 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/stringify.js +23 -8
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/utils.js +57 -11
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/package.json +8 -7
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/parse.js +419 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/stringify.js +317 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/utils.js +206 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/CHANGELOG.md +10 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/README.md +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/index.js +5 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/package.json +10 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/test/index.js +16 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/index.js +8 -18
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/LICENSE +22 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/README.md +71 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.d.ts +46 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.js +176 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.js.map +1 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/package.json +52 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/package.json +9 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/package-lock.json +72 -41
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/.package-lock.json +6 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/README.md +23 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/index.js +265 -86
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/package.json +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/README.md +173 -143
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/address-error.d.ts +11 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/address-error.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.d.ts +49 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.js +79 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.d.ts +78 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.js +119 -24
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.d.ts +151 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.js +316 -90
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.d.ts +12 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.js +45 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.d.ts +14 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.js +50 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/package.json +6 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/package-lock.json +6 -6
- package/node_modules/playwright/node_modules/playwright-core/lib/cli/program.js +18 -9
- package/node_modules/playwright/node_modules/playwright-core/lib/mcpBundleImpl/index.js +47 -47
- package/node_modules/playwright/node_modules/playwright-core/lib/server/codegen/skyramp/jsonlReader.js +3 -0
- package/node_modules/playwright/node_modules/playwright-core/lib/server/recorder/recorderRunner.js +42 -0
- package/node_modules/playwright/node_modules/playwright-core/lib/utilsBundleImpl/index.js +121 -121
- package/node_modules/playwright/node_modules/playwright-core/lib/vite/traceViewer/{index.B7KbSQcC.js → index.BAkLd5DX.js} +1 -1
- package/node_modules/playwright/node_modules/playwright-core/lib/vite/traceViewer/index.html +1 -1
- package/node_modules/playwright/node_modules/playwright-core/package.json +1 -1
- package/node_modules/playwright/node_modules/playwright-core/src/cli/program.ts +31 -9
- package/node_modules/playwright/node_modules/playwright-core/src/server/codegen/skyramp/jsonlReader.ts +1 -0
- package/node_modules/playwright/node_modules/playwright-core/src/server/recorder/recorderRunner.ts +57 -1
- package/node_modules/playwright/package.json +2 -2
- package/package.json +7 -6
- package/plugin/prompts/code-reuse/hand-off.md +30 -0
- package/plugin/prompts/generate-tests/generation.md +1 -1
- package/plugin/prompts/plan-tests.md +14 -14
- package/plugin/prompts/testbot-task1.md +2 -2
- package/plugin/skills/enhance-assertions/SKILL.md +25 -0
- package/plugin/skills/enhance-assertions/reference/contract.md +51 -0
- package/plugin/skills/enhance-assertions/reference/integration.md +58 -0
- package/plugin/skills/enhance-assertions/reference/shared-rules.md +220 -0
- package/plugin/skills/enhance-assertions/reference/ui.md +373 -0
- package/plugin/skills/fix-test-import-errors/SKILL.md +45 -50
- package/plugin/skills/run-test/SKILL.md +16 -0
- package/plugin/skills/validate-assertion-alignment-post-execution/SKILL.md +32 -0
- package/plugin/skills/validate-assertion-alignment-post-execution/reference/checks.md +44 -0
- package/plugin/skills/validate-assertion-alignment-post-execution/reference/evidence.md +47 -0
- package/build/adapters/jestAdapter.d.ts +0 -14
- package/build/adapters/jestAdapter.js +0 -113
- package/build/adapters/mochaAdapter.d.ts +0 -13
- package/build/adapters/mochaAdapter.js +0 -87
- package/build/adapters/playwrightAdapter.d.ts +0 -17
- package/build/adapters/playwrightAdapter.js +0 -182
- package/build/adapters/pytestAdapter.d.ts +0 -15
- package/build/adapters/pytestAdapter.js +0 -108
- package/build/prompts/enhance-assertions/contractProviderAssertionsPrompt.d.ts +0 -2
- package/build/prompts/enhance-assertions/contractProviderAssertionsPrompt.js +0 -29
- package/build/prompts/enhance-assertions/integrationAssertionsPrompt.d.ts +0 -2
- package/build/prompts/enhance-assertions/integrationAssertionsPrompt.js +0 -36
- package/build/prompts/enhance-assertions/sharedAssertionRules.d.ts +0 -16
- package/build/prompts/enhance-assertions/sharedAssertionRules.js +0 -284
- package/build/prompts/enhance-assertions/uiAssertionsPrompt.d.ts +0 -2
- package/build/prompts/enhance-assertions/uiAssertionsPrompt.js +0 -388
- package/build/tools/runExistingTestsTool.d.ts +0 -138
- package/build/tools/runExistingTestsTool.js +0 -644
- package/build/types/ExternalTestExecution.d.ts +0 -67
- package/build/types/ExternalTestExecution.js +0 -8
- package/build/workspace/testSuites.d.ts +0 -20
- package/build/workspace/testSuites.js +0 -17
- package/node_modules/playwright/node_modules/playwright-core/.DS_Store +0 -0
|
@@ -81,12 +81,12 @@ This project incorporates components from the projects listed below. The origina
|
|
|
81
81
|
- ansi-styles@5.2.0 (https://github.com/chalk/ansi-styles)
|
|
82
82
|
- anymatch@3.1.3 (https://github.com/micromatch/anymatch)
|
|
83
83
|
- bail@2.0.2 (https://github.com/wooorm/bail)
|
|
84
|
-
- baseline-browser-mapping@2.
|
|
84
|
+
- baseline-browser-mapping@2.11.21 (https://github.com/web-platform-dx/baseline-browser-mapping)
|
|
85
85
|
- binary-extensions@2.2.0 (https://github.com/sindresorhus/binary-extensions)
|
|
86
86
|
- braces@3.0.3 (https://github.com/micromatch/braces)
|
|
87
|
-
- browserslist@4.28.
|
|
87
|
+
- browserslist@4.28.9 (https://github.com/browserslist/browserslist)
|
|
88
88
|
- buffer-from@1.1.2 (https://github.com/LinusU/buffer-from)
|
|
89
|
-
- caniuse-lite@1.0.
|
|
89
|
+
- caniuse-lite@1.0.30001810 (https://github.com/browserslist/caniuse-lite)
|
|
90
90
|
- chalk@4.1.2 (https://github.com/chalk/chalk)
|
|
91
91
|
- character-entities@2.0.2 (https://github.com/wooorm/character-entities)
|
|
92
92
|
- chokidar@3.6.0 (https://github.com/paulmillr/chokidar)
|
|
@@ -100,7 +100,7 @@ This project incorporates components from the projects listed below. The origina
|
|
|
100
100
|
- decode-named-character-reference@1.2.0 (https://github.com/wooorm/decode-named-character-reference)
|
|
101
101
|
- dequal@2.0.3 (https://github.com/lukeed/dequal)
|
|
102
102
|
- devlop@1.1.0 (https://github.com/wooorm/devlop)
|
|
103
|
-
- electron-to-chromium@1.5.
|
|
103
|
+
- electron-to-chromium@1.5.423 (https://github.com/Kilian/electron-to-chromium)
|
|
104
104
|
- enquirer@2.3.6 (https://github.com/enquirer/enquirer)
|
|
105
105
|
- escalade@3.2.0 (https://github.com/lukeed/escalade)
|
|
106
106
|
- escape-string-regexp@2.0.0 (https://github.com/sindresorhus/escape-string-regexp)
|
|
@@ -152,7 +152,7 @@ This project incorporates components from the projects listed below. The origina
|
|
|
152
152
|
- micromark@4.0.2 (https://github.com/micromark/micromark/tree/main/packages/micromark)
|
|
153
153
|
- micromatch@4.0.8 (https://github.com/micromatch/micromatch)
|
|
154
154
|
- ms@2.1.3 (https://github.com/vercel/ms)
|
|
155
|
-
- node-releases@2.0.
|
|
155
|
+
- node-releases@2.0.54 (https://github.com/chicoxyzzy/node-releases)
|
|
156
156
|
- normalize-path@3.0.0 (https://github.com/jonschlinkert/normalize-path)
|
|
157
157
|
- picocolors@1.1.1 (https://github.com/alexeyraspopov/picocolors)
|
|
158
158
|
- picomatch@2.3.2 (https://github.com/micromatch/picomatch)
|
|
@@ -173,7 +173,7 @@ This project incorporates components from the projects listed below. The origina
|
|
|
173
173
|
- undici-types@7.16.0 (https://github.com/nodejs/undici)
|
|
174
174
|
- unified@11.0.5 (https://github.com/unifiedjs/unified)
|
|
175
175
|
- unist-util-stringify-position@4.0.0 (https://github.com/syntax-tree/unist-util-stringify-position)
|
|
176
|
-
- update-browserslist-db@1.2
|
|
176
|
+
- update-browserslist-db@1.3.2 (https://github.com/browserslist/update-db)
|
|
177
177
|
- vfile-message@4.0.3 (https://github.com/vfile/vfile-message)
|
|
178
178
|
- vfile@6.0.3 (https://github.com/vfile/vfile)
|
|
179
179
|
- yallist@3.1.1 (https://github.com/isaacs/yallist)
|
|
@@ -2198,7 +2198,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
2198
2198
|
=========================================
|
|
2199
2199
|
END OF bail@2.0.2 AND INFORMATION
|
|
2200
2200
|
|
|
2201
|
-
%% baseline-browser-mapping@2.
|
|
2201
|
+
%% baseline-browser-mapping@2.11.21 NOTICES AND INFORMATION BEGIN HERE
|
|
2202
2202
|
=========================================
|
|
2203
2203
|
Apache License
|
|
2204
2204
|
Version 2.0, January 2004
|
|
@@ -2402,7 +2402,7 @@ Apache License
|
|
|
2402
2402
|
See the License for the specific language governing permissions and
|
|
2403
2403
|
limitations under the License.
|
|
2404
2404
|
=========================================
|
|
2405
|
-
END OF baseline-browser-mapping@2.
|
|
2405
|
+
END OF baseline-browser-mapping@2.11.21 AND INFORMATION
|
|
2406
2406
|
|
|
2407
2407
|
%% binary-extensions@2.2.0 NOTICES AND INFORMATION BEGIN HERE
|
|
2408
2408
|
=========================================
|
|
@@ -2444,7 +2444,7 @@ THE SOFTWARE.
|
|
|
2444
2444
|
=========================================
|
|
2445
2445
|
END OF braces@3.0.3 AND INFORMATION
|
|
2446
2446
|
|
|
2447
|
-
%% browserslist@4.28.
|
|
2447
|
+
%% browserslist@4.28.9 NOTICES AND INFORMATION BEGIN HERE
|
|
2448
2448
|
=========================================
|
|
2449
2449
|
The MIT License (MIT)
|
|
2450
2450
|
|
|
@@ -2467,7 +2467,7 @@ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
|
2467
2467
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
2468
2468
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
2469
2469
|
=========================================
|
|
2470
|
-
END OF browserslist@4.28.
|
|
2470
|
+
END OF browserslist@4.28.9 AND INFORMATION
|
|
2471
2471
|
|
|
2472
2472
|
%% buffer-from@1.1.2 NOTICES AND INFORMATION BEGIN HERE
|
|
2473
2473
|
=========================================
|
|
@@ -2495,7 +2495,7 @@ SOFTWARE.
|
|
|
2495
2495
|
=========================================
|
|
2496
2496
|
END OF buffer-from@1.1.2 AND INFORMATION
|
|
2497
2497
|
|
|
2498
|
-
%% caniuse-lite@1.0.
|
|
2498
|
+
%% caniuse-lite@1.0.30001810 NOTICES AND INFORMATION BEGIN HERE
|
|
2499
2499
|
=========================================
|
|
2500
2500
|
Attribution 4.0 International
|
|
2501
2501
|
|
|
@@ -2893,7 +2893,7 @@ public licenses.
|
|
|
2893
2893
|
|
|
2894
2894
|
Creative Commons may be contacted at creativecommons.org.
|
|
2895
2895
|
=========================================
|
|
2896
|
-
END OF caniuse-lite@1.0.
|
|
2896
|
+
END OF caniuse-lite@1.0.30001810 AND INFORMATION
|
|
2897
2897
|
|
|
2898
2898
|
%% chalk@4.1.2 NOTICES AND INFORMATION BEGIN HERE
|
|
2899
2899
|
=========================================
|
|
@@ -3208,7 +3208,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
3208
3208
|
=========================================
|
|
3209
3209
|
END OF devlop@1.1.0 AND INFORMATION
|
|
3210
3210
|
|
|
3211
|
-
%% electron-to-chromium@1.5.
|
|
3211
|
+
%% electron-to-chromium@1.5.423 NOTICES AND INFORMATION BEGIN HERE
|
|
3212
3212
|
=========================================
|
|
3213
3213
|
Copyright 2018 Kilian Valkhof
|
|
3214
3214
|
|
|
@@ -3216,7 +3216,7 @@ Permission to use, copy, modify, and/or distribute this software for any purpose
|
|
|
3216
3216
|
|
|
3217
3217
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
3218
3218
|
=========================================
|
|
3219
|
-
END OF electron-to-chromium@1.5.
|
|
3219
|
+
END OF electron-to-chromium@1.5.423 AND INFORMATION
|
|
3220
3220
|
|
|
3221
3221
|
%% enquirer@2.3.6 NOTICES AND INFORMATION BEGIN HERE
|
|
3222
3222
|
=========================================
|
|
@@ -4472,7 +4472,7 @@ SOFTWARE.
|
|
|
4472
4472
|
=========================================
|
|
4473
4473
|
END OF ms@2.1.3 AND INFORMATION
|
|
4474
4474
|
|
|
4475
|
-
%% node-releases@2.0.
|
|
4475
|
+
%% node-releases@2.0.54 NOTICES AND INFORMATION BEGIN HERE
|
|
4476
4476
|
=========================================
|
|
4477
4477
|
The MIT License
|
|
4478
4478
|
|
|
@@ -4496,7 +4496,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
4496
4496
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
4497
4497
|
THE SOFTWARE.
|
|
4498
4498
|
=========================================
|
|
4499
|
-
END OF node-releases@2.0.
|
|
4499
|
+
END OF node-releases@2.0.54 AND INFORMATION
|
|
4500
4500
|
|
|
4501
4501
|
%% normalize-path@3.0.0 NOTICES AND INFORMATION BEGIN HERE
|
|
4502
4502
|
=========================================
|
|
@@ -4990,11 +4990,11 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
4990
4990
|
=========================================
|
|
4991
4991
|
END OF unist-util-stringify-position@4.0.0 AND INFORMATION
|
|
4992
4992
|
|
|
4993
|
-
%% update-browserslist-db@1.2
|
|
4993
|
+
%% update-browserslist-db@1.3.2 NOTICES AND INFORMATION BEGIN HERE
|
|
4994
4994
|
=========================================
|
|
4995
4995
|
The MIT License (MIT)
|
|
4996
4996
|
|
|
4997
|
-
Copyright 2022 Andrey Sitnik <andrey@sitnik.
|
|
4997
|
+
Copyright 2022 Andrey Sitnik <andrey@sitnik.es> and other contributors
|
|
4998
4998
|
|
|
4999
4999
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
5000
5000
|
this software and associated documentation files (the "Software"), to deal in
|
|
@@ -5013,7 +5013,7 @@ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
|
5013
5013
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
5014
5014
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
5015
5015
|
=========================================
|
|
5016
|
-
END OF update-browserslist-db@1.2
|
|
5016
|
+
END OF update-browserslist-db@1.3.2 AND INFORMATION
|
|
5017
5017
|
|
|
5018
5018
|
%% vfile-message@4.0.3 NOTICES AND INFORMATION BEGIN HERE
|
|
5019
5019
|
=========================================
|
|
@@ -36,13 +36,19 @@ const assertToolSchema = {
|
|
|
36
36
|
'"visible" checks the element is visible,',
|
|
37
37
|
`"count" counts elements sharing the referenced element's role (or exact text)`,
|
|
38
38
|
"across the page, e.g. ref one option of an open dropdown to assert the number of options.",
|
|
39
|
+
'"css" checks a computed style property (property "background-color", expected "rgb(37, 99, 235)"; a 3- or 6-digit #hex colour is accepted and recorded as the computed rgb),',
|
|
40
|
+
'"class" checks the element carries a class ("expected" = one class name),',
|
|
41
|
+
'"attribute" checks an attribute value ("property" = the attribute name, "expected" = its value).',
|
|
42
|
+
"Use css/class/attribute for a colour, style or class change the PR makes: a screenshot baseline created on this run cannot fail on it.",
|
|
43
|
+
'css/class/attribute are read with the pointer moved OFF the element, so a value that exists only on hover is never recorded; unlike "count", they cannot be asserted on an option of a menu that closes when the pointer leaves it.',
|
|
39
44
|
"To assert an element is absent or not visible, use `browser_assert_hidden`."
|
|
40
45
|
].join(" "),
|
|
41
46
|
inputSchema: import_mcpBundle.z.object({
|
|
42
|
-
type: import_mcpBundle.z.enum(["text", "value", "checked", "disabled", "visible", "count"]).describe(`Type of assertion: "text" for text content, "value" for input field value, "checked" for checkbox/radio state, "disabled" for disabled/enabled state ("false" asserts the element is enabled), "visible" for element visibility, "count" for the number of elements with the referenced element's role`),
|
|
47
|
+
type: import_mcpBundle.z.enum(["text", "value", "checked", "disabled", "visible", "count", "css", "class", "attribute"]).describe(`Type of assertion: "text" for text content, "value" for input field value, "checked" for checkbox/radio state, "disabled" for disabled/enabled state ("false" asserts the element is enabled), "visible" for element visibility, "count" for the number of elements with the referenced element's role, "css" for a computed style property, "class" for a class the element carries, "attribute" for an attribute value`),
|
|
43
48
|
ref: import_mcpBundle.z.string().describe('Element reference from the latest snapshot. For "count", reference one exemplar element (e.g. one option in an open dropdown).'),
|
|
44
49
|
element: import_mcpBundle.z.string().describe("Human-readable description of the element being asserted"),
|
|
45
|
-
|
|
50
|
+
property: import_mcpBundle.z.string().optional().describe('For "css": the CSS property (e.g. "background-color", "flex-direction"). For "attribute": the attribute name (e.g. "aria-expanded", "data-state"). Not used by other types.'),
|
|
51
|
+
expected: import_mcpBundle.z.string().optional().describe('Expected text or value ("text"/"value"), "true"/"false" ("checked"/"disabled", default "true"; "disabled" with "false" asserts enabled), the expected element count ("count"), the computed style value ("css"; a 3- or 6-digit #hex colour is converted to rgb), one class name ("class"), the attribute value ("attribute"). Not used for "visible".'),
|
|
46
52
|
substring: import_mcpBundle.z.boolean().optional().default(true).describe("For text assertions: match as substring (true) or exact match (false)")
|
|
47
53
|
}),
|
|
48
54
|
type: "readOnly"
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var cssValue_exports = {};
|
|
20
|
+
__export(cssValue_exports, {
|
|
21
|
+
normalizeCssValue: () => normalizeCssValue
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(cssValue_exports);
|
|
24
|
+
const CASE_SENSITIVE_IDENT_PROPERTIES = /* @__PURE__ */ new Set([
|
|
25
|
+
"animation",
|
|
26
|
+
"animation-name",
|
|
27
|
+
"animation-timeline",
|
|
28
|
+
"transition",
|
|
29
|
+
"transition-property",
|
|
30
|
+
"will-change",
|
|
31
|
+
"grid",
|
|
32
|
+
"grid-area",
|
|
33
|
+
"grid-row",
|
|
34
|
+
"grid-column",
|
|
35
|
+
"grid-row-start",
|
|
36
|
+
"grid-row-end",
|
|
37
|
+
"grid-column-start",
|
|
38
|
+
"grid-column-end",
|
|
39
|
+
"grid-template-areas",
|
|
40
|
+
"grid-template-rows",
|
|
41
|
+
"grid-template-columns",
|
|
42
|
+
"grid-template",
|
|
43
|
+
"counter-increment",
|
|
44
|
+
"counter-reset",
|
|
45
|
+
"counter-set",
|
|
46
|
+
"list-style",
|
|
47
|
+
"list-style-type",
|
|
48
|
+
"container-name",
|
|
49
|
+
"container",
|
|
50
|
+
"view-transition-name",
|
|
51
|
+
"view-transition-class",
|
|
52
|
+
"anchor-name",
|
|
53
|
+
"position-anchor",
|
|
54
|
+
"position-try",
|
|
55
|
+
"position-try-fallbacks",
|
|
56
|
+
"font-palette",
|
|
57
|
+
"scroll-timeline",
|
|
58
|
+
"scroll-timeline-name",
|
|
59
|
+
"view-timeline",
|
|
60
|
+
"view-timeline-name",
|
|
61
|
+
"timeline-scope",
|
|
62
|
+
"page"
|
|
63
|
+
]);
|
|
64
|
+
function foldCaseKeepingDashedIdents(value) {
|
|
65
|
+
return value.replace(/[^\s,()]+/g, (token) => token.startsWith("--") ? token : token.toLowerCase());
|
|
66
|
+
}
|
|
67
|
+
function normalizeCssValue(value, property) {
|
|
68
|
+
const trimmed = value.trim();
|
|
69
|
+
if (/["']|url\(|var\(/i.test(trimmed))
|
|
70
|
+
return trimmed;
|
|
71
|
+
const prop = property?.trim().toLowerCase();
|
|
72
|
+
if (prop && (prop.startsWith("--") || CASE_SENSITIVE_IDENT_PROPERTIES.has(prop)))
|
|
73
|
+
return trimmed.replace(/\s+/g, " ").replace(/,\s*/g, ", ");
|
|
74
|
+
const v = foldCaseKeepingDashedIdents(trimmed.replace(/\s+/g, " "));
|
|
75
|
+
const hex = v.match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/);
|
|
76
|
+
if (!hex)
|
|
77
|
+
return v.replace(/,\s*/g, ", ");
|
|
78
|
+
const h = hex[1].length === 3 ? hex[1].split("").map((c) => c + c).join("") : hex[1];
|
|
79
|
+
const r = parseInt(h.slice(0, 2), 16);
|
|
80
|
+
const g = parseInt(h.slice(2, 4), 16);
|
|
81
|
+
const b = parseInt(h.slice(4, 6), 16);
|
|
82
|
+
return `rgb(${r}, ${g}, ${b})`;
|
|
83
|
+
}
|
|
84
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
85
|
+
0 && (module.exports = {
|
|
86
|
+
normalizeCssValue
|
|
87
|
+
});
|
|
@@ -31,6 +31,7 @@ module.exports = __toCommonJS(loadTraceTool_exports);
|
|
|
31
31
|
var import_mcpBundle = require("playwright-core/lib/mcpBundle");
|
|
32
32
|
var import_utils = require("playwright-core/lib/utils");
|
|
33
33
|
var import_tool = require("../sdk/tool");
|
|
34
|
+
var import_cssValue = require("./common/cssValue");
|
|
34
35
|
var import_mouseActions = require("./common/mouseActions");
|
|
35
36
|
const loadTraceSchema = {
|
|
36
37
|
name: "skyramp_load_trace",
|
|
@@ -106,6 +107,12 @@ function describeStep(action, index) {
|
|
|
106
107
|
detail += ` = ${JSON.stringify(a.text)}`;
|
|
107
108
|
else if (a.name === "assertValue" && a.value !== void 0)
|
|
108
109
|
detail += ` = ${JSON.stringify(a.value)}`;
|
|
110
|
+
else if (a.name === "assertCSS")
|
|
111
|
+
detail += ` ${a.cssName} = ${JSON.stringify(a.cssValue)}`;
|
|
112
|
+
else if (a.name === "assertClass")
|
|
113
|
+
detail += ` .${a.className}`;
|
|
114
|
+
else if (a.name === "assertAttribute")
|
|
115
|
+
detail += ` [${a.attrName}=${JSON.stringify(a.attrValue)}]`;
|
|
109
116
|
else if (a.name === "press" && a.key !== void 0)
|
|
110
117
|
detail += ` ${a.key}`;
|
|
111
118
|
else if (a.name === "visualSnapshot")
|
|
@@ -358,6 +365,30 @@ async function performClientAction(page, actionInContext) {
|
|
|
358
365
|
throw new Error(`assertValue failed: expected ${JSON.stringify(action.value)}, got ${JSON.stringify(actual)}`);
|
|
359
366
|
return;
|
|
360
367
|
}
|
|
368
|
+
// SKYR-4462: appearance assertions read the live element. Class and
|
|
369
|
+
// attribute match codegen's toHaveClass / toHaveAttribute exactly; the css
|
|
370
|
+
// replay normalises both sides (see common/cssValue), so it is more lenient
|
|
371
|
+
// than the generated toHaveCSS, which compares the computed string as is.
|
|
372
|
+
// The recorder writes the computed value, so the two agree on every
|
|
373
|
+
// recorded trace; the difference shows only on a hand-edited cssValue.
|
|
374
|
+
case "assertCSS": {
|
|
375
|
+
const actual = (await locator.evaluate((el, prop) => getComputedStyle(el).getPropertyValue(prop), String(action.cssName), opts)).trim();
|
|
376
|
+
if ((0, import_cssValue.normalizeCssValue)(actual, String(action.cssName)) !== (0, import_cssValue.normalizeCssValue)(String(action.cssValue), String(action.cssName)))
|
|
377
|
+
throw new Error(`assertCSS failed: expected ${action.cssName} ${JSON.stringify(action.cssValue)}, got ${JSON.stringify(actual)}`);
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
380
|
+
case "assertClass": {
|
|
381
|
+
const classes = await locator.evaluate((el) => Array.from(el.classList), void 0, opts);
|
|
382
|
+
if (!classes.includes(String(action.className)))
|
|
383
|
+
throw new Error(`assertClass failed: expected class ${JSON.stringify(action.className)}, got [${classes.join(" ")}]`);
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
case "assertAttribute": {
|
|
387
|
+
const actual = await locator.evaluate((el, attr) => el.getAttribute(attr), String(action.attrName), opts);
|
|
388
|
+
if (actual !== action.attrValue)
|
|
389
|
+
throw new Error(`assertAttribute failed: expected ${action.attrName}=${JSON.stringify(action.attrValue)}, got ${JSON.stringify(actual)}`);
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
361
392
|
case "assertChecked": {
|
|
362
393
|
const checked = await locator.isChecked(opts);
|
|
363
394
|
if (checked !== !!action.checked)
|
|
@@ -53,6 +53,7 @@ var import_resultCode = require("./resultCode");
|
|
|
53
53
|
var import_mouseActionTool = require("./mouseActionTool");
|
|
54
54
|
var import_visualSnapshotTool = require("./visualSnapshotTool");
|
|
55
55
|
var import_gojsTool = require("./gojsTool");
|
|
56
|
+
var import_cssValue = require("./common/cssValue");
|
|
56
57
|
var import_visualSnapshot = require("./common/visualSnapshot");
|
|
57
58
|
var import_tableAssertTool = require("./tableAssertTool");
|
|
58
59
|
var import_tableSelectorBuilder = require("./tableSelectorBuilder");
|
|
@@ -80,6 +81,9 @@ function dropDynamicParentChain(chain) {
|
|
|
80
81
|
const m = /^locator\(['"]#(.+)['"]\)$/.exec(chain);
|
|
81
82
|
return m && (0, import_dynamicId.isDynamicId)(m[1]) ? null : chain;
|
|
82
83
|
}
|
|
84
|
+
const LIVE_READ_TIMEOUT_MS = 5e3;
|
|
85
|
+
const MAX_ANCESTOR_HOVERS = 8;
|
|
86
|
+
const ANCESTOR_WALK_BUDGET_MS = 1e4;
|
|
83
87
|
class TraceRecordingBackend {
|
|
84
88
|
// per-type baseline filename counter
|
|
85
89
|
constructor(options) {
|
|
@@ -872,6 +876,24 @@ Continue recording with browser_* tools, then call skyramp_export_zip to write t
|
|
|
872
876
|
if (typeof a.disabled !== "boolean")
|
|
873
877
|
return null;
|
|
874
878
|
return { toolName: "browser_assert", code: `assertDisabled:${a.selector}:${a.disabled}`, args: { type: "disabled", selector: a.selector, disabled: a.disabled } };
|
|
879
|
+
// SKYR-4462: appearance assertions loaded from a trace keep their fields so
|
|
880
|
+
// load-and-continue exports them again; a line missing its property or
|
|
881
|
+
// value would seed a matcher with a hole in it and is dropped instead.
|
|
882
|
+
case "assertCSS": {
|
|
883
|
+
if (typeof a.selector !== "string" || !a.selector || typeof a.cssName !== "string" || !a.cssName.trim() || typeof a.cssValue !== "string" || !a.cssValue.trim())
|
|
884
|
+
return null;
|
|
885
|
+
return { toolName: "browser_assert", code: `assertCSS:${a.selector}:${a.cssName.trim()}:${a.cssValue}`, args: { type: "css", selector: a.selector, property: a.cssName.trim(), expected: a.cssValue } };
|
|
886
|
+
}
|
|
887
|
+
case "assertClass": {
|
|
888
|
+
if (typeof a.selector !== "string" || !a.selector || typeof a.className !== "string" || !a.className.trim())
|
|
889
|
+
return null;
|
|
890
|
+
return { toolName: "browser_assert", code: `assertClass:${a.selector}:${a.className.trim()}`, args: { type: "class", selector: a.selector, expected: a.className.trim() } };
|
|
891
|
+
}
|
|
892
|
+
case "assertAttribute": {
|
|
893
|
+
if (typeof a.selector !== "string" || !a.selector || typeof a.attrName !== "string" || !a.attrName.trim() || typeof a.attrValue !== "string")
|
|
894
|
+
return null;
|
|
895
|
+
return { toolName: "browser_assert", code: `assertAttribute:${a.selector}:${a.attrName.trim()}:${a.attrValue}`, args: { type: "attribute", selector: a.selector, property: a.attrName.trim(), expected: a.attrValue } };
|
|
896
|
+
}
|
|
875
897
|
case "assertCount":
|
|
876
898
|
if (typeof a.count !== "number" || !Number.isInteger(a.count) || a.count < 0)
|
|
877
899
|
return null;
|
|
@@ -1276,13 +1298,25 @@ Linked GoJS nodes ${params.fromKey} \u2192 ${params.toKey} (${params.fromPort}\u
|
|
|
1276
1298
|
}
|
|
1277
1299
|
/**
|
|
1278
1300
|
* Handle browser_assert by using browser_hover to resolve the ref to a
|
|
1279
|
-
* proper Playwright selector (testid > role > text), then verify
|
|
1280
|
-
*
|
|
1301
|
+
* proper Playwright selector (testid > role > text), then verify
|
|
1302
|
+
* text/value/checked/disabled/visible/count against the snapshot data, and
|
|
1303
|
+
* css/class/attribute against the live element (getComputedStyle / classList
|
|
1304
|
+
* / getAttribute, read with the pointer moved off the element). Only passing
|
|
1305
|
+
* assertions are recorded.
|
|
1281
1306
|
*/
|
|
1282
1307
|
async _handleAssert(params) {
|
|
1283
1308
|
const timestamp = Date.now();
|
|
1284
1309
|
if (!params.expected && (params.type === "text" || params.type === "value" || params.type === "count"))
|
|
1285
1310
|
return { content: [{ type: "text", text: '### Error\n"expected" parameter is required.' }], isError: true };
|
|
1311
|
+
if ((params.type === "css" || params.type === "class") && !params.expected?.trim())
|
|
1312
|
+
return { content: [{ type: "text", text: '### Error\n"expected" parameter is required and must not be blank.' }], isError: true };
|
|
1313
|
+
if (params.type === "attribute" && params.expected === void 0)
|
|
1314
|
+
return { content: [{ type: "text", text: '### Error\n"expected" parameter is required (an empty string is a valid attribute value).' }], isError: true };
|
|
1315
|
+
if ((params.type === "css" || params.type === "attribute") && !params.property?.trim())
|
|
1316
|
+
return { content: [{ type: "text", text: `### Error
|
|
1317
|
+
For "${params.type}" assertions, "property" (the ${params.type === "css" ? "CSS property" : "attribute name"}) is required.` }], isError: true };
|
|
1318
|
+
if (params.type === "class" && /\s/.test(params.expected.trim()))
|
|
1319
|
+
return { content: [{ type: "text", text: '### Error\nFor "class" assertions, "expected" is one class name; call once per class.' }], isError: true };
|
|
1286
1320
|
if (params.type === "count" && !/^\d+$/.test(params.expected))
|
|
1287
1321
|
return { content: [{ type: "text", text: '### Error\nFor "count" assertions, "expected" must be a non-negative integer.' }], isError: true };
|
|
1288
1322
|
if ((params.type === "checked" || params.type === "disabled") && params.expected !== void 0 && params.expected !== "true" && params.expected !== "false")
|
|
@@ -1329,17 +1363,101 @@ Could not parse locator: ${locatorExpr}` }], isError: true };
|
|
|
1329
1363
|
const elementText = textMatch?.[1] || "";
|
|
1330
1364
|
const valueMatch = refLine.match(/\]:\s*(.+)$/);
|
|
1331
1365
|
const elementValue = valueMatch?.[1]?.trim() || "";
|
|
1332
|
-
if (parsed.locator.kind === "text") {
|
|
1333
|
-
const improved = await this._improveTextSelector(snapLines, params.ref, parsed);
|
|
1334
|
-
if (improved) {
|
|
1335
|
-
traceDebug(`Improved ambiguous text selector to: ${improved.selector}`);
|
|
1336
|
-
parsed = improved;
|
|
1337
|
-
}
|
|
1338
|
-
}
|
|
1339
1366
|
let passed = false;
|
|
1340
1367
|
let details = "";
|
|
1341
1368
|
let countSelector = "";
|
|
1342
|
-
|
|
1369
|
+
let liveValue;
|
|
1370
|
+
let unhoverMove;
|
|
1371
|
+
if (params.type === "css" || params.type === "class" || params.type === "attribute") {
|
|
1372
|
+
const tab = this._browserBackend.context?.currentTab();
|
|
1373
|
+
if (!tab)
|
|
1374
|
+
return { content: [{ type: "text", text: "### Assertion Failed\nNo active page." }], isError: true };
|
|
1375
|
+
const notReady = await this._requireLoadedPage(tab, "domcontentloaded");
|
|
1376
|
+
if (notReady)
|
|
1377
|
+
return notReady;
|
|
1378
|
+
if (parsed.locator.kind === "text") {
|
|
1379
|
+
const improved = await this._improveTextSelector(snapLines, params.ref, parsed);
|
|
1380
|
+
if (improved) {
|
|
1381
|
+
traceDebug(`Improved ambiguous text selector before live read: ${improved.selector}`);
|
|
1382
|
+
parsed = improved;
|
|
1383
|
+
}
|
|
1384
|
+
}
|
|
1385
|
+
const live = tab.page.locator(parsed.selector);
|
|
1386
|
+
const kind = params.type;
|
|
1387
|
+
const name = kind === "class" ? "" : params.property.trim();
|
|
1388
|
+
const read = () => live.evaluate((el, a) => {
|
|
1389
|
+
const e = el;
|
|
1390
|
+
const r = e.getBoundingClientRect();
|
|
1391
|
+
const hovered = e.matches(":hover");
|
|
1392
|
+
let value = null;
|
|
1393
|
+
let unknownProperty = false;
|
|
1394
|
+
if (a.kind === "css") {
|
|
1395
|
+
const css = globalThis.CSS;
|
|
1396
|
+
const supported = a.name.startsWith("--") || !css?.supports || css.supports(a.name, "initial");
|
|
1397
|
+
if (!supported)
|
|
1398
|
+
unknownProperty = true;
|
|
1399
|
+
else
|
|
1400
|
+
value = getComputedStyle(e).getPropertyValue(a.name).trim();
|
|
1401
|
+
} else if (a.kind === "class") {
|
|
1402
|
+
value = Array.from(e.classList).join(" ");
|
|
1403
|
+
} else {
|
|
1404
|
+
value = e.getAttribute(a.name);
|
|
1405
|
+
}
|
|
1406
|
+
return { value, hovered, unknownProperty, rect: { left: r.left, top: r.top, right: r.right, bottom: r.bottom }, vw: window.innerWidth, vh: window.innerHeight };
|
|
1407
|
+
}, { kind, name }, { timeout: LIVE_READ_TIMEOUT_MS });
|
|
1408
|
+
try {
|
|
1409
|
+
let reading = await read();
|
|
1410
|
+
if (reading.hovered) {
|
|
1411
|
+
const { rect, vw, vh } = reading;
|
|
1412
|
+
const clamp = (v, lo, hi) => Math.min(Math.max(v, lo), hi);
|
|
1413
|
+
const midX = clamp((rect.left + rect.right) / 2, 1, vw - 1);
|
|
1414
|
+
const midY = clamp((rect.top + rect.bottom) / 2, 1, vh - 1);
|
|
1415
|
+
const target = rect.bottom + 8 < vh ? { x: midX, y: rect.bottom + 8 } : rect.top - 8 >= 0 ? { x: midX, y: rect.top - 8 } : rect.right + 8 < vw ? { x: rect.right + 8, y: midY } : rect.left - 8 >= 0 ? { x: rect.left - 8, y: midY } : null;
|
|
1416
|
+
if (target) {
|
|
1417
|
+
let moved = true;
|
|
1418
|
+
await tab.page.mouse.move(target.x, target.y).catch((e) => {
|
|
1419
|
+
moved = false;
|
|
1420
|
+
traceDebug(`un-hover move failed: ${e.message}`);
|
|
1421
|
+
});
|
|
1422
|
+
reading = await read();
|
|
1423
|
+
if (moved && !reading.hovered)
|
|
1424
|
+
unhoverMove = target;
|
|
1425
|
+
}
|
|
1426
|
+
if (reading.hovered)
|
|
1427
|
+
return { content: [{ type: "text", text: `### Error
|
|
1428
|
+
Could not read the un-hovered state of "${params.element}": the pointer could not be moved off it (it fills the viewport, or the move failed). A :hover-dependent value would be recorded wrongly \u2014 assert a property the hover does not change, or use a wider element.` }], isError: true };
|
|
1429
|
+
}
|
|
1430
|
+
if (kind === "css") {
|
|
1431
|
+
if (reading.unknownProperty)
|
|
1432
|
+
return { content: [{ type: "text", text: `### Error
|
|
1433
|
+
"${name}" is not a CSS property this browser knows; check the spelling (e.g. "flex-direction", "background-color").` }], isError: true };
|
|
1434
|
+
const actual = reading.value ?? "";
|
|
1435
|
+
passed = (0, import_cssValue.normalizeCssValue)(actual, name) === (0, import_cssValue.normalizeCssValue)(params.expected, name);
|
|
1436
|
+
liveValue = actual;
|
|
1437
|
+
details = passed ? `CSS assertion passed: "${params.element}" has ${name}: ${actual}.` : `CSS assertion FAILED: "${params.element}" has ${name}: ${actual || "(empty)"}, expected ${params.expected}.`;
|
|
1438
|
+
} else if (kind === "class") {
|
|
1439
|
+
const className = params.expected.trim();
|
|
1440
|
+
const classes = (reading.value ?? "").split(" ").filter(Boolean);
|
|
1441
|
+
passed = classes.includes(className);
|
|
1442
|
+
details = passed ? `Class assertion passed: "${params.element}" carries class "${className}".` : `Class assertion FAILED: "${params.element}" has classes [${classes.join(" ")}], expected "${className}".`;
|
|
1443
|
+
} else {
|
|
1444
|
+
const actual = reading.value;
|
|
1445
|
+
passed = actual !== null && actual === params.expected;
|
|
1446
|
+
liveValue = actual ?? void 0;
|
|
1447
|
+
details = passed ? `Attribute assertion passed: "${params.element}" has ${name}="${actual}".` : `Attribute assertion FAILED: "${params.element}" has ${name}=${actual === null ? "(absent)" : `"${actual}"`}, expected "${params.expected}".`;
|
|
1448
|
+
}
|
|
1449
|
+
} catch (e) {
|
|
1450
|
+
const msg = String(e?.message ?? e);
|
|
1451
|
+
if (/strict mode violation/i.test(msg))
|
|
1452
|
+
return { content: [{ type: "text", text: `### Error
|
|
1453
|
+
Target ${parsed.selector} matches multiple elements, so the ${kind} read is ambiguous. Use a more specific target (a data-testid, or role + exact name). ${msg.split("\n")[0]}` }], isError: true };
|
|
1454
|
+
if (e?.name === "TimeoutError")
|
|
1455
|
+
return { content: [{ type: "text", text: `### Error
|
|
1456
|
+
"${params.element}" (${parsed.selector}) did not resolve within ${LIVE_READ_TIMEOUT_MS} ms. Re-snapshot and retry with a fresh ref.` }], isError: true };
|
|
1457
|
+
return { content: [{ type: "text", text: `### Error
|
|
1458
|
+
Could not read ${kind} of "${params.element}": ${msg}` }], isError: true };
|
|
1459
|
+
}
|
|
1460
|
+
} else if (params.type === "text") {
|
|
1343
1461
|
passed = elementText.includes(params.expected) || elementValue.includes(params.expected);
|
|
1344
1462
|
details = passed ? `Text assertion passed: "${params.element}" contains "${params.expected}".` : `Text assertion FAILED: "${params.element}" has text "${elementText}"${elementValue ? ` / value "${elementValue}"` : ""}, expected "${params.expected}".`;
|
|
1345
1463
|
} else if (params.type === "value") {
|
|
@@ -1399,6 +1517,13 @@ Could not count "${refRole}" elements: ${e.message}` }], isError: true };
|
|
|
1399
1517
|
if (tautological) {
|
|
1400
1518
|
traceDebug(`Skipped tautological assertion: selector already matches "${recordedExpected}"`);
|
|
1401
1519
|
} else {
|
|
1520
|
+
if (parsed.locator.kind === "text" && params.type !== "count" && params.type !== "css" && params.type !== "class" && params.type !== "attribute") {
|
|
1521
|
+
const improved = await this._improveTextSelector(snapLines, params.ref, parsed);
|
|
1522
|
+
if (improved) {
|
|
1523
|
+
traceDebug(`Improved ambiguous text selector to: ${improved.selector}`);
|
|
1524
|
+
parsed = improved;
|
|
1525
|
+
}
|
|
1526
|
+
}
|
|
1402
1527
|
let assertName;
|
|
1403
1528
|
let args;
|
|
1404
1529
|
let code;
|
|
@@ -1432,13 +1557,30 @@ Could not count "${refRole}" elements: ${e.message}` }], isError: true };
|
|
|
1432
1557
|
args = { type: "value", ref: params.ref, selector: parsed.selector, expected: recordedExpected };
|
|
1433
1558
|
code = `assertValue:${parsed.selector}:${recordedExpected}`;
|
|
1434
1559
|
break;
|
|
1560
|
+
case "css":
|
|
1561
|
+
assertName = "assertCSS";
|
|
1562
|
+
args = { type: "css", ref: params.ref, selector: parsed.selector, property: params.property.trim(), expected: liveValue ?? params.expected };
|
|
1563
|
+
code = `assertCSS:${parsed.selector}:${params.property.trim()}:${liveValue ?? params.expected}`;
|
|
1564
|
+
break;
|
|
1565
|
+
case "class":
|
|
1566
|
+
assertName = "assertClass";
|
|
1567
|
+
args = { type: "class", ref: params.ref, selector: parsed.selector, expected: params.expected.trim() };
|
|
1568
|
+
code = `assertClass:${parsed.selector}:${params.expected.trim()}`;
|
|
1569
|
+
break;
|
|
1570
|
+
case "attribute":
|
|
1571
|
+
assertName = "assertAttribute";
|
|
1572
|
+
args = { type: "attribute", ref: params.ref, selector: parsed.selector, property: params.property.trim(), expected: liveValue ?? params.expected };
|
|
1573
|
+
code = `assertAttribute:${parsed.selector}:${params.property.trim()}:${liveValue ?? params.expected}`;
|
|
1574
|
+
break;
|
|
1435
1575
|
default:
|
|
1436
1576
|
assertName = "assertText";
|
|
1437
1577
|
args = { type: "text", ref: params.ref, selector: parsed.selector, expected: recordedExpected, substring: params.substring };
|
|
1438
1578
|
code = `assertText:${parsed.selector}:${recordedExpected}:${params.substring}`;
|
|
1439
1579
|
break;
|
|
1440
1580
|
}
|
|
1441
|
-
|
|
1581
|
+
if (unhoverMove)
|
|
1582
|
+
this._trackedActions.push({ toolName: "browser_mouse_action", args: { name: "mouse.move", position: unhoverMove }, code: "", timestamp: timestamp - 1, pageAlias: this._currentPageAlias });
|
|
1583
|
+
this._trackedActions.push({ toolName: "browser_assert", args, code, timestamp, pageAlias: this._currentPageAlias });
|
|
1442
1584
|
traceDebug(`Assert: ${assertName} with selector ${args.selector}`);
|
|
1443
1585
|
}
|
|
1444
1586
|
}
|
|
@@ -1670,7 +1812,7 @@ ${text}` }], isError: true });
|
|
|
1670
1812
|
let details;
|
|
1671
1813
|
if (passed) {
|
|
1672
1814
|
details = `Hidden assertion passed: "${params.element}" is absent or not visible.`;
|
|
1673
|
-
this._trackedActions.push({ toolName: "browser_assert", args: { type: "hidden", selector, locator }, code: `assertHidden:${selector}`, timestamp });
|
|
1815
|
+
this._trackedActions.push({ toolName: "browser_assert", args: { type: "hidden", selector, locator }, code: `assertHidden:${selector}`, timestamp, pageAlias: this._currentPageAlias });
|
|
1674
1816
|
traceDebug(`Assert: assertHidden with selector ${selector}`);
|
|
1675
1817
|
} else {
|
|
1676
1818
|
const count = await tab.page.locator(selector).count().catch(() => -1);
|
|
@@ -1730,7 +1872,10 @@ ${details}` }] };
|
|
|
1730
1872
|
*/
|
|
1731
1873
|
async _improveTextSelector(snapLines, ref, original) {
|
|
1732
1874
|
const textBody = original.locator.body;
|
|
1733
|
-
const occurrences = snapLines.filter((l) =>
|
|
1875
|
+
const occurrences = snapLines.filter((l) => {
|
|
1876
|
+
const lineText = TraceRecordingBackend._snapshotLineText(l);
|
|
1877
|
+
return lineText !== null && lineText.includes(textBody);
|
|
1878
|
+
}).length;
|
|
1734
1879
|
if (occurrences <= 1)
|
|
1735
1880
|
return null;
|
|
1736
1881
|
traceDebug(`Text "${textBody}" appears ${occurrences} times in snapshot \u2014 looking for parent test-id`);
|
|
@@ -1738,16 +1883,24 @@ ${details}` }] };
|
|
|
1738
1883
|
const refIdx = snapLines.findIndex((l) => l.includes(refPattern));
|
|
1739
1884
|
if (refIdx < 0)
|
|
1740
1885
|
return null;
|
|
1741
|
-
|
|
1886
|
+
let currentIndent = snapLines[refIdx].match(/^(\s*)/)?.[1]?.length ?? 0;
|
|
1887
|
+
const deadline = Date.now() + ANCESTOR_WALK_BUDGET_MS;
|
|
1888
|
+
let hovers = 0;
|
|
1742
1889
|
for (let i = refIdx - 1; i >= 0; i--) {
|
|
1743
1890
|
const line = snapLines[i];
|
|
1744
1891
|
const indent = line.match(/^(\s*)/)?.[1]?.length ?? 0;
|
|
1745
|
-
if (indent >=
|
|
1892
|
+
if (indent >= currentIndent)
|
|
1746
1893
|
continue;
|
|
1747
1894
|
const ancestorRefMatch = line.match(/\[ref=(\w+)\]/);
|
|
1748
1895
|
if (!ancestorRefMatch)
|
|
1749
1896
|
continue;
|
|
1897
|
+
if (hovers >= MAX_ANCESTOR_HOVERS || Date.now() >= deadline) {
|
|
1898
|
+
traceDebug(`Ancestor walk stopped after ${hovers} hovers \u2014 depth or time budget reached`);
|
|
1899
|
+
break;
|
|
1900
|
+
}
|
|
1750
1901
|
const ancestorRef = ancestorRefMatch[1];
|
|
1902
|
+
currentIndent = indent;
|
|
1903
|
+
hovers++;
|
|
1751
1904
|
try {
|
|
1752
1905
|
const ancestorHover = await this._browserBackend.callTool("browser_hover", {
|
|
1753
1906
|
element: "parent element",
|
|
@@ -1782,6 +1935,19 @@ ${details}` }] };
|
|
|
1782
1935
|
}
|
|
1783
1936
|
return null;
|
|
1784
1937
|
}
|
|
1938
|
+
/**
|
|
1939
|
+
* Text value of an aria-snapshot line, in either form the renderer emits:
|
|
1940
|
+
* `- generic "foo" [ref=e1]` (quoted accessible name) or
|
|
1941
|
+
* `- generic [ref=e1]: foo` (colon-delimited text for nodes with no name).
|
|
1942
|
+
* Returns null for a line that carries no text.
|
|
1943
|
+
*/
|
|
1944
|
+
static _snapshotLineText(line) {
|
|
1945
|
+
const quoted = line.match(/^\s*-\s*\w+\s+"([^"]*)"/);
|
|
1946
|
+
if (quoted)
|
|
1947
|
+
return quoted[1];
|
|
1948
|
+
const colon = line.match(/\[ref=\w+\](?:\s*\[[^\]]*\])*\s*:\s*(.+?)\s*$/);
|
|
1949
|
+
return colon?.[1]?.trim() || null;
|
|
1950
|
+
}
|
|
1785
1951
|
static {
|
|
1786
1952
|
/** Extract selector and locator info from a snapshot line for assertion tracking. */
|
|
1787
1953
|
// Roles that map to valid Playwright getByRole() selectors.
|