@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
|
@@ -31,11 +31,33 @@ const codeReuseSchema = z.object({
|
|
|
31
31
|
verify: z
|
|
32
32
|
.boolean()
|
|
33
33
|
.default(false)
|
|
34
|
-
.describe("Verify a previously refactored test instead of returning the reuse prompt. POM path (browser tests): checks the test's POM calls against source; requires the discovery pass — this tool called for the same testFile without `verify` — to have run first. SkyrampUtils path (every other test type): stages the shared utils file for the output commit, checks its invariants, and — when skyramp_modularization recorded a baseline for this spec — compares the delivered assertion count and page.on('pageerror') guard against that hand-out, rejecting a net loss (API helpers: one helper per method+path, status-code-only assertions, method+resource names; browser helpers: actions and structural waits only, intent names, one helper per action sequence; every family: one name is defined once per module, with one parameter count across modules). Call it after the reuse edits are written; skyramp_enhance_assertions and skyramp_execute_test refuse until it has passed."),
|
|
34
|
+
.describe("Verify a previously refactored test instead of returning the reuse prompt. POM path (browser tests): checks the test's POM calls against source; requires the discovery pass — this tool called for the same testFile without `verify` — to have run first. SkyrampUtils path (every other test type): stages the shared utils file for the output commit, checks its invariants, and — when skyramp_modularization recorded a baseline for this spec — compares the delivered assertion count and page.on('pageerror') guard against that hand-out, rejecting a net loss (API helpers: one helper per method+path, status-code-only assertions, method+resource names; browser helpers: actions and structural waits only, intent names, one helper per action sequence; every family: one name is defined once per module, with one parameter count across modules). For a UI test it also checks the repository's own helper modules the test imports: each imported name resolves with an argument count the signature accepts, and every change this run made to such a module adds a helper or a defaulted parameter. Call it after the reuse edits are written; skyramp_enhance_assertions and skyramp_execute_test refuse until it has passed."),
|
|
35
35
|
testType: z
|
|
36
36
|
.nativeEnum(TestType)
|
|
37
37
|
.optional()
|
|
38
38
|
.describe("The type of the test being refactored (shared TestType vocabulary). The tool routes on it server-side: browser types (ui, e2e) may take the POM path; every other type takes the SkyrampUtils path. Omit when unknown."),
|
|
39
|
+
inHouse: z
|
|
40
|
+
.object({
|
|
41
|
+
filesRead: z
|
|
42
|
+
.array(z.string())
|
|
43
|
+
.describe("Every file the search for the repository's own browser helper modules READ, repository-relative. All of them, not only the ones that qualified."),
|
|
44
|
+
declined: z
|
|
45
|
+
.array(z.object({
|
|
46
|
+
file: z
|
|
47
|
+
.string()
|
|
48
|
+
.describe("Repository-relative path of the module."),
|
|
49
|
+
helper: z
|
|
50
|
+
.string()
|
|
51
|
+
.describe("The helper's name as the module defines it."),
|
|
52
|
+
reason: z
|
|
53
|
+
.string()
|
|
54
|
+
.describe("Why it was not called: the locator is not a plain string (variable, template literal, regex) so its action key is undefined; the module is not written for Playwright; no step matched it; …"),
|
|
55
|
+
}))
|
|
56
|
+
.default([])
|
|
57
|
+
.describe("Helpers the search read and did not call, one entry each, with the reason."),
|
|
58
|
+
})
|
|
59
|
+
.optional()
|
|
60
|
+
.describe("Verify mode, UI tests only (the SkyrampUtils path with page-object reuse off): what the search for the repository's own browser helper modules read and declined. These are DECLARATIONS — the report records them as what the run states it read, labelled as such, not as a measurement. Pass them on the `verify: true` call once the reuse edits are written."),
|
|
39
61
|
});
|
|
40
62
|
const TOOL_NAME = "skyramp_reuse_code";
|
|
41
63
|
/**
|
|
@@ -144,14 +166,16 @@ async function runUtilsVerify(params) {
|
|
|
144
166
|
// whatever the file's invariants say.
|
|
145
167
|
if (staging.failed.length > 0)
|
|
146
168
|
r.ok = false;
|
|
147
|
-
const recorded = await recordUtilsVerifyOutcome(params.testFile, r, params.language, params.framework, params.testType);
|
|
169
|
+
const recorded = await recordUtilsVerifyOutcome(params.testFile, r, params.language, params.framework, params.testType, undefined, params.inHouse);
|
|
148
170
|
return {
|
|
149
171
|
content: [
|
|
150
172
|
{
|
|
151
173
|
type: "text",
|
|
152
174
|
text: formatUtilsVerifyText(r, {
|
|
153
175
|
staged: staging.staged,
|
|
154
|
-
|
|
176
|
+
// A refused in-house module is the customer's file, not ours to move.
|
|
177
|
+
unstaged: staging.failed.filter((f) => !staging.inHouse.includes(f)),
|
|
178
|
+
unstagedInHouse: staging.failed.filter((f) => staging.inHouse.includes(f)),
|
|
155
179
|
recorded,
|
|
156
180
|
}),
|
|
157
181
|
},
|
|
@@ -1,42 +1,12 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { pendingReuseDebt } from "./reuse-state.js";
|
|
3
|
-
import { baselineFrom, readAssertionRecord, recordAssertionBaseline, recordAssertionVerdict, trustedRecord, } from "./assertion-state.js";
|
|
4
|
-
import { formatAssertionVerifyReport, verifyAssertionEnhancement, } from "../../utils/assertion-verify/index.js";
|
|
5
|
-
import { stageAndRecordRetrofits } from "./retrofit-state.js";
|
|
6
|
-
import * as path from "path";
|
|
7
2
|
import { toolError } from "../../utils/utils.js";
|
|
8
|
-
import { ASSERTION_ENHANCEABLE_TEST_TYPES
|
|
3
|
+
import { ASSERTION_ENHANCEABLE_TEST_TYPES } from "../../types/TestTypes.js";
|
|
9
4
|
import { AnalyticsService } from "../../services/AnalyticsService.js";
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { getUIAssertionsPrompt } from "../../prompts/enhance-assertions/uiAssertionsPrompt.js";
|
|
13
|
-
import { isTestbotEnabled } from "../../utils/featureFlags.js";
|
|
14
|
-
import { renderSharedAssertionRules } from "../../prompts/enhance-assertions/sharedAssertionRules.js";
|
|
15
|
-
import { stageGeneratedPaths } from "../../utils/gitStaging.js";
|
|
5
|
+
import { buildEnhanceAssertionsInstructions, sharedAssertionRules, } from "../../skills/enhanceAssertionsSkill.js";
|
|
6
|
+
import { prepareAssertionCall, snapshotAssertionBaseline, verifyAssertionCall, } from "./assertionOperations.js";
|
|
16
7
|
const TOOL_NAME = "skyramp_enhance_assertions";
|
|
17
|
-
const TESTBOT_UI_CHECKS = `
|
|
18
|
-
### Additional Testbot-Specific Checks
|
|
19
|
-
- If no suitable selector exists in the generated file for an assertion you need to add, go back and call \`browser_assert\` on the live page to record it with a valid selector, then re-export and regenerate. Do not re-record an assertion that is expected to fail today; add it here with the blueprint's selector.
|
|
20
|
-
- **After executing a UI test that documents a bug from \`issuesFound\`**: if it passed when you expected it to fail, the assertions are too weak — add a stronger \`expect()\` that directly targets the buggy behavior. This counts as the single allowed retry under the 2-attempt cap — do NOT re-run more than once.
|
|
21
|
-
`;
|
|
22
|
-
function buildAssertionInstructions(testFile, testType, enhanceType) {
|
|
23
|
-
if (testType === TestType.UI) {
|
|
24
|
-
let instructions = getUIAssertionsPrompt(testFile, enhanceType);
|
|
25
|
-
if (isTestbotEnabled()) {
|
|
26
|
-
instructions += TESTBOT_UI_CHECKS;
|
|
27
|
-
}
|
|
28
|
-
return instructions;
|
|
29
|
-
}
|
|
30
|
-
if (testType === TestType.CONTRACT) {
|
|
31
|
-
return getContractProviderAssertionsPrompt(testFile, enhanceType);
|
|
32
|
-
}
|
|
33
|
-
if (testType === TestType.INTEGRATION) {
|
|
34
|
-
return getIntegrationAssertionsPrompt(testFile, enhanceType);
|
|
35
|
-
}
|
|
36
|
-
throw new Error(`Unsupported testType for ${TOOL_NAME}: ${testType}`);
|
|
37
|
-
}
|
|
38
8
|
function buildAutoApplyInstructions(testFile, testType, enhanceType) {
|
|
39
|
-
const typeSpecificInstructions =
|
|
9
|
+
const typeSpecificInstructions = buildEnhanceAssertionsInstructions(testFile, testType, enhanceType);
|
|
40
10
|
return [
|
|
41
11
|
`Enhance response body assertions in: \`${testFile}\``,
|
|
42
12
|
`Test type: ${testType} | Context: ${enhanceType}`,
|
|
@@ -44,7 +14,7 @@ function buildAutoApplyInstructions(testFile, testType, enhanceType) {
|
|
|
44
14
|
`Read the file, apply the type-specific assertion guidance below, and write the file back directly.`,
|
|
45
15
|
`Add assertions after each send_request/sendRequest status-code assertion.`,
|
|
46
16
|
`Use SDK helper: Python \`skyramp.get_response_value(response, "json.path")\`, JS \`getValue(response, "json.path")\`.`,
|
|
47
|
-
`Do NOT restructure, reformat,
|
|
17
|
+
`Do NOT restructure, reformat, add comments, or change imports. Only add assertion lines.`,
|
|
48
18
|
``,
|
|
49
19
|
`Type-specific assertion guidance:`,
|
|
50
20
|
typeSpecificInstructions,
|
|
@@ -91,63 +61,29 @@ export function registerEnhanceAssertionsTool(server) {
|
|
|
91
61
|
- Optionally with \`verify: true\` for early feedback — the same deterministic checks run automatically inside skyramp_execute_test, which returns per-violation feedback instead of executing until they pass.`,
|
|
92
62
|
inputSchema: enhanceAssertionsSchema,
|
|
93
63
|
}, async (params) => {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
//
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
// the agent to come back with `verify: true` — the call that runs the zero-reuse
|
|
102
|
-
// gate. This is the first tool called after it on the same spec, so it is where a
|
|
103
|
-
// skipped verify is caught cheapest. Enforcing the call (not the outcome) keeps
|
|
104
|
-
// the policy in the reuse phase where it belongs.
|
|
105
|
-
// SKYR-4220: stage the shared utils file this spec wrote or imports BEFORE the
|
|
106
|
-
// debt check, unconditionally — so the file reaches the output commit even on a
|
|
107
|
-
// path where the agent never calls verify. Located by header, not by name.
|
|
108
|
-
await stageAndRecordRetrofits(testFile);
|
|
109
|
-
const owed = await pendingReuseDebt(testFile, stateFile, testType, {
|
|
110
|
-
chain: false,
|
|
111
|
-
});
|
|
112
|
-
if (owed)
|
|
113
|
-
return toolError(owed);
|
|
114
|
-
// Stage so testbot includes the generated files in its output commit.
|
|
115
|
-
await stageGeneratedPaths(testFile);
|
|
64
|
+
// stateFile is threaded through `params` into the shared helpers.
|
|
65
|
+
const { testFile, testType, enhanceType, autoApply, verify } = params;
|
|
66
|
+
// Path check, retrofit staging and the reuse-debt gate are shared with
|
|
67
|
+
// the single-purpose tools the skill drives (SKYR-4310).
|
|
68
|
+
const refusal = await prepareAssertionCall(params);
|
|
69
|
+
if (refusal)
|
|
70
|
+
return toolError(refusal);
|
|
116
71
|
// Verify pass: deterministically check the hand-out instructions were applied
|
|
117
72
|
// (hash delta, no removed coverage, rubric lints, strength increase) and give
|
|
118
73
|
// per-violation feedback. isError on FAILED forces the fix-and-retry loop.
|
|
119
74
|
if (verify) {
|
|
120
75
|
try {
|
|
121
|
-
const
|
|
122
|
-
// Discriminators come from the persisted record when it matches this
|
|
123
|
-
// canonical path — params are agent-supplied, and flipping enhanceType
|
|
124
|
-
// to "maintenance" would disarm the strength gate and structural lints
|
|
125
|
-
// for a permanent PASS. Canonical comparison closes the alias bypass
|
|
126
|
-
// (dir//x.spec.ts). Falls back to params only when stateless.
|
|
127
|
-
const trusted = trustedRecord(record, testFile);
|
|
128
|
-
const result = await verifyAssertionEnhancement({
|
|
129
|
-
testFile,
|
|
130
|
-
testType: trusted?.testType ?? testType,
|
|
131
|
-
enhanceType: (trusted?.enhanceType ??
|
|
132
|
-
enhanceType),
|
|
133
|
-
baseline: baselineFrom(record, testFile),
|
|
134
|
-
});
|
|
135
|
-
await recordAssertionVerdict(testFile, result, stateFile);
|
|
76
|
+
const { ok, report } = await verifyAssertionCall(params);
|
|
136
77
|
AnalyticsService.pushMCPToolEvent(TOOL_NAME, undefined, {
|
|
137
78
|
testFile,
|
|
138
79
|
testType,
|
|
139
80
|
enhanceType,
|
|
140
81
|
verify: true,
|
|
141
|
-
verifyPassed:
|
|
82
|
+
verifyPassed: ok,
|
|
142
83
|
}).catch(() => { });
|
|
143
84
|
return {
|
|
144
|
-
content: [
|
|
145
|
-
|
|
146
|
-
type: "text",
|
|
147
|
-
text: formatAssertionVerifyReport(result, testFile),
|
|
148
|
-
},
|
|
149
|
-
],
|
|
150
|
-
isError: !result.ok,
|
|
85
|
+
content: [{ type: "text", text: report }],
|
|
86
|
+
isError: !ok,
|
|
151
87
|
};
|
|
152
88
|
}
|
|
153
89
|
catch (err) {
|
|
@@ -157,7 +93,7 @@ export function registerEnhanceAssertionsTool(server) {
|
|
|
157
93
|
}
|
|
158
94
|
// Hand-out: snapshot the file as generated so the verify pass has a baseline
|
|
159
95
|
// to measure against. Best-effort — no run state means stateless verify later.
|
|
160
|
-
await
|
|
96
|
+
await snapshotAssertionBaseline(params);
|
|
161
97
|
if (autoApply) {
|
|
162
98
|
const compactInstructions = [
|
|
163
99
|
`Enhance response body assertions in: \`${testFile}\``,
|
|
@@ -167,7 +103,7 @@ export function registerEnhanceAssertionsTool(server) {
|
|
|
167
103
|
`Use SDK helper: Python \`skyramp.get_response_value(response, "json.path")\`, JS \`getValue(response, "json.path")\`.`,
|
|
168
104
|
``,
|
|
169
105
|
`Shared assertion rules (apply all that fit):`,
|
|
170
|
-
|
|
106
|
+
sharedAssertionRules(),
|
|
171
107
|
``,
|
|
172
108
|
`Do NOT restructure, reformat, or add comments. You may add an import when a new assertion needs a helper — from \`@skyramp/skyramp\` or from the test's own helper module. Only add assertion lines.`,
|
|
173
109
|
].join("\n");
|
|
@@ -186,7 +122,7 @@ export function registerEnhanceAssertionsTool(server) {
|
|
|
186
122
|
const enhanceCtx = enhanceType;
|
|
187
123
|
const instructions = autoApply
|
|
188
124
|
? buildAutoApplyInstructions(testFile, testType, enhanceCtx)
|
|
189
|
-
:
|
|
125
|
+
: buildEnhanceAssertionsInstructions(testFile, testType, enhanceCtx);
|
|
190
126
|
const result = {
|
|
191
127
|
content: [
|
|
192
128
|
{
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { type UtilsLanguageSpec } from "../../utils/utils-verify/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Remove every comment addressed to a Skyramp gate from a delivered file.
|
|
4
|
+
*
|
|
5
|
+
* Two gates ask the agent to write a decline into the file it delivers — the utils
|
|
6
|
+
* verifier's `reuse-verify: allow <kind> <helper> — <reason>` and the POM gate's
|
|
7
|
+
* `// kept inline: <basename> — <reason>`. Both are how the agent tells a gate it has
|
|
8
|
+
* read a finding and chosen not to act, and neither says anything to the customer who
|
|
9
|
+
* ends up owning the file. A marker also records the state of the file at one moment,
|
|
10
|
+
* and nothing re-reads it when the file changes afterwards, so a delivered file can
|
|
11
|
+
* carry a claim its own code contradicts.
|
|
12
|
+
*
|
|
13
|
+
* A marker OWNS ITS LINE. Both gates instruct exactly that, and both parsers now
|
|
14
|
+
* accept only that, so removal is the deletion of a line. That one constraint is what
|
|
15
|
+
* keeps this safe: a line whose first characters are the comment prefix cannot be a
|
|
16
|
+
* regex literal, cannot carry code, cannot share a comment with the customer's prose,
|
|
17
|
+
* and cannot hold the `*\/` that terminates a block. Every one of those was a way an
|
|
18
|
+
* earlier version of this function delivered a file that did not compile.
|
|
19
|
+
*
|
|
20
|
+
* Strings are blanked first, so a marker quoted in code — or inside a Python docstring
|
|
21
|
+
* — is not a marker. Removal follows the WELL-FORMED grammars, not the loose patterns
|
|
22
|
+
* the gates use to spot a malformed marker: `// kept inline: this loop is kept inline
|
|
23
|
+
* for performance` is English. Neither grammar is re-spelled here; each pattern comes
|
|
24
|
+
* from the module that declares it.
|
|
25
|
+
*/
|
|
26
|
+
export interface GateMarkerStrip {
|
|
27
|
+
content: string;
|
|
28
|
+
/** The markers removed, each the line it was. */
|
|
29
|
+
removed: string[];
|
|
30
|
+
/** Text that announces a marker but does not own its line. Left in place — the
|
|
31
|
+
* verify pass reports it as malformed, so it should not reach delivery. */
|
|
32
|
+
unremovable: string[];
|
|
33
|
+
}
|
|
34
|
+
export declare function stripGateMarkers(content: string, spec: UtilsLanguageSpec): GateMarkerStrip;
|
|
35
|
+
/**
|
|
36
|
+
* Whether the only change between two versions of a file is the deletion of whole
|
|
37
|
+
* comment lines.
|
|
38
|
+
*
|
|
39
|
+
* Computed WITHOUT reference to how the strip works, and that is the point. Every
|
|
40
|
+
* defect this function has had was a case nobody had thought of — a regex literal, a
|
|
41
|
+
* line carrying a block terminator, a comment shared with the customer's prose, a
|
|
42
|
+
* directive before a trailing marker. Each was found by a reader. This check does not
|
|
43
|
+
* need the case to be foreseen: it states the only edit the strip is permitted to
|
|
44
|
+
* make, and the caller restores the original bytes when something else happened.
|
|
45
|
+
*
|
|
46
|
+
* Two conditions, together: every line of `after` appears in `before` in the same
|
|
47
|
+
* order, and every line of `before` that `after` drops opens with the comment prefix.
|
|
48
|
+
* A line that was EDITED therefore fails the first, and a line of code that was
|
|
49
|
+
* deleted fails the second.
|
|
50
|
+
*/
|
|
51
|
+
export declare function onlyCommentLinesRemoved(before: string, after: string, prefix: "//" | "#"): boolean;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { blankStrings } from "../../utils/utils-verify/parse.js";
|
|
2
|
+
import { ALLOW_LOOSE_RE, ALLOW_START_RE, MARKER_SHAPE_RE, lineCommentOpeners, markerOnOwnLine, } from "../../utils/utils-verify/index.js";
|
|
3
|
+
import { KEPT_INLINE_LOOSE_RE } from "./reuse-outcome.js";
|
|
4
|
+
export function stripGateMarkers(content, spec) {
|
|
5
|
+
const removed = [];
|
|
6
|
+
const unremovable = [];
|
|
7
|
+
const rawLines = content.split("\n");
|
|
8
|
+
const codeLines = blankStrings(content, spec).split("\n");
|
|
9
|
+
const kept = [];
|
|
10
|
+
// Where a comment actually OPENS. A `//` on its own line inside `/* … *\/` opens
|
|
11
|
+
// nothing: the block does, and deleting that line can take the block's terminator
|
|
12
|
+
// with it. One statement of this, shared with the marker parser — when each had its
|
|
13
|
+
// own, the parser read a decline the strip then refused to remove.
|
|
14
|
+
const opensHere = lineCommentOpeners(content, spec.commentPrefix);
|
|
15
|
+
for (let n = 0; n < rawLines.length; n++) {
|
|
16
|
+
const raw = rawLines[n];
|
|
17
|
+
const code = codeLines[n] ?? "";
|
|
18
|
+
if (!ALLOW_LOOSE_RE.test(code) && !KEPT_INLINE_LOOSE_RE.test(code)) {
|
|
19
|
+
kept.push(raw);
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
const marker = opensHere && !opensHere.has(n)
|
|
23
|
+
? undefined
|
|
24
|
+
: markerOnOwnLine(raw, code, spec.commentPrefix);
|
|
25
|
+
const body = marker === undefined
|
|
26
|
+
? undefined
|
|
27
|
+
: marker.replace(spec.commentPrefix, "").trimStart();
|
|
28
|
+
// The SHAPE guard is for the ambiguous grammar only. `// kept inline: this loop is
|
|
29
|
+
// kept inline for performance` is English a customer may write, so removing it
|
|
30
|
+
// needs the separator and reason that make it a marker. `reuse-verify: allow` is
|
|
31
|
+
// nobody's prose: an own-line comment opening with it is gate-addressed whatever
|
|
32
|
+
// follows, and requiring the full shape left a MALFORMED one in the file — which
|
|
33
|
+
// ships once the verifier's bounded refusals run out.
|
|
34
|
+
const removable = body !== undefined &&
|
|
35
|
+
(ALLOW_START_RE.test(body) || MARKER_SHAPE_RE.test(body));
|
|
36
|
+
if (!removable) {
|
|
37
|
+
unremovable.push(raw.trim());
|
|
38
|
+
kept.push(raw);
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
// Removal follows the marker's SHAPE, not the grammar the gates can read. An
|
|
42
|
+
// own-line comment is safe to delete, and the verify pass lets some of these
|
|
43
|
+
// through: a marker naming an advisory kind is inert by design, so verification
|
|
44
|
+
// passes and the comment reached the customer. Only what the caller CARRIES has
|
|
45
|
+
// to parse — it re-reads `removed` with the well-formed grammars for that.
|
|
46
|
+
removed.push(marker);
|
|
47
|
+
}
|
|
48
|
+
return { content: kept.join("\n"), removed, unremovable };
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Whether the only change between two versions of a file is the deletion of whole
|
|
52
|
+
* comment lines.
|
|
53
|
+
*
|
|
54
|
+
* Computed WITHOUT reference to how the strip works, and that is the point. Every
|
|
55
|
+
* defect this function has had was a case nobody had thought of — a regex literal, a
|
|
56
|
+
* line carrying a block terminator, a comment shared with the customer's prose, a
|
|
57
|
+
* directive before a trailing marker. Each was found by a reader. This check does not
|
|
58
|
+
* need the case to be foreseen: it states the only edit the strip is permitted to
|
|
59
|
+
* make, and the caller restores the original bytes when something else happened.
|
|
60
|
+
*
|
|
61
|
+
* Two conditions, together: every line of `after` appears in `before` in the same
|
|
62
|
+
* order, and every line of `before` that `after` drops opens with the comment prefix.
|
|
63
|
+
* A line that was EDITED therefore fails the first, and a line of code that was
|
|
64
|
+
* deleted fails the second.
|
|
65
|
+
*/
|
|
66
|
+
export function onlyCommentLinesRemoved(before, after, prefix) {
|
|
67
|
+
const from = before.split("\n");
|
|
68
|
+
const to = after.split("\n");
|
|
69
|
+
// A line that CLOSES a block comment cannot be deleted without changing what that
|
|
70
|
+
// comment covers, whatever else the line looks like. Checked textually, so this
|
|
71
|
+
// holds even when the lexer and the strip agree with each other and are both wrong
|
|
72
|
+
// — which is what a `//` inside a block made them do.
|
|
73
|
+
//
|
|
74
|
+
// Only `*\/` is tested. A `/*` inside the reason of a genuine line comment is inert
|
|
75
|
+
// text, and deleting a line cannot open a block that was not already open; treating
|
|
76
|
+
// it as active made the strip abandon the write, so a marker whose reason discussed
|
|
77
|
+
// a selector shipped to the customer — the one outcome this pass exists to prevent.
|
|
78
|
+
const isComment = (line) => line.trimStart().startsWith(prefix) &&
|
|
79
|
+
!(prefix === "//" && line.includes("*/"));
|
|
80
|
+
let i = 0;
|
|
81
|
+
for (const line of to) {
|
|
82
|
+
while (i < from.length && from[i] !== line) {
|
|
83
|
+
if (!isComment(from[i]))
|
|
84
|
+
return false;
|
|
85
|
+
i++;
|
|
86
|
+
}
|
|
87
|
+
if (i >= from.length)
|
|
88
|
+
return false;
|
|
89
|
+
i++;
|
|
90
|
+
}
|
|
91
|
+
for (; i < from.length; i++)
|
|
92
|
+
if (!isComment(from[i]))
|
|
93
|
+
return false;
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
@@ -27,7 +27,9 @@ export interface RetrofitView {
|
|
|
27
27
|
/** Absolute path. */
|
|
28
28
|
file: string;
|
|
29
29
|
utilsFile: string;
|
|
30
|
-
/** The spec whose reuse pass caused the edit (absolute)
|
|
30
|
+
/** The spec whose reuse pass caused the edit (absolute) — the row the retrofit is
|
|
31
|
+
* reported on. Equals `file` when the causing spec cannot be established: see
|
|
32
|
+
* `uncrossAttributions`. */
|
|
31
33
|
testFile: string;
|
|
32
34
|
/** Status of an execution that ran the CURRENT bytes (executedAt ≥ the file's
|
|
33
35
|
* mtime), if any. */
|
|
@@ -49,7 +49,7 @@ export async function recordReuseRetrofits(retrofits, utilsFiles, testFile, expl
|
|
|
49
49
|
if (!entries[key])
|
|
50
50
|
entries[key] = { utilsFile, testFile: await realpath(testFile) };
|
|
51
51
|
}
|
|
52
|
-
await manager.
|
|
52
|
+
await manager.appendData({ ...data, reuseRetrofits: entries });
|
|
53
53
|
}
|
|
54
54
|
catch (err) {
|
|
55
55
|
logger.warning("Could not record the reuse retrofits — the report will not be checked for them", { retrofits, error: String(err) });
|
|
@@ -83,7 +83,49 @@ export async function standingRetrofits(state, changedFilesAbs) {
|
|
|
83
83
|
}
|
|
84
84
|
out.push({ file, utilsFile: r.utilsFile, testFile: r.testFile, execution });
|
|
85
85
|
}
|
|
86
|
-
return out;
|
|
86
|
+
return uncrossAttributions(out);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Drop the CAUSING spec from any pair of retrofits that name each other, keeping the
|
|
90
|
+
* retrofit itself and re-attributing it to its own file.
|
|
91
|
+
*
|
|
92
|
+
* A retrofit is found by `modifiedSiblingsImporting`, whose evidence is "modified
|
|
93
|
+
* since HEAD and imports the module". That establishes the edit; it establishes
|
|
94
|
+
* nothing about WHO made it. When two specs on one module are each edited by their
|
|
95
|
+
* own chain, each one's staging call sees the other as a modified sibling and claims
|
|
96
|
+
* it, and `recordReuseRetrofits` is first-wins, so both claims persist. The report
|
|
97
|
+
* then shows each row naming the other row's file — a statement of cause that cannot
|
|
98
|
+
* be true in both directions, observed in three fixtures of the 2026-09-18 cohort.
|
|
99
|
+
*
|
|
100
|
+
* A cycle proves at least one claim is false and run state holds nothing that says
|
|
101
|
+
* which, so neither is reported. What survives is what the files do prove: this
|
|
102
|
+
* pre-existing test was rewired onto the shared module by this run, and here is the
|
|
103
|
+
* execution that ran it. That keeps the disclosure — and the report gate over it — on
|
|
104
|
+
* the row a reader looks at for that file, instead of on a sibling that may not have
|
|
105
|
+
* touched it.
|
|
106
|
+
*
|
|
107
|
+
* Only reciprocal claims ON THE SAME MODULE are touched. Two conditions, both read
|
|
108
|
+
* off the evidence:
|
|
109
|
+
*
|
|
110
|
+
* - A one-way attribution is the ordinary STEP 5c case, where a spec's reuse pass
|
|
111
|
+
* reached a sibling that is not being edited in its own right, and nothing
|
|
112
|
+
* contradicts it.
|
|
113
|
+
* - A reciprocal pair naming DIFFERENT modules is a shape no cohort has produced —
|
|
114
|
+
* the observed defect is two specs on one module — so nothing says the same cause
|
|
115
|
+
* is behind it, and the row it would move to carries another module's record.
|
|
116
|
+
*/
|
|
117
|
+
function uncrossAttributions(views) {
|
|
118
|
+
const claimed = new Map();
|
|
119
|
+
for (const v of views)
|
|
120
|
+
claimed.set(canonPath(v.file), v);
|
|
121
|
+
return views.map((v) => {
|
|
122
|
+
const reciprocal = claimed.get(canonPath(v.testFile));
|
|
123
|
+
return reciprocal &&
|
|
124
|
+
canonPath(reciprocal.testFile) === canonPath(v.file) &&
|
|
125
|
+
reciprocal.utilsFile === v.utilsFile
|
|
126
|
+
? { ...v, testFile: v.file }
|
|
127
|
+
: v;
|
|
128
|
+
});
|
|
87
129
|
}
|
|
88
130
|
/**
|
|
89
131
|
* The report gate over the standing retrofits: every one needs an execution of its
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { VerifyResult } from "../../utils/pom-verify/index.js";
|
|
2
|
-
import { ReuseVerificationOutcome, type ReuseSkippedEntry } from "../../types/ReuseOutcome.js";
|
|
2
|
+
import { ReuseVerificationOutcome, type InHouseDeclinedEntry, type ReuseSkippedEntry } from "../../types/ReuseOutcome.js";
|
|
3
3
|
import { HelperVerificationOutcome } from "../../types/ReuseOutcome.js";
|
|
4
4
|
export { ReuseDeclinedBy, ReuseVerificationOutcome, HelperVerificationOutcome, type ReuseOutcome, type ReuseSkippedEntry, } from "../../types/ReuseOutcome.js";
|
|
5
5
|
/** A member the verifier flagged at some point in this run. NOT the same as "a
|
|
@@ -77,7 +77,29 @@ export interface UtilsReuseRecord {
|
|
|
77
77
|
verification?: HelperVerificationOutcome;
|
|
78
78
|
/** The last verify pass threw; the debt fails open until a pass succeeds. */
|
|
79
79
|
verifyError?: boolean;
|
|
80
|
+
/** What the agent DECLARED on its last verify call about the search for the
|
|
81
|
+
* repository's own browser helper modules: the files it read, the helpers it
|
|
82
|
+
* declined. Testimony, kept for the report and labelled there as such. */
|
|
83
|
+
inHouseDeclared?: InHouseDeclaration;
|
|
80
84
|
}
|
|
85
|
+
export interface InHouseDeclaration {
|
|
86
|
+
filesRead: string[];
|
|
87
|
+
declined: InHouseDeclinedEntry[];
|
|
88
|
+
}
|
|
89
|
+
/** Matches a well-formed `// kept inline: <basename> <sep> <reason>` marker.
|
|
90
|
+
*
|
|
91
|
+
* The separator must be an em/en dash or a *spaced* hyphen. Discovery has no
|
|
92
|
+
* anchor to tell where the file name ends, and a bare hyphen is ambiguous with
|
|
93
|
+
* hyphens inside file names (`alert-destinations.page.ts-reason`), so requiring
|
|
94
|
+
* whitespace is what makes the split decidable. `findUnparsableKeptInline` below
|
|
95
|
+
* reports anything that looks like a marker but does not match, so a malformed
|
|
96
|
+
* one is never silently lost. */
|
|
97
|
+
export declare const KEPT_INLINE_RE: RegExp;
|
|
98
|
+
/** Lines that look like a kept-inline marker. Deliberately looser than
|
|
99
|
+
* KEPT_INLINE_RE so the difference between the two is detectable. Exported so the
|
|
100
|
+
* delivery-time strip recognises the grammar from its one declaration here rather
|
|
101
|
+
* than re-spelling it. */
|
|
102
|
+
export declare const KEPT_INLINE_LOOSE_RE: RegExp;
|
|
81
103
|
/**
|
|
82
104
|
* Every well-formed `// kept inline: <basename> — <reason>` marker in a spec.
|
|
83
105
|
*
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as path from "path";
|
|
2
2
|
import { stripStrings } from "../../utils/pom-scope/strip.js";
|
|
3
|
+
import { lineCommentOpeners, markerOnOwnLine, } from "../../utils/utils-verify/allow.js";
|
|
3
4
|
import { ReuseDeclinedBy, ReuseVerificationOutcome, } from "../../types/ReuseOutcome.js";
|
|
4
5
|
/**
|
|
5
6
|
* Server-side derivation of a UI test's POM code-reuse outcome.
|
|
@@ -31,15 +32,12 @@ export { ReuseDeclinedBy, ReuseVerificationOutcome, HelperVerificationOutcome, }
|
|
|
31
32
|
* whitespace is what makes the split decidable. `findUnparsableKeptInline` below
|
|
32
33
|
* reports anything that looks like a marker but does not match, so a malformed
|
|
33
34
|
* one is never silently lost. */
|
|
34
|
-
const KEPT_INLINE_RE = /\/\/\s*kept inline:\s*(\S.*?)\s*(?:[—–]+|\s+-+\s+)\s*(\S.*?)\s*$/;
|
|
35
|
+
export const KEPT_INLINE_RE = /\/\/\s*kept inline:\s*(\S.*?)\s*(?:[—–]+|\s+-+\s+)\s*(\S.*?)\s*$/;
|
|
35
36
|
/** Lines that look like a kept-inline marker. Deliberately looser than
|
|
36
|
-
* KEPT_INLINE_RE so the difference between the two is detectable.
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
function commentLines(specContent) {
|
|
41
|
-
return stripStrings(specContent).split("\n");
|
|
42
|
-
}
|
|
37
|
+
* KEPT_INLINE_RE so the difference between the two is detectable. Exported so the
|
|
38
|
+
* delivery-time strip recognises the grammar from its one declaration here rather
|
|
39
|
+
* than re-spelling it. */
|
|
40
|
+
export const KEPT_INLINE_LOOSE_RE = /\/\/\s*kept inline:/;
|
|
43
41
|
/**
|
|
44
42
|
* Every well-formed `// kept inline: <basename> — <reason>` marker in a spec.
|
|
45
43
|
*
|
|
@@ -53,8 +51,8 @@ function commentLines(specContent) {
|
|
|
53
51
|
export function parseKeptInline(specContent) {
|
|
54
52
|
const out = [];
|
|
55
53
|
const seen = new Set();
|
|
56
|
-
for (const
|
|
57
|
-
const m = KEPT_INLINE_RE.exec(
|
|
54
|
+
for (const { marker } of keptInlineLines(specContent)) {
|
|
55
|
+
const m = marker && KEPT_INLINE_RE.exec(marker);
|
|
58
56
|
if (!m)
|
|
59
57
|
continue;
|
|
60
58
|
const pageObject = path.basename(m[1].trim());
|
|
@@ -67,6 +65,31 @@ export function parseKeptInline(specContent) {
|
|
|
67
65
|
}
|
|
68
66
|
return out;
|
|
69
67
|
}
|
|
68
|
+
/** Every line that announces a kept-inline decline, with the marker text when the
|
|
69
|
+
* comment owns the line. A marker after code or inside a block reports as
|
|
70
|
+
* unparsable — one placement, so a decline can be removed by deleting a line. */
|
|
71
|
+
function keptInlineLines(specContent) {
|
|
72
|
+
const rawLines = specContent.split("\n");
|
|
73
|
+
const codeLines = stripStrings(specContent).split("\n");
|
|
74
|
+
// Where a comment actually OPENS. Through the same helper the utils grammar and the
|
|
75
|
+
// delivery strip use: a `//` inside `/* … *\/` opens nothing, and reading one as a
|
|
76
|
+
// decline authorised the candidate it named while the strip — correctly — refused
|
|
77
|
+
// to delete a line carrying the block's terminator, so the note shipped as well.
|
|
78
|
+
const opens = lineCommentOpeners(specContent, "//");
|
|
79
|
+
const out = [];
|
|
80
|
+
for (let n = 0; n < rawLines.length; n++) {
|
|
81
|
+
const code = codeLines[n] ?? "";
|
|
82
|
+
if (!KEPT_INLINE_LOOSE_RE.test(code))
|
|
83
|
+
continue;
|
|
84
|
+
out.push({
|
|
85
|
+
raw: rawLines[n],
|
|
86
|
+
marker: opens && !opens.has(n)
|
|
87
|
+
? undefined
|
|
88
|
+
: markerOnOwnLine(rawLines[n], code, "//"),
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
return out;
|
|
92
|
+
}
|
|
70
93
|
/**
|
|
71
94
|
* Lines that announce a kept-inline decline but that `parseKeptInline` cannot
|
|
72
95
|
* read — a missing reason clause, or a bare unspaced hyphen the zero-reuse gate's
|
|
@@ -78,9 +101,9 @@ export function parseKeptInline(specContent) {
|
|
|
78
101
|
* dropping them quietly.
|
|
79
102
|
*/
|
|
80
103
|
export function findUnparsableKeptInline(specContent) {
|
|
81
|
-
return
|
|
82
|
-
.filter((
|
|
83
|
-
.map((
|
|
104
|
+
return keptInlineLines(specContent)
|
|
105
|
+
.filter(({ marker }) => !marker || !KEPT_INLINE_RE.test(marker))
|
|
106
|
+
.map(({ raw }) => raw.trim());
|
|
84
107
|
}
|
|
85
108
|
/** Members the verifier flagged in one pass, keyed to the file a decline comment
|
|
86
109
|
* would name. */
|