@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
|
@@ -15,7 +15,8 @@ import { isInsideExecutorWorkDir, executorWorkDirRefusal, generationTargets, } f
|
|
|
15
15
|
import { getTestsRepoDir } from "../utils/AnalysisStateManager.js";
|
|
16
16
|
import { recordReuseHandOff } from "../tools/code-refactor/reuse-state.js";
|
|
17
17
|
import { recordAssertionBaseline } from "../tools/code-refactor/assertion-state.js";
|
|
18
|
-
import {
|
|
18
|
+
import { persistGeneratedTest } from "../utils/generatedTestRecord.js";
|
|
19
|
+
import { buildModularizeFirstNextSteps, isModularizeFirstHandOffTarget, reuseCodeArgsClause, } from "../prompts/reuse-hand-off.js";
|
|
19
20
|
/**
|
|
20
21
|
* Derive the framework actually used for generation from the (normalized)
|
|
21
22
|
* language + framework params. A blank/whitespace-only framework is treated as
|
|
@@ -107,12 +108,24 @@ export class TestGenerationService {
|
|
|
107
108
|
// The files this call wrote, as codegen reports them — the reuse hand-off is
|
|
108
109
|
// recorded per FILE (SKYR-4220).
|
|
109
110
|
const written = generatedFilesFrom(result);
|
|
111
|
+
// Record the paths this call wrote, unconditionally. The generator is the
|
|
112
|
+
// only place they are known, and the report otherwise has to fall back to
|
|
113
|
+
// the agent's `fileName` — a basename, so two specs of one name in
|
|
114
|
+
// different directories answer for each other. Not folded into the
|
|
115
|
+
// assertion baseline below: that one is skipped for whole test types.
|
|
116
|
+
// A mock is not a test and is never executed, so it is not recorded.
|
|
117
|
+
const generatedType = this.getTestType();
|
|
118
|
+
if (generatedType !== MOCK_TYPE) {
|
|
119
|
+
for (const file of written) {
|
|
120
|
+
await persistGeneratedTest(file, generatedType);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
110
123
|
// Seed the assertion-enhancement baseline SERVER-SIDE at generation time
|
|
111
124
|
// (same pattern as recordReuseHandOff below): the execute-time
|
|
112
125
|
// verification gate arms even if the agent never calls
|
|
113
126
|
// skyramp_enhance_assertions at all — the last prompt-mediated entry
|
|
114
127
|
// point. Best-effort; no run state means the gate stays open as before.
|
|
115
|
-
const testType =
|
|
128
|
+
const testType = generatedType;
|
|
116
129
|
if (params.enhanceAssertions &&
|
|
117
130
|
testType !== MOCK_TYPE &&
|
|
118
131
|
ASSERTION_ENHANCEABLE_TEST_TYPES.includes(testType) &&
|
|
@@ -128,25 +141,32 @@ export class TestGenerationService {
|
|
|
128
141
|
});
|
|
129
142
|
// Orchestrate code optimization workflow based on flags
|
|
130
143
|
let postGenerationMessage = "";
|
|
131
|
-
|
|
144
|
+
// skyramp_mock_generation's schema carries no `codeReuse` field, so the mock
|
|
145
|
+
// pseudo-type cannot reach this branch. Narrowed here rather than widened in
|
|
146
|
+
// the shared hand-off module, which deals in TestType only.
|
|
147
|
+
const reuseTestType = testType === MOCK_TYPE ? undefined : testType;
|
|
148
|
+
if (params.codeReuse && reuseTestType) {
|
|
132
149
|
// Name the framework generation actually used, not the raw parameter:
|
|
133
150
|
// TS/JS derive to playwright when the caller omitted it, and
|
|
134
151
|
// skyramp_reuse_code requires framework to route correctly.
|
|
135
152
|
const effectiveFramework = deriveEffectiveFramework(params.language || "", params.framework);
|
|
136
|
-
const reuseArgs =
|
|
153
|
+
const reuseArgs = reuseCodeArgsClause(params.language, reuseTestType, effectiveFramework);
|
|
137
154
|
// Modularize-first: fresh codegen carries no helper functions (each
|
|
138
155
|
// endpoint called once, each browser step inline), so modularization is
|
|
139
156
|
// what creates the named helpers that reuse then consolidates into the
|
|
140
157
|
// shared utils file. Emitted here, not in the testbot prompt, so the
|
|
141
158
|
// instruction exists only on runs that actually generated this test type
|
|
142
159
|
// and needs no hand-maintained step numbering.
|
|
143
|
-
|
|
160
|
+
// The predicate rather than emitsModularizeFirstHandOff: both mean the
|
|
161
|
+
// same inside this codeReuse branch, and this one narrows the language to
|
|
162
|
+
// one the utils verifier covers, which is what the steps require.
|
|
163
|
+
if (isModularizeFirstHandOffTarget(reuseTestType, params.language)) {
|
|
144
164
|
// SKYR-4220: record the hand-off at the site that emits it, under the same
|
|
145
165
|
// condition, so skyramp_execute_test can refuse a test that skipped the pair
|
|
146
166
|
// and the report can mark it — without ever owing it for a test that was not
|
|
147
167
|
// told to run it. Keyed by the files this call wrote: a test generated into
|
|
148
168
|
// the same directory without codeReuse owes nothing.
|
|
149
|
-
await recordReuseHandOff(written, testType, params.language
|
|
169
|
+
await recordReuseHandOff(written, testType, params.language, effectiveFramework);
|
|
150
170
|
// Browser tests: the assertion enhancer anchors new assertions to
|
|
151
171
|
// selectors present in the test file, and after modularize → reuse
|
|
152
172
|
// those selectors live in the utils file. So for UI the enhancer runs
|
|
@@ -154,23 +174,15 @@ export class TestGenerationService {
|
|
|
154
174
|
// assertion in the test body. API enhancers key off response paths,
|
|
155
175
|
// so integration keeps its validated modularize → reuse → enhance order.
|
|
156
176
|
const enhanceFirst = testType === TestType.UI && !!params.enhanceAssertions;
|
|
157
|
-
const steps = [
|
|
158
|
-
...(enhanceFirst
|
|
159
|
-
? [
|
|
160
|
-
`Call \`skyramp_enhance_assertions\` with \`testFile\` set to the absolute path of the generated test file, \`testType: "${testType}"\`, and \`enhanceType: "generation"\`, and apply every instruction returned to that file — BEFORE modularization, while the file's selectors are still inline.`,
|
|
161
|
-
]
|
|
162
|
-
: []),
|
|
163
|
-
`Call \`skyramp_modularization\` with \`testFile\`, \`testType: "${testType}"\`, and \`isTraceBased: true\`, and apply the returned instructions — this extracts the test's steps into named helper functions, which is what makes cross-test reuse possible.`,
|
|
164
|
-
`Immediately after writing the modularized file — as your very NEXT skyramp tool call — call \`skyramp_reuse_code\` with ${reuseArgs}. The modularization call does NOT count as this step: reuse is a separate tool and MUST be invoked even when you expect it to find nothing. Follow the returned steps to completion. Sibling tests offering nothing to reuse is a normal outcome — the returned steps still move THIS test's own helpers into the shared utils file and import them back, so the test file IS expected to change; finish those steps, then continue (do NOT retry).`,
|
|
165
|
-
];
|
|
166
|
-
const ordering = enhanceFirst
|
|
167
|
-
? "three sub-steps, STRICTLY SEQUENTIAL (never in the same tool-call batch)"
|
|
168
|
-
: "two sub-steps, STRICTLY SEQUENTIAL (never in the same tool-call batch), BOTH BEFORE `skyramp_enhance_assertions`";
|
|
169
177
|
postGenerationMessage += `
|
|
170
178
|
Test generated successfully!
|
|
171
179
|
|
|
172
|
-
|
|
173
|
-
|
|
180
|
+
${buildModularizeFirstNextSteps({
|
|
181
|
+
testType: reuseTestType,
|
|
182
|
+
language: params.language,
|
|
183
|
+
framework: effectiveFramework,
|
|
184
|
+
enhanceFirst,
|
|
185
|
+
})}
|
|
174
186
|
`;
|
|
175
187
|
}
|
|
176
188
|
else {
|
|
@@ -271,10 +283,15 @@ The generated test file remains unchanged and ready to use as-is.
|
|
|
271
283
|
const suggested = /\.[tj]s$/.test(parsed.ext)
|
|
272
284
|
? params.output.replace(/\.[tj]s$/, ".spec.ts")
|
|
273
285
|
: params.output + ".spec.ts";
|
|
286
|
+
// Both spellings are named: the repository decides which files are tests,
|
|
287
|
+
// and one that declares `testMatch: ["**/*.test.ts"]` collects no
|
|
288
|
+
// *.spec.ts (SKYR-4489).
|
|
289
|
+
const alternative = suggested.replace(/\.spec\.ts$/, ".test.ts");
|
|
274
290
|
errList.content.push({
|
|
275
291
|
type: "text",
|
|
276
|
-
text: `Error: Playwright requires test files to match *.{spec}.{ts,js} (got "${params.output}"). ` +
|
|
277
|
-
`Rename to
|
|
292
|
+
text: `Error: Playwright requires test files to match *.{spec,test}.{ts,js} (got "${params.output}"). ` +
|
|
293
|
+
`Rename to ${suggested}, or to ${alternative} if the tests already in ` +
|
|
294
|
+
`${params.outputDir} use that spelling.`,
|
|
278
295
|
});
|
|
279
296
|
}
|
|
280
297
|
}
|
|
@@ -303,13 +320,15 @@ The generated test file remains unchanged and ready to use as-is.
|
|
|
303
320
|
}
|
|
304
321
|
/**
|
|
305
322
|
* Whether this generation's codeReuse hand-off sequences skyramp_modularization
|
|
306
|
-
* before skyramp_reuse_code (
|
|
323
|
+
* before skyramp_reuse_code (isModularizeFirstHandOffTarget). Subclasses that
|
|
307
324
|
* add their own post-generation steps consult this so modularization is
|
|
308
325
|
* instructed exactly once.
|
|
309
326
|
*/
|
|
310
327
|
emitsModularizeFirstHandOff(params) {
|
|
328
|
+
const testType = this.getTestType();
|
|
311
329
|
return (!!params.codeReuse &&
|
|
312
|
-
|
|
330
|
+
testType !== MOCK_TYPE &&
|
|
331
|
+
isModularizeFirstHandOffTarget(testType, params.language));
|
|
313
332
|
}
|
|
314
333
|
async handleApiAnalysis(params) {
|
|
315
334
|
if (params.apiSchema && params.endpointURL && params.method === "") {
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { EnhanceType } from "../types/EnhanceType.js";
|
|
2
|
+
/**
|
|
3
|
+
* The `enhance-assertions` skill ships in `plugin/skills/` at the
|
|
4
|
+
* package root (SKYR-4310). Its markdown is the single source of the assertion
|
|
5
|
+
* instructions: Claude Code loads the skill through `--plugin-dir`, and every
|
|
6
|
+
* other agent gets the same rules assembled from the same files by
|
|
7
|
+
* `skyramp_enhance_assertions`, whose behaviour is otherwise unchanged.
|
|
8
|
+
*/
|
|
9
|
+
export declare const ENHANCE_ASSERTIONS_SKILL = "enhance-assertions";
|
|
10
|
+
/** The shared response-body rules, without the surrounding framing. */
|
|
11
|
+
export declare function sharedAssertionRules(): string;
|
|
12
|
+
/** Full instruction text, assembled from the same markdown the skill reads.
|
|
13
|
+
* Used by agents that cannot load the plugin. */
|
|
14
|
+
export declare function buildEnhanceAssertionsInstructions(testFile: string, testType: string, enhanceType: EnhanceType): string;
|
|
15
|
+
/**
|
|
16
|
+
* The maintenance equivalent, for the UPDATE strategy. It covers a set of
|
|
17
|
+
* already-edited files rather than one freshly generated file, so it names no
|
|
18
|
+
* single test type and states the per-file duty over that set.
|
|
19
|
+
*
|
|
20
|
+
* This route was the last one still naming the tool literally. Because MCP tool
|
|
21
|
+
* output beats the prompt on conflict, that one call handed the agent the whole
|
|
22
|
+
* rule text, and an agent already holding the rules has no reason to invoke the
|
|
23
|
+
* skill — which is why two A/B runs recorded zero invocations while the
|
|
24
|
+
* per-file gates worked (SKYR-4310).
|
|
25
|
+
*/
|
|
26
|
+
export declare function enhanceAssertionsMaintenanceCall(): string;
|
|
27
|
+
/** `enhanceAssertionsCall` as a standalone sentence, for a generation result's
|
|
28
|
+
* numbered step list. */
|
|
29
|
+
export declare function enhanceAssertionsStep(testType: string, fileDescription: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* How a prompt or a generation result should tell the agent to enhance
|
|
32
|
+
* assertions. With the skills plugin loaded the skill owns the whole workflow
|
|
33
|
+
* — baseline, rules, verification — so naming the tool here would hand the
|
|
34
|
+
* agent the same rules a second time (SKYR-4310).
|
|
35
|
+
*
|
|
36
|
+
* The per-file duty is stated HERE, in the routing text, not left to the skill
|
|
37
|
+
* body. A tool call is cheap and repeatable, so the agent makes one per file
|
|
38
|
+
* without thinking; a skill invocation loads instructions into the
|
|
39
|
+
* conversation, and invoking it again reads as redundant. In the first A/B the
|
|
40
|
+
* agent therefore invoked the skill once and enhanced 3 of 5 files, against 5
|
|
41
|
+
* of 5 with the plugin off. So the routing says the count, and puts the
|
|
42
|
+
* repeated action on the two tools, which are called once per file however
|
|
43
|
+
* many times the skill itself is invoked.
|
|
44
|
+
*/
|
|
45
|
+
export declare function enhanceAssertionsCall(testType: string, fileDescription: string): string;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { getPersonaPrefix } from "../prompts/personas.js";
|
|
2
|
+
import { TestType } from "../types/TestTypes.js";
|
|
3
|
+
import { isSkillsLoaded, isTestbotEnabled } from "../utils/featureFlags.js";
|
|
4
|
+
import { readSkillFile, section, sectionBody, sliceBetween, sliceFrom, sliceUntil, fillPlaceholders, } from "./skillFiles.js";
|
|
5
|
+
/**
|
|
6
|
+
* The `enhance-assertions` skill ships in `plugin/skills/` at the
|
|
7
|
+
* package root (SKYR-4310). Its markdown is the single source of the assertion
|
|
8
|
+
* instructions: Claude Code loads the skill through `--plugin-dir`, and every
|
|
9
|
+
* other agent gets the same rules assembled from the same files by
|
|
10
|
+
* `skyramp_enhance_assertions`, whose behaviour is otherwise unchanged.
|
|
11
|
+
*/
|
|
12
|
+
export const ENHANCE_ASSERTIONS_SKILL = "enhance-assertions";
|
|
13
|
+
const TESTBOT_UI_SECTION = "## Additional checks in Testbot runs";
|
|
14
|
+
function reference(name) {
|
|
15
|
+
return readSkillFile(ENHANCE_ASSERTIONS_SKILL, `reference/${name}.md`);
|
|
16
|
+
}
|
|
17
|
+
/** The shared response-body rules, without the surrounding framing. */
|
|
18
|
+
export function sharedAssertionRules() {
|
|
19
|
+
return sectionBody(reference("shared-rules"), "## Assertion Rules with Examples");
|
|
20
|
+
}
|
|
21
|
+
/** Full instruction text, assembled from the same markdown the skill reads.
|
|
22
|
+
* Used by agents that cannot load the plugin. */
|
|
23
|
+
export function buildEnhanceAssertionsInstructions(testFile, testType, enhanceType) {
|
|
24
|
+
const shared = reference("shared-rules");
|
|
25
|
+
// Only the maintenance mode narrows scope; generation keeps the whole file.
|
|
26
|
+
const scope = enhanceType === "maintenance"
|
|
27
|
+
? ` ${sectionBody(shared, "### When maintaining an existing test")}`
|
|
28
|
+
: "";
|
|
29
|
+
if (testType === TestType.UI) {
|
|
30
|
+
const uiRef = reference("ui");
|
|
31
|
+
const ui = sliceFrom(uiRef, "## First Check");
|
|
32
|
+
const rules = isTestbotEnabled() ? ui : sliceUntil(ui, TESTBOT_UI_SECTION);
|
|
33
|
+
// The principle governs every rule below it, so it leads the hand-out too.
|
|
34
|
+
// Both slicers used to start below it and dropped it silently.
|
|
35
|
+
const body = `${section(uiRef, "## What to assert")}\n\n${rules}`;
|
|
36
|
+
// Positional order matches the skill: the two fixed values first, then
|
|
37
|
+
// the path, so a path containing a space cannot shift them.
|
|
38
|
+
return fillPlaceholders(`${getPersonaPrefix()}Your task is to enhance assertions for the given UI test file: \`${testFile}\`.${scope}\n\n${body}\n`, [testType, enhanceType, testFile]);
|
|
39
|
+
}
|
|
40
|
+
if (testType !== TestType.CONTRACT && testType !== TestType.INTEGRATION) {
|
|
41
|
+
throw new Error(`Unsupported testType for skyramp_enhance_assertions: ${testType}`);
|
|
42
|
+
}
|
|
43
|
+
const body = [
|
|
44
|
+
section(shared, "## What to assert"),
|
|
45
|
+
sliceBetween(shared, "## Pre-Edit Assertion Analysis", "## What not to do"),
|
|
46
|
+
sliceFrom(reference(testType), "## Additional assertion rules"),
|
|
47
|
+
sliceFrom(shared, "## What not to do"),
|
|
48
|
+
].join("\n\n");
|
|
49
|
+
return fillPlaceholders(`${getPersonaPrefix()}Your task is to enhance response body assertions in the given test file: \`${testFile}\`.${scope}\n\n${body}`, [testType, enhanceType, testFile]);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The maintenance equivalent, for the UPDATE strategy. It covers a set of
|
|
53
|
+
* already-edited files rather than one freshly generated file, so it names no
|
|
54
|
+
* single test type and states the per-file duty over that set.
|
|
55
|
+
*
|
|
56
|
+
* This route was the last one still naming the tool literally. Because MCP tool
|
|
57
|
+
* output beats the prompt on conflict, that one call handed the agent the whole
|
|
58
|
+
* rule text, and an agent already holding the rules has no reason to invoke the
|
|
59
|
+
* skill — which is why two A/B runs recorded zero invocations while the
|
|
60
|
+
* per-file gates worked (SKYR-4310).
|
|
61
|
+
*/
|
|
62
|
+
export function enhanceAssertionsMaintenanceCall() {
|
|
63
|
+
if (isSkillsLoaded()) {
|
|
64
|
+
return (`invoke the \`${ENHANCE_ASSERTIONS_SKILL}\` skill for each updated file, with arguments ` +
|
|
65
|
+
`\`<testType> maintenance <absolute path of the file>\`. Do this for EVERY file you just ` +
|
|
66
|
+
`edited, one at a time: five updated files means five ` +
|
|
67
|
+
`\`skyramp_enhance_assertions_snapshot\` calls and five passing ` +
|
|
68
|
+
`\`skyramp_verify_enhance_assertions\` calls. The snapshot for a file comes after your ` +
|
|
69
|
+
`maintenance edit and before you add assertions to it — it is the baseline the ` +
|
|
70
|
+
`verification measures against. Read the skill's rules once, then repeat its per-file ` +
|
|
71
|
+
`steps for the rest`);
|
|
72
|
+
}
|
|
73
|
+
return (`call \`skyramp_enhance_assertions\` once per updated file, with that file's path, its ` +
|
|
74
|
+
`\`testType\`, and \`enhanceType: "maintenance"\`, and apply every instruction returned to ` +
|
|
75
|
+
`that file`);
|
|
76
|
+
}
|
|
77
|
+
/** `enhanceAssertionsCall` as a standalone sentence, for a generation result's
|
|
78
|
+
* numbered step list. */
|
|
79
|
+
export function enhanceAssertionsStep(testType, fileDescription) {
|
|
80
|
+
const call = enhanceAssertionsCall(testType, fileDescription);
|
|
81
|
+
return `${call.charAt(0).toUpperCase()}${call.slice(1)}.`;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* How a prompt or a generation result should tell the agent to enhance
|
|
85
|
+
* assertions. With the skills plugin loaded the skill owns the whole workflow
|
|
86
|
+
* — baseline, rules, verification — so naming the tool here would hand the
|
|
87
|
+
* agent the same rules a second time (SKYR-4310).
|
|
88
|
+
*
|
|
89
|
+
* The per-file duty is stated HERE, in the routing text, not left to the skill
|
|
90
|
+
* body. A tool call is cheap and repeatable, so the agent makes one per file
|
|
91
|
+
* without thinking; a skill invocation loads instructions into the
|
|
92
|
+
* conversation, and invoking it again reads as redundant. In the first A/B the
|
|
93
|
+
* agent therefore invoked the skill once and enhanced 3 of 5 files, against 5
|
|
94
|
+
* of 5 with the plugin off. So the routing says the count, and puts the
|
|
95
|
+
* repeated action on the two tools, which are called once per file however
|
|
96
|
+
* many times the skill itself is invoked.
|
|
97
|
+
*/
|
|
98
|
+
export function enhanceAssertionsCall(testType, fileDescription) {
|
|
99
|
+
if (isSkillsLoaded()) {
|
|
100
|
+
return `invoke the \`${ENHANCE_ASSERTIONS_SKILL}\` skill with arguments \`${testType} generation <absolute path of the ${fileDescription}>\` (a project skill with the same name takes precedence over the plugin copy) and follow every step it lists, including its final verification. Do this for EVERY ${fileDescription}, one file at a time. Read the skill's rules once, then repeat its per-file steps for each remaining file — \`skyramp_enhance_assertions_snapshot\` and \`skyramp_verify_enhance_assertions\` are called once per file, so N such files means N snapshot calls and N passing verify calls. Do not re-invoke the skill for a file whose rules you already hold, and do not stop after the first file`;
|
|
101
|
+
}
|
|
102
|
+
return `call \`skyramp_enhance_assertions\` with \`testFile\` set to the absolute path of the ${fileDescription}, \`testType: "${testType}"\`, and \`enhanceType: "generation"\`, and apply every instruction returned to that file. Do this for EVERY ${fileDescription} — N such files means N calls`;
|
|
103
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The `fix-test-import-errors` skill ships in `plugin/skills/` at the package
|
|
3
3
|
* root (SKYR-4296). It carries the same instructions `skyramp_fix_errors`
|
|
4
|
-
* returns, so an agent that loads the plugin follows
|
|
5
|
-
* that does not keeps calling the tool.
|
|
4
|
+
* returns from the same Markdown, so an agent that loads the plugin follows
|
|
5
|
+
* the skill and an agent that does not keeps calling the tool.
|
|
6
6
|
*/
|
|
7
7
|
export declare const FIX_TEST_IMPORT_ERRORS_SKILL = "fix-test-import-errors";
|
|
8
8
|
/**
|
|
@@ -2,8 +2,8 @@ import { isSkillsLoaded } from "../utils/featureFlags.js";
|
|
|
2
2
|
/**
|
|
3
3
|
* The `fix-test-import-errors` skill ships in `plugin/skills/` at the package
|
|
4
4
|
* root (SKYR-4296). It carries the same instructions `skyramp_fix_errors`
|
|
5
|
-
* returns, so an agent that loads the plugin follows
|
|
6
|
-
* that does not keeps calling the tool.
|
|
5
|
+
* returns from the same Markdown, so an agent that loads the plugin follows
|
|
6
|
+
* the skill and an agent that does not keeps calling the tool.
|
|
7
7
|
*/
|
|
8
8
|
export const FIX_TEST_IMPORT_ERRORS_SKILL = "fix-test-import-errors";
|
|
9
9
|
const FIX_ERRORS_TOOL = "skyramp_fix_errors";
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reader for the Agent Skills shipped in `plugin/skills/` at the package root
|
|
3
|
+
* (SKYR-4296, SKYR-4310). The markdown files are the single source of the
|
|
4
|
+
* instruction text: Claude Code loads them through `--plugin-dir`, and every
|
|
5
|
+
* other agent receives the same text back from the MCP tool that would
|
|
6
|
+
* otherwise hand out a prompt.
|
|
7
|
+
*/
|
|
8
|
+
/** Absolute path of the shipped `plugin/` directory. */
|
|
9
|
+
export declare function pluginRoot(): string;
|
|
10
|
+
/** Removes a leading YAML frontmatter block, if present. */
|
|
11
|
+
export declare function stripFrontmatter(raw: string): string;
|
|
12
|
+
/** Raw contents of a file inside one skill directory, e.g. `SKILL.md` or
|
|
13
|
+
* `reference/ui.md`. */
|
|
14
|
+
export declare function readSkillFile(skillName: string, relPath: string): string;
|
|
15
|
+
/** SKILL.md body with the YAML frontmatter removed. */
|
|
16
|
+
export declare function readSkillBody(skillName: string): string;
|
|
17
|
+
/** Fill positional `$0`, `$1`, ... placeholders in `text` with `values[n]`,
|
|
18
|
+
* in one pass. `\$` unescapes to a literal `$`, so `\$19.98` in an example
|
|
19
|
+
* reads as itself rather than value 1 followed by "9.98". A placeholder's
|
|
20
|
+
* surrounding backticks, if any, are untouched by the match — the regex
|
|
21
|
+
* matches only the token, not its context — so a standalone code span
|
|
22
|
+
* (`` `$0` ``) and a placeholder nested inside a larger one both come out
|
|
23
|
+
* correctly with no extra handling. */
|
|
24
|
+
export declare function fillPlaceholders(text: string, values: string[]): string;
|
|
25
|
+
/** Everything from `heading` (matched as a line prefix) to the end. */
|
|
26
|
+
export declare function sliceFrom(markdown: string, heading: string): string;
|
|
27
|
+
/** Everything before `heading`; the whole text when the heading is absent. */
|
|
28
|
+
export declare function sliceUntil(markdown: string, heading: string): string;
|
|
29
|
+
/** Everything from `heading` up to `until`, exclusive. */
|
|
30
|
+
export declare function sliceBetween(markdown: string, heading: string, until: string): string;
|
|
31
|
+
/** One section including its heading: `heading` plus the lines under it, up to
|
|
32
|
+
* the next heading of the same or a higher level. */
|
|
33
|
+
export declare function section(markdown: string, heading: string): string;
|
|
34
|
+
/** Body of one section: the lines under `heading`, up to the next heading of
|
|
35
|
+
* the same or a higher level. Lines inside a fenced code block are code, not
|
|
36
|
+
* headings — a Python comment in an example starts with `#` and would
|
|
37
|
+
* otherwise end the section at the first example that carries one. */
|
|
38
|
+
export declare function sectionBody(markdown: string, heading: string): string;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { readFileSync } from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { fileURLToPath } from "url";
|
|
4
|
+
/**
|
|
5
|
+
* Reader for the Agent Skills shipped in `plugin/skills/` at the package root
|
|
6
|
+
* (SKYR-4296, SKYR-4310). The markdown files are the single source of the
|
|
7
|
+
* instruction text: Claude Code loads them through `--plugin-dir`, and every
|
|
8
|
+
* other agent receives the same text back from the MCP tool that would
|
|
9
|
+
* otherwise hand out a prompt.
|
|
10
|
+
*/
|
|
11
|
+
/** Absolute path of the shipped `plugin/` directory. */
|
|
12
|
+
export function pluginRoot() {
|
|
13
|
+
// build/skills/<file>.js or src/skills/<file>.ts → package root → plugin/
|
|
14
|
+
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
15
|
+
return path.resolve(here, "..", "..", "plugin");
|
|
16
|
+
}
|
|
17
|
+
/** Removes a leading YAML frontmatter block, if present. */
|
|
18
|
+
export function stripFrontmatter(raw) {
|
|
19
|
+
const match = raw.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n/);
|
|
20
|
+
return match ? raw.slice(match[0].length) : raw;
|
|
21
|
+
}
|
|
22
|
+
/** Raw contents of a file inside one skill directory, e.g. `SKILL.md` or
|
|
23
|
+
* `reference/ui.md`. */
|
|
24
|
+
export function readSkillFile(skillName, relPath) {
|
|
25
|
+
return readFileSync(path.join(pluginRoot(), "skills", skillName, relPath), "utf8");
|
|
26
|
+
}
|
|
27
|
+
/** SKILL.md body with the YAML frontmatter removed. */
|
|
28
|
+
export function readSkillBody(skillName) {
|
|
29
|
+
return stripFrontmatter(readSkillFile(skillName, "SKILL.md")).trim();
|
|
30
|
+
}
|
|
31
|
+
/** Fill positional `$0`, `$1`, ... placeholders in `text` with `values[n]`,
|
|
32
|
+
* in one pass. `\$` unescapes to a literal `$`, so `\$19.98` in an example
|
|
33
|
+
* reads as itself rather than value 1 followed by "9.98". A placeholder's
|
|
34
|
+
* surrounding backticks, if any, are untouched by the match — the regex
|
|
35
|
+
* matches only the token, not its context — so a standalone code span
|
|
36
|
+
* (`` `$0` ``) and a placeholder nested inside a larger one both come out
|
|
37
|
+
* correctly with no extra handling. */
|
|
38
|
+
export function fillPlaceholders(text, values) {
|
|
39
|
+
return text.replace(/\\?\$(\d+)/g, (match, index) => {
|
|
40
|
+
if (match.startsWith("\\"))
|
|
41
|
+
return match.slice(1);
|
|
42
|
+
return values[Number(index)] ?? match;
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
function headingIndex(markdown, heading) {
|
|
46
|
+
// Anchored to line start so a heading quoted mid-paragraph cannot match.
|
|
47
|
+
if (markdown.startsWith(heading))
|
|
48
|
+
return 0;
|
|
49
|
+
const at = markdown.indexOf(`\n${heading}`);
|
|
50
|
+
return at === -1 ? -1 : at + 1;
|
|
51
|
+
}
|
|
52
|
+
/** Everything from `heading` (matched as a line prefix) to the end. */
|
|
53
|
+
export function sliceFrom(markdown, heading) {
|
|
54
|
+
const at = headingIndex(markdown, heading);
|
|
55
|
+
if (at === -1)
|
|
56
|
+
throw new Error(`markdown section not found: ${heading}`);
|
|
57
|
+
return markdown.slice(at).trim();
|
|
58
|
+
}
|
|
59
|
+
/** Everything before `heading`; the whole text when the heading is absent. */
|
|
60
|
+
export function sliceUntil(markdown, heading) {
|
|
61
|
+
const at = headingIndex(markdown, heading);
|
|
62
|
+
return (at === -1 ? markdown : markdown.slice(0, at)).trim();
|
|
63
|
+
}
|
|
64
|
+
/** Everything from `heading` up to `until`, exclusive. */
|
|
65
|
+
export function sliceBetween(markdown, heading, until) {
|
|
66
|
+
return sliceUntil(sliceFrom(markdown, heading), until);
|
|
67
|
+
}
|
|
68
|
+
/** One section including its heading: `heading` plus the lines under it, up to
|
|
69
|
+
* the next heading of the same or a higher level. */
|
|
70
|
+
export function section(markdown, heading) {
|
|
71
|
+
const body = sectionBody(markdown, heading);
|
|
72
|
+
return body ? `${heading}\n\n${body}` : heading;
|
|
73
|
+
}
|
|
74
|
+
/** Body of one section: the lines under `heading`, up to the next heading of
|
|
75
|
+
* the same or a higher level. Lines inside a fenced code block are code, not
|
|
76
|
+
* headings — a Python comment in an example starts with `#` and would
|
|
77
|
+
* otherwise end the section at the first example that carries one. */
|
|
78
|
+
export function sectionBody(markdown, heading) {
|
|
79
|
+
const level = heading.match(/^#+/)?.[0].length ?? 0;
|
|
80
|
+
const from = sliceFrom(markdown, heading);
|
|
81
|
+
const lines = from.split("\n").slice(1);
|
|
82
|
+
let fenced = false;
|
|
83
|
+
const end = lines.findIndex((line) => {
|
|
84
|
+
if (/^\s*(```|~~~)/.test(line)) {
|
|
85
|
+
fenced = !fenced;
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
if (fenced)
|
|
89
|
+
return false;
|
|
90
|
+
const h = line.match(/^(#+)\s/);
|
|
91
|
+
return h !== null && h[1].length <= level;
|
|
92
|
+
});
|
|
93
|
+
return (end === -1 ? lines : lines.slice(0, end)).join("\n").trim();
|
|
94
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `validate-assertion-alignment-post-execution` skill ships in
|
|
3
|
+
* `plugin/skills/` (same arrangement as fix-test-import-errors). It is the
|
|
4
|
+
* post-execution check, for an executed test of any type
|
|
5
|
+
* `ASSERTION_ENHANCEABLE_TEST_TYPES` names (`src/types/TestTypes.ts`), that
|
|
6
|
+
* its assertions evaluate the one behaviour its plan entry asked for, using
|
|
7
|
+
* the file's recorded execution result as evidence.
|
|
8
|
+
*/
|
|
9
|
+
export declare const VALIDATE_ASSERTION_ALIGNMENT_SKILL = "validate-assertion-alignment-post-execution";
|
|
10
|
+
/**
|
|
11
|
+
* The skill's full instructions for one file, with `$0`/`$1` replaced by the
|
|
12
|
+
* real test type and path — the same content the skill itself reads when
|
|
13
|
+
* Claude Code loads it, assembled here for an agent that cannot. Mirrors
|
|
14
|
+
* `buildEnhanceAssertionsInstructions`: built from the shipped markdown via
|
|
15
|
+
* the shared skillFiles helpers, not a hand-typed paraphrase, and called
|
|
16
|
+
* from a tool handler with real arguments rather than baked into the
|
|
17
|
+
* always-sent workflow prompt — reference/evidence.md and reference/checks.md
|
|
18
|
+
* are each a few hundred words, too much to inline into every run's prompt
|
|
19
|
+
* whether or not this check ever fires, but entirely reasonable as the
|
|
20
|
+
* response of a tool call made only when it does.
|
|
21
|
+
*/
|
|
22
|
+
export declare function buildAlignAssertionsInstructions(testFile: string, testType: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Mid-sentence clause for the workflow's assertion-alignment step (same
|
|
25
|
+
* convention as fixErrorsInstruction). Names the skill when the plugin is
|
|
26
|
+
* loaded — a project skill of the same name overrides the plugin copy — and
|
|
27
|
+
* falls back to a short hand-off otherwise: the full rules are the response
|
|
28
|
+
* of `skyramp_align_assertions` (buildAlignAssertionsInstructions), not
|
|
29
|
+
* repeated here, so this stays a one-line pointer regardless of which branch
|
|
30
|
+
* fires — matching enhanceAssertionsCall's non-skills branch, which points
|
|
31
|
+
* at `skyramp_enhance_assertions` the same way rather than inlining its
|
|
32
|
+
* rules into the prompt.
|
|
33
|
+
*/
|
|
34
|
+
export declare function alignAssertionsStep(): string;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { isSkillsLoaded } from "../utils/featureFlags.js";
|
|
2
|
+
import { readSkillFile, readSkillBody, sectionBody, fillPlaceholders, } from "./skillFiles.js";
|
|
3
|
+
/**
|
|
4
|
+
* The `validate-assertion-alignment-post-execution` skill ships in
|
|
5
|
+
* `plugin/skills/` (same arrangement as fix-test-import-errors). It is the
|
|
6
|
+
* post-execution check, for an executed test of any type
|
|
7
|
+
* `ASSERTION_ENHANCEABLE_TEST_TYPES` names (`src/types/TestTypes.ts`), that
|
|
8
|
+
* its assertions evaluate the one behaviour its plan entry asked for, using
|
|
9
|
+
* the file's recorded execution result as evidence.
|
|
10
|
+
*/
|
|
11
|
+
export const VALIDATE_ASSERTION_ALIGNMENT_SKILL = "validate-assertion-alignment-post-execution";
|
|
12
|
+
function skillBody() {
|
|
13
|
+
return readSkillBody(VALIDATE_ASSERTION_ALIGNMENT_SKILL);
|
|
14
|
+
}
|
|
15
|
+
function reference(name) {
|
|
16
|
+
return readSkillFile(VALIDATE_ASSERTION_ALIGNMENT_SKILL, `reference/${name}.md`).trim();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* The skill's full instructions for one file, with `$0`/`$1` replaced by the
|
|
20
|
+
* real test type and path — the same content the skill itself reads when
|
|
21
|
+
* Claude Code loads it, assembled here for an agent that cannot. Mirrors
|
|
22
|
+
* `buildEnhanceAssertionsInstructions`: built from the shipped markdown via
|
|
23
|
+
* the shared skillFiles helpers, not a hand-typed paraphrase, and called
|
|
24
|
+
* from a tool handler with real arguments rather than baked into the
|
|
25
|
+
* always-sent workflow prompt — reference/evidence.md and reference/checks.md
|
|
26
|
+
* are each a few hundred words, too much to inline into every run's prompt
|
|
27
|
+
* whether or not this check ever fires, but entirely reasonable as the
|
|
28
|
+
* response of a tool call made only when it does.
|
|
29
|
+
*/
|
|
30
|
+
export function buildAlignAssertionsInstructions(testFile, testType) {
|
|
31
|
+
const body = skillBody();
|
|
32
|
+
const goal = sectionBody(body, "## Goal");
|
|
33
|
+
const constraints = sectionBody(body, "## Constraints");
|
|
34
|
+
let steps = sectionBody(body, "## Steps");
|
|
35
|
+
steps = steps
|
|
36
|
+
.replace("Otherwise, read `reference/evidence.md`. It names the four inputs — the user's intention, the plan entry (or, for a maintained test, the maintenance verdict), the test `$1`, and the execution result — and where to find each. Do not ask for any of them or invent them.", "Otherwise, the four inputs are below — the user's intention, the plan entry (or, for a maintained test, the maintenance verdict), the test, and the execution result. Do not ask for any of them or invent them.")
|
|
37
|
+
.replace("Read `reference/checks.md`. Following it, map the behaviour to the assertions in both directions", "Following the checks below, map the behaviour to the assertions in both directions")
|
|
38
|
+
.replace("as `reference/checks.md` describes", "as the checks below describe");
|
|
39
|
+
const evidence = reference("evidence").replace("The checks in `reference/checks.md` are about what an assertion proves, not how it is spelled.", "The checks below are about what an assertion proves, not how it is spelled.");
|
|
40
|
+
const checks = reference("checks");
|
|
41
|
+
return fillPlaceholders([goal, steps, evidence, checks, constraints].join("\n\n"), [testType, testFile]);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Mid-sentence clause for the workflow's assertion-alignment step (same
|
|
45
|
+
* convention as fixErrorsInstruction). Names the skill when the plugin is
|
|
46
|
+
* loaded — a project skill of the same name overrides the plugin copy — and
|
|
47
|
+
* falls back to a short hand-off otherwise: the full rules are the response
|
|
48
|
+
* of `skyramp_align_assertions` (buildAlignAssertionsInstructions), not
|
|
49
|
+
* repeated here, so this stays a one-line pointer regardless of which branch
|
|
50
|
+
* fires — matching enhanceAssertionsCall's non-skills branch, which points
|
|
51
|
+
* at `skyramp_enhance_assertions` the same way rather than inlining its
|
|
52
|
+
* rules into the prompt.
|
|
53
|
+
*/
|
|
54
|
+
export function alignAssertionsStep() {
|
|
55
|
+
if (isSkillsLoaded()) {
|
|
56
|
+
return `invoke the \`${VALIDATE_ASSERTION_ALIGNMENT_SKILL}\` skill once per file with arguments \`<testType> <absolute test file path>\` — type first, path last (a project skill with the same name takes precedence over the plugin copy)`;
|
|
57
|
+
}
|
|
58
|
+
return "call `skyramp_align_assertions` once per file with its `testType` and absolute `testFile` path, and follow every instruction it returns — including its own verification and completion-line steps";
|
|
59
|
+
}
|
package/build/tool-phases.js
CHANGED
|
@@ -42,6 +42,10 @@ export const TOOLS_WITHOUT_PHASE = new Set([
|
|
|
42
42
|
"skyramp_modularization",
|
|
43
43
|
"skyramp_reuse_code",
|
|
44
44
|
"skyramp_enhance_assertions",
|
|
45
|
+
"skyramp_enhance_assertions_snapshot",
|
|
46
|
+
"skyramp_verify_enhance_assertions",
|
|
47
|
+
"skyramp_align_assertions",
|
|
45
48
|
"skyramp_preflight_mock_check",
|
|
46
49
|
"skyramp_query_proxy_mocks",
|
|
50
|
+
"skyramp_verify_test_dependencies",
|
|
47
51
|
]);
|
|
@@ -52,7 +52,9 @@ Logging into Skyramp provides access to additional platform features and service
|
|
|
52
52
|
const recordParams = {
|
|
53
53
|
prompt: params.prompt,
|
|
54
54
|
};
|
|
55
|
-
AnalyticsService.pushMCPToolEvent(TOOL_NAME, errorResult, recordParams).catch((err) => {
|
|
55
|
+
AnalyticsService.pushMCPToolEvent(TOOL_NAME, errorResult, recordParams).catch((err) => {
|
|
56
|
+
logger.warning("Analytics event failed", { error: String(err) });
|
|
57
|
+
});
|
|
56
58
|
}
|
|
57
59
|
});
|
|
58
60
|
}
|
|
@@ -50,7 +50,9 @@ Logout from Skyramp platform to end your authenticated session.`,
|
|
|
50
50
|
const recordParams = {
|
|
51
51
|
prompt: params.prompt,
|
|
52
52
|
};
|
|
53
|
-
AnalyticsService.pushMCPToolEvent(TOOL_NAME, errorResult, recordParams).catch((err) => {
|
|
53
|
+
AnalyticsService.pushMCPToolEvent(TOOL_NAME, errorResult, recordParams).catch((err) => {
|
|
54
|
+
logger.warning("Analytics event failed", { error: String(err) });
|
|
55
|
+
});
|
|
54
56
|
}
|
|
55
57
|
});
|
|
56
58
|
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ASSERTION_ENHANCEABLE_TEST_TYPES } from "../../types/TestTypes.js";
|
|
3
|
+
import { AnalyticsService } from "../../services/AnalyticsService.js";
|
|
4
|
+
import { buildAlignAssertionsInstructions } from "../../skills/validateAssertionAlignmentSkill.js";
|
|
5
|
+
import { requireAbsoluteTestFile } from "./assertionOperations.js";
|
|
6
|
+
import { toolError } from "../../utils/utils.js";
|
|
7
|
+
/**
|
|
8
|
+
* Deterministic-compatibility path for `validate-assertion-alignment-post-execution`,
|
|
9
|
+
* for an agent that cannot load the Claude Code skill (mirrors why
|
|
10
|
+
* `skyramp_enhance_assertions` exists alongside the `enhance-assertions` skill,
|
|
11
|
+
* SKYR-4310). Renders the skill's full procedure — Goal, Steps, both reference
|
|
12
|
+
* files, Constraints — from the same shipped markdown the skill itself reads,
|
|
13
|
+
* with `$0`/`$1` replaced by the real test type and file path. No state is
|
|
14
|
+
* read or written here; the returned text is the same instructions either
|
|
15
|
+
* path ends up following.
|
|
16
|
+
*/
|
|
17
|
+
const TOOL_NAME = "skyramp_align_assertions";
|
|
18
|
+
const alignAssertionsSchema = {
|
|
19
|
+
testFile: z
|
|
20
|
+
.string()
|
|
21
|
+
.describe("Absolute path to the test file whose assertion alignment is being checked."),
|
|
22
|
+
testType: z
|
|
23
|
+
.enum(ASSERTION_ENHANCEABLE_TEST_TYPES)
|
|
24
|
+
.describe("The type of the test being checked."),
|
|
25
|
+
};
|
|
26
|
+
export function registerAlignAssertionsTool(server) {
|
|
27
|
+
server.registerTool(TOOL_NAME, {
|
|
28
|
+
description: `Get the post-execution assertion-alignment procedure for one test file.
|
|
29
|
+
|
|
30
|
+
### When to call
|
|
31
|
+
- Once per file, after its final execution is settled — it passed, or it failed at an assertion (not at a collection, import, fixture, or navigation error, which the execution-repair step owns instead).
|
|
32
|
+
- For each ${ASSERTION_ENHANCEABLE_TEST_TYPES.join(", ")} test, new or maintained.
|
|
33
|
+
|
|
34
|
+
Returns the full procedure for that file: read it, then follow every step, including its own verification and completion-line steps.`,
|
|
35
|
+
inputSchema: alignAssertionsSchema,
|
|
36
|
+
}, async (params) => {
|
|
37
|
+
const { testFile, testType } = params;
|
|
38
|
+
const pathError = requireAbsoluteTestFile(testFile);
|
|
39
|
+
if (pathError)
|
|
40
|
+
return toolError(pathError);
|
|
41
|
+
const instructions = buildAlignAssertionsInstructions(testFile, testType);
|
|
42
|
+
AnalyticsService.pushMCPToolEvent(TOOL_NAME, undefined, {
|
|
43
|
+
testFile,
|
|
44
|
+
testType,
|
|
45
|
+
}).catch(() => { });
|
|
46
|
+
return {
|
|
47
|
+
content: [{ type: "text", text: instructions }],
|
|
48
|
+
isError: false,
|
|
49
|
+
};
|
|
50
|
+
});
|
|
51
|
+
}
|