@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
|
@@ -22,14 +22,13 @@ export declare function generatedSiblings(testFile: string, spec: UtilsLanguageS
|
|
|
22
22
|
}): Promise<SiblingFile[]>;
|
|
23
23
|
/** An SDK request call. Global: clone with `new RegExp(...)` before `matchAll`. */
|
|
24
24
|
export declare const REQUEST_CALL_RE: RegExp;
|
|
25
|
-
|
|
25
|
+
interface InlineSiteBase {
|
|
26
26
|
/** Absolute path of the sibling test. */
|
|
27
27
|
file: string;
|
|
28
|
-
/** 1-based line of the request call. */
|
|
28
|
+
/** 1-based line of the request call, or of the first action of the sequence. */
|
|
29
29
|
line: number;
|
|
30
|
-
method
|
|
31
|
-
|
|
32
|
-
/** The utils helper that wraps the same method+path. */
|
|
30
|
+
/** The utils helper that wraps the same method+path, or performs the same
|
|
31
|
+
* action sequence. */
|
|
33
32
|
helper: string;
|
|
34
33
|
/** Absolute path of the utils file that defines `helper` — with several modules in
|
|
35
34
|
* scope, the advisory names this one, not the list. */
|
|
@@ -39,6 +38,19 @@ export interface InlineCallSite {
|
|
|
39
38
|
* block-by-block. */
|
|
40
39
|
localHelper?: string;
|
|
41
40
|
}
|
|
41
|
+
/** An inline copy of a shared step: one request keyed by route (the API family), or
|
|
42
|
+
* a run of actions keyed by action sequence (the browser family). */
|
|
43
|
+
export type InlineCallSite = (InlineSiteBase & {
|
|
44
|
+
kind: "request";
|
|
45
|
+
method: string;
|
|
46
|
+
path: string;
|
|
47
|
+
}) | (InlineSiteBase & {
|
|
48
|
+
kind: "sequence";
|
|
49
|
+
/** The action key the sequence and the helper share (see actionKeyOf). */
|
|
50
|
+
actionKey: string;
|
|
51
|
+
/** 1-based line of the sequence's last action. */
|
|
52
|
+
endLine: number;
|
|
53
|
+
});
|
|
42
54
|
/**
|
|
43
55
|
* Inline request calls in OTHER Skyramp-generated tests beside `testFile` that a
|
|
44
56
|
* utils helper already wraps — the reuse the prompt asks for and the agent does not
|
|
@@ -54,7 +66,9 @@ export interface InlineCallSite {
|
|
|
54
66
|
* normalised path, nothing else — literals are what the call's arguments are for.
|
|
55
67
|
*
|
|
56
68
|
* Advisory by design: it names a change to a PRE-EXISTING test, which the maintenance
|
|
57
|
-
* flow owns, so it informs rather than gates. Never throws.
|
|
69
|
+
* flow owns, so it informs rather than gates. Never throws. The API family's scan;
|
|
70
|
+
* findSiblingInlineActionSites is the browser family's, and inlineCallSiteFamily
|
|
71
|
+
* decides which runs.
|
|
58
72
|
*/
|
|
59
73
|
export declare function findSiblingInlineCallSites(testFile: string, utilsFiles: string[], _helpers: UtilsHelper[], spec: UtilsLanguageSpec, preReadSiblings?: SiblingFile[]): Promise<InlineCallSite[]>;
|
|
60
74
|
/** One operation written in two or more sibling generated specs that no shared
|
|
@@ -95,6 +109,10 @@ export interface UnextractedSite {
|
|
|
95
109
|
* different question. Advisory by design — consolidation is a judgement. Never throws.
|
|
96
110
|
*/
|
|
97
111
|
export declare function findUnextractedDuplicates(testFile: string, utilsFiles: string[], spec: UtilsLanguageSpec, preReadSiblings?: SiblingFile[]): Promise<UnextractedDuplicate[]>;
|
|
112
|
+
/** The generated siblings less the utils files themselves (a utils file carries no
|
|
113
|
+
* codegen marker, so this is belt and braces). Pre-read siblings are used as given —
|
|
114
|
+
* the caller's walk decides whether the spec itself is among them. */
|
|
115
|
+
export declare function nonUtilsSiblings(testFile: string, utilsFiles: string[], spec: UtilsLanguageSpec, preReadSiblings: SiblingFile[] | undefined, includeSelf: boolean): Promise<SiblingFile[]>;
|
|
98
116
|
/** Lines after a call scanned for its schema assertion — the generated shape puts it
|
|
99
117
|
* immediately after the status-code assertion. */
|
|
100
118
|
export declare const SCHEMA_SCAN_LINES = 12;
|
|
@@ -135,7 +153,13 @@ export declare function queryKeys(call: string): Set<string>;
|
|
|
135
153
|
* this is a TS/JS-only change. */
|
|
136
154
|
export declare function callShape(call: string): Set<string>;
|
|
137
155
|
/** The keyword names of a request call (`path=`, `method=`, `query_params=` … / TS
|
|
138
|
-
* object keys), less the liftable ones — a cheap normalised call shape.
|
|
156
|
+
* object keys), less the liftable ones — a cheap normalised call shape. Read from a
|
|
157
|
+
* string-blanked copy: a value carries colons and equals signs of its own — a URL
|
|
158
|
+
* scheme (`"https://…"`), a query string or a field expression in a path literal
|
|
159
|
+
* (`"/search?q=name:foo"`) — and reading one as a keyword invents an entry on
|
|
160
|
+
* whichever side spells the value that way, so two calls carrying the same keywords
|
|
161
|
+
* compare as different shapes. */
|
|
139
162
|
export declare function shapeKeys(call: string): Set<string>;
|
|
140
163
|
/** Text of the parenthesised argument list starting at the `(` at `open`. */
|
|
141
164
|
export declare function callText(content: string, open: number): string;
|
|
165
|
+
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as fs from "fs";
|
|
2
2
|
import * as path from "path";
|
|
3
3
|
import { SKYRAMP_UTILS_HEADER } from "../utils.js";
|
|
4
|
-
import { blankCommentsAndStrings, isSingleLiteral, parseUtilsFile, } from "./parse.js";
|
|
4
|
+
import { blankCommentsAndStrings, isSingleLiteral, localHelperAt, localHelpersOf, parseUtilsFile, } from "./parse.js";
|
|
5
5
|
import { normalizePath } from "./language-spec.js";
|
|
6
6
|
import { realpath } from "./locate.js";
|
|
7
7
|
import { escapeRegExp } from "../regex.js";
|
|
@@ -66,7 +66,9 @@ export const REQUEST_CALL_RE = /\b(?:send_request|sendRequest)\s*\(/g;
|
|
|
66
66
|
* normalised path, nothing else — literals are what the call's arguments are for.
|
|
67
67
|
*
|
|
68
68
|
* Advisory by design: it names a change to a PRE-EXISTING test, which the maintenance
|
|
69
|
-
* flow owns, so it informs rather than gates. Never throws.
|
|
69
|
+
* flow owns, so it informs rather than gates. Never throws. The API family's scan;
|
|
70
|
+
* findSiblingInlineActionSites is the browser family's, and inlineCallSiteFamily
|
|
71
|
+
* decides which runs.
|
|
70
72
|
*/
|
|
71
73
|
export async function findSiblingInlineCallSites(testFile, utilsFiles, _helpers, spec, preReadSiblings) {
|
|
72
74
|
const byRoute = await helperRoutes(utilsFiles, spec);
|
|
@@ -82,7 +84,7 @@ export async function findSiblingInlineCallSites(testFile, utilsFiles, _helpers,
|
|
|
82
84
|
const match = byRoute.get(c.key);
|
|
83
85
|
if (!match)
|
|
84
86
|
continue;
|
|
85
|
-
if (!sameShape(
|
|
87
|
+
if (!sameShape(inlineShape(c.call), match.keys))
|
|
86
88
|
continue;
|
|
87
89
|
if (!substitutable(match, {
|
|
88
90
|
fields: requestFields(content, c.call, c.start),
|
|
@@ -91,6 +93,7 @@ export async function findSiblingInlineCallSites(testFile, utilsFiles, _helpers,
|
|
|
91
93
|
}))
|
|
92
94
|
continue;
|
|
93
95
|
out.push({
|
|
96
|
+
kind: "request",
|
|
94
97
|
file,
|
|
95
98
|
line: c.line,
|
|
96
99
|
method: c.method,
|
|
@@ -166,7 +169,7 @@ async function helperRoutes(utilsFiles, spec) {
|
|
|
166
169
|
byRoute.set(`${owner.method} ${owner.normalizedPath}`, {
|
|
167
170
|
helper: owner.name,
|
|
168
171
|
utilsFile,
|
|
169
|
-
keys:
|
|
172
|
+
keys: inlineShape(call),
|
|
170
173
|
fields: requestFields(content, call, start),
|
|
171
174
|
query: queryKeys(call),
|
|
172
175
|
schemaChecked: hasSchemaCheck(content, owner.line, owner.endLine),
|
|
@@ -178,7 +181,7 @@ async function helperRoutes(utilsFiles, spec) {
|
|
|
178
181
|
/** The generated siblings less the utils files themselves (a utils file carries no
|
|
179
182
|
* codegen marker, so this is belt and braces). Pre-read siblings are used as given —
|
|
180
183
|
* the caller's walk decides whether the spec itself is among them. */
|
|
181
|
-
async function nonUtilsSiblings(testFile, utilsFiles, spec, preReadSiblings, includeSelf) {
|
|
184
|
+
export async function nonUtilsSiblings(testFile, utilsFiles, spec, preReadSiblings, includeSelf) {
|
|
182
185
|
const utilsSet = new Set(await Promise.all(utilsFiles.map((f) => realpath(f))));
|
|
183
186
|
return (preReadSiblings ??
|
|
184
187
|
(await generatedSiblings(testFile, spec, { includeSelf }))).filter((sib) => !utilsSet.has(path.resolve(sib.file)));
|
|
@@ -189,7 +192,7 @@ async function nonUtilsSiblings(testFile, utilsFiles, spec, preReadSiblings, inc
|
|
|
189
192
|
* commented-out or quoted request is never a site and a `)` inside a string never
|
|
190
193
|
* truncates the argument text, which is read from the original. */
|
|
191
194
|
function requestCallsIn(content, spec) {
|
|
192
|
-
const localHelpers =
|
|
195
|
+
const localHelpers = localHelpersOf(content, spec);
|
|
193
196
|
const scan = blankCommentsAndStrings(content, spec);
|
|
194
197
|
const out = [];
|
|
195
198
|
for (const m of scan.matchAll(REQUEST_CALL_RE)) {
|
|
@@ -205,7 +208,7 @@ function requestCallsIn(content, spec) {
|
|
|
205
208
|
if (!method || !pm || !isSingleLiteral(call, pm))
|
|
206
209
|
continue;
|
|
207
210
|
const p = pm[1];
|
|
208
|
-
const owner = localHelpers
|
|
211
|
+
const owner = localHelperAt(localHelpers, line);
|
|
209
212
|
out.push({
|
|
210
213
|
line,
|
|
211
214
|
start,
|
|
@@ -356,11 +359,25 @@ export function requestFields(content, call, callAt) {
|
|
|
356
359
|
}
|
|
357
360
|
const OVERRIDE_OBJECT_RE = /\b(?:data_override|dataOverride)\s*[=:]\s*\{/g;
|
|
358
361
|
const BODY_OBJECT_RE = /\b(?:body|data)\s*[=:]\s*\{/g;
|
|
359
|
-
|
|
362
|
+
/** The keyword a query object is written under, in either spelling. */
|
|
363
|
+
const QUERY_KEYWORDS = ["query_params", "queryParams"];
|
|
364
|
+
const QUERY_OBJECT_RE = new RegExp(`\\b(?:${QUERY_KEYWORDS.join("|")})\\s*[=:]\\s*\\{`, "g");
|
|
365
|
+
/** An object ENTRY whose key queryKeys cannot enumerate: a spread or an unpack of
|
|
366
|
+
* another value (`{ ...params }`, `{**params}`), or a computed key (`{ [k]: v }`).
|
|
367
|
+
* Anchored to an entry position, so an array VALUE (`{ fields: ["id"] }`, which the
|
|
368
|
+
* generated code writes) and a `**` exponent inside one are not mistaken for it. */
|
|
369
|
+
const DYNAMIC_ENTRY_RE = /[{,]\s*(?:\.\.\.|\*\*|\[)/;
|
|
370
|
+
/** The query argument however it is written — the object form above, or a reference
|
|
371
|
+
* (`query_params=params`) whose contents are not at the call. */
|
|
372
|
+
const QUERY_ARGUMENT_RE = new RegExp(`\\b(?:${QUERY_KEYWORDS.join("|")})\\s*[=:]`, "g");
|
|
360
373
|
/** A bare identifier between `{`/`,` and `,`/`}` — TS object shorthand. */
|
|
361
374
|
const SHORTHAND_KEY_RE = /(?:^|[{,])\s*([A-Za-z_$][\w$]*)\s*(?=[,}])/g;
|
|
362
|
-
/** One quoted string, any of the three
|
|
363
|
-
|
|
375
|
+
/** One quoted string: a Python triple quote, or any of the three single-character
|
|
376
|
+
* quote kinds, escapes honoured. The triple forms come FIRST — read as one quote,
|
|
377
|
+
* a triple delimiter opens an EMPTY string at its first two characters and leaves
|
|
378
|
+
* the payload outside any literal, where every scan that reads a blanked copy sees
|
|
379
|
+
* its contents as code. Generated Python passes the request body this way. */
|
|
380
|
+
const STRING_LITERAL_RE = /("""|'''|["'`])(?:\\.|(?!\1)[^\\])*\1/g;
|
|
364
381
|
/** The key names written in one `{…}` object literal: quoted (`"page":`, either
|
|
365
382
|
* language), unquoted (`page:`, TS) and shorthand (`page,`, TS). The unquoted and
|
|
366
383
|
* shorthand passes run with string CONTENTS blanked, so `q: "a, b: c"` names one
|
|
@@ -408,7 +425,7 @@ function keyedObjects(call, keyRe) {
|
|
|
408
425
|
/** `text` with the CONTENTS of every string literal replaced by spaces, quotes kept,
|
|
409
426
|
* length preserved — so offsets found on the copy index into the original. */
|
|
410
427
|
function blankStringContents(text) {
|
|
411
|
-
return text.replace(STRING_LITERAL_RE, (
|
|
428
|
+
return text.replace(STRING_LITERAL_RE, (lit, quote) => quote + " ".repeat(Math.max(0, lit.length - 2 * quote.length)) + quote);
|
|
412
429
|
}
|
|
413
430
|
/** The call shape both sibling scans compare: shapeKeys of the call with the interior
|
|
414
431
|
* of every keyed `{…}` value blanked, so the keys INSIDE a body, path-params or
|
|
@@ -422,6 +439,51 @@ function blankStringContents(text) {
|
|
|
422
439
|
export function callShape(call) {
|
|
423
440
|
return shapeKeys(withoutKeyedLiterals(call));
|
|
424
441
|
}
|
|
442
|
+
/**
|
|
443
|
+
* The shape the INLINE CALL-SITE scan compares: `callShape` less the query argument.
|
|
444
|
+
*
|
|
445
|
+
* A query object is a literal the merge rule lifts, exactly as a body is — a site
|
|
446
|
+
* writing `?status=paid` against a helper that sends no query differs from it by one
|
|
447
|
+
* value, and the repair is a `status` parameter. Whether the helper can stand in is
|
|
448
|
+
* the question `substitutable` answers, and it already applies the body rule to the
|
|
449
|
+
* query keys; while the keyword itself counted as shape, the two keyword sets differed
|
|
450
|
+
* by one entry, `sameShape` discarded the site, and `substitutable` never saw it.
|
|
451
|
+
*
|
|
452
|
+
* Only this scan sets it aside. findUnextractedDuplicates asks whether a helper should
|
|
453
|
+
* EXIST, where two sites that carry different options are two shapes rather than one
|
|
454
|
+
* literal to lift, so it keeps `callShape`. And LIFTABLE_KEYS is left alone: it also
|
|
455
|
+
* feeds retrofit-equivalence, which reads `shapeKeys` as an exact-match gate on an
|
|
456
|
+
* edit already made, where a dropped query IS a changed request.
|
|
457
|
+
*/
|
|
458
|
+
function inlineShape(call) {
|
|
459
|
+
const keys = callShape(call);
|
|
460
|
+
if (!queryIsReadable(call))
|
|
461
|
+
return keys;
|
|
462
|
+
for (const k of QUERY_KEYWORDS)
|
|
463
|
+
keys.delete(k);
|
|
464
|
+
return keys;
|
|
465
|
+
}
|
|
466
|
+
/** Whether every query argument the call carries is a `{…}` written at the call, so
|
|
467
|
+
* queryKeys can read its names. A reference (`query_params=params`) yields an EMPTY
|
|
468
|
+
* key set, which is what a call sending NO query yields: setting the keyword aside
|
|
469
|
+
* would have substitutable compare nothing against nothing and offer the helper to a
|
|
470
|
+
* site that sends no query, when substituting it adds whatever the reference holds.
|
|
471
|
+
* So the keyword stays in the shape whenever its value cannot be read, and the site
|
|
472
|
+
* is discarded as it was before — the scan only ever drops candidates. */
|
|
473
|
+
function queryIsReadable(call) {
|
|
474
|
+
// Counted at OPTION level: a request field of the payload may be named
|
|
475
|
+
// `queryParams`, and reading that as a second, unreadable query argument discarded
|
|
476
|
+
// a site whose own query argument is a plain object literal. withoutKeyedLiterals
|
|
477
|
+
// blanks each keyed value's interior while keeping its own braces, which is the
|
|
478
|
+
// level callShape reads the keywords at.
|
|
479
|
+
const scan = blankStringContents(withoutKeyedLiterals(call));
|
|
480
|
+
if ([...scan.matchAll(QUERY_ARGUMENT_RE)].length !==
|
|
481
|
+
[...scan.matchAll(QUERY_OBJECT_RE)].length)
|
|
482
|
+
return false;
|
|
483
|
+
// An object literal is not the same as a readable one. The interiors are blanked in
|
|
484
|
+
// `scan`, so the entries are read from the original.
|
|
485
|
+
return !keyedObjects(call, QUERY_OBJECT_RE).some((o) => DYNAMIC_ENTRY_RE.test(blankStringContents(o)));
|
|
486
|
+
}
|
|
425
487
|
/** `call` with the interior of every keyed `{…}` value blanked, offsets kept. */
|
|
426
488
|
function withoutKeyedLiterals(call) {
|
|
427
489
|
// Balanced on the string-blanked copy (see keyedObjects); the copy and the output
|
|
@@ -469,10 +531,15 @@ const LIFTABLE_KEYS = new Set([
|
|
|
469
531
|
"pathParams",
|
|
470
532
|
]);
|
|
471
533
|
/** The keyword names of a request call (`path=`, `method=`, `query_params=` … / TS
|
|
472
|
-
* object keys), less the liftable ones — a cheap normalised call shape.
|
|
534
|
+
* object keys), less the liftable ones — a cheap normalised call shape. Read from a
|
|
535
|
+
* string-blanked copy: a value carries colons and equals signs of its own — a URL
|
|
536
|
+
* scheme (`"https://…"`), a query string or a field expression in a path literal
|
|
537
|
+
* (`"/search?q=name:foo"`) — and reading one as a keyword invents an entry on
|
|
538
|
+
* whichever side spells the value that way, so two calls carrying the same keywords
|
|
539
|
+
* compare as different shapes. */
|
|
473
540
|
export function shapeKeys(call) {
|
|
474
541
|
const keys = new Set();
|
|
475
|
-
for (const m of call.matchAll(/\b([A-Za-z_]\w*)\s*[=:](?![=])/g)) {
|
|
542
|
+
for (const m of blankStringContents(call).matchAll(/\b([A-Za-z_]\w*)\s*[=:](?![=])/g)) {
|
|
476
543
|
if (!LIFTABLE_KEYS.has(m[1]))
|
|
477
544
|
keys.add(m[1]);
|
|
478
545
|
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a DELIVERED test file imports from the shared utils modules beside it —
|
|
3
|
+
* read from the file, with no run state and no verify pass behind it.
|
|
4
|
+
*
|
|
5
|
+
* This exists because the report's shared-helper record was keyed on the agent
|
|
6
|
+
* having called `skyramp_reuse_code` with `verify: true` on that file. A spec that
|
|
7
|
+
* imports and calls a helper from a header-bearing module reused it whether or not
|
|
8
|
+
* anything verified it, and a record keyed on the tool's own activity describes the
|
|
9
|
+
* tool rather than the product: every contract row in the 2026-09-18 cohort read
|
|
10
|
+
* `reuse: null` over a file that imported three helpers and called them.
|
|
11
|
+
*
|
|
12
|
+
* Deliberately NOT a second verifier. It runs no gate, produces no verdict, and
|
|
13
|
+
* cannot refuse a report — `verifyUtils` remains the only thing that judges a
|
|
14
|
+
* module. The one fact it establishes is which helpers the delivered file takes
|
|
15
|
+
* from which module, which is exactly the fact the record was missing.
|
|
16
|
+
*
|
|
17
|
+
* The same "imported AND defined" rule `verifyUtils` applies: a name the spec
|
|
18
|
+
* imports that the module does not define is a broken import, not reuse.
|
|
19
|
+
*/
|
|
20
|
+
export interface DeliveredImports {
|
|
21
|
+
/** Utils files located for the spec (absolute, sorted). Empty means no shared
|
|
22
|
+
* module exists beside it or in its imports — which is a finding, not a failure. */
|
|
23
|
+
utilsFiles: string[];
|
|
24
|
+
/** Names the spec imports from those files that the files define, sorted and
|
|
25
|
+
* deduplicated across files. Empty with a non-empty `utilsFiles` means a module
|
|
26
|
+
* exists and this spec takes nothing from it. */
|
|
27
|
+
importedNames: string[];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Read `testFile`'s imports of its shared modules, or state why it could not be done.
|
|
31
|
+
*
|
|
32
|
+
* Returns a `reason` rather than throwing or answering an empty result, because the
|
|
33
|
+
* caller writes that reason into the report row: an empty answer and an unreadable
|
|
34
|
+
* file are different facts, and a row that cannot tell them apart is the `null` this
|
|
35
|
+
* function exists to replace.
|
|
36
|
+
*/
|
|
37
|
+
export declare function readDeliveredImports(params: {
|
|
38
|
+
testFile: string;
|
|
39
|
+
language?: string;
|
|
40
|
+
cwd?: string;
|
|
41
|
+
}): Promise<DeliveredImports | {
|
|
42
|
+
reason: string;
|
|
43
|
+
}>;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import * as fs from "fs";
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
import { logger } from "../logger.js";
|
|
4
|
+
import { locateUtilsFiles } from "./locate.js";
|
|
5
|
+
import { parseUtilsFile } from "./parse.js";
|
|
6
|
+
import { utilsSpecFor, utilsSpecForFile } from "./language-spec.js";
|
|
7
|
+
/**
|
|
8
|
+
* Read `testFile`'s imports of its shared modules, or state why it could not be done.
|
|
9
|
+
*
|
|
10
|
+
* Returns a `reason` rather than throwing or answering an empty result, because the
|
|
11
|
+
* caller writes that reason into the report row: an empty answer and an unreadable
|
|
12
|
+
* file are different facts, and a row that cannot tell them apart is the `null` this
|
|
13
|
+
* function exists to replace.
|
|
14
|
+
*/
|
|
15
|
+
export async function readDeliveredImports(params) {
|
|
16
|
+
const spec = utilsSpecFor(params.language) ?? utilsSpecForFile(params.testFile);
|
|
17
|
+
if (!spec)
|
|
18
|
+
return {
|
|
19
|
+
reason: `no shared-helper support for this file type (${path.extname(params.testFile) || "no extension"})`,
|
|
20
|
+
};
|
|
21
|
+
let specContent;
|
|
22
|
+
try {
|
|
23
|
+
specContent = await fs.promises.readFile(params.testFile, "utf8");
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
return {
|
|
27
|
+
reason: `the delivered file could not be read (${err?.code ?? String(err)})`,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
let utilsFiles;
|
|
31
|
+
try {
|
|
32
|
+
utilsFiles = await locateUtilsFiles(params);
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
// locateUtilsFiles is documented never to throw; if that ever changes, the row
|
|
36
|
+
// says so rather than claiming the spec imports nothing.
|
|
37
|
+
logger.warning("Could not locate shared utils files for a delivered test", {
|
|
38
|
+
testFile: params.testFile,
|
|
39
|
+
error: String(err),
|
|
40
|
+
});
|
|
41
|
+
return {
|
|
42
|
+
reason: "the shared modules beside this test could not be located",
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
const importedNames = new Set();
|
|
46
|
+
// Built from the modules actually READ, never from the located list. A module that
|
|
47
|
+
// is named but whose helpers were never counted publishes "this test takes nothing
|
|
48
|
+
// from it" over an unknown — the same false zero this reader exists to stop.
|
|
49
|
+
const read = [];
|
|
50
|
+
for (const file of utilsFiles) {
|
|
51
|
+
let content;
|
|
52
|
+
try {
|
|
53
|
+
content = await fs.promises.readFile(file, "utf8");
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
// A module that vanished between locating and reading is the ordinary race, not
|
|
57
|
+
// a fault: it leaves the list with the rest, and the others still answer.
|
|
58
|
+
if (err?.code === "ENOENT")
|
|
59
|
+
continue;
|
|
60
|
+
// Anything else means a module exists that cannot be read, so what this spec
|
|
61
|
+
// takes from it is unknown. A partial answer cannot be represented here, and
|
|
62
|
+
// a silent one would be read as a measured zero.
|
|
63
|
+
//
|
|
64
|
+
// Untested, and untestable from outside: `locateUtilsFiles` screens every
|
|
65
|
+
// candidate with `hasUtilsHeader`, which opens and reads it, so a module that
|
|
66
|
+
// cannot be read is never located and this branch is not reached. It stands as
|
|
67
|
+
// the guard that keeps `read` below honest if that screen ever changes.
|
|
68
|
+
logger.warning("Could not read a located utils file for the report", {
|
|
69
|
+
file,
|
|
70
|
+
error: String(err),
|
|
71
|
+
});
|
|
72
|
+
return {
|
|
73
|
+
reason: `a shared helper module beside this test could not be read (${path.basename(file)}: ${err?.code ?? String(err)})`,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
read.push(file);
|
|
77
|
+
const defined = new Set(parseUtilsFile(content, spec).map((h) => h.name));
|
|
78
|
+
const stem = path.basename(file).replace(/\.[^.]+$/, "");
|
|
79
|
+
for (const n of spec.importedNames(specContent, stem))
|
|
80
|
+
if (defined.has(n))
|
|
81
|
+
importedNames.add(n);
|
|
82
|
+
}
|
|
83
|
+
return { utilsFiles: read, importedNames: [...importedNames].sort() };
|
|
84
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { type UtilsLanguage } from "./language-spec.js";
|
|
2
|
+
/**
|
|
3
|
+
* A fixed sleep inside a shared helper — a wait for a duration rather than for a
|
|
4
|
+
* condition, written into the module every test imports.
|
|
5
|
+
*
|
|
6
|
+
* The substance-floor row of the code-reuse plan measures whether a shared helper
|
|
7
|
+
* holds a whole step or something one scenario's narrative needs. A sleep is the
|
|
8
|
+
* form that costs every later caller: it is inherited by every test that imports the
|
|
9
|
+
* helper, it converts a wrong result into a slow one, and it is invisible at the call
|
|
10
|
+
* site. Run 9 (gha-2026-09-18-integration-238cc734) produced both of its shapes from
|
|
11
|
+
* ONE build — a browser `signIn` carrying `waitForTimeout(1500)`, and a Python
|
|
12
|
+
* `get_order` whose ten-attempt retry loop sleeps five seconds an attempt — beside a
|
|
13
|
+
* clean `signIn` of the same name on the same repository. Same model, same commit:
|
|
14
|
+
* the prompt rule holds in some runs and not others, which is a rule without a gate.
|
|
15
|
+
*
|
|
16
|
+
* The bare wait is the smaller half. A retry loop whose backoff is a sleep hides the
|
|
17
|
+
* duration BEHIND an iteration count, so a rule written for the bare form alone would
|
|
18
|
+
* read `time.sleep(sleep_time)` as five seconds and miss the fifty this one costs.
|
|
19
|
+
* Both are found here, and the loop's multiplier is reported with the finding.
|
|
20
|
+
*
|
|
21
|
+
* SCOPE — the header-bearing Skyramp module, and nothing else. The caller reaches
|
|
22
|
+
* this through `locateUtilsFiles`, which recognises a module by the `Generated by
|
|
23
|
+
* Skyramp on …` header, so a repository's own helper and a page object are out of
|
|
24
|
+
* reach by construction. That is deliberate in both directions: an in-house module
|
|
25
|
+
* may not be modified beyond being added to (SKYR-4483), and the POM path treats a
|
|
26
|
+
* customer method's internal `waitForTimeout` as a REASON TO PREFER it (see
|
|
27
|
+
* `pom-aware-code-reuse`, STEP 2b) — a rule that flagged sleeps anywhere would
|
|
28
|
+
* contradict that prompt.
|
|
29
|
+
*/
|
|
30
|
+
export interface HelperSleep {
|
|
31
|
+
/** 1-based line in the FILE. */
|
|
32
|
+
line: number;
|
|
33
|
+
/** The call as the agent reads it: the source line(s) it spans, whitespace collapsed. */
|
|
34
|
+
text: string;
|
|
35
|
+
/** What one call waits, in milliseconds — resolved from a numeric literal or from
|
|
36
|
+
* a parameter's numeric default. `undefined` when neither is readable; the finding
|
|
37
|
+
* still stands, because a sleep of an unknown length is not a shorter one. */
|
|
38
|
+
ms?: number;
|
|
39
|
+
/** Present when the sleep sits inside one or more loops, which multiply it.
|
|
40
|
+
* `depth` is how many enclose it; `iterations` is the PRODUCT of their bounds, and
|
|
41
|
+
* is `undefined` as soon as one of them is a condition rather than a count. */
|
|
42
|
+
loop?: {
|
|
43
|
+
iterations?: number;
|
|
44
|
+
depth: number;
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* What a Python module binds to a sleep function, read from its imports.
|
|
49
|
+
*
|
|
50
|
+
* The bare form cannot be matched by SPELLING. `def run(sleep): return sleep(5)`
|
|
51
|
+
* invokes a callback and was reported as a blocking sleep, and a module that never
|
|
52
|
+
* imports one was too — a false blocking finding on a correct file. The inverse was
|
|
53
|
+
* also true and is not something spelling could have caught: `from time import sleep
|
|
54
|
+
* as pause` binds the sleep to `pause`, and `pause(2)` was missed entirely.
|
|
55
|
+
*
|
|
56
|
+
* So the names come from the module rather than from a list: whatever `time` and
|
|
57
|
+
* `asyncio` are imported AS, and whatever their `sleep` is imported AS.
|
|
58
|
+
*/
|
|
59
|
+
export interface SleepBindings {
|
|
60
|
+
/** Names that call a sleep directly: `sleep`, or its `as` alias. */
|
|
61
|
+
bare: Set<string>;
|
|
62
|
+
/** Qualifiers whose `.sleep` is a sleep: `time`, `asyncio`, or an alias. */
|
|
63
|
+
qualified: Set<string>;
|
|
64
|
+
}
|
|
65
|
+
export declare function pythonSleepBindings(content: string): SleepBindings;
|
|
66
|
+
/** `1500` → `1.5s`, `50000` → `50s`. Seconds throughout: a reviewer compares a helper's
|
|
67
|
+
* cost against a test's runtime, not against a frame. */
|
|
68
|
+
export declare function describeSleepMs(ms: number): string;
|
|
69
|
+
/**
|
|
70
|
+
* Every fixed sleep in one helper body.
|
|
71
|
+
*
|
|
72
|
+
* `body` is the raw source lines, `scan` the same lines with comments and string
|
|
73
|
+
* CONTENTS blanked (offsets preserved) — so a commented-out wait and a wait quoted
|
|
74
|
+
* inside a fill() are neither of them calls. Structure is read from `scan`; the text
|
|
75
|
+
* the agent is shown comes from `body`.
|
|
76
|
+
*/
|
|
77
|
+
export declare function fixedSleepsIn(body: string[], scan: string[], language: UtilsLanguage, params: string[], startLine: number, bindings?: SleepBindings): HelperSleep[];
|
|
78
|
+
/** The whole finding for one helper: every sleep it holds, what each costs, and what
|
|
79
|
+
* the loop around one of them multiplies it by. ONE finding per helper — so one
|
|
80
|
+
* `reuse-verify: allow` marker documents a helper's timing decision rather than
|
|
81
|
+
* needing one line per call. */
|
|
82
|
+
export declare function describeFixedSleeps(sleeps: HelperSleep[]): string;
|
|
83
|
+
/** What every call of the helper costs at worst, loops multiplied in. `undefined`
|
|
84
|
+
* when any sleep's duration — or any loop's bound — could not be read: a total that
|
|
85
|
+
* silently omitted one would understate the cost, and understating it is how the
|
|
86
|
+
* finding gets argued down. */
|
|
87
|
+
export declare function totalMs(sleeps: HelperSleep[]): number | undefined;
|
|
88
|
+
/**
|
|
89
|
+
* What to do INSTEAD, named in the finding itself.
|
|
90
|
+
*
|
|
91
|
+
* A finding an agent cannot act on burns verify rounds and is then documented away,
|
|
92
|
+
* which is the outcome this gate exists to avoid. So the text never says "remove the
|
|
93
|
+
* sleep": it names the wait that replaces it, and rules out the fix the model reaches
|
|
94
|
+
* for first — a shorter sleep, which is the same defect at a smaller number.
|
|
95
|
+
*/
|
|
96
|
+
export declare function fixedSleepReplacement(family: "api" | "browser", language: UtilsLanguage): string;
|