@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
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { blankCommentsAndStrings, blankStrings, hasDefault, paramName, } from "./parse.js";
|
|
2
|
+
import { STATUS_RECEIVER } from "./language-spec.js";
|
|
3
|
+
import { escapeRegExp } from "../regex.js";
|
|
4
|
+
/**
|
|
5
|
+
* Where a test states the status it expects: ONCE, as the argument of the helper
|
|
6
|
+
* call. The shared-helper policy says the helper asserts the status — that is the
|
|
7
|
+
* invariant that makes it safe for another test to call — and stopped there, so the
|
|
8
|
+
* agent decided what the spec then contains and decided differently each run. Two
|
|
9
|
+
* shapes came out: the spec states nothing (the status is a defaulted parameter the
|
|
10
|
+
* call omits) or states it twice (the spec asserts again on the returned response).
|
|
11
|
+
* Neither is a gate escape — a status assertion in a helper is allowed on purpose,
|
|
12
|
+
* and the assertion-loss count credits the helper's assertion to the spec — so both
|
|
13
|
+
* rules are stated here as code, beside the policy sentence the prompt renders.
|
|
14
|
+
*/
|
|
15
|
+
/** The RECEIVER of a status assertion — `response.status`, `r.statusCode`,
|
|
16
|
+
* `resp.status_code`, `res.status()` — blanked before the parameters are looked
|
|
17
|
+
* for, so a helper handed the response as a parameter is not read as reading it. */
|
|
18
|
+
const STATUS_RECEIVER_RE = /[\w$.]*\.status(?:_?[cC]ode)?\b(?:\s*\(\s*\))?/g;
|
|
19
|
+
/** `assert.strictEqual(<status receiver>, …)` — the matcher form, with the status
|
|
20
|
+
* itself as the compared value rather than an expression over it. */
|
|
21
|
+
const ASSERT_MATCHER_STATUS_RE = new RegExp(`(?<![\\w$.])assert\\.(?:strictEqual|equal|deepStrictEqual|deepEqual)\\s*\\(\\s*${STATUS_RECEIVER}\\s*,`);
|
|
22
|
+
/** `assert(<status receiver> === …)` / `== …` — the one bare-assert shape that pins. */
|
|
23
|
+
const ASSERT_STATUS_EQUALITY_RE = new RegExp(`(?<![\\w$.])assert\\s*\\(\\s*${STATUS_RECEIVER}\\s*===?(?!=)`);
|
|
24
|
+
/** A TypeScript optional parameter: `expectedStatus?: number` / `expectedStatus?`. */
|
|
25
|
+
const OPTIONAL_PARAM_RE = /^[A-Za-z_$][\w$]*\s*\?(?:\s*:|$)/;
|
|
26
|
+
/** The helper's status-only assertions, as the language spec recognises them. */
|
|
27
|
+
export function statusAssertions(h, spec) {
|
|
28
|
+
return h.assertions.filter((a) => spec.allowedAssertion.test(a.text));
|
|
29
|
+
}
|
|
30
|
+
/** Whether the helper pins the status to ONE value — an equality whose operand IS
|
|
31
|
+
* the status, not a bound or a set (`toBeLessThan(500)`, `in (200, 201)`), and not
|
|
32
|
+
* an equality elsewhere in the same assertion (`… < 500 and attempts == 1`). Only
|
|
33
|
+
* then is a status assertion in the spec a restatement rather than a tighter
|
|
34
|
+
* claim. A `.not.` form pins nothing. */
|
|
35
|
+
export function assertsStatusEquality(h, spec) {
|
|
36
|
+
return statusAssertions(h, spec).some((a) => {
|
|
37
|
+
const code = blankStrings(a.text, spec);
|
|
38
|
+
// A disjunction admits more than one value — `== 200 or == 201`,
|
|
39
|
+
// `=== 200 || === 201` — so the status is not pinned to one.
|
|
40
|
+
if (spec.language === "python" ? /\bor\b/.test(code) : /\|\|/.test(code))
|
|
41
|
+
return false;
|
|
42
|
+
return spec.language === "python"
|
|
43
|
+
? /\bstatus_code\b\s*==(?!=)|(?<![=!<>])==(?!=)\s*[\w$.]*\bstatus_code\b/.test(code)
|
|
44
|
+
: (/\)\s*\.\s*(?:toBe|toEqual|toStrictEqual)\s*\(/.test(a.text) &&
|
|
45
|
+
!/\.\s*not\s*\./.test(a.text)) ||
|
|
46
|
+
// The matcher form pins only when the status RECEIVER is the value being
|
|
47
|
+
// compared — its first argument, followed by the comma that ends it.
|
|
48
|
+
// `assert.strictEqual(r.statusCode < 500, true)` compares a BOOLEAN: the
|
|
49
|
+
// status is bounded, not pinned, and a later exact check is the tighter
|
|
50
|
+
// claim. The matcher's name alone decided, and refused that check.
|
|
51
|
+
ASSERT_MATCHER_STATUS_RE.test(code) ||
|
|
52
|
+
// The bare form pins only when a POSITIVE equality is anchored to the
|
|
53
|
+
// status receiver: `!==` carries `==` inside it, and an equality elsewhere
|
|
54
|
+
// in the condition says nothing about the status.
|
|
55
|
+
ASSERT_STATUS_EQUALITY_RE.test(code);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* The parameter the helper's status assertion READS, when it carries a default (or
|
|
60
|
+
* is optional). `undefined` when the helper asserts no status, when its status
|
|
61
|
+
* assertion reads a literal rather than a parameter, or when the parameter has no
|
|
62
|
+
* default.
|
|
63
|
+
*
|
|
64
|
+
* Keyed on the assertion, not on the parameter's name: the same cohort that produced
|
|
65
|
+
* the evidence spelled it `expectedStatus` in one module and `expectedStatusCode` in
|
|
66
|
+
* another, and a name-matched rule misses whichever spelling the next run picks. A
|
|
67
|
+
* `None` default counts — a helper whose assertion is switched off by default lets
|
|
68
|
+
* a caller read the status without verifying it.
|
|
69
|
+
*/
|
|
70
|
+
export function defaultedStatusParam(h, spec) {
|
|
71
|
+
const read = statusParamOf(h, spec);
|
|
72
|
+
return read && (hasDefault(read.param) || OPTIONAL_PARAM_RE.test(read.param))
|
|
73
|
+
? { param: read.param.replace(/\s+/g, " "), name: read.name }
|
|
74
|
+
: undefined;
|
|
75
|
+
}
|
|
76
|
+
/** The declared parameter the helper's status assertion reads, or `undefined` when
|
|
77
|
+
* the helper asserts no status or compares it against a literal. */
|
|
78
|
+
export function statusParamOf(h, spec) {
|
|
79
|
+
if (!h.params)
|
|
80
|
+
return undefined;
|
|
81
|
+
const declared = new Map(h.params.map((p) => [paramName(p), p]));
|
|
82
|
+
for (const a of statusAssertions(h, spec)) {
|
|
83
|
+
// Strings blanked (a message may name anything), then the receiver.
|
|
84
|
+
const read = blankStrings(a.text, spec).replace(STATUS_RECEIVER_RE, " ");
|
|
85
|
+
for (const m of read.matchAll(/[A-Za-z_$][\w$]*/g)) {
|
|
86
|
+
const raw = declared.get(m[0]);
|
|
87
|
+
if (raw !== undefined)
|
|
88
|
+
return { param: raw, name: m[0] };
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
/** The literal a helper pins the status to (`200`), when it pins one and reads no
|
|
94
|
+
* parameter for it — the shape whose restatement cannot be fixed by deleting the
|
|
95
|
+
* spec's assertion alone, because the call has no status argument to keep. */
|
|
96
|
+
export function pinnedStatusLiteral(h, spec) {
|
|
97
|
+
if (!assertsStatusEquality(h, spec) || statusParamOf(h, spec))
|
|
98
|
+
return undefined;
|
|
99
|
+
for (const a of statusAssertions(h, spec)) {
|
|
100
|
+
const m = /\b(\d{3})\b/.exec(blankStrings(a.text, spec).replace(STATUS_RECEIVER_RE, " "));
|
|
101
|
+
if (m)
|
|
102
|
+
return m[1];
|
|
103
|
+
}
|
|
104
|
+
return "the literal";
|
|
105
|
+
}
|
|
106
|
+
/** A status-only assertion whose receiver is the variable `v`, per language — the
|
|
107
|
+
* `expect(…)` form and the `node:assert` form (`assert.strictEqual(r.statusCode,
|
|
108
|
+
* 200)`), the same two the language's assertion pattern reads. ANY operator counts
|
|
109
|
+
* on this side: once the helper has pinned the status to one value, a further
|
|
110
|
+
* status assertion on that response is redundant whatever it compares. Neither
|
|
111
|
+
* name may follow an identifier or a dot: `console.assert(…)` asserts nothing. */
|
|
112
|
+
function statusAssertionOn(v, spec) {
|
|
113
|
+
const id = escapeRegExp(v);
|
|
114
|
+
return spec.language === "python"
|
|
115
|
+
? new RegExp(`\\b${id}\\.status_code\\b`)
|
|
116
|
+
: new RegExp(`(?<![\\w$.])(?:expect(?:\\.soft)?|assert(?:\\.\\w+)?)\\s*\\(\\s*${id}\\.status(?:_?[cC]ode)?\\b`);
|
|
117
|
+
}
|
|
118
|
+
/** `<v> = <helper>(` in either language, with or without a declaration keyword, a
|
|
119
|
+
* type annotation or `await` — and qualified only by a name the spec binds the
|
|
120
|
+
* utils MODULE to (`utils.getOrder(`). Any other qualifier is another object's
|
|
121
|
+
* method of the same name (`client.getOrder(`), which the helper never ran; an
|
|
122
|
+
* unconstrained qualifier made that a blocking finding. */
|
|
123
|
+
function bindingOf(helper, qualifiers) {
|
|
124
|
+
const qualified = qualifiers.length > 0
|
|
125
|
+
? `(?:(?:${qualifiers.map(escapeRegExp).join("|")})\\.)?`
|
|
126
|
+
: "";
|
|
127
|
+
return new RegExp(`(?:^|[^\\w$.])(?:(?:const|let|var)\\s+)?([A-Za-z_$][\\w$]*)\\s*(?::[^=\\n]*)?=\\s*(?:await\\s+)?${qualified}${escapeRegExp(helper)}\\s*\\(`);
|
|
128
|
+
}
|
|
129
|
+
/** Where the variable stops naming the helper's response: an assignment to `v`, a
|
|
130
|
+
* declaration of `v` with or without `=` (`for (const v of …)`), or `v` declared as
|
|
131
|
+
* a callback parameter (`(v) =>`, `v =>`). */
|
|
132
|
+
function rebindingOf(v) {
|
|
133
|
+
const id = escapeRegExp(v);
|
|
134
|
+
return new RegExp(`(?:^|[^\\w$.])(?:(?:const|let|var)\\s+${id}\\b|${id}\\s*(?::[^=\\n]*)?=(?![=>])|\\(\\s*[^()]*\\b${id}\\b[^()]*\\)\\s*=>|${id}\\s*=>)`);
|
|
135
|
+
}
|
|
136
|
+
/** A line that opens another scope: a function or test block, whose `v` is whatever
|
|
137
|
+
* that scope binds. The scan is line-based and has no block structure, so a later
|
|
138
|
+
* \`def check(r)\` or the next \`test(…)\` would otherwise inherit an earlier
|
|
139
|
+
* binding of \`r\` and report a restatement that is not one — a false finding on a
|
|
140
|
+
* BLOCKING kind. Stopping here costs a miss at worst. */
|
|
141
|
+
function scopeBoundaryOf(spec) {
|
|
142
|
+
return spec.language === "python"
|
|
143
|
+
? /^\s*(?:(?:async\s+)?def\s+\w+\s*\(|class\s+\w)/
|
|
144
|
+
: /^\s*(?:(?:export\s+)?(?:(?:async\s+)?function\b|(?:abstract\s+)?class\s+\w)|(?:test|it|describe)(?:\.\w+)*\s*\()/;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Call sites in the spec whose returned response the spec then asserts the status
|
|
148
|
+
* of — for helpers that already assert it. One finding per helper, with the count.
|
|
149
|
+
*
|
|
150
|
+
* The link from call to assertion is the RESPONSE VARIABLE: the call's result is
|
|
151
|
+
* bound to a name (`const r = await getOrder(…)`, `r = get_order(…)`), and a later
|
|
152
|
+
* line asserts on `<that name>.status…` before the name is assigned again. Read on
|
|
153
|
+
* a copy with comments and string contents blanked, so a commented-out call or a
|
|
154
|
+
* quoted example binds nothing, and it stops at the next function or test block,
|
|
155
|
+
* which binds its own names. What this cannot see: a destructured result
|
|
156
|
+
* (`const { statusCode } = await …`), a call passed straight into an assertion
|
|
157
|
+
* (`expect((await getOrder(…)).status)`), an alias of the status (`const s =
|
|
158
|
+
* r.status`), a helper called under an import alias, and a response threaded through
|
|
159
|
+
* a further call or a `.then`. Each is a miss, never a false finding.
|
|
160
|
+
*/
|
|
161
|
+
export function restatedStatusAssertions(specContent, spec, helpers,
|
|
162
|
+
/** Names the spec binds the utils module to — see UtilsLanguageSpec.moduleQualifiers. */
|
|
163
|
+
qualifiers = []) {
|
|
164
|
+
if (helpers.length === 0 || specContent === "")
|
|
165
|
+
return [];
|
|
166
|
+
const lines = blankCommentsAndStrings(specContent, spec).split("\n");
|
|
167
|
+
const raw = specContent.split("\n");
|
|
168
|
+
const out = [];
|
|
169
|
+
const boundary = scopeBoundaryOf(spec);
|
|
170
|
+
for (const helper of helpers) {
|
|
171
|
+
const bind = bindingOf(helper, qualifiers);
|
|
172
|
+
let first;
|
|
173
|
+
for (let i = 0; i < lines.length; i++) {
|
|
174
|
+
const m = bind.exec(lines[i]);
|
|
175
|
+
if (!m)
|
|
176
|
+
continue;
|
|
177
|
+
const v = m[1];
|
|
178
|
+
const asserted = statusAssertionOn(v, spec);
|
|
179
|
+
const rebound = rebindingOf(v);
|
|
180
|
+
for (let j = i + 1; j < lines.length; j++) {
|
|
181
|
+
if (rebound.test(lines[j]) || boundary.test(lines[j]))
|
|
182
|
+
break;
|
|
183
|
+
// A formatted assertion may open on one line and name its receiver on the
|
|
184
|
+
// next; the window is three lines, anchored on a match that begins in this one.
|
|
185
|
+
const window = lines.slice(j, j + 3).join(" ");
|
|
186
|
+
const hit = asserted.exec(window);
|
|
187
|
+
if (!hit || hit.index >= lines[j].length)
|
|
188
|
+
continue;
|
|
189
|
+
if (spec.language === "python" && !spec.allowedAssertion.test(lines[j]))
|
|
190
|
+
continue;
|
|
191
|
+
if (first)
|
|
192
|
+
first.sites++;
|
|
193
|
+
else
|
|
194
|
+
first = {
|
|
195
|
+
helper,
|
|
196
|
+
line: j + 1,
|
|
197
|
+
text: raw[j].trim(),
|
|
198
|
+
sites: 1,
|
|
199
|
+
};
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
if (first)
|
|
204
|
+
out.push(first);
|
|
205
|
+
}
|
|
206
|
+
return out;
|
|
207
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One compiler error in a delivered file, 1-based line, `code` the TS number
|
|
3
|
+
* (`2322`), `message` the flattened text.
|
|
4
|
+
*/
|
|
5
|
+
export interface TypeFinding {
|
|
6
|
+
file: string;
|
|
7
|
+
line: number;
|
|
8
|
+
code: number;
|
|
9
|
+
message: string;
|
|
10
|
+
}
|
|
11
|
+
export interface UtilsTypecheck {
|
|
12
|
+
/** Whether the compiler ran over the delivered files at all. */
|
|
13
|
+
ran: boolean;
|
|
14
|
+
/** Why it did not run. Present only when `ran` is false. */
|
|
15
|
+
reason?: string;
|
|
16
|
+
/** Errors under the most permissive settings the compiler has — every strictness
|
|
17
|
+
* flag off, extensionless imports accepted. An error here fails under EVERY
|
|
18
|
+
* configuration, so it is the customer's error whatever their tsconfig says. */
|
|
19
|
+
errors: TypeFinding[];
|
|
20
|
+
/** Errors of the "cannot find name / global" family, from the permissive pass:
|
|
21
|
+
* `process`, `describe`, `Promise`. Whether such a name exists depends on the
|
|
22
|
+
* declaration packages the repository installs (`@types/node`, a test runner's
|
|
23
|
+
* types) and its `lib` setting — which this run cannot see, because the
|
|
24
|
+
* testbot never installs the repository's dependencies. The customer's own
|
|
25
|
+
* `tsc`, with node_modules present, may accept every one of them, so they are
|
|
26
|
+
* a gap to state, never a block. */
|
|
27
|
+
ambientErrors: TypeFinding[];
|
|
28
|
+
/** Errors present only under the repository's own tsconfig (`noImplicitAny`,
|
|
29
|
+
* `strictNullChecks`, …). Whether that tsconfig is the one the customer's build
|
|
30
|
+
* runs is their call — advised, never blocked. Empty without a reaching tsconfig. */
|
|
31
|
+
settingErrors: TypeFinding[];
|
|
32
|
+
/** The tsconfig whose settings produced `settingErrors`: the nearest one above a
|
|
33
|
+
* delivered file that includes at least one of them (the rest come in through
|
|
34
|
+
* imports), followed through `references`. */
|
|
35
|
+
tsconfig?: string;
|
|
36
|
+
/** A tsconfig found above the files that includes none of them (nor does any
|
|
37
|
+
* project it references): the customer's `tsc` never sees these files, so no
|
|
38
|
+
* settings pass ran. */
|
|
39
|
+
tsconfigNotReaching?: string;
|
|
40
|
+
/** Import specifiers in the delivered files that resolved from neither the
|
|
41
|
+
* repository nor the MCP's own install. Everything typed by such a module is
|
|
42
|
+
* `any` to the compiler and was NOT checked — reported as a gap, never as an
|
|
43
|
+
* error, because whether a module is installed is not a fault in the file. */
|
|
44
|
+
unresolved: string[];
|
|
45
|
+
}
|
|
46
|
+
export declare const AMBIENT_DECLARATION_CODES: Set<number>;
|
|
47
|
+
/**
|
|
48
|
+
* Typecheck the delivered TypeScript files — the shared module and the spec that
|
|
49
|
+
* imports it — with the compiler the MCP itself depends on, so the check runs in
|
|
50
|
+
* every repository whether or not `typescript` is installed there.
|
|
51
|
+
*
|
|
52
|
+
* Two passes over the same files. The PERMISSIVE pass has every strictness flag off:
|
|
53
|
+
* an error it reports fails under any configuration and is blocking (`errors`). The
|
|
54
|
+
* SETTINGS pass runs the repository's own tsconfig, when one reaches the files; what
|
|
55
|
+
* it adds is an error only under those settings and is advisory (`settingErrors`).
|
|
56
|
+
* The executor transpiles without typechecking, so neither pass has run before this
|
|
57
|
+
* one, and a delivered file that fails here reaches the customer's own `tsc` first.
|
|
58
|
+
*
|
|
59
|
+
* Never throws: a compiler failure is a result that says the check did not run.
|
|
60
|
+
*/
|
|
61
|
+
export declare function typecheckDelivered(files: string[], mcpRoot?: string): Promise<UtilsTypecheck>;
|
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
import * as path from "path";
|
|
2
|
+
import { fileURLToPath } from "url";
|
|
3
|
+
let tsModule;
|
|
4
|
+
/** The compiler, loaded on first use and once per process. Loaded statically it
|
|
5
|
+
* rode along with every import of the verifier — about 9 MB of JavaScript that
|
|
6
|
+
* each jest test file instantiated in its own module registry, which took a CI
|
|
7
|
+
* worker on Node 18 past its 2 GB heap. Only a verify that actually compiles
|
|
8
|
+
* TypeScript needs it. */
|
|
9
|
+
function loadTs() {
|
|
10
|
+
return (tsModule ??= import("typescript").then(
|
|
11
|
+
// The package is CommonJS: the namespace carries it as `default` where the
|
|
12
|
+
// loader could not lift its named exports.
|
|
13
|
+
(mod) => mod.default ?? mod));
|
|
14
|
+
}
|
|
15
|
+
/** The `@skyramp/mcp` package root — `typescript`, `@skyramp/skyramp` and
|
|
16
|
+
* `@playwright/test` are its runtime dependencies, so a module the customer's
|
|
17
|
+
* repository lacks can still be resolved from here. build/utils/utils-verify/x.js
|
|
18
|
+
* and src/utils/utils-verify/x.ts both sit three levels below it. */
|
|
19
|
+
function mcpPackageRoot() {
|
|
20
|
+
return path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "..", "..");
|
|
21
|
+
}
|
|
22
|
+
/** `Cannot find module …` — the resolution gap `unresolved` records; not an error
|
|
23
|
+
* in the file. 2792 is the same message with a moduleResolution hint. */
|
|
24
|
+
const UNRESOLVED_MODULE_CODES = new Set([2307, 2792]);
|
|
25
|
+
/** "Cannot find name / namespace / global value / global type", in EVERY spelling the
|
|
26
|
+
* compiler has, read off its own message table (the test cross-checks the list
|
|
27
|
+
* against `ts.Diagnostics`): the plain forms (2304, 2318, 2468, 2503), the forms
|
|
28
|
+
* with a suggestion attached (2552 "Did you mean", 2662/2663 member hints, 2833,
|
|
29
|
+
* 2311), the forms that name the missing declarations — node (2580, 2591), jQuery
|
|
30
|
+
* (2581, 2592), a test runner (2582, 2593), Bun (2867, 2868), `lib` (2583, 2584) —
|
|
31
|
+
* the Promise constructor (2705, 2712), and a shorthand property with no value in
|
|
32
|
+
* scope (18004). The compiler cannot tell a typo from a global whose declarations
|
|
33
|
+
* the run cannot see, and it picks the SPELLING by whether a declared name happens
|
|
34
|
+
* to sit near the missing one (`headers` beside lib.dom's `Headers` is 2552 where
|
|
35
|
+
* `hdrs` is 2304), so the whole family is reported as `ambientErrors`. */
|
|
36
|
+
/** Packages the EXECUTOR supplies at run time, whatever the repository pins. Their
|
|
37
|
+
* types are resolved from the MCP's own install first: a repository pinned to an
|
|
38
|
+
* older `@skyramp/skyramp` (one whose `SendRequestV2Options` has no `queryParams`)
|
|
39
|
+
* made the call shape the helper policy prescribes a blocking TS2353, on code the
|
|
40
|
+
* executor runs correctly — and a `type-error` has no marker, so the agent's only
|
|
41
|
+
* exit was to rewrite working code. Every other package still resolves from the
|
|
42
|
+
* repository first, because every other package is the repository's to pin. */
|
|
43
|
+
const EXECUTOR_PROVIDED_PACKAGES = ["@skyramp/skyramp"];
|
|
44
|
+
function executorProvides(specifier) {
|
|
45
|
+
return EXECUTOR_PROVIDED_PACKAGES.some((p) => specifier === p || specifier.startsWith(`${p}/`));
|
|
46
|
+
}
|
|
47
|
+
export const AMBIENT_DECLARATION_CODES = new Set([
|
|
48
|
+
2304, 2311, 2318, 2468, 2503, 2552, 2580, 2581, 2582, 2583, 2584, 2591, 2592,
|
|
49
|
+
2593, 2662, 2663, 2705, 2712, 2833, 2867, 2868, 18004,
|
|
50
|
+
]);
|
|
51
|
+
/**
|
|
52
|
+
* The settings under which an error is the FILE's fault and nothing else's: every
|
|
53
|
+
* strictness flag off, every import form accepted, the widest target and library,
|
|
54
|
+
* nothing emitted. Only the repository's RESOLUTION options are carried in (the
|
|
55
|
+
* list below) — they decide what resolves, not what is strict or what exists.
|
|
56
|
+
*/
|
|
57
|
+
/** The repository options that decide WHAT RESOLVES — an alias, a base URL, a
|
|
58
|
+
* type root, a `types` list, a package-condition set. Everything else in a
|
|
59
|
+
* tsconfig is a setting the settings pass reports; carried into the permissive
|
|
60
|
+
* pass it would either add errors (`target: ES5` makes a bigint literal one) or
|
|
61
|
+
* remove them (`noCheck: true` removes all of them). */
|
|
62
|
+
const RESOLUTION_OPTIONS = [
|
|
63
|
+
"paths",
|
|
64
|
+
"baseUrl",
|
|
65
|
+
"rootDirs",
|
|
66
|
+
"typeRoots",
|
|
67
|
+
"types",
|
|
68
|
+
"moduleSuffixes",
|
|
69
|
+
"customConditions",
|
|
70
|
+
"resolvePackageJsonExports",
|
|
71
|
+
"resolvePackageJsonImports",
|
|
72
|
+
"allowArbitraryExtensions",
|
|
73
|
+
"preserveSymlinks",
|
|
74
|
+
];
|
|
75
|
+
function permissiveOptions(ts, base) {
|
|
76
|
+
const kept = {};
|
|
77
|
+
for (const key of RESOLUTION_OPTIONS)
|
|
78
|
+
if (base[key] !== undefined)
|
|
79
|
+
kept[key] = base[key];
|
|
80
|
+
return {
|
|
81
|
+
...kept,
|
|
82
|
+
target: ts.ScriptTarget.ES2022,
|
|
83
|
+
jsx: ts.JsxEmit.Preserve,
|
|
84
|
+
noCheck: false,
|
|
85
|
+
noEmit: true,
|
|
86
|
+
skipLibCheck: true,
|
|
87
|
+
composite: false,
|
|
88
|
+
incremental: false,
|
|
89
|
+
declaration: false,
|
|
90
|
+
emitDeclarationOnly: false,
|
|
91
|
+
noEmitOnError: false,
|
|
92
|
+
// Resolution: the most accepting mode. A `.js` specifier finds the `.ts` file,
|
|
93
|
+
// an extensionless one too, and a `.ts` extension is not refused.
|
|
94
|
+
module: ts.ModuleKind.ESNext,
|
|
95
|
+
moduleResolution: ts.ModuleResolutionKind.Bundler,
|
|
96
|
+
allowImportingTsExtensions: true,
|
|
97
|
+
resolveJsonModule: true,
|
|
98
|
+
allowSyntheticDefaultImports: true,
|
|
99
|
+
esModuleInterop: true,
|
|
100
|
+
allowJs: true,
|
|
101
|
+
checkJs: false,
|
|
102
|
+
isolatedModules: false,
|
|
103
|
+
verbatimModuleSyntax: false,
|
|
104
|
+
// Strictness: everything off, individually — `strict: false` alone leaves a flag
|
|
105
|
+
// the repository set explicitly in force.
|
|
106
|
+
strict: false,
|
|
107
|
+
noImplicitAny: false,
|
|
108
|
+
strictNullChecks: false,
|
|
109
|
+
strictFunctionTypes: false,
|
|
110
|
+
strictBindCallApply: false,
|
|
111
|
+
strictPropertyInitialization: false,
|
|
112
|
+
strictBuiltinIteratorReturn: false,
|
|
113
|
+
noImplicitThis: false,
|
|
114
|
+
alwaysStrict: false,
|
|
115
|
+
useUnknownInCatchVariables: false,
|
|
116
|
+
exactOptionalPropertyTypes: false,
|
|
117
|
+
noUncheckedIndexedAccess: false,
|
|
118
|
+
noUncheckedSideEffectImports: false,
|
|
119
|
+
noImplicitReturns: false,
|
|
120
|
+
noImplicitOverride: false,
|
|
121
|
+
noPropertyAccessFromIndexSignature: false,
|
|
122
|
+
noUnusedLocals: false,
|
|
123
|
+
noUnusedParameters: false,
|
|
124
|
+
noFallthroughCasesInSwitch: false,
|
|
125
|
+
allowUnreachableCode: true,
|
|
126
|
+
allowUnusedLabels: true,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/** The repository's own options, made runnable over a hand-picked file list: nothing
|
|
130
|
+
* emitted, no project-build bookkeeping (`composite` would report every file the
|
|
131
|
+
* config did not list, and the imports it pulls in are not listed). */
|
|
132
|
+
function settingsOptions(base) {
|
|
133
|
+
return {
|
|
134
|
+
...base,
|
|
135
|
+
noEmit: true,
|
|
136
|
+
skipLibCheck: true,
|
|
137
|
+
composite: false,
|
|
138
|
+
incremental: false,
|
|
139
|
+
tsBuildInfoFile: undefined,
|
|
140
|
+
declaration: false,
|
|
141
|
+
emitDeclarationOnly: false,
|
|
142
|
+
noEmitOnError: false,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
function parseConfig(ts, configPath) {
|
|
146
|
+
const read = ts.readConfigFile(configPath, ts.sys.readFile);
|
|
147
|
+
if (read.error || !read.config)
|
|
148
|
+
return undefined;
|
|
149
|
+
const parsed = ts.parseJsonConfigFileContent(read.config, ts.sys, path.dirname(configPath), undefined, configPath);
|
|
150
|
+
return { path: configPath, parsed };
|
|
151
|
+
}
|
|
152
|
+
/** Whether the config's root files name at least one delivered file. Root files
|
|
153
|
+
* only — `include` lists the specs, and the shared module comes into the program
|
|
154
|
+
* through their imports — so one match means the customer's `tsc -p` compiles
|
|
155
|
+
* the whole delivery. */
|
|
156
|
+
function includesAny(parsed, files) {
|
|
157
|
+
const listed = new Set(parsed.fileNames.map((f) => path.normalize(f)));
|
|
158
|
+
return files.some((f) => listed.has(path.normalize(f)));
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* The nearest tsconfig above each delivered file (an imported module may live
|
|
162
|
+
* outside the spec's package, and the package config sits above the spec), and —
|
|
163
|
+
* when one of them includes a delivered file, directly or through its
|
|
164
|
+
* `references` (the solution-style layout: a root config with `files: []`
|
|
165
|
+
* pointing at per-target configs, which may point further) — the config that
|
|
166
|
+
* reaches the delivery. The reference graph is walked depth-first with a visited
|
|
167
|
+
* set: a nested graph (root → package → tests) is valid, and a cycle must not
|
|
168
|
+
* hang the verify. `nearest` is the first config found, in the order the files
|
|
169
|
+
* were given.
|
|
170
|
+
*/
|
|
171
|
+
function findConfigs(ts, files) {
|
|
172
|
+
const seen = new Set();
|
|
173
|
+
const candidates = [];
|
|
174
|
+
for (const file of files) {
|
|
175
|
+
const configPath = ts.findConfigFile(path.dirname(file), ts.sys.fileExists);
|
|
176
|
+
if (!configPath || seen.has(configPath))
|
|
177
|
+
continue;
|
|
178
|
+
seen.add(configPath);
|
|
179
|
+
const parsed = parseConfig(ts, configPath);
|
|
180
|
+
if (parsed)
|
|
181
|
+
candidates.push(parsed);
|
|
182
|
+
}
|
|
183
|
+
if (candidates.length === 0)
|
|
184
|
+
return {};
|
|
185
|
+
const visited = new Set();
|
|
186
|
+
const reachingFrom = (config) => {
|
|
187
|
+
if (visited.has(config.path))
|
|
188
|
+
return undefined;
|
|
189
|
+
visited.add(config.path);
|
|
190
|
+
if (includesAny(config.parsed, files))
|
|
191
|
+
return config;
|
|
192
|
+
for (const ref of config.parsed.projectReferences ?? []) {
|
|
193
|
+
const referenced = parseConfig(ts, ts.resolveProjectReferencePath(ref));
|
|
194
|
+
const found = referenced && reachingFrom(referenced);
|
|
195
|
+
if (found)
|
|
196
|
+
return found;
|
|
197
|
+
}
|
|
198
|
+
return undefined;
|
|
199
|
+
};
|
|
200
|
+
for (const candidate of candidates) {
|
|
201
|
+
const reaching = reachingFrom(candidate);
|
|
202
|
+
if (reaching)
|
|
203
|
+
return { nearest: candidates[0], reaching };
|
|
204
|
+
}
|
|
205
|
+
return { nearest: candidates[0] };
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* One compiler run over `files`. Module resolution tries the repository first and
|
|
209
|
+
* the MCP's own install second, so `@skyramp/skyramp` resolves whether or not the
|
|
210
|
+
* customer installed it; what resolves from neither is recorded, not reported as
|
|
211
|
+
* an error, and its diagnostics are dropped (everything typed by it is `any` and
|
|
212
|
+
* was not checked — the gap is stated instead).
|
|
213
|
+
*/
|
|
214
|
+
function runPass(ts, files, options, mcpRoot) {
|
|
215
|
+
const own = new Set(files.map((f) => path.normalize(f)));
|
|
216
|
+
const unresolved = new Set();
|
|
217
|
+
const host = ts.createCompilerHost(options, true);
|
|
218
|
+
// Global types (`@types/*` pulled in automatically) are looked up from the current
|
|
219
|
+
// directory upward. That must be the repository, not wherever the MCP process
|
|
220
|
+
// happens to run: the MCP's own `@types/jest` made a bare `expect` compile here
|
|
221
|
+
// that the customer's `tsc` cannot see.
|
|
222
|
+
const repoDir = path.dirname(files[0]);
|
|
223
|
+
host.getCurrentDirectory = () => repoDir;
|
|
224
|
+
// A containing file that does not exist is fine for resolution: only its
|
|
225
|
+
// directory is read, and node_modules is looked up from there.
|
|
226
|
+
const anchor = path.join(mcpRoot, "__skyramp_typecheck_anchor__.ts");
|
|
227
|
+
host.resolveModuleNameLiterals = (literals, containingFile, _r, opts) => literals.map((literal) => {
|
|
228
|
+
const delivered = own.has(path.normalize(containingFile));
|
|
229
|
+
// The executor's own packages are read from the MCP's install first;
|
|
230
|
+
// everything else from the repository first, the MCP second.
|
|
231
|
+
const [first, second] = executorProvides(literal.text)
|
|
232
|
+
? [anchor, containingFile]
|
|
233
|
+
: [containingFile, anchor];
|
|
234
|
+
let resolved = ts.resolveModuleName(literal.text, first, opts, host);
|
|
235
|
+
if (!resolved.resolvedModule) {
|
|
236
|
+
const other = ts.resolveModuleName(literal.text, second, opts, host);
|
|
237
|
+
if (other.resolvedModule)
|
|
238
|
+
resolved = other;
|
|
239
|
+
else if (delivered)
|
|
240
|
+
unresolved.add(literal.text);
|
|
241
|
+
}
|
|
242
|
+
return resolved;
|
|
243
|
+
});
|
|
244
|
+
const program = ts.createProgram(files, options, host);
|
|
245
|
+
// A module the program declares AMBIENTLY (`declare module "fs"`, which every
|
|
246
|
+
// `@types/node` carries) resolves to no file, so the resolver above records it as
|
|
247
|
+
// a gap while the checker reads it correctly. Reporting it told the agent to go
|
|
248
|
+
// fix an import that was right — the same class of instruction as the `process`
|
|
249
|
+
// rewrite. The checker's own ambient list settles it.
|
|
250
|
+
for (const ambient of program.getTypeChecker().getAmbientModules())
|
|
251
|
+
unresolved.delete(ambient.name.replace(/^["']|["']$/g, ""));
|
|
252
|
+
const findings = [];
|
|
253
|
+
const unresolvedFindings = [];
|
|
254
|
+
for (const file of files) {
|
|
255
|
+
const sf = program.getSourceFile(file);
|
|
256
|
+
if (!sf)
|
|
257
|
+
continue;
|
|
258
|
+
for (const d of [
|
|
259
|
+
...program.getSyntacticDiagnostics(sf),
|
|
260
|
+
...program.getSemanticDiagnostics(sf),
|
|
261
|
+
]) {
|
|
262
|
+
if (d.category !== ts.DiagnosticCategory.Error)
|
|
263
|
+
continue;
|
|
264
|
+
const { line } = sf.getLineAndCharacterOfPosition(d.start ?? 0);
|
|
265
|
+
(UNRESOLVED_MODULE_CODES.has(d.code)
|
|
266
|
+
? unresolvedFindings
|
|
267
|
+
: findings).push({
|
|
268
|
+
file,
|
|
269
|
+
line: line + 1,
|
|
270
|
+
code: d.code,
|
|
271
|
+
message: ts.flattenDiagnosticMessageText(d.messageText, " "),
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
return { findings, unresolvedFindings, unresolved };
|
|
276
|
+
}
|
|
277
|
+
const findingKey = (f) => `${f.file}\0${f.line}\0${f.code}\0${f.message}`;
|
|
278
|
+
/**
|
|
279
|
+
* Typecheck the delivered TypeScript files — the shared module and the spec that
|
|
280
|
+
* imports it — with the compiler the MCP itself depends on, so the check runs in
|
|
281
|
+
* every repository whether or not `typescript` is installed there.
|
|
282
|
+
*
|
|
283
|
+
* Two passes over the same files. The PERMISSIVE pass has every strictness flag off:
|
|
284
|
+
* an error it reports fails under any configuration and is blocking (`errors`). The
|
|
285
|
+
* SETTINGS pass runs the repository's own tsconfig, when one reaches the files; what
|
|
286
|
+
* it adds is an error only under those settings and is advisory (`settingErrors`).
|
|
287
|
+
* The executor transpiles without typechecking, so neither pass has run before this
|
|
288
|
+
* one, and a delivered file that fails here reaches the customer's own `tsc` first.
|
|
289
|
+
*
|
|
290
|
+
* Never throws: a compiler failure is a result that says the check did not run.
|
|
291
|
+
*/
|
|
292
|
+
export async function typecheckDelivered(files, mcpRoot = mcpPackageRoot()) {
|
|
293
|
+
const result = {
|
|
294
|
+
ran: false,
|
|
295
|
+
errors: [],
|
|
296
|
+
ambientErrors: [],
|
|
297
|
+
settingErrors: [],
|
|
298
|
+
unresolved: [],
|
|
299
|
+
};
|
|
300
|
+
if (files.length === 0) {
|
|
301
|
+
result.reason = "no file to check";
|
|
302
|
+
return result;
|
|
303
|
+
}
|
|
304
|
+
try {
|
|
305
|
+
const ts = await loadTs();
|
|
306
|
+
const { nearest, reaching } = findConfigs(ts, files);
|
|
307
|
+
// The permissive pass takes its RESOLUTION options (`paths`, `baseUrl`, `types`)
|
|
308
|
+
// from the config that reaches the files when there is one: a solution-style
|
|
309
|
+
// root carries none, and without the referenced config's `paths` an aliased
|
|
310
|
+
// import is unresolved here, typed `any`, and its unconditional error then
|
|
311
|
+
// surfaces only in the settings pass — downgraded to an advisory.
|
|
312
|
+
const base = (reaching ?? nearest)?.parsed.options ?? {};
|
|
313
|
+
const floor = runPass(ts, files, permissiveOptions(ts, base), mcpRoot);
|
|
314
|
+
result.ran = true;
|
|
315
|
+
result.errors = floor.findings.filter((f) => !AMBIENT_DECLARATION_CODES.has(f.code));
|
|
316
|
+
result.ambientErrors = floor.findings.filter((f) => AMBIENT_DECLARATION_CODES.has(f.code));
|
|
317
|
+
result.unresolved = [...floor.unresolved].sort();
|
|
318
|
+
if (reaching) {
|
|
319
|
+
result.tsconfig = reaching.path;
|
|
320
|
+
const seen = new Set([...floor.findings, ...floor.unresolvedFindings].map(findingKey));
|
|
321
|
+
const settings = runPass(ts, files, settingsOptions(reaching.parsed.options), mcpRoot);
|
|
322
|
+
// An import only the repository's resolution refuses is its `tsc`'s error,
|
|
323
|
+
// not a gap: the permissive pass resolved it, so the module exists.
|
|
324
|
+
result.settingErrors = [
|
|
325
|
+
...settings.findings,
|
|
326
|
+
...settings.unresolvedFindings,
|
|
327
|
+
].filter((f) => !seen.has(findingKey(f)));
|
|
328
|
+
}
|
|
329
|
+
else if (nearest) {
|
|
330
|
+
result.tsconfigNotReaching = nearest.path;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
catch (err) {
|
|
334
|
+
result.ran = false;
|
|
335
|
+
result.reason = `the compiler threw: ${String(err)}`;
|
|
336
|
+
}
|
|
337
|
+
return result;
|
|
338
|
+
}
|