@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
|
@@ -9,6 +9,7 @@ import { isTestbotEnabled } from "../../utils/featureFlags.js";
|
|
|
9
9
|
import { guardScenarioApproved, pathFromEndpointURL } from "./planGuard.js";
|
|
10
10
|
import { readScenarioNameFromFile } from "./scenarioFileIdentity.js";
|
|
11
11
|
import { toolError } from "../../utils/utils.js";
|
|
12
|
+
import { enhanceAssertionsStep } from "../../skills/enhanceAssertionsSkill.js";
|
|
12
13
|
const ADD_ASSERTIONS_DEFAULT = isTestbotEnabled();
|
|
13
14
|
const integrationTestSchema = z
|
|
14
15
|
.object({
|
|
@@ -26,7 +27,9 @@ const integrationTestSchema = z
|
|
|
26
27
|
exclude: baseTraceSchema.shape.exclude.optional(),
|
|
27
28
|
scenarioFile: z
|
|
28
29
|
.string()
|
|
29
|
-
.endsWith(".json", {
|
|
30
|
+
.endsWith(".json", {
|
|
31
|
+
message: "scenarioFile must be a path to a .json file.",
|
|
32
|
+
})
|
|
30
33
|
.optional()
|
|
31
34
|
.describe("Absolute path to the scenario JSON file produced by skyramp_batch_scenario_test_generation. " +
|
|
32
35
|
"When provided, DO NOT also pass apiSchema or endpointURL — the scenario file already contains all endpoint information."),
|
|
@@ -63,9 +66,12 @@ export class IntegrationTestService extends TestGenerationService {
|
|
|
63
66
|
return { ...result, content };
|
|
64
67
|
}
|
|
65
68
|
buildAssertionEnhancementInstructions() {
|
|
69
|
+
// Routed through the shared helper, never hardcoded: MCP tool output wins
|
|
70
|
+
// over the prompt on conflict, so a literal tool name here overrides the
|
|
71
|
+
// prompt's skill routing and the skill is never reached (SKYR-4310).
|
|
66
72
|
return `
|
|
67
73
|
### CRITICAL NEXT STEP — Enhance response body assertions after each request
|
|
68
|
-
|
|
74
|
+
${enhanceAssertionsStep("integration", "generated test file")}
|
|
69
75
|
`;
|
|
70
76
|
}
|
|
71
77
|
buildGenerationOptions(params) {
|
|
@@ -113,16 +119,22 @@ Generate an integration test from a scenario file or a live endpoint trace.
|
|
|
113
119
|
}, async (params) => {
|
|
114
120
|
if (params.scenarioFile && (params.apiSchema || params.endpointURL)) {
|
|
115
121
|
return {
|
|
116
|
-
content: [
|
|
122
|
+
content: [
|
|
123
|
+
{
|
|
117
124
|
type: "text",
|
|
118
125
|
text: "**skyramp_integration_test_generation Error: Conflicting parameters**\n\n" +
|
|
119
126
|
"`scenarioFile` is mutually exclusive with `apiSchema` and `endpointURL`.\n\n" +
|
|
120
|
-
"**Received:** scenarioFile=" +
|
|
127
|
+
"**Received:** scenarioFile=" +
|
|
128
|
+
params.scenarioFile +
|
|
121
129
|
(params.apiSchema ? ", apiSchema=" + params.apiSchema : "") +
|
|
122
|
-
(params.endpointURL
|
|
130
|
+
(params.endpointURL
|
|
131
|
+
? ", endpointURL=" + params.endpointURL
|
|
132
|
+
: "") +
|
|
133
|
+
"\n\n" +
|
|
123
134
|
"**How to fix:** Remove `apiSchema` and `endpointURL` when passing `scenarioFile` — " +
|
|
124
135
|
"the scenario file already contains all endpoint and schema information.",
|
|
125
|
-
}
|
|
136
|
+
},
|
|
137
|
+
],
|
|
126
138
|
isError: true,
|
|
127
139
|
};
|
|
128
140
|
}
|
|
@@ -134,7 +146,10 @@ Generate an integration test from a scenario file or a live endpoint trace.
|
|
|
134
146
|
// match, so an active plan rejects it; standalone usage (no active
|
|
135
147
|
// run / no plan) is still allowed by guardScenarioApproved itself.
|
|
136
148
|
const scenarioName = readScenarioNameFromFile(params.scenarioFile);
|
|
137
|
-
guardMessage = await guardScenarioApproved({
|
|
149
|
+
guardMessage = await guardScenarioApproved({
|
|
150
|
+
scenarioName,
|
|
151
|
+
testType: "integration",
|
|
152
|
+
});
|
|
138
153
|
}
|
|
139
154
|
else {
|
|
140
155
|
guardMessage = await guardScenarioApproved({
|
|
@@ -480,7 +480,9 @@ This file must:
|
|
|
480
480
|
...responseDataOption,
|
|
481
481
|
url: params.endpointURL,
|
|
482
482
|
topic: params.kafkaTopic,
|
|
483
|
-
requestData: params.requestData?.trim()
|
|
483
|
+
requestData: params.requestData?.trim()
|
|
484
|
+
? params.requestData
|
|
485
|
+
: undefined,
|
|
484
486
|
};
|
|
485
487
|
}
|
|
486
488
|
return {
|
|
@@ -8,6 +8,7 @@ export declare class UITestService extends TestGenerationService {
|
|
|
8
8
|
protected buildGenerationOptions(params: BaseTestParams & {
|
|
9
9
|
playwrightInput?: string;
|
|
10
10
|
uniqueUIFormInputs?: string[];
|
|
11
|
+
testName?: string;
|
|
11
12
|
}): any;
|
|
12
13
|
protected handleApiAnalysis(_params: BaseTestParams): Promise<CallToolResult | null>;
|
|
13
14
|
generateTest(params: BaseTestParams & Record<string, any>): Promise<CallToolResult>;
|
|
@@ -19,6 +20,7 @@ export declare const uiTestSchema: {
|
|
|
19
20
|
include: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString, "many">>>;
|
|
20
21
|
exclude: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString, "many">>>;
|
|
21
22
|
uniqueUIFormInputs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
23
|
+
testName: z.ZodOptional<z.ZodString>;
|
|
22
24
|
output: z.ZodEffects<z.ZodOptional<z.ZodString>, string | undefined, string | undefined>;
|
|
23
25
|
outputDir: z.ZodString;
|
|
24
26
|
force: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { baseSchema, languageSchema, TestType, codeRefactoringSchema, baseTraceSchema, } from "../../types/TestTypes.js";
|
|
1
|
+
import { baseSchema, languageSchema, TestType, codeRefactoringSchema, baseTraceSchema, testNameField, } from "../../types/TestTypes.js";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { AnalyticsService } from "../../services/AnalyticsService.js";
|
|
4
4
|
import { TestGenerationService, } from "../../services/TestGenerationService.js";
|
|
@@ -7,6 +7,7 @@ import { getPersonaPrefix } from "../../prompts/personas.js";
|
|
|
7
7
|
import { isTestbotEnabled } from "../../utils/featureFlags.js";
|
|
8
8
|
import { toolError } from "../../utils/utils.js";
|
|
9
9
|
import { checkTraceReuse, recordTraceOutput } from "./trace-reuse-guard.js";
|
|
10
|
+
import { enhanceAssertionsStep } from "../../skills/enhanceAssertionsSkill.js";
|
|
10
11
|
const TOOL_NAME = "skyramp_ui_test_generation";
|
|
11
12
|
export class UITestService extends TestGenerationService {
|
|
12
13
|
getTestType() {
|
|
@@ -20,6 +21,11 @@ export class UITestService extends TestGenerationService {
|
|
|
20
21
|
// SKYR-4012: create-form inputs the agent flagged as unique-constrained,
|
|
21
22
|
// so Skyramp codegen types a per-run-unique value into them.
|
|
22
23
|
uniqueUIFormInputs: params.uniqueUIFormInputs,
|
|
24
|
+
// SKYR-4468: free-form title for the generated test, so the spec names the
|
|
25
|
+
// behaviour it verifies instead of the generic `testUi`. The option is
|
|
26
|
+
// inert until the pinned @skyramp/skyramp release carries it — the client
|
|
27
|
+
// ignores options it does not know, so passing it early is safe.
|
|
28
|
+
testName: params.testName,
|
|
23
29
|
};
|
|
24
30
|
}
|
|
25
31
|
async handleApiAnalysis(_params) {
|
|
@@ -51,7 +57,7 @@ export class UITestService extends TestGenerationService {
|
|
|
51
57
|
buildUIPostGenInstructions(enhanceAssertions, modularize) {
|
|
52
58
|
const steps = [];
|
|
53
59
|
if (enhanceAssertions) {
|
|
54
|
-
steps.push(`### Step ${steps.length + 1} — Enhance UI assertions [REQUIRED]\
|
|
60
|
+
steps.push(`### Step ${steps.length + 1} — Enhance UI assertions [REQUIRED]\n${enhanceAssertionsStep("ui", "generated test file")}`);
|
|
55
61
|
}
|
|
56
62
|
if (modularize) {
|
|
57
63
|
steps.push(`### Step ${steps.length + 1} — Modularize [REQUIRED]\nCall \`skyramp_modularization\` with \`testFile\` set to the absolute path of the generated test file, \`language\`, \`testType: "ui"\`, and \`isTraceBased: true\`.`);
|
|
@@ -85,6 +91,7 @@ export const uiTestSchema = {
|
|
|
85
91
|
.array(z.string().min(1))
|
|
86
92
|
.optional()
|
|
87
93
|
.describe("Create-form inputs whose value is UNIQUE-constrained (e.g. a name/slug that the backend rejects as a duplicate). Identify each by the accessible label or selector you typed into during recording (the same value passed to getByLabel/getByPlaceholder/getByRole, or a raw selector). Skyramp types a per-run-unique value into these inputs — and reuses it in later assertions — so the generated UI test can be re-run without hitting a duplicate/conflict error. Inspect the app's data model for unique constraints; omit when no create-form field is unique-constrained."),
|
|
94
|
+
testName: testNameField("testUi"),
|
|
88
95
|
output: baseSchema.shape.output,
|
|
89
96
|
outputDir: baseSchema.shape.outputDir,
|
|
90
97
|
force: baseSchema.shape.force,
|
|
@@ -122,6 +129,8 @@ This tells you exactly which frontend files changed so you record traces for the
|
|
|
122
129
|
|
|
123
130
|
**Idempotency (re-runnable create flows):** If the recorded flow creates a resource by typing into a UNIQUE-constrained field (a name/slug the backend rejects as a duplicate on a second run), pass those inputs in \`uniqueUIFormInputs\`. Skyramp then types a per-run-unique value into them (and reuses it in later assertions) so the generated test can be re-run without a duplicate/conflict failure.
|
|
124
131
|
|
|
132
|
+
**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 \`testUi\`, which claims nothing.
|
|
133
|
+
|
|
125
134
|
**DOM Analyzer tools for blueprint-aware recording:** alongside the basic \`browser_*\` interaction tools, the Skyramp MCP exposes \`browser_blueprint\` (canonical PageBlueprint capture). This enables semantic target selection and delta-derived assertions: capture a blueprint before each meaningful action, perform the action, then capture again — the delta between the two grounds your assertions in observable state changes rather than author guesses about what "success" looks like.
|
|
126
135
|
|
|
127
136
|
**CRITICAL: Do NOT use skyramp_start_trace_collection/skyramp_stop_trace_collection for UI test recording — use browser_* tools + skyramp_export_zip instead.**`,
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { baseTestSchema, baseTraceSchema } from "../../types/TestTypes.js";
|
|
3
|
-
export const numericString = (description) => z
|
|
4
|
-
.string()
|
|
5
|
-
.refine((val) => !val || /^\d+$/.test(val), {
|
|
3
|
+
export const numericString = (description) => z.string().refine((val) => !val || /^\d+$/.test(val), {
|
|
6
4
|
message: `${description} must be a non-negative integer`,
|
|
7
5
|
});
|
|
8
6
|
export const loadTestSchema = {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Conditional on an ACTIVE run whose agent has registered a plan: standalone use
|
|
5
5
|
* and runs with no plan are unaffected. The report gate refuses a missing plan.
|
|
6
6
|
*/
|
|
7
|
-
import { resolveRunStatePath, StateManager } from "../../utils/AnalysisStateManager.js";
|
|
7
|
+
import { resolveRunStatePath, StateManager, } from "../../utils/AnalysisStateManager.js";
|
|
8
8
|
import { matchesPlanCandidates, nameMatchedEndpointMismatches, nameMatchedTypeMismatches, } from "../../utils/planMatchKeys.js";
|
|
9
9
|
import { TOOL_REGISTER_TEST_PLAN } from "../../toolNames.js";
|
|
10
10
|
/** Re-exported for the generation tools that already import it from here.
|
|
@@ -23,7 +23,8 @@ export async function guardScenarioApproved(query) {
|
|
|
23
23
|
return null;
|
|
24
24
|
let stateData;
|
|
25
25
|
try {
|
|
26
|
-
stateData =
|
|
26
|
+
stateData =
|
|
27
|
+
await StateManager.fromStatePath(statePath).readData();
|
|
27
28
|
}
|
|
28
29
|
catch {
|
|
29
30
|
// Unreadable/corrupt state must never block generation on an infra hiccup.
|
|
@@ -52,7 +53,9 @@ export async function guardScenarioApproved(query) {
|
|
|
52
53
|
// agent invented, and the message must not say otherwise.
|
|
53
54
|
const plannedSteps = nearMisses
|
|
54
55
|
.flatMap((item) => {
|
|
55
|
-
const steps = Array.isArray(item?.scenario?.steps)
|
|
56
|
+
const steps = Array.isArray(item?.scenario?.steps)
|
|
57
|
+
? item.scenario.steps
|
|
58
|
+
: [];
|
|
56
59
|
return steps
|
|
57
60
|
.filter((step) => step?.method || step?.path)
|
|
58
61
|
.map((step) => ` - [${item?.scenario?.testType ?? "?"}] ${item?.scenario?.scenarioName ?? "(unnamed)"} ` +
|
|
@@ -16,7 +16,10 @@ import * as path from "path";
|
|
|
16
16
|
import { logger } from "../../utils/logger.js";
|
|
17
17
|
/** File name the batch tool writes for a scenario: `scenario_<slug>.json`. */
|
|
18
18
|
export function scenarioFileNameFor(scenarioName) {
|
|
19
|
-
const slug = scenarioName
|
|
19
|
+
const slug = scenarioName
|
|
20
|
+
.toLowerCase()
|
|
21
|
+
.replace(/[^a-z0-9_-]+/g, "-")
|
|
22
|
+
.replace(/^-+|-+$/g, "") || "scenario";
|
|
20
23
|
return `scenario_${slug}.json`;
|
|
21
24
|
}
|
|
22
25
|
/**
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
import { singularize } from "../../utils/pluralization.js";
|
|
22
22
|
const UUID_RE = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
|
|
23
23
|
function isIdLikeKey(key) {
|
|
24
|
-
return /^(id|pk|uuid)$/i.test(key) || /_id$/i.test(key) || /[a-z]Id$/.test(key);
|
|
24
|
+
return (/^(id|pk|uuid)$/i.test(key) || /_id$/i.test(key) || /[a-z]Id$/.test(key));
|
|
25
25
|
}
|
|
26
26
|
function isIdishSegment(seg) {
|
|
27
27
|
return /^\d+$/.test(seg) || UUID_RE.test(seg);
|
|
@@ -142,7 +142,13 @@ export function lintScenarioChaining(steps) {
|
|
|
142
142
|
existing.keys.push(key);
|
|
143
143
|
}
|
|
144
144
|
else {
|
|
145
|
-
list.push({
|
|
145
|
+
list.push({
|
|
146
|
+
step: idx,
|
|
147
|
+
segment,
|
|
148
|
+
keys: [key],
|
|
149
|
+
creates,
|
|
150
|
+
collectionCreate,
|
|
151
|
+
});
|
|
146
152
|
}
|
|
147
153
|
producers.set(value, list);
|
|
148
154
|
});
|
|
@@ -160,7 +166,10 @@ export function lintScenarioChaining(steps) {
|
|
|
160
166
|
segs.forEach((seg, i) => {
|
|
161
167
|
if (!isIdishSegment(seg) || refs.has(seg))
|
|
162
168
|
return;
|
|
163
|
-
refs.set(seg, {
|
|
169
|
+
refs.set(seg, {
|
|
170
|
+
desc: "path segment",
|
|
171
|
+
resource: owningSegment(segs, i),
|
|
172
|
+
});
|
|
164
173
|
});
|
|
165
174
|
}
|
|
166
175
|
// Body values: only id-like keys, or keys resource-affine to a producer.
|
|
@@ -170,7 +179,8 @@ export function lintScenarioChaining(steps) {
|
|
|
170
179
|
if (refs.has(value))
|
|
171
180
|
return;
|
|
172
181
|
const producerList = producers.get(value) ?? [];
|
|
173
|
-
const relevant = isIdLikeKey(key) ||
|
|
182
|
+
const relevant = isIdLikeKey(key) ||
|
|
183
|
+
producerList.some((p) => keyResourceAffinity(key, p.segment));
|
|
174
184
|
if (!relevant)
|
|
175
185
|
return;
|
|
176
186
|
refs.set(value, { desc: `body field "${key}"`, resource: key, key });
|
|
@@ -207,7 +217,9 @@ export function lintScenarioChaining(steps) {
|
|
|
207
217
|
// by `collectionCreate`, so the measured `/orders/{id}/confirm` echo is
|
|
208
218
|
// untouched.
|
|
209
219
|
const creator = later.find((p) => p.creates && keyResourceAffinity(ref.resource, p.segment)) ??
|
|
210
|
-
later.find((p) => p.collectionCreate &&
|
|
220
|
+
later.find((p) => p.collectionCreate &&
|
|
221
|
+
ref.key !== undefined &&
|
|
222
|
+
p.keys.includes(ref.key));
|
|
211
223
|
const echoesReferencingField = ref.key !== undefined &&
|
|
212
224
|
creator === undefined &&
|
|
213
225
|
later.every((p) => p.keys.every((k) => k === ref.key));
|
|
@@ -70,8 +70,11 @@ export async function checkTraceReuse(playwrightInput, output, outputDir, allowT
|
|
|
70
70
|
}
|
|
71
71
|
const identity = outputIdentity(output, outputDir);
|
|
72
72
|
const outputs = generatedFromTrace.get(key);
|
|
73
|
-
if (!allowTraceReuse &&
|
|
74
|
-
|
|
73
|
+
if (!allowTraceReuse &&
|
|
74
|
+
outputs &&
|
|
75
|
+
outputs.size > 0 &&
|
|
76
|
+
!outputs.has(identity)) {
|
|
77
|
+
const prior = [...outputs].map((p) => path.basename(p)).join(", ");
|
|
75
78
|
return {
|
|
76
79
|
key,
|
|
77
80
|
identity,
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { SkyrampClient } from "@skyramp/skyramp";
|
|
3
3
|
import { logger } from "../utils/logger.js";
|
|
4
|
-
import { RuntimeEnvironment, runtimeEnvironmentInputSchema } from "../types/TestTypes.js";
|
|
5
|
-
import { injectMockImports, isSupportedMockEnrichmentLanguage } from "./enrichTestWithMocksTool.js";
|
|
4
|
+
import { RuntimeEnvironment, TestType, runtimeEnvironmentInputSchema, } from "../types/TestTypes.js";
|
|
5
|
+
import { injectMockImports, isSupportedMockEnrichmentLanguage, } from "./enrichTestWithMocksTool.js";
|
|
6
6
|
import { isAuthorizationHeaderName } from "../utils/workspaceAuth.js";
|
|
7
7
|
import { WORKER_CONTROL_PORT } from "../utils/versions.js";
|
|
8
|
+
import { persistGeneratedTest } from "../utils/generatedTestRecord.js";
|
|
8
9
|
import * as fs from "fs";
|
|
9
10
|
import * as path from "path";
|
|
10
11
|
import { isInsideExecutorWorkDir, executorWorkDirRefusal, generationTargets, } from "../utils/executorWorkDir.js";
|
|
@@ -130,7 +131,8 @@ export async function executeGenerateEnrichedIntegrationTest(params) {
|
|
|
130
131
|
// if authScheme is set and authHeader is Authorization, use authType only.
|
|
131
132
|
let resolvedAuthHeader = authHeader;
|
|
132
133
|
const resolvedAuthType = authScheme;
|
|
133
|
-
if (resolvedAuthType !== undefined &&
|
|
134
|
+
if (resolvedAuthType !== undefined &&
|
|
135
|
+
isAuthorizationHeaderName(resolvedAuthHeader || "")) {
|
|
134
136
|
resolvedAuthHeader = undefined;
|
|
135
137
|
}
|
|
136
138
|
// This tool calls the client directly instead of going through
|
|
@@ -189,6 +191,10 @@ export async function executeGenerateEnrichedIntegrationTest(params) {
|
|
|
189
191
|
const enrichedContent = injectMockImports(testContent, testFilePath, scenarioName, mockFiles, traceComments, resolvedLanguage);
|
|
190
192
|
// Step 5: Write the enriched content back
|
|
191
193
|
fs.writeFileSync(testFilePath, enrichedContent);
|
|
194
|
+
// This tool calls the client directly rather than going through
|
|
195
|
+
// TestGenerationService, so it has to record the file it wrote itself —
|
|
196
|
+
// otherwise nothing notices when the test it just created is never run.
|
|
197
|
+
await persistGeneratedTest(testFilePath, TestType.INTEGRATION);
|
|
192
198
|
logger.info(`Generated and enriched integration test: ${testFilePath}`, {
|
|
193
199
|
scenarioName,
|
|
194
200
|
mockFileCount: mockFiles.length,
|
|
@@ -350,7 +350,9 @@ export function registerOneClickTool(server) {
|
|
|
350
350
|
finally {
|
|
351
351
|
void Promise.resolve(AnalyticsService.pushMCPToolEvent(TOOL_NAME, errorResult, {
|
|
352
352
|
workflow: params.workflow,
|
|
353
|
-
})).catch((err) => {
|
|
353
|
+
})).catch((err) => {
|
|
354
|
+
logger.warning("Analytics event failed", { error: String(err) });
|
|
355
|
+
});
|
|
354
356
|
}
|
|
355
357
|
});
|
|
356
358
|
}
|
|
@@ -1,22 +1,38 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { validateMockCompatibility, MockProtocol, } from "../utils/mockCompatibility.js";
|
|
3
3
|
const warningSchema = z.object({
|
|
4
|
-
code: z
|
|
4
|
+
code: z
|
|
5
|
+
.string()
|
|
6
|
+
.describe("Warning code identifier (e.g. REST_LOOPBACK_URL, GRPC_PERSISTENT_CONN)."),
|
|
5
7
|
message: z.string().describe("Human-readable description of the issue."),
|
|
6
|
-
suggestion: z
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
suggestion: z
|
|
9
|
+
.string()
|
|
10
|
+
.describe("Recommended action to resolve or work around the issue."),
|
|
11
|
+
affectedMocks: z
|
|
12
|
+
.array(z.string())
|
|
13
|
+
.describe("Mock identifiers (service name or endpoint URL) affected by this warning."),
|
|
14
|
+
blocking: z
|
|
15
|
+
.boolean()
|
|
16
|
+
.optional()
|
|
17
|
+
.describe("When true, the affected mocks cannot intercept traffic and must not be generated or deployed."),
|
|
9
18
|
});
|
|
10
19
|
const preflightOutputSchema = {
|
|
11
|
-
hasBlockers: z
|
|
12
|
-
|
|
20
|
+
hasBlockers: z
|
|
21
|
+
.boolean()
|
|
22
|
+
.describe("True when at least one warning is blocking. Blocking mocks must be removed from the generation list before proceeding."),
|
|
23
|
+
warnings: z
|
|
24
|
+
.array(warningSchema)
|
|
25
|
+
.describe("All compatibility warnings. Inspect the blocking field on each entry; blocking ones must be skipped, advisory ones may proceed with caution."),
|
|
13
26
|
};
|
|
14
27
|
const TOOL_NAME = "skyramp_preflight_mock_check";
|
|
15
28
|
const mockSpecSchema = z.object({
|
|
16
29
|
protocol: z.nativeEnum(MockProtocol).describe("The protocol of the mock"),
|
|
17
30
|
endpointURL: z.string().describe("The endpoint URL for the mock"),
|
|
18
31
|
method: z.string().optional().describe("HTTP method (for REST mocks)"),
|
|
19
|
-
grpcServiceName: z
|
|
32
|
+
grpcServiceName: z
|
|
33
|
+
.string()
|
|
34
|
+
.optional()
|
|
35
|
+
.describe("gRPC service name (for gRPC mocks)"),
|
|
20
36
|
kafkaTopic: z.string().optional().describe("Kafka topic (for Kafka mocks)"),
|
|
21
37
|
});
|
|
22
38
|
const inputSchema = {
|
|
@@ -62,7 +62,7 @@ export declare const newTestSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
|
62
62
|
traceFile: z.ZodOptional<z.ZodString>;
|
|
63
63
|
frontendTrace: z.ZodOptional<z.ZodString>;
|
|
64
64
|
reasoning: z.ZodString;
|
|
65
|
-
repository: z.
|
|
65
|
+
repository: z.ZodString;
|
|
66
66
|
targetElements: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{
|
|
67
67
|
role: z.ZodString;
|
|
68
68
|
accessibleName: z.ZodString;
|
|
@@ -100,13 +100,13 @@ export declare const newTestSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
|
100
100
|
}>>;
|
|
101
101
|
}, "strip", z.ZodTypeAny, {
|
|
102
102
|
description: string;
|
|
103
|
+
repository: string;
|
|
103
104
|
testType: TestType;
|
|
104
105
|
endpoint: string;
|
|
105
106
|
category: "new_endpoint" | "bug_caught" | "requirement_conflict" | "business_rule" | "security_boundary" | "data_integrity" | "breaking_change" | "auth" | "error_handling" | "workflow" | "data_validation" | "crud";
|
|
106
107
|
fileName: string;
|
|
107
108
|
testId: string;
|
|
108
109
|
reasoning: string;
|
|
109
|
-
repository?: string | undefined;
|
|
110
110
|
plannedTestId?: string | undefined;
|
|
111
111
|
traceFile?: string | undefined;
|
|
112
112
|
scenarioFile?: string | undefined;
|
|
@@ -126,13 +126,13 @@ export declare const newTestSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
|
126
126
|
frontendTrace?: string | undefined;
|
|
127
127
|
}, {
|
|
128
128
|
description: string;
|
|
129
|
+
repository: string;
|
|
129
130
|
testType: TestType;
|
|
130
131
|
endpoint: string;
|
|
131
132
|
category: "new_endpoint" | "bug_caught" | "requirement_conflict" | "business_rule" | "security_boundary" | "data_integrity" | "breaking_change" | "auth" | "error_handling" | "workflow" | "data_validation" | "crud";
|
|
132
133
|
fileName: string;
|
|
133
134
|
testId: string;
|
|
134
135
|
reasoning: string;
|
|
135
|
-
repository?: string | undefined;
|
|
136
136
|
plannedTestId?: string | undefined;
|
|
137
137
|
traceFile?: string | undefined;
|
|
138
138
|
scenarioFile?: string | undefined;
|
|
@@ -152,13 +152,13 @@ export declare const newTestSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
|
152
152
|
frontendTrace?: string | undefined;
|
|
153
153
|
}>, {
|
|
154
154
|
description: string;
|
|
155
|
+
repository: string;
|
|
155
156
|
testType: TestType;
|
|
156
157
|
endpoint: string;
|
|
157
158
|
category: "new_endpoint" | "bug_caught" | "requirement_conflict" | "business_rule" | "security_boundary" | "data_integrity" | "breaking_change" | "auth" | "error_handling" | "workflow" | "data_validation" | "crud";
|
|
158
159
|
fileName: string;
|
|
159
160
|
testId: string;
|
|
160
161
|
reasoning: string;
|
|
161
|
-
repository?: string | undefined;
|
|
162
162
|
plannedTestId?: string | undefined;
|
|
163
163
|
traceFile?: string | undefined;
|
|
164
164
|
scenarioFile?: string | undefined;
|
|
@@ -178,13 +178,13 @@ export declare const newTestSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
|
178
178
|
frontendTrace?: string | undefined;
|
|
179
179
|
}, {
|
|
180
180
|
description: string;
|
|
181
|
+
repository: string;
|
|
181
182
|
testType: TestType;
|
|
182
183
|
endpoint: string;
|
|
183
184
|
category: "new_endpoint" | "bug_caught" | "requirement_conflict" | "business_rule" | "security_boundary" | "data_integrity" | "breaking_change" | "auth" | "error_handling" | "workflow" | "data_validation" | "crud";
|
|
184
185
|
fileName: string;
|
|
185
186
|
testId: string;
|
|
186
187
|
reasoning: string;
|
|
187
|
-
repository?: string | undefined;
|
|
188
188
|
plannedTestId?: string | undefined;
|
|
189
189
|
traceFile?: string | undefined;
|
|
190
190
|
scenarioFile?: string | undefined;
|
|
@@ -204,13 +204,13 @@ export declare const newTestSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
|
204
204
|
frontendTrace?: string | undefined;
|
|
205
205
|
}>, {
|
|
206
206
|
description: string;
|
|
207
|
+
repository: string;
|
|
207
208
|
testType: TestType;
|
|
208
209
|
endpoint: string;
|
|
209
210
|
category: "new_endpoint" | "bug_caught" | "requirement_conflict" | "business_rule" | "security_boundary" | "data_integrity" | "breaking_change" | "auth" | "error_handling" | "workflow" | "data_validation" | "crud";
|
|
210
211
|
fileName: string;
|
|
211
212
|
testId: string;
|
|
212
213
|
reasoning: string;
|
|
213
|
-
repository?: string | undefined;
|
|
214
214
|
plannedTestId?: string | undefined;
|
|
215
215
|
traceFile?: string | undefined;
|
|
216
216
|
scenarioFile?: string | undefined;
|
|
@@ -263,7 +263,7 @@ export declare const additionalRecommendationSchema: z.ZodEffects<z.ZodEffects<z
|
|
|
263
263
|
backendTrace: z.ZodOptional<z.ZodString>;
|
|
264
264
|
frontendTrace: z.ZodOptional<z.ZodString>;
|
|
265
265
|
reasoning: z.ZodString;
|
|
266
|
-
repository: z.
|
|
266
|
+
repository: z.ZodString;
|
|
267
267
|
targetElements: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{
|
|
268
268
|
role: z.ZodString;
|
|
269
269
|
accessibleName: z.ZodString;
|
|
@@ -302,6 +302,7 @@ export declare const additionalRecommendationSchema: z.ZodEffects<z.ZodEffects<z
|
|
|
302
302
|
}, "strip", z.ZodTypeAny, {
|
|
303
303
|
description: string;
|
|
304
304
|
priority: "high" | "medium" | "low";
|
|
305
|
+
repository: string;
|
|
305
306
|
testType: TestType;
|
|
306
307
|
category: "new_endpoint" | "bug_caught" | "requirement_conflict" | "business_rule" | "security_boundary" | "data_integrity" | "breaking_change" | "auth" | "error_handling" | "workflow" | "data_validation" | "crud";
|
|
307
308
|
steps: {
|
|
@@ -314,7 +315,6 @@ export declare const additionalRecommendationSchema: z.ZodEffects<z.ZodEffects<z
|
|
|
314
315
|
}[];
|
|
315
316
|
testId: string;
|
|
316
317
|
reasoning: string;
|
|
317
|
-
repository?: string | undefined;
|
|
318
318
|
scenarioName?: string | undefined;
|
|
319
319
|
targetElements?: {
|
|
320
320
|
role: string;
|
|
@@ -335,12 +335,12 @@ export declare const additionalRecommendationSchema: z.ZodEffects<z.ZodEffects<z
|
|
|
335
335
|
backendTrace?: string | undefined;
|
|
336
336
|
}, {
|
|
337
337
|
description: string;
|
|
338
|
+
repository: string;
|
|
338
339
|
testType: TestType;
|
|
339
340
|
category: "new_endpoint" | "bug_caught" | "requirement_conflict" | "business_rule" | "security_boundary" | "data_integrity" | "breaking_change" | "auth" | "error_handling" | "workflow" | "data_validation" | "crud";
|
|
340
341
|
testId: string;
|
|
341
342
|
reasoning: string;
|
|
342
343
|
priority?: unknown;
|
|
343
|
-
repository?: string | undefined;
|
|
344
344
|
scenarioName?: string | undefined;
|
|
345
345
|
steps?: {
|
|
346
346
|
description: string;
|
|
@@ -370,6 +370,7 @@ export declare const additionalRecommendationSchema: z.ZodEffects<z.ZodEffects<z
|
|
|
370
370
|
}>, {
|
|
371
371
|
description: string;
|
|
372
372
|
priority: "high" | "medium" | "low";
|
|
373
|
+
repository: string;
|
|
373
374
|
testType: TestType;
|
|
374
375
|
category: "new_endpoint" | "bug_caught" | "requirement_conflict" | "business_rule" | "security_boundary" | "data_integrity" | "breaking_change" | "auth" | "error_handling" | "workflow" | "data_validation" | "crud";
|
|
375
376
|
steps: {
|
|
@@ -382,7 +383,6 @@ export declare const additionalRecommendationSchema: z.ZodEffects<z.ZodEffects<z
|
|
|
382
383
|
}[];
|
|
383
384
|
testId: string;
|
|
384
385
|
reasoning: string;
|
|
385
|
-
repository?: string | undefined;
|
|
386
386
|
scenarioName?: string | undefined;
|
|
387
387
|
targetElements?: {
|
|
388
388
|
role: string;
|
|
@@ -403,12 +403,12 @@ export declare const additionalRecommendationSchema: z.ZodEffects<z.ZodEffects<z
|
|
|
403
403
|
backendTrace?: string | undefined;
|
|
404
404
|
}, {
|
|
405
405
|
description: string;
|
|
406
|
+
repository: string;
|
|
406
407
|
testType: TestType;
|
|
407
408
|
category: "new_endpoint" | "bug_caught" | "requirement_conflict" | "business_rule" | "security_boundary" | "data_integrity" | "breaking_change" | "auth" | "error_handling" | "workflow" | "data_validation" | "crud";
|
|
408
409
|
testId: string;
|
|
409
410
|
reasoning: string;
|
|
410
411
|
priority?: unknown;
|
|
411
|
-
repository?: string | undefined;
|
|
412
412
|
scenarioName?: string | undefined;
|
|
413
413
|
steps?: {
|
|
414
414
|
description: string;
|
|
@@ -438,6 +438,7 @@ export declare const additionalRecommendationSchema: z.ZodEffects<z.ZodEffects<z
|
|
|
438
438
|
}>, {
|
|
439
439
|
description: string;
|
|
440
440
|
priority: "high" | "medium" | "low";
|
|
441
|
+
repository: string;
|
|
441
442
|
testType: TestType;
|
|
442
443
|
category: "new_endpoint" | "bug_caught" | "requirement_conflict" | "business_rule" | "security_boundary" | "data_integrity" | "breaking_change" | "auth" | "error_handling" | "workflow" | "data_validation" | "crud";
|
|
443
444
|
steps: {
|
|
@@ -450,7 +451,6 @@ export declare const additionalRecommendationSchema: z.ZodEffects<z.ZodEffects<z
|
|
|
450
451
|
}[];
|
|
451
452
|
testId: string;
|
|
452
453
|
reasoning: string;
|
|
453
|
-
repository?: string | undefined;
|
|
454
454
|
scenarioName?: string | undefined;
|
|
455
455
|
targetElements?: {
|
|
456
456
|
role: string;
|
|
@@ -470,4 +470,43 @@ export declare const additionalRecommendationSchema: z.ZodEffects<z.ZodEffects<z
|
|
|
470
470
|
openApiSpec?: string | undefined;
|
|
471
471
|
backendTrace?: string | undefined;
|
|
472
472
|
}, unknown>;
|
|
473
|
+
/**
|
|
474
|
+
* Remove every comment addressed to a Skyramp gate from the files this run delivers.
|
|
475
|
+
*
|
|
476
|
+
* Two gates ask the agent to write a decline INTO the delivered file — the utils
|
|
477
|
+
* verifier's `reuse-verify: allow` and the POM gate's `// kept inline:` — because a
|
|
478
|
+
* gate on a later run can only read what the repository holds. The customer ends up
|
|
479
|
+
* owning both, and a marker records the state at the moment it was written: nothing
|
|
480
|
+
* re-checks it when the file changes afterwards, so a delivered file can carry a
|
|
481
|
+
* claim its own code contradicts.
|
|
482
|
+
*
|
|
483
|
+
* Called only once the report is WRITTEN, which is the one point that is certainly
|
|
484
|
+
* the accepted path. A refusal must leave every marker in place: the agent repairs
|
|
485
|
+
* and resubmits, and a stripped marker would fire the gate again on a fault it has
|
|
486
|
+
* already declined. Nothing downstream reads a marker — the re-derivation that
|
|
487
|
+
* builds the report rows has already run, and the action stages current working-tree
|
|
488
|
+
* content before it commits (`git update-index --again`, plus the test-directory
|
|
489
|
+
* adds), so an edit made here reaches the commit without any change on that side.
|
|
490
|
+
*
|
|
491
|
+
* The accepted cost: a later run re-detects the same fault and the agent declines it
|
|
492
|
+
* again. That costs turns inside the run and never reaches the customer — and each
|
|
493
|
+
* run then judges the file in front of it rather than honouring a verdict taken
|
|
494
|
+
* against an older one.
|
|
495
|
+
*
|
|
496
|
+
* Best-effort throughout. The report is already on disk, so nothing here may throw.
|
|
497
|
+
*/
|
|
498
|
+
/**
|
|
499
|
+
* The delivered files one reuse record owns: the spec itself, and the shared modules
|
|
500
|
+
* located beside it.
|
|
501
|
+
*
|
|
502
|
+
* Only files this RUN changed. `locateUtilsFiles` also returns a module the spec
|
|
503
|
+
* merely imports, and a marker an older run left in one of those is not this run's to
|
|
504
|
+
* remove — editing it would put a file the run never touched into the customer's pull
|
|
505
|
+
* request. When the change list cannot be read the located set is used unchanged,
|
|
506
|
+
* which is the behaviour every other reuse check falls back to.
|
|
507
|
+
*/
|
|
508
|
+
export declare function deliveredFilesOf(record: {
|
|
509
|
+
testFilePath?: string;
|
|
510
|
+
language?: string;
|
|
511
|
+
}, changed: Set<string> | undefined): Promise<string[]>;
|
|
473
512
|
export declare function registerSubmitReportTool(server: McpServer): void;
|