@skyramp/mcp 0.4.1 → 0.4.2-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/adapters/jestAdapter.js +23 -5
- package/build/adapters/mochaAdapter.js +7 -1
- package/build/adapters/playwrightAdapter.js +3 -1
- package/build/adapters/pytestAdapter.js +14 -3
- package/build/commands/localDevTestChangesCommand.js +1 -0
- package/build/commands/recommendTestsAndExecuteCommand.js +5 -6
- package/build/commands/testThisEndpointCommand.js +16 -4
- package/build/index.js +34 -4
- package/build/playwright/blueprintDigest.js +28 -7
- package/build/playwright/registerPlaywrightTools.js +33 -28
- package/build/playwright/traceRecordingPrompt.js +9 -2
- package/build/prompts/code-reuse.js +95 -29
- package/build/prompts/fix-error-prompt.d.ts +9 -1
- package/build/prompts/fix-error-prompt.js +31 -28
- package/build/prompts/local-dev/local-dev-plan.d.ts +3 -0
- package/build/prompts/local-dev/local-dev-plan.js +3 -1
- package/build/prompts/local-dev/local-dev-prompts.d.ts +1 -1
- package/build/prompts/local-dev/local-dev-prompts.js +30 -3
- package/build/prompts/modularization/integration-test-modularization.js +13 -6
- package/build/prompts/modularization/ui-test-modularization.js +1 -1
- package/build/prompts/personas.js +1 -1
- package/build/prompts/pom-aware-code-reuse.js +7 -9
- package/build/prompts/reuse-hand-off.d.ts +64 -0
- package/build/prompts/reuse-hand-off.js +130 -0
- package/build/prompts/shared-helper-policy.d.ts +88 -2
- package/build/prompts/shared-helper-policy.js +145 -11
- package/build/prompts/sut-setup/modes/adaptWorkflowPrompt.js +1 -1
- package/build/prompts/sut-setup/modes/dockerComposePrompt.js +1 -1
- package/build/prompts/sut-setup/shared.d.ts +4 -1
- package/build/prompts/sut-setup/shared.js +2 -2
- package/build/prompts/test-maintenance/actionsInstructions.d.ts +19 -11
- package/build/prompts/test-maintenance/actionsInstructions.js +47 -26
- package/build/prompts/test-maintenance/drift-analysis-prompt.js +3 -2
- package/build/prompts/test-maintenance/driftAnalysisSections.js +5 -3
- package/build/prompts/test-maintenance/driftAnalysisShared.js +4 -2
- package/build/prompts/test-maintenance/uiDriftAnalysisSections.js +7 -4
- package/build/prompts/test-recommendation/recommendationSections.js +19 -8
- package/build/prompts/test-recommendation/registerRecommendTestsPrompt.js +5 -2
- package/build/prompts/test-recommendation/test-recommendation-prompt.js +10 -7
- package/build/prompts/testbot/testbot-prompts.js +123 -55
- package/build/recommendation/answers.js +18 -9
- package/build/recommendation/pullRequestText.js +1 -1
- package/build/recommendation/registerPlan.js +31 -17
- package/build/recommendation/subjectStep.d.ts +8 -10
- package/build/recommendation/subjectStep.js +17 -16
- package/build/recommendation/types.d.ts +71 -17
- package/build/recommendation/types.js +9 -15
- package/build/recommendation/verifierContracts.d.ts +7 -3
- package/build/recommendation/verifierContracts.js +8 -4
- package/build/recommendation/verifiers/changedFile.js +11 -13
- package/build/recommendation/verifiers/citedPath.d.ts +8 -0
- package/build/recommendation/verifiers/citedPath.js +16 -2
- package/build/recommendation/verifiers/coverage.d.ts +2 -2
- package/build/recommendation/verifiers/coverage.js +190 -134
- package/build/recommendation/verifiers/defects.js +56 -16
- package/build/recommendation/verifiers/deliveredMatchesPlan.d.ts +7 -1
- package/build/recommendation/verifiers/deliveredMatchesPlan.js +28 -14
- package/build/recommendation/verifiers/endpointGrounded.js +14 -8
- package/build/recommendation/verifiers/existingCoverage.d.ts +6 -0
- package/build/recommendation/verifiers/existingCoverage.js +30 -21
- package/build/recommendation/verifiers/expectedOutcome.js +17 -8
- package/build/recommendation/verifiers/expectedValueSourced.js +54 -43
- package/build/recommendation/verifiers/issueTraceability.d.ts +5 -0
- package/build/recommendation/verifiers/issueTraceability.js +64 -7
- package/build/recommendation/verifiers/removedElementGuarded.js +19 -11
- package/build/recommendation/verifiers/reportedCategory.js +9 -4
- package/build/recommendation/verifiers/requirementSourced.js +34 -21
- package/build/recommendation/verifiers/screenRoute.js +15 -10
- package/build/recommendation/verifiers/statedDifference.js +15 -8
- package/build/recommendation/verifiers/uiElementGrounded.js +50 -16
- package/build/resources/analysisResources.js +7 -3
- package/build/resources/progressResource.js +4 -2
- package/build/resources/sutSetupResource.js +20 -2
- package/build/resources/testbotResource.js +19 -1
- package/build/services/AnalyticsService.js +3 -1
- package/build/services/ScenarioGenerationService.js +5 -5
- package/build/services/TestDiscoveryService.js +21 -5
- package/build/services/TestExecutionService.js +63 -21
- package/build/services/TestGenerationService.d.ts +1 -1
- package/build/services/TestGenerationService.js +43 -24
- package/build/skills/enhanceAssertionsSkill.d.ts +45 -0
- package/build/skills/enhanceAssertionsSkill.js +103 -0
- package/build/skills/fixTestImportErrorsSkill.d.ts +2 -2
- package/build/skills/fixTestImportErrorsSkill.js +2 -2
- package/build/skills/skillFiles.d.ts +38 -0
- package/build/skills/skillFiles.js +94 -0
- package/build/skills/validateAssertionAlignmentSkill.d.ts +34 -0
- package/build/skills/validateAssertionAlignmentSkill.js +59 -0
- package/build/tool-phases.js +4 -0
- package/build/tools/auth/loginTool.js +3 -1
- package/build/tools/auth/logoutTool.js +3 -1
- package/build/tools/code-refactor/alignAssertionsTool.d.ts +2 -0
- package/build/tools/code-refactor/alignAssertionsTool.js +51 -0
- package/build/tools/code-refactor/assertion-state.d.ts +1 -1
- package/build/tools/code-refactor/assertion-state.js +1 -1
- package/build/tools/code-refactor/assertionOperations.d.ts +44 -0
- package/build/tools/code-refactor/assertionOperations.js +82 -0
- package/build/tools/code-refactor/assertionSkillTools.d.ts +3 -0
- package/build/tools/code-refactor/assertionSkillTools.js +86 -0
- package/build/tools/code-refactor/codeReuseTool.js +27 -3
- package/build/tools/code-refactor/enhanceAssertionsTool.js +19 -83
- package/build/tools/code-refactor/gate-markers.d.ts +51 -0
- package/build/tools/code-refactor/gate-markers.js +95 -0
- package/build/tools/code-refactor/retrofit-state.d.ts +3 -1
- package/build/tools/code-refactor/retrofit-state.js +44 -2
- package/build/tools/code-refactor/reuse-outcome.d.ts +23 -1
- package/build/tools/code-refactor/reuse-outcome.js +36 -13
- package/build/tools/code-refactor/reuse-state.d.ts +90 -16
- package/build/tools/code-refactor/reuse-state.js +191 -61
- package/build/tools/code-refactor/utils-verify-gates.d.ts +4 -0
- package/build/tools/code-refactor/utils-verify-gates.js +252 -27
- package/build/tools/code-refactor/verify-gates.d.ts +15 -1
- package/build/tools/code-refactor/verify-gates.js +36 -4
- package/build/tools/enrichTestWithMocksTool.d.ts +1 -1
- package/build/tools/enrichTestWithMocksTool.js +9 -5
- package/build/tools/executeSkyrampTestTool.d.ts +22 -1
- package/build/tools/executeSkyrampTestTool.js +571 -271
- package/build/tools/execution-video-state.js +1 -1
- package/build/tools/fixErrorTool.js +5 -6
- package/build/tools/generate-tests/batchMockGenerationTool.js +1 -1
- package/build/tools/generate-tests/generateBatchScenarioRestTool.js +114 -73
- package/build/tools/generate-tests/generateContractRestTool.js +34 -16
- package/build/tools/generate-tests/generateE2ERestTool.d.ts +1 -0
- package/build/tools/generate-tests/generateE2ERestTool.js +9 -1
- package/build/tools/generate-tests/generateIntegrationRestTool.js +22 -7
- package/build/tools/generate-tests/generateMockRestTool.js +3 -1
- package/build/tools/generate-tests/generateUIRestTool.d.ts +2 -0
- package/build/tools/generate-tests/generateUIRestTool.js +11 -2
- package/build/tools/generate-tests/loadTestSchema.js +1 -3
- package/build/tools/generate-tests/planGuard.js +6 -3
- package/build/tools/generate-tests/scenarioFileIdentity.js +4 -1
- package/build/tools/generate-tests/scenarioLint.js +17 -5
- package/build/tools/generate-tests/trace-reuse-guard.js +5 -2
- package/build/tools/generateEnrichedIntegrationTestTool.js +9 -3
- package/build/tools/one-click/oneClickTool.js +3 -1
- package/build/tools/preflightMockCheckTool.js +23 -7
- package/build/tools/runExistingTestsTool.d.ts +1 -1
- package/build/tools/runExistingTestsTool.js +43 -21
- package/build/tools/submitReportTool.d.ts +51 -12
- package/build/tools/submitReportTool.js +860 -161
- package/build/tools/test-management/actionsTool.js +210 -51
- package/build/tools/test-management/analyzeChangesTool.d.ts +4 -5
- package/build/tools/test-management/analyzeChangesTool.js +127 -68
- package/build/tools/test-management/analyzeTestHealthTool.js +35 -13
- package/build/tools/test-management/registerTestPlanTool.d.ts +44 -34
- package/build/tools/test-management/registerTestPlanTool.js +255 -111
- package/build/tools/test-management/resolveScreenTool.js +33 -9
- package/build/tools/trace/startTraceCollectionTool.js +3 -1
- package/build/tools/trace/stopTraceCollectionTool.js +41 -5
- package/build/tools/verifyTestDependenciesTool.d.ts +3 -0
- package/build/tools/verifyTestDependenciesTool.js +54 -0
- package/build/tools/workspace/initScanWorkspaceTool.js +9 -3
- package/build/tools/workspace/initializeWorkspaceTool.js +3 -1
- package/build/types/AssertionOutcome.d.ts +1 -1
- package/build/types/EnhanceType.d.ts +6 -0
- package/build/types/EnhanceType.js +1 -0
- package/build/types/ExternalTestExecution.d.ts +2 -2
- package/build/types/RepositoryAnalysis.d.ts +0 -40
- package/build/types/ReuseOutcome.d.ts +96 -4
- package/build/types/ReuseOutcome.js +16 -0
- package/build/types/StepMethod.js +20 -6
- package/build/types/TestAnalysis.d.ts +10 -2
- package/build/types/TestExecution.d.ts +45 -0
- package/build/types/TestRecommendation.d.ts +1 -1
- package/build/types/TestRecommendation.js +4 -1
- package/build/types/TestTypes.d.ts +13 -0
- package/build/types/TestTypes.js +34 -3
- package/build/types/TestbotPromptOptions.d.ts +9 -1
- package/build/types/TestbotReport.d.ts +45 -9
- package/build/utils/AnalysisStateManager.d.ts +137 -27
- package/build/utils/AnalysisStateManager.js +227 -43
- package/build/utils/assertion-verify/api-shared-lints.js +34 -16
- package/build/utils/assertion-verify/metrics.js +39 -6
- package/build/utils/assertion-verify/ui-lints.js +4 -2
- package/build/utils/branchDiff.js +47 -12
- package/build/utils/canonicalJson.js +3 -1
- package/build/utils/dartRouteExtractor.js +36 -7
- package/build/utils/fixAttempts.d.ts +26 -0
- package/build/utils/fixAttempts.js +109 -0
- package/build/utils/frontendSelectors.js +23 -4
- package/build/utils/generatedTestRecord.d.ts +19 -0
- package/build/utils/generatedTestRecord.js +61 -0
- package/build/utils/gitStaging.js +7 -2
- package/build/utils/initAgent.js +26 -6
- package/build/utils/language-helper.js +39 -45
- package/build/utils/pathMatching.js +2 -1
- package/build/utils/pathSignatures.js +6 -2
- package/build/utils/planMatchKeys.d.ts +2 -2
- package/build/utils/planMatchKeys.js +20 -14
- package/build/utils/pom-catalog-parse.js +7 -2
- package/build/utils/pom-scope/import-expansion.js +6 -1
- package/build/utils/pom-scope/index.js +50 -12
- package/build/utils/pom-scope/scoring.js +13 -3
- package/build/utils/pom-scope/selector-extractor.js +16 -3
- package/build/utils/pom-scope/strip.d.ts +8 -0
- package/build/utils/pom-scope/strip.js +238 -0
- package/build/utils/pom-scope/testIdDiscovery.js +14 -2
- package/build/utils/pom-verify/__fixtures__/af-style/asset-list.page.d.ts +1 -1
- package/build/utils/pom-verify/__fixtures__/af-style/asset-list.page.js +4 -2
- package/build/utils/pom-verify/__fixtures__/af-style/report.iframe.page.js +3 -1
- package/build/utils/pom-verify/__fixtures__/af-style/workflow-footer.page.js +3 -1
- package/build/utils/pom-verify/bindings.js +5 -1
- package/build/utils/pom-verify/calls.js +9 -2
- package/build/utils/pom-verify/verify.js +27 -5
- package/build/utils/pr-comment-parser.js +20 -7
- package/build/utils/proxy-terminal.d.ts +19 -1
- package/build/utils/proxy-terminal.js +346 -21
- package/build/utils/removedUiElements.js +1 -1
- package/build/utils/reportLanguage.js +35 -7
- package/build/utils/reportVerification.d.ts +14 -8
- package/build/utils/reportVerification.js +19 -19
- package/build/utils/repositorySlug.d.ts +32 -0
- package/build/utils/repositorySlug.js +77 -0
- package/build/utils/reuseRouting.js +6 -2
- package/build/utils/runSerialized.d.ts +3 -0
- package/build/utils/runSerialized.js +39 -0
- package/build/utils/screenRoutes.js +74 -18
- package/build/utils/sourceRouteExtractor.js +13 -6
- package/build/utils/telemetry.d.ts +1 -0
- package/build/utils/telemetry.js +8 -5
- package/build/utils/testDependencyPolicy.d.ts +9 -0
- package/build/utils/testDependencyPolicy.js +788 -0
- package/build/utils/testExecutionRecord.d.ts +90 -0
- package/build/utils/testExecutionRecord.js +267 -0
- package/build/utils/testFileClassification.js +3 -1
- package/build/utils/trace-parser.js +62 -14
- package/build/utils/urlPath.js +3 -1
- package/build/utils/utils-verify/action-key.d.ts +4 -0
- package/build/utils/utils-verify/action-key.js +2 -2
- package/build/utils/utils-verify/allow.d.ts +122 -3
- package/build/utils/utils-verify/allow.js +146 -21
- package/build/utils/utils-verify/body-reach.d.ts +120 -0
- package/build/utils/utils-verify/body-reach.js +335 -0
- package/build/utils/utils-verify/call-sites.d.ts +6 -1
- package/build/utils/utils-verify/call-sites.js +72 -8
- package/build/utils/utils-verify/delivered-imports.d.ts +43 -0
- package/build/utils/utils-verify/delivered-imports.js +84 -0
- package/build/utils/utils-verify/fixed-sleep.d.ts +96 -0
- package/build/utils/utils-verify/fixed-sleep.js +461 -0
- package/build/utils/utils-verify/in-house.d.ts +93 -0
- package/build/utils/utils-verify/in-house.js +719 -0
- package/build/utils/utils-verify/incumbent.d.ts +3 -0
- package/build/utils/utils-verify/incumbent.js +75 -0
- package/build/utils/utils-verify/index.d.ts +1 -0
- package/build/utils/utils-verify/index.js +1 -0
- package/build/utils/utils-verify/language-spec.d.ts +26 -10
- package/build/utils/utils-verify/language-spec.js +217 -20
- package/build/utils/utils-verify/locate.d.ts +26 -0
- package/build/utils/utils-verify/locate.js +125 -23
- package/build/utils/utils-verify/module-name.d.ts +40 -0
- package/build/utils/utils-verify/module-name.js +98 -0
- package/build/utils/utils-verify/parse.d.ts +46 -6
- package/build/utils/utils-verify/parse.js +176 -38
- package/build/utils/utils-verify/retrofit-equivalence.d.ts +5 -0
- package/build/utils/utils-verify/retrofit-equivalence.js +4 -2
- package/build/utils/utils-verify/stage.d.ts +5 -0
- package/build/utils/utils-verify/stage.js +47 -2
- package/build/utils/utils-verify/status-once.d.ts +62 -0
- package/build/utils/utils-verify/status-once.js +207 -0
- package/build/utils/utils-verify/typecheck.d.ts +61 -0
- package/build/utils/utils-verify/typecheck.js +338 -0
- package/build/utils/utils-verify/verify.d.ts +76 -1
- package/build/utils/utils-verify/verify.js +516 -44
- package/build/utils/versions.d.ts +3 -3
- package/build/utils/versions.js +1 -1
- package/build/utils/workspaceAuth.js +107 -37
- package/build/workspace/queryParamResolution.js +11 -4
- package/build/workspace/workspace.js +7 -7
- package/node_modules/playwright/ThirdPartyNotices.txt +19 -19
- package/node_modules/playwright/lib/mcp/skyramp/assertTool.js +8 -2
- package/node_modules/playwright/lib/mcp/skyramp/common/cssValue.js +87 -0
- package/node_modules/playwright/lib/mcp/skyramp/loadTraceTool.js +31 -0
- package/node_modules/playwright/lib/mcp/skyramp/skyRampImport.js +3 -0
- package/node_modules/playwright/lib/mcp/skyramp/traceRecordingBackend.js +181 -15
- package/node_modules/playwright/lib/mcp/test/skyRampExport.js +24 -0
- package/node_modules/playwright/lib/transform/babelBundleImpl.js +2353 -190
- package/node_modules/playwright/node_modules/playwright-core/ThirdPartyNotices.txt +62 -34
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/.package-lock.json +72 -41
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/dist/serve-static.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/dist/serve-static.mjs +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/package.json +2 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/README.md +16 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/index.js +4 -20
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/read.js +17 -17
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/json.js +60 -32
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/raw.js +3 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/text.js +3 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/urlencoded.js +16 -20
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/utils.js +18 -16
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/LICENSE +22 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/README.md +71 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.d.ts +46 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.js +176 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.js.map +1 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/package.json +52 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/package.json +23 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/CHANGELOG.md +21 -14
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/isObject.d.ts +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/package.json +6 -7
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/tsconfig.json +1 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/index.js +266 -45
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/lib/schemes.js +9 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/lib/utils.js +396 -92
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/package.json +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/component-safe-serialization.test.js +163 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/equal.test.js +31 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/fixtures/uri-js-parse.json +2 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/ipv6-canonical.test.js +34 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/ipv6-validation.test.js +124 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/malformed-percent.test.js +77 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/malformed-urn.test.js +61 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/parse.test.js +7 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/query-fragment-normalization.test.js +33 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/reserved-path-normalization.test.js +109 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/scheme-validation.test.js +124 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/security-normalization.test.js +101 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/security.test.js +301 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/urn-full-input.test.js +29 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/websocket-query-preservation.test.js +24 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/CHANGELOG.md +7 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/index.d.ts +0 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/package.json +4 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/client/client.js +30 -16
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/client/utils.js +4 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/context.js +32 -13
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/accepts/accepts.js +36 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/proxy/index.js +4 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/ssg/ssg.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/ssg/utils.js +30 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/streaming/sse.js +5 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/hono-base.js +10 -8
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/base.js +44 -23
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/components.js +25 -26
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/context.js +5 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/dom/render.js +2 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/dom/server.js +5 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/hooks/index.js +16 -13
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +3 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/streaming.js +4 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/cache/index.js +103 -8
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/compress/index.js +5 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/cors/index.js +17 -14
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/csrf/index.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/etag/digest.js +47 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/etag/index.js +7 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +9 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +9 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/language/language.js +10 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/method-not-allowed/index.js +90 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +3 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/secure-headers/secure-headers.js +16 -7
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/request.js +20 -13
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/linear-router/router.js +7 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/pattern-router/router.js +3 -9
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +65 -59
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +71 -128
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +14 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/trie-router/node.js +47 -70
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/trie-router/router.js +3 -11
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/utils.js +27 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/accept.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/body.js +21 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/cookie.js +4 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/ipaddr.js +5 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/stream.js +12 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/url.js +19 -11
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/client/client.js +30 -16
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/client/utils.js +4 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/context.js +32 -13
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/accepts/accepts.js +36 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/proxy/index.js +4 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/ssg/ssg.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/ssg/utils.js +30 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/streaming/sse.js +5 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/hono-base.js +10 -8
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/base.js +41 -23
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/components.js +26 -27
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/context.js +6 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/dom/render.js +2 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/dom/server.js +5 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/hooks/index.js +16 -13
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/intrinsic-element/components.js +4 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/streaming.js +5 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/cache/index.js +103 -8
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/compress/index.js +5 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/cors/index.js +17 -14
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/csrf/index.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/etag/digest.js +47 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/etag/index.js +7 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/jwk/jwk.js +9 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/jwt/jwt.js +9 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/language/language.js +10 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/method-not-allowed/index.js +68 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/pretty-json/index.js +3 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/secure-headers/secure-headers.js +16 -7
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/request.js +21 -14
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/linear-router/router.js +7 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/pattern-router/router.js +3 -9
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/node.js +61 -58
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/router.js +77 -129
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/trie.js +14 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/trie-router/node.js +47 -70
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/trie-router/router.js +3 -11
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/utils.js +5 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/adapter/aws-lambda/types.d.ts +9 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/client/types.d.ts +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/context.d.ts +6 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/hono-base.d.ts +4 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/base.d.ts +7 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/index.d.ts +5 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/intrinsic-element/components.d.ts +2 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/server.d.ts +5 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/hooks/index.d.ts +8 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/index.d.ts +5 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/cache/index.d.ts +6 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/combine/index.d.ts +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/cors/index.d.ts +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +2 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jwk/jwk.d.ts +2 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jwt/jwt.d.ts +2 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/method-not-allowed/index.d.ts +49 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/secure-headers/permissions-policy.d.ts +3 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +4 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +2 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/trie-router/node.d.ts +1 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/trie-router/router.d.ts +0 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/utils.d.ts +1 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router.d.ts +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/utils/headers.d.ts +2 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/utils/url.d.ts +5 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/accept.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/body.js +21 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/cookie.js +5 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/ipaddr.js +5 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/stream.js +12 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/url.js +17 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/package.json +11 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/README.md +173 -143
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/address-error.d.ts +11 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/address-error.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.d.ts +49 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.js +79 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.d.ts +78 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.js +119 -24
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.d.ts +151 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.js +316 -90
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.d.ts +12 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.js +45 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.d.ts +14 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.js +50 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/package.json +6 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/.github/THREAT_MODEL.md +3 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/CHANGELOG.md +26 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/README.md +19 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/dist/qs.js +25 -25
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/eslint.config.mjs +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/parse.js +16 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/stringify.js +23 -8
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/utils.js +57 -11
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/package.json +8 -7
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/parse.js +419 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/stringify.js +317 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/utils.js +206 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/CHANGELOG.md +10 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/README.md +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/index.js +5 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/package.json +10 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/test/index.js +16 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/index.js +8 -18
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/LICENSE +22 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/README.md +71 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.d.ts +46 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.js +176 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.js.map +1 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/package.json +52 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/package.json +9 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/package-lock.json +72 -41
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/.package-lock.json +6 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/README.md +23 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/index.js +265 -86
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/package.json +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/README.md +173 -143
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/address-error.d.ts +11 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/address-error.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.d.ts +49 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.js +79 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.d.ts +78 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.js +119 -24
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.d.ts +151 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.js +316 -90
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.d.ts +12 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.js +45 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.d.ts +14 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.js +50 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/package.json +6 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/package-lock.json +6 -6
- package/node_modules/playwright/node_modules/playwright-core/lib/cli/program.js +18 -9
- package/node_modules/playwright/node_modules/playwright-core/lib/mcpBundleImpl/index.js +47 -47
- package/node_modules/playwright/node_modules/playwright-core/lib/server/codegen/skyramp/jsonlReader.js +3 -0
- package/node_modules/playwright/node_modules/playwright-core/lib/server/recorder/recorderRunner.js +42 -0
- package/node_modules/playwright/node_modules/playwright-core/lib/utilsBundleImpl/index.js +121 -121
- package/node_modules/playwright/node_modules/playwright-core/lib/vite/traceViewer/{index.B7KbSQcC.js → index.BAkLd5DX.js} +1 -1
- package/node_modules/playwright/node_modules/playwright-core/lib/vite/traceViewer/index.html +1 -1
- package/node_modules/playwright/node_modules/playwright-core/package.json +1 -1
- package/node_modules/playwright/node_modules/playwright-core/src/cli/program.ts +31 -9
- package/node_modules/playwright/node_modules/playwright-core/src/server/codegen/skyramp/jsonlReader.ts +1 -0
- package/node_modules/playwright/node_modules/playwright-core/src/server/recorder/recorderRunner.ts +57 -1
- package/node_modules/playwright/package.json +2 -2
- package/package.json +7 -6
- package/plugin/prompts/code-reuse/hand-off.md +30 -0
- package/plugin/prompts/generate-tests/generation.md +1 -1
- package/plugin/prompts/plan-tests.md +14 -14
- package/plugin/prompts/testbot-task1.md +4 -2
- package/plugin/skills/enhance-assertions/SKILL.md +25 -0
- package/plugin/skills/enhance-assertions/reference/contract.md +51 -0
- package/plugin/skills/enhance-assertions/reference/integration.md +58 -0
- package/plugin/skills/enhance-assertions/reference/shared-rules.md +220 -0
- package/plugin/skills/enhance-assertions/reference/ui.md +373 -0
- package/plugin/skills/fix-test-import-errors/SKILL.md +44 -50
- package/plugin/skills/validate-assertion-alignment-post-execution/SKILL.md +32 -0
- package/plugin/skills/validate-assertion-alignment-post-execution/reference/checks.md +44 -0
- package/plugin/skills/validate-assertion-alignment-post-execution/reference/evidence.md +47 -0
- package/build/prompts/enhance-assertions/contractProviderAssertionsPrompt.d.ts +0 -2
- package/build/prompts/enhance-assertions/contractProviderAssertionsPrompt.js +0 -29
- package/build/prompts/enhance-assertions/integrationAssertionsPrompt.d.ts +0 -2
- package/build/prompts/enhance-assertions/integrationAssertionsPrompt.js +0 -36
- package/build/prompts/enhance-assertions/sharedAssertionRules.d.ts +0 -16
- package/build/prompts/enhance-assertions/sharedAssertionRules.js +0 -284
- package/build/prompts/enhance-assertions/uiAssertionsPrompt.d.ts +0 -2
- package/build/prompts/enhance-assertions/uiAssertionsPrompt.js +0 -388
- package/node_modules/playwright/node_modules/playwright-core/.DS_Store +0 -0
|
@@ -79,7 +79,7 @@ export type RepoCheckoutRef = RepoCheckout;
|
|
|
79
79
|
export declare function findAssertionRecordByFileName(outcomes: Record<string, AssertionRecord>, row: {
|
|
80
80
|
fileName: string;
|
|
81
81
|
testType?: string;
|
|
82
|
-
repository
|
|
82
|
+
repository: string;
|
|
83
83
|
}, checkouts: RepoCheckoutRef[]): AssertionRecord | undefined;
|
|
84
84
|
/**
|
|
85
85
|
* Report-facing proof-of-work summary re-derived from the spec as delivered
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The deterministic half of assertion enhancement, shared by
|
|
3
|
+
* `skyramp_enhance_assertions` and by the two single-purpose tools the
|
|
4
|
+
* `enhance-assertions` skill drives (SKYR-4310). One implementation, so the
|
|
5
|
+
* skill workflow and the original tool can never diverge on the gates, the
|
|
6
|
+
* baseline, or the verdict.
|
|
7
|
+
*/
|
|
8
|
+
export interface AssertionCallParams {
|
|
9
|
+
testFile: string;
|
|
10
|
+
testType: string;
|
|
11
|
+
enhanceType: string;
|
|
12
|
+
stateFile?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Reject a relative test-file path: everything downstream keys state by this
|
|
16
|
+
* path, and a relative spelling would fork records and fail gates open
|
|
17
|
+
* (review finding on SKYR-4262). Shared with `skyramp_align_assertions`,
|
|
18
|
+
* whose post-execution check keys the same `testExecutions` state by this
|
|
19
|
+
* path but needs neither the reuse-debt gate nor the retrofit staging below,
|
|
20
|
+
* both generation-time concerns.
|
|
21
|
+
*/
|
|
22
|
+
export declare function requireAbsoluteTestFile(testFile: string): string | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Everything both entry points must do before either branch: reject a relative
|
|
25
|
+
* path, stage the shared utils file, and run the reuse-debt gate.
|
|
26
|
+
*
|
|
27
|
+
* Returns the gate's refusal message, or undefined when the call may proceed.
|
|
28
|
+
*/
|
|
29
|
+
export declare function prepareAssertionCall(params: AssertionCallParams): Promise<string | undefined>;
|
|
30
|
+
/**
|
|
31
|
+
* Snapshot the file as generated so a later verify pass has a baseline to
|
|
32
|
+
* measure against. Best-effort — no run state means a stateless verify later.
|
|
33
|
+
*/
|
|
34
|
+
export declare function snapshotAssertionBaseline(params: AssertionCallParams): Promise<void>;
|
|
35
|
+
export interface AssertionVerifyOutcome {
|
|
36
|
+
ok: boolean;
|
|
37
|
+
report: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Deterministically check the hand-out instructions were applied — hash delta,
|
|
41
|
+
* no removed coverage, rubric lints, strength increase — and format the
|
|
42
|
+
* per-violation feedback that drives the fix-and-retry loop.
|
|
43
|
+
*/
|
|
44
|
+
export declare function verifyAssertionCall(params: AssertionCallParams): Promise<AssertionVerifyOutcome>;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import * as path from "path";
|
|
2
|
+
import { pendingReuseDebt } from "./reuse-state.js";
|
|
3
|
+
import { baselineFrom, readAssertionRecord, recordAssertionBaseline, recordAssertionVerdict, trustedRecord, } from "./assertion-state.js";
|
|
4
|
+
import { formatAssertionVerifyReport, verifyAssertionEnhancement, } from "../../utils/assertion-verify/index.js";
|
|
5
|
+
import { stageAndRecordRetrofits } from "./retrofit-state.js";
|
|
6
|
+
import { stageGeneratedPaths } from "../../utils/gitStaging.js";
|
|
7
|
+
/**
|
|
8
|
+
* Reject a relative test-file path: everything downstream keys state by this
|
|
9
|
+
* path, and a relative spelling would fork records and fail gates open
|
|
10
|
+
* (review finding on SKYR-4262). Shared with `skyramp_align_assertions`,
|
|
11
|
+
* whose post-execution check keys the same `testExecutions` state by this
|
|
12
|
+
* path but needs neither the reuse-debt gate nor the retrofit staging below,
|
|
13
|
+
* both generation-time concerns.
|
|
14
|
+
*/
|
|
15
|
+
export function requireAbsoluteTestFile(testFile) {
|
|
16
|
+
if (!path.isAbsolute(testFile)) {
|
|
17
|
+
return `testFile must be an absolute path, got: ${testFile}`;
|
|
18
|
+
}
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Everything both entry points must do before either branch: reject a relative
|
|
23
|
+
* path, stage the shared utils file, and run the reuse-debt gate.
|
|
24
|
+
*
|
|
25
|
+
* Returns the gate's refusal message, or undefined when the call may proceed.
|
|
26
|
+
*/
|
|
27
|
+
export async function prepareAssertionCall(params) {
|
|
28
|
+
const { testFile, testType, stateFile } = params;
|
|
29
|
+
const pathError = requireAbsoluteTestFile(testFile);
|
|
30
|
+
if (pathError)
|
|
31
|
+
return pathError;
|
|
32
|
+
// SKYR-4115: the reuse tool hands out POM mapping instructions and then relies on
|
|
33
|
+
// the agent to come back with `verify: true` — the call that runs the zero-reuse
|
|
34
|
+
// gate. This is the first tool called after it on the same spec, so it is where a
|
|
35
|
+
// skipped verify is caught cheapest. Enforcing the call (not the outcome) keeps
|
|
36
|
+
// the policy in the reuse phase where it belongs.
|
|
37
|
+
// SKYR-4220: stage the shared utils file this spec wrote or imports BEFORE the
|
|
38
|
+
// debt check, unconditionally — so the file reaches the output commit even on a
|
|
39
|
+
// path where the agent never calls verify. Located by header, not by name.
|
|
40
|
+
await stageAndRecordRetrofits(testFile);
|
|
41
|
+
const owed = await pendingReuseDebt(testFile, stateFile, testType, {
|
|
42
|
+
chain: false,
|
|
43
|
+
});
|
|
44
|
+
if (owed)
|
|
45
|
+
return owed;
|
|
46
|
+
// Stage so testbot includes the generated files in its output commit.
|
|
47
|
+
await stageGeneratedPaths(testFile);
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Snapshot the file as generated so a later verify pass has a baseline to
|
|
52
|
+
* measure against. Best-effort — no run state means a stateless verify later.
|
|
53
|
+
*/
|
|
54
|
+
export async function snapshotAssertionBaseline(params) {
|
|
55
|
+
await recordAssertionBaseline(params.testFile, params.testType, params.enhanceType, params.stateFile);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Deterministically check the hand-out instructions were applied — hash delta,
|
|
59
|
+
* no removed coverage, rubric lints, strength increase — and format the
|
|
60
|
+
* per-violation feedback that drives the fix-and-retry loop.
|
|
61
|
+
*/
|
|
62
|
+
export async function verifyAssertionCall(params) {
|
|
63
|
+
const { testFile, testType, enhanceType, stateFile } = params;
|
|
64
|
+
const record = await readAssertionRecord(testFile, stateFile);
|
|
65
|
+
// Discriminators come from the persisted record when it matches this
|
|
66
|
+
// canonical path — params are agent-supplied, and flipping enhanceType
|
|
67
|
+
// to "maintenance" would disarm the strength gate and structural lints
|
|
68
|
+
// for a permanent PASS. Canonical comparison closes the alias bypass
|
|
69
|
+
// (dir//x.spec.ts). Falls back to params only when stateless.
|
|
70
|
+
const trusted = trustedRecord(record, testFile);
|
|
71
|
+
const result = await verifyAssertionEnhancement({
|
|
72
|
+
testFile,
|
|
73
|
+
testType: trusted?.testType ?? testType,
|
|
74
|
+
enhanceType: (trusted?.enhanceType ?? enhanceType),
|
|
75
|
+
baseline: baselineFrom(record, testFile),
|
|
76
|
+
});
|
|
77
|
+
await recordAssertionVerdict(testFile, result, stateFile);
|
|
78
|
+
return {
|
|
79
|
+
ok: result.ok,
|
|
80
|
+
report: formatAssertionVerifyReport(result, testFile),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ASSERTION_ENHANCEABLE_TEST_TYPES } from "../../types/TestTypes.js";
|
|
3
|
+
import { AnalyticsService } from "../../services/AnalyticsService.js";
|
|
4
|
+
import { toolError } from "../../utils/utils.js";
|
|
5
|
+
import { prepareAssertionCall, snapshotAssertionBaseline, verifyAssertionCall, } from "./assertionOperations.js";
|
|
6
|
+
/**
|
|
7
|
+
* The two halves of `skyramp_enhance_assertions`' deterministic work, exposed
|
|
8
|
+
* as single-purpose tools so the `enhance-assertions` skill can drive the
|
|
9
|
+
* workflow itself: snapshot, apply the rules, verify (SKYR-4310).
|
|
10
|
+
*
|
|
11
|
+
* They share one implementation with the original tool, and are registered
|
|
12
|
+
* only when the skills plugin is loaded — with it off, nothing invokes them
|
|
13
|
+
* and no agent pays for their schemas.
|
|
14
|
+
*/
|
|
15
|
+
const SNAPSHOT_TOOL_NAME = "skyramp_enhance_assertions_snapshot";
|
|
16
|
+
const VERIFY_TOOL_NAME = "skyramp_verify_enhance_assertions";
|
|
17
|
+
const sharedSchema = {
|
|
18
|
+
testFile: z
|
|
19
|
+
.string()
|
|
20
|
+
.describe("Absolute path to the generated or updated test file whose assertions are being enhanced."),
|
|
21
|
+
testType: z
|
|
22
|
+
.enum(ASSERTION_ENHANCEABLE_TEST_TYPES)
|
|
23
|
+
.describe("The type of test whose assertions are being enhanced. Contract applies to provider contract tests only, not consumer contract tests."),
|
|
24
|
+
enhanceType: z
|
|
25
|
+
.enum(["generation", "maintenance"])
|
|
26
|
+
.describe("The context of the enhancement. " +
|
|
27
|
+
"Use 'generation' after generating a new test file (applies to every test function). " +
|
|
28
|
+
"Use 'maintenance' during drift UPDATE (applies only to new or diff-affected functions)."),
|
|
29
|
+
stateFile: z
|
|
30
|
+
.string()
|
|
31
|
+
.optional()
|
|
32
|
+
.describe("Path to the run state file, when the run has one."),
|
|
33
|
+
};
|
|
34
|
+
export function registerAssertionSnapshotTool(server) {
|
|
35
|
+
server.registerTool(SNAPSHOT_TOOL_NAME, {
|
|
36
|
+
description: `Record the assertion baseline for a test file BEFORE its assertions are enhanced. Returns no instructions — the \`enhance-assertions\` skill carries those. Call this first, apply the rules, then call ${VERIFY_TOOL_NAME}.`,
|
|
37
|
+
inputSchema: sharedSchema,
|
|
38
|
+
}, async (params) => {
|
|
39
|
+
const refusal = await prepareAssertionCall(params);
|
|
40
|
+
if (refusal)
|
|
41
|
+
return toolError(refusal);
|
|
42
|
+
await snapshotAssertionBaseline(params);
|
|
43
|
+
AnalyticsService.pushMCPToolEvent(SNAPSHOT_TOOL_NAME, undefined, {
|
|
44
|
+
testFile: params.testFile,
|
|
45
|
+
testType: params.testType,
|
|
46
|
+
enhanceType: params.enhanceType,
|
|
47
|
+
}).catch(() => { });
|
|
48
|
+
return {
|
|
49
|
+
content: [
|
|
50
|
+
{
|
|
51
|
+
type: "text",
|
|
52
|
+
text: `Assertion baseline recorded for \`${params.testFile}\`. Apply the assertion rules, then call ${VERIFY_TOOL_NAME} with the same arguments.`,
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
isError: false,
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
export function registerAssertionVerifyTool(server) {
|
|
60
|
+
server.registerTool(VERIFY_TOOL_NAME, {
|
|
61
|
+
description: `Deterministically verify the assertion enhancement of a test file against the baseline ${SNAPSHOT_TOOL_NAME} recorded. Returns PASS, or FAIL with per-violation remediations. Fix every violation and call again until it passes.`,
|
|
62
|
+
inputSchema: sharedSchema,
|
|
63
|
+
}, async (params) => {
|
|
64
|
+
const refusal = await prepareAssertionCall(params);
|
|
65
|
+
if (refusal)
|
|
66
|
+
return toolError(refusal);
|
|
67
|
+
try {
|
|
68
|
+
const { ok, report } = await verifyAssertionCall(params);
|
|
69
|
+
AnalyticsService.pushMCPToolEvent(VERIFY_TOOL_NAME, undefined, {
|
|
70
|
+
testFile: params.testFile,
|
|
71
|
+
testType: params.testType,
|
|
72
|
+
enhanceType: params.enhanceType,
|
|
73
|
+
verifyPassed: ok,
|
|
74
|
+
}).catch(() => { });
|
|
75
|
+
return {
|
|
76
|
+
content: [{ type: "text", text: report }],
|
|
77
|
+
// isError on FAILED forces the fix-and-retry loop.
|
|
78
|
+
isError: !ok,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
// Not necessarily the test file — state reads can throw here too.
|
|
83
|
+
return toolError(`${VERIFY_TOOL_NAME} failed for ${params.testFile}: ${err.message}`);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
@@ -31,11 +31,33 @@ const codeReuseSchema = z.object({
|
|
|
31
31
|
verify: z
|
|
32
32
|
.boolean()
|
|
33
33
|
.default(false)
|
|
34
|
-
.describe("Verify a previously refactored test instead of returning the reuse prompt. POM path (browser tests): checks the test's POM calls against source; requires the discovery pass — this tool called for the same testFile without `verify` — to have run first. SkyrampUtils path (every other test type): stages the shared utils file for the output commit, checks its invariants, and — when skyramp_modularization recorded a baseline for this spec — compares the delivered assertion count and page.on('pageerror') guard against that hand-out, rejecting a net loss (API helpers: one helper per method+path, status-code-only assertions, method+resource names; browser helpers: actions and structural waits only, intent names, one helper per action sequence; every family: one name is defined once per module, with one parameter count across modules). Call it after the reuse edits are written; skyramp_enhance_assertions and skyramp_execute_test refuse until it has passed."),
|
|
34
|
+
.describe("Verify a previously refactored test instead of returning the reuse prompt. POM path (browser tests): checks the test's POM calls against source; requires the discovery pass — this tool called for the same testFile without `verify` — to have run first. SkyrampUtils path (every other test type): stages the shared utils file for the output commit, checks its invariants, and — when skyramp_modularization recorded a baseline for this spec — compares the delivered assertion count and page.on('pageerror') guard against that hand-out, rejecting a net loss (API helpers: one helper per method+path, status-code-only assertions, method+resource names; browser helpers: actions and structural waits only, intent names, one helper per action sequence; every family: one name is defined once per module, with one parameter count across modules). For a UI test it also checks the repository's own helper modules the test imports: each imported name resolves with an argument count the signature accepts, and every change this run made to such a module adds a helper or a defaulted parameter. Call it after the reuse edits are written; skyramp_enhance_assertions and skyramp_execute_test refuse until it has passed."),
|
|
35
35
|
testType: z
|
|
36
36
|
.nativeEnum(TestType)
|
|
37
37
|
.optional()
|
|
38
38
|
.describe("The type of the test being refactored (shared TestType vocabulary). The tool routes on it server-side: browser types (ui, e2e) may take the POM path; every other type takes the SkyrampUtils path. Omit when unknown."),
|
|
39
|
+
inHouse: z
|
|
40
|
+
.object({
|
|
41
|
+
filesRead: z
|
|
42
|
+
.array(z.string())
|
|
43
|
+
.describe("Every file the search for the repository's own browser helper modules READ, repository-relative. All of them, not only the ones that qualified."),
|
|
44
|
+
declined: z
|
|
45
|
+
.array(z.object({
|
|
46
|
+
file: z
|
|
47
|
+
.string()
|
|
48
|
+
.describe("Repository-relative path of the module."),
|
|
49
|
+
helper: z
|
|
50
|
+
.string()
|
|
51
|
+
.describe("The helper's name as the module defines it."),
|
|
52
|
+
reason: z
|
|
53
|
+
.string()
|
|
54
|
+
.describe("Why it was not called: the locator is not a plain string (variable, template literal, regex) so its action key is undefined; the module is not written for Playwright; no step matched it; …"),
|
|
55
|
+
}))
|
|
56
|
+
.default([])
|
|
57
|
+
.describe("Helpers the search read and did not call, one entry each, with the reason."),
|
|
58
|
+
})
|
|
59
|
+
.optional()
|
|
60
|
+
.describe("Verify mode, UI tests only (the SkyrampUtils path with page-object reuse off): what the search for the repository's own browser helper modules read and declined. These are DECLARATIONS — the report records them as what the run states it read, labelled as such, not as a measurement. Pass them on the `verify: true` call once the reuse edits are written."),
|
|
39
61
|
});
|
|
40
62
|
const TOOL_NAME = "skyramp_reuse_code";
|
|
41
63
|
/**
|
|
@@ -144,14 +166,16 @@ async function runUtilsVerify(params) {
|
|
|
144
166
|
// whatever the file's invariants say.
|
|
145
167
|
if (staging.failed.length > 0)
|
|
146
168
|
r.ok = false;
|
|
147
|
-
const recorded = await recordUtilsVerifyOutcome(params.testFile, r, params.language, params.framework, params.testType);
|
|
169
|
+
const recorded = await recordUtilsVerifyOutcome(params.testFile, r, params.language, params.framework, params.testType, undefined, params.inHouse);
|
|
148
170
|
return {
|
|
149
171
|
content: [
|
|
150
172
|
{
|
|
151
173
|
type: "text",
|
|
152
174
|
text: formatUtilsVerifyText(r, {
|
|
153
175
|
staged: staging.staged,
|
|
154
|
-
|
|
176
|
+
// A refused in-house module is the customer's file, not ours to move.
|
|
177
|
+
unstaged: staging.failed.filter((f) => !staging.inHouse.includes(f)),
|
|
178
|
+
unstagedInHouse: staging.failed.filter((f) => staging.inHouse.includes(f)),
|
|
155
179
|
recorded,
|
|
156
180
|
}),
|
|
157
181
|
},
|
|
@@ -1,42 +1,12 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { pendingReuseDebt } from "./reuse-state.js";
|
|
3
|
-
import { baselineFrom, readAssertionRecord, recordAssertionBaseline, recordAssertionVerdict, trustedRecord, } from "./assertion-state.js";
|
|
4
|
-
import { formatAssertionVerifyReport, verifyAssertionEnhancement, } from "../../utils/assertion-verify/index.js";
|
|
5
|
-
import { stageAndRecordRetrofits } from "./retrofit-state.js";
|
|
6
|
-
import * as path from "path";
|
|
7
2
|
import { toolError } from "../../utils/utils.js";
|
|
8
|
-
import { ASSERTION_ENHANCEABLE_TEST_TYPES
|
|
3
|
+
import { ASSERTION_ENHANCEABLE_TEST_TYPES } from "../../types/TestTypes.js";
|
|
9
4
|
import { AnalyticsService } from "../../services/AnalyticsService.js";
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { getUIAssertionsPrompt } from "../../prompts/enhance-assertions/uiAssertionsPrompt.js";
|
|
13
|
-
import { isTestbotEnabled } from "../../utils/featureFlags.js";
|
|
14
|
-
import { renderSharedAssertionRules } from "../../prompts/enhance-assertions/sharedAssertionRules.js";
|
|
15
|
-
import { stageGeneratedPaths } from "../../utils/gitStaging.js";
|
|
5
|
+
import { buildEnhanceAssertionsInstructions, sharedAssertionRules, } from "../../skills/enhanceAssertionsSkill.js";
|
|
6
|
+
import { prepareAssertionCall, snapshotAssertionBaseline, verifyAssertionCall, } from "./assertionOperations.js";
|
|
16
7
|
const TOOL_NAME = "skyramp_enhance_assertions";
|
|
17
|
-
const TESTBOT_UI_CHECKS = `
|
|
18
|
-
### Additional Testbot-Specific Checks
|
|
19
|
-
- If no suitable selector exists in the generated file for an assertion you need to add, go back and call \`browser_assert\` on the live page to record it with a valid selector, then re-export and regenerate. Do not re-record an assertion that is expected to fail today; add it here with the blueprint's selector.
|
|
20
|
-
- **After executing a UI test that documents a bug from \`issuesFound\`**: if it passed when you expected it to fail, the assertions are too weak — add a stronger \`expect()\` that directly targets the buggy behavior. This counts as the single allowed retry under the 2-attempt cap — do NOT re-run more than once.
|
|
21
|
-
`;
|
|
22
|
-
function buildAssertionInstructions(testFile, testType, enhanceType) {
|
|
23
|
-
if (testType === TestType.UI) {
|
|
24
|
-
let instructions = getUIAssertionsPrompt(testFile, enhanceType);
|
|
25
|
-
if (isTestbotEnabled()) {
|
|
26
|
-
instructions += TESTBOT_UI_CHECKS;
|
|
27
|
-
}
|
|
28
|
-
return instructions;
|
|
29
|
-
}
|
|
30
|
-
if (testType === TestType.CONTRACT) {
|
|
31
|
-
return getContractProviderAssertionsPrompt(testFile, enhanceType);
|
|
32
|
-
}
|
|
33
|
-
if (testType === TestType.INTEGRATION) {
|
|
34
|
-
return getIntegrationAssertionsPrompt(testFile, enhanceType);
|
|
35
|
-
}
|
|
36
|
-
throw new Error(`Unsupported testType for ${TOOL_NAME}: ${testType}`);
|
|
37
|
-
}
|
|
38
8
|
function buildAutoApplyInstructions(testFile, testType, enhanceType) {
|
|
39
|
-
const typeSpecificInstructions =
|
|
9
|
+
const typeSpecificInstructions = buildEnhanceAssertionsInstructions(testFile, testType, enhanceType);
|
|
40
10
|
return [
|
|
41
11
|
`Enhance response body assertions in: \`${testFile}\``,
|
|
42
12
|
`Test type: ${testType} | Context: ${enhanceType}`,
|
|
@@ -44,7 +14,7 @@ function buildAutoApplyInstructions(testFile, testType, enhanceType) {
|
|
|
44
14
|
`Read the file, apply the type-specific assertion guidance below, and write the file back directly.`,
|
|
45
15
|
`Add assertions after each send_request/sendRequest status-code assertion.`,
|
|
46
16
|
`Use SDK helper: Python \`skyramp.get_response_value(response, "json.path")\`, JS \`getValue(response, "json.path")\`.`,
|
|
47
|
-
`Do NOT restructure, reformat,
|
|
17
|
+
`Do NOT restructure, reformat, add comments, or change imports. Only add assertion lines.`,
|
|
48
18
|
``,
|
|
49
19
|
`Type-specific assertion guidance:`,
|
|
50
20
|
typeSpecificInstructions,
|
|
@@ -91,63 +61,29 @@ export function registerEnhanceAssertionsTool(server) {
|
|
|
91
61
|
- Optionally with \`verify: true\` for early feedback — the same deterministic checks run automatically inside skyramp_execute_test, which returns per-violation feedback instead of executing until they pass.`,
|
|
92
62
|
inputSchema: enhanceAssertionsSchema,
|
|
93
63
|
}, async (params) => {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
//
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
// the agent to come back with `verify: true` — the call that runs the zero-reuse
|
|
102
|
-
// gate. This is the first tool called after it on the same spec, so it is where a
|
|
103
|
-
// skipped verify is caught cheapest. Enforcing the call (not the outcome) keeps
|
|
104
|
-
// the policy in the reuse phase where it belongs.
|
|
105
|
-
// SKYR-4220: stage the shared utils file this spec wrote or imports BEFORE the
|
|
106
|
-
// debt check, unconditionally — so the file reaches the output commit even on a
|
|
107
|
-
// path where the agent never calls verify. Located by header, not by name.
|
|
108
|
-
await stageAndRecordRetrofits(testFile);
|
|
109
|
-
const owed = await pendingReuseDebt(testFile, stateFile, testType, {
|
|
110
|
-
chain: false,
|
|
111
|
-
});
|
|
112
|
-
if (owed)
|
|
113
|
-
return toolError(owed);
|
|
114
|
-
// Stage so testbot includes the generated files in its output commit.
|
|
115
|
-
await stageGeneratedPaths(testFile);
|
|
64
|
+
// stateFile is threaded through `params` into the shared helpers.
|
|
65
|
+
const { testFile, testType, enhanceType, autoApply, verify } = params;
|
|
66
|
+
// Path check, retrofit staging and the reuse-debt gate are shared with
|
|
67
|
+
// the single-purpose tools the skill drives (SKYR-4310).
|
|
68
|
+
const refusal = await prepareAssertionCall(params);
|
|
69
|
+
if (refusal)
|
|
70
|
+
return toolError(refusal);
|
|
116
71
|
// Verify pass: deterministically check the hand-out instructions were applied
|
|
117
72
|
// (hash delta, no removed coverage, rubric lints, strength increase) and give
|
|
118
73
|
// per-violation feedback. isError on FAILED forces the fix-and-retry loop.
|
|
119
74
|
if (verify) {
|
|
120
75
|
try {
|
|
121
|
-
const
|
|
122
|
-
// Discriminators come from the persisted record when it matches this
|
|
123
|
-
// canonical path — params are agent-supplied, and flipping enhanceType
|
|
124
|
-
// to "maintenance" would disarm the strength gate and structural lints
|
|
125
|
-
// for a permanent PASS. Canonical comparison closes the alias bypass
|
|
126
|
-
// (dir//x.spec.ts). Falls back to params only when stateless.
|
|
127
|
-
const trusted = trustedRecord(record, testFile);
|
|
128
|
-
const result = await verifyAssertionEnhancement({
|
|
129
|
-
testFile,
|
|
130
|
-
testType: trusted?.testType ?? testType,
|
|
131
|
-
enhanceType: (trusted?.enhanceType ??
|
|
132
|
-
enhanceType),
|
|
133
|
-
baseline: baselineFrom(record, testFile),
|
|
134
|
-
});
|
|
135
|
-
await recordAssertionVerdict(testFile, result, stateFile);
|
|
76
|
+
const { ok, report } = await verifyAssertionCall(params);
|
|
136
77
|
AnalyticsService.pushMCPToolEvent(TOOL_NAME, undefined, {
|
|
137
78
|
testFile,
|
|
138
79
|
testType,
|
|
139
80
|
enhanceType,
|
|
140
81
|
verify: true,
|
|
141
|
-
verifyPassed:
|
|
82
|
+
verifyPassed: ok,
|
|
142
83
|
}).catch(() => { });
|
|
143
84
|
return {
|
|
144
|
-
content: [
|
|
145
|
-
|
|
146
|
-
type: "text",
|
|
147
|
-
text: formatAssertionVerifyReport(result, testFile),
|
|
148
|
-
},
|
|
149
|
-
],
|
|
150
|
-
isError: !result.ok,
|
|
85
|
+
content: [{ type: "text", text: report }],
|
|
86
|
+
isError: !ok,
|
|
151
87
|
};
|
|
152
88
|
}
|
|
153
89
|
catch (err) {
|
|
@@ -157,7 +93,7 @@ export function registerEnhanceAssertionsTool(server) {
|
|
|
157
93
|
}
|
|
158
94
|
// Hand-out: snapshot the file as generated so the verify pass has a baseline
|
|
159
95
|
// to measure against. Best-effort — no run state means stateless verify later.
|
|
160
|
-
await
|
|
96
|
+
await snapshotAssertionBaseline(params);
|
|
161
97
|
if (autoApply) {
|
|
162
98
|
const compactInstructions = [
|
|
163
99
|
`Enhance response body assertions in: \`${testFile}\``,
|
|
@@ -167,7 +103,7 @@ export function registerEnhanceAssertionsTool(server) {
|
|
|
167
103
|
`Use SDK helper: Python \`skyramp.get_response_value(response, "json.path")\`, JS \`getValue(response, "json.path")\`.`,
|
|
168
104
|
``,
|
|
169
105
|
`Shared assertion rules (apply all that fit):`,
|
|
170
|
-
|
|
106
|
+
sharedAssertionRules(),
|
|
171
107
|
``,
|
|
172
108
|
`Do NOT restructure, reformat, or add comments. You may add an import when a new assertion needs a helper — from \`@skyramp/skyramp\` or from the test's own helper module. Only add assertion lines.`,
|
|
173
109
|
].join("\n");
|
|
@@ -186,7 +122,7 @@ export function registerEnhanceAssertionsTool(server) {
|
|
|
186
122
|
const enhanceCtx = enhanceType;
|
|
187
123
|
const instructions = autoApply
|
|
188
124
|
? buildAutoApplyInstructions(testFile, testType, enhanceCtx)
|
|
189
|
-
:
|
|
125
|
+
: buildEnhanceAssertionsInstructions(testFile, testType, enhanceCtx);
|
|
190
126
|
const result = {
|
|
191
127
|
content: [
|
|
192
128
|
{
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { type UtilsLanguageSpec } from "../../utils/utils-verify/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Remove every comment addressed to a Skyramp gate from a delivered file.
|
|
4
|
+
*
|
|
5
|
+
* Two gates ask the agent to write a decline into the file it delivers — the utils
|
|
6
|
+
* verifier's `reuse-verify: allow <kind> <helper> — <reason>` and the POM gate's
|
|
7
|
+
* `// kept inline: <basename> — <reason>`. Both are how the agent tells a gate it has
|
|
8
|
+
* read a finding and chosen not to act, and neither says anything to the customer who
|
|
9
|
+
* ends up owning the file. A marker also records the state of the file at one moment,
|
|
10
|
+
* and nothing re-reads it when the file changes afterwards, so a delivered file can
|
|
11
|
+
* carry a claim its own code contradicts.
|
|
12
|
+
*
|
|
13
|
+
* A marker OWNS ITS LINE. Both gates instruct exactly that, and both parsers now
|
|
14
|
+
* accept only that, so removal is the deletion of a line. That one constraint is what
|
|
15
|
+
* keeps this safe: a line whose first characters are the comment prefix cannot be a
|
|
16
|
+
* regex literal, cannot carry code, cannot share a comment with the customer's prose,
|
|
17
|
+
* and cannot hold the `*\/` that terminates a block. Every one of those was a way an
|
|
18
|
+
* earlier version of this function delivered a file that did not compile.
|
|
19
|
+
*
|
|
20
|
+
* Strings are blanked first, so a marker quoted in code — or inside a Python docstring
|
|
21
|
+
* — is not a marker. Removal follows the WELL-FORMED grammars, not the loose patterns
|
|
22
|
+
* the gates use to spot a malformed marker: `// kept inline: this loop is kept inline
|
|
23
|
+
* for performance` is English. Neither grammar is re-spelled here; each pattern comes
|
|
24
|
+
* from the module that declares it.
|
|
25
|
+
*/
|
|
26
|
+
export interface GateMarkerStrip {
|
|
27
|
+
content: string;
|
|
28
|
+
/** The markers removed, each the line it was. */
|
|
29
|
+
removed: string[];
|
|
30
|
+
/** Text that announces a marker but does not own its line. Left in place — the
|
|
31
|
+
* verify pass reports it as malformed, so it should not reach delivery. */
|
|
32
|
+
unremovable: string[];
|
|
33
|
+
}
|
|
34
|
+
export declare function stripGateMarkers(content: string, spec: UtilsLanguageSpec): GateMarkerStrip;
|
|
35
|
+
/**
|
|
36
|
+
* Whether the only change between two versions of a file is the deletion of whole
|
|
37
|
+
* comment lines.
|
|
38
|
+
*
|
|
39
|
+
* Computed WITHOUT reference to how the strip works, and that is the point. Every
|
|
40
|
+
* defect this function has had was a case nobody had thought of — a regex literal, a
|
|
41
|
+
* line carrying a block terminator, a comment shared with the customer's prose, a
|
|
42
|
+
* directive before a trailing marker. Each was found by a reader. This check does not
|
|
43
|
+
* need the case to be foreseen: it states the only edit the strip is permitted to
|
|
44
|
+
* make, and the caller restores the original bytes when something else happened.
|
|
45
|
+
*
|
|
46
|
+
* Two conditions, together: every line of `after` appears in `before` in the same
|
|
47
|
+
* order, and every line of `before` that `after` drops opens with the comment prefix.
|
|
48
|
+
* A line that was EDITED therefore fails the first, and a line of code that was
|
|
49
|
+
* deleted fails the second.
|
|
50
|
+
*/
|
|
51
|
+
export declare function onlyCommentLinesRemoved(before: string, after: string, prefix: "//" | "#"): boolean;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { blankStrings } from "../../utils/utils-verify/parse.js";
|
|
2
|
+
import { ALLOW_LOOSE_RE, ALLOW_START_RE, MARKER_SHAPE_RE, lineCommentOpeners, markerOnOwnLine, } from "../../utils/utils-verify/index.js";
|
|
3
|
+
import { KEPT_INLINE_LOOSE_RE } from "./reuse-outcome.js";
|
|
4
|
+
export function stripGateMarkers(content, spec) {
|
|
5
|
+
const removed = [];
|
|
6
|
+
const unremovable = [];
|
|
7
|
+
const rawLines = content.split("\n");
|
|
8
|
+
const codeLines = blankStrings(content, spec).split("\n");
|
|
9
|
+
const kept = [];
|
|
10
|
+
// Where a comment actually OPENS. A `//` on its own line inside `/* … *\/` opens
|
|
11
|
+
// nothing: the block does, and deleting that line can take the block's terminator
|
|
12
|
+
// with it. One statement of this, shared with the marker parser — when each had its
|
|
13
|
+
// own, the parser read a decline the strip then refused to remove.
|
|
14
|
+
const opensHere = lineCommentOpeners(content, spec.commentPrefix);
|
|
15
|
+
for (let n = 0; n < rawLines.length; n++) {
|
|
16
|
+
const raw = rawLines[n];
|
|
17
|
+
const code = codeLines[n] ?? "";
|
|
18
|
+
if (!ALLOW_LOOSE_RE.test(code) && !KEPT_INLINE_LOOSE_RE.test(code)) {
|
|
19
|
+
kept.push(raw);
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
const marker = opensHere && !opensHere.has(n)
|
|
23
|
+
? undefined
|
|
24
|
+
: markerOnOwnLine(raw, code, spec.commentPrefix);
|
|
25
|
+
const body = marker === undefined
|
|
26
|
+
? undefined
|
|
27
|
+
: marker.replace(spec.commentPrefix, "").trimStart();
|
|
28
|
+
// The SHAPE guard is for the ambiguous grammar only. `// kept inline: this loop is
|
|
29
|
+
// kept inline for performance` is English a customer may write, so removing it
|
|
30
|
+
// needs the separator and reason that make it a marker. `reuse-verify: allow` is
|
|
31
|
+
// nobody's prose: an own-line comment opening with it is gate-addressed whatever
|
|
32
|
+
// follows, and requiring the full shape left a MALFORMED one in the file — which
|
|
33
|
+
// ships once the verifier's bounded refusals run out.
|
|
34
|
+
const removable = body !== undefined &&
|
|
35
|
+
(ALLOW_START_RE.test(body) || MARKER_SHAPE_RE.test(body));
|
|
36
|
+
if (!removable) {
|
|
37
|
+
unremovable.push(raw.trim());
|
|
38
|
+
kept.push(raw);
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
// Removal follows the marker's SHAPE, not the grammar the gates can read. An
|
|
42
|
+
// own-line comment is safe to delete, and the verify pass lets some of these
|
|
43
|
+
// through: a marker naming an advisory kind is inert by design, so verification
|
|
44
|
+
// passes and the comment reached the customer. Only what the caller CARRIES has
|
|
45
|
+
// to parse — it re-reads `removed` with the well-formed grammars for that.
|
|
46
|
+
removed.push(marker);
|
|
47
|
+
}
|
|
48
|
+
return { content: kept.join("\n"), removed, unremovable };
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Whether the only change between two versions of a file is the deletion of whole
|
|
52
|
+
* comment lines.
|
|
53
|
+
*
|
|
54
|
+
* Computed WITHOUT reference to how the strip works, and that is the point. Every
|
|
55
|
+
* defect this function has had was a case nobody had thought of — a regex literal, a
|
|
56
|
+
* line carrying a block terminator, a comment shared with the customer's prose, a
|
|
57
|
+
* directive before a trailing marker. Each was found by a reader. This check does not
|
|
58
|
+
* need the case to be foreseen: it states the only edit the strip is permitted to
|
|
59
|
+
* make, and the caller restores the original bytes when something else happened.
|
|
60
|
+
*
|
|
61
|
+
* Two conditions, together: every line of `after` appears in `before` in the same
|
|
62
|
+
* order, and every line of `before` that `after` drops opens with the comment prefix.
|
|
63
|
+
* A line that was EDITED therefore fails the first, and a line of code that was
|
|
64
|
+
* deleted fails the second.
|
|
65
|
+
*/
|
|
66
|
+
export function onlyCommentLinesRemoved(before, after, prefix) {
|
|
67
|
+
const from = before.split("\n");
|
|
68
|
+
const to = after.split("\n");
|
|
69
|
+
// A line that CLOSES a block comment cannot be deleted without changing what that
|
|
70
|
+
// comment covers, whatever else the line looks like. Checked textually, so this
|
|
71
|
+
// holds even when the lexer and the strip agree with each other and are both wrong
|
|
72
|
+
// — which is what a `//` inside a block made them do.
|
|
73
|
+
//
|
|
74
|
+
// Only `*\/` is tested. A `/*` inside the reason of a genuine line comment is inert
|
|
75
|
+
// text, and deleting a line cannot open a block that was not already open; treating
|
|
76
|
+
// it as active made the strip abandon the write, so a marker whose reason discussed
|
|
77
|
+
// a selector shipped to the customer — the one outcome this pass exists to prevent.
|
|
78
|
+
const isComment = (line) => line.trimStart().startsWith(prefix) &&
|
|
79
|
+
!(prefix === "//" && line.includes("*/"));
|
|
80
|
+
let i = 0;
|
|
81
|
+
for (const line of to) {
|
|
82
|
+
while (i < from.length && from[i] !== line) {
|
|
83
|
+
if (!isComment(from[i]))
|
|
84
|
+
return false;
|
|
85
|
+
i++;
|
|
86
|
+
}
|
|
87
|
+
if (i >= from.length)
|
|
88
|
+
return false;
|
|
89
|
+
i++;
|
|
90
|
+
}
|
|
91
|
+
for (; i < from.length; i++)
|
|
92
|
+
if (!isComment(from[i]))
|
|
93
|
+
return false;
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
@@ -27,7 +27,9 @@ export interface RetrofitView {
|
|
|
27
27
|
/** Absolute path. */
|
|
28
28
|
file: string;
|
|
29
29
|
utilsFile: string;
|
|
30
|
-
/** The spec whose reuse pass caused the edit (absolute)
|
|
30
|
+
/** The spec whose reuse pass caused the edit (absolute) — the row the retrofit is
|
|
31
|
+
* reported on. Equals `file` when the causing spec cannot be established: see
|
|
32
|
+
* `uncrossAttributions`. */
|
|
31
33
|
testFile: string;
|
|
32
34
|
/** Status of an execution that ran the CURRENT bytes (executedAt ≥ the file's
|
|
33
35
|
* mtime), if any. */
|