@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
|
@@ -35,15 +35,53 @@ export function rememberTestsRepoDir(dir) {
|
|
|
35
35
|
export function getTestsRepoDir() {
|
|
36
36
|
return _testsRepoDir;
|
|
37
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* The run's PRIMARY checkout — its path and its `owner/repo`. Declared at the
|
|
40
|
+
* run's entry point, never inferred from write order: the testbot action passes
|
|
41
|
+
* its workingDirectory and its slug to the prompt, so rendering the prompt is
|
|
42
|
+
* where the run says which checkout is primary (the same capture point as the
|
|
43
|
+
* report language).
|
|
44
|
+
*
|
|
45
|
+
* Write order cannot decide this. A docs-only primary diff lets the related
|
|
46
|
+
* repo's analyze call land first, and taking the root from whoever wrote first
|
|
47
|
+
* flipped the attribution of every test in the run (SKYR-4333).
|
|
48
|
+
*
|
|
49
|
+
* Entry without a prompt render — IDE use, a bare analyze call — has no
|
|
50
|
+
* declaration to read, so the first analyze call declares its own here.
|
|
51
|
+
*/
|
|
52
|
+
let _primary;
|
|
53
|
+
export function rememberPrimaryRepository(repositoryPath, repo) {
|
|
54
|
+
if (!_primary)
|
|
55
|
+
_primary = { repositoryPath, repo };
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Test seam, and the declaration the prompt render makes at the start of a run.
|
|
59
|
+
*
|
|
60
|
+
* A render is a run boundary, so it drops the in-memory state-file anchor as well:
|
|
61
|
+
* a server that renders a second prompt is serving a second run, and the first
|
|
62
|
+
* run's file must not take the second run's analysis. The pointer file stays, since
|
|
63
|
+
* it lives in the job's own `RUNNER_TEMP` — a later STAGE of the same run renders
|
|
64
|
+
* again in a fresh process and must still find that run's file.
|
|
65
|
+
*/
|
|
66
|
+
export function setPrimaryRepository(primary) {
|
|
67
|
+
_primary = primary;
|
|
68
|
+
_activeRunStatePath = undefined;
|
|
69
|
+
}
|
|
70
|
+
export function getPrimaryRepository() {
|
|
71
|
+
return _primary;
|
|
72
|
+
}
|
|
38
73
|
/**
|
|
39
74
|
* Multi-repo run anchor: the path of the run-scoped analysis state file for the
|
|
40
75
|
* current Testbot run.
|
|
41
76
|
*
|
|
42
|
-
* skyramp_analyze_changes sets this on the FIRST call of a
|
|
43
|
-
*
|
|
44
|
-
* repo
|
|
45
|
-
*
|
|
46
|
-
*
|
|
77
|
+
* skyramp_analyze_changes sets this on the FIRST call of a run and REUSES it on
|
|
78
|
+
* every later call, so a multi-repo run's analyses land in ONE state file with
|
|
79
|
+
* per-repo sections — without the agent ever passing a file path (which previously
|
|
80
|
+
* caused filename hallucinations). A single-repo run takes the same path now that
|
|
81
|
+
* `repository` is required on every call.
|
|
82
|
+
*
|
|
83
|
+
* `setPrimaryRepository` clears it: the prompt render that declares the run's primary
|
|
84
|
+
* is the same boundary that ends the previous run's file.
|
|
47
85
|
*
|
|
48
86
|
* A staged Testbot run starts a NEW server process per stage, so this value is gone
|
|
49
87
|
* at every stage boundary. That is what the pointer file below is for.
|
|
@@ -142,16 +180,15 @@ export function clearActiveRunStatePath() {
|
|
|
142
180
|
* The run's state-file path, for tools that need to read or amend it without the
|
|
143
181
|
* agent naming it.
|
|
144
182
|
*
|
|
145
|
-
* `setActiveRunStatePath` is
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
* send later stages to the wrong file.
|
|
183
|
+
* `setActiveRunStatePath` is called by skyramp_analyze_changes on every run. It is
|
|
184
|
+
* read back two ways: from memory in this process, and from the pointer file a
|
|
185
|
+
* previous stage of the same run wrote — a staged run starts a fresh server per
|
|
186
|
+
* stage, so memory alone would send later stages to the wrong file.
|
|
150
187
|
*
|
|
151
|
-
*
|
|
152
|
-
*
|
|
153
|
-
* to
|
|
154
|
-
* resolves to undefined — correct, since there is no run state.
|
|
188
|
+
* The path is deterministic in CI either way: the StateManager constructor above
|
|
189
|
+
* roots "analysis" state under `runArtifactDir()`, so a run whose anchor was cleared
|
|
190
|
+
* at a stage boundary resolves to the same file. Standalone/IDE usage has no
|
|
191
|
+
* RUNNER_TEMP and resolves to undefined — correct, since there is no run state.
|
|
155
192
|
*/
|
|
156
193
|
export function resolveRunStatePath(explicitPath) {
|
|
157
194
|
if (explicitPath)
|
|
@@ -168,6 +205,50 @@ export function resolveRunStatePath(explicitPath) {
|
|
|
168
205
|
}
|
|
169
206
|
return undefined;
|
|
170
207
|
}
|
|
208
|
+
/** Whether two paths name the same file. Compared by device and inode, not by
|
|
209
|
+
* spelling: `./`, a `..` round-trip, a trailing slash, a symlink and a differing
|
|
210
|
+
* case on a case-insensitive disk all name one file, and a string compare calls
|
|
211
|
+
* four of those five a different one. Falls back to the resolved spelling when
|
|
212
|
+
* either path cannot be read. */
|
|
213
|
+
function namesTheSameFile(a, b) {
|
|
214
|
+
try {
|
|
215
|
+
const left = fs.statSync(a);
|
|
216
|
+
const right = fs.statSync(b);
|
|
217
|
+
return left.dev === right.dev && left.ino === right.ino;
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
return path.resolve(a) === path.resolve(b);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* The state file a tool may act on, or a refusal saying why not.
|
|
225
|
+
*
|
|
226
|
+
* A run's state file holds THIS run's analysis and THIS run's plan. A path from
|
|
227
|
+
* another run carries another run's, and every check would then judge this diff
|
|
228
|
+
* against it — silently, because both files are valid state files. So a named path
|
|
229
|
+
* is accepted only when it names the file this run created.
|
|
230
|
+
*
|
|
231
|
+
* Gated on `currentRunStateFile`, never on `resolveRunStatePath`: that one builds a
|
|
232
|
+
* path out of `RUNNER_TEMP`, which GitHub Actions sets on every job including this
|
|
233
|
+
* repo's own CI, so it answers "where would the file be" and not "is there a run".
|
|
234
|
+
* Refusing on it would refuse a named path wherever that variable merely exists.
|
|
235
|
+
*
|
|
236
|
+
* With no run of its own — standalone use, an IDE, a test — the named path is the
|
|
237
|
+
* only one there is, and is taken as given.
|
|
238
|
+
*/
|
|
239
|
+
export function resolveOwnRunStatePath(explicitPath) {
|
|
240
|
+
if (!explicitPath)
|
|
241
|
+
return { path: resolveRunStatePath() };
|
|
242
|
+
const own = currentRunStateFile();
|
|
243
|
+
if (!own)
|
|
244
|
+
return { path: explicitPath };
|
|
245
|
+
if (namesTheSameFile(explicitPath, own))
|
|
246
|
+
return { path: own };
|
|
247
|
+
return {
|
|
248
|
+
refusal: `stateFile names ${explicitPath}, which is not this run's state file. This run's is ${own}, ` +
|
|
249
|
+
`and it holds the analysis and the plan every check reads. Leave stateFile out — the run finds its own.`,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
171
252
|
/**
|
|
172
253
|
* The run's state file if this process is actually serving a run, else undefined.
|
|
173
254
|
*
|
|
@@ -299,7 +380,76 @@ const ROOT_FIELDS_OWNED_ELSEWHERE = [
|
|
|
299
380
|
"plan",
|
|
300
381
|
"registrationCount",
|
|
301
382
|
"reportObjections",
|
|
383
|
+
"maxFixAttempts",
|
|
384
|
+
// Written by the generators, and the analysis payload has none — so without
|
|
385
|
+
// this a second analyze drops the list of files this run wrote. The report's
|
|
386
|
+
// execution check reads a missing key as "nothing was written" and goes
|
|
387
|
+
// quiet, which is the one failure it must not have.
|
|
388
|
+
"generatedTests",
|
|
302
389
|
];
|
|
390
|
+
/**
|
|
391
|
+
* Execution records survive a re-analysis. A repeat `skyramp_analyze_changes`
|
|
392
|
+
* rewrites a section from a payload that has no `testExecutions` and whose
|
|
393
|
+
* `existingTests[]` rows carry no `executionBefore/After` — it discovers tests,
|
|
394
|
+
* it does not run them. Dropping the records would reset every file's
|
|
395
|
+
* attempt counter (SKYR-4460) while the run-wide cap survives, and lose the
|
|
396
|
+
* before/after statuses the report reads. So the incoming section keeps the
|
|
397
|
+
* existing records: `testExecutions` merged (incoming wins per file), and each
|
|
398
|
+
* existing-test row that lacks execution results takes them from the row with
|
|
399
|
+
* the same `testFile`. Returns the fields to overlay; empty when nothing carries.
|
|
400
|
+
*/
|
|
401
|
+
function carryForwardExecutionRecords(incoming, existing, where) {
|
|
402
|
+
if (!existing)
|
|
403
|
+
return {};
|
|
404
|
+
const carried = {};
|
|
405
|
+
const priorExecutions = existing.testExecutions;
|
|
406
|
+
if (priorExecutions && Object.keys(priorExecutions).length > 0) {
|
|
407
|
+
const incomingExecutions = (incoming?.testExecutions ?? {});
|
|
408
|
+
const merged = { ...priorExecutions, ...incomingExecutions };
|
|
409
|
+
if (Object.keys(merged).length > Object.keys(incomingExecutions).length) {
|
|
410
|
+
carried.testExecutions = merged;
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
const priorRows = existing.existingTests;
|
|
414
|
+
const incomingRows = incoming?.existingTests;
|
|
415
|
+
if (Array.isArray(priorRows) && Array.isArray(incomingRows)) {
|
|
416
|
+
const byFile = new Map();
|
|
417
|
+
for (const row of priorRows) {
|
|
418
|
+
if (row?.testFile && (row.executionBefore || row.executionAfter))
|
|
419
|
+
byFile.set(row.testFile, row);
|
|
420
|
+
}
|
|
421
|
+
if (byFile.size > 0) {
|
|
422
|
+
let touched = 0;
|
|
423
|
+
const rows = incomingRows.map((row) => {
|
|
424
|
+
const prior = row?.testFile ? byFile.get(row.testFile) : undefined;
|
|
425
|
+
if (!prior)
|
|
426
|
+
return row;
|
|
427
|
+
const next = { ...row };
|
|
428
|
+
if (next.executionBefore === undefined && prior.executionBefore) {
|
|
429
|
+
next.executionBefore = prior.executionBefore;
|
|
430
|
+
touched++;
|
|
431
|
+
}
|
|
432
|
+
if (next.executionAfter === undefined && prior.executionAfter) {
|
|
433
|
+
next.executionAfter = prior.executionAfter;
|
|
434
|
+
touched++;
|
|
435
|
+
}
|
|
436
|
+
return next;
|
|
437
|
+
});
|
|
438
|
+
if (touched > 0)
|
|
439
|
+
carried.existingTests = rows;
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
if (Object.keys(carried).length > 0) {
|
|
443
|
+
logger.info("Carried execution records through a state rewrite", {
|
|
444
|
+
where,
|
|
445
|
+
testExecutions: carried.testExecutions
|
|
446
|
+
? Object.keys(carried.testExecutions).length
|
|
447
|
+
: 0,
|
|
448
|
+
existingTestRows: carried.existingTests ? "merged" : "unchanged",
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
return carried;
|
|
452
|
+
}
|
|
303
453
|
function carryForwardRootFields(data, existing) {
|
|
304
454
|
if (!existing)
|
|
305
455
|
return {};
|
|
@@ -410,6 +560,24 @@ export class StateManager {
|
|
|
410
560
|
* Data fields are spread at root level alongside metadata
|
|
411
561
|
*/
|
|
412
562
|
async writeData(data, options) {
|
|
563
|
+
await this.persist(data, options, options.repository);
|
|
564
|
+
}
|
|
565
|
+
/**
|
|
566
|
+
* Append to the root payload of a state file the run has already created.
|
|
567
|
+
* Takes no repository: the name the first write recorded stays, and the
|
|
568
|
+
* metadata it wrote is what these callers read back before patching it.
|
|
569
|
+
*/
|
|
570
|
+
async appendData(data, options) {
|
|
571
|
+
const recorded = (await this.readFullState())?.metadata.repository;
|
|
572
|
+
// Not a check on the field — the field is required and always there. This
|
|
573
|
+
// is the caller appending to a run that never started, which loses the
|
|
574
|
+
// payload silently if it writes an untagged root instead.
|
|
575
|
+
if (!recorded) {
|
|
576
|
+
throw new Error(`no state file to append to at ${this.stateFile}: the run's first write creates it`);
|
|
577
|
+
}
|
|
578
|
+
await this.persist(data, options, recorded);
|
|
579
|
+
}
|
|
580
|
+
async persist(data, options, repository) {
|
|
413
581
|
try {
|
|
414
582
|
// Read existing metadata + any related-repo sections if file exists, so
|
|
415
583
|
// rewriting the primary (root) payload preserves the multi-repo sections.
|
|
@@ -425,16 +593,17 @@ export class StateManager {
|
|
|
425
593
|
const state = {
|
|
426
594
|
...data,
|
|
427
595
|
...carryForwardRootFields(data, existingRoot),
|
|
596
|
+
...carryForwardExecutionRecords(data, existingRoot, `root of ${this.stateFile}`),
|
|
428
597
|
metadata: {
|
|
429
598
|
sessionId: this.sessionId,
|
|
430
599
|
stateType: this.stateType,
|
|
431
600
|
repositoryPath: options?.repositoryPath || existingMetadata?.repositoryPath,
|
|
432
|
-
repository
|
|
601
|
+
repository,
|
|
433
602
|
createdAt: existingMetadata?.createdAt || new Date().toISOString(),
|
|
434
603
|
updatedAt: new Date().toISOString(),
|
|
435
604
|
// Preserve the prior step when the caller omits one (matches
|
|
436
605
|
// repositoryPath/repository/createdAt above) so a metadata-agnostic
|
|
437
|
-
// write — e.g.
|
|
606
|
+
// write — e.g. skyramp_execute_test recording an execution —
|
|
438
607
|
// does not wipe the pipeline step recorded by an earlier phase.
|
|
439
608
|
step: options?.step ?? existingMetadata?.step,
|
|
440
609
|
},
|
|
@@ -459,25 +628,12 @@ export class StateManager {
|
|
|
459
628
|
// matching the root's metadata.repo) targets the PRIMARY section, so all
|
|
460
629
|
// single-repo behavior is unchanged.
|
|
461
630
|
// -----------------------------------------------------------------------
|
|
462
|
-
/** Is `repo` the primary section? By NAME
|
|
463
|
-
*
|
|
464
|
-
*
|
|
465
|
-
*
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
if (!repo)
|
|
469
|
-
return true;
|
|
470
|
-
if (primaryRepo)
|
|
471
|
-
return repo === primaryRepo;
|
|
472
|
-
// No primary declared: the first write of the run is the primary, even when
|
|
473
|
-
// it carries an explicit owner/repo.
|
|
474
|
-
if (!this.exists())
|
|
475
|
-
return true;
|
|
476
|
-
const full = await this.readFullState();
|
|
477
|
-
// File already exists: primary only if `repo` matches the repo recorded on
|
|
478
|
-
// the root. An untagged root means the primary was written without a repo
|
|
479
|
-
// (legacy/single-repo), so any non-empty `repo` here is a RELATED repo.
|
|
480
|
-
return full?.metadata.repository === repo;
|
|
631
|
+
/** Is `repo` the primary section? By NAME, against the name the run declared
|
|
632
|
+
* for its primary checkout — so whichever call lands first cannot decide it
|
|
633
|
+
* (SKYR-4333: a docs-only primary diff let the related repo write first and
|
|
634
|
+
* take the root). */
|
|
635
|
+
isPrimaryRepo(repo, primaryRepo) {
|
|
636
|
+
return repo === primaryRepo;
|
|
481
637
|
}
|
|
482
638
|
/**
|
|
483
639
|
* Write one repo's analysis into the run-scoped state file. The primary repo
|
|
@@ -492,7 +648,25 @@ export class StateManager {
|
|
|
492
648
|
* did so deleted the plan the agent had registered. NAMED rather than "keep
|
|
493
649
|
* everything omitted", which would resurrect fields a re-analysis clears. */
|
|
494
650
|
async writeRepoData(data, options) {
|
|
495
|
-
|
|
651
|
+
await this.route(data, options, options.primary.repo);
|
|
652
|
+
}
|
|
653
|
+
/**
|
|
654
|
+
* Update one repo's section of a state file the run has already created.
|
|
655
|
+
* Takes no primary: the root records the primary's name, and these callers
|
|
656
|
+
* (execute, run-existing-tests, actions) read the section back before they
|
|
657
|
+
* patch it, so the run is already under way.
|
|
658
|
+
*/
|
|
659
|
+
async updateRepoData(data, options) {
|
|
660
|
+
const recorded = (await this.readFullState())?.metadata.repository;
|
|
661
|
+
// Not a check on the field — the field is required and the root always has
|
|
662
|
+
// one. This is a caller patching a run that never started.
|
|
663
|
+
if (!recorded) {
|
|
664
|
+
throw new Error(`no state file to update at ${this.stateFile}: skyramp_analyze_changes creates it`);
|
|
665
|
+
}
|
|
666
|
+
await this.route(data, options, recorded);
|
|
667
|
+
}
|
|
668
|
+
async route(data, options, primaryRepo) {
|
|
669
|
+
if (this.isPrimaryRepo(options.repo, primaryRepo)) {
|
|
496
670
|
await this.writeData(data, {
|
|
497
671
|
repositoryPath: options.repositoryPath,
|
|
498
672
|
step: options.step,
|
|
@@ -512,7 +686,10 @@ export class StateManager {
|
|
|
512
686
|
metadata: {
|
|
513
687
|
sessionId: this.sessionId,
|
|
514
688
|
stateType: this.stateType,
|
|
515
|
-
|
|
689
|
+
// The primary's own name AND path, so a root created by a related
|
|
690
|
+
// repo's earlier call still describes the primary completely.
|
|
691
|
+
repository: primaryRepo,
|
|
692
|
+
repositoryPath: options.primary?.repositoryPath,
|
|
516
693
|
createdAt: new Date().toISOString(),
|
|
517
694
|
updatedAt: new Date().toISOString(),
|
|
518
695
|
},
|
|
@@ -524,8 +701,12 @@ export class StateManager {
|
|
|
524
701
|
// that skyramp_analyze_changes recorded — getRepoRepositoryPath() relies on
|
|
525
702
|
// it to re-absolutize that repo's test paths.
|
|
526
703
|
const priorRepositoryPath = relatedRepos[options.repo]?.repositoryPath;
|
|
704
|
+
const priorData = relatedRepos[options.repo]?.data;
|
|
527
705
|
relatedRepos[options.repo] = {
|
|
528
|
-
data
|
|
706
|
+
data: {
|
|
707
|
+
...data,
|
|
708
|
+
...carryForwardExecutionRecords(data, priorData, `section ${options.repo} of ${this.stateFile}`),
|
|
709
|
+
},
|
|
529
710
|
repositoryPath: options.repositoryPath ?? priorRepositoryPath,
|
|
530
711
|
};
|
|
531
712
|
base.relatedRepos = relatedRepos;
|
|
@@ -539,10 +720,10 @@ export class StateManager {
|
|
|
539
720
|
* undefined → the primary (root) section (identical to readData()).
|
|
540
721
|
*/
|
|
541
722
|
async readRepoData(repo) {
|
|
542
|
-
|
|
723
|
+
const full = await this.readFullState();
|
|
724
|
+
if (!repo || (full && this.isPrimaryRepo(repo, full.metadata.repository))) {
|
|
543
725
|
return this.readData();
|
|
544
726
|
}
|
|
545
|
-
const full = await this.readFullState();
|
|
546
727
|
return full?.relatedRepos?.[repo]?.data ?? null;
|
|
547
728
|
}
|
|
548
729
|
/**
|
|
@@ -551,7 +732,7 @@ export class StateManager {
|
|
|
551
732
|
*/
|
|
552
733
|
async getRepoRepositoryPath(repo) {
|
|
553
734
|
const full = await this.readFullState();
|
|
554
|
-
if (
|
|
735
|
+
if (!repo || (full && this.isPrimaryRepo(repo, full.metadata.repository))) {
|
|
555
736
|
return full?.metadata.repositoryPath;
|
|
556
737
|
}
|
|
557
738
|
return full?.relatedRepos?.[repo]?.repositoryPath;
|
|
@@ -572,13 +753,16 @@ export class StateManager {
|
|
|
572
753
|
*/
|
|
573
754
|
async listRepoCheckouts() {
|
|
574
755
|
const full = await this.readFullState();
|
|
756
|
+
// No file, no checkouts — a question about the run, not about the field.
|
|
757
|
+
if (!full)
|
|
758
|
+
return [];
|
|
575
759
|
const checkouts = [
|
|
576
760
|
{
|
|
577
|
-
root: full
|
|
578
|
-
repository: full
|
|
761
|
+
root: full.metadata.repositoryPath,
|
|
762
|
+
repository: full.metadata.repository,
|
|
579
763
|
primary: true,
|
|
580
764
|
},
|
|
581
|
-
...Object.entries(full
|
|
765
|
+
...Object.entries(full.relatedRepos ?? {}).map(([repository, section]) => ({
|
|
582
766
|
root: section.repositoryPath,
|
|
583
767
|
repository,
|
|
584
768
|
primary: false,
|
|
@@ -41,9 +41,16 @@ function assertedStatuses(commentless, statusUseOffsets) {
|
|
|
41
41
|
for (const offset of statusUseOffsets) {
|
|
42
42
|
const lineEnd = commentless.indexOf("\n", offset);
|
|
43
43
|
const line = commentless.slice(offset, lineEnd === -1 ? undefined : lineEnd);
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
// Every status-looking token on the line, not the first: a label such as
|
|
45
|
+
// `expect(r.statusCode, "legacy 404").toBe(200)` reads 404 before the code
|
|
46
|
+
// the matcher actually asserts. Two different codes on one line means the
|
|
47
|
+
// line does not say which is asserted, so NaN goes in and every exemption
|
|
48
|
+
// below refuses to fire on it.
|
|
49
|
+
const codes = new Set([...line.matchAll(/\b([1-5]\d{2})\b/g)].map((m) => Number(m[1])));
|
|
50
|
+
if (codes.size === 1)
|
|
51
|
+
statuses.push([...codes][0]);
|
|
52
|
+
else if (codes.size > 1)
|
|
53
|
+
statuses.push(Number.NaN);
|
|
47
54
|
}
|
|
48
55
|
return statuses;
|
|
49
56
|
}
|
|
@@ -94,10 +101,12 @@ const STATUS_HELPER_BEFORE_RE = /check_?status_?code\s*\(\s*$/i;
|
|
|
94
101
|
* Any other read — getValue/get_response_value/checkSchema/.json()/passed as a
|
|
95
102
|
* call argument, including inside a template-literal or f-string interpolation
|
|
96
103
|
* — clears it. Exempt: DELETE calls, sole 204/202 statuses, poll bindings
|
|
97
|
-
* inside loops
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
104
|
+
* inside loops, and any response whose asserted statuses are all >= 400 — a
|
|
105
|
+
* refusal is proven by the refusal, and which error fields a test pins is the
|
|
106
|
+
* plan's decision. Severity: unconditional (`hard`) for a response nothing
|
|
107
|
+
* asserts at all, and advisory (`warn`) when only 2xx statuses are asserted,
|
|
108
|
+
* because a 200 can legitimately carry no body (/logout, /cancel) and that is
|
|
109
|
+
* not deterministically knowable. */
|
|
101
110
|
function lintStatusOnlyResponses(stripped, commentless, language, bindings) {
|
|
102
111
|
const findings = [];
|
|
103
112
|
for (const { varName, declIndex, declClose } of bindings) {
|
|
@@ -144,27 +153,36 @@ function lintStatusOnlyResponses(stripped, commentless, language, bindings) {
|
|
|
144
153
|
if (statuses.length > 0 && statuses.every((s) => s === 204 || s === 202)) {
|
|
145
154
|
continue;
|
|
146
155
|
}
|
|
147
|
-
//
|
|
148
|
-
//
|
|
149
|
-
|
|
156
|
+
// A refused request is proven by the refusal. Which error body fields a test
|
|
157
|
+
// pins, if any, is the plan's decision — a case that states the exact code or
|
|
158
|
+
// wording gets it asserted, and one that does not must not be forced into
|
|
159
|
+
// pinning today's spelling, because the fixed app refuses the same input with
|
|
160
|
+
// a different code. This lint made that a hard failure and so contradicted the
|
|
161
|
+
// planning rule on `mrugesh/refusal-not-status`.
|
|
162
|
+
// EVERY asserted status, the way the 204/202 exemption above reads them: a
|
|
163
|
+
// variable reused for a refused call and then a successful one asserts both,
|
|
164
|
+
// and `some` let the successful one's missing body ride out on the refusal.
|
|
165
|
+
if (statuses.length > 0 && statuses.every((status) => status >= 400))
|
|
166
|
+
continue;
|
|
167
|
+
// A response nothing asserts at all is still an unconditional violation; a
|
|
168
|
+
// 2xx-only status check stays advisory, because empty-body 200s exist.
|
|
169
|
+
const severity = statusUses === 0 ? "hard" : "warn";
|
|
150
170
|
findings.push({
|
|
151
171
|
rule: "status-only-response",
|
|
152
172
|
severity,
|
|
153
173
|
line: lineOfOffset(stripped, declIndex),
|
|
154
174
|
message: statusUses > 0
|
|
155
|
-
?
|
|
156
|
-
? `Error response \`${varName}\` is only checked for its status code — the error body (code/message/detail) must be asserted.`
|
|
157
|
-
: `Response \`${varName}\` is only checked for its status code.`
|
|
175
|
+
? `Response \`${varName}\` is only checked for its status code.`
|
|
158
176
|
: `Response \`${varName}\` is captured but never asserted.`,
|
|
159
177
|
// The advisory case is phrased as a question, not an instruction. A
|
|
160
178
|
// response no behaviour in the file depends on is CORRECT with its
|
|
161
179
|
// status code and nothing more (SKYR-4310) — telling the agent to
|
|
162
180
|
// assert the body regardless is how a 136-assertion test gets written
|
|
163
|
-
// to prove a default page size. The hard case is
|
|
164
|
-
//
|
|
181
|
+
// to prove a default page size. The hard case is now only a response
|
|
182
|
+
// nothing asserts at all.
|
|
165
183
|
remediation: severity === "warn"
|
|
166
184
|
? `If a behaviour this file tests depends on this response's body, assert the fields it depends on via \`${helperCall(language, varName)}\`. If no behaviour depends on it, the status code alone is the right answer — leave it.`
|
|
167
|
-
: `Assert
|
|
185
|
+
: `Assert this response's status, and the fields a behaviour in this file depends on via \`${helperCall(language, varName)}\`.`,
|
|
168
186
|
});
|
|
169
187
|
}
|
|
170
188
|
return findings;
|
|
@@ -27,6 +27,10 @@ const EXACT_MATCHERS = new Set([
|
|
|
27
27
|
"to_equal",
|
|
28
28
|
"toHaveJSProperty",
|
|
29
29
|
"to_have_js_property",
|
|
30
|
+
// SKYR-4462: an exact computed value, the same tier as toHaveAttribute and
|
|
31
|
+
// strictly stronger than toContainText (which already weighs 2).
|
|
32
|
+
"toHaveCSS",
|
|
33
|
+
"to_have_css",
|
|
30
34
|
]);
|
|
31
35
|
/** Pattern/partial/state matchers — weaker than exact values, but real
|
|
32
36
|
* behavioral assertions: `toBeDisabled` after an action asserts a semantic
|
|
@@ -48,7 +52,25 @@ const PARTIAL_MATCHERS = new Set([
|
|
|
48
52
|
"to_be_disabled",
|
|
49
53
|
"to_be_enabled",
|
|
50
54
|
"to_be_hidden",
|
|
55
|
+
// SKYR-4462: token-bounded class match — a real class assertion, the
|
|
56
|
+
// appearance rule's preferred form.
|
|
57
|
+
"toContainClass",
|
|
58
|
+
"to_contain_class",
|
|
51
59
|
]);
|
|
60
|
+
// SKYR-4462: numeric comparison matchers. Generic on their own (an existence-
|
|
61
|
+
// tier `expect(count).toBeGreaterThan(0)` is padding), so they earn weight 2
|
|
62
|
+
// ONLY when the compared subject reads a geometry property — a boundingBox()
|
|
63
|
+
// x/y/edge comparison, the one appearance case that has no record-time kind.
|
|
64
|
+
const RANGE_MATCHERS = new Set([
|
|
65
|
+
"toBeLessThan",
|
|
66
|
+
"toBeGreaterThan",
|
|
67
|
+
"toBeLessThanOrEqual",
|
|
68
|
+
"toBeGreaterThanOrEqual",
|
|
69
|
+
]);
|
|
70
|
+
// `.x` / `.y` / `.left` … or `['x']` / `["width"]` — a boundingBox() geometry
|
|
71
|
+
// access. `count`, `.length`, `status_code` do not match, so their comparisons
|
|
72
|
+
// stay existence-tier.
|
|
73
|
+
const GEOMETRY_ACCESS = /(?:\.|\[['"])(?:x|y|left|top|right|bottom|width|height)\b/;
|
|
52
74
|
/** Absence matchers whose tier depends on whether the chain negates them. */
|
|
53
75
|
const NULL_MATCHERS = new Set(["toBeNull", "to_be_null"]);
|
|
54
76
|
/** Chain links to skip between `expect(...)` and the matcher. */
|
|
@@ -79,9 +101,13 @@ export function detectAssertionLanguage(testFile) {
|
|
|
79
101
|
return undefined;
|
|
80
102
|
}
|
|
81
103
|
}
|
|
82
|
-
function matcherWeight(matcher, links = []) {
|
|
104
|
+
function matcherWeight(matcher, links = [], subject = "") {
|
|
83
105
|
if (matcher === undefined)
|
|
84
106
|
return 1;
|
|
107
|
+
// A boundingBox() ordering comparison is a real layout assertion; the same
|
|
108
|
+
// matcher on a count/length is padding, so it is the subject that decides.
|
|
109
|
+
if (RANGE_MATCHERS.has(matcher))
|
|
110
|
+
return GEOMETRY_ACCESS.test(subject) ? 2 : 1;
|
|
85
111
|
// `not.toBeNull()` is the weak existence idiom the rubric bans, while a bare
|
|
86
112
|
// `toBeNull()` is the exact absence assertion it asks for. Same matcher, so
|
|
87
113
|
// only the chain separates them.
|
|
@@ -189,7 +215,7 @@ function expectSites(raw, stripped) {
|
|
|
189
215
|
sites.push({
|
|
190
216
|
line: lineOfOffset(stripped, m.index),
|
|
191
217
|
matcher,
|
|
192
|
-
weight: matcherWeight(matcher, links),
|
|
218
|
+
weight: matcherWeight(matcher, links, actual),
|
|
193
219
|
fingerprint: fingerprintOf(`expect${soft}(${actual})` +
|
|
194
220
|
links.map((link) => `.${link}`).join("") +
|
|
195
221
|
(matcher === undefined ? "" : `.${matcher}`) +
|
|
@@ -199,8 +225,11 @@ function expectSites(raw, stripped) {
|
|
|
199
225
|
}
|
|
200
226
|
return sites;
|
|
201
227
|
}
|
|
202
|
-
/** Weight of a bare python `assert` statement, classified by its operators.
|
|
203
|
-
|
|
228
|
+
/** Weight of a bare python `assert` statement, classified by its operators.
|
|
229
|
+
* `raw` is the unstripped text: the geometry check reads a `['x']` key that the
|
|
230
|
+
* string-blanking pass would otherwise erase; the operator checks stay on the
|
|
231
|
+
* stripped `stmt` so they never match inside a string literal. */
|
|
232
|
+
function pythonAssertWeight(stmt, raw = stmt) {
|
|
204
233
|
if (stmt.includes("==") ||
|
|
205
234
|
stmt.includes("!=") ||
|
|
206
235
|
// `is None` is the python spelling of `toBeNull` — an exact absence check.
|
|
@@ -211,7 +240,11 @@ function pythonAssertWeight(stmt) {
|
|
|
211
240
|
// in python when spelled checkSchema.
|
|
212
241
|
/\bcheck_?schema\s*\(/i.test(stmt))
|
|
213
242
|
return 3;
|
|
214
|
-
if (/\bre\s*\.\s*(?:match|fullmatch)\s*\(|\.startswith\s*\(|\bin\b/.test(stmt)
|
|
243
|
+
if (/\bre\s*\.\s*(?:match|fullmatch)\s*\(|\.startswith\s*\(|\bin\b/.test(stmt) ||
|
|
244
|
+
// SKYR-4462: a bounding_box x/y ordering compare (image['x'] < info['x']),
|
|
245
|
+
// the python twin of toBeLessThan on a geometry property. A plain range
|
|
246
|
+
// check (status_code >= 200) reads no geometry access and stays weight 1.
|
|
247
|
+
(/[<>]/.test(stmt) && GEOMETRY_ACCESS.test(raw)))
|
|
215
248
|
return 2;
|
|
216
249
|
return 1;
|
|
217
250
|
}
|
|
@@ -238,7 +271,7 @@ function pythonAssertSites(raw, stripped) {
|
|
|
238
271
|
const stmtEnd = offset + stmt.length;
|
|
239
272
|
sites.push({
|
|
240
273
|
line: i + 1,
|
|
241
|
-
weight: pythonAssertWeight(stmt),
|
|
274
|
+
weight: pythonAssertWeight(stmt, raw.slice(offset + (line.length - line.trimStart().length), stmtEnd)),
|
|
242
275
|
fingerprint: fingerprintOf(raw.slice(offset + (line.length - line.trimStart().length), stmtEnd)),
|
|
243
276
|
});
|
|
244
277
|
i = last;
|
|
@@ -244,13 +244,15 @@ function lintNegativeOnlySpec(commentless) {
|
|
|
244
244
|
ABSENCE_ASSERT_RE.lastIndex = 0;
|
|
245
245
|
if (POSITIVE_ASSERT_RE.test(remainder))
|
|
246
246
|
return [];
|
|
247
|
-
return [
|
|
247
|
+
return [
|
|
248
|
+
{
|
|
248
249
|
rule: "negative-only-spec",
|
|
249
250
|
severity: "hard",
|
|
250
251
|
line: lineOfOffset(commentless, first.index),
|
|
251
252
|
message: "Every locator assertion in this spec asserts absence (toBeHidden / not.toBeVisible); nothing proves the page rendered, so it passes on a blank page, a 404 or a typo'd selector.",
|
|
252
253
|
remediation: "Add at least one positive assertion on a retained element of the same page (toHaveText / toHaveValue / toHaveCount / toHaveURL) next to the absence assertions.",
|
|
253
|
-
}
|
|
254
|
+
},
|
|
255
|
+
];
|
|
254
256
|
}
|
|
255
257
|
export function lintUiSpec(raw, language, opts) {
|
|
256
258
|
if (language === "java")
|