@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
|
@@ -43,7 +43,11 @@ process.on("exit", () => {
|
|
|
43
43
|
// resolving from the mounted repo. Node treats the empty shadow as a miss and
|
|
44
44
|
// walks up to NODE_PATH's global install (both packages are global in the
|
|
45
45
|
// executor image).
|
|
46
|
-
const SHADOWED_NESTED_PACKAGES = [
|
|
46
|
+
const SHADOWED_NESTED_PACKAGES = [
|
|
47
|
+
"@playwright/test",
|
|
48
|
+
"playwright",
|
|
49
|
+
"@skyramp/skyramp",
|
|
50
|
+
];
|
|
47
51
|
// Minimal Playwright config — shadows repo configs that may import dotenv or other
|
|
48
52
|
// dependencies not available in the executor container.
|
|
49
53
|
const MINIMAL_PLAYWRIGHT_CONFIG_PATH = path.join(os.tmpdir(), "skyramp-playwright.config.ts");
|
|
@@ -60,9 +64,7 @@ export const PLAYWRIGHT_CONFIG_FILES = [
|
|
|
60
64
|
// IS mounted (see mountRepoTree) — but walking it would shadow every package's
|
|
61
65
|
// own package.json with empty JSON via MOUNT_NULL_ITEMS, breaking resolution
|
|
62
66
|
// for the whole tree.
|
|
63
|
-
export const MOUNT_SCAN_SKIP_DIRS = [
|
|
64
|
-
"node_modules",
|
|
65
|
-
];
|
|
67
|
+
export const MOUNT_SCAN_SKIP_DIRS = ["node_modules"];
|
|
66
68
|
// Reserved container subdir under /home/user where a cross-repo test repository
|
|
67
69
|
// (testsRepoDir, SKYR-3819) is mounted. Must live INSIDE /home/user: the generated
|
|
68
70
|
// Playwright config's testDir is anchored there, and a test path outside it is
|
|
@@ -94,8 +96,14 @@ export function isBrowserTest(testType) {
|
|
|
94
96
|
* based on the test file path
|
|
95
97
|
*/
|
|
96
98
|
export function getVideoSubdir(testFile) {
|
|
97
|
-
const basename = path
|
|
98
|
-
|
|
99
|
+
const basename = path
|
|
100
|
+
.basename(testFile, path.extname(testFile))
|
|
101
|
+
.replace(/[^A-Za-z0-9._-]/g, "-");
|
|
102
|
+
const hash = crypto
|
|
103
|
+
.createHash("sha256")
|
|
104
|
+
.update(testFile)
|
|
105
|
+
.digest("hex")
|
|
106
|
+
.slice(0, 8);
|
|
99
107
|
return `${basename}-${hash}`;
|
|
100
108
|
}
|
|
101
109
|
/**
|
|
@@ -359,7 +367,8 @@ export function detectSessionFiles(testFilePath) {
|
|
|
359
367
|
*/
|
|
360
368
|
export function findExcludedPaths(dir, excludedItems) {
|
|
361
369
|
const results = [];
|
|
362
|
-
const shouldSkipDir = (entry) => excludedItems.includes(entry.name) ||
|
|
370
|
+
const shouldSkipDir = (entry) => excludedItems.includes(entry.name) ||
|
|
371
|
+
MOUNT_SCAN_SKIP_DIRS.includes(entry.name);
|
|
363
372
|
for (const [entry, fullPath] of walkDir(dir, { shouldSkipDir })) {
|
|
364
373
|
// Only shadow files — mounting /dev/null to a directory target causes Docker errors
|
|
365
374
|
if (excludedItems.includes(entry.name)) {
|
|
@@ -523,7 +532,9 @@ export class TestExecutionService {
|
|
|
523
532
|
// include it and the relative-path computation would escape /home/user. Anchor
|
|
524
533
|
// it under the reserved subdir instead; the test repo is mounted there below.
|
|
525
534
|
const absTestFile = path.resolve(options.testFile);
|
|
526
|
-
const testRepoPath = options.testRepoPath
|
|
535
|
+
const testRepoPath = options.testRepoPath
|
|
536
|
+
? path.resolve(options.testRepoPath)
|
|
537
|
+
: undefined;
|
|
527
538
|
// A root-level test repo would bind-mount large portions of the host
|
|
528
539
|
// (read-write, alongside the Docker socket) into the executor — reject it
|
|
529
540
|
// explicitly rather than falling through to the generic path error below.
|
|
@@ -532,7 +543,9 @@ export class TestExecutionService {
|
|
|
532
543
|
!isUnder(workspacePath, absTestFile)) {
|
|
533
544
|
throw new Error(`testRepoPath must not be the filesystem root, got: ${options.testRepoPath}`);
|
|
534
545
|
}
|
|
535
|
-
const crossRepoTestRoot = !isUnder(workspacePath, absTestFile) &&
|
|
546
|
+
const crossRepoTestRoot = !isUnder(workspacePath, absTestFile) &&
|
|
547
|
+
testRepoPath &&
|
|
548
|
+
isUnder(testRepoPath, absTestFile)
|
|
536
549
|
? testRepoPath
|
|
537
550
|
: undefined;
|
|
538
551
|
if (crossRepoTestRoot) {
|
|
@@ -555,7 +568,7 @@ export class TestExecutionService {
|
|
|
555
568
|
testFilePath = path.resolve(containerMountPath, path.relative(workspacePath, absTestFile));
|
|
556
569
|
}
|
|
557
570
|
// Video recording setup for UI/E2E browser tests (no-op for API tests).
|
|
558
|
-
const { browserTest, videoHostDir, videoContainerDir, playwrightConfigPath, pytestConfigPath } = setupVideoCapture(options, workspacePath, containerMountPath);
|
|
571
|
+
const { browserTest, videoHostDir, videoContainerDir, playwrightConfigPath, pytestConfigPath, } = setupVideoCapture(options, workspacePath, containerMountPath);
|
|
559
572
|
// Prepare Docker command
|
|
560
573
|
const command = [
|
|
561
574
|
"bash",
|
|
@@ -637,10 +650,15 @@ export class TestExecutionService {
|
|
|
637
650
|
// copies that must not load from the repo.
|
|
638
651
|
const entriesToMount = fs
|
|
639
652
|
.readdirSync(hostRoot)
|
|
640
|
-
.filter((file) => !MOUNT_NULL_ITEMS.includes(file) &&
|
|
653
|
+
.filter((file) => !MOUNT_NULL_ITEMS.includes(file) &&
|
|
654
|
+
!PLAYWRIGHT_CONFIG_FILES.includes(file));
|
|
641
655
|
for (const file of entriesToMount) {
|
|
642
656
|
const source = path.join(hostRoot, file);
|
|
643
|
-
pushMount({
|
|
657
|
+
pushMount({
|
|
658
|
+
Type: "bind",
|
|
659
|
+
Target: path.join(containerRoot, file),
|
|
660
|
+
Source: source,
|
|
661
|
+
});
|
|
644
662
|
if (mirrorToHost) {
|
|
645
663
|
pushMount({ Type: "bind", Target: source, Source: source });
|
|
646
664
|
}
|
|
@@ -648,8 +666,14 @@ export class TestExecutionService {
|
|
|
648
666
|
// Shadow MOUNT_NULL_ITEMS (found recursively) with /dev/null (or empty JSON for .json files).
|
|
649
667
|
for (const absolutePath of findExcludedPaths(hostRoot, MOUNT_NULL_ITEMS)) {
|
|
650
668
|
const rel = path.relative(hostRoot, absolutePath);
|
|
651
|
-
const source = absolutePath.endsWith(".json")
|
|
652
|
-
|
|
669
|
+
const source = absolutePath.endsWith(".json")
|
|
670
|
+
? EMPTY_JSON_PATH
|
|
671
|
+
: "/dev/null";
|
|
672
|
+
pushMount({
|
|
673
|
+
Type: "bind",
|
|
674
|
+
Source: source,
|
|
675
|
+
Target: path.join(containerRoot, rel),
|
|
676
|
+
});
|
|
653
677
|
if (mirrorToHost) {
|
|
654
678
|
pushMount({ Type: "bind", Source: source, Target: absolutePath });
|
|
655
679
|
}
|
|
@@ -669,7 +693,12 @@ export class TestExecutionService {
|
|
|
669
693
|
ReadOnly: true,
|
|
670
694
|
});
|
|
671
695
|
if (mirrorToHost) {
|
|
672
|
-
pushMount({
|
|
696
|
+
pushMount({
|
|
697
|
+
Type: "bind",
|
|
698
|
+
Source: EMPTY_DIR_PATH,
|
|
699
|
+
Target: pkgPath,
|
|
700
|
+
ReadOnly: true,
|
|
701
|
+
});
|
|
673
702
|
}
|
|
674
703
|
}
|
|
675
704
|
}
|
|
@@ -681,9 +710,17 @@ export class TestExecutionService {
|
|
|
681
710
|
// `npx playwright test <file>` and read playwright.config.ts.
|
|
682
711
|
for (const absolutePath of findExcludedPaths(hostRoot, PLAYWRIGHT_CONFIG_FILES)) {
|
|
683
712
|
const rel = path.relative(hostRoot, absolutePath);
|
|
684
|
-
pushMount({
|
|
713
|
+
pushMount({
|
|
714
|
+
Type: "bind",
|
|
715
|
+
Source: playwrightConfigPath,
|
|
716
|
+
Target: path.join(containerRoot, rel),
|
|
717
|
+
});
|
|
685
718
|
if (mirrorToHost) {
|
|
686
|
-
pushMount({
|
|
719
|
+
pushMount({
|
|
720
|
+
Type: "bind",
|
|
721
|
+
Source: playwrightConfigPath,
|
|
722
|
+
Target: absolutePath,
|
|
723
|
+
});
|
|
687
724
|
}
|
|
688
725
|
}
|
|
689
726
|
};
|
|
@@ -692,7 +729,8 @@ export class TestExecutionService {
|
|
|
692
729
|
// even if the repo has no config file. The pushMount dedup ensures later shadows
|
|
693
730
|
// for the same target are dropped.
|
|
694
731
|
if (browserTest) {
|
|
695
|
-
if (options.language === "typescript" ||
|
|
732
|
+
if (options.language === "typescript" ||
|
|
733
|
+
options.language === "javascript") {
|
|
696
734
|
// Mount generated Playwright config at canonical container path
|
|
697
735
|
pushMount({
|
|
698
736
|
Type: "bind",
|
|
@@ -962,11 +1000,15 @@ export class TestExecutionService {
|
|
|
962
1000
|
const errors = this.parseErrors(cleanOutput);
|
|
963
1001
|
const warnings = this.parseWarnings(cleanOutput);
|
|
964
1002
|
// Collect the recorded video (browser tests only).
|
|
965
|
-
const videoPath = browserTest
|
|
1003
|
+
const videoPath = browserTest
|
|
1004
|
+
? collectVideoPath(videoHostDir)
|
|
1005
|
+
: undefined;
|
|
966
1006
|
const result = {
|
|
967
1007
|
testFile: options.testFile,
|
|
968
|
-
status: statusCode === 0
|
|
969
|
-
|
|
1008
|
+
status: statusCode === 0
|
|
1009
|
+
? TestExecutionStatus.Pass
|
|
1010
|
+
: statusCode !== 1
|
|
1011
|
+
? TestExecutionStatus.Error
|
|
970
1012
|
: TestExecutionStatus.Fail,
|
|
971
1013
|
executedAt,
|
|
972
1014
|
duration,
|
|
@@ -62,7 +62,7 @@ export declare abstract class TestGenerationService {
|
|
|
62
62
|
protected abstract getTestType(): TestType | typeof MOCK_TYPE;
|
|
63
63
|
/**
|
|
64
64
|
* Whether this generation's codeReuse hand-off sequences skyramp_modularization
|
|
65
|
-
* before skyramp_reuse_code (
|
|
65
|
+
* before skyramp_reuse_code (isModularizeFirstHandOffTarget). Subclasses that
|
|
66
66
|
* add their own post-generation steps consult this so modularization is
|
|
67
67
|
* instructed exactly once.
|
|
68
68
|
*/
|
|
@@ -15,7 +15,8 @@ import { isInsideExecutorWorkDir, executorWorkDirRefusal, generationTargets, } f
|
|
|
15
15
|
import { getTestsRepoDir } from "../utils/AnalysisStateManager.js";
|
|
16
16
|
import { recordReuseHandOff } from "../tools/code-refactor/reuse-state.js";
|
|
17
17
|
import { recordAssertionBaseline } from "../tools/code-refactor/assertion-state.js";
|
|
18
|
-
import {
|
|
18
|
+
import { persistGeneratedTest } from "../utils/generatedTestRecord.js";
|
|
19
|
+
import { buildModularizeFirstNextSteps, isModularizeFirstHandOffTarget, reuseCodeArgsClause, } from "../prompts/reuse-hand-off.js";
|
|
19
20
|
/**
|
|
20
21
|
* Derive the framework actually used for generation from the (normalized)
|
|
21
22
|
* language + framework params. A blank/whitespace-only framework is treated as
|
|
@@ -107,12 +108,24 @@ export class TestGenerationService {
|
|
|
107
108
|
// The files this call wrote, as codegen reports them — the reuse hand-off is
|
|
108
109
|
// recorded per FILE (SKYR-4220).
|
|
109
110
|
const written = generatedFilesFrom(result);
|
|
111
|
+
// Record the paths this call wrote, unconditionally. The generator is the
|
|
112
|
+
// only place they are known, and the report otherwise has to fall back to
|
|
113
|
+
// the agent's `fileName` — a basename, so two specs of one name in
|
|
114
|
+
// different directories answer for each other. Not folded into the
|
|
115
|
+
// assertion baseline below: that one is skipped for whole test types.
|
|
116
|
+
// A mock is not a test and is never executed, so it is not recorded.
|
|
117
|
+
const generatedType = this.getTestType();
|
|
118
|
+
if (generatedType !== MOCK_TYPE) {
|
|
119
|
+
for (const file of written) {
|
|
120
|
+
await persistGeneratedTest(file, generatedType);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
110
123
|
// Seed the assertion-enhancement baseline SERVER-SIDE at generation time
|
|
111
124
|
// (same pattern as recordReuseHandOff below): the execute-time
|
|
112
125
|
// verification gate arms even if the agent never calls
|
|
113
126
|
// skyramp_enhance_assertions at all — the last prompt-mediated entry
|
|
114
127
|
// point. Best-effort; no run state means the gate stays open as before.
|
|
115
|
-
const testType =
|
|
128
|
+
const testType = generatedType;
|
|
116
129
|
if (params.enhanceAssertions &&
|
|
117
130
|
testType !== MOCK_TYPE &&
|
|
118
131
|
ASSERTION_ENHANCEABLE_TEST_TYPES.includes(testType) &&
|
|
@@ -128,25 +141,32 @@ export class TestGenerationService {
|
|
|
128
141
|
});
|
|
129
142
|
// Orchestrate code optimization workflow based on flags
|
|
130
143
|
let postGenerationMessage = "";
|
|
131
|
-
|
|
144
|
+
// skyramp_mock_generation's schema carries no `codeReuse` field, so the mock
|
|
145
|
+
// pseudo-type cannot reach this branch. Narrowed here rather than widened in
|
|
146
|
+
// the shared hand-off module, which deals in TestType only.
|
|
147
|
+
const reuseTestType = testType === MOCK_TYPE ? undefined : testType;
|
|
148
|
+
if (params.codeReuse && reuseTestType) {
|
|
132
149
|
// Name the framework generation actually used, not the raw parameter:
|
|
133
150
|
// TS/JS derive to playwright when the caller omitted it, and
|
|
134
151
|
// skyramp_reuse_code requires framework to route correctly.
|
|
135
152
|
const effectiveFramework = deriveEffectiveFramework(params.language || "", params.framework);
|
|
136
|
-
const reuseArgs =
|
|
153
|
+
const reuseArgs = reuseCodeArgsClause(params.language, reuseTestType, effectiveFramework);
|
|
137
154
|
// Modularize-first: fresh codegen carries no helper functions (each
|
|
138
155
|
// endpoint called once, each browser step inline), so modularization is
|
|
139
156
|
// what creates the named helpers that reuse then consolidates into the
|
|
140
157
|
// shared utils file. Emitted here, not in the testbot prompt, so the
|
|
141
158
|
// instruction exists only on runs that actually generated this test type
|
|
142
159
|
// and needs no hand-maintained step numbering.
|
|
143
|
-
|
|
160
|
+
// The predicate rather than emitsModularizeFirstHandOff: both mean the
|
|
161
|
+
// same inside this codeReuse branch, and this one narrows the language to
|
|
162
|
+
// one the utils verifier covers, which is what the steps require.
|
|
163
|
+
if (isModularizeFirstHandOffTarget(reuseTestType, params.language)) {
|
|
144
164
|
// SKYR-4220: record the hand-off at the site that emits it, under the same
|
|
145
165
|
// condition, so skyramp_execute_test can refuse a test that skipped the pair
|
|
146
166
|
// and the report can mark it — without ever owing it for a test that was not
|
|
147
167
|
// told to run it. Keyed by the files this call wrote: a test generated into
|
|
148
168
|
// the same directory without codeReuse owes nothing.
|
|
149
|
-
await recordReuseHandOff(written, testType, params.language
|
|
169
|
+
await recordReuseHandOff(written, testType, params.language, effectiveFramework);
|
|
150
170
|
// Browser tests: the assertion enhancer anchors new assertions to
|
|
151
171
|
// selectors present in the test file, and after modularize → reuse
|
|
152
172
|
// those selectors live in the utils file. So for UI the enhancer runs
|
|
@@ -154,23 +174,15 @@ export class TestGenerationService {
|
|
|
154
174
|
// assertion in the test body. API enhancers key off response paths,
|
|
155
175
|
// so integration keeps its validated modularize → reuse → enhance order.
|
|
156
176
|
const enhanceFirst = testType === TestType.UI && !!params.enhanceAssertions;
|
|
157
|
-
const steps = [
|
|
158
|
-
...(enhanceFirst
|
|
159
|
-
? [
|
|
160
|
-
`Call \`skyramp_enhance_assertions\` with \`testFile\` set to the absolute path of the generated test file, \`testType: "${testType}"\`, and \`enhanceType: "generation"\`, and apply every instruction returned to that file — BEFORE modularization, while the file's selectors are still inline.`,
|
|
161
|
-
]
|
|
162
|
-
: []),
|
|
163
|
-
`Call \`skyramp_modularization\` with \`testFile\`, \`testType: "${testType}"\`, and \`isTraceBased: true\`, and apply the returned instructions — this extracts the test's steps into named helper functions, which is what makes cross-test reuse possible.`,
|
|
164
|
-
`Immediately after writing the modularized file — as your very NEXT skyramp tool call — call \`skyramp_reuse_code\` with ${reuseArgs}. The modularization call does NOT count as this step: reuse is a separate tool and MUST be invoked even when you expect it to find nothing. Follow the returned steps to completion. Sibling tests offering nothing to reuse is a normal outcome — the returned steps still move THIS test's own helpers into the shared utils file and import them back, so the test file IS expected to change; finish those steps, then continue (do NOT retry).`,
|
|
165
|
-
];
|
|
166
|
-
const ordering = enhanceFirst
|
|
167
|
-
? "three sub-steps, STRICTLY SEQUENTIAL (never in the same tool-call batch)"
|
|
168
|
-
: "two sub-steps, STRICTLY SEQUENTIAL (never in the same tool-call batch), BOTH BEFORE `skyramp_enhance_assertions`";
|
|
169
177
|
postGenerationMessage += `
|
|
170
178
|
Test generated successfully!
|
|
171
179
|
|
|
172
|
-
|
|
173
|
-
|
|
180
|
+
${buildModularizeFirstNextSteps({
|
|
181
|
+
testType: reuseTestType,
|
|
182
|
+
language: params.language,
|
|
183
|
+
framework: effectiveFramework,
|
|
184
|
+
enhanceFirst,
|
|
185
|
+
})}
|
|
174
186
|
`;
|
|
175
187
|
}
|
|
176
188
|
else {
|
|
@@ -271,10 +283,15 @@ The generated test file remains unchanged and ready to use as-is.
|
|
|
271
283
|
const suggested = /\.[tj]s$/.test(parsed.ext)
|
|
272
284
|
? params.output.replace(/\.[tj]s$/, ".spec.ts")
|
|
273
285
|
: params.output + ".spec.ts";
|
|
286
|
+
// Both spellings are named: the repository decides which files are tests,
|
|
287
|
+
// and one that declares `testMatch: ["**/*.test.ts"]` collects no
|
|
288
|
+
// *.spec.ts (SKYR-4489).
|
|
289
|
+
const alternative = suggested.replace(/\.spec\.ts$/, ".test.ts");
|
|
274
290
|
errList.content.push({
|
|
275
291
|
type: "text",
|
|
276
|
-
text: `Error: Playwright requires test files to match *.{spec}.{ts,js} (got "${params.output}"). ` +
|
|
277
|
-
`Rename to
|
|
292
|
+
text: `Error: Playwright requires test files to match *.{spec,test}.{ts,js} (got "${params.output}"). ` +
|
|
293
|
+
`Rename to ${suggested}, or to ${alternative} if the tests already in ` +
|
|
294
|
+
`${params.outputDir} use that spelling.`,
|
|
278
295
|
});
|
|
279
296
|
}
|
|
280
297
|
}
|
|
@@ -303,13 +320,15 @@ The generated test file remains unchanged and ready to use as-is.
|
|
|
303
320
|
}
|
|
304
321
|
/**
|
|
305
322
|
* Whether this generation's codeReuse hand-off sequences skyramp_modularization
|
|
306
|
-
* before skyramp_reuse_code (
|
|
323
|
+
* before skyramp_reuse_code (isModularizeFirstHandOffTarget). Subclasses that
|
|
307
324
|
* add their own post-generation steps consult this so modularization is
|
|
308
325
|
* instructed exactly once.
|
|
309
326
|
*/
|
|
310
327
|
emitsModularizeFirstHandOff(params) {
|
|
328
|
+
const testType = this.getTestType();
|
|
311
329
|
return (!!params.codeReuse &&
|
|
312
|
-
|
|
330
|
+
testType !== MOCK_TYPE &&
|
|
331
|
+
isModularizeFirstHandOffTarget(testType, params.language));
|
|
313
332
|
}
|
|
314
333
|
async handleApiAnalysis(params) {
|
|
315
334
|
if (params.apiSchema && params.endpointURL && params.method === "") {
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { EnhanceType } from "../types/EnhanceType.js";
|
|
2
|
+
/**
|
|
3
|
+
* The `enhance-assertions` skill ships in `plugin/skills/` at the
|
|
4
|
+
* package root (SKYR-4310). Its markdown is the single source of the assertion
|
|
5
|
+
* instructions: Claude Code loads the skill through `--plugin-dir`, and every
|
|
6
|
+
* other agent gets the same rules assembled from the same files by
|
|
7
|
+
* `skyramp_enhance_assertions`, whose behaviour is otherwise unchanged.
|
|
8
|
+
*/
|
|
9
|
+
export declare const ENHANCE_ASSERTIONS_SKILL = "enhance-assertions";
|
|
10
|
+
/** The shared response-body rules, without the surrounding framing. */
|
|
11
|
+
export declare function sharedAssertionRules(): string;
|
|
12
|
+
/** Full instruction text, assembled from the same markdown the skill reads.
|
|
13
|
+
* Used by agents that cannot load the plugin. */
|
|
14
|
+
export declare function buildEnhanceAssertionsInstructions(testFile: string, testType: string, enhanceType: EnhanceType): string;
|
|
15
|
+
/**
|
|
16
|
+
* The maintenance equivalent, for the UPDATE strategy. It covers a set of
|
|
17
|
+
* already-edited files rather than one freshly generated file, so it names no
|
|
18
|
+
* single test type and states the per-file duty over that set.
|
|
19
|
+
*
|
|
20
|
+
* This route was the last one still naming the tool literally. Because MCP tool
|
|
21
|
+
* output beats the prompt on conflict, that one call handed the agent the whole
|
|
22
|
+
* rule text, and an agent already holding the rules has no reason to invoke the
|
|
23
|
+
* skill — which is why two A/B runs recorded zero invocations while the
|
|
24
|
+
* per-file gates worked (SKYR-4310).
|
|
25
|
+
*/
|
|
26
|
+
export declare function enhanceAssertionsMaintenanceCall(): string;
|
|
27
|
+
/** `enhanceAssertionsCall` as a standalone sentence, for a generation result's
|
|
28
|
+
* numbered step list. */
|
|
29
|
+
export declare function enhanceAssertionsStep(testType: string, fileDescription: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* How a prompt or a generation result should tell the agent to enhance
|
|
32
|
+
* assertions. With the skills plugin loaded the skill owns the whole workflow
|
|
33
|
+
* — baseline, rules, verification — so naming the tool here would hand the
|
|
34
|
+
* agent the same rules a second time (SKYR-4310).
|
|
35
|
+
*
|
|
36
|
+
* The per-file duty is stated HERE, in the routing text, not left to the skill
|
|
37
|
+
* body. A tool call is cheap and repeatable, so the agent makes one per file
|
|
38
|
+
* without thinking; a skill invocation loads instructions into the
|
|
39
|
+
* conversation, and invoking it again reads as redundant. In the first A/B the
|
|
40
|
+
* agent therefore invoked the skill once and enhanced 3 of 5 files, against 5
|
|
41
|
+
* of 5 with the plugin off. So the routing says the count, and puts the
|
|
42
|
+
* repeated action on the two tools, which are called once per file however
|
|
43
|
+
* many times the skill itself is invoked.
|
|
44
|
+
*/
|
|
45
|
+
export declare function enhanceAssertionsCall(testType: string, fileDescription: string): string;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { getPersonaPrefix } from "../prompts/personas.js";
|
|
2
|
+
import { TestType } from "../types/TestTypes.js";
|
|
3
|
+
import { isSkillsLoaded, isTestbotEnabled } from "../utils/featureFlags.js";
|
|
4
|
+
import { readSkillFile, section, sectionBody, sliceBetween, sliceFrom, sliceUntil, fillPlaceholders, } from "./skillFiles.js";
|
|
5
|
+
/**
|
|
6
|
+
* The `enhance-assertions` skill ships in `plugin/skills/` at the
|
|
7
|
+
* package root (SKYR-4310). Its markdown is the single source of the assertion
|
|
8
|
+
* instructions: Claude Code loads the skill through `--plugin-dir`, and every
|
|
9
|
+
* other agent gets the same rules assembled from the same files by
|
|
10
|
+
* `skyramp_enhance_assertions`, whose behaviour is otherwise unchanged.
|
|
11
|
+
*/
|
|
12
|
+
export const ENHANCE_ASSERTIONS_SKILL = "enhance-assertions";
|
|
13
|
+
const TESTBOT_UI_SECTION = "## Additional checks in Testbot runs";
|
|
14
|
+
function reference(name) {
|
|
15
|
+
return readSkillFile(ENHANCE_ASSERTIONS_SKILL, `reference/${name}.md`);
|
|
16
|
+
}
|
|
17
|
+
/** The shared response-body rules, without the surrounding framing. */
|
|
18
|
+
export function sharedAssertionRules() {
|
|
19
|
+
return sectionBody(reference("shared-rules"), "## Assertion Rules with Examples");
|
|
20
|
+
}
|
|
21
|
+
/** Full instruction text, assembled from the same markdown the skill reads.
|
|
22
|
+
* Used by agents that cannot load the plugin. */
|
|
23
|
+
export function buildEnhanceAssertionsInstructions(testFile, testType, enhanceType) {
|
|
24
|
+
const shared = reference("shared-rules");
|
|
25
|
+
// Only the maintenance mode narrows scope; generation keeps the whole file.
|
|
26
|
+
const scope = enhanceType === "maintenance"
|
|
27
|
+
? ` ${sectionBody(shared, "### When maintaining an existing test")}`
|
|
28
|
+
: "";
|
|
29
|
+
if (testType === TestType.UI) {
|
|
30
|
+
const uiRef = reference("ui");
|
|
31
|
+
const ui = sliceFrom(uiRef, "## First Check");
|
|
32
|
+
const rules = isTestbotEnabled() ? ui : sliceUntil(ui, TESTBOT_UI_SECTION);
|
|
33
|
+
// The principle governs every rule below it, so it leads the hand-out too.
|
|
34
|
+
// Both slicers used to start below it and dropped it silently.
|
|
35
|
+
const body = `${section(uiRef, "## What to assert")}\n\n${rules}`;
|
|
36
|
+
// Positional order matches the skill: the two fixed values first, then
|
|
37
|
+
// the path, so a path containing a space cannot shift them.
|
|
38
|
+
return fillPlaceholders(`${getPersonaPrefix()}Your task is to enhance assertions for the given UI test file: \`${testFile}\`.${scope}\n\n${body}\n`, [testType, enhanceType, testFile]);
|
|
39
|
+
}
|
|
40
|
+
if (testType !== TestType.CONTRACT && testType !== TestType.INTEGRATION) {
|
|
41
|
+
throw new Error(`Unsupported testType for skyramp_enhance_assertions: ${testType}`);
|
|
42
|
+
}
|
|
43
|
+
const body = [
|
|
44
|
+
section(shared, "## What to assert"),
|
|
45
|
+
sliceBetween(shared, "## Pre-Edit Assertion Analysis", "## What not to do"),
|
|
46
|
+
sliceFrom(reference(testType), "## Additional assertion rules"),
|
|
47
|
+
sliceFrom(shared, "## What not to do"),
|
|
48
|
+
].join("\n\n");
|
|
49
|
+
return fillPlaceholders(`${getPersonaPrefix()}Your task is to enhance response body assertions in the given test file: \`${testFile}\`.${scope}\n\n${body}`, [testType, enhanceType, testFile]);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The maintenance equivalent, for the UPDATE strategy. It covers a set of
|
|
53
|
+
* already-edited files rather than one freshly generated file, so it names no
|
|
54
|
+
* single test type and states the per-file duty over that set.
|
|
55
|
+
*
|
|
56
|
+
* This route was the last one still naming the tool literally. Because MCP tool
|
|
57
|
+
* output beats the prompt on conflict, that one call handed the agent the whole
|
|
58
|
+
* rule text, and an agent already holding the rules has no reason to invoke the
|
|
59
|
+
* skill — which is why two A/B runs recorded zero invocations while the
|
|
60
|
+
* per-file gates worked (SKYR-4310).
|
|
61
|
+
*/
|
|
62
|
+
export function enhanceAssertionsMaintenanceCall() {
|
|
63
|
+
if (isSkillsLoaded()) {
|
|
64
|
+
return (`invoke the \`${ENHANCE_ASSERTIONS_SKILL}\` skill for each updated file, with arguments ` +
|
|
65
|
+
`\`<testType> maintenance <absolute path of the file>\`. Do this for EVERY file you just ` +
|
|
66
|
+
`edited, one at a time: five updated files means five ` +
|
|
67
|
+
`\`skyramp_enhance_assertions_snapshot\` calls and five passing ` +
|
|
68
|
+
`\`skyramp_verify_enhance_assertions\` calls. The snapshot for a file comes after your ` +
|
|
69
|
+
`maintenance edit and before you add assertions to it — it is the baseline the ` +
|
|
70
|
+
`verification measures against. Read the skill's rules once, then repeat its per-file ` +
|
|
71
|
+
`steps for the rest`);
|
|
72
|
+
}
|
|
73
|
+
return (`call \`skyramp_enhance_assertions\` once per updated file, with that file's path, its ` +
|
|
74
|
+
`\`testType\`, and \`enhanceType: "maintenance"\`, and apply every instruction returned to ` +
|
|
75
|
+
`that file`);
|
|
76
|
+
}
|
|
77
|
+
/** `enhanceAssertionsCall` as a standalone sentence, for a generation result's
|
|
78
|
+
* numbered step list. */
|
|
79
|
+
export function enhanceAssertionsStep(testType, fileDescription) {
|
|
80
|
+
const call = enhanceAssertionsCall(testType, fileDescription);
|
|
81
|
+
return `${call.charAt(0).toUpperCase()}${call.slice(1)}.`;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* How a prompt or a generation result should tell the agent to enhance
|
|
85
|
+
* assertions. With the skills plugin loaded the skill owns the whole workflow
|
|
86
|
+
* — baseline, rules, verification — so naming the tool here would hand the
|
|
87
|
+
* agent the same rules a second time (SKYR-4310).
|
|
88
|
+
*
|
|
89
|
+
* The per-file duty is stated HERE, in the routing text, not left to the skill
|
|
90
|
+
* body. A tool call is cheap and repeatable, so the agent makes one per file
|
|
91
|
+
* without thinking; a skill invocation loads instructions into the
|
|
92
|
+
* conversation, and invoking it again reads as redundant. In the first A/B the
|
|
93
|
+
* agent therefore invoked the skill once and enhanced 3 of 5 files, against 5
|
|
94
|
+
* of 5 with the plugin off. So the routing says the count, and puts the
|
|
95
|
+
* repeated action on the two tools, which are called once per file however
|
|
96
|
+
* many times the skill itself is invoked.
|
|
97
|
+
*/
|
|
98
|
+
export function enhanceAssertionsCall(testType, fileDescription) {
|
|
99
|
+
if (isSkillsLoaded()) {
|
|
100
|
+
return `invoke the \`${ENHANCE_ASSERTIONS_SKILL}\` skill with arguments \`${testType} generation <absolute path of the ${fileDescription}>\` (a project skill with the same name takes precedence over the plugin copy) and follow every step it lists, including its final verification. Do this for EVERY ${fileDescription}, one file at a time. Read the skill's rules once, then repeat its per-file steps for each remaining file — \`skyramp_enhance_assertions_snapshot\` and \`skyramp_verify_enhance_assertions\` are called once per file, so N such files means N snapshot calls and N passing verify calls. Do not re-invoke the skill for a file whose rules you already hold, and do not stop after the first file`;
|
|
101
|
+
}
|
|
102
|
+
return `call \`skyramp_enhance_assertions\` with \`testFile\` set to the absolute path of the ${fileDescription}, \`testType: "${testType}"\`, and \`enhanceType: "generation"\`, and apply every instruction returned to that file. Do this for EVERY ${fileDescription} — N such files means N calls`;
|
|
103
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The `fix-test-import-errors` skill ships in `plugin/skills/` at the package
|
|
3
3
|
* root (SKYR-4296). It carries the same instructions `skyramp_fix_errors`
|
|
4
|
-
* returns, so an agent that loads the plugin follows
|
|
5
|
-
* that does not keeps calling the tool.
|
|
4
|
+
* returns from the same Markdown, so an agent that loads the plugin follows
|
|
5
|
+
* the skill and an agent that does not keeps calling the tool.
|
|
6
6
|
*/
|
|
7
7
|
export declare const FIX_TEST_IMPORT_ERRORS_SKILL = "fix-test-import-errors";
|
|
8
8
|
/**
|
|
@@ -2,8 +2,8 @@ import { isSkillsLoaded } from "../utils/featureFlags.js";
|
|
|
2
2
|
/**
|
|
3
3
|
* The `fix-test-import-errors` skill ships in `plugin/skills/` at the package
|
|
4
4
|
* root (SKYR-4296). It carries the same instructions `skyramp_fix_errors`
|
|
5
|
-
* returns, so an agent that loads the plugin follows
|
|
6
|
-
* that does not keeps calling the tool.
|
|
5
|
+
* returns from the same Markdown, so an agent that loads the plugin follows
|
|
6
|
+
* the skill and an agent that does not keeps calling the tool.
|
|
7
7
|
*/
|
|
8
8
|
export const FIX_TEST_IMPORT_ERRORS_SKILL = "fix-test-import-errors";
|
|
9
9
|
const FIX_ERRORS_TOOL = "skyramp_fix_errors";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** The `run-test` skill ships in `plugin/skills/` at the package root. */
|
|
2
|
+
export declare const RUN_TEST_SKILL = "run-test";
|
|
3
|
+
/** How to shape a command for skyramp_execute_test without the skill. */
|
|
4
|
+
export declare const RUN_TEST_COMMAND_RULES: string;
|
|
5
|
+
/** How a prompt tells the agent to run one test file. */
|
|
6
|
+
export declare function runTestCall(): string;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { isSkillsLoaded } from "../utils/featureFlags.js";
|
|
2
|
+
import { fixErrorsInstruction } from "./fixTestImportErrorsSkill.js";
|
|
3
|
+
/** The `run-test` skill ships in `plugin/skills/` at the package root. */
|
|
4
|
+
export const RUN_TEST_SKILL = "run-test";
|
|
5
|
+
/** How to shape a command for skyramp_execute_test without the skill. */
|
|
6
|
+
export const RUN_TEST_COMMAND_RULES = `for a TypeScript or JavaScript Playwright UI or end-to-end test, add \`--config "$SKYRAMP_PLAYWRIGHT_CONFIG"\`; ` +
|
|
7
|
+
`find the environment variable the test reads for its base URL — \`SKYRAMP_TEST_BASE_URL\` in a generated test, or the name the repository's own config reads in an existing one — and when the run exports no value for that name, put \`<NAME>=$SKYRAMP_TEST_SERVICE_URL_<SERVICENAME>\` in front of the command, for the service the test targets`;
|
|
8
|
+
/** How a prompt tells the agent to run one test file. */
|
|
9
|
+
export function runTestCall() {
|
|
10
|
+
if (isSkillsLoaded()) {
|
|
11
|
+
return (`invoke the \`${RUN_TEST_SKILL}\` skill with arguments ` +
|
|
12
|
+
`\`<absolute path of the test file> <language> <framework> <test type>\``);
|
|
13
|
+
}
|
|
14
|
+
return (`call \`skyramp_execute_test\` with the repository's own command for that one test file, ` +
|
|
15
|
+
`or the framework's usual command when the repository has none (${RUN_TEST_COMMAND_RULES}). ` +
|
|
16
|
+
`If the output shows that a package is missing — the runner itself, or a module the test or its config imports — ${fixErrorsInstruction()} and run the test again`);
|
|
17
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reader for the Agent Skills shipped in `plugin/skills/` at the package root
|
|
3
|
+
* (SKYR-4296, SKYR-4310). The markdown files are the single source of the
|
|
4
|
+
* instruction text: Claude Code loads them through `--plugin-dir`, and every
|
|
5
|
+
* other agent receives the same text back from the MCP tool that would
|
|
6
|
+
* otherwise hand out a prompt.
|
|
7
|
+
*/
|
|
8
|
+
/** Absolute path of the shipped `plugin/` directory. */
|
|
9
|
+
export declare function pluginRoot(): string;
|
|
10
|
+
/** Removes a leading YAML frontmatter block, if present. */
|
|
11
|
+
export declare function stripFrontmatter(raw: string): string;
|
|
12
|
+
/** Raw contents of a file inside one skill directory, e.g. `SKILL.md` or
|
|
13
|
+
* `reference/ui.md`. */
|
|
14
|
+
export declare function readSkillFile(skillName: string, relPath: string): string;
|
|
15
|
+
/** SKILL.md body with the YAML frontmatter removed. */
|
|
16
|
+
export declare function readSkillBody(skillName: string): string;
|
|
17
|
+
/** Fill positional `$0`, `$1`, ... placeholders in `text` with `values[n]`,
|
|
18
|
+
* in one pass. `\$` unescapes to a literal `$`, so `\$19.98` in an example
|
|
19
|
+
* reads as itself rather than value 1 followed by "9.98". A placeholder's
|
|
20
|
+
* surrounding backticks, if any, are untouched by the match — the regex
|
|
21
|
+
* matches only the token, not its context — so a standalone code span
|
|
22
|
+
* (`` `$0` ``) and a placeholder nested inside a larger one both come out
|
|
23
|
+
* correctly with no extra handling. */
|
|
24
|
+
export declare function fillPlaceholders(text: string, values: string[]): string;
|
|
25
|
+
/** Everything from `heading` (matched as a line prefix) to the end. */
|
|
26
|
+
export declare function sliceFrom(markdown: string, heading: string): string;
|
|
27
|
+
/** Everything before `heading`; the whole text when the heading is absent. */
|
|
28
|
+
export declare function sliceUntil(markdown: string, heading: string): string;
|
|
29
|
+
/** Everything from `heading` up to `until`, exclusive. */
|
|
30
|
+
export declare function sliceBetween(markdown: string, heading: string, until: string): string;
|
|
31
|
+
/** One section including its heading: `heading` plus the lines under it, up to
|
|
32
|
+
* the next heading of the same or a higher level. */
|
|
33
|
+
export declare function section(markdown: string, heading: string): string;
|
|
34
|
+
/** Body of one section: the lines under `heading`, up to the next heading of
|
|
35
|
+
* the same or a higher level. Lines inside a fenced code block are code, not
|
|
36
|
+
* headings — a Python comment in an example starts with `#` and would
|
|
37
|
+
* otherwise end the section at the first example that carries one. */
|
|
38
|
+
export declare function sectionBody(markdown: string, heading: string): string;
|