@skyramp/mcp 0.4.1 → 0.4.2-rc.1
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/adapters/jestAdapter.js +23 -5
- package/build/adapters/mochaAdapter.js +7 -1
- package/build/adapters/playwrightAdapter.js +3 -1
- package/build/adapters/pytestAdapter.js +14 -3
- package/build/commands/localDevTestChangesCommand.js +1 -0
- package/build/commands/recommendTestsAndExecuteCommand.js +5 -6
- package/build/commands/testThisEndpointCommand.js +16 -4
- package/build/index.js +34 -4
- package/build/playwright/blueprintDigest.js +28 -7
- package/build/playwright/registerPlaywrightTools.js +33 -28
- package/build/playwright/traceRecordingPrompt.js +9 -2
- package/build/prompts/code-reuse.js +95 -29
- 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 +3 -1
- package/build/prompts/local-dev/local-dev-prompts.d.ts +1 -1
- package/build/prompts/local-dev/local-dev-prompts.js +30 -3
- 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 +88 -2
- package/build/prompts/shared-helper-policy.js +145 -11
- package/build/prompts/sut-setup/modes/adaptWorkflowPrompt.js +1 -1
- 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 +2 -2
- 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.js +3 -2
- 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 +7 -4
- package/build/prompts/test-recommendation/recommendationSections.js +19 -8
- 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 +123 -55
- 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 +21 -5
- 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/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 -0
- package/build/tools/auth/loginTool.js +3 -1
- package/build/tools/auth/logoutTool.js +3 -1
- 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 +252 -27
- 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 +22 -1
- package/build/tools/executeSkyrampTestTool.js +571 -271
- 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/runExistingTestsTool.d.ts +1 -1
- package/build/tools/runExistingTestsTool.js +43 -21
- package/build/tools/submitReportTool.d.ts +51 -12
- package/build/tools/submitReportTool.js +860 -161
- package/build/tools/test-management/actionsTool.js +210 -51
- package/build/tools/test-management/analyzeChangesTool.d.ts +4 -5
- package/build/tools/test-management/analyzeChangesTool.js +127 -68
- package/build/tools/test-management/analyzeTestHealthTool.js +35 -13
- 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/trace/startTraceCollectionTool.js +3 -1
- package/build/tools/trace/stopTraceCollectionTool.js +41 -5
- 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/ExternalTestExecution.d.ts +2 -2
- package/build/types/RepositoryAnalysis.d.ts +0 -40
- package/build/types/ReuseOutcome.d.ts +96 -4
- 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 +13 -0
- package/build/types/TestTypes.js +34 -3
- package/build/types/TestbotPromptOptions.d.ts +9 -1
- package/build/types/TestbotReport.d.ts +45 -9
- package/build/utils/AnalysisStateManager.d.ts +137 -27
- package/build/utils/AnalysisStateManager.js +227 -43
- 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/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 +39 -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/proxy-terminal.d.ts +19 -1
- package/build/utils/proxy-terminal.js +346 -21
- 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.js +6 -2
- 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/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 +788 -0
- package/build/utils/testExecutionRecord.d.ts +90 -0
- package/build/utils/testExecutionRecord.js +267 -0
- package/build/utils/testFileClassification.js +3 -1
- package/build/utils/trace-parser.js +62 -14
- package/build/utils/urlPath.js +3 -1
- package/build/utils/utils-verify/action-key.d.ts +4 -0
- package/build/utils/utils-verify/action-key.js +2 -2
- 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 +335 -0
- package/build/utils/utils-verify/call-sites.d.ts +6 -1
- package/build/utils/utils-verify/call-sites.js +72 -8
- 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 +1 -0
- package/build/utils/utils-verify/index.js +1 -0
- package/build/utils/utils-verify/language-spec.d.ts +26 -10
- package/build/utils/utils-verify/language-spec.js +217 -20
- 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 +46 -6
- package/build/utils/utils-verify/parse.js +176 -38
- 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 +76 -1
- package/build/utils/utils-verify/verify.js +516 -44
- 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.js +7 -7
- 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 +4 -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 +44 -50
- 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/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/node_modules/playwright/node_modules/playwright-core/.DS_Store +0 -0
|
@@ -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.
|
|
@@ -441,6 +441,8 @@ function assertActionToJsonl(action, pageGuid, timestamp) {
|
|
|
441
441
|
expected = String(args.disabled === true || args.expected === "true" || args.expected === true);
|
|
442
442
|
} else if (assertType === "count") {
|
|
443
443
|
expected = String(args.count ?? args.expected ?? "");
|
|
444
|
+
} else if (assertType === "css" || assertType === "class" || assertType === "attribute") {
|
|
445
|
+
expected = typeof args.expected === "string" ? args.expected : "";
|
|
444
446
|
}
|
|
445
447
|
} else {
|
|
446
448
|
const parts = code.split(":");
|
|
@@ -475,6 +477,26 @@ function assertActionToJsonl(action, pageGuid, timestamp) {
|
|
|
475
477
|
return null;
|
|
476
478
|
return JSON.stringify({ name: "assertCount", selector, count, locator, ...base });
|
|
477
479
|
}
|
|
480
|
+
// SKYR-4462: appearance assertions — toHaveCSS / toHaveClass / toHaveAttribute
|
|
481
|
+
// downstream. A line missing its property or value would emit a matcher with
|
|
482
|
+
// a hole in it, so it is dropped (reported as skipped) instead.
|
|
483
|
+
case "css": {
|
|
484
|
+
const cssName = typeof args.property === "string" ? args.property.trim() : "";
|
|
485
|
+
if (!cssName || !expected)
|
|
486
|
+
return null;
|
|
487
|
+
return JSON.stringify({ name: "assertCSS", selector, cssName, cssValue: expected, locator, ...base });
|
|
488
|
+
}
|
|
489
|
+
case "class": {
|
|
490
|
+
if (!expected.trim())
|
|
491
|
+
return null;
|
|
492
|
+
return JSON.stringify({ name: "assertClass", selector, className: expected.trim(), locator, ...base });
|
|
493
|
+
}
|
|
494
|
+
case "attribute": {
|
|
495
|
+
const attrName = typeof args.property === "string" ? args.property.trim() : "";
|
|
496
|
+
if (!attrName || typeof args.expected !== "string")
|
|
497
|
+
return null;
|
|
498
|
+
return JSON.stringify({ name: "assertAttribute", selector, attrName, attrValue: expected, locator, ...base });
|
|
499
|
+
}
|
|
478
500
|
default:
|
|
479
501
|
return null;
|
|
480
502
|
}
|
|
@@ -805,6 +827,8 @@ function buildJsonlContent(actions, browserName, harPath, viewport = RECORDING_V
|
|
|
805
827
|
if (assertLine) {
|
|
806
828
|
lines.push(assertLine);
|
|
807
829
|
actionCount++;
|
|
830
|
+
} else {
|
|
831
|
+
skipped.push(action.toolName);
|
|
808
832
|
}
|
|
809
833
|
continue;
|
|
810
834
|
}
|