@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
|
@@ -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(",");
|
|
@@ -23,9 +23,23 @@ export class TestDiscoveryService {
|
|
|
23
23
|
SKYRAMP_MARKER = "Generated by Skyramp";
|
|
24
24
|
// Supported test file extensions — covers all common languages/frameworks
|
|
25
25
|
SUPPORTED_EXTENSIONS = [
|
|
26
|
-
".py",
|
|
27
|
-
".
|
|
28
|
-
".
|
|
26
|
+
".py",
|
|
27
|
+
".js",
|
|
28
|
+
".ts",
|
|
29
|
+
".tsx",
|
|
30
|
+
".jsx",
|
|
31
|
+
".java",
|
|
32
|
+
".go",
|
|
33
|
+
".rb",
|
|
34
|
+
".kt",
|
|
35
|
+
".kts",
|
|
36
|
+
".cs",
|
|
37
|
+
".rs",
|
|
38
|
+
".php",
|
|
39
|
+
".scala",
|
|
40
|
+
".swift",
|
|
41
|
+
".m",
|
|
42
|
+
".dart",
|
|
29
43
|
".snap", // Jest/Vitest snapshot files — may need updating when UI changes break them
|
|
30
44
|
];
|
|
31
45
|
// Concurrency control for parallel operations
|
|
@@ -54,7 +68,9 @@ export class TestDiscoveryService {
|
|
|
54
68
|
logger.info(`Found ${classified.skyramp.length} Skyramp test files, ${classified.external.length} external test files`);
|
|
55
69
|
// Process Skyramp tests (content already cached from classification)
|
|
56
70
|
const skyrampTests = await this.processFilesInBatches(classified.skyramp, false, classified.contentCache);
|
|
57
|
-
skyrampTests.forEach(t => {
|
|
71
|
+
skyrampTests.forEach((t) => {
|
|
72
|
+
t.source = TestSource.Skyramp;
|
|
73
|
+
});
|
|
58
74
|
// No diff context reaches this service: its one caller passes no options, so
|
|
59
75
|
// every external file is potentially relevant and the cap is what bounds the
|
|
60
76
|
// read set.
|
|
@@ -122,7 +138,7 @@ export class TestDiscoveryService {
|
|
|
122
138
|
// TEST_FILE_PATTERNS includes Skyramp-generated suffixes (_smoke, _contract, etc.)
|
|
123
139
|
// so Skyramp files outside standard test directories are still discovered.
|
|
124
140
|
// This avoids reading every source file in the repo just to check the marker.
|
|
125
|
-
const testCandidates = allFiles.filter(f => this.isExternalTestFile(f));
|
|
141
|
+
const testCandidates = allFiles.filter((f) => this.isExternalTestFile(f));
|
|
126
142
|
logger.debug(`Found ${allFiles.length} candidate files, narrowed to ${testCandidates.length} likely test files`);
|
|
127
143
|
const result = { skyramp: [], external: [] };
|
|
128
144
|
const contentCache = new Map();
|
|
@@ -43,7 +43,11 @@ process.on("exit", () => {
|
|
|
43
43
|
// resolving from the mounted repo. Node treats the empty shadow as a miss and
|
|
44
44
|
// walks up to NODE_PATH's global install (both packages are global in the
|
|
45
45
|
// executor image).
|
|
46
|
-
const SHADOWED_NESTED_PACKAGES = [
|
|
46
|
+
const SHADOWED_NESTED_PACKAGES = [
|
|
47
|
+
"@playwright/test",
|
|
48
|
+
"playwright",
|
|
49
|
+
"@skyramp/skyramp",
|
|
50
|
+
];
|
|
47
51
|
// Minimal Playwright config — shadows repo configs that may import dotenv or other
|
|
48
52
|
// dependencies not available in the executor container.
|
|
49
53
|
const MINIMAL_PLAYWRIGHT_CONFIG_PATH = path.join(os.tmpdir(), "skyramp-playwright.config.ts");
|
|
@@ -60,9 +64,7 @@ export const PLAYWRIGHT_CONFIG_FILES = [
|
|
|
60
64
|
// IS mounted (see mountRepoTree) — but walking it would shadow every package's
|
|
61
65
|
// own package.json with empty JSON via MOUNT_NULL_ITEMS, breaking resolution
|
|
62
66
|
// for the whole tree.
|
|
63
|
-
export const MOUNT_SCAN_SKIP_DIRS = [
|
|
64
|
-
"node_modules",
|
|
65
|
-
];
|
|
67
|
+
export const MOUNT_SCAN_SKIP_DIRS = ["node_modules"];
|
|
66
68
|
// Reserved container subdir under /home/user where a cross-repo test repository
|
|
67
69
|
// (testsRepoDir, SKYR-3819) is mounted. Must live INSIDE /home/user: the generated
|
|
68
70
|
// Playwright config's testDir is anchored there, and a test path outside it is
|
|
@@ -94,8 +96,14 @@ export function isBrowserTest(testType) {
|
|
|
94
96
|
* based on the test file path
|
|
95
97
|
*/
|
|
96
98
|
export function getVideoSubdir(testFile) {
|
|
97
|
-
const basename = path
|
|
98
|
-
|
|
99
|
+
const basename = path
|
|
100
|
+
.basename(testFile, path.extname(testFile))
|
|
101
|
+
.replace(/[^A-Za-z0-9._-]/g, "-");
|
|
102
|
+
const hash = crypto
|
|
103
|
+
.createHash("sha256")
|
|
104
|
+
.update(testFile)
|
|
105
|
+
.digest("hex")
|
|
106
|
+
.slice(0, 8);
|
|
99
107
|
return `${basename}-${hash}`;
|
|
100
108
|
}
|
|
101
109
|
/**
|
|
@@ -359,7 +367,8 @@ export function detectSessionFiles(testFilePath) {
|
|
|
359
367
|
*/
|
|
360
368
|
export function findExcludedPaths(dir, excludedItems) {
|
|
361
369
|
const results = [];
|
|
362
|
-
const shouldSkipDir = (entry) => excludedItems.includes(entry.name) ||
|
|
370
|
+
const shouldSkipDir = (entry) => excludedItems.includes(entry.name) ||
|
|
371
|
+
MOUNT_SCAN_SKIP_DIRS.includes(entry.name);
|
|
363
372
|
for (const [entry, fullPath] of walkDir(dir, { shouldSkipDir })) {
|
|
364
373
|
// Only shadow files — mounting /dev/null to a directory target causes Docker errors
|
|
365
374
|
if (excludedItems.includes(entry.name)) {
|
|
@@ -523,7 +532,9 @@ export class TestExecutionService {
|
|
|
523
532
|
// include it and the relative-path computation would escape /home/user. Anchor
|
|
524
533
|
// it under the reserved subdir instead; the test repo is mounted there below.
|
|
525
534
|
const absTestFile = path.resolve(options.testFile);
|
|
526
|
-
const testRepoPath = options.testRepoPath
|
|
535
|
+
const testRepoPath = options.testRepoPath
|
|
536
|
+
? path.resolve(options.testRepoPath)
|
|
537
|
+
: undefined;
|
|
527
538
|
// A root-level test repo would bind-mount large portions of the host
|
|
528
539
|
// (read-write, alongside the Docker socket) into the executor — reject it
|
|
529
540
|
// explicitly rather than falling through to the generic path error below.
|
|
@@ -532,7 +543,9 @@ export class TestExecutionService {
|
|
|
532
543
|
!isUnder(workspacePath, absTestFile)) {
|
|
533
544
|
throw new Error(`testRepoPath must not be the filesystem root, got: ${options.testRepoPath}`);
|
|
534
545
|
}
|
|
535
|
-
const crossRepoTestRoot = !isUnder(workspacePath, absTestFile) &&
|
|
546
|
+
const crossRepoTestRoot = !isUnder(workspacePath, absTestFile) &&
|
|
547
|
+
testRepoPath &&
|
|
548
|
+
isUnder(testRepoPath, absTestFile)
|
|
536
549
|
? testRepoPath
|
|
537
550
|
: undefined;
|
|
538
551
|
if (crossRepoTestRoot) {
|
|
@@ -555,7 +568,7 @@ export class TestExecutionService {
|
|
|
555
568
|
testFilePath = path.resolve(containerMountPath, path.relative(workspacePath, absTestFile));
|
|
556
569
|
}
|
|
557
570
|
// Video recording setup for UI/E2E browser tests (no-op for API tests).
|
|
558
|
-
const { browserTest, videoHostDir, videoContainerDir, playwrightConfigPath, pytestConfigPath } = setupVideoCapture(options, workspacePath, containerMountPath);
|
|
571
|
+
const { browserTest, videoHostDir, videoContainerDir, playwrightConfigPath, pytestConfigPath, } = setupVideoCapture(options, workspacePath, containerMountPath);
|
|
559
572
|
// Prepare Docker command
|
|
560
573
|
const command = [
|
|
561
574
|
"bash",
|
|
@@ -637,10 +650,15 @@ export class TestExecutionService {
|
|
|
637
650
|
// copies that must not load from the repo.
|
|
638
651
|
const entriesToMount = fs
|
|
639
652
|
.readdirSync(hostRoot)
|
|
640
|
-
.filter((file) => !MOUNT_NULL_ITEMS.includes(file) &&
|
|
653
|
+
.filter((file) => !MOUNT_NULL_ITEMS.includes(file) &&
|
|
654
|
+
!PLAYWRIGHT_CONFIG_FILES.includes(file));
|
|
641
655
|
for (const file of entriesToMount) {
|
|
642
656
|
const source = path.join(hostRoot, file);
|
|
643
|
-
pushMount({
|
|
657
|
+
pushMount({
|
|
658
|
+
Type: "bind",
|
|
659
|
+
Target: path.join(containerRoot, file),
|
|
660
|
+
Source: source,
|
|
661
|
+
});
|
|
644
662
|
if (mirrorToHost) {
|
|
645
663
|
pushMount({ Type: "bind", Target: source, Source: source });
|
|
646
664
|
}
|
|
@@ -648,8 +666,14 @@ export class TestExecutionService {
|
|
|
648
666
|
// Shadow MOUNT_NULL_ITEMS (found recursively) with /dev/null (or empty JSON for .json files).
|
|
649
667
|
for (const absolutePath of findExcludedPaths(hostRoot, MOUNT_NULL_ITEMS)) {
|
|
650
668
|
const rel = path.relative(hostRoot, absolutePath);
|
|
651
|
-
const source = absolutePath.endsWith(".json")
|
|
652
|
-
|
|
669
|
+
const source = absolutePath.endsWith(".json")
|
|
670
|
+
? EMPTY_JSON_PATH
|
|
671
|
+
: "/dev/null";
|
|
672
|
+
pushMount({
|
|
673
|
+
Type: "bind",
|
|
674
|
+
Source: source,
|
|
675
|
+
Target: path.join(containerRoot, rel),
|
|
676
|
+
});
|
|
653
677
|
if (mirrorToHost) {
|
|
654
678
|
pushMount({ Type: "bind", Source: source, Target: absolutePath });
|
|
655
679
|
}
|
|
@@ -669,7 +693,12 @@ export class TestExecutionService {
|
|
|
669
693
|
ReadOnly: true,
|
|
670
694
|
});
|
|
671
695
|
if (mirrorToHost) {
|
|
672
|
-
pushMount({
|
|
696
|
+
pushMount({
|
|
697
|
+
Type: "bind",
|
|
698
|
+
Source: EMPTY_DIR_PATH,
|
|
699
|
+
Target: pkgPath,
|
|
700
|
+
ReadOnly: true,
|
|
701
|
+
});
|
|
673
702
|
}
|
|
674
703
|
}
|
|
675
704
|
}
|
|
@@ -681,9 +710,17 @@ export class TestExecutionService {
|
|
|
681
710
|
// `npx playwright test <file>` and read playwright.config.ts.
|
|
682
711
|
for (const absolutePath of findExcludedPaths(hostRoot, PLAYWRIGHT_CONFIG_FILES)) {
|
|
683
712
|
const rel = path.relative(hostRoot, absolutePath);
|
|
684
|
-
pushMount({
|
|
713
|
+
pushMount({
|
|
714
|
+
Type: "bind",
|
|
715
|
+
Source: playwrightConfigPath,
|
|
716
|
+
Target: path.join(containerRoot, rel),
|
|
717
|
+
});
|
|
685
718
|
if (mirrorToHost) {
|
|
686
|
-
pushMount({
|
|
719
|
+
pushMount({
|
|
720
|
+
Type: "bind",
|
|
721
|
+
Source: playwrightConfigPath,
|
|
722
|
+
Target: absolutePath,
|
|
723
|
+
});
|
|
687
724
|
}
|
|
688
725
|
}
|
|
689
726
|
};
|
|
@@ -692,7 +729,8 @@ export class TestExecutionService {
|
|
|
692
729
|
// even if the repo has no config file. The pushMount dedup ensures later shadows
|
|
693
730
|
// for the same target are dropped.
|
|
694
731
|
if (browserTest) {
|
|
695
|
-
if (options.language === "typescript" ||
|
|
732
|
+
if (options.language === "typescript" ||
|
|
733
|
+
options.language === "javascript") {
|
|
696
734
|
// Mount generated Playwright config at canonical container path
|
|
697
735
|
pushMount({
|
|
698
736
|
Type: "bind",
|
|
@@ -962,11 +1000,15 @@ export class TestExecutionService {
|
|
|
962
1000
|
const errors = this.parseErrors(cleanOutput);
|
|
963
1001
|
const warnings = this.parseWarnings(cleanOutput);
|
|
964
1002
|
// Collect the recorded video (browser tests only).
|
|
965
|
-
const videoPath = browserTest
|
|
1003
|
+
const videoPath = browserTest
|
|
1004
|
+
? collectVideoPath(videoHostDir)
|
|
1005
|
+
: undefined;
|
|
966
1006
|
const result = {
|
|
967
1007
|
testFile: options.testFile,
|
|
968
|
-
status: statusCode === 0
|
|
969
|
-
|
|
1008
|
+
status: statusCode === 0
|
|
1009
|
+
? TestExecutionStatus.Pass
|
|
1010
|
+
: statusCode !== 1
|
|
1011
|
+
? TestExecutionStatus.Error
|
|
970
1012
|
: TestExecutionStatus.Fail,
|
|
971
1013
|
executedAt,
|
|
972
1014
|
duration,
|
|
@@ -62,7 +62,7 @@ export declare abstract class TestGenerationService {
|
|
|
62
62
|
protected abstract getTestType(): TestType | typeof MOCK_TYPE;
|
|
63
63
|
/**
|
|
64
64
|
* Whether this generation's codeReuse hand-off sequences skyramp_modularization
|
|
65
|
-
* before skyramp_reuse_code (
|
|
65
|
+
* before skyramp_reuse_code (isModularizeFirstHandOffTarget). Subclasses that
|
|
66
66
|
* add their own post-generation steps consult this so modularization is
|
|
67
67
|
* instructed exactly once.
|
|
68
68
|
*/
|