@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
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { type ReuseHandOff, type ReuseHandOffSource } from "../../utils/AnalysisStateManager.js";
|
|
1
2
|
import { type VerifyResult } from "../../utils/pom-verify/index.js";
|
|
2
|
-
import { type ReuseOutcome, type ReuseRecord } from "./reuse-outcome.js";
|
|
3
|
-
import { type UtilsVerifyResult } from "../../utils/utils-verify/index.js";
|
|
3
|
+
import { type InHouseDeclaration, type ReuseOutcome, type ReuseRecord } from "./reuse-outcome.js";
|
|
4
|
+
import { type UtilsVerifyResult, type UtilsViolationKind } from "../../utils/utils-verify/index.js";
|
|
4
5
|
import type { ReuseVerificationFailure } from "../../types/ReuseOutcome.js";
|
|
5
6
|
/**
|
|
6
7
|
* Record the tier-1 candidate count STEP 1 detected, plus the identity needed to
|
|
@@ -98,7 +99,9 @@ export declare function canonPath(p: string): string;
|
|
|
98
99
|
export declare function utilsFileLabel(files: string[]): string;
|
|
99
100
|
/** Verdict of one utils verify pass. The verdict alone is stored — counts and the
|
|
100
101
|
* file list are re-derived from the delivered files at report time. */
|
|
101
|
-
export declare function recordUtilsVerifyOutcome(testFile: string, r: UtilsVerifyResult, language: string, framework: string, testType: string | undefined, explicitStateFile?: string
|
|
102
|
+
export declare function recordUtilsVerifyOutcome(testFile: string, r: UtilsVerifyResult, language: string, framework: string, testType: string | undefined, explicitStateFile?: string,
|
|
103
|
+
/** The agent's declarations from this verify call, when it made any. */
|
|
104
|
+
inHouseDeclared?: InHouseDeclaration): Promise<boolean>;
|
|
102
105
|
/** `skyramp_modularization` was called for this spec. Ownership on the write, like
|
|
103
106
|
* the utils debt: a same-basename spec elsewhere does not inherit the mark. */
|
|
104
107
|
export declare function recordModularized(testFile: string, explicitStateFile?: string): Promise<void>;
|
|
@@ -135,14 +138,22 @@ export declare function pendingUtilsVerification(testFile: string, explicitState
|
|
|
135
138
|
* hand-off text, so the debt can never be owed for a test that was never told to
|
|
136
139
|
* pay it (a gate that cannot be satisfied is the SKYR-4115 failure inverted).
|
|
137
140
|
*/
|
|
138
|
-
export declare function recordReuseHandOff(files: string[], testType: string, language: string, framework: string, explicitStateFile?: string): Promise<void>;
|
|
141
|
+
export declare function recordReuseHandOff(files: string[], testType: string, language: string, framework: string, explicitStateFile?: string, source?: ReuseHandOffSource): Promise<void>;
|
|
139
142
|
/**
|
|
140
|
-
* Does this spec owe the modularize→reuse pair
|
|
143
|
+
* Does this spec owe the modularize→reuse pair it was handed off? The
|
|
141
144
|
* chain-compliance half of SKYR-4220: 2 of 8 SKYR-4196 Part B runs wrote a second
|
|
142
|
-
* integration test's imports by hand and skipped the pair. A hand-off
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
*
|
|
145
|
+
* integration test's imports by hand and skipped the pair. A hand-off names this
|
|
146
|
+
* exact file with the spec's test type (integration, or ui since SKYR-4224) and no
|
|
147
|
+
* reuse pass was ever recorded for it → refuse, naming the two calls. Fails open on
|
|
148
|
+
* everything else.
|
|
149
|
+
*
|
|
150
|
+
* Whether the file is at HEAD matters only for a GENERATION hand-off: the
|
|
151
|
+
* `isNewInRepo` guard exists for a pre-existing test that a stale hand-off names
|
|
152
|
+
* although this run never wrote it (measured 2026-08-26: two maintained tests
|
|
153
|
+
* blocked on a debt they never owed). A MAINTENANCE hand-off is recorded by
|
|
154
|
+
* skyramp_actions for the file it told the agent to update or regenerate — at HEAD
|
|
155
|
+
* by definition — so that file owes the pair whether or not it is present at HEAD,
|
|
156
|
+
* and the guard is not consulted.
|
|
146
157
|
*/
|
|
147
158
|
export declare function pendingReuseChain(testFile: string, explicitStateFile?: string, testType?: string): Promise<string | undefined>;
|
|
148
159
|
/** Every reuse-phase debt a downstream tool must refuse on, first one wins. One call
|
|
@@ -153,14 +164,15 @@ export declare function pendingReuseDebt(testFile: string, explicitStateFile?: s
|
|
|
153
164
|
/**
|
|
154
165
|
* Report-time chain verdict for one report row. `fileName` is a basename, so it is
|
|
155
166
|
* matched against the basenames of the handed-off files of the same test type. True
|
|
156
|
-
* only when such a file exists,
|
|
157
|
-
*
|
|
167
|
+
* only when such a file exists, this run wrote it (generation hand-off, new in the
|
|
168
|
+
* repo) or rewrote it (maintenance hand-off), and no reuse record was ever written
|
|
169
|
+
* for that basename — never `false`, so a consumer omits rather than renders a
|
|
158
170
|
* negative.
|
|
159
171
|
*/
|
|
160
|
-
export declare function reuseChainSkipped(fileName: string, testType: string, record: ReuseRecord | undefined,
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
172
|
+
export declare function reuseChainSkipped(fileName: string, testType: string, record: ReuseRecord | undefined,
|
|
173
|
+
/** Optional because `reuseHandOffs` is optional on the run state: a run that
|
|
174
|
+
* armed nothing never writes the field. */
|
|
175
|
+
handOffs: Record<string, ReuseHandOff> | undefined): Promise<true | undefined>;
|
|
164
176
|
/**
|
|
165
177
|
* A blocking reuse verdict measured on the DELIVERED files at report time — the
|
|
166
178
|
* same predicate the live `verify: true` pass refuses on, re-run on what ships.
|
|
@@ -208,6 +220,16 @@ export declare const REUSE_SUBMIT_MAX_REFUSALS = 2;
|
|
|
208
220
|
/** What one report row's re-derivation established: the outcome to publish, and a
|
|
209
221
|
* blocking verdict when the delivered files fail the live check. */
|
|
210
222
|
export interface ReuseRederivation {
|
|
223
|
+
/** Carried declines a finding consumed on this pass. The caller keeps these and
|
|
224
|
+
* retires the rest: a decline that covers nothing is permission looking for a
|
|
225
|
+
* fault, and the next fault it meets is one nobody declined. */
|
|
226
|
+
carriedConsumed?: CarriedDecline[];
|
|
227
|
+
/** Whether this pass actually MEASURED the spec, so `carriedConsumed` is an answer
|
|
228
|
+
* rather than a silence. A pass that threw, or one whose record carries no spec
|
|
229
|
+
* identity, consumes nothing for the same reason it reports nothing: it read
|
|
230
|
+
* nothing. Retiring on that deletes permission while the fault it covers is still
|
|
231
|
+
* in the file, and the next submission refuses a decline already made. */
|
|
232
|
+
carriedEvaluated?: boolean;
|
|
211
233
|
outcome: ReuseOutcome | undefined;
|
|
212
234
|
blocking?: ReuseBlockingVerdict;
|
|
213
235
|
}
|
|
@@ -251,4 +273,56 @@ export declare function verificationFailures(r: UtilsVerifyResult): ReuseVerific
|
|
|
251
273
|
* and no verdict. A verifier that cannot run is not evidence against the file, and
|
|
252
274
|
* refusing a report on a malfunction would deliver nothing to the customer.
|
|
253
275
|
*/
|
|
254
|
-
|
|
276
|
+
/** A decline the run documented in a delivered file and then removed from it before
|
|
277
|
+
* delivery. Read exactly like a marker still in the file — the record of the decline
|
|
278
|
+
* belongs to the run, not to the customer's copy. */
|
|
279
|
+
/** A decline the run removed from a delivered file. `file` is a runtime tag the
|
|
280
|
+
* submit path puts on when it reads the record, so a consumption can be attributed
|
|
281
|
+
* back to the file it came from; it is not part of what is persisted. */
|
|
282
|
+
export type CarriedDecline =
|
|
283
|
+
/** A `reuse-verify: allow` decline: the finding it documented, by kind and helper. */
|
|
284
|
+
{
|
|
285
|
+
kind: UtilsViolationKind;
|
|
286
|
+
helper: string;
|
|
287
|
+
keptInline?: undefined;
|
|
288
|
+
file?: string;
|
|
289
|
+
}
|
|
290
|
+
/** A `// kept inline:` decline: the page-object file basename it named, and the
|
|
291
|
+
* reason it gave. The reason is the part the customer's report shows, so dropping
|
|
292
|
+
* it silently emptied the report's `skipped` list on a later submission. */
|
|
293
|
+
| {
|
|
294
|
+
keptInline: string;
|
|
295
|
+
reason: string;
|
|
296
|
+
kind?: undefined;
|
|
297
|
+
helper?: undefined;
|
|
298
|
+
file?: string;
|
|
299
|
+
};
|
|
300
|
+
/**
|
|
301
|
+
* The shared-helper record for a delivered test that has NO reuse record — derived
|
|
302
|
+
* from the file's own imports.
|
|
303
|
+
*
|
|
304
|
+
* The record the report normally carries is written by the verify pass, so a row
|
|
305
|
+
* only got one when the agent chose to call `skyramp_reuse_code` with
|
|
306
|
+
* `verify: true` on that file. That keys the report on the tool's activity rather
|
|
307
|
+
* than on the product: a contract test whose delivered file imports and calls three
|
|
308
|
+
* helpers reported `reuse: null`, which a reader cannot tell from "did not reuse".
|
|
309
|
+
*
|
|
310
|
+
* So where no record exists, the row is answered from the delivered file instead.
|
|
311
|
+
* What this can state is exactly what the file proves — which module, which helpers
|
|
312
|
+
* taken from it. It states NO `verification`: nothing verified this spec, and an
|
|
313
|
+
* optional member that is absent means "not measured", never "false". It raises no
|
|
314
|
+
* blocking verdict for the same reason — a file the gates never walked must not
|
|
315
|
+
* start failing a report at submission time.
|
|
316
|
+
*
|
|
317
|
+
* Returns `notDerived` with a stated reason where the file cannot answer, because a
|
|
318
|
+
* bare `null` is indistinguishable from "did not reuse" and is read as a fault.
|
|
319
|
+
*
|
|
320
|
+
* The reason names what was LOOKED AT, not what exists. `locateUtilsFiles` returns
|
|
321
|
+
* the modules this run wrote or changed beside the spec, plus the ones the spec
|
|
322
|
+
* imports — it does not enumerate the directory, so a clean tracked module beside a
|
|
323
|
+
* spec that imports nothing is not among them. Saying "no module was found here"
|
|
324
|
+
* would assert a sweep that did not happen, which is the same overclaim as the row
|
|
325
|
+
* this function exists to replace.
|
|
326
|
+
*/
|
|
327
|
+
export declare function deriveReuseFromDelivered(testFile: string, language?: string): Promise<ReuseOutcome>;
|
|
328
|
+
export declare function rederiveReuse(record: ReuseRecord, carriedAllows?: CarriedDecline[]): Promise<ReuseRederivation>;
|
|
@@ -9,6 +9,8 @@ import { resolveRunStatePath, StateManager, } from "../../utils/AnalysisStateMan
|
|
|
9
9
|
import { verifyReuse, } from "../../utils/pom-verify/index.js";
|
|
10
10
|
import { buildSkipped, findUnparsableKeptInline, flaggedFrom, mergeFlagged, verificationFrom, ReuseVerificationOutcome, HelperVerificationOutcome, } from "./reuse-outcome.js";
|
|
11
11
|
import { verifyUtils, realpath, utilsSpecFor, countAssertions, hasPageErrorGuard, utilsSpecForFile, } from "../../utils/utils-verify/index.js";
|
|
12
|
+
import { readDeliveredImports } from "../../utils/utils-verify/delivered-imports.js";
|
|
13
|
+
import { hasUtilsHeader } from "../../utils/utils-verify/locate.js";
|
|
12
14
|
import { detectGitRoot } from "../../utils/gitStaging.js";
|
|
13
15
|
import { formatUtilsVerifyText } from "./utils-verify-gates.js";
|
|
14
16
|
import { composeVerifyText, infraGateFailure, zeroReuseGateFailure, } from "./verify-gates.js";
|
|
@@ -45,7 +47,7 @@ async function updateReuseOutcome(testFile, patch, explicitStateFile) {
|
|
|
45
47
|
return false;
|
|
46
48
|
const key = path.basename(testFile);
|
|
47
49
|
const existing = data.reuseOutcomes?.[key] ?? {};
|
|
48
|
-
await manager.
|
|
50
|
+
await manager.appendData({
|
|
49
51
|
...data,
|
|
50
52
|
reuseOutcomes: {
|
|
51
53
|
...data.reuseOutcomes,
|
|
@@ -289,14 +291,18 @@ function canon(p) {
|
|
|
289
291
|
}
|
|
290
292
|
/** Verdict of one utils verify pass. The verdict alone is stored — counts and the
|
|
291
293
|
* file list are re-derived from the delivered files at report time. */
|
|
292
|
-
export async function recordUtilsVerifyOutcome(testFile, r, language, framework, testType, explicitStateFile
|
|
294
|
+
export async function recordUtilsVerifyOutcome(testFile, r, language, framework, testType, explicitStateFile,
|
|
295
|
+
/** The agent's declarations from this verify call, when it made any. */
|
|
296
|
+
inHouseDeclared) {
|
|
293
297
|
// `ok` first: a baseline violation is a failed verify with or without a module
|
|
294
298
|
// beside the spec (the live text says FAILED), and recording NoUtilsFile there
|
|
295
299
|
// cleared the debt, let execution proceed, and left the fault to be refused first
|
|
296
|
-
// at submit — the recorded verdict was a stale positive.
|
|
300
|
+
// at submit — the recorded verdict was a stale positive. A spec that calls the
|
|
301
|
+
// repository's own helpers and no Skyramp module was verified — the in-house
|
|
302
|
+
// checks ran — so it is a PASS, not "no utils file".
|
|
297
303
|
const verification = !r.ok
|
|
298
304
|
? HelperVerificationOutcome.Failed
|
|
299
|
-
: r.utilsFiles.length === 0
|
|
305
|
+
: r.utilsFiles.length === 0 && !r.inHouse
|
|
300
306
|
? HelperVerificationOutcome.NoUtilsFile
|
|
301
307
|
: HelperVerificationOutcome.Passed;
|
|
302
308
|
return updateReuseOutcome(testFile, (existing) => {
|
|
@@ -318,6 +324,11 @@ export async function recordUtilsVerifyOutcome(testFile, r, language, framework,
|
|
|
318
324
|
testType: testType ?? prior?.testType,
|
|
319
325
|
verification,
|
|
320
326
|
verifyError: false,
|
|
327
|
+
// The latest declaration stands; a verify call that declares nothing
|
|
328
|
+
// keeps the one before it — the agent is told to declare once.
|
|
329
|
+
...((inHouseDeclared ?? prior?.inHouseDeclared)
|
|
330
|
+
? { inHouseDeclared: inHouseDeclared ?? prior?.inHouseDeclared }
|
|
331
|
+
: {}),
|
|
321
332
|
},
|
|
322
333
|
};
|
|
323
334
|
}, explicitStateFile);
|
|
@@ -402,7 +413,9 @@ export async function pendingModularization(testFile, explicitStateFile) {
|
|
|
402
413
|
return undefined;
|
|
403
414
|
if (!(await runStateWritable(explicitStateFile)))
|
|
404
415
|
return undefined;
|
|
405
|
-
return (
|
|
416
|
+
return ((handOff.source === "maintenance"
|
|
417
|
+
? `${path.basename(testFile)} was updated by this run's maintenance step, and its flow modularizes BEFORE reuse: `
|
|
418
|
+
: `${path.basename(testFile)} was generated with code reuse enabled, and its flow modularizes BEFORE reuse: `) +
|
|
406
419
|
`modularization is what creates the named helpers reuse consolidates. Call skyramp_modularization with ` +
|
|
407
420
|
`{ testFile: "${testFile}", testType: "${handOff.testType}", isTraceBased: true }, apply the returned instructions to the file, ` +
|
|
408
421
|
`then call skyramp_reuse_code again with the same arguments.`);
|
|
@@ -486,7 +499,7 @@ export async function pendingUtilsVerification(testFile, explicitStateFile) {
|
|
|
486
499
|
* hand-off text, so the debt can never be owed for a test that was never told to
|
|
487
500
|
* pay it (a gate that cannot be satisfied is the SKYR-4115 failure inverted).
|
|
488
501
|
*/
|
|
489
|
-
export async function recordReuseHandOff(files, testType, language, framework, explicitStateFile) {
|
|
502
|
+
export async function recordReuseHandOff(files, testType, language, framework, explicitStateFile, source = "generation") {
|
|
490
503
|
if (files.length === 0)
|
|
491
504
|
return;
|
|
492
505
|
// A language the utils verifier does not cover (Java) has no payable reuse half —
|
|
@@ -501,10 +514,18 @@ export async function recordReuseHandOff(files, testType, language, framework, e
|
|
|
501
514
|
const data = await manager.readData();
|
|
502
515
|
if (!data)
|
|
503
516
|
return;
|
|
517
|
+
// A REGENERATE marks its file as maintenance before the generation call it
|
|
518
|
+
// prescribes records the same file as generation. The rewrite is still the
|
|
519
|
+
// maintenance of a file at HEAD, so the origin is never demoted.
|
|
504
520
|
const entries = {};
|
|
505
|
-
for (const f of files)
|
|
506
|
-
|
|
507
|
-
|
|
521
|
+
for (const f of files) {
|
|
522
|
+
const key = await realpath(f);
|
|
523
|
+
const origin = data.reuseHandOffs?.[key]?.source === "maintenance"
|
|
524
|
+
? "maintenance"
|
|
525
|
+
: source;
|
|
526
|
+
entries[key] = { testType, language, framework, source: origin };
|
|
527
|
+
}
|
|
528
|
+
await manager.appendData({
|
|
508
529
|
...data,
|
|
509
530
|
reuseHandOffs: { ...data.reuseHandOffs, ...entries },
|
|
510
531
|
});
|
|
@@ -516,10 +537,12 @@ export async function recordReuseHandOff(files, testType, language, framework, e
|
|
|
516
537
|
});
|
|
517
538
|
}
|
|
518
539
|
}
|
|
519
|
-
/** True when `file` is not in HEAD — i.e. this run created it.
|
|
520
|
-
*
|
|
521
|
-
* executed by the same tool
|
|
522
|
-
*
|
|
540
|
+
/** True when `file` is not in HEAD — i.e. this run created it. Consulted only for a
|
|
541
|
+
* GENERATION hand-off: that debt applies to the tests generation wrote, and a
|
|
542
|
+
* pre-existing test in the same directory, executed by the same tool, must never be
|
|
543
|
+
* held to it. A maintenance hand-off names a file this run rewrote in place, which
|
|
544
|
+
* is at HEAD by definition, so its callers do not ask. Fails open (false) when git
|
|
545
|
+
* cannot answer. */
|
|
523
546
|
async function isNewInRepo(file) {
|
|
524
547
|
const root = detectGitRoot(file);
|
|
525
548
|
if (!root)
|
|
@@ -556,12 +579,20 @@ async function isNewInRepo(file) {
|
|
|
556
579
|
}
|
|
557
580
|
}
|
|
558
581
|
/**
|
|
559
|
-
* Does this spec owe the modularize→reuse pair
|
|
582
|
+
* Does this spec owe the modularize→reuse pair it was handed off? The
|
|
560
583
|
* chain-compliance half of SKYR-4220: 2 of 8 SKYR-4196 Part B runs wrote a second
|
|
561
|
-
* integration test's imports by hand and skipped the pair. A hand-off
|
|
562
|
-
*
|
|
563
|
-
*
|
|
564
|
-
*
|
|
584
|
+
* integration test's imports by hand and skipped the pair. A hand-off names this
|
|
585
|
+
* exact file with the spec's test type (integration, or ui since SKYR-4224) and no
|
|
586
|
+
* reuse pass was ever recorded for it → refuse, naming the two calls. Fails open on
|
|
587
|
+
* everything else.
|
|
588
|
+
*
|
|
589
|
+
* Whether the file is at HEAD matters only for a GENERATION hand-off: the
|
|
590
|
+
* `isNewInRepo` guard exists for a pre-existing test that a stale hand-off names
|
|
591
|
+
* although this run never wrote it (measured 2026-08-26: two maintained tests
|
|
592
|
+
* blocked on a debt they never owed). A MAINTENANCE hand-off is recorded by
|
|
593
|
+
* skyramp_actions for the file it told the agent to update or regenerate — at HEAD
|
|
594
|
+
* by definition — so that file owes the pair whether or not it is present at HEAD,
|
|
595
|
+
* and the guard is not consulted.
|
|
565
596
|
*/
|
|
566
597
|
export async function pendingReuseChain(testFile, explicitStateFile, testType) {
|
|
567
598
|
try {
|
|
@@ -590,9 +621,12 @@ export async function pendingReuseChain(testFile, explicitStateFile, testType) {
|
|
|
590
621
|
return undefined;
|
|
591
622
|
if (record && reuseRan(record))
|
|
592
623
|
return undefined;
|
|
593
|
-
|
|
624
|
+
const maintained = handOff.source === "maintenance";
|
|
625
|
+
if (!maintained && !(await isNewInRepo(testFile)))
|
|
594
626
|
return undefined;
|
|
595
|
-
return (
|
|
627
|
+
return ((maintained
|
|
628
|
+
? `${path.basename(testFile)} was updated by this run's maintenance step, and the modularize→reuse steps it owes were never run. `
|
|
629
|
+
: `${path.basename(testFile)} was generated with code reuse enabled, but its modularize→reuse steps were never run. `) +
|
|
596
630
|
`First call skyramp_modularization with { testFile: "${testFile}", testType: "${handOff.testType}", isTraceBased: true } and apply the result; ` +
|
|
597
631
|
`then, as the very next skyramp call, skyramp_reuse_code with { testFile: "${testFile}", language: "${handOff.language}", framework: "${handOff.framework}", testType: "${handOff.testType}" } ` +
|
|
598
632
|
`and follow its steps (including its final verify: true call). A "nothing to reuse" result is normal — do not retry.`);
|
|
@@ -620,11 +654,15 @@ export async function pendingReuseDebt(testFile, explicitStateFile, testType, op
|
|
|
620
654
|
/**
|
|
621
655
|
* Report-time chain verdict for one report row. `fileName` is a basename, so it is
|
|
622
656
|
* matched against the basenames of the handed-off files of the same test type. True
|
|
623
|
-
* only when such a file exists,
|
|
624
|
-
*
|
|
657
|
+
* only when such a file exists, this run wrote it (generation hand-off, new in the
|
|
658
|
+
* repo) or rewrote it (maintenance hand-off), and no reuse record was ever written
|
|
659
|
+
* for that basename — never `false`, so a consumer omits rather than renders a
|
|
625
660
|
* negative.
|
|
626
661
|
*/
|
|
627
|
-
export async function reuseChainSkipped(fileName, testType, record,
|
|
662
|
+
export async function reuseChainSkipped(fileName, testType, record,
|
|
663
|
+
/** Optional because `reuseHandOffs` is optional on the run state: a run that
|
|
664
|
+
* armed nothing never writes the field. */
|
|
665
|
+
handOffs) {
|
|
628
666
|
// Same rule as the gate: a foreign record fails open; the owner's record suppresses
|
|
629
667
|
// the signal only when reuse was actually issued for it.
|
|
630
668
|
if (!handOffs)
|
|
@@ -646,9 +684,9 @@ export async function reuseChainSkipped(fileName, testType, record, handOffs) {
|
|
|
646
684
|
catch {
|
|
647
685
|
continue;
|
|
648
686
|
}
|
|
649
|
-
//
|
|
650
|
-
//
|
|
651
|
-
if (await isNewInRepo(file))
|
|
687
|
+
// A maintenance hand-off names a file at HEAD; the newness guard is for a
|
|
688
|
+
// generation hand-off only (see isNewInRepo).
|
|
689
|
+
if (h.source === "maintenance" || (await isNewInRepo(file)))
|
|
652
690
|
return true;
|
|
653
691
|
}
|
|
654
692
|
return undefined;
|
|
@@ -687,7 +725,7 @@ export const REUSE_SUBMIT_MAX_REFUSALS = 2;
|
|
|
687
725
|
* raised whether or not a utils file was located: a spec that drops below its
|
|
688
726
|
* modularization baseline is below it with or without a module beside it.
|
|
689
727
|
*/
|
|
690
|
-
async function rederiveHelperOutcome(record) {
|
|
728
|
+
async function rederiveHelperOutcome(record, carriedAllows) {
|
|
691
729
|
const { testFilePath, language } = record;
|
|
692
730
|
if (!testFilePath || !language)
|
|
693
731
|
return { outcome: undefined };
|
|
@@ -696,6 +734,8 @@ async function rederiveHelperOutcome(record) {
|
|
|
696
734
|
language,
|
|
697
735
|
testType: record.utils?.testType,
|
|
698
736
|
baseline: record.baseline,
|
|
737
|
+
// Only the utils grammar's declines mean anything to this verifier.
|
|
738
|
+
carriedAllows: (carriedAllows ?? []).filter((c) => c.kind !== undefined),
|
|
699
739
|
});
|
|
700
740
|
const failures = r.ok ? [] : verificationFailures(r);
|
|
701
741
|
const blocking = r.ok
|
|
@@ -716,8 +756,47 @@ async function rederiveHelperOutcome(record) {
|
|
|
716
756
|
unextractedDuplicateSites: r.unextractedDuplicates.reduce((n, d) => n + d.sites.length, 0),
|
|
717
757
|
}
|
|
718
758
|
: {};
|
|
759
|
+
// The repository's own modules the spec imports, measured now like everything
|
|
760
|
+
// else, with the agent's declarations attached and labelled as such by the type.
|
|
761
|
+
const inHouse = r.inHouse
|
|
762
|
+
? {
|
|
763
|
+
modules: r.inHouse.modules.map((m) => utilsFileLabel([m])),
|
|
764
|
+
helpersUsed: r.inHouse.resolved,
|
|
765
|
+
helpersAdded: r.inHouse.added.map((a) => ({
|
|
766
|
+
module: utilsFileLabel([a.file]),
|
|
767
|
+
helper: a.helper,
|
|
768
|
+
})),
|
|
769
|
+
helpersWidened: r.inHouse.widened.map((a) => ({
|
|
770
|
+
module: utilsFileLabel([a.file]),
|
|
771
|
+
helper: a.helper,
|
|
772
|
+
})),
|
|
773
|
+
additiveGateRan: r.inHouse.additiveGateRan,
|
|
774
|
+
...(record.utils?.inHouseDeclared
|
|
775
|
+
? {
|
|
776
|
+
filesRead: record.utils.inHouseDeclared.filesRead,
|
|
777
|
+
...(record.utils.inHouseDeclared.declined.length > 0
|
|
778
|
+
? { declined: record.utils.inHouseDeclared.declined }
|
|
779
|
+
: {}),
|
|
780
|
+
}
|
|
781
|
+
: {}),
|
|
782
|
+
// With no Skyramp module there is no helpers row to carry the verdict.
|
|
783
|
+
...(r.utilsFiles.length === 0
|
|
784
|
+
? {
|
|
785
|
+
verification: r.ok
|
|
786
|
+
? HelperVerificationOutcome.Passed
|
|
787
|
+
: HelperVerificationOutcome.Failed,
|
|
788
|
+
...(r.ok ? {} : { verificationFailures: failures }),
|
|
789
|
+
}
|
|
790
|
+
: {}),
|
|
791
|
+
}
|
|
792
|
+
: undefined;
|
|
719
793
|
if (r.utilsFiles.length === 0)
|
|
720
|
-
return {
|
|
794
|
+
return {
|
|
795
|
+
outcome: { ...unextracted, ...(inHouse ? { inHouse } : {}) },
|
|
796
|
+
blocking,
|
|
797
|
+
carriedConsumed: r.carriedConsumed,
|
|
798
|
+
carriedEvaluated: true,
|
|
799
|
+
};
|
|
721
800
|
// Two faults, two fields: a deleted guard is not a lost assertion, and a reader
|
|
722
801
|
// acting on the row must not be sent after the wrong one. The count is MEASURED:
|
|
723
802
|
// a `reuse-verify: allow` marker documents a loss and clears the verdict, it does
|
|
@@ -726,6 +805,8 @@ async function rederiveHelperOutcome(record) {
|
|
|
726
805
|
const assertionLoss = [...r.violations, ...r.allowed].some((v) => v.kind === "assertion-loss");
|
|
727
806
|
const guardRemoved = r.violations.some((v) => v.kind === "guard-removed");
|
|
728
807
|
return {
|
|
808
|
+
carriedConsumed: r.carriedConsumed,
|
|
809
|
+
carriedEvaluated: true,
|
|
729
810
|
outcome: {
|
|
730
811
|
...unextracted,
|
|
731
812
|
helpers: {
|
|
@@ -750,6 +831,7 @@ async function rederiveHelperOutcome(record) {
|
|
|
750
831
|
: HelperVerificationOutcome.Failed,
|
|
751
832
|
...(r.ok ? {} : { verificationFailures: failures }),
|
|
752
833
|
},
|
|
834
|
+
...(inHouse ? { inHouse } : {}),
|
|
753
835
|
},
|
|
754
836
|
blocking,
|
|
755
837
|
};
|
|
@@ -817,44 +899,61 @@ async function coverageFrom(testFilePath, specContent) {
|
|
|
817
899
|
}
|
|
818
900
|
}
|
|
819
901
|
/**
|
|
820
|
-
*
|
|
821
|
-
*
|
|
822
|
-
*
|
|
823
|
-
* The two can differ: the execution fix-up may restore `<testFile>.raw.bak` over
|
|
824
|
-
* the spec after verification, reverting every substitution with a plain `cp` that
|
|
825
|
-
* this tool never sees. Trusting the recorded counts there would publish
|
|
826
|
-
* `callsReused: 5, verification: "passed"` for a spec containing no POM calls —
|
|
827
|
-
* a confident false claim, strictly worse than the silence this feature replaced.
|
|
828
|
-
* Re-deriving here rather than requiring a final `verify: true` pass is deliberate:
|
|
829
|
-
* the report step always runs, so the agent cannot skip it.
|
|
902
|
+
* The shared-helper record for a delivered test that has NO reuse record — derived
|
|
903
|
+
* from the file's own imports.
|
|
830
904
|
*
|
|
831
|
-
*
|
|
832
|
-
*
|
|
905
|
+
* The record the report normally carries is written by the verify pass, so a row
|
|
906
|
+
* only got one when the agent chose to call `skyramp_reuse_code` with
|
|
907
|
+
* `verify: true` on that file. That keys the report on the tool's activity rather
|
|
908
|
+
* than on the product: a contract test whose delivered file imports and calls three
|
|
909
|
+
* helpers reported `reuse: null`, which a reader cannot tell from "did not reuse".
|
|
833
910
|
*
|
|
834
|
-
*
|
|
835
|
-
*
|
|
836
|
-
*
|
|
911
|
+
* So where no record exists, the row is answered from the delivered file instead.
|
|
912
|
+
* What this can state is exactly what the file proves — which module, which helpers
|
|
913
|
+
* taken from it. It states NO `verification`: nothing verified this spec, and an
|
|
914
|
+
* optional member that is absent means "not measured", never "false". It raises no
|
|
915
|
+
* blocking verdict for the same reason — a file the gates never walked must not
|
|
916
|
+
* start failing a report at submission time.
|
|
837
917
|
*
|
|
838
|
-
* Returns
|
|
839
|
-
*
|
|
840
|
-
* and no candidates to contrast against), and no outcome when it fails outright.
|
|
841
|
-
* Failing closed matters: falling back to the recorded counts is exactly the false
|
|
842
|
-
* claim this exists to prevent.
|
|
918
|
+
* Returns `notDerived` with a stated reason where the file cannot answer, because a
|
|
919
|
+
* bare `null` is indistinguishable from "did not reuse" and is read as a fault.
|
|
843
920
|
*
|
|
844
|
-
*
|
|
845
|
-
*
|
|
846
|
-
*
|
|
847
|
-
*
|
|
848
|
-
*
|
|
849
|
-
*
|
|
921
|
+
* The reason names what was LOOKED AT, not what exists. `locateUtilsFiles` returns
|
|
922
|
+
* the modules this run wrote or changed beside the spec, plus the ones the spec
|
|
923
|
+
* imports — it does not enumerate the directory, so a clean tracked module beside a
|
|
924
|
+
* spec that imports nothing is not among them. Saying "no module was found here"
|
|
925
|
+
* would assert a sweep that did not happen, which is the same overclaim as the row
|
|
926
|
+
* this function exists to replace.
|
|
850
927
|
*/
|
|
851
|
-
export async function
|
|
928
|
+
export async function deriveReuseFromDelivered(testFile, language) {
|
|
929
|
+
// The shared module gets a report row of its own (the `skyrampUtils.ts` UPDATE or
|
|
930
|
+
// VERIFY row). It is not a test and has no reuse to state, so it gets nothing —
|
|
931
|
+
// the row stays as it is. A reason here would read as a fault on a file that has
|
|
932
|
+
// none, which is the mistake this whole function exists to stop making.
|
|
933
|
+
if (await hasUtilsHeader(testFile))
|
|
934
|
+
return {};
|
|
935
|
+
const read = await readDeliveredImports({ testFile, language });
|
|
936
|
+
if ("reason" in read)
|
|
937
|
+
return { notDerived: read.reason };
|
|
938
|
+
if (read.utilsFiles.length === 0)
|
|
939
|
+
return {
|
|
940
|
+
notDerived: "no shared helper module was located for this test: this run wrote or changed none beside it, and it imports none",
|
|
941
|
+
};
|
|
942
|
+
return {
|
|
943
|
+
helpers: {
|
|
944
|
+
utilsFile: utilsFileLabel(read.utilsFiles),
|
|
945
|
+
helpersImported: read.importedNames.length,
|
|
946
|
+
helperNames: read.importedNames,
|
|
947
|
+
},
|
|
948
|
+
};
|
|
949
|
+
}
|
|
950
|
+
export async function rederiveReuse(record, carriedAllows) {
|
|
852
951
|
const { candidatesDetected, verification, flagged, testFilePath, language } = record;
|
|
853
952
|
// A SkyrampUtils-path record has nothing for the POM verifier to measure; its
|
|
854
953
|
// outcome is re-derived from the utils file instead.
|
|
855
954
|
if (record.utils) {
|
|
856
955
|
try {
|
|
857
|
-
return await rederiveHelperOutcome(record);
|
|
956
|
+
return await rederiveHelperOutcome(record, carriedAllows);
|
|
858
957
|
}
|
|
859
958
|
catch (err) {
|
|
860
959
|
logger.warning("Could not re-derive the shared-helper outcome from the delivered files — omitting it rather than reporting a stale verdict", { testFile: testFilePath, error: String(err) });
|
|
@@ -870,7 +969,9 @@ export async function rederiveReuse(record) {
|
|
|
870
969
|
try {
|
|
871
970
|
const r = await verifyReuse(testFilePath, language);
|
|
872
971
|
const specContent = await readFile(testFilePath, "utf8");
|
|
873
|
-
const
|
|
972
|
+
const carriedKeptInline = (carriedAllows ?? []).filter((c) => c.keptInline !== undefined);
|
|
973
|
+
const classification = { covered: new Set(), ran: false };
|
|
974
|
+
const blocking = await pomBlockingVerdict(testFilePath, language, r, carriedKeptInline.map((c) => c.keptInline), classification);
|
|
874
975
|
// Diagnose the file the report is actually built from. A marker the zero-reuse
|
|
875
976
|
// gate accepts but this cannot parse satisfies the escape hatch while its
|
|
876
977
|
// decline never reaches the report — silent signal loss is the failure class
|
|
@@ -880,7 +981,19 @@ export async function rederiveReuse(record) {
|
|
|
880
981
|
logger.warning("Malformed `// kept inline:` marker(s) in the delivered spec — these declines will be missing from the PR report. " +
|
|
881
982
|
"Use `// kept inline: <file basename> — <reason>` (em dash, or a hyphen with spaces around it).", { testFile: testFilePath, markers: unparsable });
|
|
882
983
|
}
|
|
883
|
-
|
|
984
|
+
// Declines this run removed from the spec before delivery are put back for the
|
|
985
|
+
// REPORT, not for the file. `buildSkipped` reads the markers out of the delivered
|
|
986
|
+
// spec and this run took them out, so without this the report loses a decline it
|
|
987
|
+
// disclosed on the submission that stripped it.
|
|
988
|
+
//
|
|
989
|
+
// Fed through `buildSkipped` rather than appended: that function also decides
|
|
990
|
+
// `declinedBy`, and sometimes `member`. A raw append emitted neither, so two
|
|
991
|
+
// identical submissions produced different reports.
|
|
992
|
+
const carriedMarkers = (carriedAllows ?? [])
|
|
993
|
+
.filter((c) => c.keptInline !== undefined)
|
|
994
|
+
.map((c) => `// kept inline: ${c.keptInline} — ${c.reason}`)
|
|
995
|
+
.join("\n");
|
|
996
|
+
const skipped = buildSkipped(carriedMarkers ? `${specContent}\n${carriedMarkers}\n` : specContent, flagged);
|
|
884
997
|
const coverage = await coverageFrom(testFilePath, specContent);
|
|
885
998
|
const reuseHappened = r.reusedCalls > 0;
|
|
886
999
|
const outcome = {
|
|
@@ -918,7 +1031,18 @@ export async function rederiveReuse(record) {
|
|
|
918
1031
|
...(blocking ? { verificationFailures: blocking.failures } : {}),
|
|
919
1032
|
skipped: skipped.length > 0 ? skipped : undefined,
|
|
920
1033
|
};
|
|
921
|
-
return {
|
|
1034
|
+
return {
|
|
1035
|
+
outcome,
|
|
1036
|
+
blocking,
|
|
1037
|
+
// A kept-inline decline is consumed when the candidate it names is still one the
|
|
1038
|
+
// gate would otherwise report. One that covers nothing is retired with the rest.
|
|
1039
|
+
carriedConsumed: carriedKeptInline.filter((c) => classification.covered.has(c.keptInline)),
|
|
1040
|
+
// Only where the gate WALKED the candidates. The infra gate takes precedence
|
|
1041
|
+
// over it, an unknown language skips it and a scoping failure falls back — each
|
|
1042
|
+
// leaves nothing covered while classifying nothing, and retiring on that deletes
|
|
1043
|
+
// permission for a candidate still undocumented in the spec.
|
|
1044
|
+
carriedEvaluated: classification.ran,
|
|
1045
|
+
};
|
|
922
1046
|
}
|
|
923
1047
|
catch (err) {
|
|
924
1048
|
logger.warning("Could not re-derive the POM-reuse outcome from the delivered spec — omitting the reuse summary rather than reporting counts that may no longer hold", { testFile: testFilePath, error: String(err) });
|
|
@@ -943,7 +1067,11 @@ export async function rederiveReuse(record) {
|
|
|
943
1067
|
* record that never held it. Fails open when a gate throws — a gate that cannot run
|
|
944
1068
|
* is no evidence.
|
|
945
1069
|
*/
|
|
946
|
-
async function pomBlockingVerdict(testFile, language, r
|
|
1070
|
+
async function pomBlockingVerdict(testFile, language, r, carriedKeptInline,
|
|
1071
|
+
/** Filled with what the zero-reuse gate did — see `zeroReuseGateFailure`. `ran`
|
|
1072
|
+
* stays false on every path that returns before the candidate walk, including the
|
|
1073
|
+
* unknown language and the infra-gate precedence below. */
|
|
1074
|
+
classification) {
|
|
947
1075
|
// The record's language was written from the reuse tool's validated `language`
|
|
948
1076
|
// param, but the record type keeps it a string: a value outside the enum means a
|
|
949
1077
|
// check that cannot run, and a check that cannot run does not block.
|
|
@@ -962,7 +1090,9 @@ async function pomBlockingVerdict(testFile, language, r) {
|
|
|
962
1090
|
try {
|
|
963
1091
|
infra = await infraGateFailure(target, r);
|
|
964
1092
|
zero =
|
|
965
|
-
infra === undefined
|
|
1093
|
+
infra === undefined
|
|
1094
|
+
? await zeroReuseGateFailure(target, r, carriedKeptInline, classification)
|
|
1095
|
+
: undefined;
|
|
966
1096
|
}
|
|
967
1097
|
catch (err) {
|
|
968
1098
|
logger.warning("Report-time POM gate threw — not refusing the report on a check that could not run", { testFile, error: String(err) });
|
|
@@ -19,6 +19,10 @@ export interface UtilsVerifyContext {
|
|
|
19
19
|
staged?: string[];
|
|
20
20
|
/** Utils files `git add` refused in a testbot run — a failed verification on its own. */
|
|
21
21
|
unstaged?: string[];
|
|
22
|
+
/** The repository's own modules this run changed that `git add` refused. Rendered
|
|
23
|
+
* apart from `unstaged`: the remedy for a Skyramp module (move it, un-ignore it)
|
|
24
|
+
* is an edit to the customer's repository when the file is theirs. */
|
|
25
|
+
unstagedInHouse?: string[];
|
|
22
26
|
/** Whether the verdict reached run state. When it did not, the checkpoints fail
|
|
23
27
|
* open on the unwritable state file — the agent is told rather than left to loop. */
|
|
24
28
|
recorded?: boolean;
|