@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
|
@@ -33,7 +33,7 @@ export async function recordExecutionVideo(result, explicitStateFile) {
|
|
|
33
33
|
return;
|
|
34
34
|
// Last write wins: a retried execution leaves a video directory per attempt,
|
|
35
35
|
// and the report must reference the attempt whose status it reports.
|
|
36
|
-
await manager.
|
|
36
|
+
await manager.appendData({
|
|
37
37
|
...data,
|
|
38
38
|
executionVideos: {
|
|
39
39
|
...data.executionVideos,
|
|
@@ -2,7 +2,6 @@ import { z } from "zod";
|
|
|
2
2
|
import { logger } from "../utils/logger.js";
|
|
3
3
|
import { getFixErrorsPrompt } from "../prompts/fix-error-prompt.js";
|
|
4
4
|
import { languageSchema } from "../types/TestTypes.js";
|
|
5
|
-
import { getLanguageSteps } from "../utils/language-helper.js";
|
|
6
5
|
import { normalizeSkyrampImportsInFile } from "../utils/normalizeSkyrampImports.js";
|
|
7
6
|
import { AnalyticsService } from "../services/AnalyticsService.js";
|
|
8
7
|
const fixErrorSchema = z.object({
|
|
@@ -18,7 +17,7 @@ const fixErrorSchema = z.object({
|
|
|
18
17
|
const TOOL_NAME = "skyramp_fix_errors";
|
|
19
18
|
export function registerFixErrorTool(server) {
|
|
20
19
|
server.registerTool(TOOL_NAME, {
|
|
21
|
-
description:
|
|
20
|
+
description: "Return guidance for repairing test reference, syntax, import, and missing-dependency errors while preserving the scenario, expected behavior, and assertion strength.",
|
|
22
21
|
inputSchema: fixErrorSchema.shape,
|
|
23
22
|
_meta: {
|
|
24
23
|
keywords: [
|
|
@@ -40,9 +39,7 @@ export function registerFixErrorTool(server) {
|
|
|
40
39
|
content: [
|
|
41
40
|
{
|
|
42
41
|
type: "text",
|
|
43
|
-
text:
|
|
44
|
-
${getFixErrorsPrompt()}
|
|
45
|
-
${getLanguageSteps(params)}`,
|
|
42
|
+
text: getFixErrorsPrompt(params),
|
|
46
43
|
},
|
|
47
44
|
],
|
|
48
45
|
};
|
|
@@ -64,7 +61,9 @@ export function registerFixErrorTool(server) {
|
|
|
64
61
|
AnalyticsService.pushMCPToolEvent(TOOL_NAME, errorResult, {
|
|
65
62
|
prompt: params.prompt,
|
|
66
63
|
testFile: params.testFile,
|
|
67
|
-
}).catch((err) => {
|
|
64
|
+
}).catch((err) => {
|
|
65
|
+
logger.warning("Analytics event failed", { error: String(err) });
|
|
66
|
+
});
|
|
68
67
|
}
|
|
69
68
|
});
|
|
70
69
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { SkyrampClient } from "@skyramp/skyramp";
|
|
3
|
-
import { MockProtocol, RuntimeEnvironment, runtimeEnvironmentInputSchema } from "../../types/TestTypes.js";
|
|
3
|
+
import { MockProtocol, RuntimeEnvironment, runtimeEnvironmentInputSchema, } from "../../types/TestTypes.js";
|
|
4
4
|
export { MockProtocol } from "../../types/TestTypes.js";
|
|
5
5
|
import { AnalyticsService } from "../../services/AnalyticsService.js";
|
|
6
6
|
import { logger } from "../../utils/logger.js";
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { TOOL_BATCH_SCENARIO_TEST_GENERATION } from "../../toolNames.js";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import path from "path";
|
|
4
|
-
import { ScenarioGenerationService } from "../../services/ScenarioGenerationService.js";
|
|
4
|
+
import { ScenarioGenerationService, } from "../../services/ScenarioGenerationService.js";
|
|
5
5
|
import fs from "fs";
|
|
6
|
-
import { baseSchema, AUTH_PLACEHOLDER_TOKEN, HttpMethod } from "../../types/TestTypes.js";
|
|
6
|
+
import { baseSchema, AUTH_PLACEHOLDER_TOKEN, HttpMethod, } from "../../types/TestTypes.js";
|
|
7
7
|
import { AnalyticsService } from "../../services/AnalyticsService.js";
|
|
8
|
-
import { resolveAuthFromWorkspace, getWorkspaceScopedQueryParams, mergeQueryParamsJson } from "../../utils/workspaceAuth.js";
|
|
9
|
-
import { resolveQueryParamsForPath, ensureLeadingSlash, contributesNothing } from "../../workspace/queryParamResolution.js";
|
|
8
|
+
import { resolveAuthFromWorkspace, getWorkspaceScopedQueryParams, mergeQueryParamsJson, } from "../../utils/workspaceAuth.js";
|
|
9
|
+
import { resolveQueryParamsForPath, ensureLeadingSlash, contributesNothing, } from "../../workspace/queryParamResolution.js";
|
|
10
10
|
import { deriveBasePath } from "../../utils/urlPath.js";
|
|
11
11
|
import yaml from "js-yaml";
|
|
12
12
|
import { logger } from "../../utils/logger.js";
|
|
@@ -49,25 +49,30 @@ function isJsonObject(v) {
|
|
|
49
49
|
return false;
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
|
-
export const stepSchema = z
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
.describe("HTTP method for this step."),
|
|
52
|
+
export const stepSchema = z
|
|
53
|
+
.object({
|
|
54
|
+
method: z.nativeEnum(HttpMethod).describe("HTTP method for this step."),
|
|
56
55
|
path: z
|
|
57
56
|
.string()
|
|
58
|
-
.startsWith("/", {
|
|
57
|
+
.startsWith("/", {
|
|
58
|
+
message: "path must begin with '/' (e.g. '/api/v1/products/123')",
|
|
59
|
+
})
|
|
59
60
|
.describe("API path for this step, must start with '/'. For steps that reference an ID from a prior step, use the same concrete value in the path (e.g. '/api/v1/orders/1') that appears in the prior step's response body (e.g. {\"id\": 1}). The backend auto-detects chaining by matching these values across steps."),
|
|
60
61
|
requestBody: z
|
|
61
62
|
.string()
|
|
62
63
|
.optional()
|
|
63
|
-
.refine(isJsonValue, {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
.refine(isJsonValue, {
|
|
65
|
+
message: 'requestBody must be valid JSON (e.g. \'{"name":"product"}\').',
|
|
66
|
+
})
|
|
67
|
+
.describe("JSON string of the request body parsed by AI from the scenario. " +
|
|
68
|
+
"IMPORTANT: For GET and DELETE requests, do NOT put query/filter/search parameters here — use queryParams instead. " +
|
|
69
|
+
"requestBody should only contain data sent in the HTTP body (typically for POST, PUT, PATCH)."),
|
|
67
70
|
queryParams: z
|
|
68
71
|
.string()
|
|
69
72
|
.optional()
|
|
70
|
-
.refine(isJsonObject, {
|
|
73
|
+
.refine(isJsonObject, {
|
|
74
|
+
message: 'queryParams must be a JSON object string (e.g. \'{"limit":"10"}\').',
|
|
75
|
+
})
|
|
71
76
|
.describe(`JSON string of URL query parameters. Provide a FLAT object where each key is the exact URL parameter name and each value is a string or number (single value per key).
|
|
72
77
|
|
|
73
78
|
<examples>
|
|
@@ -89,7 +94,9 @@ Workspace-configured api.defaultQueryParams (if set) are merged into every step
|
|
|
89
94
|
responseBody: z
|
|
90
95
|
.string()
|
|
91
96
|
.optional()
|
|
92
|
-
.refine(isJsonValue, {
|
|
97
|
+
.refine(isJsonValue, {
|
|
98
|
+
message: "responseBody must be valid JSON (e.g. '{\"id\": 1}'). The backend extracts chaining identifiers by parsing it — a malformed body silently disables chaining for every later step.",
|
|
99
|
+
})
|
|
93
100
|
.describe("JSON string of the expected response body. For steps that produce an id used by later steps, include that id field with a realistic UUID generated fresh for this scenario — the backend chains by value-matching any subsequent step path or requestBody that contains the same UUID."),
|
|
94
101
|
statusCode: z
|
|
95
102
|
.number()
|
|
@@ -101,13 +108,16 @@ Workspace-configured api.defaultQueryParams (if set) are merged into every step
|
|
|
101
108
|
.describe("Response headers as a JSON object. Defaults to Content-Type: application/json."),
|
|
102
109
|
uniqueFields: z
|
|
103
110
|
.array(z.string().min(1, { message: "uniqueFields paths must be non-empty" }))
|
|
104
|
-
.min(1, {
|
|
111
|
+
.min(1, {
|
|
112
|
+
message: "uniqueFields, when provided, must list at least one field path",
|
|
113
|
+
})
|
|
105
114
|
.optional()
|
|
106
|
-
.describe(
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
})
|
|
115
|
+
.describe('For POST/PUT create steps: request-body field paths (gjson notation, e.g. "name", "slug", "nested.id") ' +
|
|
116
|
+
"that carry a UNIQUE constraint in the target's data model. The generated test injects a run-unique value " +
|
|
117
|
+
"for each so re-runs don't fail with HTTP 409 'already exists'. Identify these from the source schema " +
|
|
118
|
+
"(e.g. Django unique=True, SQL UNIQUE, Pydantic/DTO). Omit for GET/DELETE steps and non-unique fields."),
|
|
119
|
+
})
|
|
120
|
+
.superRefine((step, ctx) => {
|
|
111
121
|
const isBodyMethod = ["POST", "PUT", "PATCH"].includes(step.method);
|
|
112
122
|
// Parse once for every body-shape check below; malformed JSON is already
|
|
113
123
|
// rejected by the isJsonValue refine, so an unparseable body just skips them.
|
|
@@ -126,16 +136,16 @@ Workspace-configured api.defaultQueryParams (if set) are merged into every step
|
|
|
126
136
|
ctx.addIssue({
|
|
127
137
|
code: z.ZodIssueCode.custom,
|
|
128
138
|
path: ["uniqueFields"],
|
|
129
|
-
message: `uniqueFields is only valid on POST/PUT/PATCH steps (got ${step.method} ${step.path}). `
|
|
130
|
-
|
|
139
|
+
message: `uniqueFields is only valid on POST/PUT/PATCH steps (got ${step.method} ${step.path}). ` +
|
|
140
|
+
`Omit it for GET/DELETE steps.`,
|
|
131
141
|
});
|
|
132
142
|
}
|
|
133
143
|
else if (!step.requestBody) {
|
|
134
144
|
ctx.addIssue({
|
|
135
145
|
code: z.ZodIssueCode.custom,
|
|
136
146
|
path: ["uniqueFields"],
|
|
137
|
-
message: `uniqueFields is set for ${step.method} ${step.path} but there is no requestBody `
|
|
138
|
-
|
|
147
|
+
message: `uniqueFields is set for ${step.method} ${step.path} but there is no requestBody ` +
|
|
148
|
+
`containing those fields.`,
|
|
139
149
|
});
|
|
140
150
|
}
|
|
141
151
|
else if (parsedBody !== undefined) {
|
|
@@ -144,23 +154,26 @@ Workspace-configured api.defaultQueryParams (if set) are merged into every step
|
|
|
144
154
|
ctx.addIssue({
|
|
145
155
|
code: z.ZodIssueCode.custom,
|
|
146
156
|
path: ["uniqueFields"],
|
|
147
|
-
message: `uniqueFields path "${fieldPath}" does not resolve in the requestBody of `
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
157
|
+
message: `uniqueFields path "${fieldPath}" does not resolve in the requestBody of ` +
|
|
158
|
+
`${step.method} ${step.path}. The generator silently skips unresolvable paths, ` +
|
|
159
|
+
`disabling the run-unique protection — fix the path (gjson dot notation, e.g. ` +
|
|
160
|
+
`"name", "nested.id", "items.0.sku") to match an existing body field.`,
|
|
151
161
|
});
|
|
152
162
|
}
|
|
153
163
|
}
|
|
154
164
|
}
|
|
155
165
|
}
|
|
156
|
-
if (isBodyMethod &&
|
|
157
|
-
|
|
166
|
+
if (isBodyMethod &&
|
|
167
|
+
parsedBody !== null &&
|
|
168
|
+
typeof parsedBody === "object" &&
|
|
169
|
+
!Array.isArray(parsedBody) &&
|
|
170
|
+
Object.keys(parsedBody).length === 0) {
|
|
158
171
|
ctx.addIssue({
|
|
159
172
|
code: z.ZodIssueCode.custom,
|
|
160
173
|
path: ["requestBody"],
|
|
161
|
-
message: `requestBody for ${step.method} ${step.path} is an empty object {}. `
|
|
162
|
-
|
|
163
|
-
|
|
174
|
+
message: `requestBody for ${step.method} ${step.path} is an empty object {}. ` +
|
|
175
|
+
`Provide actual field values from the source code schema (Pydantic model, Zod type, DTO) — ` +
|
|
176
|
+
`do not send an empty body for ${step.method} requests.`,
|
|
164
177
|
});
|
|
165
178
|
}
|
|
166
179
|
});
|
|
@@ -195,17 +208,17 @@ const batchScenarioSchema = {
|
|
|
195
208
|
authScheme: z
|
|
196
209
|
.string()
|
|
197
210
|
.optional()
|
|
198
|
-
.describe("Only when authHeader is 'Authorization'. The prefix before the token "
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
211
|
+
.describe("Only when authHeader is 'Authorization'. The prefix before the token " +
|
|
212
|
+
"(e.g., 'Bearer' produces 'Authorization: Bearer <token>'). " +
|
|
213
|
+
"Common values: 'Bearer', 'Basic', 'Token'. " +
|
|
214
|
+
"Leave empty if the API uses raw tokens with no prefix. " +
|
|
215
|
+
"Ignored for non-Authorization headers like X-Api-Key or Cookie."),
|
|
203
216
|
authToken: z
|
|
204
217
|
.string()
|
|
205
218
|
.optional()
|
|
206
|
-
.describe("Optional explicit auth token value. Leave empty — the service auto-generates "
|
|
207
|
-
|
|
208
|
-
|
|
219
|
+
.describe("Optional explicit auth token value. Leave empty — the service auto-generates " +
|
|
220
|
+
`${AUTH_PLACEHOLDER_TOKEN} for all auth headers (Authorization, X-API-Key, Cookie, etc.). ` +
|
|
221
|
+
`Only provide this when you need a custom value (e.g., 'session=${AUTH_PLACEHOLDER_TOKEN}' for Cookie).`),
|
|
209
222
|
};
|
|
210
223
|
const TOOL_NAME = TOOL_BATCH_SCENARIO_TEST_GENERATION;
|
|
211
224
|
export function registerBatchScenarioTestTool(server) {
|
|
@@ -238,7 +251,10 @@ Call \`skyramp_integration_test_generation\` with the returned \`scenarioFile\`
|
|
|
238
251
|
testType: "integration",
|
|
239
252
|
});
|
|
240
253
|
if (guardMessage) {
|
|
241
|
-
return {
|
|
254
|
+
return {
|
|
255
|
+
content: [{ type: "text", text: guardMessage }],
|
|
256
|
+
isError: true,
|
|
257
|
+
};
|
|
242
258
|
}
|
|
243
259
|
if (params.authHeader === undefined) {
|
|
244
260
|
try {
|
|
@@ -315,7 +331,8 @@ Call \`skyramp_integration_test_generation\` with the returned \`scenarioFile\`
|
|
|
315
331
|
// limitation for now; the user can always pass apiSchema explicitly.
|
|
316
332
|
const rawSchemaPath = wsRaw?.services?.[0]?.api?.schemaPath;
|
|
317
333
|
if (rawSchemaPath && typeof rawSchemaPath === "string") {
|
|
318
|
-
const isUrl = rawSchemaPath.startsWith("http://") ||
|
|
334
|
+
const isUrl = rawSchemaPath.startsWith("http://") ||
|
|
335
|
+
rawSchemaPath.startsWith("https://");
|
|
319
336
|
// searchDir is the directory where workspace.yml was found — use it as
|
|
320
337
|
// the resolution base so relative paths like "../openapi.yml" resolve
|
|
321
338
|
// correctly regardless of outputDir depth.
|
|
@@ -323,7 +340,9 @@ Call \`skyramp_integration_test_generation\` with the returned \`scenarioFile\`
|
|
|
323
340
|
? rawSchemaPath
|
|
324
341
|
: path.resolve(searchDir, rawSchemaPath);
|
|
325
342
|
params = { ...params, apiSchema: schemaPath };
|
|
326
|
-
logger.info("Auto-populated apiSchema from workspace config", {
|
|
343
|
+
logger.info("Auto-populated apiSchema from workspace config", {
|
|
344
|
+
schemaPath,
|
|
345
|
+
});
|
|
327
346
|
}
|
|
328
347
|
}
|
|
329
348
|
}
|
|
@@ -343,11 +362,15 @@ Call \`skyramp_integration_test_generation\` with the returned \`scenarioFile\`
|
|
|
343
362
|
if (graphqlSteps.length > 0) {
|
|
344
363
|
return {
|
|
345
364
|
isError: true,
|
|
346
|
-
content: [
|
|
365
|
+
content: [
|
|
366
|
+
{
|
|
367
|
+
type: "text",
|
|
368
|
+
text: `GraphQL endpoints are not supported by Skyramp's test generation.\n` +
|
|
347
369
|
`Affected steps: ${graphqlSteps.map((s) => `${s.method} ${s.path}`).join(", ")}\n\n` +
|
|
348
370
|
`Skyramp supports REST API testing only. Remove GraphQL steps and use ` +
|
|
349
371
|
`the REST endpoints for the same resource instead.`,
|
|
350
|
-
}
|
|
372
|
+
},
|
|
373
|
+
],
|
|
351
374
|
};
|
|
352
375
|
}
|
|
353
376
|
}
|
|
@@ -358,10 +381,13 @@ Call \`skyramp_integration_test_generation\` with the returned \`scenarioFile\`
|
|
|
358
381
|
let specValidationWarning = "";
|
|
359
382
|
if (params.apiSchema) {
|
|
360
383
|
try {
|
|
361
|
-
const isUrl = params.apiSchema.startsWith("http://") ||
|
|
384
|
+
const isUrl = params.apiSchema.startsWith("http://") ||
|
|
385
|
+
params.apiSchema.startsWith("https://");
|
|
362
386
|
let specText;
|
|
363
387
|
if (isUrl) {
|
|
364
|
-
const specRes = await fetch(params.apiSchema, {
|
|
388
|
+
const specRes = await fetch(params.apiSchema, {
|
|
389
|
+
signal: AbortSignal.timeout(10_000),
|
|
390
|
+
});
|
|
365
391
|
if (!specRes.ok) {
|
|
366
392
|
throw new Error(`HTTP ${specRes.status} ${specRes.statusText} fetching spec at ${params.apiSchema}`);
|
|
367
393
|
}
|
|
@@ -374,7 +400,9 @@ Call \`skyramp_integration_test_generation\` with the returned \`scenarioFile\`
|
|
|
374
400
|
}
|
|
375
401
|
// js-yaml handles both JSON and YAML specs
|
|
376
402
|
const specLoaded = yaml.load(specText);
|
|
377
|
-
const specPaths = new Set(Object.keys((specLoaded && typeof specLoaded === "object"
|
|
403
|
+
const specPaths = new Set(Object.keys((specLoaded && typeof specLoaded === "object"
|
|
404
|
+
? specLoaded.paths
|
|
405
|
+
: null) ?? {}));
|
|
378
406
|
if (specPaths.size === 0) {
|
|
379
407
|
logger.warning("Spec loaded but contains no paths — skipping path check", {
|
|
380
408
|
apiSchema: params.apiSchema,
|
|
@@ -391,7 +419,9 @@ Call \`skyramp_integration_test_generation\` with the returned \`scenarioFile\`
|
|
|
391
419
|
specValidationWarning =
|
|
392
420
|
`\n\n⚠️ **Spec warning** — the following paths were not found in \`${params.apiSchema}\` ` +
|
|
393
421
|
`(spec may be stale or incomplete — verify paths against source before running tests):\n` +
|
|
394
|
-
unverifiedSteps
|
|
422
|
+
unverifiedSteps
|
|
423
|
+
.map((s) => ` ${s.method} ${s.path}`)
|
|
424
|
+
.join("\n") +
|
|
395
425
|
`\n\nKnown spec paths (first 20): ${[...specPaths].slice(0, 20).join(", ")}`;
|
|
396
426
|
logger.warning("Step paths not found in spec — proceeding (spec may lag code)", {
|
|
397
427
|
unverifiedPaths: unverifiedSteps.map((s) => s.path),
|
|
@@ -412,11 +442,17 @@ Call \`skyramp_integration_test_generation\` with the returned \`scenarioFile\`
|
|
|
412
442
|
const fileName = scenarioFileNameFor(params.scenarioName);
|
|
413
443
|
const filePath = path.join(params.outputDir, fileName);
|
|
414
444
|
const resolvedOut = path.resolve(params.outputDir);
|
|
415
|
-
if (!path.resolve(filePath).startsWith(resolvedOut + path.sep) &&
|
|
445
|
+
if (!path.resolve(filePath).startsWith(resolvedOut + path.sep) &&
|
|
446
|
+
path.resolve(filePath) !== resolvedOut) {
|
|
416
447
|
return {
|
|
417
|
-
content: [
|
|
418
|
-
|
|
419
|
-
|
|
448
|
+
content: [
|
|
449
|
+
{
|
|
450
|
+
type: "text",
|
|
451
|
+
text: `Validation Error: scenarioName '${params.scenarioName}' produced a file path outside outputDir.\n` +
|
|
452
|
+
`Expected: File path within '${params.outputDir}'.\n` +
|
|
453
|
+
`Fix: Use a simpler scenarioName without path separators or special characters.`,
|
|
454
|
+
},
|
|
455
|
+
],
|
|
420
456
|
isError: true,
|
|
421
457
|
};
|
|
422
458
|
}
|
|
@@ -449,11 +485,11 @@ Call \`skyramp_integration_test_generation\` with the returned \`scenarioFile\`
|
|
|
449
485
|
content: [
|
|
450
486
|
{
|
|
451
487
|
type: "text",
|
|
452
|
-
text: `**Batch Scenario Generation Failed at Step ${i + 1}/${steps.length}**\n\n`
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
488
|
+
text: `**Batch Scenario Generation Failed at Step ${i + 1}/${steps.length}**\n\n` +
|
|
489
|
+
`${i}/${steps.length} steps succeeded before failure.\n\n` +
|
|
490
|
+
`**Failed step:** ${step.method} ${step.path}\n` +
|
|
491
|
+
`**Error:** Could not generate a trace request from the provided parameters.\n\n` +
|
|
492
|
+
`Fix the failing step and retry with the full batch.`,
|
|
457
493
|
},
|
|
458
494
|
],
|
|
459
495
|
isError: true,
|
|
@@ -482,13 +518,13 @@ Call \`skyramp_integration_test_generation\` with the returned \`scenarioFile\`
|
|
|
482
518
|
responseBody: t.ResponseBody,
|
|
483
519
|
})));
|
|
484
520
|
if (chainLint.errors.length > 0) {
|
|
485
|
-
return toolError(`**Scenario chaining errors**\n\n`
|
|
486
|
-
|
|
487
|
-
|
|
521
|
+
return toolError(`**Scenario chaining errors**\n\n` +
|
|
522
|
+
chainLint.errors.map((e) => `- ${e}`).join("\n") +
|
|
523
|
+
`\n\nApply the remedy each error names and resubmit the full batch.`);
|
|
488
524
|
}
|
|
489
525
|
const chainLintWarning = chainLint.warnings.length > 0
|
|
490
|
-
? `\n\n⚠️ **Chaining warnings** — the generated test may hardcode these instead of chaining:\n`
|
|
491
|
-
|
|
526
|
+
? `\n\n⚠️ **Chaining warnings** — the generated test may hardcode these instead of chaining:\n` +
|
|
527
|
+
chainLint.warnings.map((w) => ` - ${w}`).join("\n")
|
|
492
528
|
: "";
|
|
493
529
|
try {
|
|
494
530
|
// The contract and integration generators create the test directory through
|
|
@@ -502,7 +538,12 @@ Call \`skyramp_integration_test_generation\` with the returned \`scenarioFile\`
|
|
|
502
538
|
catch (error) {
|
|
503
539
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
504
540
|
return {
|
|
505
|
-
content: [
|
|
541
|
+
content: [
|
|
542
|
+
{
|
|
543
|
+
type: "text",
|
|
544
|
+
text: `Error writing scenario file: ${errorMessage}`,
|
|
545
|
+
},
|
|
546
|
+
],
|
|
506
547
|
isError: true,
|
|
507
548
|
};
|
|
508
549
|
}
|
|
@@ -511,13 +552,13 @@ Call \`skyramp_integration_test_generation\` with the returned \`scenarioFile\`
|
|
|
511
552
|
content: [
|
|
512
553
|
{
|
|
513
554
|
type: "text",
|
|
514
|
-
text: `**Batch Scenario Generated — ${stepCount} steps**\n\n`
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
+
|
|
520
|
-
|
|
555
|
+
text: `**Batch Scenario Generated — ${stepCount} steps**\n\n` +
|
|
556
|
+
`**Scenario:** ${params.scenarioName}\n` +
|
|
557
|
+
`**Steps:**\n${steps.map((s, i) => ` ${i + 1}. ${s.method} ${s.path} → ${s.statusCode ?? "default"}`).join("\n")}\n\n` +
|
|
558
|
+
`**File:** ${filePath}\n\n` +
|
|
559
|
+
`**Next:** Call \`skyramp_integration_test_generation\` with \`scenarioFile: "${filePath}"\`` +
|
|
560
|
+
specValidationWarning +
|
|
561
|
+
chainLintWarning,
|
|
521
562
|
},
|
|
522
563
|
],
|
|
523
564
|
isError: false,
|
|
@@ -5,9 +5,10 @@ import { baseTestSchema, TestType } from "../../types/TestTypes.js";
|
|
|
5
5
|
import { TestGenerationService, } from "../../services/TestGenerationService.js";
|
|
6
6
|
import { AnalyticsService } from "../../services/AnalyticsService.js";
|
|
7
7
|
import { getPersonaPrefix } from "../../prompts/personas.js";
|
|
8
|
-
import { isContractConsumerModeEnabled, isTestbotEnabled } from "../../utils/featureFlags.js";
|
|
8
|
+
import { isContractConsumerModeEnabled, isTestbotEnabled, } from "../../utils/featureFlags.js";
|
|
9
9
|
import { guardScenarioApproved, pathFromEndpointURL } from "./planGuard.js";
|
|
10
10
|
import { toolError } from "../../utils/utils.js";
|
|
11
|
+
import { enhanceAssertionsStep } from "../../skills/enhanceAssertionsSkill.js";
|
|
11
12
|
// SKYRAMP_FEATURE_CONTRACT_CONSUMER_MODE gates BOTH:
|
|
12
13
|
// 1. Consumer-side contract test generation (`consumerMode` /
|
|
13
14
|
// `consumerOutput` schema fields, validation, post-gen instructions,
|
|
@@ -72,10 +73,13 @@ const baseContractTestSchema = {
|
|
|
72
73
|
return true;
|
|
73
74
|
const validExtensions = [".py", ".ts", ".js", ".java"];
|
|
74
75
|
return validExtensions.some((ext) => val.endsWith(ext));
|
|
75
|
-
}, {
|
|
76
|
+
}, {
|
|
77
|
+
message: "Output file must have one of these extensions: .py, .ts, .js, .java",
|
|
78
|
+
})
|
|
76
79
|
.describe("Output file for the generated provider contract test. " +
|
|
77
|
-
"For Playwright
|
|
78
|
-
"
|
|
80
|
+
"For Playwright, name the file the way the repository names its tests: read the " +
|
|
81
|
+
"test files already in outputDir and match their spelling. Use *.test.ts where " +
|
|
82
|
+
"they use it, *.spec.ts otherwise (e.g. contract_provider_orders.spec.ts). " +
|
|
79
83
|
"For other frameworks (pytest, junit), standard extensions are fine (.py, .java). " +
|
|
80
84
|
"Optional — when omitted, Skyramp generates a default name."),
|
|
81
85
|
parentRequestData: z
|
|
@@ -85,8 +89,8 @@ const baseContractTestSchema = {
|
|
|
85
89
|
"IMPORTANT: Each key MUST be the exact path parameter variable name as it appears inside the curly braces in the URL path — NOT an operation ID, endpoint name, or any other identifier. " +
|
|
86
90
|
"For example, for endpoint '/products/{product_id}/reviews', the key is 'product_id' (not 'create_product', not '/products', not any operation name). " +
|
|
87
91
|
"The value is the sample request body JSON string used to create that parent resource. " +
|
|
88
|
-
|
|
89
|
-
|
|
92
|
+
'For example: {"product_id": "{\\"name\\": \\"sample product\\", \\"price\\": 10}"}. ' +
|
|
93
|
+
'For nested parents like \'/a/{a_id}/b/{b_id}/c\', provide an entry for each: {"a_id": "{...}", "b_id": "{...}"}. ' +
|
|
90
94
|
"Path parameters without an entry here should be supplied via pathParams instead. " +
|
|
91
95
|
PARENT_FIELD_NOT_ALLOWED_NOTE),
|
|
92
96
|
parentStatusCode: z
|
|
@@ -96,7 +100,7 @@ const baseContractTestSchema = {
|
|
|
96
100
|
"IMPORTANT: Each key MUST be the exact path parameter variable name as it appears inside the curly braces in the URL path — the same keys used in parentRequestData. " +
|
|
97
101
|
"For example, for endpoint '/products/{product_id}/reviews', the key is 'product_id' (not an operation name or endpoint path). " +
|
|
98
102
|
"The value is the expected HTTP status code string for the provisioning call that creates that parent resource. " +
|
|
99
|
-
|
|
103
|
+
'For example: {"product_id": "201"}. ' +
|
|
100
104
|
PARENT_FIELD_NOT_ALLOWED_NOTE),
|
|
101
105
|
parentFormParams: z
|
|
102
106
|
.record(z.string(), z.string())
|
|
@@ -123,10 +127,13 @@ const consumerModeSchemaFields = {
|
|
|
123
127
|
return true;
|
|
124
128
|
const validExtensions = [".py", ".ts", ".js", ".java"];
|
|
125
129
|
return validExtensions.some((ext) => val.endsWith(ext));
|
|
126
|
-
}, {
|
|
130
|
+
}, {
|
|
131
|
+
message: "Output file must have one of these extensions: .py, .ts, .js, .java",
|
|
132
|
+
})
|
|
127
133
|
.describe("Output file for the generated consumer contract test. " +
|
|
128
|
-
"For Playwright
|
|
129
|
-
"
|
|
134
|
+
"For Playwright, name the file the way the repository names its tests: read the " +
|
|
135
|
+
"test files already in outputDir and match their spelling. Use *.test.ts where " +
|
|
136
|
+
"they use it, *.spec.ts otherwise (e.g. contract_consumer_orders.spec.ts). " +
|
|
130
137
|
"For other frameworks (pytest, junit), standard extensions are fine (.py, .java). " +
|
|
131
138
|
"Optional — when omitted, Skyramp generates a default name."),
|
|
132
139
|
};
|
|
@@ -244,7 +251,7 @@ ${this.buildPlaceholderReplacementBlock(params)}
|
|
|
244
251
|
const nextStepNote = enhanceAssertions ? "continue to Step 2" : undefined;
|
|
245
252
|
steps.push(`### Step ${steps.length + 1} — Replace placeholder values [REQUIRED]\n\n${this.buildPlaceholderReplacementBlock(params, nextStepNote)}`);
|
|
246
253
|
if (enhanceAssertions) {
|
|
247
|
-
steps.push(`### Step ${steps.length + 1} — Enhance response body assertions [REQUIRED]\
|
|
254
|
+
steps.push(`### Step ${steps.length + 1} — Enhance response body assertions [REQUIRED]\n${enhanceAssertionsStep("contract", "generated provider contract test file")}`);
|
|
248
255
|
}
|
|
249
256
|
const heading = enhanceAssertions
|
|
250
257
|
? "Replace placeholder data and enhance assertions"
|
|
@@ -283,7 +290,9 @@ The generated consumer contract test contains a stub test function that uses Sky
|
|
|
283
290
|
if (errList.isError)
|
|
284
291
|
return errList;
|
|
285
292
|
const errors = [];
|
|
286
|
-
if ((params.parentRequestData ||
|
|
293
|
+
if ((params.parentRequestData ||
|
|
294
|
+
params.parentStatusCode ||
|
|
295
|
+
params.parentFormParams) &&
|
|
287
296
|
!params.apiSchema) {
|
|
288
297
|
errors.push("parentRequestData, parentStatusCode, and parentFormParams are only allowed when apiSchema is provided.");
|
|
289
298
|
}
|
|
@@ -294,7 +303,10 @@ The generated consumer contract test contains a stub test function that uses Sky
|
|
|
294
303
|
if (params.consumerOutput && !params.consumerMode) {
|
|
295
304
|
errors.push("consumerOutput is only valid when consumerMode is enabled.");
|
|
296
305
|
}
|
|
297
|
-
if (params.consumerMode &&
|
|
306
|
+
if (params.consumerMode &&
|
|
307
|
+
(params.parentRequestData ||
|
|
308
|
+
params.parentStatusCode ||
|
|
309
|
+
params.parentFormParams)) {
|
|
298
310
|
errors.push("parentRequestData, parentStatusCode, and parentFormParams are not allowed when consumerMode is enabled.");
|
|
299
311
|
}
|
|
300
312
|
}
|
|
@@ -314,8 +326,12 @@ The generated consumer contract test contains a stub test function that uses Sky
|
|
|
314
326
|
const suggested = /\.[tj]s$/.test(parsed.ext)
|
|
315
327
|
? value.replace(/\.[tj]s$/, ".spec.ts")
|
|
316
328
|
: value + ".spec.ts";
|
|
317
|
-
|
|
318
|
-
|
|
329
|
+
// Both spellings are named: a repository that declares
|
|
330
|
+
// `testMatch: ["**/*.test.ts"]` collects no *.spec.ts (SKYR-4489).
|
|
331
|
+
const alternative = suggested.replace(/\.spec\.ts$/, ".test.ts");
|
|
332
|
+
errors.push(`Error: Playwright requires test files to match *.{spec,test}.{ts,js} (got "${value}" for ${field}). ` +
|
|
333
|
+
`Rename to ${suggested}, or to ${alternative} if the tests already in ` +
|
|
334
|
+
`${params.outputDir} use that spelling.`);
|
|
319
335
|
}
|
|
320
336
|
}
|
|
321
337
|
}
|
|
@@ -324,7 +340,9 @@ The generated consumer contract test contains a stub test function that uses Sky
|
|
|
324
340
|
if (!params.providerMode) {
|
|
325
341
|
errors.push("skipProvisionParents requires providerMode to be enabled.");
|
|
326
342
|
}
|
|
327
|
-
if (params.parentRequestData ||
|
|
343
|
+
if (params.parentRequestData ||
|
|
344
|
+
params.parentStatusCode ||
|
|
345
|
+
params.parentFormParams) {
|
|
328
346
|
errors.push("parentRequestData, parentStatusCode, and parentFormParams are not allowed when skipProvisionParents is enabled.");
|
|
329
347
|
}
|
|
330
348
|
}
|
|
@@ -7,6 +7,7 @@ export declare class E2ETestService extends TestGenerationService {
|
|
|
7
7
|
protected buildGenerationOptions(params: BaseTestParams & {
|
|
8
8
|
responseData?: string;
|
|
9
9
|
playwrightInput?: string;
|
|
10
|
+
testName?: string;
|
|
10
11
|
}): any;
|
|
11
12
|
protected handleApiAnalysis(_params: BaseTestParams): Promise<CallToolResult | null>;
|
|
12
13
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { baseSchema, baseTraceSchema, TestType, codeRefactoringSchema, } from "../../types/TestTypes.js";
|
|
2
|
+
import { baseSchema, baseTraceSchema, TestType, codeRefactoringSchema, testNameField, } from "../../types/TestTypes.js";
|
|
3
3
|
import { TestGenerationService, } from "../../services/TestGenerationService.js";
|
|
4
4
|
import { AnalyticsService } from "../../services/AnalyticsService.js";
|
|
5
5
|
import { toolError } from "../../utils/utils.js";
|
|
@@ -16,6 +16,7 @@ const e2eTestSchema = {
|
|
|
16
16
|
"from a Playwright zip that already produced one is rejected — one recording covers one scenario, and reusing " +
|
|
17
17
|
"it manufactures identical tests under names the recording never covered. Set true only when the same " +
|
|
18
18
|
"recording genuinely covers the new scenario end-to-end."),
|
|
19
|
+
testName: testNameField("testE2e"),
|
|
19
20
|
...codeRefactoringSchema.shape,
|
|
20
21
|
...baseSchema.shape,
|
|
21
22
|
};
|
|
@@ -28,6 +29,11 @@ export class E2ETestService extends TestGenerationService {
|
|
|
28
29
|
...super.buildBaseGenerationOptions(params),
|
|
29
30
|
responseData: params.responseData,
|
|
30
31
|
playwrightInput: params.playwrightInput,
|
|
32
|
+
// SKYR-4468: free-form title for the generated test, so the spec names the
|
|
33
|
+
// behaviour it verifies instead of the generic `testE2e`. The option is
|
|
34
|
+
// inert until the pinned @skyramp/skyramp release carries it — the client
|
|
35
|
+
// ignores options it does not know, so passing it early is safe.
|
|
36
|
+
testName: params.testName,
|
|
31
37
|
};
|
|
32
38
|
}
|
|
33
39
|
async handleApiAnalysis(_params) {
|
|
@@ -44,6 +50,8 @@ End-to-End tests validate complete user journeys by testing the entire applicati
|
|
|
44
50
|
TRACE & UI INTEGRATION:
|
|
45
51
|
E2E tests require both trace files (capturing backend API interactions) and Playwright recordings (capturing UI interactions captured using start_trace_collection tool) to generate comprehensive tests that validate the complete user experience.
|
|
46
52
|
|
|
53
|
+
**Test title:** Pass \`testName\` with the behaviour this recording verifies (e.g. "Add to cart from search results"), taken from the recommendation the recording came from. Omit it and the spec is titled \`testE2e\`, which claims nothing.
|
|
54
|
+
|
|
47
55
|
**CRITICAL - When using trace parameter:**
|
|
48
56
|
If \`trace\` parameter is provided (path to a trace file), DO NOT pass \`apiSchema\` or \`endpointURL\` parameters. The trace file already contains all necessary endpoint and schema information. Passing both will cause test generation to fail.`,
|
|
49
57
|
inputSchema: e2eTestSchema,
|