@skyramp/mcp 0.4.1 → 0.4.2-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/commands/localDevTestChangesCommand.js +2 -1
- package/build/commands/recommendTestsAndExecuteCommand.js +15 -7
- package/build/commands/testThisEndpointCommand.js +35 -6
- package/build/execution/wrapperConfig.d.ts +56 -0
- package/build/execution/wrapperConfig.js +155 -0
- package/build/index.js +40 -10
- package/build/playwright/blueprintDigest.js +28 -7
- package/build/playwright/registerPlaywrightTools.js +47 -28
- package/build/playwright/traceExportStore.d.ts +22 -0
- package/build/playwright/traceExportStore.js +81 -0
- package/build/playwright/traceRecordingPrompt.js +11 -3
- package/build/prompts/code-reuse.js +118 -49
- package/build/prompts/fix-error-prompt.d.ts +9 -1
- package/build/prompts/fix-error-prompt.js +31 -28
- package/build/prompts/local-dev/local-dev-plan.d.ts +3 -0
- package/build/prompts/local-dev/local-dev-plan.js +8 -23
- package/build/prompts/local-dev/local-dev-prompts.d.ts +1 -1
- package/build/prompts/local-dev/local-dev-prompts.js +31 -4
- package/build/prompts/modularization/integration-test-modularization.js +13 -6
- package/build/prompts/modularization/ui-test-modularization.js +1 -1
- package/build/prompts/personas.js +1 -1
- package/build/prompts/pom-aware-code-reuse.js +7 -9
- package/build/prompts/reuse-hand-off.d.ts +64 -0
- package/build/prompts/reuse-hand-off.js +130 -0
- package/build/prompts/shared-helper-policy.d.ts +124 -2
- package/build/prompts/shared-helper-policy.js +178 -12
- package/build/prompts/startTraceCollectionPrompts.js +1 -1
- package/build/prompts/sut-setup/modes/adaptWorkflowPrompt.js +7 -8
- package/build/prompts/sut-setup/modes/dockerComposePrompt.js +1 -1
- package/build/prompts/sut-setup/shared.d.ts +4 -1
- package/build/prompts/sut-setup/shared.js +6 -4
- package/build/prompts/test-maintenance/actionsInstructions.d.ts +19 -11
- package/build/prompts/test-maintenance/actionsInstructions.js +47 -26
- package/build/prompts/test-maintenance/drift-analysis-prompt.d.ts +16 -8
- package/build/prompts/test-maintenance/drift-analysis-prompt.js +93 -38
- package/build/prompts/test-maintenance/driftAnalysisSections.js +5 -3
- package/build/prompts/test-maintenance/driftAnalysisShared.js +4 -2
- package/build/prompts/test-maintenance/uiDriftAnalysisSections.js +8 -5
- package/build/prompts/test-recommendation/recommendationSections.js +19 -8
- package/build/prompts/test-recommendation/recommendationShared.d.ts +1 -1
- package/build/prompts/test-recommendation/recommendationShared.js +0 -1
- package/build/prompts/test-recommendation/registerRecommendTestsPrompt.js +5 -2
- package/build/prompts/test-recommendation/test-recommendation-prompt.js +10 -7
- package/build/prompts/testbot/testbot-prompts.js +133 -63
- package/build/recommendation/answers.js +18 -9
- package/build/recommendation/pullRequestText.js +1 -1
- package/build/recommendation/registerPlan.js +31 -17
- package/build/recommendation/subjectStep.d.ts +8 -10
- package/build/recommendation/subjectStep.js +17 -16
- package/build/recommendation/types.d.ts +71 -17
- package/build/recommendation/types.js +9 -15
- package/build/recommendation/verifierContracts.d.ts +7 -3
- package/build/recommendation/verifierContracts.js +8 -4
- package/build/recommendation/verifiers/changedFile.js +11 -13
- package/build/recommendation/verifiers/citedPath.d.ts +8 -0
- package/build/recommendation/verifiers/citedPath.js +16 -2
- package/build/recommendation/verifiers/coverage.d.ts +2 -2
- package/build/recommendation/verifiers/coverage.js +190 -134
- package/build/recommendation/verifiers/defects.js +56 -16
- package/build/recommendation/verifiers/deliveredMatchesPlan.d.ts +7 -1
- package/build/recommendation/verifiers/deliveredMatchesPlan.js +28 -14
- package/build/recommendation/verifiers/endpointGrounded.js +14 -8
- package/build/recommendation/verifiers/existingCoverage.d.ts +6 -0
- package/build/recommendation/verifiers/existingCoverage.js +30 -21
- package/build/recommendation/verifiers/expectedOutcome.js +17 -8
- package/build/recommendation/verifiers/expectedValueSourced.js +54 -43
- package/build/recommendation/verifiers/issueTraceability.d.ts +5 -0
- package/build/recommendation/verifiers/issueTraceability.js +64 -7
- package/build/recommendation/verifiers/removedElementGuarded.js +19 -11
- package/build/recommendation/verifiers/reportedCategory.js +9 -4
- package/build/recommendation/verifiers/requirementSourced.js +34 -21
- package/build/recommendation/verifiers/screenRoute.js +15 -10
- package/build/recommendation/verifiers/statedDifference.js +15 -8
- package/build/recommendation/verifiers/uiElementGrounded.js +50 -16
- package/build/resources/analysisResources.js +7 -3
- package/build/resources/progressResource.js +4 -2
- package/build/resources/sutSetupResource.js +20 -2
- package/build/resources/testbotResource.js +19 -1
- package/build/services/AnalyticsService.js +3 -1
- package/build/services/ScenarioGenerationService.js +5 -5
- package/build/services/TestDiscoveryService.js +53 -9
- package/build/services/TestExecutionService.js +63 -21
- package/build/services/TestGenerationService.d.ts +1 -1
- package/build/services/TestGenerationService.js +43 -24
- package/build/skills/enhanceAssertionsSkill.d.ts +45 -0
- package/build/skills/enhanceAssertionsSkill.js +103 -0
- package/build/skills/fixTestImportErrorsSkill.d.ts +2 -2
- package/build/skills/fixTestImportErrorsSkill.js +2 -2
- package/build/skills/runTestSkill.d.ts +6 -0
- package/build/skills/runTestSkill.js +17 -0
- package/build/skills/skillFiles.d.ts +38 -0
- package/build/skills/skillFiles.js +94 -0
- package/build/skills/validateAssertionAlignmentSkill.d.ts +34 -0
- package/build/skills/validateAssertionAlignmentSkill.js +59 -0
- package/build/tool-phases.js +4 -1
- package/build/tools/auth/loginTool.js +3 -1
- package/build/tools/auth/logoutTool.js +3 -1
- package/build/tools/budgetExcuse.d.ts +15 -0
- package/build/tools/budgetExcuse.js +113 -0
- package/build/tools/code-refactor/alignAssertionsTool.d.ts +2 -0
- package/build/tools/code-refactor/alignAssertionsTool.js +51 -0
- package/build/tools/code-refactor/assertion-state.d.ts +1 -1
- package/build/tools/code-refactor/assertion-state.js +1 -1
- package/build/tools/code-refactor/assertionOperations.d.ts +44 -0
- package/build/tools/code-refactor/assertionOperations.js +82 -0
- package/build/tools/code-refactor/assertionSkillTools.d.ts +3 -0
- package/build/tools/code-refactor/assertionSkillTools.js +86 -0
- package/build/tools/code-refactor/codeReuseTool.js +27 -3
- package/build/tools/code-refactor/enhanceAssertionsTool.js +19 -83
- package/build/tools/code-refactor/gate-markers.d.ts +51 -0
- package/build/tools/code-refactor/gate-markers.js +95 -0
- package/build/tools/code-refactor/retrofit-state.d.ts +3 -1
- package/build/tools/code-refactor/retrofit-state.js +44 -2
- package/build/tools/code-refactor/reuse-outcome.d.ts +23 -1
- package/build/tools/code-refactor/reuse-outcome.js +36 -13
- package/build/tools/code-refactor/reuse-state.d.ts +90 -16
- package/build/tools/code-refactor/reuse-state.js +191 -61
- package/build/tools/code-refactor/utils-verify-gates.d.ts +4 -0
- package/build/tools/code-refactor/utils-verify-gates.js +269 -30
- package/build/tools/code-refactor/verify-gates.d.ts +15 -1
- package/build/tools/code-refactor/verify-gates.js +36 -4
- package/build/tools/enrichTestWithMocksTool.d.ts +1 -1
- package/build/tools/enrichTestWithMocksTool.js +9 -5
- package/build/tools/executeSkyrampTestTool.d.ts +118 -48
- package/build/tools/executeSkyrampTestTool.js +998 -372
- package/build/tools/execution-video-state.js +1 -1
- package/build/tools/fixErrorTool.js +5 -6
- package/build/tools/generate-tests/batchMockGenerationTool.js +1 -1
- package/build/tools/generate-tests/generateBatchScenarioRestTool.js +114 -73
- package/build/tools/generate-tests/generateContractRestTool.js +34 -16
- package/build/tools/generate-tests/generateE2ERestTool.d.ts +1 -0
- package/build/tools/generate-tests/generateE2ERestTool.js +9 -1
- package/build/tools/generate-tests/generateIntegrationRestTool.js +22 -7
- package/build/tools/generate-tests/generateMockRestTool.js +3 -1
- package/build/tools/generate-tests/generateUIRestTool.d.ts +2 -0
- package/build/tools/generate-tests/generateUIRestTool.js +11 -2
- package/build/tools/generate-tests/loadTestSchema.js +1 -3
- package/build/tools/generate-tests/planGuard.js +6 -3
- package/build/tools/generate-tests/scenarioFileIdentity.js +4 -1
- package/build/tools/generate-tests/scenarioLint.js +17 -5
- package/build/tools/generate-tests/trace-reuse-guard.js +5 -2
- package/build/tools/generateEnrichedIntegrationTestTool.js +9 -3
- package/build/tools/one-click/oneClickTool.js +3 -1
- package/build/tools/preflightMockCheckTool.js +23 -7
- package/build/tools/submitReportTool.d.ts +51 -12
- package/build/tools/submitReportTool.js +988 -161
- package/build/tools/test-management/actionsTool.js +241 -51
- package/build/tools/test-management/analyzeChangesTool.d.ts +8 -9
- package/build/tools/test-management/analyzeChangesTool.js +127 -68
- package/build/tools/test-management/analyzeTestHealthTool.d.ts +0 -11
- package/build/tools/test-management/analyzeTestHealthTool.js +42 -76
- package/build/tools/test-management/registerTestPlanTool.d.ts +44 -34
- package/build/tools/test-management/registerTestPlanTool.js +255 -111
- package/build/tools/test-management/resolveScreenTool.js +33 -9
- package/build/tools/test-management/testsOwedBeforeRun.d.ts +28 -0
- package/build/tools/test-management/testsOwedBeforeRun.js +53 -0
- package/build/tools/trace/startTraceCollectionTool.js +3 -1
- package/build/tools/trace/stopTraceCollectionTool.js +42 -6
- package/build/tools/verifyTestDependenciesTool.d.ts +3 -0
- package/build/tools/verifyTestDependenciesTool.js +54 -0
- package/build/tools/workspace/initScanWorkspaceTool.js +9 -3
- package/build/tools/workspace/initializeWorkspaceTool.js +3 -1
- package/build/types/AssertionOutcome.d.ts +1 -1
- package/build/types/EnhanceType.d.ts +6 -0
- package/build/types/EnhanceType.js +1 -0
- package/build/types/RepositoryAnalysis.d.ts +32 -72
- package/build/types/ReuseOutcome.d.ts +100 -7
- package/build/types/ReuseOutcome.js +16 -0
- package/build/types/StepMethod.js +20 -6
- package/build/types/TestAnalysis.d.ts +10 -2
- package/build/types/TestExecution.d.ts +45 -0
- package/build/types/TestRecommendation.d.ts +1 -1
- package/build/types/TestRecommendation.js +4 -1
- package/build/types/TestTypes.d.ts +16 -0
- package/build/types/TestTypes.js +40 -3
- package/build/types/TestbotPromptOptions.d.ts +9 -1
- package/build/types/TestbotReport.d.ts +45 -9
- package/build/utils/AnalysisStateManager.d.ts +137 -34
- package/build/utils/AnalysisStateManager.js +228 -44
- package/build/utils/assertion-verify/api-shared-lints.js +34 -16
- package/build/utils/assertion-verify/metrics.js +39 -6
- package/build/utils/assertion-verify/ui-lints.js +4 -2
- package/build/utils/branchDiff.js +47 -12
- package/build/utils/canonicalJson.js +3 -1
- package/build/utils/connectionErrors.d.ts +10 -0
- package/build/utils/connectionErrors.js +10 -0
- package/build/utils/dartRouteExtractor.js +36 -7
- package/build/utils/fixAttempts.d.ts +26 -0
- package/build/utils/fixAttempts.js +109 -0
- package/build/utils/frontendSelectors.js +23 -4
- package/build/utils/generatedTestRecord.d.ts +19 -0
- package/build/utils/generatedTestRecord.js +61 -0
- package/build/utils/gitStaging.js +7 -2
- package/build/utils/initAgent.js +26 -6
- package/build/utils/language-helper.js +60 -45
- package/build/utils/pathMatching.js +2 -1
- package/build/utils/pathSignatures.js +6 -2
- package/build/utils/planMatchKeys.d.ts +2 -2
- package/build/utils/planMatchKeys.js +20 -14
- package/build/utils/pom-catalog-parse.js +7 -2
- package/build/utils/pom-scope/import-expansion.js +6 -1
- package/build/utils/pom-scope/index.js +50 -12
- package/build/utils/pom-scope/scoring.js +13 -3
- package/build/utils/pom-scope/selector-extractor.js +16 -3
- package/build/utils/pom-scope/strip.d.ts +8 -0
- package/build/utils/pom-scope/strip.js +238 -0
- package/build/utils/pom-scope/testIdDiscovery.js +14 -2
- package/build/utils/pom-verify/__fixtures__/af-style/asset-list.page.d.ts +1 -1
- package/build/utils/pom-verify/__fixtures__/af-style/asset-list.page.js +4 -2
- package/build/utils/pom-verify/__fixtures__/af-style/report.iframe.page.js +3 -1
- package/build/utils/pom-verify/__fixtures__/af-style/workflow-footer.page.js +3 -1
- package/build/utils/pom-verify/bindings.js +5 -1
- package/build/utils/pom-verify/calls.js +9 -2
- package/build/utils/pom-verify/verify.js +27 -5
- package/build/utils/pr-comment-parser.js +20 -7
- package/build/utils/progress.d.ts +1 -1
- package/build/utils/progress.js +1 -1
- package/build/utils/proxy-terminal.d.ts +19 -1
- package/build/utils/proxy-terminal.js +346 -21
- package/build/utils/rebaselineSnapshots.d.ts +1 -1
- package/build/utils/rebaselineSnapshots.js +6 -16
- package/build/utils/removedUiElements.js +1 -1
- package/build/utils/reportLanguage.js +35 -7
- package/build/utils/reportVerification.d.ts +14 -8
- package/build/utils/reportVerification.js +19 -19
- package/build/utils/repositorySlug.d.ts +32 -0
- package/build/utils/repositorySlug.js +77 -0
- package/build/utils/reuseRouting.d.ts +10 -0
- package/build/utils/reuseRouting.js +21 -2
- package/build/utils/runContextGauge.d.ts +27 -0
- package/build/utils/runContextGauge.js +181 -0
- package/build/utils/runSerialized.d.ts +3 -0
- package/build/utils/runSerialized.js +39 -0
- package/build/utils/screenRoutes.js +74 -18
- package/build/utils/skyrampMdContent.d.ts +1 -1
- package/build/utils/skyrampMdContent.js +1 -1
- package/build/utils/skyrampSdkVersion.d.ts +9 -0
- package/build/utils/skyrampSdkVersion.js +16 -0
- package/build/utils/sourceRouteExtractor.js +13 -6
- package/build/utils/telemetry.d.ts +1 -0
- package/build/utils/telemetry.js +8 -5
- package/build/utils/testDependencyPolicy.d.ts +9 -0
- package/build/utils/testDependencyPolicy.js +809 -0
- package/build/utils/testExecutionRecord.d.ts +94 -0
- package/build/utils/testExecutionRecord.js +269 -0
- package/build/utils/testFileClassification.d.ts +8 -0
- package/build/utils/testFileClassification.js +39 -4
- package/build/utils/trace-parser.js +62 -14
- package/build/utils/urlPath.js +3 -1
- package/build/utils/utils-verify/action-key.d.ts +46 -0
- package/build/utils/utils-verify/action-key.js +120 -38
- package/build/utils/utils-verify/action-sites.d.ts +32 -0
- package/build/utils/utils-verify/action-sites.js +202 -0
- package/build/utils/utils-verify/allow.d.ts +122 -3
- package/build/utils/utils-verify/allow.js +146 -21
- package/build/utils/utils-verify/body-reach.d.ts +120 -0
- package/build/utils/utils-verify/body-reach.js +333 -0
- package/build/utils/utils-verify/call-sites.d.ts +31 -7
- package/build/utils/utils-verify/call-sites.js +80 -13
- package/build/utils/utils-verify/delivered-imports.d.ts +43 -0
- package/build/utils/utils-verify/delivered-imports.js +84 -0
- package/build/utils/utils-verify/fixed-sleep.d.ts +96 -0
- package/build/utils/utils-verify/fixed-sleep.js +461 -0
- package/build/utils/utils-verify/in-house.d.ts +93 -0
- package/build/utils/utils-verify/in-house.js +719 -0
- package/build/utils/utils-verify/incumbent.d.ts +3 -0
- package/build/utils/utils-verify/incumbent.js +75 -0
- package/build/utils/utils-verify/index.d.ts +2 -0
- package/build/utils/utils-verify/index.js +2 -0
- package/build/utils/utils-verify/language-spec.d.ts +51 -10
- package/build/utils/utils-verify/language-spec.js +232 -21
- package/build/utils/utils-verify/locate.d.ts +26 -0
- package/build/utils/utils-verify/locate.js +125 -23
- package/build/utils/utils-verify/module-name.d.ts +40 -0
- package/build/utils/utils-verify/module-name.js +98 -0
- package/build/utils/utils-verify/parse.d.ts +56 -7
- package/build/utils/utils-verify/parse.js +195 -40
- package/build/utils/utils-verify/retrofit-equivalence.d.ts +5 -0
- package/build/utils/utils-verify/retrofit-equivalence.js +4 -2
- package/build/utils/utils-verify/stage.d.ts +5 -0
- package/build/utils/utils-verify/stage.js +47 -2
- package/build/utils/utils-verify/status-once.d.ts +62 -0
- package/build/utils/utils-verify/status-once.js +207 -0
- package/build/utils/utils-verify/typecheck.d.ts +61 -0
- package/build/utils/utils-verify/typecheck.js +338 -0
- package/build/utils/utils-verify/verify.d.ts +79 -3
- package/build/utils/utils-verify/verify.js +531 -61
- package/build/utils/versions.d.ts +3 -3
- package/build/utils/versions.js +1 -1
- package/build/utils/workspaceAuth.js +107 -37
- package/build/workspace/queryParamResolution.js +11 -4
- package/build/workspace/workspace.d.ts +72 -52
- package/build/workspace/workspace.js +19 -15
- package/node_modules/playwright/ThirdPartyNotices.txt +19 -19
- package/node_modules/playwright/lib/mcp/skyramp/assertTool.js +8 -2
- package/node_modules/playwright/lib/mcp/skyramp/common/cssValue.js +87 -0
- package/node_modules/playwright/lib/mcp/skyramp/loadTraceTool.js +31 -0
- package/node_modules/playwright/lib/mcp/skyramp/skyRampImport.js +3 -0
- package/node_modules/playwright/lib/mcp/skyramp/traceRecordingBackend.js +181 -15
- package/node_modules/playwright/lib/mcp/test/skyRampExport.js +24 -0
- package/node_modules/playwright/lib/transform/babelBundleImpl.js +2353 -190
- package/node_modules/playwright/node_modules/playwright-core/ThirdPartyNotices.txt +62 -34
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/.package-lock.json +72 -41
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/dist/serve-static.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/dist/serve-static.mjs +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/package.json +2 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/README.md +16 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/index.js +4 -20
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/read.js +17 -17
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/json.js +60 -32
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/raw.js +3 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/text.js +3 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/urlencoded.js +16 -20
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/utils.js +18 -16
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/LICENSE +22 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/README.md +71 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.d.ts +46 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.js +176 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.js.map +1 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/package.json +52 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/package.json +23 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/CHANGELOG.md +21 -14
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/isObject.d.ts +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/package.json +6 -7
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/tsconfig.json +1 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/index.js +266 -45
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/lib/schemes.js +9 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/lib/utils.js +396 -92
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/package.json +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/component-safe-serialization.test.js +163 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/equal.test.js +31 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/fixtures/uri-js-parse.json +2 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/ipv6-canonical.test.js +34 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/ipv6-validation.test.js +124 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/malformed-percent.test.js +77 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/malformed-urn.test.js +61 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/parse.test.js +7 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/query-fragment-normalization.test.js +33 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/reserved-path-normalization.test.js +109 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/scheme-validation.test.js +124 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/security-normalization.test.js +101 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/security.test.js +301 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/urn-full-input.test.js +29 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/websocket-query-preservation.test.js +24 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/CHANGELOG.md +7 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/index.d.ts +0 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/package.json +4 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/client/client.js +30 -16
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/client/utils.js +4 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/context.js +32 -13
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/accepts/accepts.js +36 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/proxy/index.js +4 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/ssg/ssg.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/ssg/utils.js +30 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/streaming/sse.js +5 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/hono-base.js +10 -8
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/base.js +44 -23
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/components.js +25 -26
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/context.js +5 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/dom/render.js +2 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/dom/server.js +5 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/hooks/index.js +16 -13
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +3 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/streaming.js +4 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/cache/index.js +103 -8
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/compress/index.js +5 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/cors/index.js +17 -14
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/csrf/index.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/etag/digest.js +47 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/etag/index.js +7 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +9 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +9 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/language/language.js +10 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/method-not-allowed/index.js +90 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +3 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/secure-headers/secure-headers.js +16 -7
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/request.js +20 -13
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/linear-router/router.js +7 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/pattern-router/router.js +3 -9
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +65 -59
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +71 -128
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +14 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/trie-router/node.js +47 -70
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/trie-router/router.js +3 -11
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/utils.js +27 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/accept.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/body.js +21 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/cookie.js +4 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/ipaddr.js +5 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/stream.js +12 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/url.js +19 -11
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/client/client.js +30 -16
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/client/utils.js +4 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/context.js +32 -13
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/accepts/accepts.js +36 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/proxy/index.js +4 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/ssg/ssg.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/ssg/utils.js +30 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/streaming/sse.js +5 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/hono-base.js +10 -8
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/base.js +41 -23
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/components.js +26 -27
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/context.js +6 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/dom/render.js +2 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/dom/server.js +5 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/hooks/index.js +16 -13
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/intrinsic-element/components.js +4 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/streaming.js +5 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/cache/index.js +103 -8
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/compress/index.js +5 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/cors/index.js +17 -14
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/csrf/index.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/etag/digest.js +47 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/etag/index.js +7 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/jwk/jwk.js +9 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/jwt/jwt.js +9 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/language/language.js +10 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/method-not-allowed/index.js +68 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/pretty-json/index.js +3 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/secure-headers/secure-headers.js +16 -7
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/request.js +21 -14
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/linear-router/router.js +7 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/pattern-router/router.js +3 -9
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/node.js +61 -58
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/router.js +77 -129
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/trie.js +14 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/trie-router/node.js +47 -70
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/trie-router/router.js +3 -11
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/utils.js +5 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/adapter/aws-lambda/types.d.ts +9 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/client/types.d.ts +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/context.d.ts +6 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/hono-base.d.ts +4 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/base.d.ts +7 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/index.d.ts +5 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/intrinsic-element/components.d.ts +2 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/server.d.ts +5 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/hooks/index.d.ts +8 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/index.d.ts +5 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/cache/index.d.ts +6 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/combine/index.d.ts +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/cors/index.d.ts +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +2 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jwk/jwk.d.ts +2 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jwt/jwt.d.ts +2 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/method-not-allowed/index.d.ts +49 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/secure-headers/permissions-policy.d.ts +3 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +4 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +2 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/trie-router/node.d.ts +1 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/trie-router/router.d.ts +0 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/utils.d.ts +1 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router.d.ts +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/utils/headers.d.ts +2 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/utils/url.d.ts +5 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/accept.js +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/body.js +21 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/cookie.js +5 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/ipaddr.js +5 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/stream.js +12 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/url.js +17 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/package.json +11 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/README.md +173 -143
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/address-error.d.ts +11 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/address-error.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.d.ts +49 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.js +79 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.d.ts +78 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.js +119 -24
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.d.ts +151 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.js +316 -90
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.d.ts +12 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.js +45 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.d.ts +14 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.js +50 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/package.json +6 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/.github/THREAT_MODEL.md +3 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/CHANGELOG.md +26 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/README.md +19 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/dist/qs.js +25 -25
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/eslint.config.mjs +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/parse.js +16 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/stringify.js +23 -8
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/utils.js +57 -11
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/package.json +8 -7
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/parse.js +419 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/stringify.js +317 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/utils.js +206 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/CHANGELOG.md +10 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/README.md +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/index.js +5 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/package.json +10 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/test/index.js +16 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/index.js +8 -18
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/LICENSE +22 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/README.md +71 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.d.ts +46 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.js +176 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.js.map +1 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/package.json +52 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/package.json +9 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/package-lock.json +72 -41
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/.package-lock.json +6 -6
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/README.md +23 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/index.js +265 -86
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/package.json +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/README.md +173 -143
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/address-error.d.ts +11 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/address-error.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.d.ts +49 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.js +79 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.d.ts +78 -5
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.js +119 -24
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.d.ts +151 -10
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.js +316 -90
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.d.ts +12 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.js +45 -2
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.d.ts +14 -0
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.js +50 -3
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.js.map +1 -1
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/package.json +6 -4
- package/node_modules/playwright/node_modules/playwright-core/bundles/utils/package-lock.json +6 -6
- package/node_modules/playwright/node_modules/playwright-core/lib/cli/program.js +18 -9
- package/node_modules/playwright/node_modules/playwright-core/lib/mcpBundleImpl/index.js +47 -47
- package/node_modules/playwright/node_modules/playwright-core/lib/server/codegen/skyramp/jsonlReader.js +3 -0
- package/node_modules/playwright/node_modules/playwright-core/lib/server/recorder/recorderRunner.js +42 -0
- package/node_modules/playwright/node_modules/playwright-core/lib/utilsBundleImpl/index.js +121 -121
- package/node_modules/playwright/node_modules/playwright-core/lib/vite/traceViewer/{index.B7KbSQcC.js → index.BAkLd5DX.js} +1 -1
- package/node_modules/playwright/node_modules/playwright-core/lib/vite/traceViewer/index.html +1 -1
- package/node_modules/playwright/node_modules/playwright-core/package.json +1 -1
- package/node_modules/playwright/node_modules/playwright-core/src/cli/program.ts +31 -9
- package/node_modules/playwright/node_modules/playwright-core/src/server/codegen/skyramp/jsonlReader.ts +1 -0
- package/node_modules/playwright/node_modules/playwright-core/src/server/recorder/recorderRunner.ts +57 -1
- package/node_modules/playwright/package.json +2 -2
- package/package.json +7 -6
- package/plugin/prompts/code-reuse/hand-off.md +30 -0
- package/plugin/prompts/generate-tests/generation.md +1 -1
- package/plugin/prompts/plan-tests.md +14 -14
- package/plugin/prompts/testbot-task1.md +2 -2
- package/plugin/skills/enhance-assertions/SKILL.md +25 -0
- package/plugin/skills/enhance-assertions/reference/contract.md +51 -0
- package/plugin/skills/enhance-assertions/reference/integration.md +58 -0
- package/plugin/skills/enhance-assertions/reference/shared-rules.md +220 -0
- package/plugin/skills/enhance-assertions/reference/ui.md +373 -0
- package/plugin/skills/fix-test-import-errors/SKILL.md +45 -50
- package/plugin/skills/run-test/SKILL.md +16 -0
- package/plugin/skills/validate-assertion-alignment-post-execution/SKILL.md +32 -0
- package/plugin/skills/validate-assertion-alignment-post-execution/reference/checks.md +44 -0
- package/plugin/skills/validate-assertion-alignment-post-execution/reference/evidence.md +47 -0
- package/build/adapters/jestAdapter.d.ts +0 -14
- package/build/adapters/jestAdapter.js +0 -113
- package/build/adapters/mochaAdapter.d.ts +0 -13
- package/build/adapters/mochaAdapter.js +0 -87
- package/build/adapters/playwrightAdapter.d.ts +0 -17
- package/build/adapters/playwrightAdapter.js +0 -182
- package/build/adapters/pytestAdapter.d.ts +0 -15
- package/build/adapters/pytestAdapter.js +0 -108
- package/build/prompts/enhance-assertions/contractProviderAssertionsPrompt.d.ts +0 -2
- package/build/prompts/enhance-assertions/contractProviderAssertionsPrompt.js +0 -29
- package/build/prompts/enhance-assertions/integrationAssertionsPrompt.d.ts +0 -2
- package/build/prompts/enhance-assertions/integrationAssertionsPrompt.js +0 -36
- package/build/prompts/enhance-assertions/sharedAssertionRules.d.ts +0 -16
- package/build/prompts/enhance-assertions/sharedAssertionRules.js +0 -284
- package/build/prompts/enhance-assertions/uiAssertionsPrompt.d.ts +0 -2
- package/build/prompts/enhance-assertions/uiAssertionsPrompt.js +0 -388
- package/build/tools/runExistingTestsTool.d.ts +0 -138
- package/build/tools/runExistingTestsTool.js +0 -644
- package/build/types/ExternalTestExecution.d.ts +0 -67
- package/build/types/ExternalTestExecution.js +0 -8
- package/build/workspace/testSuites.d.ts +0 -20
- package/build/workspace/testSuites.js +0 -17
- package/node_modules/playwright/node_modules/playwright-core/.DS_Store +0 -0
|
@@ -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
|
@@ -15,7 +15,6 @@ export const TOOL_PHASE_MAP = {
|
|
|
15
15
|
skyramp_generate_enriched_integration_test: "generating",
|
|
16
16
|
skyramp_enrich_test_with_mocks: "generating",
|
|
17
17
|
skyramp_execute_test: { before: "maintaining", after: "executing" },
|
|
18
|
-
skyramp_run_existing_tests: { before: "maintaining", after: "executing" },
|
|
19
18
|
skyramp_analyze_test_health: "maintaining",
|
|
20
19
|
skyramp_submit_report: "reporting",
|
|
21
20
|
};
|
|
@@ -42,6 +41,10 @@ export const TOOLS_WITHOUT_PHASE = new Set([
|
|
|
42
41
|
"skyramp_modularization",
|
|
43
42
|
"skyramp_reuse_code",
|
|
44
43
|
"skyramp_enhance_assertions",
|
|
44
|
+
"skyramp_enhance_assertions_snapshot",
|
|
45
|
+
"skyramp_verify_enhance_assertions",
|
|
46
|
+
"skyramp_align_assertions",
|
|
45
47
|
"skyramp_preflight_mock_check",
|
|
46
48
|
"skyramp_query_proxy_mocks",
|
|
49
|
+
"skyramp_verify_test_dependencies",
|
|
47
50
|
]);
|
|
@@ -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,15 @@
|
|
|
1
|
+
/** True when this answer's reason for dropping a test is that the run was running
|
|
2
|
+
* out. Blank answers are NOT this: an unanswered objection is published open,
|
|
3
|
+
* which is already honest. */
|
|
4
|
+
export declare function citesBudget(answer: string | undefined): boolean;
|
|
5
|
+
/** How many times the report may be refused for this. The refusal is meant to
|
|
6
|
+
* cost the agent the tests it dropped, not the whole run: past this the answer
|
|
7
|
+
* stands and is published with the report, where a reader can weigh it. Same
|
|
8
|
+
* bound and same reasoning as the unrecorded-UI gate. */
|
|
9
|
+
export declare const MAX_BUDGET_EXCUSE_REFUSALS = 3;
|
|
10
|
+
/** Count one refusal and return the new total. */
|
|
11
|
+
export declare function countBudgetExcuseRefusal(): number;
|
|
12
|
+
/** Refusals so far, without counting one. */
|
|
13
|
+
export declare function budgetExcuseRefusals(): number;
|
|
14
|
+
/** Test seam. */
|
|
15
|
+
export declare function resetBudgetExcuseStoreForTests(): void;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { currentRunStateFile } from "../utils/AnalysisStateManager.js";
|
|
2
|
+
import { logger } from "../utils/logger.js";
|
|
3
|
+
/** "The run ran out of budget" as a reason a planned test was dropped, and how
|
|
4
|
+
* many times the report has been refused for giving it.
|
|
5
|
+
*
|
|
6
|
+
* WHY THIS EXISTS. `deliveredMatchesPlan` raises "planned but not delivered" and
|
|
7
|
+
* suggests "add the test to the report, or record in the report why it was
|
|
8
|
+
* dropped". Run 9dfc8405 recorded the reason seven times — "this run exhausted
|
|
9
|
+
* its working budget" — and shipped 2 of 9 planned tests with the report
|
|
10
|
+
* accepted. It wrote that at 46% of a 1M context window, with no warning from
|
|
11
|
+
* anywhere, and the word appears NOWHERE in its reasoning: it is a justification
|
|
12
|
+
* written at submit time, not a decision reached from a reading.
|
|
13
|
+
*
|
|
14
|
+
* So this is not a budget check. It is a check on ONE SENTENCE the run is not
|
|
15
|
+
* entitled to write. A test blocked by something outside the run — a service
|
|
16
|
+
* that is not running, a branch that is gone, a credential the run lacks — still
|
|
17
|
+
* answers and still ships, exactly as before. */
|
|
18
|
+
/** Phrases that say "I stopped because I was running out", and nothing else.
|
|
19
|
+
*
|
|
20
|
+
* Deliberately narrow, and narrowed further after review: `budget` and `token
|
|
21
|
+
* limit` are ORDINARY APPLICATION NOUNS. An unscoped `\bbudget\b` refuses "the
|
|
22
|
+
* budget page does not render: /budgets returns 500", and an unscoped `token
|
|
23
|
+
* limit` refuses "the API rejects the request past its token limit" — real
|
|
24
|
+
* blockers on a customer whose product has budgets, unreachable on any eval
|
|
25
|
+
* repo, and nothing here is gated on the gauge, so the collision is the whole
|
|
26
|
+
* test.
|
|
27
|
+
*
|
|
28
|
+
* Every answer run 9dfc8405 sent is run-scoped — "this run exhausted its
|
|
29
|
+
* working budget", "for budget reasons" — so scoping costs nothing. A miss
|
|
30
|
+
* costs a refusal that would have helped; a false positive costs a run that
|
|
31
|
+
* cannot report a genuine blocker, which is far worse. */
|
|
32
|
+
const BUDGET_EXCUSE = [
|
|
33
|
+
// "for budget reasons" / "for budgetary reasons" — no other reading.
|
|
34
|
+
/\bbudget(ary)? reasons?\b/i,
|
|
35
|
+
// A spending verb beside the budget: "exhausted its working budget", "the
|
|
36
|
+
// remaining budget". SINGULAR ONLY — a product's own budgets are a plural
|
|
37
|
+
// list ("the remaining budgets are empty") and are not this.
|
|
38
|
+
/\b(exhausted|spent|ran out of|out of|low on|remaining|no more)\b[^.;]{0,24}\bbudget\b/i,
|
|
39
|
+
// "no budget left for", "not enough context left". The trailing word is what
|
|
40
|
+
// keeps "the page has no time zone selector" out.
|
|
41
|
+
/\b(no|insufficient|not enough) (time|context|tokens?|budget) (left|remaining|available|to spare|for)\b/i,
|
|
42
|
+
// The run's own context. Not a domain noun in any application we test.
|
|
43
|
+
/\bcontext (window|limit|budget)\b/i,
|
|
44
|
+
/\b(low on|out of|ran out of|exhausted (its|the|my)?) ?(context|time)\b/i,
|
|
45
|
+
/\btime (ran out|constraints?|pressure)\b/i,
|
|
46
|
+
// A token BUDGET is the agent talking about itself; a token LIMIT is a real
|
|
47
|
+
// API concept and stays out.
|
|
48
|
+
/\btokens? budget\b/i,
|
|
49
|
+
// Tokens only with the run as the subject: a rate limiter runs out of tokens
|
|
50
|
+
// too, and says so in a sentence a blocker needs.
|
|
51
|
+
/\b(this run|the run|I|we)\b[^.;]{0,30}\b(ran out of|out of|low on|exhausted)\b[^.;]{0,12}\btokens?\b/i,
|
|
52
|
+
];
|
|
53
|
+
/** True when this answer's reason for dropping a test is that the run was running
|
|
54
|
+
* out. Blank answers are NOT this: an unanswered objection is published open,
|
|
55
|
+
* which is already honest. */
|
|
56
|
+
export function citesBudget(answer) {
|
|
57
|
+
const text = typeof answer === "string" ? answer.trim() : "";
|
|
58
|
+
if (!text)
|
|
59
|
+
return false;
|
|
60
|
+
return BUDGET_EXCUSE.some((pattern) => pattern.test(text));
|
|
61
|
+
}
|
|
62
|
+
/** How many times the report may be refused for this. The refusal is meant to
|
|
63
|
+
* cost the agent the tests it dropped, not the whole run: past this the answer
|
|
64
|
+
* stands and is published with the report, where a reader can weigh it. Same
|
|
65
|
+
* bound and same reasoning as the unrecorded-UI gate. */
|
|
66
|
+
export const MAX_BUDGET_EXCUSE_REFUSALS = 3;
|
|
67
|
+
/** In process and keyed by the run, for the reason `traceExportStore` gives: the
|
|
68
|
+
* only reader shares a process with the tool, and `NO_RUN` is a slot like any
|
|
69
|
+
* other so a run whose state path will not resolve is still bounded. */
|
|
70
|
+
const NO_RUN = "<no-run>";
|
|
71
|
+
let countedRunStateFile;
|
|
72
|
+
let refusals = 0;
|
|
73
|
+
function reseatRun() {
|
|
74
|
+
let runStateFile;
|
|
75
|
+
try {
|
|
76
|
+
runStateFile = currentRunStateFile() ?? NO_RUN;
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
runStateFile = NO_RUN;
|
|
80
|
+
}
|
|
81
|
+
if (runStateFile !== countedRunStateFile) {
|
|
82
|
+
countedRunStateFile = runStateFile;
|
|
83
|
+
refusals = 0;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/** Count one refusal and return the new total. */
|
|
87
|
+
export function countBudgetExcuseRefusal() {
|
|
88
|
+
try {
|
|
89
|
+
reseatRun();
|
|
90
|
+
refusals += 1;
|
|
91
|
+
return refusals;
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
95
|
+
logger.warning(`countBudgetExcuseRefusal failed: ${detail}`);
|
|
96
|
+
return MAX_BUDGET_EXCUSE_REFUSALS;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/** Refusals so far, without counting one. */
|
|
100
|
+
export function budgetExcuseRefusals() {
|
|
101
|
+
try {
|
|
102
|
+
reseatRun();
|
|
103
|
+
return refusals;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return MAX_BUDGET_EXCUSE_REFUSALS;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/** Test seam. */
|
|
110
|
+
export function resetBudgetExcuseStoreForTests() {
|
|
111
|
+
countedRunStateFile = undefined;
|
|
112
|
+
refusals = 0;
|
|
113
|
+
}
|
|
@@ -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
|
+
}
|
|
@@ -79,7 +79,7 @@ export type RepoCheckoutRef = RepoCheckout;
|
|
|
79
79
|
export declare function findAssertionRecordByFileName(outcomes: Record<string, AssertionRecord>, row: {
|
|
80
80
|
fileName: string;
|
|
81
81
|
testType?: string;
|
|
82
|
-
repository
|
|
82
|
+
repository: string;
|
|
83
83
|
}, checkouts: RepoCheckoutRef[]): AssertionRecord | undefined;
|
|
84
84
|
/**
|
|
85
85
|
* Report-facing proof-of-work summary re-derived from the spec as delivered
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The deterministic half of assertion enhancement, shared by
|
|
3
|
+
* `skyramp_enhance_assertions` and by the two single-purpose tools the
|
|
4
|
+
* `enhance-assertions` skill drives (SKYR-4310). One implementation, so the
|
|
5
|
+
* skill workflow and the original tool can never diverge on the gates, the
|
|
6
|
+
* baseline, or the verdict.
|
|
7
|
+
*/
|
|
8
|
+
export interface AssertionCallParams {
|
|
9
|
+
testFile: string;
|
|
10
|
+
testType: string;
|
|
11
|
+
enhanceType: string;
|
|
12
|
+
stateFile?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Reject a relative test-file path: everything downstream keys state by this
|
|
16
|
+
* path, and a relative spelling would fork records and fail gates open
|
|
17
|
+
* (review finding on SKYR-4262). Shared with `skyramp_align_assertions`,
|
|
18
|
+
* whose post-execution check keys the same `testExecutions` state by this
|
|
19
|
+
* path but needs neither the reuse-debt gate nor the retrofit staging below,
|
|
20
|
+
* both generation-time concerns.
|
|
21
|
+
*/
|
|
22
|
+
export declare function requireAbsoluteTestFile(testFile: string): string | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Everything both entry points must do before either branch: reject a relative
|
|
25
|
+
* path, stage the shared utils file, and run the reuse-debt gate.
|
|
26
|
+
*
|
|
27
|
+
* Returns the gate's refusal message, or undefined when the call may proceed.
|
|
28
|
+
*/
|
|
29
|
+
export declare function prepareAssertionCall(params: AssertionCallParams): Promise<string | undefined>;
|
|
30
|
+
/**
|
|
31
|
+
* Snapshot the file as generated so a later verify pass has a baseline to
|
|
32
|
+
* measure against. Best-effort — no run state means a stateless verify later.
|
|
33
|
+
*/
|
|
34
|
+
export declare function snapshotAssertionBaseline(params: AssertionCallParams): Promise<void>;
|
|
35
|
+
export interface AssertionVerifyOutcome {
|
|
36
|
+
ok: boolean;
|
|
37
|
+
report: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Deterministically check the hand-out instructions were applied — hash delta,
|
|
41
|
+
* no removed coverage, rubric lints, strength increase — and format the
|
|
42
|
+
* per-violation feedback that drives the fix-and-retry loop.
|
|
43
|
+
*/
|
|
44
|
+
export declare function verifyAssertionCall(params: AssertionCallParams): Promise<AssertionVerifyOutcome>;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import * as path from "path";
|
|
2
|
+
import { pendingReuseDebt } from "./reuse-state.js";
|
|
3
|
+
import { baselineFrom, readAssertionRecord, recordAssertionBaseline, recordAssertionVerdict, trustedRecord, } from "./assertion-state.js";
|
|
4
|
+
import { formatAssertionVerifyReport, verifyAssertionEnhancement, } from "../../utils/assertion-verify/index.js";
|
|
5
|
+
import { stageAndRecordRetrofits } from "./retrofit-state.js";
|
|
6
|
+
import { stageGeneratedPaths } from "../../utils/gitStaging.js";
|
|
7
|
+
/**
|
|
8
|
+
* Reject a relative test-file path: everything downstream keys state by this
|
|
9
|
+
* path, and a relative spelling would fork records and fail gates open
|
|
10
|
+
* (review finding on SKYR-4262). Shared with `skyramp_align_assertions`,
|
|
11
|
+
* whose post-execution check keys the same `testExecutions` state by this
|
|
12
|
+
* path but needs neither the reuse-debt gate nor the retrofit staging below,
|
|
13
|
+
* both generation-time concerns.
|
|
14
|
+
*/
|
|
15
|
+
export function requireAbsoluteTestFile(testFile) {
|
|
16
|
+
if (!path.isAbsolute(testFile)) {
|
|
17
|
+
return `testFile must be an absolute path, got: ${testFile}`;
|
|
18
|
+
}
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Everything both entry points must do before either branch: reject a relative
|
|
23
|
+
* path, stage the shared utils file, and run the reuse-debt gate.
|
|
24
|
+
*
|
|
25
|
+
* Returns the gate's refusal message, or undefined when the call may proceed.
|
|
26
|
+
*/
|
|
27
|
+
export async function prepareAssertionCall(params) {
|
|
28
|
+
const { testFile, testType, stateFile } = params;
|
|
29
|
+
const pathError = requireAbsoluteTestFile(testFile);
|
|
30
|
+
if (pathError)
|
|
31
|
+
return pathError;
|
|
32
|
+
// SKYR-4115: the reuse tool hands out POM mapping instructions and then relies on
|
|
33
|
+
// the agent to come back with `verify: true` — the call that runs the zero-reuse
|
|
34
|
+
// gate. This is the first tool called after it on the same spec, so it is where a
|
|
35
|
+
// skipped verify is caught cheapest. Enforcing the call (not the outcome) keeps
|
|
36
|
+
// the policy in the reuse phase where it belongs.
|
|
37
|
+
// SKYR-4220: stage the shared utils file this spec wrote or imports BEFORE the
|
|
38
|
+
// debt check, unconditionally — so the file reaches the output commit even on a
|
|
39
|
+
// path where the agent never calls verify. Located by header, not by name.
|
|
40
|
+
await stageAndRecordRetrofits(testFile);
|
|
41
|
+
const owed = await pendingReuseDebt(testFile, stateFile, testType, {
|
|
42
|
+
chain: false,
|
|
43
|
+
});
|
|
44
|
+
if (owed)
|
|
45
|
+
return owed;
|
|
46
|
+
// Stage so testbot includes the generated files in its output commit.
|
|
47
|
+
await stageGeneratedPaths(testFile);
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Snapshot the file as generated so a later verify pass has a baseline to
|
|
52
|
+
* measure against. Best-effort — no run state means a stateless verify later.
|
|
53
|
+
*/
|
|
54
|
+
export async function snapshotAssertionBaseline(params) {
|
|
55
|
+
await recordAssertionBaseline(params.testFile, params.testType, params.enhanceType, params.stateFile);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Deterministically check the hand-out instructions were applied — hash delta,
|
|
59
|
+
* no removed coverage, rubric lints, strength increase — and format the
|
|
60
|
+
* per-violation feedback that drives the fix-and-retry loop.
|
|
61
|
+
*/
|
|
62
|
+
export async function verifyAssertionCall(params) {
|
|
63
|
+
const { testFile, testType, enhanceType, stateFile } = params;
|
|
64
|
+
const record = await readAssertionRecord(testFile, stateFile);
|
|
65
|
+
// Discriminators come from the persisted record when it matches this
|
|
66
|
+
// canonical path — params are agent-supplied, and flipping enhanceType
|
|
67
|
+
// to "maintenance" would disarm the strength gate and structural lints
|
|
68
|
+
// for a permanent PASS. Canonical comparison closes the alias bypass
|
|
69
|
+
// (dir//x.spec.ts). Falls back to params only when stateless.
|
|
70
|
+
const trusted = trustedRecord(record, testFile);
|
|
71
|
+
const result = await verifyAssertionEnhancement({
|
|
72
|
+
testFile,
|
|
73
|
+
testType: trusted?.testType ?? testType,
|
|
74
|
+
enhanceType: (trusted?.enhanceType ?? enhanceType),
|
|
75
|
+
baseline: baselineFrom(record, testFile),
|
|
76
|
+
});
|
|
77
|
+
await recordAssertionVerdict(testFile, result, stateFile);
|
|
78
|
+
return {
|
|
79
|
+
ok: result.ok,
|
|
80
|
+
report: formatAssertionVerifyReport(result, testFile),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ASSERTION_ENHANCEABLE_TEST_TYPES } from "../../types/TestTypes.js";
|
|
3
|
+
import { AnalyticsService } from "../../services/AnalyticsService.js";
|
|
4
|
+
import { toolError } from "../../utils/utils.js";
|
|
5
|
+
import { prepareAssertionCall, snapshotAssertionBaseline, verifyAssertionCall, } from "./assertionOperations.js";
|
|
6
|
+
/**
|
|
7
|
+
* The two halves of `skyramp_enhance_assertions`' deterministic work, exposed
|
|
8
|
+
* as single-purpose tools so the `enhance-assertions` skill can drive the
|
|
9
|
+
* workflow itself: snapshot, apply the rules, verify (SKYR-4310).
|
|
10
|
+
*
|
|
11
|
+
* They share one implementation with the original tool, and are registered
|
|
12
|
+
* only when the skills plugin is loaded — with it off, nothing invokes them
|
|
13
|
+
* and no agent pays for their schemas.
|
|
14
|
+
*/
|
|
15
|
+
const SNAPSHOT_TOOL_NAME = "skyramp_enhance_assertions_snapshot";
|
|
16
|
+
const VERIFY_TOOL_NAME = "skyramp_verify_enhance_assertions";
|
|
17
|
+
const sharedSchema = {
|
|
18
|
+
testFile: z
|
|
19
|
+
.string()
|
|
20
|
+
.describe("Absolute path to the generated or updated test file whose assertions are being enhanced."),
|
|
21
|
+
testType: z
|
|
22
|
+
.enum(ASSERTION_ENHANCEABLE_TEST_TYPES)
|
|
23
|
+
.describe("The type of test whose assertions are being enhanced. Contract applies to provider contract tests only, not consumer contract tests."),
|
|
24
|
+
enhanceType: z
|
|
25
|
+
.enum(["generation", "maintenance"])
|
|
26
|
+
.describe("The context of the enhancement. " +
|
|
27
|
+
"Use 'generation' after generating a new test file (applies to every test function). " +
|
|
28
|
+
"Use 'maintenance' during drift UPDATE (applies only to new or diff-affected functions)."),
|
|
29
|
+
stateFile: z
|
|
30
|
+
.string()
|
|
31
|
+
.optional()
|
|
32
|
+
.describe("Path to the run state file, when the run has one."),
|
|
33
|
+
};
|
|
34
|
+
export function registerAssertionSnapshotTool(server) {
|
|
35
|
+
server.registerTool(SNAPSHOT_TOOL_NAME, {
|
|
36
|
+
description: `Record the assertion baseline for a test file BEFORE its assertions are enhanced. Returns no instructions — the \`enhance-assertions\` skill carries those. Call this first, apply the rules, then call ${VERIFY_TOOL_NAME}.`,
|
|
37
|
+
inputSchema: sharedSchema,
|
|
38
|
+
}, async (params) => {
|
|
39
|
+
const refusal = await prepareAssertionCall(params);
|
|
40
|
+
if (refusal)
|
|
41
|
+
return toolError(refusal);
|
|
42
|
+
await snapshotAssertionBaseline(params);
|
|
43
|
+
AnalyticsService.pushMCPToolEvent(SNAPSHOT_TOOL_NAME, undefined, {
|
|
44
|
+
testFile: params.testFile,
|
|
45
|
+
testType: params.testType,
|
|
46
|
+
enhanceType: params.enhanceType,
|
|
47
|
+
}).catch(() => { });
|
|
48
|
+
return {
|
|
49
|
+
content: [
|
|
50
|
+
{
|
|
51
|
+
type: "text",
|
|
52
|
+
text: `Assertion baseline recorded for \`${params.testFile}\`. Apply the assertion rules, then call ${VERIFY_TOOL_NAME} with the same arguments.`,
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
isError: false,
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
export function registerAssertionVerifyTool(server) {
|
|
60
|
+
server.registerTool(VERIFY_TOOL_NAME, {
|
|
61
|
+
description: `Deterministically verify the assertion enhancement of a test file against the baseline ${SNAPSHOT_TOOL_NAME} recorded. Returns PASS, or FAIL with per-violation remediations. Fix every violation and call again until it passes.`,
|
|
62
|
+
inputSchema: sharedSchema,
|
|
63
|
+
}, async (params) => {
|
|
64
|
+
const refusal = await prepareAssertionCall(params);
|
|
65
|
+
if (refusal)
|
|
66
|
+
return toolError(refusal);
|
|
67
|
+
try {
|
|
68
|
+
const { ok, report } = await verifyAssertionCall(params);
|
|
69
|
+
AnalyticsService.pushMCPToolEvent(VERIFY_TOOL_NAME, undefined, {
|
|
70
|
+
testFile: params.testFile,
|
|
71
|
+
testType: params.testType,
|
|
72
|
+
enhanceType: params.enhanceType,
|
|
73
|
+
verifyPassed: ok,
|
|
74
|
+
}).catch(() => { });
|
|
75
|
+
return {
|
|
76
|
+
content: [{ type: "text", text: report }],
|
|
77
|
+
// isError on FAILED forces the fix-and-retry loop.
|
|
78
|
+
isError: !ok,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
// Not necessarily the test file — state reads can throw here too.
|
|
83
|
+
return toolError(`${VERIFY_TOOL_NAME} failed for ${params.testFile}: ${err.message}`);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|