@skyramp/mcp 0.4.1 → 0.4.2-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/adapters/jestAdapter.js +23 -5
- package/build/adapters/mochaAdapter.js +7 -1
- package/build/adapters/playwrightAdapter.js +3 -1
- package/build/adapters/pytestAdapter.js +14 -3
- package/build/commands/localDevTestChangesCommand.js +1 -0
- package/build/commands/recommendTestsAndExecuteCommand.js +5 -6
- package/build/commands/testThisEndpointCommand.js +16 -4
- package/build/index.js +34 -4
- package/build/playwright/blueprintDigest.js +28 -7
- package/build/playwright/registerPlaywrightTools.js +33 -28
- package/build/playwright/traceRecordingPrompt.js +9 -2
- package/build/prompts/code-reuse.js +95 -29
- package/build/prompts/fix-error-prompt.d.ts +9 -1
- package/build/prompts/fix-error-prompt.js +31 -28
- package/build/prompts/local-dev/local-dev-plan.d.ts +3 -0
- package/build/prompts/local-dev/local-dev-plan.js +3 -1
- package/build/prompts/local-dev/local-dev-prompts.d.ts +1 -1
- package/build/prompts/local-dev/local-dev-prompts.js +30 -3
- package/build/prompts/modularization/integration-test-modularization.js +13 -6
- package/build/prompts/modularization/ui-test-modularization.js +1 -1
- package/build/prompts/personas.js +1 -1
- package/build/prompts/pom-aware-code-reuse.js +7 -9
- package/build/prompts/reuse-hand-off.d.ts +64 -0
- package/build/prompts/reuse-hand-off.js +130 -0
- package/build/prompts/shared-helper-policy.d.ts +88 -2
- package/build/prompts/shared-helper-policy.js +145 -11
- package/build/prompts/sut-setup/modes/adaptWorkflowPrompt.js +1 -1
- package/build/prompts/sut-setup/modes/dockerComposePrompt.js +1 -1
- package/build/prompts/sut-setup/shared.d.ts +4 -1
- package/build/prompts/sut-setup/shared.js +2 -2
- package/build/prompts/test-maintenance/actionsInstructions.d.ts +19 -11
- package/build/prompts/test-maintenance/actionsInstructions.js +47 -26
- package/build/prompts/test-maintenance/drift-analysis-prompt.js +3 -2
- package/build/prompts/test-maintenance/driftAnalysisSections.js +5 -3
- package/build/prompts/test-maintenance/driftAnalysisShared.js +4 -2
- package/build/prompts/test-maintenance/uiDriftAnalysisSections.js +7 -4
- package/build/prompts/test-recommendation/recommendationSections.js +19 -8
- package/build/prompts/test-recommendation/registerRecommendTestsPrompt.js +5 -2
- package/build/prompts/test-recommendation/test-recommendation-prompt.js +10 -7
- package/build/prompts/testbot/testbot-prompts.js +123 -55
- package/build/recommendation/answers.js +18 -9
- package/build/recommendation/pullRequestText.js +1 -1
- package/build/recommendation/registerPlan.js +31 -17
- package/build/recommendation/subjectStep.d.ts +8 -10
- package/build/recommendation/subjectStep.js +17 -16
- package/build/recommendation/types.d.ts +71 -17
- package/build/recommendation/types.js +9 -15
- package/build/recommendation/verifierContracts.d.ts +7 -3
- package/build/recommendation/verifierContracts.js +8 -4
- package/build/recommendation/verifiers/changedFile.js +11 -13
- package/build/recommendation/verifiers/citedPath.d.ts +8 -0
- package/build/recommendation/verifiers/citedPath.js +16 -2
- package/build/recommendation/verifiers/coverage.d.ts +2 -2
- package/build/recommendation/verifiers/coverage.js +190 -134
- package/build/recommendation/verifiers/defects.js +56 -16
- package/build/recommendation/verifiers/deliveredMatchesPlan.d.ts +7 -1
- package/build/recommendation/verifiers/deliveredMatchesPlan.js +28 -14
- package/build/recommendation/verifiers/endpointGrounded.js +14 -8
- package/build/recommendation/verifiers/existingCoverage.d.ts +6 -0
- package/build/recommendation/verifiers/existingCoverage.js +30 -21
- package/build/recommendation/verifiers/expectedOutcome.js +17 -8
- package/build/recommendation/verifiers/expectedValueSourced.js +54 -43
- package/build/recommendation/verifiers/issueTraceability.d.ts +5 -0
- package/build/recommendation/verifiers/issueTraceability.js +64 -7
- package/build/recommendation/verifiers/removedElementGuarded.js +19 -11
- package/build/recommendation/verifiers/reportedCategory.js +9 -4
- package/build/recommendation/verifiers/requirementSourced.js +34 -21
- package/build/recommendation/verifiers/screenRoute.js +15 -10
- package/build/recommendation/verifiers/statedDifference.js +15 -8
- package/build/recommendation/verifiers/uiElementGrounded.js +50 -16
- package/build/resources/analysisResources.js +7 -3
- package/build/resources/progressResource.js +4 -2
- package/build/resources/sutSetupResource.js +20 -2
- package/build/resources/testbotResource.js +19 -1
- package/build/services/AnalyticsService.js +3 -1
- package/build/services/ScenarioGenerationService.js +5 -5
- package/build/services/TestDiscoveryService.js +21 -5
- package/build/services/TestExecutionService.js +63 -21
- package/build/services/TestGenerationService.d.ts +1 -1
- package/build/services/TestGenerationService.js +43 -24
- package/build/skills/enhanceAssertionsSkill.d.ts +45 -0
- package/build/skills/enhanceAssertionsSkill.js +103 -0
- package/build/skills/fixTestImportErrorsSkill.d.ts +2 -2
- package/build/skills/fixTestImportErrorsSkill.js +2 -2
- package/build/skills/skillFiles.d.ts +38 -0
- package/build/skills/skillFiles.js +94 -0
- package/build/skills/validateAssertionAlignmentSkill.d.ts +34 -0
- package/build/skills/validateAssertionAlignmentSkill.js +59 -0
- package/build/tool-phases.js +4 -0
- package/build/tools/auth/loginTool.js +3 -1
- package/build/tools/auth/logoutTool.js +3 -1
- package/build/tools/code-refactor/alignAssertionsTool.d.ts +2 -0
- package/build/tools/code-refactor/alignAssertionsTool.js +51 -0
- package/build/tools/code-refactor/assertion-state.d.ts +1 -1
- package/build/tools/code-refactor/assertion-state.js +1 -1
- package/build/tools/code-refactor/assertionOperations.d.ts +44 -0
- package/build/tools/code-refactor/assertionOperations.js +82 -0
- package/build/tools/code-refactor/assertionSkillTools.d.ts +3 -0
- package/build/tools/code-refactor/assertionSkillTools.js +86 -0
- package/build/tools/code-refactor/codeReuseTool.js +27 -3
- package/build/tools/code-refactor/enhanceAssertionsTool.js +19 -83
- package/build/tools/code-refactor/gate-markers.d.ts +51 -0
- package/build/tools/code-refactor/gate-markers.js +95 -0
- package/build/tools/code-refactor/retrofit-state.d.ts +3 -1
- package/build/tools/code-refactor/retrofit-state.js +44 -2
- package/build/tools/code-refactor/reuse-outcome.d.ts +23 -1
- package/build/tools/code-refactor/reuse-outcome.js +36 -13
- package/build/tools/code-refactor/reuse-state.d.ts +90 -16
- package/build/tools/code-refactor/reuse-state.js +191 -61
- package/build/tools/code-refactor/utils-verify-gates.d.ts +4 -0
- package/build/tools/code-refactor/utils-verify-gates.js +252 -27
- package/build/tools/code-refactor/verify-gates.d.ts +15 -1
- package/build/tools/code-refactor/verify-gates.js +36 -4
- package/build/tools/enrichTestWithMocksTool.d.ts +1 -1
- package/build/tools/enrichTestWithMocksTool.js +9 -5
- package/build/tools/executeSkyrampTestTool.d.ts +22 -1
- package/build/tools/executeSkyrampTestTool.js +571 -271
- package/build/tools/execution-video-state.js +1 -1
- package/build/tools/fixErrorTool.js +5 -6
- package/build/tools/generate-tests/batchMockGenerationTool.js +1 -1
- package/build/tools/generate-tests/generateBatchScenarioRestTool.js +114 -73
- package/build/tools/generate-tests/generateContractRestTool.js +34 -16
- package/build/tools/generate-tests/generateE2ERestTool.d.ts +1 -0
- package/build/tools/generate-tests/generateE2ERestTool.js +9 -1
- package/build/tools/generate-tests/generateIntegrationRestTool.js +22 -7
- package/build/tools/generate-tests/generateMockRestTool.js +3 -1
- package/build/tools/generate-tests/generateUIRestTool.d.ts +2 -0
- package/build/tools/generate-tests/generateUIRestTool.js +11 -2
- package/build/tools/generate-tests/loadTestSchema.js +1 -3
- package/build/tools/generate-tests/planGuard.js +6 -3
- package/build/tools/generate-tests/scenarioFileIdentity.js +4 -1
- package/build/tools/generate-tests/scenarioLint.js +17 -5
- package/build/tools/generate-tests/trace-reuse-guard.js +5 -2
- package/build/tools/generateEnrichedIntegrationTestTool.js +9 -3
- package/build/tools/one-click/oneClickTool.js +3 -1
- package/build/tools/preflightMockCheckTool.js +23 -7
- package/build/tools/runExistingTestsTool.d.ts +1 -1
- package/build/tools/runExistingTestsTool.js +43 -21
- package/build/tools/submitReportTool.d.ts +51 -12
- package/build/tools/submitReportTool.js +860 -161
- package/build/tools/test-management/actionsTool.js +210 -51
- package/build/tools/test-management/analyzeChangesTool.d.ts +4 -5
- package/build/tools/test-management/analyzeChangesTool.js +127 -68
- package/build/tools/test-management/analyzeTestHealthTool.js +35 -13
- package/build/tools/test-management/registerTestPlanTool.d.ts +44 -34
- package/build/tools/test-management/registerTestPlanTool.js +255 -111
- package/build/tools/test-management/resolveScreenTool.js +33 -9
- package/build/tools/trace/startTraceCollectionTool.js +3 -1
- package/build/tools/trace/stopTraceCollectionTool.js +41 -5
- package/build/tools/verifyTestDependenciesTool.d.ts +3 -0
- package/build/tools/verifyTestDependenciesTool.js +54 -0
- package/build/tools/workspace/initScanWorkspaceTool.js +9 -3
- package/build/tools/workspace/initializeWorkspaceTool.js +3 -1
- package/build/types/AssertionOutcome.d.ts +1 -1
- package/build/types/EnhanceType.d.ts +6 -0
- package/build/types/EnhanceType.js +1 -0
- package/build/types/ExternalTestExecution.d.ts +2 -2
- package/build/types/RepositoryAnalysis.d.ts +0 -40
- package/build/types/ReuseOutcome.d.ts +96 -4
- package/build/types/ReuseOutcome.js +16 -0
- package/build/types/StepMethod.js +20 -6
- package/build/types/TestAnalysis.d.ts +10 -2
- package/build/types/TestExecution.d.ts +45 -0
- package/build/types/TestRecommendation.d.ts +1 -1
- package/build/types/TestRecommendation.js +4 -1
- package/build/types/TestTypes.d.ts +13 -0
- package/build/types/TestTypes.js +34 -3
- package/build/types/TestbotPromptOptions.d.ts +9 -1
- package/build/types/TestbotReport.d.ts +45 -9
- package/build/utils/AnalysisStateManager.d.ts +137 -27
- package/build/utils/AnalysisStateManager.js +227 -43
- package/build/utils/assertion-verify/api-shared-lints.js +34 -16
- package/build/utils/assertion-verify/metrics.js +39 -6
- package/build/utils/assertion-verify/ui-lints.js +4 -2
- package/build/utils/branchDiff.js +47 -12
- package/build/utils/canonicalJson.js +3 -1
- package/build/utils/dartRouteExtractor.js +36 -7
- package/build/utils/fixAttempts.d.ts +26 -0
- package/build/utils/fixAttempts.js +109 -0
- package/build/utils/frontendSelectors.js +23 -4
- package/build/utils/generatedTestRecord.d.ts +19 -0
- package/build/utils/generatedTestRecord.js +61 -0
- package/build/utils/gitStaging.js +7 -2
- package/build/utils/initAgent.js +26 -6
- package/build/utils/language-helper.js +39 -45
- package/build/utils/pathMatching.js +2 -1
- package/build/utils/pathSignatures.js +6 -2
- package/build/utils/planMatchKeys.d.ts +2 -2
- package/build/utils/planMatchKeys.js +20 -14
- package/build/utils/pom-catalog-parse.js +7 -2
- package/build/utils/pom-scope/import-expansion.js +6 -1
- package/build/utils/pom-scope/index.js +50 -12
- package/build/utils/pom-scope/scoring.js +13 -3
- package/build/utils/pom-scope/selector-extractor.js +16 -3
- package/build/utils/pom-scope/strip.d.ts +8 -0
- package/build/utils/pom-scope/strip.js +238 -0
- package/build/utils/pom-scope/testIdDiscovery.js +14 -2
- package/build/utils/pom-verify/__fixtures__/af-style/asset-list.page.d.ts +1 -1
- package/build/utils/pom-verify/__fixtures__/af-style/asset-list.page.js +4 -2
- package/build/utils/pom-verify/__fixtures__/af-style/report.iframe.page.js +3 -1
- package/build/utils/pom-verify/__fixtures__/af-style/workflow-footer.page.js +3 -1
- package/build/utils/pom-verify/bindings.js +5 -1
- package/build/utils/pom-verify/calls.js +9 -2
- package/build/utils/pom-verify/verify.js +27 -5
- package/build/utils/pr-comment-parser.js +20 -7
- package/build/utils/proxy-terminal.d.ts +19 -1
- package/build/utils/proxy-terminal.js +346 -21
- package/build/utils/removedUiElements.js +1 -1
- package/build/utils/reportLanguage.js +35 -7
- package/build/utils/reportVerification.d.ts +14 -8
- package/build/utils/reportVerification.js +19 -19
- package/build/utils/repositorySlug.d.ts +32 -0
- package/build/utils/repositorySlug.js +77 -0
- package/build/utils/reuseRouting.js +6 -2
- package/build/utils/runSerialized.d.ts +3 -0
- package/build/utils/runSerialized.js +39 -0
- package/build/utils/screenRoutes.js +74 -18
- package/build/utils/sourceRouteExtractor.js +13 -6
- package/build/utils/telemetry.d.ts +1 -0
- package/build/utils/telemetry.js +8 -5
- package/build/utils/testDependencyPolicy.d.ts +9 -0
- package/build/utils/testDependencyPolicy.js +788 -0
- package/build/utils/testExecutionRecord.d.ts +90 -0
- package/build/utils/testExecutionRecord.js +267 -0
- package/build/utils/testFileClassification.js +3 -1
- package/build/utils/trace-parser.js +62 -14
- package/build/utils/urlPath.js +3 -1
- package/build/utils/utils-verify/action-key.d.ts +4 -0
- package/build/utils/utils-verify/action-key.js +2 -2
- package/build/utils/utils-verify/allow.d.ts +122 -3
- package/build/utils/utils-verify/allow.js +146 -21
- package/build/utils/utils-verify/body-reach.d.ts +120 -0
- package/build/utils/utils-verify/body-reach.js +335 -0
- package/build/utils/utils-verify/call-sites.d.ts +6 -1
- package/build/utils/utils-verify/call-sites.js +72 -8
- package/build/utils/utils-verify/delivered-imports.d.ts +43 -0
- package/build/utils/utils-verify/delivered-imports.js +84 -0
- package/build/utils/utils-verify/fixed-sleep.d.ts +96 -0
- package/build/utils/utils-verify/fixed-sleep.js +461 -0
- package/build/utils/utils-verify/in-house.d.ts +93 -0
- package/build/utils/utils-verify/in-house.js +719 -0
- package/build/utils/utils-verify/incumbent.d.ts +3 -0
- package/build/utils/utils-verify/incumbent.js +75 -0
- package/build/utils/utils-verify/index.d.ts +1 -0
- package/build/utils/utils-verify/index.js +1 -0
- package/build/utils/utils-verify/language-spec.d.ts +26 -10
- package/build/utils/utils-verify/language-spec.js +217 -20
- package/build/utils/utils-verify/locate.d.ts +26 -0
- package/build/utils/utils-verify/locate.js +125 -23
- package/build/utils/utils-verify/module-name.d.ts +40 -0
- package/build/utils/utils-verify/module-name.js +98 -0
- package/build/utils/utils-verify/parse.d.ts +46 -6
- package/build/utils/utils-verify/parse.js +176 -38
- package/build/utils/utils-verify/retrofit-equivalence.d.ts +5 -0
- package/build/utils/utils-verify/retrofit-equivalence.js +4 -2
- package/build/utils/utils-verify/stage.d.ts +5 -0
- package/build/utils/utils-verify/stage.js +47 -2
- package/build/utils/utils-verify/status-once.d.ts +62 -0
- package/build/utils/utils-verify/status-once.js +207 -0
- package/build/utils/utils-verify/typecheck.d.ts +61 -0
- package/build/utils/utils-verify/typecheck.js +338 -0
- package/build/utils/utils-verify/verify.d.ts +76 -1
- package/build/utils/utils-verify/verify.js +516 -44
- package/build/utils/versions.d.ts +3 -3
- package/build/utils/versions.js +1 -1
- package/build/utils/workspaceAuth.js +107 -37
- package/build/workspace/queryParamResolution.js +11 -4
- package/build/workspace/workspace.js +7 -7
- package/node_modules/playwright/ThirdPartyNotices.txt +19 -19
- package/node_modules/playwright/lib/mcp/skyramp/assertTool.js +8 -2
- package/node_modules/playwright/lib/mcp/skyramp/common/cssValue.js +87 -0
- package/node_modules/playwright/lib/mcp/skyramp/loadTraceTool.js +31 -0
- package/node_modules/playwright/lib/mcp/skyramp/skyRampImport.js +3 -0
- package/node_modules/playwright/lib/mcp/skyramp/traceRecordingBackend.js +181 -15
- package/node_modules/playwright/lib/mcp/test/skyRampExport.js +24 -0
- package/node_modules/playwright/lib/transform/babelBundleImpl.js +2353 -190
- package/node_modules/playwright/node_modules/playwright-core/ThirdPartyNotices.txt +62 -34
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/.package-lock.json +72 -41
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/dist/serve-static.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/dist/serve-static.mjs +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/package.json +2 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/README.md +16 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/index.js +4 -20
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/read.js +17 -17
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/json.js +60 -32
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/raw.js +3 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/text.js +3 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/urlencoded.js +16 -20
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/utils.js +18 -16
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/LICENSE +22 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/README.md +71 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.d.ts +46 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.js +176 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.js.map +1 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/package.json +52 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/package.json +23 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/CHANGELOG.md +21 -14
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/isObject.d.ts +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/package.json +6 -7
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/tsconfig.json +1 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/index.js +266 -45
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/lib/schemes.js +9 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/lib/utils.js +396 -92
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/package.json +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/component-safe-serialization.test.js +163 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/equal.test.js +31 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/fixtures/uri-js-parse.json +2 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/ipv6-canonical.test.js +34 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/ipv6-validation.test.js +124 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/malformed-percent.test.js +77 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/malformed-urn.test.js +61 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/parse.test.js +7 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/query-fragment-normalization.test.js +33 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/reserved-path-normalization.test.js +109 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/scheme-validation.test.js +124 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/security-normalization.test.js +101 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/security.test.js +301 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/urn-full-input.test.js +29 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/websocket-query-preservation.test.js +24 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/CHANGELOG.md +7 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/index.d.ts +0 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/package.json +4 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/client/client.js +30 -16
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/client/utils.js +4 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/context.js +32 -13
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/accepts/accepts.js +36 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/proxy/index.js +4 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/ssg/ssg.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/ssg/utils.js +30 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/streaming/sse.js +5 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/hono-base.js +10 -8
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/base.js +44 -23
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/components.js +25 -26
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/context.js +5 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/dom/render.js +2 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/dom/server.js +5 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/hooks/index.js +16 -13
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +3 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/streaming.js +4 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/cache/index.js +103 -8
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/compress/index.js +5 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/cors/index.js +17 -14
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/csrf/index.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/etag/digest.js +47 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/etag/index.js +7 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +9 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +9 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/language/language.js +10 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/method-not-allowed/index.js +90 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +3 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/secure-headers/secure-headers.js +16 -7
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/request.js +20 -13
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/linear-router/router.js +7 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/pattern-router/router.js +3 -9
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +65 -59
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +71 -128
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +14 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/trie-router/node.js +47 -70
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/trie-router/router.js +3 -11
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/utils.js +27 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/accept.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/body.js +21 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/cookie.js +4 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/ipaddr.js +5 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/stream.js +12 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/url.js +19 -11
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/client/client.js +30 -16
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/client/utils.js +4 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/context.js +32 -13
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/accepts/accepts.js +36 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/proxy/index.js +4 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/ssg/ssg.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/ssg/utils.js +30 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/streaming/sse.js +5 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/hono-base.js +10 -8
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/base.js +41 -23
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/components.js +26 -27
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/context.js +6 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/dom/render.js +2 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/dom/server.js +5 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/hooks/index.js +16 -13
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/intrinsic-element/components.js +4 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/streaming.js +5 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/cache/index.js +103 -8
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/compress/index.js +5 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/cors/index.js +17 -14
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/csrf/index.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/etag/digest.js +47 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/etag/index.js +7 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/jwk/jwk.js +9 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/jwt/jwt.js +9 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/language/language.js +10 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/method-not-allowed/index.js +68 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/pretty-json/index.js +3 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/secure-headers/secure-headers.js +16 -7
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/request.js +21 -14
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/linear-router/router.js +7 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/pattern-router/router.js +3 -9
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/node.js +61 -58
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/router.js +77 -129
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/trie.js +14 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/trie-router/node.js +47 -70
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/trie-router/router.js +3 -11
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/utils.js +5 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/adapter/aws-lambda/types.d.ts +9 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/client/types.d.ts +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/context.d.ts +6 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/hono-base.d.ts +4 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/base.d.ts +7 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/index.d.ts +5 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/intrinsic-element/components.d.ts +2 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/server.d.ts +5 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/hooks/index.d.ts +8 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/index.d.ts +5 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/cache/index.d.ts +6 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/combine/index.d.ts +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/cors/index.d.ts +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +2 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jwk/jwk.d.ts +2 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jwt/jwt.d.ts +2 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/method-not-allowed/index.d.ts +49 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/secure-headers/permissions-policy.d.ts +3 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +4 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +2 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/trie-router/node.d.ts +1 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/trie-router/router.d.ts +0 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/utils.d.ts +1 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router.d.ts +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/utils/headers.d.ts +2 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/utils/url.d.ts +5 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/accept.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/body.js +21 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/cookie.js +5 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/ipaddr.js +5 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/stream.js +12 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/url.js +17 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/package.json +11 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/README.md +173 -143
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/address-error.d.ts +11 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/address-error.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.d.ts +49 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.js +79 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.d.ts +78 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.js +119 -24
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.d.ts +151 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.js +316 -90
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.d.ts +12 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.js +45 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.d.ts +14 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.js +50 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/package.json +6 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/.github/THREAT_MODEL.md +3 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/CHANGELOG.md +26 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/README.md +19 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/dist/qs.js +25 -25
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/eslint.config.mjs +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/parse.js +16 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/stringify.js +23 -8
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/utils.js +57 -11
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/package.json +8 -7
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/parse.js +419 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/stringify.js +317 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/utils.js +206 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/CHANGELOG.md +10 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/README.md +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/index.js +5 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/package.json +10 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/test/index.js +16 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/index.js +8 -18
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/LICENSE +22 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/README.md +71 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.d.ts +46 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.js +176 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.js.map +1 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/package.json +52 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/package.json +9 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/package-lock.json +72 -41
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/.package-lock.json +6 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/README.md +23 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/index.js +265 -86
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/package.json +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/README.md +173 -143
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/address-error.d.ts +11 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/address-error.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.d.ts +49 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.js +79 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.d.ts +78 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.js +119 -24
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.d.ts +151 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.js +316 -90
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.d.ts +12 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.js +45 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.d.ts +14 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.js +50 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/package.json +6 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/package-lock.json +6 -6
- package/node_modules/playwright/node_modules/playwright-core/lib/cli/program.js +18 -9
- package/node_modules/playwright/node_modules/playwright-core/lib/mcpBundleImpl/index.js +47 -47
- package/node_modules/playwright/node_modules/playwright-core/lib/server/codegen/skyramp/jsonlReader.js +3 -0
- package/node_modules/playwright/node_modules/playwright-core/lib/server/recorder/recorderRunner.js +42 -0
- package/node_modules/playwright/node_modules/playwright-core/lib/utilsBundleImpl/index.js +121 -121
- package/node_modules/playwright/node_modules/playwright-core/lib/vite/traceViewer/{index.B7KbSQcC.js → index.BAkLd5DX.js} +1 -1
- package/node_modules/playwright/node_modules/playwright-core/lib/vite/traceViewer/index.html +1 -1
- package/node_modules/playwright/node_modules/playwright-core/package.json +1 -1
- package/node_modules/playwright/node_modules/playwright-core/src/cli/program.ts +31 -9
- package/node_modules/playwright/node_modules/playwright-core/src/server/codegen/skyramp/jsonlReader.ts +1 -0
- package/node_modules/playwright/node_modules/playwright-core/src/server/recorder/recorderRunner.ts +57 -1
- package/node_modules/playwright/package.json +2 -2
- package/package.json +7 -6
- package/plugin/prompts/code-reuse/hand-off.md +30 -0
- package/plugin/prompts/generate-tests/generation.md +1 -1
- package/plugin/prompts/plan-tests.md +14 -14
- package/plugin/prompts/testbot-task1.md +4 -2
- package/plugin/skills/enhance-assertions/SKILL.md +25 -0
- package/plugin/skills/enhance-assertions/reference/contract.md +51 -0
- package/plugin/skills/enhance-assertions/reference/integration.md +58 -0
- package/plugin/skills/enhance-assertions/reference/shared-rules.md +220 -0
- package/plugin/skills/enhance-assertions/reference/ui.md +373 -0
- package/plugin/skills/fix-test-import-errors/SKILL.md +44 -50
- package/plugin/skills/validate-assertion-alignment-post-execution/SKILL.md +32 -0
- package/plugin/skills/validate-assertion-alignment-post-execution/reference/checks.md +44 -0
- package/plugin/skills/validate-assertion-alignment-post-execution/reference/evidence.md +47 -0
- package/build/prompts/enhance-assertions/contractProviderAssertionsPrompt.d.ts +0 -2
- package/build/prompts/enhance-assertions/contractProviderAssertionsPrompt.js +0 -29
- package/build/prompts/enhance-assertions/integrationAssertionsPrompt.d.ts +0 -2
- package/build/prompts/enhance-assertions/integrationAssertionsPrompt.js +0 -36
- package/build/prompts/enhance-assertions/sharedAssertionRules.d.ts +0 -16
- package/build/prompts/enhance-assertions/sharedAssertionRules.js +0 -284
- package/build/prompts/enhance-assertions/uiAssertionsPrompt.d.ts +0 -2
- package/build/prompts/enhance-assertions/uiAssertionsPrompt.js +0 -388
- package/node_modules/playwright/node_modules/playwright-core/.DS_Store +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { logger } from "../../utils/logger.js";
|
|
3
3
|
import { StateManager, } from "../../utils/AnalysisStateManager.js";
|
|
4
|
-
import { TestSource, DriftAction, RecommendationPriority, EstimatedWork } from "../../types/TestAnalysis.js";
|
|
4
|
+
import { TestSource, DriftAction, RecommendationPriority, EstimatedWork, } from "../../types/TestAnalysis.js";
|
|
5
5
|
import { TestExecutionStatus } from "../../types/TestExecution.js";
|
|
6
6
|
import { TestType } from "../../types/TestTypes.js";
|
|
7
7
|
import * as fs from "fs";
|
|
@@ -9,8 +9,10 @@ import * as path from "path";
|
|
|
9
9
|
import { AnalyticsService } from "../../services/AnalyticsService.js";
|
|
10
10
|
import { dualChannelResult, toolError } from "../../utils/utils.js";
|
|
11
11
|
import { isTestFile } from "../../utils/testFileClassification.js";
|
|
12
|
-
import { REBASELINE_SNAPSHOT_NAME_RE, looksLikeOnDiskBaselineName } from "../../utils/rebaselineSnapshots.js";
|
|
12
|
+
import { REBASELINE_SNAPSHOT_NAME_RE, looksLikeOnDiskBaselineName, } from "../../utils/rebaselineSnapshots.js";
|
|
13
13
|
import { buildRenameStrategy, buildFileRenameStrategy, buildUpdateStrategy, buildRebaselineStrategy, buildRegenerateStrategy, buildDeleteStrategy, buildUpdateFileInstruction, buildRegenerateFileInstruction, } from "../../prompts/test-maintenance/actionsInstructions.js";
|
|
14
|
+
import { buildModularizeFirstNextSteps, isMaintenanceRegenerable, isModularizeFirstHandOffTarget, regenerateCodeReuse, } from "../../prompts/reuse-hand-off.js";
|
|
15
|
+
import { recordReuseHandOff } from "../code-refactor/reuse-state.js";
|
|
14
16
|
/**
|
|
15
17
|
* Compute a suggested new filename when an endpoint is renamed.
|
|
16
18
|
*/
|
|
@@ -51,12 +53,16 @@ export function computeRenamedTestFile(testFile, renames) {
|
|
|
51
53
|
const recommendationSchema = z.object({
|
|
52
54
|
testFilePath: z
|
|
53
55
|
.string()
|
|
54
|
-
.refine((p) => path.isAbsolute(p), {
|
|
56
|
+
.refine((p) => path.isAbsolute(p), {
|
|
57
|
+
message: "testFilePath must be an absolute path",
|
|
58
|
+
})
|
|
55
59
|
.describe("Absolute path to the test spec file — use the path as reported by skyramp_analyze_changes or skyramp_analyze_test_health. For POM-based tests, this is the spec file (shown in the report); set pomFile to the page object path to edit."),
|
|
56
60
|
pomFile: z
|
|
57
61
|
.string()
|
|
58
62
|
.optional()
|
|
59
|
-
.refine((p) => p === undefined || path.isAbsolute(p), {
|
|
63
|
+
.refine((p) => p === undefined || path.isAbsolute(p), {
|
|
64
|
+
message: "pomFile must be an absolute path",
|
|
65
|
+
})
|
|
60
66
|
.describe("Absolute path to the page object (POM) file to edit, when the spec delegates selectors to a page object. When set, skyramp_actions edits this file instead of testFilePath. testFilePath (the spec) is still used for catalog validation and the maintenance report."),
|
|
61
67
|
action: z
|
|
62
68
|
.nativeEnum(DriftAction)
|
|
@@ -94,12 +100,19 @@ const recommendationSchema = z.object({
|
|
|
94
100
|
"Test hits GET /products — assert stock_count is present and non-negative.'"),
|
|
95
101
|
editSites: z
|
|
96
102
|
.array(z.object({
|
|
97
|
-
line: z
|
|
103
|
+
line: z
|
|
104
|
+
.number()
|
|
105
|
+
.int()
|
|
106
|
+
.min(1)
|
|
107
|
+
.describe("1-based line number of the edit site in the current file."),
|
|
98
108
|
anchor: z
|
|
99
109
|
.string()
|
|
100
110
|
.min(1)
|
|
101
111
|
.describe("A short verbatim snippet from that line (copied exactly from the file you read) so the edit can be located without re-scanning."),
|
|
102
|
-
change: z
|
|
112
|
+
change: z
|
|
113
|
+
.string()
|
|
114
|
+
.optional()
|
|
115
|
+
.describe("What to change at this site (e.g. 'add work_pool_name to this payload')."),
|
|
103
116
|
}))
|
|
104
117
|
.optional()
|
|
105
118
|
.describe("For a large UPDATE file, the concrete per-site edits you already located while reading it — one entry per place that must change, with a verbatim anchor. " +
|
|
@@ -110,7 +123,7 @@ const recommendationSchema = z.object({
|
|
|
110
123
|
// are dropped and surfaced in the response.
|
|
111
124
|
.array(z.string())
|
|
112
125
|
.optional()
|
|
113
|
-
.describe(
|
|
126
|
+
.describe('UPDATE only — the toHaveScreenshot() baseline filenames (e.g. ["page-001.png"]) whose captured page/element/region the diff visibly changed, so the committed PNG is stale (SKYR-4298). ' +
|
|
114
127
|
"List only the baselines the change reaches; leave unaffected ones out. These are refreshed at the final skyramp_execute_test run via its rebaselineSnapshots parameter, never by editing the assertion, its maxDiffPixelRatio, or the PNG. " +
|
|
115
128
|
"Omit when the diff does not explain a screenshot mismatch — that failure stays red."),
|
|
116
129
|
renamedEndpoints: z
|
|
@@ -125,12 +138,15 @@ const recommendationSchema = z.object({
|
|
|
125
138
|
const actionsSchema = {
|
|
126
139
|
stateFile: z
|
|
127
140
|
.string()
|
|
128
|
-
.refine((p) => path.isAbsolute(p), {
|
|
141
|
+
.refine((p) => path.isAbsolute(p), {
|
|
142
|
+
message: "stateFile must be an absolute path",
|
|
143
|
+
})
|
|
129
144
|
.describe("Path to state file from skyramp_analyze_changes"),
|
|
130
145
|
repository: z
|
|
131
146
|
.string()
|
|
132
|
-
.
|
|
133
|
-
.
|
|
147
|
+
.trim()
|
|
148
|
+
.min(1)
|
|
149
|
+
.describe("The owner/repo whose analysis section to act on (e.g. 'letsramp/api-insight'). Set it on every call — the primary's owner/repo for the primary repo's tests, or a related repo's owner/repo for that repo's section — within the run-scoped stateFile."),
|
|
134
150
|
recommendations: z
|
|
135
151
|
.array(recommendationSchema)
|
|
136
152
|
.default([])
|
|
@@ -180,7 +196,7 @@ export function registerActionsTool(server) {
|
|
|
180
196
|
// Allowlist: Skyramp-generated tests + relevant external tests.
|
|
181
197
|
// Using an allowlist (not a blocklist) catches hallucinated paths the LLM
|
|
182
198
|
// may supply that are not in the scanned catalog at all.
|
|
183
|
-
const testAnalysisResults =
|
|
199
|
+
const testAnalysisResults = stateData.existingTests || [];
|
|
184
200
|
const skyrampTestFiles = new Set(testAnalysisResults
|
|
185
201
|
.filter((t) => t.source !== TestSource.External)
|
|
186
202
|
.map((t) => t.testFile));
|
|
@@ -209,9 +225,14 @@ export function registerActionsTool(server) {
|
|
|
209
225
|
// Exception: files already in the scanned test catalog (externalTestFiles / skyrampTestFiles)
|
|
210
226
|
// may legitimately live in a separate testsRepoDir outside repositoryPath — catalog
|
|
211
227
|
// membership is a sufficient provenance check for those paths.
|
|
212
|
-
const isInCatalog = skyrampTestFiles.has(resolvedFile) ||
|
|
213
|
-
|
|
214
|
-
|
|
228
|
+
const isInCatalog = skyrampTestFiles.has(resolvedFile) ||
|
|
229
|
+
skyrampTestFiles.has(rec.testFilePath) ||
|
|
230
|
+
externalTestFiles.has(resolvedFile) ||
|
|
231
|
+
externalTestFiles.has(rec.testFilePath);
|
|
232
|
+
if (repoRoot &&
|
|
233
|
+
!isInCatalog &&
|
|
234
|
+
!resolvedFile.startsWith(repoRoot + path.sep) &&
|
|
235
|
+
resolvedFile !== repoRoot) {
|
|
215
236
|
logger.warning(`Skipping recommendation for path outside repo root: ${rec.testFilePath}`);
|
|
216
237
|
return;
|
|
217
238
|
}
|
|
@@ -219,9 +240,11 @@ export function registerActionsTool(server) {
|
|
|
219
240
|
// recommendation. Hallucinated paths (not in either set) are rejected for
|
|
220
241
|
// all actions, including VERIFY and IGNORE, to keep the report consistent
|
|
221
242
|
// with what was actually discovered.
|
|
222
|
-
const isSkyramp = skyrampTestFiles.has(resolvedFile) ||
|
|
243
|
+
const isSkyramp = skyrampTestFiles.has(resolvedFile) ||
|
|
244
|
+
skyrampTestFiles.has(rec.testFilePath);
|
|
223
245
|
// Catalog membership is the safety boundary — prevents editing non-test files.
|
|
224
|
-
const isRelevantExternal =
|
|
246
|
+
const isRelevantExternal = externalTestFiles.has(resolvedFile) ||
|
|
247
|
+
externalTestFiles.has(rec.testFilePath);
|
|
225
248
|
const isInAnyKnownCatalog = isSkyramp || isRelevantExternal;
|
|
226
249
|
// Discovery is relevance-scoped, not exhaustive — it can miss a real test file the
|
|
227
250
|
// agent correctly identifies from the diff (e.g. an e2e Playwright spec/POM under a
|
|
@@ -234,7 +257,9 @@ export function registerActionsTool(server) {
|
|
|
234
257
|
// this preserves the anti-hallucination guarantee (an invented path fails existsSync).
|
|
235
258
|
const isRealUncatalogedTest = !isInAnyKnownCatalog &&
|
|
236
259
|
isTestFile(resolvedFile) &&
|
|
237
|
-
(!repoRoot ||
|
|
260
|
+
(!repoRoot ||
|
|
261
|
+
resolvedFile.startsWith(repoRoot + path.sep) ||
|
|
262
|
+
resolvedFile === repoRoot) &&
|
|
238
263
|
fs.existsSync(resolvedFile);
|
|
239
264
|
if (!isInAnyKnownCatalog && !isRealUncatalogedTest) {
|
|
240
265
|
logger.warning(`Skipping ${rec.action} for unknown test (not in scanned catalog, not a real test file): ${rec.testFilePath}`);
|
|
@@ -243,7 +268,11 @@ export function registerActionsTool(server) {
|
|
|
243
268
|
if (isRealUncatalogedTest) {
|
|
244
269
|
logger.info(`Accepting uncataloged but real test file discovery missed: ${rec.testFilePath}`);
|
|
245
270
|
}
|
|
246
|
-
const isActionable = [
|
|
271
|
+
const isActionable = [
|
|
272
|
+
DriftAction.Update,
|
|
273
|
+
DriftAction.Regenerate,
|
|
274
|
+
DriftAction.Delete,
|
|
275
|
+
].includes(rec.action);
|
|
247
276
|
// No write access to a related repo's checkout — convert any edit-requiring
|
|
248
277
|
// action to VERIFY so the finding still surfaces without attempting a write that
|
|
249
278
|
// would fail (or land in a checkout that shouldn't be touched at all).
|
|
@@ -261,7 +290,10 @@ export function registerActionsTool(server) {
|
|
|
261
290
|
});
|
|
262
291
|
return;
|
|
263
292
|
}
|
|
264
|
-
if (isActionable &&
|
|
293
|
+
if (isActionable &&
|
|
294
|
+
!isSkyramp &&
|
|
295
|
+
!isRelevantExternal &&
|
|
296
|
+
!isRealUncatalogedTest) {
|
|
265
297
|
logger.warning(`Skipping ${rec.action} for irrelevant external test: ${rec.testFilePath}`);
|
|
266
298
|
return;
|
|
267
299
|
}
|
|
@@ -272,8 +304,10 @@ export function registerActionsTool(server) {
|
|
|
272
304
|
// report renders it as a deletion/regeneration RECOMMENDATION the developer applies
|
|
273
305
|
// manually. `reportOnly: true` makes the apply loops below skip it (B2 — a flattened
|
|
274
306
|
// VERIFY read to the D2 judge as "uncertain", hiding a correct DELETE call).
|
|
275
|
-
if (isExternalTarget &&
|
|
276
|
-
|
|
307
|
+
if (isExternalTarget &&
|
|
308
|
+
!isSkyramp &&
|
|
309
|
+
(rec.action === DriftAction.Regenerate ||
|
|
310
|
+
rec.action === DriftAction.Delete)) {
|
|
277
311
|
recommendations.push({
|
|
278
312
|
testFilePath: resolvedFile,
|
|
279
313
|
action: rec.action,
|
|
@@ -306,7 +340,8 @@ export function registerActionsTool(server) {
|
|
|
306
340
|
resolvedPomFile = undefined;
|
|
307
341
|
}
|
|
308
342
|
}
|
|
309
|
-
if (rec.action !== DriftAction.Update &&
|
|
343
|
+
if (rec.action !== DriftAction.Update &&
|
|
344
|
+
rec.rebaselineSnapshots?.length) {
|
|
310
345
|
droppedRebaselineNotes.push(`${rec.testFilePath}: rebaselineSnapshots [${rec.rebaselineSnapshots.join(", ")}] ignored on ${rec.action} — a baseline refresh is only meaningful on UPDATE.`);
|
|
311
346
|
}
|
|
312
347
|
// Per-entry validation (the schema is deliberately loose, see above).
|
|
@@ -350,7 +385,12 @@ export function registerActionsTool(server) {
|
|
|
350
385
|
testFilePath: resolvedFile,
|
|
351
386
|
pomFile: resolvedPomFile,
|
|
352
387
|
action: actionForVerdict,
|
|
353
|
-
|
|
388
|
+
// The catalog's type wins over the caller's claim, and it wins ONCE, here:
|
|
389
|
+
// the verdict the report row is built from, the reuse hand-off, the steps
|
|
390
|
+
// and the regenerate context all read this one value. Letting the row keep
|
|
391
|
+
// a mislabeled type while the hand-off carried the cataloged one made the
|
|
392
|
+
// report drop the row's reuse on the mismatch.
|
|
393
|
+
testType: catalogByFile.get(resolvedFile)?.testType ?? rec.testType,
|
|
354
394
|
endpoint: rec.endpoint,
|
|
355
395
|
priority: rec.priority ?? RecommendationPriority.Medium,
|
|
356
396
|
rationale: rationaleForVerdict,
|
|
@@ -384,6 +424,24 @@ export function registerActionsTool(server) {
|
|
|
384
424
|
// `maintenanceVerdicts` (the validated recommendations), persisted below at
|
|
385
425
|
// decision-time — that persistence is what prevents a decided-upon entry from silently
|
|
386
426
|
// vanishing at report time; the ignored set is a complete, accurate record for free.
|
|
427
|
+
// The renamed path has to be known BEFORE the verdicts are persisted.
|
|
428
|
+
// The rename itself happens further down, and the report looks for the
|
|
429
|
+
// file's run under the name the file ends up with; persisted with the
|
|
430
|
+
// old name, a moved spec is not found on disk and drops out of
|
|
431
|
+
// execution coverage without a word.
|
|
432
|
+
//
|
|
433
|
+
// Always derived from the spec (testFilePath), never the POM
|
|
434
|
+
// (editTarget): fileRenames keys off testFilePath, so the spec is what
|
|
435
|
+
// moves, and deriving from editTarget when pomFile is set would produce
|
|
436
|
+
// a name built from the page-object path.
|
|
437
|
+
for (const r of recommendations) {
|
|
438
|
+
if (!r.renamedEndpoints?.length)
|
|
439
|
+
continue;
|
|
440
|
+
const renamed = computeRenamedTestFile(r.testFilePath, r.renamedEndpoints) ??
|
|
441
|
+
undefined;
|
|
442
|
+
if (renamed)
|
|
443
|
+
r._suggestedNewFile = renamed;
|
|
444
|
+
}
|
|
387
445
|
const recommendedPaths = new Set(recommendations.map((r) => r.testFilePath));
|
|
388
446
|
const ignoredTestFiles = testAnalysisResults
|
|
389
447
|
.map((t) => t.testFile)
|
|
@@ -392,7 +450,7 @@ export function registerActionsTool(server) {
|
|
|
392
450
|
// Must fail loud — edits below apply regardless, so a swallowed failure here
|
|
393
451
|
// would let edits ship with no testMaintenance in the final report.
|
|
394
452
|
try {
|
|
395
|
-
await stateManager.
|
|
453
|
+
await stateManager.updateRepoData({
|
|
396
454
|
...stateData,
|
|
397
455
|
ignoredTestFiles,
|
|
398
456
|
maintenanceVerdicts: recommendations.map((r) => ({
|
|
@@ -408,13 +466,22 @@ export function registerActionsTool(server) {
|
|
|
408
466
|
// Persisted so the report-time working-tree check knows this UPDATE's
|
|
409
467
|
// change is the refreshed PNG, not the spec (SKYR-4298).
|
|
410
468
|
...(r.rebaselineSnapshots?.length
|
|
411
|
-
? {
|
|
469
|
+
? {
|
|
470
|
+
rebaselineSnapshots: r.rebaselineSnapshots,
|
|
471
|
+
rebaselineOnly: r.rebaselineOnly === true,
|
|
472
|
+
}
|
|
412
473
|
: {}),
|
|
413
474
|
// Persisted so maintenance coverage can tell a REGENERATE that rewrote a
|
|
414
475
|
// file from one that only advised the developer to: an external test's
|
|
415
476
|
// REGENERATE/DELETE keeps its real action and touches nothing, so without
|
|
416
477
|
// this the report credits a `maintains` claim no edit backs.
|
|
417
478
|
...(r.reportOnly ? { reportOnly: true } : {}),
|
|
479
|
+
// Persisted so the report stage can find the renamed file's run: the
|
|
480
|
+
// rename lands before execution, so the run is recorded under this
|
|
481
|
+
// path while testFilePath still holds the name it had before.
|
|
482
|
+
...(r._suggestedNewFile
|
|
483
|
+
? { _suggestedNewFile: r._suggestedNewFile }
|
|
484
|
+
: {}),
|
|
418
485
|
})),
|
|
419
486
|
}, { repo: args.repository, repositoryPath, step: "actions" });
|
|
420
487
|
}
|
|
@@ -445,13 +512,15 @@ export function registerActionsTool(server) {
|
|
|
445
512
|
continue;
|
|
446
513
|
if (rec.action === DriftAction.Delete) {
|
|
447
514
|
const existing = deleteByFile.get(rec.testFilePath);
|
|
448
|
-
if (!existing ||
|
|
515
|
+
if (!existing ||
|
|
516
|
+
priorityRank[rec.priority] > priorityRank[existing.priority]) {
|
|
449
517
|
deleteByFile.set(rec.testFilePath, rec);
|
|
450
518
|
}
|
|
451
519
|
}
|
|
452
520
|
else if (rec.action === DriftAction.Regenerate) {
|
|
453
521
|
const existing = regenerateByFile.get(rec.testFilePath);
|
|
454
|
-
if (!existing ||
|
|
522
|
+
if (!existing ||
|
|
523
|
+
priorityRank[rec.priority] > priorityRank[existing.priority]) {
|
|
455
524
|
regenerateByFile.set(rec.testFilePath, rec);
|
|
456
525
|
}
|
|
457
526
|
}
|
|
@@ -460,7 +529,8 @@ export function registerActionsTool(server) {
|
|
|
460
529
|
if (!regenerateByFile.has(rec.testFilePath)) {
|
|
461
530
|
const key = `${rec.testFilePath}::${rec.pomFile ?? ""}`;
|
|
462
531
|
const existing = updateByKey.get(key);
|
|
463
|
-
if (!existing ||
|
|
532
|
+
if (!existing ||
|
|
533
|
+
priorityRank[rec.priority] > priorityRank[existing.priority]) {
|
|
464
534
|
updateByKey.set(key, rec);
|
|
465
535
|
}
|
|
466
536
|
}
|
|
@@ -489,6 +559,36 @@ export function registerActionsTool(server) {
|
|
|
489
559
|
const testFilesToDelete = deleteRecommendations.map((rec) => rec.testFilePath);
|
|
490
560
|
const fileInstructions = [];
|
|
491
561
|
const testFilesToUpdate = [];
|
|
562
|
+
// A Skyramp test rewritten in place — updated or regenerated — owes the same
|
|
563
|
+
// modularize → reuse pair a generated one does, under the same predicate. The
|
|
564
|
+
// hand-off is recorded here, at the site that emits the instruction, as a
|
|
565
|
+
// maintenance hand-off: the file is at HEAD by definition, so the chain gate
|
|
566
|
+
// must not read that as "not this run's". An external test is the customer's
|
|
567
|
+
// code and is never modularized into the shared module. Returns the
|
|
568
|
+
// next-steps block for the file, or undefined when nothing was armed.
|
|
569
|
+
const armReuseChain = async (rec) => {
|
|
570
|
+
if (!skyrampTestFiles.has(rec.testFilePath))
|
|
571
|
+
return undefined;
|
|
572
|
+
const cataloged = catalogByFile.get(rec.testFilePath);
|
|
573
|
+
const language = cataloged?.language;
|
|
574
|
+
// Already the cataloged type — normalized once where the recommendation
|
|
575
|
+
// was built, so the verdict, the hand-off and the steps cannot disagree.
|
|
576
|
+
const testType = rec.testType;
|
|
577
|
+
if (!language) {
|
|
578
|
+
logger.info(`No language cataloged for ${rec.testFilePath} — not arming the modularize → reuse chain for this ${rec.action}`);
|
|
579
|
+
return undefined;
|
|
580
|
+
}
|
|
581
|
+
if (!isModularizeFirstHandOffTarget(testType, language))
|
|
582
|
+
return undefined;
|
|
583
|
+
const framework = cataloged?.framework ?? "";
|
|
584
|
+
await recordReuseHandOff([rec.testFilePath], testType, language, framework, args.stateFile, "maintenance");
|
|
585
|
+
return buildModularizeFirstNextSteps({
|
|
586
|
+
testType,
|
|
587
|
+
language,
|
|
588
|
+
framework,
|
|
589
|
+
enhanceFirst: false,
|
|
590
|
+
});
|
|
591
|
+
};
|
|
492
592
|
// ── UPDATE: emit targeted edit instructions ──
|
|
493
593
|
for (const rec of updateRecommendations) {
|
|
494
594
|
if (!rec.testFilePath) {
|
|
@@ -508,16 +608,33 @@ export function registerActionsTool(server) {
|
|
|
508
608
|
continue;
|
|
509
609
|
}
|
|
510
610
|
const renames = rec.renamedEndpoints || [];
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
//
|
|
514
|
-
//
|
|
515
|
-
//
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
611
|
+
// Computed above, before the verdicts were persisted.
|
|
612
|
+
const suggestedNewFile = rec._suggestedNewFile;
|
|
613
|
+
// Armed only when this UPDATE rewrites the SPEC BODY, because that is the
|
|
614
|
+
// only edit the modularize → reuse pair has anything to act on.
|
|
615
|
+
//
|
|
616
|
+
// `pomFile` set means the edit lands somewhere the spec delegates its
|
|
617
|
+
// selectors to, and the spec body is left alone. That is a page object in
|
|
618
|
+
// the case the field was named for, but agents also use it for the SHARED
|
|
619
|
+
// MODULE when a stale selector lives in a helper — observed twice on the
|
|
620
|
+
// repo20-SR02 fixture, and correct by the field's own description. Either
|
|
621
|
+
// way the spec is not rewritten, so it owes nothing. Consequence worth
|
|
622
|
+
// knowing: a fixture cannot assume a maintained spec gets armed, since the
|
|
623
|
+
// agent may route the whole edit through this field (SKYR-4412).
|
|
624
|
+
//
|
|
625
|
+
// A rename UPDATE is a URL-path substitution and moves the file; the hand-off
|
|
626
|
+
// is keyed by the path the file has now, so after the move the gate and the
|
|
627
|
+
// report would look there and find nothing — a debt recorded where no one
|
|
628
|
+
// reads it. A rebaseline-only UPDATE edits no spec at all; its maintenance is
|
|
629
|
+
// the PNG refresh. A rationale-only UPDATE (no updateInstructions) has no
|
|
630
|
+
// update_context entry to carry post_edit_steps, so the structured plan could
|
|
631
|
+
// not pay the debt.
|
|
632
|
+
if (!rec.pomFile &&
|
|
633
|
+
!suggestedNewFile &&
|
|
634
|
+
!rec.rebaselineOnly &&
|
|
635
|
+
rec.updateInstructions) {
|
|
636
|
+
rec._postEditSteps = await armReuseChain(rec);
|
|
637
|
+
}
|
|
521
638
|
fileInstructions.push(buildUpdateFileInstruction({
|
|
522
639
|
testFile: editTarget,
|
|
523
640
|
renames,
|
|
@@ -525,6 +642,7 @@ export function registerActionsTool(server) {
|
|
|
525
642
|
updateInstructions: rec.updateInstructions,
|
|
526
643
|
rationale: rec.rationale,
|
|
527
644
|
rebaselineSnapshots: rec.rebaselineSnapshots,
|
|
645
|
+
postEditSteps: rec._postEditSteps,
|
|
528
646
|
}));
|
|
529
647
|
}
|
|
530
648
|
// ── REGENERATE: emit overwrite instructions ──
|
|
@@ -536,11 +654,21 @@ export function registerActionsTool(server) {
|
|
|
536
654
|
continue;
|
|
537
655
|
}
|
|
538
656
|
testFilesToRegenerate.push(rec.testFilePath);
|
|
657
|
+
const cataloged = catalogByFile.get(rec.testFilePath);
|
|
658
|
+
// The generation call the instruction prescribes records its own hand-off for
|
|
659
|
+
// the file it writes; this maintenance mark is what that hand-off inherits its
|
|
660
|
+
// origin from, so the rewrite of a file at HEAD still owes the chain. Only for
|
|
661
|
+
// a type this step can actually regenerate (see isMaintenanceRegenerable).
|
|
662
|
+
if (isMaintenanceRegenerable(rec.testType)) {
|
|
663
|
+
await armReuseChain(rec);
|
|
664
|
+
}
|
|
539
665
|
regenerateInstructions.push(buildRegenerateFileInstruction({
|
|
540
666
|
testFile: rec.testFilePath,
|
|
541
667
|
updateInstructions: rec.updateInstructions,
|
|
542
668
|
outputDir: path.dirname(rec.testFilePath),
|
|
543
669
|
outputFile: path.basename(rec.testFilePath),
|
|
670
|
+
testType: rec.testType,
|
|
671
|
+
language: cataloged?.language,
|
|
544
672
|
}));
|
|
545
673
|
}
|
|
546
674
|
// ── Build response text ──
|
|
@@ -556,7 +684,9 @@ export function registerActionsTool(server) {
|
|
|
556
684
|
}
|
|
557
685
|
if (regenerateRecommendations.length > 0) {
|
|
558
686
|
sections.push(`## Tests Requiring Regeneration (${regenerateRecommendations.length})\n\n` +
|
|
559
|
-
testFilesToRegenerate
|
|
687
|
+
testFilesToRegenerate
|
|
688
|
+
.map((f, i) => `${i + 1}. \`${f}\``)
|
|
689
|
+
.join("\n") +
|
|
560
690
|
`\n\n---\n` +
|
|
561
691
|
regenerateInstructions.join("\n---\n"));
|
|
562
692
|
}
|
|
@@ -564,12 +694,16 @@ export function registerActionsTool(server) {
|
|
|
564
694
|
sections.push(`## Tests To Delete (${deleteRecommendations.length})\n\n` +
|
|
565
695
|
testFilesToDelete.map((f, i) => `${i + 1}. \`${f}\``).join("\n") +
|
|
566
696
|
`\n\n---\n` +
|
|
567
|
-
deleteRecommendations
|
|
697
|
+
deleteRecommendations
|
|
698
|
+
.map((rec) => `- **${rec.testFilePath}**${rec.rationale ? ` — ${rec.rationale}` : ""}`)
|
|
699
|
+
.join("\n"));
|
|
568
700
|
}
|
|
569
701
|
if (otherRecs.length > 0) {
|
|
570
702
|
sections.push(`## Other Findings (${otherRecs.length})\n\n` +
|
|
571
|
-
otherRecs
|
|
572
|
-
(rec
|
|
703
|
+
otherRecs
|
|
704
|
+
.map((rec) => `- **${rec.testFilePath}** — Action: ${rec.action}, Priority: ${rec.priority}` +
|
|
705
|
+
(rec.rationale ? ` — ${rec.rationale}` : ""))
|
|
706
|
+
.join("\n"));
|
|
573
707
|
}
|
|
574
708
|
else if (updateRecommendations.length === 0 &&
|
|
575
709
|
regenerateRecommendations.length === 0 &&
|
|
@@ -585,7 +719,9 @@ export function registerActionsTool(server) {
|
|
|
585
719
|
// ── Build LLM instructions ──
|
|
586
720
|
const uniqueRenames = updateRecommendations
|
|
587
721
|
.flatMap((rec) => rec.renamedEndpoints ?? [])
|
|
588
|
-
.filter((r, i, arr) => arr.findIndex((x) => x.oldPath === r.oldPath &&
|
|
722
|
+
.filter((r, i, arr) => arr.findIndex((x) => x.oldPath === r.oldPath &&
|
|
723
|
+
x.newPath === r.newPath &&
|
|
724
|
+
x.method === r.method) === i);
|
|
589
725
|
const llmInstructionsObj = {
|
|
590
726
|
workflow: "test_maintenance",
|
|
591
727
|
action: "execute_updates",
|
|
@@ -603,7 +739,10 @@ export function registerActionsTool(server) {
|
|
|
603
739
|
const fileRenames = [];
|
|
604
740
|
for (const rec of updateRecommendations) {
|
|
605
741
|
if (rec._suggestedNewFile) {
|
|
606
|
-
fileRenames.push({
|
|
742
|
+
fileRenames.push({
|
|
743
|
+
from: rec.testFilePath,
|
|
744
|
+
to: rec._suggestedNewFile,
|
|
745
|
+
});
|
|
607
746
|
}
|
|
608
747
|
}
|
|
609
748
|
if (fileRenames.length > 0) {
|
|
@@ -624,19 +763,29 @@ export function registerActionsTool(server) {
|
|
|
624
763
|
// explicit edit_required: false so the strategy's "make the changes
|
|
625
764
|
// described in context" cannot apply to it (rationale is always set,
|
|
626
765
|
// so it must not stand in for edit instructions here).
|
|
627
|
-
...(hasEdit
|
|
766
|
+
...(hasEdit
|
|
767
|
+
? { context: rec.updateInstructions }
|
|
768
|
+
: { edit_required: false }),
|
|
628
769
|
...(rec.editSites?.length ? { edit_sites: rec.editSites } : {}),
|
|
629
770
|
// The baselines to pass as skyramp_execute_test's rebaselineSnapshots for
|
|
630
771
|
// the SPEC (testFilePath, which is what runs) — never `file`, which is
|
|
631
772
|
// the page object for a POM-backed UPDATE.
|
|
632
773
|
...(rec.rebaselineSnapshots?.length
|
|
633
|
-
? {
|
|
774
|
+
? {
|
|
775
|
+
spec_file: rec.testFilePath,
|
|
776
|
+
rebaseline_snapshots: rec.rebaselineSnapshots,
|
|
777
|
+
}
|
|
778
|
+
: {}),
|
|
779
|
+
// The modularize → reuse steps the file owes, on the entry the agent
|
|
780
|
+
// follows (the summary block above is the same text for a reader).
|
|
781
|
+
...(rec._postEditSteps
|
|
782
|
+
? { post_edit_steps: rec._postEditSteps }
|
|
634
783
|
: {}),
|
|
635
784
|
};
|
|
636
785
|
});
|
|
637
786
|
if (updateContext.length > 0) {
|
|
638
787
|
llmInstructionsObj.update_context = updateContext;
|
|
639
|
-
llmInstructionsObj.update_strategy = buildUpdateStrategy();
|
|
788
|
+
llmInstructionsObj.update_strategy = buildUpdateStrategy(updateContext.some((u) => "post_edit_steps" in u));
|
|
640
789
|
if (updateContext.some((u) => "rebaseline_snapshots" in u)) {
|
|
641
790
|
llmInstructionsObj.rebaseline_strategy = buildRebaselineStrategy();
|
|
642
791
|
}
|
|
@@ -649,6 +798,7 @@ export function registerActionsTool(server) {
|
|
|
649
798
|
// replicate the file. Those come from the discovery catalog, so the file
|
|
650
799
|
// text is not needed to carry them.
|
|
651
800
|
const cataloged = catalogByFile.get(rec.testFilePath);
|
|
801
|
+
const generationArgs = regenerateCodeReuse(rec.testType, cataloged?.language)?.args;
|
|
652
802
|
return {
|
|
653
803
|
file: rec.testFilePath,
|
|
654
804
|
rationale: rec.updateInstructions || rec.rationale,
|
|
@@ -656,13 +806,17 @@ export function registerActionsTool(server) {
|
|
|
656
806
|
// use them instead of reading the file, so an absent one leaves the generation
|
|
657
807
|
// call without a target. The catalog's apiEndpoint is optional and can be an
|
|
658
808
|
// empty string; both fields are required on the recommendation itself.
|
|
659
|
-
test_type:
|
|
809
|
+
test_type: rec.testType,
|
|
660
810
|
endpoint: cataloged?.apiEndpoint || rec.endpoint,
|
|
661
811
|
...(cataloged?.language && { language: cataloged.language }),
|
|
662
812
|
...(cataloged?.framework && { framework: cataloged.framework }),
|
|
813
|
+
// The codeReuse options the per-file instruction asks for, on the entry
|
|
814
|
+
// the agent follows, so a client that reads only the structured plan
|
|
815
|
+
// still arms the chain the maintenance hand-off recorded.
|
|
816
|
+
...(generationArgs && { generation_args: generationArgs }),
|
|
663
817
|
};
|
|
664
818
|
});
|
|
665
|
-
llmInstructionsObj.regenerate_strategy = buildRegenerateStrategy();
|
|
819
|
+
llmInstructionsObj.regenerate_strategy = buildRegenerateStrategy(llmInstructionsObj.regenerate_context.some((e) => !!e.generation_args));
|
|
666
820
|
}
|
|
667
821
|
if (deleteRecommendations.length > 0) {
|
|
668
822
|
llmInstructionsObj.delete_strategy = buildDeleteStrategy();
|
|
@@ -671,7 +825,10 @@ export function registerActionsTool(server) {
|
|
|
671
825
|
// The two payloads were previously separate content[] blocks annotated
|
|
672
826
|
// audience: ["user"] and ["assistant"]. Nothing in this repo read those
|
|
673
827
|
// annotations, and the field names carry the same distinction.
|
|
674
|
-
return dualChannelResult({
|
|
828
|
+
return dualChannelResult({
|
|
829
|
+
summary: responseText,
|
|
830
|
+
instructions: llmInstructions,
|
|
831
|
+
});
|
|
675
832
|
}
|
|
676
833
|
catch (error) {
|
|
677
834
|
logger.error(`Actions tool failed: ${error.message}`, error);
|
|
@@ -689,7 +846,9 @@ export function registerActionsTool(server) {
|
|
|
689
846
|
}
|
|
690
847
|
AnalyticsService.pushMCPToolEvent(TOOL_NAME, errorResult, {
|
|
691
848
|
repositoryPath,
|
|
692
|
-
}).catch((err) => {
|
|
849
|
+
}).catch((err) => {
|
|
850
|
+
logger.warning("Analytics event failed", { error: String(err) });
|
|
851
|
+
});
|
|
693
852
|
}
|
|
694
853
|
});
|
|
695
854
|
}
|
|
@@ -11,12 +11,11 @@ export declare function buildTraceFileEntry(tracePath: string, result: TracePars
|
|
|
11
11
|
export declare function isGraphQLFile(filePath: string, repositoryPath: string): Promise<boolean>;
|
|
12
12
|
export declare const analyzeChangesInputSchema: {
|
|
13
13
|
repositoryPath: z.ZodString;
|
|
14
|
+
repository: z.ZodString;
|
|
14
15
|
scope: z.ZodOptional<z.ZodDefault<z.ZodEnum<["full_repo", "branch_diff"]>>>;
|
|
15
16
|
baseBranch: z.ZodOptional<z.ZodString>;
|
|
16
17
|
testDirectory: z.ZodOptional<z.ZodString>;
|
|
17
18
|
prNumber: z.ZodOptional<z.ZodNumber>;
|
|
18
|
-
repository: z.ZodOptional<z.ZodString>;
|
|
19
|
-
primaryRepository: z.ZodOptional<z.ZodString>;
|
|
20
19
|
testsRepoDir: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
21
20
|
includeUncommitted: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
22
21
|
};
|
|
@@ -31,8 +30,8 @@ export interface AnalyzeChangesData {
|
|
|
31
30
|
stateFile?: string;
|
|
32
31
|
repositoryPath: string;
|
|
33
32
|
repositoryName: string;
|
|
34
|
-
/** owner/repo
|
|
35
|
-
repository
|
|
33
|
+
/** owner/repo of the analyzed repository. Always supplied. */
|
|
34
|
+
repository: string;
|
|
36
35
|
/** Other repositories already analyzed into this run's state file. */
|
|
37
36
|
relatedRepositories?: string[];
|
|
38
37
|
analysisScope: string;
|
|
@@ -86,7 +85,7 @@ export declare const analyzeChangesOutputSchema: {
|
|
|
86
85
|
stateFile: z.ZodOptional<z.ZodString>;
|
|
87
86
|
repositoryPath: z.ZodString;
|
|
88
87
|
repositoryName: z.ZodString;
|
|
89
|
-
repository: z.
|
|
88
|
+
repository: z.ZodString;
|
|
90
89
|
relatedRepositories: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
91
90
|
analysisScope: z.ZodString;
|
|
92
91
|
planOnly: z.ZodBoolean;
|