@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
|
@@ -111,13 +111,14 @@ Fallback service routing inputs from the one-click invocation:
|
|
|
111
111
|
Three rules apply in fallback mode at all times:
|
|
112
112
|
1. **No hand-written tests or mocks**: do NOT use Write, Edit, or any file-writing tool to create test or mock files manually. ALL test and mock files MUST be produced by Skyramp MCP generation tools (\`skyramp_batch_scenario_test_generation\`, \`skyramp_integration_test_generation\`, \`skyramp_generate_enriched_integration_test\`, \`skyramp_contract_test_generation\`, \`skyramp_mock_generation\`, \`skyramp_batch_mock_generation\`). If a generation tool fails, fix the inputs and retry — do not fall back to writing tests by hand.
|
|
113
113
|
2. **Mock scope**: if the user said "mock all downstream services", "mock all", "mock everything", or "mock all except X", treat all discovered downstream dependencies as selected for mocking (same as passing \`servicesToMock: "all"\`). Do not silently default to the third-party-only policy when the user expressed broad mock intent.
|
|
114
|
-
3. **
|
|
114
|
+
3. **Prefer skyramp_execute_test**: run tests through \`skyramp_execute_test\` rather than the repository's test runner directly: the server records the run, and a run it did not record cannot appear in the report.
|
|
115
115
|
|
|
116
116
|
---
|
|
117
117
|
|
|
118
118
|
`;
|
|
119
119
|
const ctx = {
|
|
120
120
|
repositoryPath: "<REPOSITORY_PATH>",
|
|
121
|
+
repository: "<OWNER/REPO of the checkout, from its origin remote>",
|
|
121
122
|
baseCommit: "<BASE_BRANCH from one-click baseBranch, default main>",
|
|
122
123
|
maxRecommendations: 8,
|
|
123
124
|
maxGenerate: 5,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { RUN_TEST_COMMAND_RULES } from "../skills/runTestSkill.js";
|
|
1
2
|
/**
|
|
2
3
|
* Predefined One-Click Command: Recommend tests and generate and execute top recommended tests
|
|
3
4
|
*
|
|
@@ -65,13 +66,24 @@ const fullRepoRecommendGenerateExecuteSteps = [
|
|
|
65
66
|
toolName: "skyramp_execute_test",
|
|
66
67
|
description: "Execute each generated test; resolve token before calling. For each generated test file path returned directly by the generation tools in step 2, invoke this tool with testFile set to that path.",
|
|
67
68
|
inputs: {
|
|
68
|
-
|
|
69
|
+
commandOverride: {
|
|
70
|
+
source: "literal",
|
|
71
|
+
value: `the shell command that runs this one test file with the repository's own test runner (${RUN_TEST_COMMAND_RULES})`,
|
|
72
|
+
},
|
|
73
|
+
cwd: { source: "user", paramKey: "repositoryPath" },
|
|
69
74
|
language: { source: "literal", value: "from workspace" },
|
|
70
|
-
testType: {
|
|
75
|
+
testType: {
|
|
76
|
+
source: "literal",
|
|
77
|
+
value: "from test file / recommendation",
|
|
78
|
+
},
|
|
71
79
|
testFile: {
|
|
72
80
|
source: "literal",
|
|
73
81
|
value: "path to a single generated test file; for each test path returned by generation tools in step 2, call skyramp_execute_test separately with testFile set to that path",
|
|
74
82
|
},
|
|
83
|
+
repository: {
|
|
84
|
+
source: "literal",
|
|
85
|
+
value: "owner/repo of the checkout, from its origin remote",
|
|
86
|
+
},
|
|
75
87
|
token: { source: "user", paramKey: "token" },
|
|
76
88
|
},
|
|
77
89
|
},
|
|
@@ -110,10 +122,6 @@ export const FULLREPO_RECOMMEND_GENERATE_EXECUTE_TESTS_COMMAND = {
|
|
|
110
122
|
steps: fullRepoRecommendGenerateExecuteSteps,
|
|
111
123
|
inputParams: {
|
|
112
124
|
required: ["repositoryPath"],
|
|
113
|
-
optional: [
|
|
114
|
-
"token",
|
|
115
|
-
"endpointURL",
|
|
116
|
-
"apiSchema",
|
|
117
|
-
],
|
|
125
|
+
optional: ["token", "endpointURL", "apiSchema"],
|
|
118
126
|
},
|
|
119
127
|
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { RUN_TEST_COMMAND_RULES } from "../skills/runTestSkill.js";
|
|
1
2
|
/**
|
|
2
3
|
* Predefined One-Click Command: Test this endpoint
|
|
3
4
|
*
|
|
@@ -73,13 +74,24 @@ const comprehensivelyTestGivenEndpointSteps = [
|
|
|
73
74
|
toolName: "skyramp_execute_test",
|
|
74
75
|
description: "Execute each generated test; resolve token before calling. For each generated test file path returned directly by the generation tools in step 3, invoke this tool with testFile set to that path.",
|
|
75
76
|
inputs: {
|
|
76
|
-
|
|
77
|
+
commandOverride: {
|
|
78
|
+
source: "literal",
|
|
79
|
+
value: `the shell command that runs this one test file with the repository's own test runner (${RUN_TEST_COMMAND_RULES})`,
|
|
80
|
+
},
|
|
81
|
+
cwd: { source: "user", paramKey: "repositoryPath" },
|
|
77
82
|
language: { source: "literal", value: "from workspace" },
|
|
78
|
-
testType: {
|
|
83
|
+
testType: {
|
|
84
|
+
source: "literal",
|
|
85
|
+
value: "from generated test / recommendation",
|
|
86
|
+
},
|
|
79
87
|
testFile: {
|
|
80
88
|
source: "literal",
|
|
81
89
|
value: "path to a single generated test file; for each test path returned by generation tools in step 3, call skyramp_execute_test separately with testFile set to that path",
|
|
82
90
|
},
|
|
91
|
+
repository: {
|
|
92
|
+
source: "literal",
|
|
93
|
+
value: "owner/repo of the checkout, from its origin remote",
|
|
94
|
+
},
|
|
83
95
|
token: { source: "user", paramKey: "token" },
|
|
84
96
|
},
|
|
85
97
|
},
|
|
@@ -107,10 +119,27 @@ const comprehensivelyTestGivenEndpointSteps = [
|
|
|
107
119
|
toolName: "skyramp_execute_test",
|
|
108
120
|
description: "Optionally run existing tests individually; iterate over tests from stateFile and write results back",
|
|
109
121
|
inputs: {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
122
|
+
commandOverride: {
|
|
123
|
+
source: "literal",
|
|
124
|
+
value: `the shell command that runs this one test file with the repository's own test runner (${RUN_TEST_COMMAND_RULES})`,
|
|
125
|
+
},
|
|
126
|
+
cwd: { source: "user", paramKey: "repositoryPath" },
|
|
127
|
+
testFile: {
|
|
128
|
+
source: "literal",
|
|
129
|
+
value: "path from stateFile existingTests array",
|
|
130
|
+
},
|
|
131
|
+
language: {
|
|
132
|
+
source: "literal",
|
|
133
|
+
value: "language from stateFile existingTests array",
|
|
134
|
+
},
|
|
135
|
+
testType: {
|
|
136
|
+
source: "literal",
|
|
137
|
+
value: "testType from stateFile existingTests array",
|
|
138
|
+
},
|
|
139
|
+
repository: {
|
|
140
|
+
source: "literal",
|
|
141
|
+
value: "owner/repo of the checkout, from its origin remote",
|
|
142
|
+
},
|
|
114
143
|
token: { source: "user", paramKey: "token" },
|
|
115
144
|
stateFile: { source: "step", stepIndex: 1, outputKey: "stateFile" },
|
|
116
145
|
},
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/** Playwright's `--browser` names the implicit project itself, so the wrapper must not
|
|
2
|
+
* declare one: it refuses the flag when the config defines projects. */
|
|
3
|
+
export declare function commandPassesBrowserFlag(command: string): boolean;
|
|
4
|
+
/** The nearest Playwright config at or above the test file, up to the git root of `cwd`. */
|
|
5
|
+
export declare function findRepoPlaywrightConfig(testFile: string, cwd: string): string | undefined;
|
|
6
|
+
/**
|
|
7
|
+
* A config that imports the repo's own and overlays only:
|
|
8
|
+
* - `video: "on"`, top level and per project — Playwright has no `--video` flag, and a
|
|
9
|
+
* project's `use` overrides the top level.
|
|
10
|
+
* - a per-run `outputDir`, so two runs in one checkout keep their videos apart.
|
|
11
|
+
* - `reuseExistingServer: true` on every `webServer` — the app is already running, and
|
|
12
|
+
* `!process.env.CI` would refuse its port.
|
|
13
|
+
* - the file under test appended to a declared `testMatch`. A repository that names its
|
|
14
|
+
* tests `*.test.ts` collects no `*.spec.ts`, so the file Skyramp generated is not a
|
|
15
|
+
* test to it and Playwright answers "No tests found" whatever the config or filter.
|
|
16
|
+
* Only the top level is widened: a project that declares its own `testMatch` keeps it,
|
|
17
|
+
* so the file runs once.
|
|
18
|
+
* - a project named `chromium`, ONLY when the repository declares no projects and the
|
|
19
|
+
* command passes no `--browser`. The Skyramp executor always runs
|
|
20
|
+
* `--browser=chromium`, which Playwright turns into a project of that name, so every
|
|
21
|
+
* baseline it has written is `<stem>-chromium-linux.png`. With neither a project nor
|
|
22
|
+
* the flag the host resolves `<stem>-linux.png`, finds no baseline, and writes a fresh
|
|
23
|
+
* one instead of comparing -- a visual regression then passes silently.
|
|
24
|
+
* The flag case needs nothing: `--browser=firefox` names the project `firefox` by
|
|
25
|
+
* itself. Declaring a project there would not help but throw, because Playwright
|
|
26
|
+
* refuses `--browser` when the config defines projects (`common/config.js`:
|
|
27
|
+
* "Cannot use --browser option when configuration file defines projects").
|
|
28
|
+
* See `utils/rebaselineSnapshots.ts` for the layout.
|
|
29
|
+
* No reporter: the verdict is the exit code.
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildWrapperConfig(opts: {
|
|
32
|
+
repoConfigBasename?: string;
|
|
33
|
+
outputDir: string;
|
|
34
|
+
/** Absolute path of the file this run executes. */
|
|
35
|
+
testFile?: string;
|
|
36
|
+
/** True when the command already passes `--browser`, which names the project itself. */
|
|
37
|
+
commandPassesBrowserFlag: boolean;
|
|
38
|
+
}): string;
|
|
39
|
+
/**
|
|
40
|
+
* Writes the wrapper beside the config it imports, because Playwright resolves `testDir`,
|
|
41
|
+
* `globalSetup` and `webServer.cwd` from the config file's directory. A dotfile with a
|
|
42
|
+
* random suffix: runs cannot collide and `testMatch` cannot collect it.
|
|
43
|
+
*/
|
|
44
|
+
export declare function writeWrapperConfig(opts: {
|
|
45
|
+
repoConfigPath?: string;
|
|
46
|
+
/** Where to write when there is no repo config. */
|
|
47
|
+
fallbackDir: string;
|
|
48
|
+
outputDir: string;
|
|
49
|
+
/** Absolute path of the file this run executes. */
|
|
50
|
+
testFile?: string;
|
|
51
|
+
/** True when the command already passes `--browser`, which names the project itself. */
|
|
52
|
+
commandPassesBrowserFlag: boolean;
|
|
53
|
+
}): {
|
|
54
|
+
path: string;
|
|
55
|
+
cleanup: () => void;
|
|
56
|
+
};
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import crypto from "crypto";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { detectGitRoot } from "../utils/gitStaging.js";
|
|
5
|
+
import { samePath } from "../tools/code-refactor/reuse-state.js";
|
|
6
|
+
/** Playwright's own config names, in its probe order (1.59.1 `configLoader.js:314`).
|
|
7
|
+
* A missing name silently drops the repo's config. */
|
|
8
|
+
const CONFIG_NAMES = [
|
|
9
|
+
"playwright.config.ts",
|
|
10
|
+
"playwright.config.js",
|
|
11
|
+
"playwright.config.mts",
|
|
12
|
+
"playwright.config.mjs",
|
|
13
|
+
"playwright.config.cts",
|
|
14
|
+
"playwright.config.cjs",
|
|
15
|
+
];
|
|
16
|
+
/** Playwright's `--browser` names the implicit project itself, so the wrapper must not
|
|
17
|
+
* declare one: it refuses the flag when the config defines projects. */
|
|
18
|
+
export function commandPassesBrowserFlag(command) {
|
|
19
|
+
return /(^|\s)--browser(=|\s)/.test(command);
|
|
20
|
+
}
|
|
21
|
+
/** The nearest Playwright config at or above the test file, up to the git root of `cwd`. */
|
|
22
|
+
export function findRepoPlaywrightConfig(testFile, cwd) {
|
|
23
|
+
const stop = detectGitRoot(cwd);
|
|
24
|
+
let dir = path.dirname(path.resolve(testFile));
|
|
25
|
+
for (;;) {
|
|
26
|
+
for (const name of CONFIG_NAMES) {
|
|
27
|
+
const candidate = path.join(dir, name);
|
|
28
|
+
if (fs.existsSync(candidate))
|
|
29
|
+
return candidate;
|
|
30
|
+
}
|
|
31
|
+
const parent = path.dirname(dir);
|
|
32
|
+
if (parent === dir || (stop && samePath(dir, stop)))
|
|
33
|
+
return undefined;
|
|
34
|
+
dir = parent;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* A config that imports the repo's own and overlays only:
|
|
39
|
+
* - `video: "on"`, top level and per project — Playwright has no `--video` flag, and a
|
|
40
|
+
* project's `use` overrides the top level.
|
|
41
|
+
* - a per-run `outputDir`, so two runs in one checkout keep their videos apart.
|
|
42
|
+
* - `reuseExistingServer: true` on every `webServer` — the app is already running, and
|
|
43
|
+
* `!process.env.CI` would refuse its port.
|
|
44
|
+
* - the file under test appended to a declared `testMatch`. A repository that names its
|
|
45
|
+
* tests `*.test.ts` collects no `*.spec.ts`, so the file Skyramp generated is not a
|
|
46
|
+
* test to it and Playwright answers "No tests found" whatever the config or filter.
|
|
47
|
+
* Only the top level is widened: a project that declares its own `testMatch` keeps it,
|
|
48
|
+
* so the file runs once.
|
|
49
|
+
* - a project named `chromium`, ONLY when the repository declares no projects and the
|
|
50
|
+
* command passes no `--browser`. The Skyramp executor always runs
|
|
51
|
+
* `--browser=chromium`, which Playwright turns into a project of that name, so every
|
|
52
|
+
* baseline it has written is `<stem>-chromium-linux.png`. With neither a project nor
|
|
53
|
+
* the flag the host resolves `<stem>-linux.png`, finds no baseline, and writes a fresh
|
|
54
|
+
* one instead of comparing -- a visual regression then passes silently.
|
|
55
|
+
* The flag case needs nothing: `--browser=firefox` names the project `firefox` by
|
|
56
|
+
* itself. Declaring a project there would not help but throw, because Playwright
|
|
57
|
+
* refuses `--browser` when the config defines projects (`common/config.js`:
|
|
58
|
+
* "Cannot use --browser option when configuration file defines projects").
|
|
59
|
+
* See `utils/rebaselineSnapshots.ts` for the layout.
|
|
60
|
+
* No reporter: the verdict is the exit code.
|
|
61
|
+
*/
|
|
62
|
+
export function buildWrapperConfig(opts) {
|
|
63
|
+
const outputDir = JSON.stringify(opts.outputDir);
|
|
64
|
+
const overlay = `outputDir: ${outputDir},`;
|
|
65
|
+
// Widen only what the repository declared: with no `testMatch`, Playwright's own
|
|
66
|
+
// default already collects both spellings, and setting one would narrow it.
|
|
67
|
+
// One chromium project, used by both branches below. The Skyramp executor runs
|
|
68
|
+
// --browser=chromium, so every baseline it has written is <stem>-chromium-linux.png;
|
|
69
|
+
// a wrapper with no project resolves <stem>-linux.png and compares against nothing.
|
|
70
|
+
// A command that passes --browser names the project itself, and Playwright refuses
|
|
71
|
+
// the flag when the config declares projects, so there it must stay empty.
|
|
72
|
+
const chromiumProject = (useExpr) => opts.commandPassesBrowserFlag
|
|
73
|
+
? ""
|
|
74
|
+
: `{ name: "chromium", outputDir: ${outputDir}, use: { ...${useExpr}, browserName: "chromium" } }`;
|
|
75
|
+
const testMatchOverlay = opts.testFile
|
|
76
|
+
? `...(base.testMatch ? { testMatch: [...asList(base.testMatch), ${JSON.stringify(opts.testFile)}] } : {}),`
|
|
77
|
+
: "";
|
|
78
|
+
if (!opts.repoConfigBasename) {
|
|
79
|
+
// No repo config: a minimal one, so video still records.
|
|
80
|
+
return `const config = {
|
|
81
|
+
testDir: ".",
|
|
82
|
+
${overlay}
|
|
83
|
+
use: { video: "on" },${chromiumProject('{ video: "on" }')
|
|
84
|
+
? `\n projects: [${chromiumProject('{ video: "on" }')}],`
|
|
85
|
+
: ""}
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
export default config;
|
|
89
|
+
`;
|
|
90
|
+
}
|
|
91
|
+
return `import base from ${JSON.stringify(`./${opts.repoConfigBasename}`)};
|
|
92
|
+
|
|
93
|
+
const withVideo = (use) => ({ ...(use ?? {}), video: "on" });
|
|
94
|
+
const reuseServer = (server) => ({ ...server, reuseExistingServer: true });
|
|
95
|
+
|
|
96
|
+
const asList = (m) => (Array.isArray(m) ? m : [m]);
|
|
97
|
+
|
|
98
|
+
const config = {
|
|
99
|
+
...base,
|
|
100
|
+
${overlay}
|
|
101
|
+
${testMatchOverlay}
|
|
102
|
+
use: withVideo(base.use),
|
|
103
|
+
...(base.webServer
|
|
104
|
+
? {
|
|
105
|
+
webServer: Array.isArray(base.webServer)
|
|
106
|
+
? base.webServer.map(reuseServer)
|
|
107
|
+
: reuseServer(base.webServer),
|
|
108
|
+
}
|
|
109
|
+
: {}),
|
|
110
|
+
...(Array.isArray(base.projects) && base.projects.length > 0
|
|
111
|
+
? {
|
|
112
|
+
projects: base.projects.map((p) => ({
|
|
113
|
+
...p,
|
|
114
|
+
outputDir: ${outputDir},
|
|
115
|
+
use: withVideo(p.use),
|
|
116
|
+
})),
|
|
117
|
+
}
|
|
118
|
+
: ${chromiumProject("withVideo(base.use)")
|
|
119
|
+
? `{ projects: [${chromiumProject("withVideo(base.use)")}] }`
|
|
120
|
+
: "{}"}),
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
export default config;
|
|
124
|
+
`;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Writes the wrapper beside the config it imports, because Playwright resolves `testDir`,
|
|
128
|
+
* `globalSetup` and `webServer.cwd` from the config file's directory. A dotfile with a
|
|
129
|
+
* random suffix: runs cannot collide and `testMatch` cannot collect it.
|
|
130
|
+
*/
|
|
131
|
+
export function writeWrapperConfig(opts) {
|
|
132
|
+
const dir = opts.repoConfigPath
|
|
133
|
+
? path.dirname(opts.repoConfigPath)
|
|
134
|
+
: opts.fallbackDir;
|
|
135
|
+
const wrapperPath = path.join(dir, `.skyramp-sut-${crypto.randomBytes(6).toString("hex")}.config.ts`);
|
|
136
|
+
fs.writeFileSync(wrapperPath, buildWrapperConfig({
|
|
137
|
+
repoConfigBasename: opts.repoConfigPath
|
|
138
|
+
? path.basename(opts.repoConfigPath)
|
|
139
|
+
: undefined,
|
|
140
|
+
outputDir: opts.outputDir,
|
|
141
|
+
testFile: opts.testFile,
|
|
142
|
+
commandPassesBrowserFlag: opts.commandPassesBrowserFlag,
|
|
143
|
+
}));
|
|
144
|
+
return {
|
|
145
|
+
path: wrapperPath,
|
|
146
|
+
cleanup: () => {
|
|
147
|
+
try {
|
|
148
|
+
fs.rmSync(wrapperPath, { force: true });
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
// Best effort: never fail the run over cleanup.
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
}
|
package/build/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
|
+
import { runnableLanguagesText } from "./types/TestTypes.js";
|
|
3
4
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
5
|
import { registerStartTraceCollectionPrompt } from "./prompts/startTraceCollectionPrompts.js";
|
|
5
6
|
import { registerTraceTool } from "./tools/trace/startTraceCollectionTool.js";
|
|
6
7
|
import { registerTraceStopTool } from "./tools/trace/stopTraceCollectionTool.js";
|
|
7
8
|
import { registerExecuteSkyrampTestTool } from "./tools/executeSkyrampTestTool.js";
|
|
8
|
-
import { registerRunExistingTestsTool } from "./tools/runExistingTestsTool.js";
|
|
9
9
|
import { AUTH_PLACEHOLDER_TOKEN } from "./types/TestTypes.js";
|
|
10
10
|
import { AUTH_CONFLICT_ERROR_MSG } from "./prompts/test-recommendation/recommendationSections.js";
|
|
11
11
|
import { logger } from "./utils/logger.js";
|
|
@@ -19,10 +19,13 @@ import { registerE2ETestTool } from "./tools/generate-tests/generateE2ERestTool.
|
|
|
19
19
|
import { registerLoginTool } from "./tools/auth/loginTool.js";
|
|
20
20
|
import { registerLogoutTool } from "./tools/auth/logoutTool.js";
|
|
21
21
|
import { registerFixErrorTool } from "./tools/fixErrorTool.js";
|
|
22
|
+
import { registerVerifyTestDependenciesTool } from "./tools/verifyTestDependenciesTool.js";
|
|
22
23
|
import { registerRecommendTestsPrompt } from "./prompts/test-recommendation/registerRecommendTestsPrompt.js";
|
|
23
24
|
import { registerModularizationTool } from "./tools/code-refactor/modularizationTool.js";
|
|
24
25
|
import { registerCodeReuseTool } from "./tools/code-refactor/codeReuseTool.js";
|
|
25
26
|
import { registerEnhanceAssertionsTool } from "./tools/code-refactor/enhanceAssertionsTool.js";
|
|
27
|
+
import { registerAlignAssertionsTool } from "./tools/code-refactor/alignAssertionsTool.js";
|
|
28
|
+
import { registerAssertionSnapshotTool, registerAssertionVerifyTool, } from "./tools/code-refactor/assertionSkillTools.js";
|
|
26
29
|
import { registerBatchScenarioTestTool } from "./tools/generate-tests/generateBatchScenarioRestTool.js";
|
|
27
30
|
import { registerMockTool } from "./tools/generate-tests/generateMockRestTool.js";
|
|
28
31
|
import { registerBatchMockTool } from "./tools/generate-tests/batchMockGenerationTool.js";
|
|
@@ -68,6 +71,18 @@ else if (oneClickEnabled) {
|
|
|
68
71
|
else if (localDevEnabled) {
|
|
69
72
|
oneClickInstructions = localDevInstructions;
|
|
70
73
|
}
|
|
74
|
+
// Global workspace-init nudge for bare MCP usage. Suppressed in testbot mode,
|
|
75
|
+
// which runs its own INIT_WORKSPACE step (buildWorkspaceInitSection()) instead.
|
|
76
|
+
const workspaceInitInstructions = isTestbotEnabled() || oneClickEnabled || localDevEnabled
|
|
77
|
+
? ""
|
|
78
|
+
: `
|
|
79
|
+
## Workspace Initialization (REQUIRED before the first Skyramp tool call)
|
|
80
|
+
If the workspace root is a git repo AND \`.skyramp/workspace.yml\` does not exist:
|
|
81
|
+
1. Call \`skyramp_init_scan\` with \`workspacePath\` set to the current repository root → follow the returned instructions to discover all services.
|
|
82
|
+
2. Call \`skyramp_init_workspace\` with that SAME \`workspacePath\`, \`services\`, and the \`scanToken\` from step 1.
|
|
83
|
+
3. Proceed with the originally requested tool, if it is not one of the two workspace-init tools above.
|
|
84
|
+
Skip only if: not a git repo, \`.skyramp/workspace.yml\` already exists, or user explicitly declines.
|
|
85
|
+
`;
|
|
71
86
|
const server = new McpServer({
|
|
72
87
|
name: "Skyramp MCP Server",
|
|
73
88
|
version: "1.0.0",
|
|
@@ -84,7 +99,7 @@ const server = new McpServer({
|
|
|
84
99
|
},
|
|
85
100
|
},
|
|
86
101
|
instructions: `Skyramp MCP Server — generates and executes API tests (fuzz, contract, integration, E2E, UI).
|
|
87
|
-
|
|
102
|
+
${workspaceInitInstructions}
|
|
88
103
|
## Rules
|
|
89
104
|
- NEVER show CLI commands. NEVER attempt to install or configure the Skyramp CLI. ALWAYS use the MCP tools provided.
|
|
90
105
|
- For UI and E2E tests, there are TWO recording modes:
|
|
@@ -99,11 +114,12 @@ Use \`skyramp_analyze_changes\` as the single entry point for both test recommen
|
|
|
99
114
|
1. Call \`skyramp_analyze_changes\` with \`repositoryPath\` and \`scope\` → scans endpoints, computes branch diff, discovers existing tests → returns a \`stateFile\` **and** inline ranked test recommendations.
|
|
100
115
|
2. (Optional) Use the \`skyramp_recommend_tests\` prompt with \`stateFile\` in Cursor/IDE chat for a focused recommendation view.
|
|
101
116
|
|
|
102
|
-
### Health Analysis (
|
|
117
|
+
### Health Analysis (5-step)
|
|
103
118
|
1. Call \`skyramp_analyze_changes\` with \`repositoryPath\` and \`scope\` → returns a \`stateFile\`.
|
|
104
|
-
2.
|
|
105
|
-
3.
|
|
106
|
-
4.
|
|
119
|
+
2. Run each external test in ${runnableLanguagesText()} with \`skyramp_execute_test\`, \`phase: "before"\`, and \`stateFile\` → the server runs your command and writes the verdict back to stateFile. The tool takes no other language, and the gate in step 3 does not ask for those.
|
|
120
|
+
3. Call \`skyramp_analyze_test_health\` with \`stateFile\` → runs drift analysis + health scoring + LLM semantic assessment. It refuses until step 2 has run.
|
|
121
|
+
4. (Optional) Run Skyramp-generated tests with \`skyramp_execute_test\` and \`stateFile\` → writes each verdict back for health scoring.
|
|
122
|
+
5. Call \`skyramp_actions\` with \`stateFile\` → executes UPDATE/REGENERATE/ADD recommendations (with execution-aware prioritization if step 4 ran).
|
|
107
123
|
|
|
108
124
|
After \`skyramp_analyze_changes\`, inspect enriched data via MCP Resources (use the \`sessionId\` returned in the output):
|
|
109
125
|
- \`skyramp://analysis/{sessionId}/summary\` — high-level overview
|
|
@@ -172,12 +188,22 @@ const codeQualityTools = [
|
|
|
172
188
|
registerModularizationTool,
|
|
173
189
|
registerCodeReuseTool,
|
|
174
190
|
registerEnhanceAssertionsTool,
|
|
191
|
+
registerAssertionVerifyTool,
|
|
192
|
+
registerVerifyTestDependenciesTool,
|
|
175
193
|
];
|
|
176
194
|
// With the Skyramp plugin loaded the agent already has the
|
|
177
195
|
// fix-test-import-errors skill; the tool would be a second copy of
|
|
178
196
|
// the same text (SKYR-4296).
|
|
179
197
|
if (!isSkillsLoaded()) {
|
|
180
|
-
|
|
198
|
+
// Same reasoning as fix-test-import-errors: with the plugin loaded the agent
|
|
199
|
+
// has the validate-assertion-alignment-post-execution skill directly; this
|
|
200
|
+
// tool exists so an agent without skill support still gets the same
|
|
201
|
+
// procedure, rendered from the same markdown with real arguments filled in.
|
|
202
|
+
codeQualityTools.push(registerFixErrorTool, registerAlignAssertionsTool);
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
// The enhance-assertions skill drives its own snapshot step itself (SKYR-4310).
|
|
206
|
+
codeQualityTools.push(registerAssertionSnapshotTool);
|
|
181
207
|
}
|
|
182
208
|
codeQualityTools.forEach((registerTool) => registerTool(server));
|
|
183
209
|
// Register analysis resources (MCP Resources for enriched data access)
|
|
@@ -216,7 +242,6 @@ if (isLocalDevEnabled()) {
|
|
|
216
242
|
}
|
|
217
243
|
if (isTestbotEnabled()) {
|
|
218
244
|
infrastructureTools.push(registerSubmitReportTool);
|
|
219
|
-
infrastructureTools.push(registerRunExistingTestsTool);
|
|
220
245
|
logger.info("Testbot tools enabled via SKYRAMP_FEATURE_TESTBOT");
|
|
221
246
|
}
|
|
222
247
|
infrastructureTools.forEach((registerTool) => registerTool(server));
|
|
@@ -256,12 +281,17 @@ infrastructureTools.forEach((registerTool) => registerTool(server));
|
|
|
256
281
|
// Editing the repo's own Playwright config is the wrong instruction: a
|
|
257
282
|
// suite may have several, and none of them at the root.
|
|
258
283
|
logger.info("No testIdAttribute declared or discovered — capture stays on Playwright's data-testid. " +
|
|
259
|
-
"Set PLAYWRIGHT_MCP_TEST_ID_ATTRIBUTE to override.", {
|
|
284
|
+
"Set PLAYWRIGHT_MCP_TEST_ID_ATTRIBUTE to override.", {
|
|
285
|
+
attributesSeenInSelectors: discovered.observed,
|
|
286
|
+
filesScanned: discovered.filesScanned,
|
|
287
|
+
});
|
|
260
288
|
}
|
|
261
289
|
}
|
|
262
290
|
}
|
|
263
291
|
catch (err) {
|
|
264
|
-
logger.warning("Could not determine this repository's testIdAttribute", {
|
|
292
|
+
logger.warning("Could not determine this repository's testIdAttribute", {
|
|
293
|
+
error: err,
|
|
294
|
+
});
|
|
265
295
|
}
|
|
266
296
|
await registerPlaywrightTools(server, { testIdAttribute });
|
|
267
297
|
})().catch((err) => {
|
|
@@ -15,7 +15,9 @@ export function blueprintJsonSpan(text) {
|
|
|
15
15
|
const MAX_DEPTH = 12;
|
|
16
16
|
export const MAX_ELEMENTS = 2000;
|
|
17
17
|
function text(value) {
|
|
18
|
-
return typeof value === "string" && value.trim().length > 0
|
|
18
|
+
return typeof value === "string" && value.trim().length > 0
|
|
19
|
+
? value
|
|
20
|
+
: undefined;
|
|
19
21
|
}
|
|
20
22
|
function rowText(value) {
|
|
21
23
|
if (!Array.isArray(value))
|
|
@@ -32,13 +34,21 @@ function fillTemplate(template, parameters) {
|
|
|
32
34
|
const values = parameters;
|
|
33
35
|
return template.replace(/\{([^{}]+)\}/g, (placeholder, name) => {
|
|
34
36
|
const value = values[name];
|
|
35
|
-
return typeof value === "string" || typeof value === "number"
|
|
37
|
+
return typeof value === "string" || typeof value === "number"
|
|
38
|
+
? String(value)
|
|
39
|
+
: placeholder;
|
|
36
40
|
});
|
|
37
41
|
}
|
|
38
42
|
function identity(element) {
|
|
39
43
|
// Serialised rather than joined on a separator: a row's context text is page
|
|
40
44
|
// content and can hold any character, so any separator could be in it.
|
|
41
|
-
return JSON.stringify([
|
|
45
|
+
return JSON.stringify([
|
|
46
|
+
element.role,
|
|
47
|
+
element.accessibleName,
|
|
48
|
+
element.testId ?? "",
|
|
49
|
+
element.stableId ?? "",
|
|
50
|
+
element.contextText ?? [],
|
|
51
|
+
]);
|
|
42
52
|
}
|
|
43
53
|
/** Every element this record describes. A repeating one keeps BOTH its template
|
|
44
54
|
* and each filled-in row, because the agent lifts a row's rendered name. */
|
|
@@ -80,7 +90,9 @@ function collectElements(root) {
|
|
|
80
90
|
const found = [];
|
|
81
91
|
let truncated = false;
|
|
82
92
|
const seen = new Set();
|
|
83
|
-
const stack = [
|
|
93
|
+
const stack = [
|
|
94
|
+
{ value: root, depth: 0 },
|
|
95
|
+
];
|
|
84
96
|
while (stack.length > 0) {
|
|
85
97
|
if (found.length >= MAX_ELEMENTS) {
|
|
86
98
|
truncated = true;
|
|
@@ -117,12 +129,16 @@ function collectElements(root) {
|
|
|
117
129
|
}
|
|
118
130
|
function urlOf(parsed) {
|
|
119
131
|
const blueprint = parsed.blueprint;
|
|
120
|
-
const inner = blueprint && typeof blueprint === "object"
|
|
132
|
+
const inner = blueprint && typeof blueprint === "object"
|
|
133
|
+
? blueprint
|
|
134
|
+
: undefined;
|
|
121
135
|
return text(parsed.url) ?? (inner ? text(inner.url) : undefined);
|
|
122
136
|
}
|
|
123
137
|
function pageHashOf(parsed) {
|
|
124
138
|
const blueprint = parsed.blueprint;
|
|
125
|
-
const inner = blueprint && typeof blueprint === "object"
|
|
139
|
+
const inner = blueprint && typeof blueprint === "object"
|
|
140
|
+
? blueprint
|
|
141
|
+
: undefined;
|
|
126
142
|
return text(parsed.pageHash) ?? (inner ? text(inner.pageHash) : undefined);
|
|
127
143
|
}
|
|
128
144
|
/** The digest of one payload, or undefined when nothing in it keys to a page.
|
|
@@ -148,5 +164,10 @@ export function digestFromBlueprintText(payload, previousUrl) {
|
|
|
148
164
|
return undefined;
|
|
149
165
|
const pageHash = pageHashOf(record);
|
|
150
166
|
const { elements, truncated } = collectElements(record);
|
|
151
|
-
return {
|
|
167
|
+
return {
|
|
168
|
+
url,
|
|
169
|
+
...(pageHash ? { pageHash } : {}),
|
|
170
|
+
elements,
|
|
171
|
+
...(truncated ? { elementsTruncated: true } : {}),
|
|
172
|
+
};
|
|
152
173
|
}
|
|
@@ -6,7 +6,8 @@ import { z } from "zod";
|
|
|
6
6
|
import { logger } from "../utils/logger.js";
|
|
7
7
|
import { PlaywrightTraceService, } from "./PlaywrightTraceService.js";
|
|
8
8
|
import { blueprintJsonSpan } from "./blueprintDigest.js";
|
|
9
|
-
import { recordBlueprintCapture, recordBrowserNavigation } from "./blueprintDigestStore.js";
|
|
9
|
+
import { recordBlueprintCapture, recordBrowserNavigation, } from "./blueprintDigestStore.js";
|
|
10
|
+
import { recordTraceExport } from "./traceExportStore.js";
|
|
10
11
|
let _service = null;
|
|
11
12
|
export function getPlaywrightTraceService() {
|
|
12
13
|
return _service;
|
|
@@ -21,6 +22,14 @@ const BLUEPRINT_TOOL = "browser_blueprint";
|
|
|
21
22
|
* withAssertReminder.
|
|
22
23
|
*/
|
|
23
24
|
const NAVIGATE_TOOL = "browser_navigate";
|
|
25
|
+
/**
|
|
26
|
+
* The one browser tool whose CALL is counted — see traceExportStore.
|
|
27
|
+
*
|
|
28
|
+
* The count is what lets `skyramp_submit_report` tell "recorded, and it did not
|
|
29
|
+
* work" apart from "never recorded". Those two deserve opposite answers, and
|
|
30
|
+
* without the count the report check can only see the second as the first.
|
|
31
|
+
*/
|
|
32
|
+
const EXPORT_TOOL = "skyramp_export_zip";
|
|
24
33
|
/**
|
|
25
34
|
* The line the agent reads the moment it has reached a page.
|
|
26
35
|
*
|
|
@@ -44,11 +53,16 @@ function withAssertReminder(result) {
|
|
|
44
53
|
const content = result?.content ?? [];
|
|
45
54
|
const last = content.map((block) => block?.type).lastIndexOf("text");
|
|
46
55
|
if (last < 0) {
|
|
47
|
-
return {
|
|
56
|
+
return {
|
|
57
|
+
...result,
|
|
58
|
+
content: [...content, { type: "text", text: ASSERT_REMINDER }],
|
|
59
|
+
};
|
|
48
60
|
}
|
|
49
61
|
return {
|
|
50
62
|
...result,
|
|
51
|
-
content: content.map((block, i) => i === last && block?.type === "text"
|
|
63
|
+
content: content.map((block, i) => i === last && block?.type === "text"
|
|
64
|
+
? { ...block, text: `${block.text}\n\n${ASSERT_REMINDER}` }
|
|
65
|
+
: block),
|
|
52
66
|
};
|
|
53
67
|
}
|
|
54
68
|
/**
|
|
@@ -171,32 +185,32 @@ export async function registerPlaywrightTools(server, options) {
|
|
|
171
185
|
// The widgetType field on blueprint elements still signals "custom" to
|
|
172
186
|
// the agent — no guidance is lost.
|
|
173
187
|
const ESSENTIAL_TOOLS = new Set([
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
188
|
+
"browser_navigate",
|
|
189
|
+
"browser_snapshot",
|
|
190
|
+
"browser_click",
|
|
191
|
+
"browser_type",
|
|
192
|
+
"browser_press_key",
|
|
193
|
+
"browser_select_option",
|
|
194
|
+
"browser_hover",
|
|
195
|
+
"browser_drag",
|
|
196
|
+
"browser_file_upload",
|
|
197
|
+
"browser_evaluate",
|
|
198
|
+
"browser_tabs",
|
|
199
|
+
"browser_navigate_back",
|
|
200
|
+
"browser_wait_for",
|
|
201
|
+
"browser_take_screenshot",
|
|
202
|
+
"browser_assert",
|
|
203
|
+
"browser_assert_hidden",
|
|
204
|
+
"browser_assert_api_request",
|
|
205
|
+
"browser_assert_table_cell",
|
|
206
|
+
"browser_mouse_action",
|
|
207
|
+
"browser_visual_snapshot",
|
|
208
|
+
"browser_gojs_add_node",
|
|
209
|
+
"browser_gojs_link",
|
|
210
|
+
"skyramp_export_zip",
|
|
211
|
+
"skyramp_load_trace",
|
|
198
212
|
// DOM Analyzer: blueprint capture (capture-act-capture pattern)
|
|
199
|
-
|
|
213
|
+
"browser_blueprint",
|
|
200
214
|
]);
|
|
201
215
|
const filteredTools = tools.filter((t) => ESSENTIAL_TOOLS.has(t.name));
|
|
202
216
|
logger.info(`Filtering to ${filteredTools.length} essential tools (from ${tools.length} total)`);
|
|
@@ -220,6 +234,11 @@ export async function registerPlaywrightTools(server, options) {
|
|
|
220
234
|
};
|
|
221
235
|
}
|
|
222
236
|
const result = await _service.callTool(tool.name, params);
|
|
237
|
+
// Counted BEFORE any early return and REGARDLESS of isError: an export
|
|
238
|
+
// that failed still cost the agent a recording, and the report gate that
|
|
239
|
+
// reads this has to be satisfiable by trying. Returns nothing, never throws.
|
|
240
|
+
if (tool.name === EXPORT_TOOL)
|
|
241
|
+
recordTraceExport();
|
|
223
242
|
if (isNavigate) {
|
|
224
243
|
// The destination this server forwarded, so `skyramp_resolve_screen`
|
|
225
244
|
// can say where the browser actually is without asking the agent.
|