@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,5 @@
|
|
|
1
1
|
import { spawn, exec } from "child_process";
|
|
2
|
+
import { randomBytes } from "crypto";
|
|
2
3
|
import path from "path";
|
|
3
4
|
import fs from "fs";
|
|
4
5
|
import os from "os";
|
|
@@ -16,16 +17,66 @@ const shellEnvVariables = {
|
|
|
16
17
|
};
|
|
17
18
|
let terminalProcess;
|
|
18
19
|
let terminalPID;
|
|
20
|
+
// Windows closes its console window by title rather than by PID. cmd.exe has no
|
|
21
|
+
// built-in variable for its own process id, so the PID file it used to write
|
|
22
|
+
// never held a number and cleanup silently did nothing (SKYR-4446). The title
|
|
23
|
+
// carries a timestamp so a stop closes the window this session opened and
|
|
24
|
+
// leaves a window from an earlier session alone.
|
|
25
|
+
const WINDOWS_TERMINAL_TITLE_PREFIX = "Skyramp Trace Collection";
|
|
26
|
+
let windowsTerminalTitle;
|
|
27
|
+
// Titles of windows a stop failed to close and a later launch then displaced.
|
|
28
|
+
// Kept so the user is still told which windows are open: clearing them on the
|
|
29
|
+
// next successful close would silently drop the older orphans.
|
|
30
|
+
const orphanedWindowsTerminalTitles = [];
|
|
31
|
+
// The stamp avoids colons: taskkill takes the title as a quoted /FI value, and
|
|
32
|
+
// a colon there is needlessly awkward to reproduce by hand when checking with
|
|
33
|
+
// `tasklist /FI "WINDOWTITLE eq ..."`.
|
|
34
|
+
//
|
|
35
|
+
// The trailing nonce is not decoration. `taskkill /FI "WINDOWTITLE eq ..."`
|
|
36
|
+
// terminates *every* process tree whose title matches, so a title unique only
|
|
37
|
+
// to the second lets two windows opened in the same second - two editors, two
|
|
38
|
+
// workspaces, two server processes - collide, and stopping one would kill the
|
|
39
|
+
// other. The nonce makes each launch its own identity.
|
|
40
|
+
export function makeWindowsTerminalTitle(now = new Date()) {
|
|
41
|
+
const pad = (n) => String(n).padStart(2, "0");
|
|
42
|
+
const stamp = `${now.getFullYear()}-${pad(now.getMonth() + 1)}-${pad(now.getDate())} ` +
|
|
43
|
+
`${pad(now.getHours())}-${pad(now.getMinutes())}-${pad(now.getSeconds())}`;
|
|
44
|
+
const nonce = randomBytes(4).toString("hex");
|
|
45
|
+
return `${WINDOWS_TERMINAL_TITLE_PREFIX} ${stamp} ${nonce}`;
|
|
46
|
+
}
|
|
47
|
+
// buildWindowsTerminalArgs assembles the `cmd` arguments that open the titled
|
|
48
|
+
// window. Split out from openProxyTerminal so the shape can be asserted without
|
|
49
|
+
// spawning anything - the title silently going missing here is exactly the
|
|
50
|
+
// regression the title-based cleanup cannot survive.
|
|
51
|
+
export function buildWindowsTerminalArgs(title) {
|
|
52
|
+
// `start` reads its first *quoted* argument as the window title. libuv quotes
|
|
53
|
+
// an argument containing whitespace (also an empty one, or one containing a
|
|
54
|
+
// double quote), and the title always has spaces, so cmd receives
|
|
55
|
+
// `start "Skyramp Trace Collection ..." cmd /k <script>`. A title without
|
|
56
|
+
// spaces would arrive unquoted and `start` would treat it as the command to
|
|
57
|
+
// run, so the spaces are load-bearing.
|
|
58
|
+
//
|
|
59
|
+
// This holds only while the spawn passes no `shell` option: `shell: true`
|
|
60
|
+
// resolving to cmd.exe forces windowsVerbatimArguments, which would skip the
|
|
61
|
+
// quoting and silently un-title the window. No unit test on this array can
|
|
62
|
+
// catch that, so do not add a shell option to the launch without revisiting.
|
|
63
|
+
return ["/c", "start", title, "cmd", "/k"];
|
|
64
|
+
}
|
|
19
65
|
function getTerminalConfig() {
|
|
20
66
|
const platform = os.platform();
|
|
21
67
|
switch (platform) {
|
|
22
68
|
case "win32":
|
|
23
69
|
return {
|
|
24
70
|
command: "cmd",
|
|
25
|
-
|
|
71
|
+
// Never used: openProxyTerminal replaces args wholesale on win32 with
|
|
72
|
+
// buildWindowsTerminalArgs(title), which is the only source of truth.
|
|
73
|
+
// Editing this array changes nothing. Kept only to satisfy the type.
|
|
74
|
+
args: [],
|
|
26
75
|
scriptExtension: ".bat",
|
|
27
76
|
scriptHeader: "@echo off",
|
|
28
|
-
|
|
77
|
+
// Unused on Windows: cmd.exe cannot report its own PID, so the script
|
|
78
|
+
// writes no PID file and the window is closed by title instead.
|
|
79
|
+
pidCommand: "",
|
|
29
80
|
};
|
|
30
81
|
case "darwin":
|
|
31
82
|
return {
|
|
@@ -48,9 +99,11 @@ function getTerminalConfig() {
|
|
|
48
99
|
};
|
|
49
100
|
}
|
|
50
101
|
}
|
|
51
|
-
function createEnvironmentScript(config) {
|
|
102
|
+
function createEnvironmentScript(config, scriptId) {
|
|
52
103
|
const tempDir = os.tmpdir();
|
|
53
|
-
|
|
104
|
+
// Per-launch filename. With a shared name, the 2s cleanup timer from one
|
|
105
|
+
// launch deletes the next launch's script while its cmd is still reading it.
|
|
106
|
+
const scriptPath = path.join(tempDir, `skyramp-launch-${scriptId}${config.scriptExtension}`);
|
|
54
107
|
const pidFile = path.join(tempDir, "skyramp-terminal.pid");
|
|
55
108
|
const infoMessage = os.platform() === "win32"
|
|
56
109
|
? "A new terminal has been spawned here by Skyramp to enable trace collection.\\nAsk skyramp agent to stop trace to terminate trace collection and return to where you were.\\nFor more information, visit skyramp.dev/docs."
|
|
@@ -61,11 +114,18 @@ function createEnvironmentScript(config) {
|
|
|
61
114
|
const setStatements = Object.entries(shellEnvVariables)
|
|
62
115
|
.map(([key, value]) => `set ${key}=${value}`)
|
|
63
116
|
.join("\n");
|
|
117
|
+
// Deliberately no trailing `cmd /k`: the window is already launched as
|
|
118
|
+
// `cmd /k <script>`, so it drops to an interactive prompt with these vars
|
|
119
|
+
// applied once the script ends. Starting a second cmd inside the same
|
|
120
|
+
// console would be redundant, and a nested shell appends to the console
|
|
121
|
+
// title - which would move the title out from under the exact-match
|
|
122
|
+
// taskkill filter that closes this window (SKYR-4446).
|
|
123
|
+
//
|
|
124
|
+
// No PID file either: cmd.exe has no variable holding its own process id,
|
|
125
|
+
// so anything echoed would be a literal string.
|
|
64
126
|
scriptContent = `${config.scriptHeader}
|
|
65
127
|
${setStatements}
|
|
66
|
-
echo
|
|
67
|
-
echo ${infoMessage}
|
|
68
|
-
cmd /k`;
|
|
128
|
+
echo ${infoMessage}`;
|
|
69
129
|
}
|
|
70
130
|
else {
|
|
71
131
|
// Unix-like script (macOS/Linux)
|
|
@@ -155,11 +215,35 @@ async function findAvailableTerminal() {
|
|
|
155
215
|
logger.warning("No common Linux terminal found, falling back to xterm");
|
|
156
216
|
return "xterm";
|
|
157
217
|
}
|
|
218
|
+
// The launcher hands the script to a console that reads it asynchronously, so
|
|
219
|
+
// the file cannot be removed the moment the launcher exits.
|
|
220
|
+
const SCRIPT_CLEANUP_DELAY_MS = 2000;
|
|
221
|
+
function scheduleScriptCleanup(scriptPath) {
|
|
222
|
+
setTimeout(() => {
|
|
223
|
+
try {
|
|
224
|
+
if (fs.existsSync(scriptPath)) {
|
|
225
|
+
fs.unlinkSync(scriptPath);
|
|
226
|
+
logger.debug("Script file cleaned up", { scriptPath });
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch (scriptCleanupError) {
|
|
230
|
+
logger.debug("Script cleanup completed with minor issues", {
|
|
231
|
+
error: scriptCleanupError instanceof Error
|
|
232
|
+
? scriptCleanupError.message
|
|
233
|
+
: String(scriptCleanupError),
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
}, SCRIPT_CLEANUP_DELAY_MS);
|
|
237
|
+
}
|
|
158
238
|
export default async function openProxyTerminal() {
|
|
159
239
|
logger.info("Starting cross-platform proxy terminal creation", {
|
|
160
240
|
platform: os.platform(),
|
|
161
241
|
arch: os.arch(),
|
|
162
242
|
});
|
|
243
|
+
// Which title this launch owns, so both error paths can tell their own
|
|
244
|
+
// failure from a newer launch's success. Declared out here so the catch
|
|
245
|
+
// below sees it too.
|
|
246
|
+
let launchedTitle;
|
|
163
247
|
try {
|
|
164
248
|
const config = getTerminalConfig();
|
|
165
249
|
// For Linux, try to find an available terminal
|
|
@@ -176,7 +260,20 @@ export default async function openProxyTerminal() {
|
|
|
176
260
|
}
|
|
177
261
|
}
|
|
178
262
|
}
|
|
179
|
-
|
|
263
|
+
if (os.platform() === "win32") {
|
|
264
|
+
// A title still set here belongs to a window a previous stop failed to
|
|
265
|
+
// close. Overwriting it is how that window's handle is actually lost, so
|
|
266
|
+
// carry it forward rather than let a later stop claim nothing was opened.
|
|
267
|
+
if (windowsTerminalTitle) {
|
|
268
|
+
logger.warning("Previous Windows trace terminal was never closed; its window must be " +
|
|
269
|
+
"closed by hand", { title: windowsTerminalTitle });
|
|
270
|
+
orphanedWindowsTerminalTitles.push(windowsTerminalTitle);
|
|
271
|
+
}
|
|
272
|
+
windowsTerminalTitle = makeWindowsTerminalTitle();
|
|
273
|
+
launchedTitle = windowsTerminalTitle;
|
|
274
|
+
config.args = buildWindowsTerminalArgs(windowsTerminalTitle);
|
|
275
|
+
}
|
|
276
|
+
const scriptPath = createEnvironmentScript(config, randomBytes(4).toString("hex"));
|
|
180
277
|
const pidFile = path.join(os.tmpdir(), "skyramp-terminal.pid");
|
|
181
278
|
// Verify script exists before launching terminal
|
|
182
279
|
if (!fs.existsSync(scriptPath)) {
|
|
@@ -217,6 +314,16 @@ export default async function openProxyTerminal() {
|
|
|
217
314
|
platform: os.platform(),
|
|
218
315
|
exitCode: code,
|
|
219
316
|
});
|
|
317
|
+
// Windows writes no PID file - the script cannot produce one and cleanup
|
|
318
|
+
// works by window title instead - so there is nothing to wait for or read.
|
|
319
|
+
// Skipping the read also stops a stale skyramp-terminal.pid left by an
|
|
320
|
+
// older build from being parsed as this session's terminal. The script
|
|
321
|
+
// still has to be removed, so take that path directly rather than
|
|
322
|
+
// returning past it.
|
|
323
|
+
if (os.platform() === "win32") {
|
|
324
|
+
scheduleScriptCleanup(scriptPath);
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
220
327
|
// Wait for terminal to write PID and execute script
|
|
221
328
|
// On macOS, Terminal.app takes longer to start and execute the script
|
|
222
329
|
const cleanupDelay = os.platform() === "darwin" ? 10000 : 3000;
|
|
@@ -283,12 +390,42 @@ export default async function openProxyTerminal() {
|
|
|
283
390
|
}
|
|
284
391
|
}, cleanupDelay);
|
|
285
392
|
});
|
|
393
|
+
// Node emits "error" both for a failed spawn and for a later kill() that
|
|
394
|
+
// could not deliver its signal. Only the first means no window exists, so
|
|
395
|
+
// track whether the child ever started before treating an error as a
|
|
396
|
+
// non-launch - otherwise a failed kill would clear a live window's title
|
|
397
|
+
// and cleanup would skip taskkill entirely.
|
|
398
|
+
let hasSpawned = false;
|
|
399
|
+
terminalProcess.on("spawn", () => {
|
|
400
|
+
hasSpawned = true;
|
|
401
|
+
});
|
|
286
402
|
terminalProcess.on("error", (error) => {
|
|
287
403
|
logger.error("Terminal spawn error", {
|
|
288
404
|
platform: os.platform(),
|
|
289
405
|
command: config.command,
|
|
290
406
|
error: error.message,
|
|
291
407
|
});
|
|
408
|
+
if (hasSpawned) {
|
|
409
|
+
// The window exists; this is a kill() that could not signal it. Leave
|
|
410
|
+
// the title alone so cleanup still runs taskkill against it.
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
413
|
+
// Pre-spawn failure (ENOENT, permissions): reported here rather than by
|
|
414
|
+
// the synchronous catch below, and no window exists. Keeping the title
|
|
415
|
+
// would have the next stop taskkill a phantom and blame the user for it.
|
|
416
|
+
// Guarded on identity - a newer launch may already own the title.
|
|
417
|
+
if (windowsTerminalTitle === launchedTitle) {
|
|
418
|
+
windowsTerminalTitle = undefined;
|
|
419
|
+
}
|
|
420
|
+
// A displaced title from this same failed launch is not a real window
|
|
421
|
+
// either, so it must not linger in the orphan list.
|
|
422
|
+
if (launchedTitle) {
|
|
423
|
+
const at = orphanedWindowsTerminalTitles.indexOf(launchedTitle);
|
|
424
|
+
if (at !== -1) {
|
|
425
|
+
orphanedWindowsTerminalTitles.splice(at, 1);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
scheduleScriptCleanup(scriptPath);
|
|
292
429
|
});
|
|
293
430
|
logger.info("Cross-platform proxy terminal opened successfully", {
|
|
294
431
|
platform: os.platform(),
|
|
@@ -296,6 +433,13 @@ export default async function openProxyTerminal() {
|
|
|
296
433
|
});
|
|
297
434
|
}
|
|
298
435
|
catch (error) {
|
|
436
|
+
// The title is claimed before the script is written and before spawn can
|
|
437
|
+
// fail. Holding on to it after a failed launch would have a later stop
|
|
438
|
+
// taskkill a window that was never opened and tell the user to close it.
|
|
439
|
+
// Same ownership guard as the async error handler above.
|
|
440
|
+
if (windowsTerminalTitle === launchedTitle) {
|
|
441
|
+
windowsTerminalTitle = undefined;
|
|
442
|
+
}
|
|
299
443
|
logger.error("Failed to open proxy terminal", {
|
|
300
444
|
platform: os.platform(),
|
|
301
445
|
error: error instanceof Error ? error.message : String(error),
|
|
@@ -303,17 +447,193 @@ export default async function openProxyTerminal() {
|
|
|
303
447
|
throw error;
|
|
304
448
|
}
|
|
305
449
|
}
|
|
306
|
-
|
|
450
|
+
// `cmd /c start` returns as soon as it has handed the window off, so the new
|
|
451
|
+
// console can still be registering its title when a quick stop arrives. A
|
|
452
|
+
// single taskkill would miss it and the window would be orphaned, so poll
|
|
453
|
+
// briefly rather than give up on the first miss.
|
|
454
|
+
const WINDOWS_CLOSE_TIMEOUT_MS = 5000;
|
|
455
|
+
const WINDOWS_CLOSE_POLL_MS = 250;
|
|
456
|
+
// Neither taskkill's text nor its exit code is trustworthy on its own: the exit
|
|
457
|
+
// code for an unmatched filter is undocumented, and the whole message including
|
|
458
|
+
// the SUCCESS: token is localised. So SUCCESS: is a fast path for the English
|
|
459
|
+
// case only, and windowsTerminalIsGone below is the authority.
|
|
460
|
+
const TASKKILL_SUCCESS = /\bSUCCESS:/i;
|
|
461
|
+
// tasklist prints one row per match - image name, then PID - and a single
|
|
462
|
+
// informational line when nothing matches. The prose is localised; the row
|
|
463
|
+
// shape is not, so an "<image> <pid>" row is the locale-independent signal.
|
|
464
|
+
const TASKLIST_ROW = /^\s*\S+\s+\d+\s/m;
|
|
465
|
+
async function windowsTerminalIsGone(title) {
|
|
466
|
+
try {
|
|
467
|
+
const { stdout } = await execAsync(`tasklist /FI "WINDOWTITLE eq ${title}*" /NH`);
|
|
468
|
+
return !TASKLIST_ROW.test(stdout);
|
|
469
|
+
}
|
|
470
|
+
catch {
|
|
471
|
+
// tasklist unavailable: fall back to believing the taskkill output.
|
|
472
|
+
return false;
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
// Orphans are windows an earlier stop could not close and a later launch then
|
|
476
|
+
// displaced. Every stop has another go at them and drops the ones that are no
|
|
477
|
+
// longer there, so the list cannot grow without bound and a window the user
|
|
478
|
+
// closed by hand stops being reported. One attempt each, no polling: these are
|
|
479
|
+
// old windows, so the start-up race the current window can lose does not apply.
|
|
480
|
+
//
|
|
481
|
+
// A hard failure (taskkill missing, access denied) keeps the entry: that is the
|
|
482
|
+
// case where the window really may still be open.
|
|
483
|
+
async function retryOrphanedWindowsTerminals() {
|
|
484
|
+
if (orphanedWindowsTerminalTitles.length === 0) {
|
|
485
|
+
return;
|
|
486
|
+
}
|
|
487
|
+
const survivors = [];
|
|
488
|
+
for (const title of [...orphanedWindowsTerminalTitles]) {
|
|
489
|
+
try {
|
|
490
|
+
const { stdout, stderr } = await execAsync(`taskkill /FI "WINDOWTITLE eq ${title}*" /T /F`);
|
|
491
|
+
const output = `${stdout}${stderr}`.trim();
|
|
492
|
+
if (TASKKILL_SUCCESS.test(output)) {
|
|
493
|
+
logger.info("Closed a previously orphaned Windows terminal", { title });
|
|
494
|
+
}
|
|
495
|
+
else if (await windowsTerminalIsGone(title)) {
|
|
496
|
+
// The user closed it, or it died with its parent.
|
|
497
|
+
logger.debug("Orphaned Windows terminal is already gone", { title });
|
|
498
|
+
}
|
|
499
|
+
else {
|
|
500
|
+
survivors.push(title);
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
catch (err) {
|
|
504
|
+
const failure = err;
|
|
505
|
+
const output = `${failure?.stdout ?? ""}${failure?.stderr ?? ""}`.trim();
|
|
506
|
+
// A rejection is not proof the window is still there - see
|
|
507
|
+
// windowsTerminalIsGone. Ask tasklist rather than read the exit code.
|
|
508
|
+
if (TASKKILL_SUCCESS.test(output) ||
|
|
509
|
+
(await windowsTerminalIsGone(title))) {
|
|
510
|
+
logger.info("Previously orphaned Windows terminal is gone", { title });
|
|
511
|
+
}
|
|
512
|
+
else {
|
|
513
|
+
survivors.push(title);
|
|
514
|
+
logger.warning("Could not close a previously orphaned terminal", {
|
|
515
|
+
title,
|
|
516
|
+
error: output || (err instanceof Error ? err.message : String(err)),
|
|
517
|
+
});
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
orphanedWindowsTerminalTitles.length = 0;
|
|
522
|
+
orphanedWindowsTerminalTitles.push(...survivors);
|
|
523
|
+
}
|
|
524
|
+
async function closeWindowsTerminal(opts = {}) {
|
|
525
|
+
const timeoutMs = opts.timeoutMs ?? WINDOWS_CLOSE_TIMEOUT_MS;
|
|
526
|
+
const pollMs = opts.pollMs ?? WINDOWS_CLOSE_POLL_MS;
|
|
527
|
+
await retryOrphanedWindowsTerminals();
|
|
528
|
+
if (!windowsTerminalTitle) {
|
|
529
|
+
// Two ways to arrive here: nothing was opened (start failed, or stop ran
|
|
530
|
+
// twice), or earlier windows were opened and displaced. Only the second
|
|
531
|
+
// leaves anything on screen, so only it is worth telling the user about.
|
|
532
|
+
const orphans = [...orphanedWindowsTerminalTitles];
|
|
533
|
+
const reason = orphans.length
|
|
534
|
+
? `${orphans.length} earlier trace terminal(s) were opened and could not be closed`
|
|
535
|
+
: "no trace terminal was opened by this server process";
|
|
536
|
+
logger.warning(`Skipping Windows terminal closure - ${reason}`, {
|
|
537
|
+
orphanedTitles: orphans,
|
|
538
|
+
});
|
|
539
|
+
return { closed: orphans.length === 0, reason, orphanedTitles: orphans };
|
|
540
|
+
}
|
|
541
|
+
const deadline = Date.now() + timeoutMs;
|
|
542
|
+
const title = windowsTerminalTitle;
|
|
543
|
+
let lastOutput = "";
|
|
544
|
+
for (;;) {
|
|
545
|
+
try {
|
|
546
|
+
// The trailing `*` is defensive: the filter is otherwise exact, and
|
|
547
|
+
// anything appending to the console title would put the window out of
|
|
548
|
+
// reach. The nonce is at the end of the title, so it survives it.
|
|
549
|
+
const { stdout, stderr } = await execAsync(`taskkill /FI "WINDOWTITLE eq ${title}*" /T /F`);
|
|
550
|
+
lastOutput = `${stdout}${stderr}`.trim();
|
|
551
|
+
if (TASKKILL_SUCCESS.test(lastOutput) ||
|
|
552
|
+
(await windowsTerminalIsGone(title))) {
|
|
553
|
+
logger.info("Windows terminal closed via window-title filter", {
|
|
554
|
+
title,
|
|
555
|
+
output: lastOutput,
|
|
556
|
+
});
|
|
557
|
+
// This window is gone, so its title is no longer a handle to anything
|
|
558
|
+
// and must not survive into the next stop. Cleared here rather than in
|
|
559
|
+
// closeProxyTerminal because this is the only place that knows the kill
|
|
560
|
+
// was confirmed - `closed` below is false whenever an earlier orphan is
|
|
561
|
+
// still outstanding, even though this window died.
|
|
562
|
+
//
|
|
563
|
+
// By identity: this path has awaited (see the same guard on the error
|
|
564
|
+
// paths), so a newer start may own the title by now.
|
|
565
|
+
if (windowsTerminalTitle === title) {
|
|
566
|
+
windowsTerminalTitle = undefined;
|
|
567
|
+
}
|
|
568
|
+
// A success here says nothing about windows displaced earlier; those
|
|
569
|
+
// are still on screen and still the user's to close.
|
|
570
|
+
// No `title` on success, deliberately: callers read `title` as "this
|
|
571
|
+
// window is still open". Returning the one just killed would have the
|
|
572
|
+
// stop tool tell the user to close an already-terminated window
|
|
573
|
+
// whenever an older orphan kept `closed` false.
|
|
574
|
+
return {
|
|
575
|
+
closed: orphanedWindowsTerminalTitles.length === 0,
|
|
576
|
+
orphanedTitles: [...orphanedWindowsTerminalTitles],
|
|
577
|
+
};
|
|
578
|
+
}
|
|
579
|
+
// No match yet - either the window has not registered its title, or it is
|
|
580
|
+
// already gone. Both look the same here, so keep polling until the
|
|
581
|
+
// deadline and let the caller report the ambiguity.
|
|
582
|
+
}
|
|
583
|
+
catch (err) {
|
|
584
|
+
// A rejection is not proof of failure: taskkill can kill the titled root
|
|
585
|
+
// and still exit non-zero because a descendant could not be killed, and
|
|
586
|
+
// execAsync rejects on any non-zero exit. The rejection carries the same
|
|
587
|
+
// stdout/stderr, so test it before believing the exit code.
|
|
588
|
+
const failure = err;
|
|
589
|
+
const output = `${failure?.stdout ?? ""}${failure?.stderr ?? ""}`.trim();
|
|
590
|
+
lastOutput =
|
|
591
|
+
output ||
|
|
592
|
+
(err instanceof Error ? err.message : String(err ?? "unknown error"));
|
|
593
|
+
if (TASKKILL_SUCCESS.test(lastOutput) ||
|
|
594
|
+
(await windowsTerminalIsGone(title))) {
|
|
595
|
+
logger.info("Windows terminal closed via window-title filter (taskkill exited non-zero)", { title, output: lastOutput });
|
|
596
|
+
if (windowsTerminalTitle === title) {
|
|
597
|
+
windowsTerminalTitle = undefined;
|
|
598
|
+
}
|
|
599
|
+
return {
|
|
600
|
+
closed: orphanedWindowsTerminalTitles.length === 0,
|
|
601
|
+
orphanedTitles: [...orphanedWindowsTerminalTitles],
|
|
602
|
+
};
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
if (Date.now() >= deadline) {
|
|
606
|
+
break;
|
|
607
|
+
}
|
|
608
|
+
await new Promise((resolve) => setTimeout(resolve, pollMs));
|
|
609
|
+
}
|
|
610
|
+
const reason = `taskkill matched no window titled "${title}" within ` +
|
|
611
|
+
`${timeoutMs}ms` +
|
|
612
|
+
(lastOutput ? `: ${lastOutput}` : "");
|
|
613
|
+
logger.warning("Could not close Windows terminal", { title, lastOutput });
|
|
614
|
+
return {
|
|
615
|
+
closed: false,
|
|
616
|
+
title,
|
|
617
|
+
reason,
|
|
618
|
+
orphanedTitles: [...orphanedWindowsTerminalTitles],
|
|
619
|
+
};
|
|
620
|
+
}
|
|
621
|
+
export async function closeProxyTerminal(opts = {}) {
|
|
307
622
|
logger.info("Starting cross-platform proxy terminal closure", {
|
|
308
623
|
platform: os.platform(),
|
|
309
624
|
});
|
|
625
|
+
let result = { closed: true };
|
|
310
626
|
// Kill the spawn process if it exists
|
|
311
627
|
if (terminalProcess) {
|
|
312
628
|
const killResult = terminalProcess.kill();
|
|
313
629
|
logger.debug("Terminal spawn process kill result", { killResult });
|
|
314
630
|
}
|
|
315
|
-
// Handle platform-specific terminal closing
|
|
316
|
-
|
|
631
|
+
// Handle platform-specific terminal closing. Windows is handled first and
|
|
632
|
+
// without a PID: it never captures one (see closeWindowsTerminal).
|
|
633
|
+
if (os.platform() === "win32") {
|
|
634
|
+
result = await closeWindowsTerminal(opts);
|
|
635
|
+
}
|
|
636
|
+
else if (terminalPID) {
|
|
317
637
|
try {
|
|
318
638
|
const platform = os.platform();
|
|
319
639
|
if (platform === "darwin") {
|
|
@@ -360,13 +680,6 @@ export async function closeProxyTerminal() {
|
|
|
360
680
|
logger.info("macOS terminal closed via AppleScript fallback");
|
|
361
681
|
}
|
|
362
682
|
}
|
|
363
|
-
else if (platform === "win32") {
|
|
364
|
-
// Windows: Use taskkill with /T flag to kill process tree
|
|
365
|
-
await execAsync(`taskkill /PID ${terminalPID} /T /F`);
|
|
366
|
-
logger.info("Windows terminal and children closed via taskkill", {
|
|
367
|
-
terminalPID,
|
|
368
|
-
});
|
|
369
|
-
}
|
|
370
683
|
else {
|
|
371
684
|
// Linux: Send SIGTERM to process group
|
|
372
685
|
try {
|
|
@@ -411,20 +724,32 @@ export async function closeProxyTerminal() {
|
|
|
411
724
|
}
|
|
412
725
|
}
|
|
413
726
|
catch (err) {
|
|
727
|
+
const reason = err instanceof Error ? err.message : String(err ?? "unknown error");
|
|
414
728
|
logger.warning("Error during platform-specific terminal closure", {
|
|
415
729
|
platform: os.platform(),
|
|
416
730
|
terminalPID,
|
|
417
|
-
error:
|
|
731
|
+
error: reason,
|
|
418
732
|
});
|
|
733
|
+
result = { closed: false, reason };
|
|
419
734
|
}
|
|
420
735
|
}
|
|
421
736
|
else {
|
|
422
|
-
|
|
737
|
+
// Unix captures a real shell PID from the script; its absence means the
|
|
738
|
+
// terminal was never tracked, so nothing was closed. Say so rather than let
|
|
739
|
+
// the default {closed: true} report a cleanup that did not happen.
|
|
740
|
+
const reason = "no terminal PID was captured, so the terminal could not be closed";
|
|
741
|
+
logger.warning(`${reason} - it may not have been properly tracked`);
|
|
742
|
+
result = { closed: false, reason };
|
|
423
743
|
}
|
|
424
|
-
// Reset state
|
|
744
|
+
// Reset state.
|
|
425
745
|
terminalProcess = undefined;
|
|
426
746
|
terminalPID = undefined;
|
|
747
|
+
// Nothing to reset for the title here: only the win32 path ever sets it, and
|
|
748
|
+
// closeWindowsTerminal clears it on a confirmed kill so a failed close keeps
|
|
749
|
+
// the handle for a retried stop.
|
|
427
750
|
logger.info("Cross-platform proxy terminal closure completed", {
|
|
428
751
|
platform: os.platform(),
|
|
752
|
+
closed: result.closed,
|
|
429
753
|
});
|
|
754
|
+
return result;
|
|
430
755
|
}
|
|
@@ -6,7 +6,7 @@ import { z } from "zod";
|
|
|
6
6
|
*
|
|
7
7
|
* Bare filename only: no path separators, and no commas or whitespace, because the
|
|
8
8
|
* list is joined with commas into `SKYRAMP_UPDATE_SNAPSHOTS` and split again in the
|
|
9
|
-
*
|
|
9
|
+
* test runtime, where `a,b.png` would read as two baselines. One definition shared by
|
|
10
10
|
* both tools so they can never drift apart.
|
|
11
11
|
*/
|
|
12
12
|
export declare const REBASELINE_SNAPSHOT_NAME_RE: RegExp;
|
|
@@ -7,7 +7,7 @@ import { z } from "zod";
|
|
|
7
7
|
*
|
|
8
8
|
* Bare filename only: no path separators, and no commas or whitespace, because the
|
|
9
9
|
* list is joined with commas into `SKYRAMP_UPDATE_SNAPSHOTS` and split again in the
|
|
10
|
-
*
|
|
10
|
+
* test runtime, where `a,b.png` would read as two baselines. One definition shared by
|
|
11
11
|
* both tools so they can never drift apart.
|
|
12
12
|
*/
|
|
13
13
|
export const REBASELINE_SNAPSHOT_NAME_RE = /^[^/\\,\s]+\.png$/i;
|
|
@@ -22,21 +22,11 @@ export function baselineStem(name) {
|
|
|
22
22
|
return path.basename(name).replace(/\.png$/i, "");
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
|
-
* Playwright's default snapshot layout
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* `snapshotPathTemplate`
|
|
29
|
-
*
|
|
30
|
-
* relocate its snapshots out from under this rule.
|
|
31
|
-
*
|
|
32
|
-
* The executor's generated config declares no `projects`, but runner.sh passes
|
|
33
|
-
* `--browser=chromium`, so Playwright names the implicit project "chromium" and a
|
|
34
|
-
* refresh writes `<stem>-chromium-linux.png` (observed end to end on demoshop).
|
|
35
|
-
* Baselines the Skyramp executor produced therefore round-trip exactly. A baseline
|
|
36
|
-
* a repo's own CI wrote under another project name (`<stem>-Desktop-Chrome-linux.png`)
|
|
37
|
-
* is a different file: the executor's refresh adds its own and leaves that one as
|
|
38
|
-
* it was — the tool reports what it rewrote, and the repo's own suite is out of
|
|
39
|
-
* scope for skyramp_execute_test (which never runs it).
|
|
25
|
+
* Playwright's default snapshot layout: the baseline for `<stem>.png` lives in
|
|
26
|
+
* `<spec>-snapshots/` as `<stem>-<project>-<platform>.png` (or `<stem>-<platform>.png`
|
|
27
|
+
* with no project, or `<stem>.png` under a custom `snapshotPathTemplate`). A repo
|
|
28
|
+
* config that sets another `snapshotPathTemplate` moves its baselines out from under
|
|
29
|
+
* this rule; the tool then reports them as not refreshed rather than claim a refresh.
|
|
40
30
|
*
|
|
41
31
|
* Anchored so a longer baseline cannot vouch for a shorter one: `page-001-wide-chromium-linux.png`
|
|
42
32
|
* belongs to `page-001-wide.png` and must not satisfy a claim on `page-001.png`.
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* Every skip is logged at debug with its reason so a missing guard is diagnosable.
|
|
27
27
|
*/
|
|
28
28
|
import * as fs from "fs";
|
|
29
|
-
import { extractAddedAttributeValues, extractAttributeChanges } from "./frontendSelectors.js";
|
|
29
|
+
import { extractAddedAttributeValues, extractAttributeChanges, } from "./frontendSelectors.js";
|
|
30
30
|
import { escapeRegExp } from "./regex.js";
|
|
31
31
|
import { logger } from "./logger.js";
|
|
32
32
|
function defaultReadFile(absPath) {
|
|
@@ -46,7 +46,8 @@ export function isEnforcedReportLanguage(language) {
|
|
|
46
46
|
* ultimately caller-supplied, and a name lookup must never throw. */
|
|
47
47
|
export function reportLanguageDisplayName(language) {
|
|
48
48
|
try {
|
|
49
|
-
return new Intl.DisplayNames(["en"], { type: "language" }).of(language) ??
|
|
49
|
+
return (new Intl.DisplayNames(["en"], { type: "language" }).of(language) ??
|
|
50
|
+
language);
|
|
50
51
|
}
|
|
51
52
|
catch {
|
|
52
53
|
return language;
|
|
@@ -58,11 +59,36 @@ const UNTRANSLATED_WORDS = new Set([
|
|
|
58
59
|
// Exact enum values only. NOT "passed"/"failed" — those are ordinary English
|
|
59
60
|
// prose and are exactly what leaks in pytest summaries ("1 passed in 0.88s",
|
|
60
61
|
// "failed: count was 13"; see letsramp/api-insight#215).
|
|
61
|
-
"pass",
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"
|
|
62
|
+
"pass",
|
|
63
|
+
"fail",
|
|
64
|
+
"skipped",
|
|
65
|
+
"error",
|
|
66
|
+
"unknown",
|
|
67
|
+
"critical",
|
|
68
|
+
"high",
|
|
69
|
+
"medium",
|
|
70
|
+
"low",
|
|
71
|
+
"get",
|
|
72
|
+
"post",
|
|
73
|
+
"put",
|
|
74
|
+
"patch",
|
|
75
|
+
"delete",
|
|
76
|
+
"head",
|
|
77
|
+
"options",
|
|
78
|
+
"ui",
|
|
79
|
+
"e2e",
|
|
80
|
+
"api",
|
|
81
|
+
"contract",
|
|
82
|
+
"integration",
|
|
83
|
+
"smoke",
|
|
84
|
+
"fuzz",
|
|
85
|
+
"load",
|
|
86
|
+
"mock",
|
|
87
|
+
"http",
|
|
88
|
+
"https",
|
|
89
|
+
"json",
|
|
90
|
+
"yaml",
|
|
91
|
+
"ok",
|
|
66
92
|
]);
|
|
67
93
|
/** A field must contain at least this many plain English prose words (after the
|
|
68
94
|
* stripping below) to be flagged — so identifier-and-timing-only details like
|
|
@@ -81,7 +107,9 @@ function countProseWords(text, script) {
|
|
|
81
107
|
const withoutCode = text.replace(/`[^`]*`/g, " ");
|
|
82
108
|
let proseWords = 0;
|
|
83
109
|
for (const raw of withoutCode.split(/\s+/)) {
|
|
84
|
-
const token = raw
|
|
110
|
+
const token = raw
|
|
111
|
+
.replace(/^[^A-Za-z0-9]+/, "")
|
|
112
|
+
.replace(/[^A-Za-z0-9]+$/, "");
|
|
85
113
|
// Pure alphabetic words only: anything with digits or interior punctuation
|
|
86
114
|
// (paths, file names, snake_case, versions, "10.8s") is not prose.
|
|
87
115
|
if (token.length < 2 || !/^[A-Za-z]+$/.test(token))
|
|
@@ -38,14 +38,18 @@ export interface UnchangedFileClaimsInput {
|
|
|
38
38
|
newTests: {
|
|
39
39
|
testId?: string;
|
|
40
40
|
fileName?: string;
|
|
41
|
-
repository
|
|
41
|
+
repository: string;
|
|
42
42
|
}[];
|
|
43
43
|
/** Maintenance verdicts (server-derived from skyramp_actions). `pomFile`, when set, is
|
|
44
44
|
* the file the edit actually lands in — see the UPDATE rule below. */
|
|
45
45
|
verdicts: Pick<MaintenanceActionCore, "action" | "testFilePath" | "pomFile" | "rebaselineSnapshots" | "rebaselineOnly">[];
|
|
46
46
|
/** owner/repo of the primary repo — used to exempt cross-repo newTest claims
|
|
47
47
|
* whose files live in a different checkout. */
|
|
48
|
-
primaryRepository
|
|
48
|
+
primaryRepository: string;
|
|
49
|
+
/** Every owner/repo this run analyzed, the primary included. A newTest claim
|
|
50
|
+
* attributed outside this set names no checkout at all, so exempting it would
|
|
51
|
+
* let an uncreated test ship behind a typo. */
|
|
52
|
+
knownRepositories: string[];
|
|
49
53
|
/** SKYR-4250: a plan-only eval run generates nothing — `newTestsCreated`
|
|
50
54
|
* declares the approved GENERATE list — so no declaration can be backed by
|
|
51
55
|
* a working-tree change. Exempts the declaration half only; a maintenance
|
|
@@ -81,17 +85,19 @@ export interface UnchangedFileClaimsInput {
|
|
|
81
85
|
* - DELETE verdicts — applied deterministically by the delivery step, not
|
|
82
86
|
* necessarily reflected in the tree at report time.
|
|
83
87
|
* - IGNORE / VERIFY verdicts — assert that NO edit was needed.
|
|
84
|
-
* - Claims for files outside this checkout (
|
|
85
|
-
*
|
|
88
|
+
* - Claims for files outside this checkout (a `repository` naming another
|
|
89
|
+
* checkout THIS RUN ANALYZED, or an absolute path resolving outside
|
|
90
|
+
* `repoRoot`) — a different checkout owns them. A name the run does not know
|
|
91
|
+
* owns nothing, so it is reported rather than exempted.
|
|
86
92
|
*/
|
|
87
93
|
export declare function findUnchangedFileClaims(input: UnchangedFileClaimsInput): string[];
|
|
88
94
|
/** One checkout of the run, and the owner/repo it holds. */
|
|
89
95
|
export interface RepoCheckout {
|
|
90
96
|
/** Absolute checkout path. */
|
|
91
97
|
root: string;
|
|
92
|
-
/** owner/repo of this checkout
|
|
93
|
-
*
|
|
94
|
-
repository
|
|
98
|
+
/** owner/repo of this checkout. The primary takes it from the root metadata,
|
|
99
|
+
* a related repo from its own section key. */
|
|
100
|
+
repository: string;
|
|
95
101
|
/** True for the run's primary checkout — the repo an entry with no `repository`
|
|
96
102
|
* already means downstream, so its citations are never stamped. */
|
|
97
103
|
primary?: boolean;
|
|
@@ -105,7 +111,7 @@ export interface SourceCitationInput {
|
|
|
105
111
|
issues: {
|
|
106
112
|
sourceFile?: string;
|
|
107
113
|
sourceSymbol?: string;
|
|
108
|
-
repository
|
|
114
|
+
repository: string;
|
|
109
115
|
}[];
|
|
110
116
|
}
|
|
111
117
|
export interface SourceCitationCheck {
|