@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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { callSteps, isUIPlannedTest, stepRouteKey, subjectStep } from "../subjectStep.js";
|
|
1
|
+
import { callSteps, isUIPlannedTest, stepRouteKey, subjectStep, } from "../subjectStep.js";
|
|
2
2
|
import { STATED_DIFFERENCE_CONTRACT } from "../verifierContracts.js";
|
|
3
3
|
/** What two planned tests must share before this asks how they differ: the method and
|
|
4
4
|
* path of their subject step. UI planned tests are OUT — two tests of one screen are
|
|
@@ -20,7 +20,10 @@ function nameKey(raw) {
|
|
|
20
20
|
* difference, and the pair's own objection is the question about it — naming the
|
|
21
21
|
* bad reference too would ask twice about one mistake. */
|
|
22
22
|
function differenceStated(a, b) {
|
|
23
|
-
const states = (from, to) => (from
|
|
23
|
+
const states = (from, to) => (Array.isArray(from?.declarations?.differsFrom)
|
|
24
|
+
? from.declarations.differsFrom
|
|
25
|
+
: []).some((entry) => nameKey(entry.plannedTestId) === nameKey(to?.plannedTestId) &&
|
|
26
|
+
String(entry.difference ?? "").trim().length > 0);
|
|
24
27
|
return states(a, b) || states(b, a);
|
|
25
28
|
}
|
|
26
29
|
/** One objection per `differsFrom` entry naming no planned test in the plan. A
|
|
@@ -29,12 +32,16 @@ function differenceStated(a, b) {
|
|
|
29
32
|
* question the agent believes it already answered, and it would answer it again
|
|
30
33
|
* the same way. A blank reference names nothing either and is one of these. */
|
|
31
34
|
function unknownPartnerObjections(plannedTests) {
|
|
32
|
-
const known = new Set(plannedTests
|
|
35
|
+
const known = new Set(plannedTests
|
|
36
|
+
.map((plannedTest) => nameKey(plannedTest.plannedTestId))
|
|
37
|
+
.filter(Boolean));
|
|
33
38
|
const seen = new Set();
|
|
34
39
|
const objections = [];
|
|
35
40
|
for (const plannedTest of plannedTests) {
|
|
36
|
-
for (const entry of plannedTest
|
|
37
|
-
const raw = entry
|
|
41
|
+
for (const entry of plannedTest.declarations.differsFrom ?? []) {
|
|
42
|
+
const raw = entry.plannedTestId;
|
|
43
|
+
// A non-string names nothing, and objecting to it put an empty reference in
|
|
44
|
+
// the objection's own id.
|
|
38
45
|
if (typeof raw !== "string")
|
|
39
46
|
continue;
|
|
40
47
|
const reference = nameKey(raw);
|
|
@@ -42,7 +49,7 @@ function unknownPartnerObjections(plannedTests) {
|
|
|
42
49
|
continue;
|
|
43
50
|
// One objection per (planned test, reference): the same bad name written by
|
|
44
51
|
// two planned tests is two mistakes, and each owes its own answer.
|
|
45
|
-
const key = `${nameKey(plannedTest
|
|
52
|
+
const key = `${nameKey(plannedTest.plannedTestId)}\u0000${reference}`;
|
|
46
53
|
if (seen.has(key))
|
|
47
54
|
continue;
|
|
48
55
|
seen.add(key);
|
|
@@ -70,7 +77,7 @@ function unstatedSubjectObjections(plannedTests) {
|
|
|
70
77
|
const calls = callSteps(plannedTest);
|
|
71
78
|
if (calls.length === 0 || subjectStep(plannedTest))
|
|
72
79
|
continue;
|
|
73
|
-
const declared = plannedTest
|
|
80
|
+
const declared = plannedTest.declarations.stepUnderTest;
|
|
74
81
|
objections.push({
|
|
75
82
|
objectionId: `statedDifference:subjectNotStated:${plannedTest.plannedTestId}`,
|
|
76
83
|
verifier: "statedDifference",
|
|
@@ -91,7 +98,7 @@ function unstatedSubjectObjections(plannedTests) {
|
|
|
91
98
|
export const statedDifference = {
|
|
92
99
|
name: "statedDifference",
|
|
93
100
|
run(registration, _ctx) {
|
|
94
|
-
const plannedTests = registration.plannedTests
|
|
101
|
+
const plannedTests = registration.plannedTests;
|
|
95
102
|
/** Planned-test id -> route -> the partners on that route it has NOT explained,
|
|
96
103
|
* recorded while the pair is known to be unexplained. Deriving it afterwards
|
|
97
104
|
* from the route would list partners this planned test already explained. */
|
|
@@ -14,7 +14,9 @@ function field(value) {
|
|
|
14
14
|
* letter case, and the repeated spaces an HTML render collapses — and nothing
|
|
15
15
|
* about what it says: a shortened or paraphrased name is not a copy. */
|
|
16
16
|
function folded(value) {
|
|
17
|
-
return typeof value === "string"
|
|
17
|
+
return typeof value === "string"
|
|
18
|
+
? value.trim().replace(/\s+/g, " ").toLowerCase()
|
|
19
|
+
: "";
|
|
18
20
|
}
|
|
19
21
|
function context(value) {
|
|
20
22
|
return Array.isArray(value) ? value.map(folded).filter(Boolean) : [];
|
|
@@ -75,7 +77,12 @@ function addTo(index, key, element) {
|
|
|
75
77
|
index.set(key, [element]);
|
|
76
78
|
}
|
|
77
79
|
function poolOf(captured) {
|
|
78
|
-
const pool = {
|
|
80
|
+
const pool = {
|
|
81
|
+
byTestId: new Map(),
|
|
82
|
+
byStableId: new Map(),
|
|
83
|
+
byRow: new Map(),
|
|
84
|
+
byName: new Map(),
|
|
85
|
+
};
|
|
79
86
|
for (const raw of captured) {
|
|
80
87
|
const element = fieldsOf(raw);
|
|
81
88
|
addTo(pool.byTestId, element.testId, element);
|
|
@@ -101,18 +108,28 @@ function grounded(declared, pool) {
|
|
|
101
108
|
/** Identity for the duplicate check: two entries agreeing on every field name
|
|
102
109
|
* one element, so the second says nothing the first did not. */
|
|
103
110
|
function identityKey(element) {
|
|
104
|
-
return JSON.stringify([
|
|
111
|
+
return JSON.stringify([
|
|
112
|
+
element.role,
|
|
113
|
+
element.name,
|
|
114
|
+
element.testId,
|
|
115
|
+
element.stableId,
|
|
116
|
+
element.contextText,
|
|
117
|
+
]);
|
|
105
118
|
}
|
|
106
119
|
/** How an element reads back in an objection, in the agent's own spelling. */
|
|
107
120
|
function label(raw) {
|
|
108
121
|
const element = (raw && typeof raw === "object" ? raw : {});
|
|
109
122
|
const parts = [
|
|
110
123
|
element.role ? `role "${String(element.role).trim()}"` : "",
|
|
111
|
-
element.accessibleName
|
|
124
|
+
element.accessibleName
|
|
125
|
+
? `name "${String(element.accessibleName).trim()}"`
|
|
126
|
+
: "",
|
|
112
127
|
element.testId ? `testId "${String(element.testId).trim()}"` : "",
|
|
113
128
|
element.stableId ? `stableId "${String(element.stableId).trim()}"` : "",
|
|
114
129
|
].filter(Boolean);
|
|
115
|
-
return parts.length > 0
|
|
130
|
+
return parts.length > 0
|
|
131
|
+
? parts.join(" ")
|
|
132
|
+
: "an entry with no role, name or identifier";
|
|
116
133
|
}
|
|
117
134
|
/** A url split into the part before the fragment and the fragment WHEN it is a
|
|
118
135
|
* route (`#/…`). An ordinary anchor comes back as an empty route and is
|
|
@@ -123,7 +140,10 @@ function splitHashRoute(raw) {
|
|
|
123
140
|
if (hash < 0)
|
|
124
141
|
return { base: value, route: "" };
|
|
125
142
|
const fragment = value.slice(hash);
|
|
126
|
-
return {
|
|
143
|
+
return {
|
|
144
|
+
base: value.slice(0, hash),
|
|
145
|
+
route: fragment.startsWith("#/") ? fragment.replace(/\/+$/, "") : "",
|
|
146
|
+
};
|
|
127
147
|
}
|
|
128
148
|
/** The path half of a url. The ROOT stays `/` rather than folding to empty, or a
|
|
129
149
|
* page named by its host alone would have no path to match on and the check
|
|
@@ -141,16 +161,26 @@ function urlPath(raw) {
|
|
|
141
161
|
return new URL(base).pathname.replace(/\/+$/, "") || "/";
|
|
142
162
|
}
|
|
143
163
|
catch {
|
|
144
|
-
return base.startsWith("/")
|
|
164
|
+
return base.startsWith("/")
|
|
165
|
+
? base.split("?")[0].replace(/\/+$/, "") || "/"
|
|
166
|
+
: "";
|
|
145
167
|
}
|
|
146
168
|
}
|
|
147
169
|
/** The spellings of the machine the run is on: a capture at `127.0.0.1` and a
|
|
148
170
|
* page url at `localhost` are the same page. */
|
|
149
|
-
const LOOPBACK_HOSTS = new Set([
|
|
171
|
+
const LOOPBACK_HOSTS = new Set([
|
|
172
|
+
"localhost",
|
|
173
|
+
"127.0.0.1",
|
|
174
|
+
"[::1]",
|
|
175
|
+
"::1",
|
|
176
|
+
"0.0.0.0",
|
|
177
|
+
]);
|
|
150
178
|
/** The host half of a url, empty for a path-only one. Read so a wrong host
|
|
151
179
|
* cannot ground an element on another service's capture. */
|
|
152
180
|
function urlHost(raw) {
|
|
153
|
-
const value = String(raw ?? "")
|
|
181
|
+
const value = String(raw ?? "")
|
|
182
|
+
.trim()
|
|
183
|
+
.split("#")[0];
|
|
154
184
|
if (!value)
|
|
155
185
|
return "";
|
|
156
186
|
try {
|
|
@@ -175,7 +205,7 @@ function elementsForPage(captures, url) {
|
|
|
175
205
|
const pool = captures.filter((capture) => urlPath(capture.url) === path && (!host || urlHost(capture.url) === host));
|
|
176
206
|
if (pool.length === 0)
|
|
177
207
|
return undefined;
|
|
178
|
-
return poolOf(pool.flatMap((capture) =>
|
|
208
|
+
return poolOf(pool.flatMap((capture) => Array.isArray(capture.elements) ? capture.elements : []));
|
|
179
209
|
}
|
|
180
210
|
/** How many elements this run captured, across every page. The exemption below
|
|
181
211
|
* reads this and never `captures.length`: a capture object that holds nothing
|
|
@@ -203,10 +233,12 @@ function capturedPages(captures) {
|
|
|
203
233
|
* for. A guard on `data-cy` or `data-qa` reaches the plan with `testId` null and
|
|
204
234
|
* nothing else that carries the pair, so this cannot recognise it. */
|
|
205
235
|
function removedTestIds(ctx) {
|
|
206
|
-
const removed = Array.isArray(ctx?.removedUiElements)
|
|
236
|
+
const removed = Array.isArray(ctx?.removedUiElements)
|
|
237
|
+
? ctx.removedUiElements
|
|
238
|
+
: [];
|
|
207
239
|
return new Set(removed
|
|
208
|
-
.filter((item) => field(item
|
|
209
|
-
.map((item) => field(item
|
|
240
|
+
.filter((item) => field(item.attribute).toLowerCase() === "data-testid")
|
|
241
|
+
.map((item) => field(item.value))
|
|
210
242
|
.filter(Boolean));
|
|
211
243
|
}
|
|
212
244
|
/** An objection names everything it saw. It used to stop at eight and say "and
|
|
@@ -223,15 +255,17 @@ export const uiElementGrounded = {
|
|
|
223
255
|
name: "uiElementGrounded",
|
|
224
256
|
run(registration, ctx) {
|
|
225
257
|
const objections = [];
|
|
226
|
-
const captures = Array.isArray(ctx.uiCaptures)
|
|
258
|
+
const captures = Array.isArray(ctx.uiCaptures)
|
|
259
|
+
? ctx.uiCaptures.filter((capture) => capture && typeof capture === "object")
|
|
260
|
+
: [];
|
|
227
261
|
const pools = new Map();
|
|
228
262
|
const removedIds = removedTestIds(ctx);
|
|
229
263
|
for (const plannedTest of registration.plannedTests ?? []) {
|
|
230
264
|
if (!isUIPlannedTest(plannedTest))
|
|
231
265
|
continue;
|
|
232
|
-
const raw = plannedTest.declarations
|
|
266
|
+
const raw = plannedTest.declarations.elements?.items;
|
|
233
267
|
const declared = Array.isArray(raw) ? raw : [];
|
|
234
|
-
const url = String(plannedTest.declarations
|
|
268
|
+
const url = String(plannedTest.declarations.elements?.pageUrl ?? "").trim();
|
|
235
269
|
if (declared.length === 0) {
|
|
236
270
|
// A run that saw nothing cannot ask this: standalone and IDE use store no
|
|
237
271
|
// digest and a backend-only run takes none. The boundary is the ELEMENT
|
|
@@ -2,7 +2,7 @@ import * as fs from "fs";
|
|
|
2
2
|
import { ResourceTemplate, } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
3
|
import { StateManager, getSessionFilePath, getRegisteredSessions, hasSessionData, getSessionData, normalizeRecommendationState, } from "../utils/AnalysisStateManager.js";
|
|
4
4
|
import { logger } from "../utils/logger.js";
|
|
5
|
-
import { AnalysisScope
|
|
5
|
+
import { AnalysisScope } from "../types/RepositoryAnalysis.js";
|
|
6
6
|
export const ANALYSIS_URI_PREFIX = "skyramp://analysis";
|
|
7
7
|
/**
|
|
8
8
|
* Register MCP Resources for analysis data access.
|
|
@@ -25,7 +25,9 @@ export function registerAnalysisResources(server) {
|
|
|
25
25
|
if (hasSessionData(sessionId)) {
|
|
26
26
|
const memData = getSessionData(sessionId);
|
|
27
27
|
if (memData?.analysis) {
|
|
28
|
-
logger.debug("Loaded analysis from process memory for resource", {
|
|
28
|
+
logger.debug("Loaded analysis from process memory for resource", {
|
|
29
|
+
sessionId,
|
|
30
|
+
});
|
|
29
31
|
return memData;
|
|
30
32
|
}
|
|
31
33
|
}
|
|
@@ -125,7 +127,9 @@ export function registerAnalysisResources(server) {
|
|
|
125
127
|
{
|
|
126
128
|
uri: uri.href,
|
|
127
129
|
mimeType: "application/json",
|
|
128
|
-
text: JSON.stringify({
|
|
130
|
+
text: JSON.stringify({
|
|
131
|
+
message: "No branch diff context (analysis scope was full_repo).",
|
|
132
|
+
}, null, 2),
|
|
129
133
|
},
|
|
130
134
|
],
|
|
131
135
|
};
|
|
@@ -5,10 +5,12 @@ export function registerProgressResource(server) {
|
|
|
5
5
|
description: "Maps Skyramp MCP tool names to testbot progress phases.",
|
|
6
6
|
mimeType: "application/json",
|
|
7
7
|
}, () => ({
|
|
8
|
-
contents: [
|
|
8
|
+
contents: [
|
|
9
|
+
{
|
|
9
10
|
uri: "skyramp://progress/tool-phases",
|
|
10
11
|
mimeType: "application/json",
|
|
11
12
|
text: JSON.stringify(TOOL_PHASE_MAP),
|
|
12
|
-
}
|
|
13
|
+
},
|
|
14
|
+
],
|
|
13
15
|
}));
|
|
14
16
|
}
|
|
@@ -4,7 +4,8 @@ import { resourceText } from "../utils/utils.js";
|
|
|
4
4
|
import { AnalyticsService } from "../services/AnalyticsService.js";
|
|
5
5
|
import { getAdaptWorkflowPrompt } from "../prompts/sut-setup/modes/adaptWorkflowPrompt.js";
|
|
6
6
|
import { getDockerComposePrompt } from "../prompts/sut-setup/modes/dockerComposePrompt.js";
|
|
7
|
-
import { SutSetupMode } from "../prompts/sut-setup/shared.js";
|
|
7
|
+
import { SutSetupMode, } from "../prompts/sut-setup/shared.js";
|
|
8
|
+
import { getLocalRepositoryInfo } from "../utils/telemetry.js";
|
|
8
9
|
export function registerSutSetupResource(server) {
|
|
9
10
|
logger.info("Registering SUT setup resource");
|
|
10
11
|
// RFC 6570 {+rest} (reserved expansion) captures the entire query string
|
|
@@ -19,8 +20,25 @@ export function registerSutSetupResource(server) {
|
|
|
19
20
|
}, async (uri) => {
|
|
20
21
|
const param = (name, fallback) => uri.searchParams.get(name) ?? fallback;
|
|
21
22
|
const mode = param("sutSetupMode", SutSetupMode.None);
|
|
23
|
+
const repositoryPath = param("repositoryPath", ".");
|
|
24
|
+
// The released action sends no `repository` on this URI at all. Read the
|
|
25
|
+
// same thing it reads for the testbot URI — the origin remote of this very
|
|
26
|
+
// checkout — so the two names can never disagree.
|
|
27
|
+
// TODO: drop the fallback once a released action sends it here.
|
|
28
|
+
let repository = (uri.searchParams.get("repository") ?? "").trim();
|
|
29
|
+
// Mode "none" returns a fixed string that names no repository.
|
|
30
|
+
if (mode !== SutSetupMode.None) {
|
|
31
|
+
if (!repository) {
|
|
32
|
+
repository =
|
|
33
|
+
(await getLocalRepositoryInfo(repositoryPath)).repository ?? "";
|
|
34
|
+
}
|
|
35
|
+
if (!repository) {
|
|
36
|
+
return resourceText(uri.toString(), `repository is required: pass the checkout's owner/repo on the resource URI, or run where ${repositoryPath} has an origin remote that names one`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
22
39
|
const args = {
|
|
23
|
-
repositoryPath
|
|
40
|
+
repositoryPath,
|
|
41
|
+
repository,
|
|
24
42
|
sutSetupMode: mode,
|
|
25
43
|
sutSourceWorkflowFile: param("sutSourceWorkflowFile", ""),
|
|
26
44
|
sutSourceDockerComposeFile: param("sutSourceDockerComposeFile", ""),
|
|
@@ -3,6 +3,8 @@ import { logger } from "../utils/logger.js";
|
|
|
3
3
|
import { AnalyticsService } from "../services/AnalyticsService.js";
|
|
4
4
|
import { getTestbotPrompt, parseRelatedRepositories, } from "../prompts/testbot/testbot-prompts.js";
|
|
5
5
|
import { readWorkspaceServices } from "../prompts/prompt-utils.js";
|
|
6
|
+
import { getLocalRepositoryInfo } from "../utils/telemetry.js";
|
|
7
|
+
import { parseMaxFixAttemptsArg } from "../utils/fixAttempts.js";
|
|
6
8
|
export function registerTestbotResource(server) {
|
|
7
9
|
logger.info("Registering testbot resource");
|
|
8
10
|
// RFC 6570 {+rest} (reserved expansion) captures the entire query string
|
|
@@ -35,6 +37,17 @@ export function registerTestbotResource(server) {
|
|
|
35
37
|
};
|
|
36
38
|
const prNum = intParam("prNumber");
|
|
37
39
|
const repositoryPath = param("repositoryPath", ".");
|
|
40
|
+
// Required, like the prompt's own argument. A blank one would render an
|
|
41
|
+
// empty <REPOSITORY> block and tell the agent to attribute to nothing.
|
|
42
|
+
// The released action sends `primaryRepo` only on a multi-repo run, so a
|
|
43
|
+
// single-repo run names nothing. Read the same thing the action reads —
|
|
44
|
+
// the origin remote of this very checkout — so the two can never disagree.
|
|
45
|
+
// TODO: drop the fallback once a released action sends it on every run.
|
|
46
|
+
const primaryRepo = (uri.searchParams.get("primaryRepo") ?? "").trim() ||
|
|
47
|
+
(await getLocalRepositoryInfo(repositoryPath)).repository;
|
|
48
|
+
if (!primaryRepo) {
|
|
49
|
+
throw new Error(`primaryRepo is required: pass the primary checkout's owner/repo on the resource URI, or run where ${repositoryPath} has an origin remote that names one`);
|
|
50
|
+
}
|
|
38
51
|
const services = await readWorkspaceServices(repositoryPath);
|
|
39
52
|
const prompt = getTestbotPrompt({
|
|
40
53
|
prTitle: param("prTitle", ""),
|
|
@@ -47,11 +60,16 @@ export function registerTestbotResource(server) {
|
|
|
47
60
|
uiCredentials: uri.searchParams.get("uiCredentials") || undefined,
|
|
48
61
|
testsRepoDir: uri.searchParams.get("testsRepoDir") || undefined,
|
|
49
62
|
relatedRepositories: parseRelatedRepositories(uri.searchParams.get("relatedRepositories") || undefined),
|
|
50
|
-
primaryRepo
|
|
63
|
+
primaryRepo,
|
|
51
64
|
// Plan-only eval lane (SKYR-3879): recommendation phase only, nothing
|
|
52
65
|
// generated or executed. Same accepted spellings as the prompt schema.
|
|
53
66
|
planOnly: ["true", "1"].includes(uri.searchParams.get("planOnly") ?? ""),
|
|
54
67
|
language: uri.searchParams.get("language") || undefined,
|
|
68
|
+
// Fix-and-rerun attempt cap (SKYR-4460): the shared parser, so an unusable
|
|
69
|
+
// or out-of-range value reads as unset here and on the prompt alike. Named
|
|
70
|
+
// "perTest…" on the wire: the URI is in the agent's context, and a bare
|
|
71
|
+
// "maxFixAttempts" reads as a run-wide total.
|
|
72
|
+
maxFixAttempts: parseMaxFixAttemptsArg(uri.searchParams.get("perTestMaxFixAttempts") ?? undefined),
|
|
55
73
|
});
|
|
56
74
|
AnalyticsService.pushMCPToolEvent("skyramp_testbot_prompt", undefined, {}).catch(() => { });
|
|
57
75
|
// The URI WITHOUT its query string. The agent reads this line above the
|
|
@@ -35,7 +35,9 @@ async function safePushToolEvent(entryPoint, toolName, errorMessage, params) {
|
|
|
35
35
|
await withTimeout(pushToolEvent(entryPoint, toolName, errorMessage, params), ANALYTICS_TIMEOUT_MS, "pushToolEvent");
|
|
36
36
|
}
|
|
37
37
|
catch (error) {
|
|
38
|
-
logger.error("safePushToolEvent failed", {
|
|
38
|
+
logger.error("safePushToolEvent failed", {
|
|
39
|
+
error: error instanceof Error ? error.message : String(error),
|
|
40
|
+
});
|
|
39
41
|
// Swallow — analytics must never crash the server.
|
|
40
42
|
}
|
|
41
43
|
}
|
|
@@ -49,10 +49,8 @@ export class ScenarioGenerationService {
|
|
|
49
49
|
const statusCode = params.statusCode ?? inferExpectedStatus(method);
|
|
50
50
|
const requestBody = params.requestBody ||
|
|
51
51
|
(method === "GET" || method === "DELETE" ? "" : "{}");
|
|
52
|
-
const responseHeaders = params.responseHeaders
|
|
53
|
-
|
|
54
|
-
const isJsonResponse = (responseHeaders["Content-Type"] || [])
|
|
55
|
-
.some(v => v.includes("application/json"));
|
|
52
|
+
const responseHeaders = params.responseHeaders || { "Content-Type": ["application/json"] };
|
|
53
|
+
const isJsonResponse = (responseHeaders["Content-Type"] || []).some((v) => v.includes("application/json"));
|
|
56
54
|
const responseBody = params.responseBody || (isJsonResponse ? "{}" : "");
|
|
57
55
|
const requestHeaders = {
|
|
58
56
|
"Content-Type": ["application/json"],
|
|
@@ -76,7 +74,9 @@ export class ScenarioGenerationService {
|
|
|
76
74
|
if (Array.isArray(v)) {
|
|
77
75
|
const items = v
|
|
78
76
|
.filter((item) => item !== null)
|
|
79
|
-
.map((item) =>
|
|
77
|
+
.map((item) => typeof item === "object"
|
|
78
|
+
? JSON.stringify(item)
|
|
79
|
+
: String(item));
|
|
80
80
|
if (items.length === 0)
|
|
81
81
|
continue;
|
|
82
82
|
value = items.join(",");
|
|
@@ -4,7 +4,15 @@ import { logger } from "../utils/logger.js";
|
|
|
4
4
|
import { TestSource } from "../types/TestAnalysis.js";
|
|
5
5
|
import { TestType } from "../types/TestTypes.js";
|
|
6
6
|
import fg from "fast-glob";
|
|
7
|
-
import { isDiscoveredTestFile } from "../utils/testFileClassification.js";
|
|
7
|
+
import { hasTestFileName, isDiscoveredTestFile, } from "../utils/testFileClassification.js";
|
|
8
|
+
/**
|
|
9
|
+
* A Jest/Vitest snapshot in the colocated CRA layout. Its name never identifies
|
|
10
|
+
* it as a test (`Button.test.tsx.snap` cannot match a `.<ext>` tail across the
|
|
11
|
+
* `.tsx.` dot), but a render change leaves it stale, so it is maintenance
|
|
12
|
+
* material. It never enters the before-run gate: `detectLanguage` on `.snap`
|
|
13
|
+
* returns "unknown".
|
|
14
|
+
*/
|
|
15
|
+
const COLOCATED_SNAPSHOT = /[\\/]__snapshots__[\\/][^\\/]+\.snap$/;
|
|
8
16
|
export class TestDiscoveryService {
|
|
9
17
|
EXCLUDED_DIRS = [
|
|
10
18
|
"node_modules",
|
|
@@ -23,9 +31,23 @@ export class TestDiscoveryService {
|
|
|
23
31
|
SKYRAMP_MARKER = "Generated by Skyramp";
|
|
24
32
|
// Supported test file extensions — covers all common languages/frameworks
|
|
25
33
|
SUPPORTED_EXTENSIONS = [
|
|
26
|
-
".py",
|
|
27
|
-
".
|
|
28
|
-
".
|
|
34
|
+
".py",
|
|
35
|
+
".js",
|
|
36
|
+
".ts",
|
|
37
|
+
".tsx",
|
|
38
|
+
".jsx",
|
|
39
|
+
".java",
|
|
40
|
+
".go",
|
|
41
|
+
".rb",
|
|
42
|
+
".kt",
|
|
43
|
+
".kts",
|
|
44
|
+
".cs",
|
|
45
|
+
".rs",
|
|
46
|
+
".php",
|
|
47
|
+
".scala",
|
|
48
|
+
".swift",
|
|
49
|
+
".m",
|
|
50
|
+
".dart",
|
|
29
51
|
".snap", // Jest/Vitest snapshot files — may need updating when UI changes break them
|
|
30
52
|
];
|
|
31
53
|
// Concurrency control for parallel operations
|
|
@@ -54,7 +76,9 @@ export class TestDiscoveryService {
|
|
|
54
76
|
logger.info(`Found ${classified.skyramp.length} Skyramp test files, ${classified.external.length} external test files`);
|
|
55
77
|
// Process Skyramp tests (content already cached from classification)
|
|
56
78
|
const skyrampTests = await this.processFilesInBatches(classified.skyramp, false, classified.contentCache);
|
|
57
|
-
skyrampTests.forEach(t => {
|
|
79
|
+
skyrampTests.forEach((t) => {
|
|
80
|
+
t.source = TestSource.Skyramp;
|
|
81
|
+
});
|
|
58
82
|
// No diff context reaches this service: its one caller passes no options, so
|
|
59
83
|
// every external file is potentially relevant and the cap is what bounds the
|
|
60
84
|
// read set.
|
|
@@ -122,11 +146,12 @@ export class TestDiscoveryService {
|
|
|
122
146
|
// TEST_FILE_PATTERNS includes Skyramp-generated suffixes (_smoke, _contract, etc.)
|
|
123
147
|
// so Skyramp files outside standard test directories are still discovered.
|
|
124
148
|
// This avoids reading every source file in the repo just to check the marker.
|
|
125
|
-
const testCandidates = allFiles.filter(f => this.isExternalTestFile(f));
|
|
149
|
+
const testCandidates = allFiles.filter((f) => this.isExternalTestFile(f));
|
|
126
150
|
logger.debug(`Found ${allFiles.length} candidate files, narrowed to ${testCandidates.length} likely test files`);
|
|
127
151
|
const result = { skyramp: [], external: [] };
|
|
128
152
|
const contentCache = new Map();
|
|
129
153
|
const marker = this.SKYRAMP_MARKER;
|
|
154
|
+
const dropped = [];
|
|
130
155
|
const batchSize = 100;
|
|
131
156
|
for (let i = 0; i < testCandidates.length; i += batchSize) {
|
|
132
157
|
const batch = testCandidates.slice(i, i + batchSize);
|
|
@@ -137,16 +162,27 @@ export class TestDiscoveryService {
|
|
|
137
162
|
result.skyramp.push(file);
|
|
138
163
|
contentCache.set(file, content);
|
|
139
164
|
}
|
|
140
|
-
else {
|
|
165
|
+
else if (hasTestFileName(file) || COLOCATED_SNAPSHOT.test(file)) {
|
|
141
166
|
result.external.push(file);
|
|
142
167
|
contentCache.set(file, content);
|
|
143
168
|
}
|
|
169
|
+
else {
|
|
170
|
+
// A candidate without the marker and without a test file name is a
|
|
171
|
+
// helper, fixture, page object, setup file or config that only
|
|
172
|
+
// qualified by sitting in a test directory. It cannot be run as a
|
|
173
|
+
// test, so it is not external coverage. Skyramp's own files keep the
|
|
174
|
+
// wide rule above -- the marker is what identifies them.
|
|
175
|
+
dropped.push(file);
|
|
176
|
+
}
|
|
144
177
|
}
|
|
145
178
|
catch (error) {
|
|
146
|
-
logger.
|
|
179
|
+
logger.warning(`Skipping file ${file}: ${error}`);
|
|
147
180
|
}
|
|
148
181
|
}
|
|
149
182
|
}
|
|
183
|
+
if (dropped.length > 0) {
|
|
184
|
+
logger.debug(`Dropped ${dropped.length} test-directory candidates with no test file name: ${dropped.slice(0, 10).join(", ")}`);
|
|
185
|
+
}
|
|
150
186
|
logger.debug(`Classified ${result.skyramp.length} Skyramp files, ${result.external.length} external test files`);
|
|
151
187
|
return { ...result, contentCache };
|
|
152
188
|
}
|
|
@@ -155,7 +191,11 @@ export class TestDiscoveryService {
|
|
|
155
191
|
* or directory placement.
|
|
156
192
|
*/
|
|
157
193
|
isExternalTestFile(filePath) {
|
|
158
|
-
|
|
194
|
+
// Either rule may admit a candidate: the directory rule for a test that
|
|
195
|
+
// sits in a test tree, the name rule for one that does not. Without the
|
|
196
|
+
// second, `auth.e2e.ts` or `OrdersIT.java` outside a test directory never
|
|
197
|
+
// reaches the classification below.
|
|
198
|
+
return isDiscoveredTestFile(filePath) || hasTestFileName(filePath);
|
|
159
199
|
}
|
|
160
200
|
/**
|
|
161
201
|
* Extract metadata from a test file
|
|
@@ -457,7 +497,11 @@ export class TestDiscoveryService {
|
|
|
457
497
|
const languageMap = {
|
|
458
498
|
".py": "python",
|
|
459
499
|
".js": "javascript",
|
|
500
|
+
".mjs": "javascript",
|
|
501
|
+
".cjs": "javascript",
|
|
460
502
|
".ts": "typescript",
|
|
503
|
+
".mts": "typescript",
|
|
504
|
+
".cts": "typescript",
|
|
461
505
|
".tsx": "typescript",
|
|
462
506
|
".jsx": "javascript",
|
|
463
507
|
".java": "java",
|