@skyramp/mcp 0.4.1 → 0.4.2-rc.1
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/adapters/jestAdapter.js +23 -5
- package/build/adapters/mochaAdapter.js +7 -1
- package/build/adapters/playwrightAdapter.js +3 -1
- package/build/adapters/pytestAdapter.js +14 -3
- package/build/commands/localDevTestChangesCommand.js +1 -0
- package/build/commands/recommendTestsAndExecuteCommand.js +5 -6
- package/build/commands/testThisEndpointCommand.js +16 -4
- package/build/index.js +34 -4
- package/build/playwright/blueprintDigest.js +28 -7
- package/build/playwright/registerPlaywrightTools.js +33 -28
- package/build/playwright/traceRecordingPrompt.js +9 -2
- package/build/prompts/code-reuse.js +95 -29
- 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 +3 -1
- package/build/prompts/local-dev/local-dev-prompts.d.ts +1 -1
- package/build/prompts/local-dev/local-dev-prompts.js +30 -3
- 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 +88 -2
- package/build/prompts/shared-helper-policy.js +145 -11
- package/build/prompts/sut-setup/modes/adaptWorkflowPrompt.js +1 -1
- 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 +2 -2
- 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.js +3 -2
- 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 +7 -4
- package/build/prompts/test-recommendation/recommendationSections.js +19 -8
- 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 +123 -55
- 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 +21 -5
- 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/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 -0
- package/build/tools/auth/loginTool.js +3 -1
- package/build/tools/auth/logoutTool.js +3 -1
- 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 +252 -27
- 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 +22 -1
- package/build/tools/executeSkyrampTestTool.js +571 -271
- 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/runExistingTestsTool.d.ts +1 -1
- package/build/tools/runExistingTestsTool.js +43 -21
- package/build/tools/submitReportTool.d.ts +51 -12
- package/build/tools/submitReportTool.js +860 -161
- package/build/tools/test-management/actionsTool.js +210 -51
- package/build/tools/test-management/analyzeChangesTool.d.ts +4 -5
- package/build/tools/test-management/analyzeChangesTool.js +127 -68
- package/build/tools/test-management/analyzeTestHealthTool.js +35 -13
- 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/trace/startTraceCollectionTool.js +3 -1
- package/build/tools/trace/stopTraceCollectionTool.js +41 -5
- 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/ExternalTestExecution.d.ts +2 -2
- package/build/types/RepositoryAnalysis.d.ts +0 -40
- package/build/types/ReuseOutcome.d.ts +96 -4
- 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 +13 -0
- package/build/types/TestTypes.js +34 -3
- package/build/types/TestbotPromptOptions.d.ts +9 -1
- package/build/types/TestbotReport.d.ts +45 -9
- package/build/utils/AnalysisStateManager.d.ts +137 -27
- package/build/utils/AnalysisStateManager.js +227 -43
- 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/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 +39 -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/proxy-terminal.d.ts +19 -1
- package/build/utils/proxy-terminal.js +346 -21
- 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.js +6 -2
- 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/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 +788 -0
- package/build/utils/testExecutionRecord.d.ts +90 -0
- package/build/utils/testExecutionRecord.js +267 -0
- package/build/utils/testFileClassification.js +3 -1
- package/build/utils/trace-parser.js +62 -14
- package/build/utils/urlPath.js +3 -1
- package/build/utils/utils-verify/action-key.d.ts +4 -0
- package/build/utils/utils-verify/action-key.js +2 -2
- 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 +335 -0
- package/build/utils/utils-verify/call-sites.d.ts +6 -1
- package/build/utils/utils-verify/call-sites.js +72 -8
- 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 +1 -0
- package/build/utils/utils-verify/index.js +1 -0
- package/build/utils/utils-verify/language-spec.d.ts +26 -10
- package/build/utils/utils-verify/language-spec.js +217 -20
- 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 +46 -6
- package/build/utils/utils-verify/parse.js +176 -38
- 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 +76 -1
- package/build/utils/utils-verify/verify.js +516 -44
- 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.js +7 -7
- 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 +4 -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 +44 -50
- 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/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/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 = {
|
|
@@ -5,12 +5,12 @@ import * as crypto from "crypto";
|
|
|
5
5
|
import { promises as fs } from "fs";
|
|
6
6
|
import { spawn } from "child_process";
|
|
7
7
|
import { stripVTControlCharacters } from "util";
|
|
8
|
-
import { WorkspaceConfigManager } from "../workspace/workspace.js";
|
|
9
|
-
import { resolveSuites } from "../workspace/testSuites.js";
|
|
8
|
+
import { WorkspaceConfigManager, } from "../workspace/workspace.js";
|
|
9
|
+
import { resolveSuites, } from "../workspace/testSuites.js";
|
|
10
10
|
import { StateManager, } from "../utils/AnalysisStateManager.js";
|
|
11
11
|
import { buildPlaywrightArgs, parsePlaywrightJson, } from "../adapters/playwrightAdapter.js";
|
|
12
12
|
import { buildPytestArgs, parsePytestJson } from "../adapters/pytestAdapter.js";
|
|
13
|
-
import { buildJestArgs, buildVitestArgs, parseJestJson } from "../adapters/jestAdapter.js";
|
|
13
|
+
import { buildJestArgs, buildVitestArgs, parseJestJson, } from "../adapters/jestAdapter.js";
|
|
14
14
|
import { buildMochaArgs, parseMochaJson } from "../adapters/mochaAdapter.js";
|
|
15
15
|
import picomatch from "picomatch";
|
|
16
16
|
import { AnalyticsService } from "../services/AnalyticsService.js";
|
|
@@ -218,7 +218,13 @@ function toResolvedRunConfig(s) {
|
|
|
218
218
|
* text: sums counts, concatenates results, ANDs environmentHealthy, joins the
|
|
219
219
|
* unhealthy details. */
|
|
220
220
|
export function aggregateRuns(parsed) {
|
|
221
|
-
const summary = {
|
|
221
|
+
const summary = {
|
|
222
|
+
ran: 0,
|
|
223
|
+
failed: 0,
|
|
224
|
+
errored: 0,
|
|
225
|
+
skipped: 0,
|
|
226
|
+
truncated: false,
|
|
227
|
+
};
|
|
222
228
|
const results = [];
|
|
223
229
|
let environmentHealthy = true;
|
|
224
230
|
const details = [];
|
|
@@ -354,7 +360,12 @@ export async function runExternalSuite(spec, cfg, opts) {
|
|
|
354
360
|
stderrTail: stderr.slice(-STDERR_TAIL_CHARS),
|
|
355
361
|
stdoutTail: outTail,
|
|
356
362
|
}));
|
|
357
|
-
child.on("error", (e) => resolve({
|
|
363
|
+
child.on("error", (e) => resolve({
|
|
364
|
+
code: -1,
|
|
365
|
+
stdout: out,
|
|
366
|
+
stderrTail: String(e),
|
|
367
|
+
stdoutTail: outTail,
|
|
368
|
+
}));
|
|
358
369
|
});
|
|
359
370
|
let report;
|
|
360
371
|
try {
|
|
@@ -420,7 +431,8 @@ export async function runExternalSuite(spec, cfg, opts) {
|
|
|
420
431
|
if (!parsed.environmentHealthy) {
|
|
421
432
|
const detail = buildOutputDiagnostic(stderrTail, stdoutTail);
|
|
422
433
|
if (detail) {
|
|
423
|
-
parsed.healthDetail = `${parsed.healthDetail ??
|
|
434
|
+
parsed.healthDetail = `${parsed.healthDetail ??
|
|
435
|
+
`${spec.framework} environment unhealthy (exit ${code}).`} ${detail}`;
|
|
424
436
|
}
|
|
425
437
|
}
|
|
426
438
|
return parsed;
|
|
@@ -447,11 +459,11 @@ async function persistExternalRun(stateFile, repository, record) {
|
|
|
447
459
|
const sm = StateManager.fromStatePath(stateFile);
|
|
448
460
|
const state = await sm.readRepoData(repository);
|
|
449
461
|
if (!state) {
|
|
450
|
-
logger.warning(`${TOOL_NAME}: no analysis state found for repo ${repository
|
|
462
|
+
logger.warning(`${TOOL_NAME}: no analysis state found for repo ${repository}; skipping externalTestResults write`);
|
|
451
463
|
return;
|
|
452
464
|
}
|
|
453
465
|
state.externalTestResults = [...(state.externalTestResults ?? []), record];
|
|
454
|
-
await sm.
|
|
466
|
+
await sm.updateRepoData(state, { repo: repository });
|
|
455
467
|
}
|
|
456
468
|
catch (err) {
|
|
457
469
|
logger.error(`${TOOL_NAME}: failed to persist externalTestResults: ${err.message}`);
|
|
@@ -465,6 +477,12 @@ async function persistExternalRun(stateFile, repository, record) {
|
|
|
465
477
|
export async function runExternalTests(params, deps = defaultDeps) {
|
|
466
478
|
const mode = params.mode ?? "confirm";
|
|
467
479
|
const selectors = params.testSelectors ?? [];
|
|
480
|
+
// `repository` names the state section; `stateFile` says whether there is any
|
|
481
|
+
// state to write. A standalone run — the SUT-setup canary, which runs before
|
|
482
|
+
// any analysis exists — names its repository but writes nothing.
|
|
483
|
+
const stateSection = params.stateFile
|
|
484
|
+
? { file: params.stateFile, repo: params.repository }
|
|
485
|
+
: undefined;
|
|
468
486
|
let effective = selectors;
|
|
469
487
|
let truncated = false;
|
|
470
488
|
if (params.maxTests && selectors.length > params.maxTests) {
|
|
@@ -483,17 +501,17 @@ export async function runExternalTests(params, deps = defaultDeps) {
|
|
|
483
501
|
skipped: true,
|
|
484
502
|
skipReason: reason,
|
|
485
503
|
};
|
|
486
|
-
if (
|
|
487
|
-
await persistExternalRun(
|
|
504
|
+
if (stateSection) {
|
|
505
|
+
await persistExternalRun(stateSection.file, stateSection.repo, {
|
|
488
506
|
...skippedRun,
|
|
489
507
|
mode,
|
|
490
508
|
ranAt: deps.now(),
|
|
491
|
-
repository:
|
|
509
|
+
repository: stateSection.repo,
|
|
492
510
|
});
|
|
493
511
|
}
|
|
494
512
|
return skippedRun;
|
|
495
513
|
}
|
|
496
|
-
const knownTestFiles = await loadKnownTestFiles(
|
|
514
|
+
const knownTestFiles = await loadKnownTestFiles(stateSection?.file, stateSection?.repo);
|
|
497
515
|
const perSuite = [];
|
|
498
516
|
for (const cfg of resolution.runs) {
|
|
499
517
|
const routing = routeSelectorsToSuite({
|
|
@@ -515,12 +533,12 @@ export async function runExternalTests(params, deps = defaultDeps) {
|
|
|
515
533
|
skipReason: `suite "${cfg.serviceName}" owns ${owned}, and none of the ${routing.dropped.length} requested selector(s) fall under it — nothing for this suite to run. Widen its testSuites pathGlobs, or add a suite that owns those paths.`,
|
|
516
534
|
};
|
|
517
535
|
perSuite.push(routedOut);
|
|
518
|
-
if (
|
|
519
|
-
await persistExternalRun(
|
|
536
|
+
if (stateSection) {
|
|
537
|
+
await persistExternalRun(stateSection.file, stateSection.repo, {
|
|
520
538
|
...routedOut,
|
|
521
539
|
mode,
|
|
522
540
|
ranAt: deps.now(),
|
|
523
|
-
repository:
|
|
541
|
+
repository: stateSection.repo,
|
|
524
542
|
});
|
|
525
543
|
}
|
|
526
544
|
continue;
|
|
@@ -538,15 +556,18 @@ export async function runExternalTests(params, deps = defaultDeps) {
|
|
|
538
556
|
});
|
|
539
557
|
const suiteResult = {
|
|
540
558
|
...parsed,
|
|
541
|
-
summary: {
|
|
559
|
+
summary: {
|
|
560
|
+
...parsed.summary,
|
|
561
|
+
truncated: parsed.summary.truncated || truncated,
|
|
562
|
+
},
|
|
542
563
|
};
|
|
543
564
|
perSuite.push(suiteResult);
|
|
544
|
-
if (
|
|
545
|
-
await persistExternalRun(
|
|
565
|
+
if (stateSection) {
|
|
566
|
+
await persistExternalRun(stateSection.file, stateSection.repo, {
|
|
546
567
|
...suiteResult,
|
|
547
568
|
mode,
|
|
548
569
|
ranAt: deps.now(),
|
|
549
|
-
repository:
|
|
570
|
+
repository: stateSection.repo,
|
|
550
571
|
});
|
|
551
572
|
}
|
|
552
573
|
}
|
|
@@ -587,8 +608,9 @@ export function registerRunExistingTestsTool(server) {
|
|
|
587
608
|
.describe("Path to the analyze-changes state file. When set, results are appended to externalTestResults so drift analysis and the report can fold in CONFIRMED failures."),
|
|
588
609
|
repository: z
|
|
589
610
|
.string()
|
|
590
|
-
.
|
|
591
|
-
.
|
|
611
|
+
.trim()
|
|
612
|
+
.min(1)
|
|
613
|
+
.describe("owner/repo whose state section to write into. Set it on every call."),
|
|
592
614
|
timeoutMs: z
|
|
593
615
|
.number()
|
|
594
616
|
.int()
|