@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.
Files changed (583) hide show
  1. package/build/commands/localDevTestChangesCommand.js +2 -1
  2. package/build/commands/recommendTestsAndExecuteCommand.js +15 -7
  3. package/build/commands/testThisEndpointCommand.js +35 -6
  4. package/build/execution/wrapperConfig.d.ts +56 -0
  5. package/build/execution/wrapperConfig.js +155 -0
  6. package/build/index.js +40 -10
  7. package/build/playwright/blueprintDigest.js +28 -7
  8. package/build/playwright/registerPlaywrightTools.js +47 -28
  9. package/build/playwright/traceExportStore.d.ts +22 -0
  10. package/build/playwright/traceExportStore.js +81 -0
  11. package/build/playwright/traceRecordingPrompt.js +11 -3
  12. package/build/prompts/code-reuse.js +118 -49
  13. package/build/prompts/fix-error-prompt.d.ts +9 -1
  14. package/build/prompts/fix-error-prompt.js +31 -28
  15. package/build/prompts/local-dev/local-dev-plan.d.ts +3 -0
  16. package/build/prompts/local-dev/local-dev-plan.js +8 -23
  17. package/build/prompts/local-dev/local-dev-prompts.d.ts +1 -1
  18. package/build/prompts/local-dev/local-dev-prompts.js +31 -4
  19. package/build/prompts/modularization/integration-test-modularization.js +13 -6
  20. package/build/prompts/modularization/ui-test-modularization.js +1 -1
  21. package/build/prompts/personas.js +1 -1
  22. package/build/prompts/pom-aware-code-reuse.js +7 -9
  23. package/build/prompts/reuse-hand-off.d.ts +64 -0
  24. package/build/prompts/reuse-hand-off.js +130 -0
  25. package/build/prompts/shared-helper-policy.d.ts +124 -2
  26. package/build/prompts/shared-helper-policy.js +178 -12
  27. package/build/prompts/startTraceCollectionPrompts.js +1 -1
  28. package/build/prompts/sut-setup/modes/adaptWorkflowPrompt.js +7 -8
  29. package/build/prompts/sut-setup/modes/dockerComposePrompt.js +1 -1
  30. package/build/prompts/sut-setup/shared.d.ts +4 -1
  31. package/build/prompts/sut-setup/shared.js +6 -4
  32. package/build/prompts/test-maintenance/actionsInstructions.d.ts +19 -11
  33. package/build/prompts/test-maintenance/actionsInstructions.js +47 -26
  34. package/build/prompts/test-maintenance/drift-analysis-prompt.d.ts +16 -8
  35. package/build/prompts/test-maintenance/drift-analysis-prompt.js +93 -38
  36. package/build/prompts/test-maintenance/driftAnalysisSections.js +5 -3
  37. package/build/prompts/test-maintenance/driftAnalysisShared.js +4 -2
  38. package/build/prompts/test-maintenance/uiDriftAnalysisSections.js +8 -5
  39. package/build/prompts/test-recommendation/recommendationSections.js +19 -8
  40. package/build/prompts/test-recommendation/recommendationShared.d.ts +1 -1
  41. package/build/prompts/test-recommendation/recommendationShared.js +0 -1
  42. package/build/prompts/test-recommendation/registerRecommendTestsPrompt.js +5 -2
  43. package/build/prompts/test-recommendation/test-recommendation-prompt.js +10 -7
  44. package/build/prompts/testbot/testbot-prompts.js +133 -63
  45. package/build/recommendation/answers.js +18 -9
  46. package/build/recommendation/pullRequestText.js +1 -1
  47. package/build/recommendation/registerPlan.js +31 -17
  48. package/build/recommendation/subjectStep.d.ts +8 -10
  49. package/build/recommendation/subjectStep.js +17 -16
  50. package/build/recommendation/types.d.ts +71 -17
  51. package/build/recommendation/types.js +9 -15
  52. package/build/recommendation/verifierContracts.d.ts +7 -3
  53. package/build/recommendation/verifierContracts.js +8 -4
  54. package/build/recommendation/verifiers/changedFile.js +11 -13
  55. package/build/recommendation/verifiers/citedPath.d.ts +8 -0
  56. package/build/recommendation/verifiers/citedPath.js +16 -2
  57. package/build/recommendation/verifiers/coverage.d.ts +2 -2
  58. package/build/recommendation/verifiers/coverage.js +190 -134
  59. package/build/recommendation/verifiers/defects.js +56 -16
  60. package/build/recommendation/verifiers/deliveredMatchesPlan.d.ts +7 -1
  61. package/build/recommendation/verifiers/deliveredMatchesPlan.js +28 -14
  62. package/build/recommendation/verifiers/endpointGrounded.js +14 -8
  63. package/build/recommendation/verifiers/existingCoverage.d.ts +6 -0
  64. package/build/recommendation/verifiers/existingCoverage.js +30 -21
  65. package/build/recommendation/verifiers/expectedOutcome.js +17 -8
  66. package/build/recommendation/verifiers/expectedValueSourced.js +54 -43
  67. package/build/recommendation/verifiers/issueTraceability.d.ts +5 -0
  68. package/build/recommendation/verifiers/issueTraceability.js +64 -7
  69. package/build/recommendation/verifiers/removedElementGuarded.js +19 -11
  70. package/build/recommendation/verifiers/reportedCategory.js +9 -4
  71. package/build/recommendation/verifiers/requirementSourced.js +34 -21
  72. package/build/recommendation/verifiers/screenRoute.js +15 -10
  73. package/build/recommendation/verifiers/statedDifference.js +15 -8
  74. package/build/recommendation/verifiers/uiElementGrounded.js +50 -16
  75. package/build/resources/analysisResources.js +7 -3
  76. package/build/resources/progressResource.js +4 -2
  77. package/build/resources/sutSetupResource.js +20 -2
  78. package/build/resources/testbotResource.js +19 -1
  79. package/build/services/AnalyticsService.js +3 -1
  80. package/build/services/ScenarioGenerationService.js +5 -5
  81. package/build/services/TestDiscoveryService.js +53 -9
  82. package/build/services/TestExecutionService.js +63 -21
  83. package/build/services/TestGenerationService.d.ts +1 -1
  84. package/build/services/TestGenerationService.js +43 -24
  85. package/build/skills/enhanceAssertionsSkill.d.ts +45 -0
  86. package/build/skills/enhanceAssertionsSkill.js +103 -0
  87. package/build/skills/fixTestImportErrorsSkill.d.ts +2 -2
  88. package/build/skills/fixTestImportErrorsSkill.js +2 -2
  89. package/build/skills/runTestSkill.d.ts +6 -0
  90. package/build/skills/runTestSkill.js +17 -0
  91. package/build/skills/skillFiles.d.ts +38 -0
  92. package/build/skills/skillFiles.js +94 -0
  93. package/build/skills/validateAssertionAlignmentSkill.d.ts +34 -0
  94. package/build/skills/validateAssertionAlignmentSkill.js +59 -0
  95. package/build/tool-phases.js +4 -1
  96. package/build/tools/auth/loginTool.js +3 -1
  97. package/build/tools/auth/logoutTool.js +3 -1
  98. package/build/tools/budgetExcuse.d.ts +15 -0
  99. package/build/tools/budgetExcuse.js +113 -0
  100. package/build/tools/code-refactor/alignAssertionsTool.d.ts +2 -0
  101. package/build/tools/code-refactor/alignAssertionsTool.js +51 -0
  102. package/build/tools/code-refactor/assertion-state.d.ts +1 -1
  103. package/build/tools/code-refactor/assertion-state.js +1 -1
  104. package/build/tools/code-refactor/assertionOperations.d.ts +44 -0
  105. package/build/tools/code-refactor/assertionOperations.js +82 -0
  106. package/build/tools/code-refactor/assertionSkillTools.d.ts +3 -0
  107. package/build/tools/code-refactor/assertionSkillTools.js +86 -0
  108. package/build/tools/code-refactor/codeReuseTool.js +27 -3
  109. package/build/tools/code-refactor/enhanceAssertionsTool.js +19 -83
  110. package/build/tools/code-refactor/gate-markers.d.ts +51 -0
  111. package/build/tools/code-refactor/gate-markers.js +95 -0
  112. package/build/tools/code-refactor/retrofit-state.d.ts +3 -1
  113. package/build/tools/code-refactor/retrofit-state.js +44 -2
  114. package/build/tools/code-refactor/reuse-outcome.d.ts +23 -1
  115. package/build/tools/code-refactor/reuse-outcome.js +36 -13
  116. package/build/tools/code-refactor/reuse-state.d.ts +90 -16
  117. package/build/tools/code-refactor/reuse-state.js +191 -61
  118. package/build/tools/code-refactor/utils-verify-gates.d.ts +4 -0
  119. package/build/tools/code-refactor/utils-verify-gates.js +269 -30
  120. package/build/tools/code-refactor/verify-gates.d.ts +15 -1
  121. package/build/tools/code-refactor/verify-gates.js +36 -4
  122. package/build/tools/enrichTestWithMocksTool.d.ts +1 -1
  123. package/build/tools/enrichTestWithMocksTool.js +9 -5
  124. package/build/tools/executeSkyrampTestTool.d.ts +118 -48
  125. package/build/tools/executeSkyrampTestTool.js +998 -372
  126. package/build/tools/execution-video-state.js +1 -1
  127. package/build/tools/fixErrorTool.js +5 -6
  128. package/build/tools/generate-tests/batchMockGenerationTool.js +1 -1
  129. package/build/tools/generate-tests/generateBatchScenarioRestTool.js +114 -73
  130. package/build/tools/generate-tests/generateContractRestTool.js +34 -16
  131. package/build/tools/generate-tests/generateE2ERestTool.d.ts +1 -0
  132. package/build/tools/generate-tests/generateE2ERestTool.js +9 -1
  133. package/build/tools/generate-tests/generateIntegrationRestTool.js +22 -7
  134. package/build/tools/generate-tests/generateMockRestTool.js +3 -1
  135. package/build/tools/generate-tests/generateUIRestTool.d.ts +2 -0
  136. package/build/tools/generate-tests/generateUIRestTool.js +11 -2
  137. package/build/tools/generate-tests/loadTestSchema.js +1 -3
  138. package/build/tools/generate-tests/planGuard.js +6 -3
  139. package/build/tools/generate-tests/scenarioFileIdentity.js +4 -1
  140. package/build/tools/generate-tests/scenarioLint.js +17 -5
  141. package/build/tools/generate-tests/trace-reuse-guard.js +5 -2
  142. package/build/tools/generateEnrichedIntegrationTestTool.js +9 -3
  143. package/build/tools/one-click/oneClickTool.js +3 -1
  144. package/build/tools/preflightMockCheckTool.js +23 -7
  145. package/build/tools/submitReportTool.d.ts +51 -12
  146. package/build/tools/submitReportTool.js +988 -161
  147. package/build/tools/test-management/actionsTool.js +241 -51
  148. package/build/tools/test-management/analyzeChangesTool.d.ts +8 -9
  149. package/build/tools/test-management/analyzeChangesTool.js +127 -68
  150. package/build/tools/test-management/analyzeTestHealthTool.d.ts +0 -11
  151. package/build/tools/test-management/analyzeTestHealthTool.js +42 -76
  152. package/build/tools/test-management/registerTestPlanTool.d.ts +44 -34
  153. package/build/tools/test-management/registerTestPlanTool.js +255 -111
  154. package/build/tools/test-management/resolveScreenTool.js +33 -9
  155. package/build/tools/test-management/testsOwedBeforeRun.d.ts +28 -0
  156. package/build/tools/test-management/testsOwedBeforeRun.js +53 -0
  157. package/build/tools/trace/startTraceCollectionTool.js +3 -1
  158. package/build/tools/trace/stopTraceCollectionTool.js +42 -6
  159. package/build/tools/verifyTestDependenciesTool.d.ts +3 -0
  160. package/build/tools/verifyTestDependenciesTool.js +54 -0
  161. package/build/tools/workspace/initScanWorkspaceTool.js +9 -3
  162. package/build/tools/workspace/initializeWorkspaceTool.js +3 -1
  163. package/build/types/AssertionOutcome.d.ts +1 -1
  164. package/build/types/EnhanceType.d.ts +6 -0
  165. package/build/types/EnhanceType.js +1 -0
  166. package/build/types/RepositoryAnalysis.d.ts +32 -72
  167. package/build/types/ReuseOutcome.d.ts +100 -7
  168. package/build/types/ReuseOutcome.js +16 -0
  169. package/build/types/StepMethod.js +20 -6
  170. package/build/types/TestAnalysis.d.ts +10 -2
  171. package/build/types/TestExecution.d.ts +45 -0
  172. package/build/types/TestRecommendation.d.ts +1 -1
  173. package/build/types/TestRecommendation.js +4 -1
  174. package/build/types/TestTypes.d.ts +16 -0
  175. package/build/types/TestTypes.js +40 -3
  176. package/build/types/TestbotPromptOptions.d.ts +9 -1
  177. package/build/types/TestbotReport.d.ts +45 -9
  178. package/build/utils/AnalysisStateManager.d.ts +137 -34
  179. package/build/utils/AnalysisStateManager.js +228 -44
  180. package/build/utils/assertion-verify/api-shared-lints.js +34 -16
  181. package/build/utils/assertion-verify/metrics.js +39 -6
  182. package/build/utils/assertion-verify/ui-lints.js +4 -2
  183. package/build/utils/branchDiff.js +47 -12
  184. package/build/utils/canonicalJson.js +3 -1
  185. package/build/utils/connectionErrors.d.ts +10 -0
  186. package/build/utils/connectionErrors.js +10 -0
  187. package/build/utils/dartRouteExtractor.js +36 -7
  188. package/build/utils/fixAttempts.d.ts +26 -0
  189. package/build/utils/fixAttempts.js +109 -0
  190. package/build/utils/frontendSelectors.js +23 -4
  191. package/build/utils/generatedTestRecord.d.ts +19 -0
  192. package/build/utils/generatedTestRecord.js +61 -0
  193. package/build/utils/gitStaging.js +7 -2
  194. package/build/utils/initAgent.js +26 -6
  195. package/build/utils/language-helper.js +60 -45
  196. package/build/utils/pathMatching.js +2 -1
  197. package/build/utils/pathSignatures.js +6 -2
  198. package/build/utils/planMatchKeys.d.ts +2 -2
  199. package/build/utils/planMatchKeys.js +20 -14
  200. package/build/utils/pom-catalog-parse.js +7 -2
  201. package/build/utils/pom-scope/import-expansion.js +6 -1
  202. package/build/utils/pom-scope/index.js +50 -12
  203. package/build/utils/pom-scope/scoring.js +13 -3
  204. package/build/utils/pom-scope/selector-extractor.js +16 -3
  205. package/build/utils/pom-scope/strip.d.ts +8 -0
  206. package/build/utils/pom-scope/strip.js +238 -0
  207. package/build/utils/pom-scope/testIdDiscovery.js +14 -2
  208. package/build/utils/pom-verify/__fixtures__/af-style/asset-list.page.d.ts +1 -1
  209. package/build/utils/pom-verify/__fixtures__/af-style/asset-list.page.js +4 -2
  210. package/build/utils/pom-verify/__fixtures__/af-style/report.iframe.page.js +3 -1
  211. package/build/utils/pom-verify/__fixtures__/af-style/workflow-footer.page.js +3 -1
  212. package/build/utils/pom-verify/bindings.js +5 -1
  213. package/build/utils/pom-verify/calls.js +9 -2
  214. package/build/utils/pom-verify/verify.js +27 -5
  215. package/build/utils/pr-comment-parser.js +20 -7
  216. package/build/utils/progress.d.ts +1 -1
  217. package/build/utils/progress.js +1 -1
  218. package/build/utils/proxy-terminal.d.ts +19 -1
  219. package/build/utils/proxy-terminal.js +346 -21
  220. package/build/utils/rebaselineSnapshots.d.ts +1 -1
  221. package/build/utils/rebaselineSnapshots.js +6 -16
  222. package/build/utils/removedUiElements.js +1 -1
  223. package/build/utils/reportLanguage.js +35 -7
  224. package/build/utils/reportVerification.d.ts +14 -8
  225. package/build/utils/reportVerification.js +19 -19
  226. package/build/utils/repositorySlug.d.ts +32 -0
  227. package/build/utils/repositorySlug.js +77 -0
  228. package/build/utils/reuseRouting.d.ts +10 -0
  229. package/build/utils/reuseRouting.js +21 -2
  230. package/build/utils/runContextGauge.d.ts +27 -0
  231. package/build/utils/runContextGauge.js +181 -0
  232. package/build/utils/runSerialized.d.ts +3 -0
  233. package/build/utils/runSerialized.js +39 -0
  234. package/build/utils/screenRoutes.js +74 -18
  235. package/build/utils/skyrampMdContent.d.ts +1 -1
  236. package/build/utils/skyrampMdContent.js +1 -1
  237. package/build/utils/skyrampSdkVersion.d.ts +9 -0
  238. package/build/utils/skyrampSdkVersion.js +16 -0
  239. package/build/utils/sourceRouteExtractor.js +13 -6
  240. package/build/utils/telemetry.d.ts +1 -0
  241. package/build/utils/telemetry.js +8 -5
  242. package/build/utils/testDependencyPolicy.d.ts +9 -0
  243. package/build/utils/testDependencyPolicy.js +809 -0
  244. package/build/utils/testExecutionRecord.d.ts +94 -0
  245. package/build/utils/testExecutionRecord.js +269 -0
  246. package/build/utils/testFileClassification.d.ts +8 -0
  247. package/build/utils/testFileClassification.js +39 -4
  248. package/build/utils/trace-parser.js +62 -14
  249. package/build/utils/urlPath.js +3 -1
  250. package/build/utils/utils-verify/action-key.d.ts +46 -0
  251. package/build/utils/utils-verify/action-key.js +120 -38
  252. package/build/utils/utils-verify/action-sites.d.ts +32 -0
  253. package/build/utils/utils-verify/action-sites.js +202 -0
  254. package/build/utils/utils-verify/allow.d.ts +122 -3
  255. package/build/utils/utils-verify/allow.js +146 -21
  256. package/build/utils/utils-verify/body-reach.d.ts +120 -0
  257. package/build/utils/utils-verify/body-reach.js +333 -0
  258. package/build/utils/utils-verify/call-sites.d.ts +31 -7
  259. package/build/utils/utils-verify/call-sites.js +80 -13
  260. package/build/utils/utils-verify/delivered-imports.d.ts +43 -0
  261. package/build/utils/utils-verify/delivered-imports.js +84 -0
  262. package/build/utils/utils-verify/fixed-sleep.d.ts +96 -0
  263. package/build/utils/utils-verify/fixed-sleep.js +461 -0
  264. package/build/utils/utils-verify/in-house.d.ts +93 -0
  265. package/build/utils/utils-verify/in-house.js +719 -0
  266. package/build/utils/utils-verify/incumbent.d.ts +3 -0
  267. package/build/utils/utils-verify/incumbent.js +75 -0
  268. package/build/utils/utils-verify/index.d.ts +2 -0
  269. package/build/utils/utils-verify/index.js +2 -0
  270. package/build/utils/utils-verify/language-spec.d.ts +51 -10
  271. package/build/utils/utils-verify/language-spec.js +232 -21
  272. package/build/utils/utils-verify/locate.d.ts +26 -0
  273. package/build/utils/utils-verify/locate.js +125 -23
  274. package/build/utils/utils-verify/module-name.d.ts +40 -0
  275. package/build/utils/utils-verify/module-name.js +98 -0
  276. package/build/utils/utils-verify/parse.d.ts +56 -7
  277. package/build/utils/utils-verify/parse.js +195 -40
  278. package/build/utils/utils-verify/retrofit-equivalence.d.ts +5 -0
  279. package/build/utils/utils-verify/retrofit-equivalence.js +4 -2
  280. package/build/utils/utils-verify/stage.d.ts +5 -0
  281. package/build/utils/utils-verify/stage.js +47 -2
  282. package/build/utils/utils-verify/status-once.d.ts +62 -0
  283. package/build/utils/utils-verify/status-once.js +207 -0
  284. package/build/utils/utils-verify/typecheck.d.ts +61 -0
  285. package/build/utils/utils-verify/typecheck.js +338 -0
  286. package/build/utils/utils-verify/verify.d.ts +79 -3
  287. package/build/utils/utils-verify/verify.js +531 -61
  288. package/build/utils/versions.d.ts +3 -3
  289. package/build/utils/versions.js +1 -1
  290. package/build/utils/workspaceAuth.js +107 -37
  291. package/build/workspace/queryParamResolution.js +11 -4
  292. package/build/workspace/workspace.d.ts +72 -52
  293. package/build/workspace/workspace.js +19 -15
  294. package/node_modules/playwright/ThirdPartyNotices.txt +19 -19
  295. package/node_modules/playwright/lib/mcp/skyramp/assertTool.js +8 -2
  296. package/node_modules/playwright/lib/mcp/skyramp/common/cssValue.js +87 -0
  297. package/node_modules/playwright/lib/mcp/skyramp/loadTraceTool.js +31 -0
  298. package/node_modules/playwright/lib/mcp/skyramp/skyRampImport.js +3 -0
  299. package/node_modules/playwright/lib/mcp/skyramp/traceRecordingBackend.js +181 -15
  300. package/node_modules/playwright/lib/mcp/test/skyRampExport.js +24 -0
  301. package/node_modules/playwright/lib/transform/babelBundleImpl.js +2353 -190
  302. package/node_modules/playwright/node_modules/playwright-core/ThirdPartyNotices.txt +62 -34
  303. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/.package-lock.json +72 -41
  304. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/dist/serve-static.js +1 -1
  305. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/dist/serve-static.mjs +1 -1
  306. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/package.json +2 -2
  307. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/README.md +16 -1
  308. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/index.js +4 -20
  309. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/read.js +17 -17
  310. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/json.js +60 -32
  311. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/raw.js +3 -3
  312. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/text.js +3 -3
  313. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/urlencoded.js +16 -20
  314. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/utils.js +18 -16
  315. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/LICENSE +22 -0
  316. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/README.md +71 -0
  317. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.d.ts +46 -0
  318. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.js +176 -0
  319. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.js.map +1 -0
  320. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/package.json +52 -0
  321. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/package.json +23 -10
  322. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/CHANGELOG.md +21 -14
  323. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/isObject.d.ts +1 -1
  324. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/package.json +6 -7
  325. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/tsconfig.json +1 -0
  326. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/index.js +266 -45
  327. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/lib/schemes.js +9 -4
  328. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/lib/utils.js +396 -92
  329. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/package.json +1 -1
  330. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/component-safe-serialization.test.js +163 -0
  331. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/equal.test.js +31 -3
  332. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/fixtures/uri-js-parse.json +2 -0
  333. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/ipv6-canonical.test.js +34 -0
  334. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/ipv6-validation.test.js +124 -0
  335. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/malformed-percent.test.js +77 -0
  336. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/malformed-urn.test.js +61 -0
  337. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/parse.test.js +7 -3
  338. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/query-fragment-normalization.test.js +33 -0
  339. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/reserved-path-normalization.test.js +109 -0
  340. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/scheme-validation.test.js +124 -0
  341. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/security-normalization.test.js +101 -0
  342. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/security.test.js +301 -3
  343. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/urn-full-input.test.js +29 -0
  344. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/websocket-query-preservation.test.js +24 -0
  345. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/CHANGELOG.md +7 -0
  346. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/index.d.ts +0 -1
  347. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/package.json +4 -5
  348. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/client/client.js +30 -16
  349. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/client/utils.js +4 -1
  350. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/context.js +32 -13
  351. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/accepts/accepts.js +36 -2
  352. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/proxy/index.js +4 -0
  353. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/ssg/ssg.js +1 -1
  354. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/ssg/utils.js +30 -10
  355. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/streaming/sse.js +5 -4
  356. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/hono-base.js +10 -8
  357. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/base.js +44 -23
  358. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/components.js +25 -26
  359. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/context.js +5 -5
  360. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/dom/render.js +2 -0
  361. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/dom/server.js +5 -1
  362. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/hooks/index.js +16 -13
  363. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +3 -3
  364. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/streaming.js +4 -5
  365. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/cache/index.js +103 -8
  366. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/compress/index.js +5 -0
  367. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/cors/index.js +17 -14
  368. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/csrf/index.js +1 -1
  369. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/etag/digest.js +47 -1
  370. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/etag/index.js +7 -4
  371. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +9 -4
  372. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +9 -4
  373. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/language/language.js +10 -6
  374. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/method-not-allowed/index.js +90 -0
  375. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +3 -1
  376. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/secure-headers/secure-headers.js +16 -7
  377. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/request.js +20 -13
  378. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/linear-router/router.js +7 -2
  379. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/pattern-router/router.js +3 -9
  380. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +65 -59
  381. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +71 -128
  382. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +14 -5
  383. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/trie-router/node.js +47 -70
  384. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/trie-router/router.js +3 -11
  385. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/utils.js +27 -0
  386. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router.js +1 -1
  387. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/accept.js +1 -1
  388. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/body.js +21 -3
  389. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/cookie.js +4 -3
  390. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/ipaddr.js +5 -3
  391. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/stream.js +12 -3
  392. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/url.js +19 -11
  393. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/client/client.js +30 -16
  394. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/client/utils.js +4 -1
  395. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/context.js +32 -13
  396. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/accepts/accepts.js +36 -2
  397. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/proxy/index.js +4 -0
  398. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/ssg/ssg.js +1 -1
  399. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/ssg/utils.js +30 -10
  400. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/streaming/sse.js +5 -4
  401. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/hono-base.js +10 -8
  402. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/base.js +41 -23
  403. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/components.js +26 -27
  404. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/context.js +6 -6
  405. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/dom/render.js +2 -0
  406. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/dom/server.js +5 -1
  407. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/hooks/index.js +16 -13
  408. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/intrinsic-element/components.js +4 -4
  409. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/streaming.js +5 -6
  410. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/cache/index.js +103 -8
  411. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/compress/index.js +5 -0
  412. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/cors/index.js +17 -14
  413. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/csrf/index.js +1 -1
  414. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/etag/digest.js +47 -1
  415. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/etag/index.js +7 -4
  416. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/jwk/jwk.js +9 -4
  417. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/jwt/jwt.js +9 -4
  418. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/language/language.js +10 -6
  419. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/method-not-allowed/index.js +68 -0
  420. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/pretty-json/index.js +3 -1
  421. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/secure-headers/secure-headers.js +16 -7
  422. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/request.js +21 -14
  423. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/linear-router/router.js +7 -2
  424. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/pattern-router/router.js +3 -9
  425. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/node.js +61 -58
  426. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/router.js +77 -129
  427. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/trie.js +14 -5
  428. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/trie-router/node.js +47 -70
  429. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/trie-router/router.js +3 -11
  430. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/utils.js +5 -0
  431. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router.js +1 -1
  432. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/adapter/aws-lambda/types.d.ts +9 -0
  433. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/client/types.d.ts +1 -1
  434. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/context.d.ts +6 -2
  435. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/hono-base.d.ts +4 -3
  436. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/base.d.ts +7 -2
  437. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/index.d.ts +5 -5
  438. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/intrinsic-element/components.d.ts +2 -2
  439. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/server.d.ts +5 -5
  440. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/hooks/index.d.ts +8 -6
  441. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/index.d.ts +5 -5
  442. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/cache/index.d.ts +6 -4
  443. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/combine/index.d.ts +1 -1
  444. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/cors/index.d.ts +1 -1
  445. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +2 -2
  446. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jwk/jwk.d.ts +2 -0
  447. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jwt/jwt.d.ts +2 -0
  448. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/method-not-allowed/index.d.ts +49 -0
  449. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/secure-headers/permissions-policy.d.ts +3 -3
  450. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +4 -1
  451. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +2 -1
  452. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/trie-router/node.d.ts +1 -2
  453. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/trie-router/router.d.ts +0 -1
  454. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/utils.d.ts +1 -0
  455. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router.d.ts +1 -1
  456. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/utils/headers.d.ts +2 -2
  457. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/utils/url.d.ts +5 -0
  458. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/accept.js +1 -1
  459. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/body.js +21 -3
  460. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/cookie.js +5 -4
  461. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/ipaddr.js +5 -3
  462. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/stream.js +12 -3
  463. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/url.js +17 -10
  464. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/package.json +11 -4
  465. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/README.md +173 -143
  466. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/address-error.d.ts +11 -0
  467. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/address-error.js.map +1 -1
  468. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.d.ts +49 -0
  469. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.js +79 -4
  470. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.js.map +1 -1
  471. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.d.ts +78 -5
  472. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.js +119 -24
  473. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.js.map +1 -1
  474. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.d.ts +151 -10
  475. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.js +316 -90
  476. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.js.map +1 -1
  477. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.d.ts +12 -0
  478. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.js +45 -2
  479. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.js.map +1 -1
  480. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.d.ts +14 -0
  481. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.js +50 -3
  482. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.js.map +1 -1
  483. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/package.json +6 -4
  484. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/.github/THREAT_MODEL.md +3 -3
  485. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/CHANGELOG.md +26 -0
  486. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/README.md +19 -1
  487. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/dist/qs.js +25 -25
  488. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/eslint.config.mjs +1 -1
  489. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/parse.js +16 -6
  490. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/stringify.js +23 -8
  491. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/utils.js +57 -11
  492. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/package.json +8 -7
  493. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/parse.js +419 -0
  494. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/stringify.js +317 -0
  495. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/utils.js +206 -0
  496. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/CHANGELOG.md +10 -0
  497. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/README.md +1 -1
  498. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/index.js +5 -2
  499. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/package.json +10 -10
  500. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/test/index.js +16 -0
  501. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/index.js +8 -18
  502. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/LICENSE +22 -0
  503. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/README.md +71 -0
  504. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.d.ts +46 -0
  505. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.js +176 -0
  506. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.js.map +1 -0
  507. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/package.json +52 -0
  508. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/package.json +9 -5
  509. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/package-lock.json +72 -41
  510. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/.package-lock.json +6 -6
  511. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/README.md +23 -1
  512. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/index.js +265 -86
  513. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/package.json +1 -1
  514. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/README.md +173 -143
  515. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/address-error.d.ts +11 -0
  516. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/address-error.js.map +1 -1
  517. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.d.ts +49 -0
  518. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.js +79 -4
  519. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.js.map +1 -1
  520. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.d.ts +78 -5
  521. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.js +119 -24
  522. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.js.map +1 -1
  523. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.d.ts +151 -10
  524. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.js +316 -90
  525. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.js.map +1 -1
  526. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.d.ts +12 -0
  527. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.js +45 -2
  528. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.js.map +1 -1
  529. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.d.ts +14 -0
  530. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.js +50 -3
  531. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.js.map +1 -1
  532. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/package.json +6 -4
  533. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/package-lock.json +6 -6
  534. package/node_modules/playwright/node_modules/playwright-core/lib/cli/program.js +18 -9
  535. package/node_modules/playwright/node_modules/playwright-core/lib/mcpBundleImpl/index.js +47 -47
  536. package/node_modules/playwright/node_modules/playwright-core/lib/server/codegen/skyramp/jsonlReader.js +3 -0
  537. package/node_modules/playwright/node_modules/playwright-core/lib/server/recorder/recorderRunner.js +42 -0
  538. package/node_modules/playwright/node_modules/playwright-core/lib/utilsBundleImpl/index.js +121 -121
  539. package/node_modules/playwright/node_modules/playwright-core/lib/vite/traceViewer/{index.B7KbSQcC.js → index.BAkLd5DX.js} +1 -1
  540. package/node_modules/playwright/node_modules/playwright-core/lib/vite/traceViewer/index.html +1 -1
  541. package/node_modules/playwright/node_modules/playwright-core/package.json +1 -1
  542. package/node_modules/playwright/node_modules/playwright-core/src/cli/program.ts +31 -9
  543. package/node_modules/playwright/node_modules/playwright-core/src/server/codegen/skyramp/jsonlReader.ts +1 -0
  544. package/node_modules/playwright/node_modules/playwright-core/src/server/recorder/recorderRunner.ts +57 -1
  545. package/node_modules/playwright/package.json +2 -2
  546. package/package.json +7 -6
  547. package/plugin/prompts/code-reuse/hand-off.md +30 -0
  548. package/plugin/prompts/generate-tests/generation.md +1 -1
  549. package/plugin/prompts/plan-tests.md +14 -14
  550. package/plugin/prompts/testbot-task1.md +2 -2
  551. package/plugin/skills/enhance-assertions/SKILL.md +25 -0
  552. package/plugin/skills/enhance-assertions/reference/contract.md +51 -0
  553. package/plugin/skills/enhance-assertions/reference/integration.md +58 -0
  554. package/plugin/skills/enhance-assertions/reference/shared-rules.md +220 -0
  555. package/plugin/skills/enhance-assertions/reference/ui.md +373 -0
  556. package/plugin/skills/fix-test-import-errors/SKILL.md +45 -50
  557. package/plugin/skills/run-test/SKILL.md +16 -0
  558. package/plugin/skills/validate-assertion-alignment-post-execution/SKILL.md +32 -0
  559. package/plugin/skills/validate-assertion-alignment-post-execution/reference/checks.md +44 -0
  560. package/plugin/skills/validate-assertion-alignment-post-execution/reference/evidence.md +47 -0
  561. package/build/adapters/jestAdapter.d.ts +0 -14
  562. package/build/adapters/jestAdapter.js +0 -113
  563. package/build/adapters/mochaAdapter.d.ts +0 -13
  564. package/build/adapters/mochaAdapter.js +0 -87
  565. package/build/adapters/playwrightAdapter.d.ts +0 -17
  566. package/build/adapters/playwrightAdapter.js +0 -182
  567. package/build/adapters/pytestAdapter.d.ts +0 -15
  568. package/build/adapters/pytestAdapter.js +0 -108
  569. package/build/prompts/enhance-assertions/contractProviderAssertionsPrompt.d.ts +0 -2
  570. package/build/prompts/enhance-assertions/contractProviderAssertionsPrompt.js +0 -29
  571. package/build/prompts/enhance-assertions/integrationAssertionsPrompt.d.ts +0 -2
  572. package/build/prompts/enhance-assertions/integrationAssertionsPrompt.js +0 -36
  573. package/build/prompts/enhance-assertions/sharedAssertionRules.d.ts +0 -16
  574. package/build/prompts/enhance-assertions/sharedAssertionRules.js +0 -284
  575. package/build/prompts/enhance-assertions/uiAssertionsPrompt.d.ts +0 -2
  576. package/build/prompts/enhance-assertions/uiAssertionsPrompt.js +0 -388
  577. package/build/tools/runExistingTestsTool.d.ts +0 -138
  578. package/build/tools/runExistingTestsTool.js +0 -644
  579. package/build/types/ExternalTestExecution.d.ts +0 -67
  580. package/build/types/ExternalTestExecution.js +0 -8
  581. package/build/workspace/testSuites.d.ts +0 -20
  582. package/build/workspace/testSuites.js +0 -17
  583. 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
+ }
@@ -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) => { logger.warning("Analytics event failed", { error: String(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) => { logger.warning("Analytics event failed", { error: String(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,2 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerAlignAssertionsTool(server: McpServer): void;
@@ -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?: string;
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
@@ -54,7 +54,7 @@ preloaded) {
54
54
  const next = patch(data.assertionOutcomes?.[key]);
55
55
  if (next === undefined)
56
56
  return false;
57
- await manager.writeData({
57
+ await manager.appendData({
58
58
  ...data,
59
59
  assertionOutcomes: {
60
60
  ...data.assertionOutcomes,
@@ -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,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerAssertionSnapshotTool(server: McpServer): void;
3
+ export declare function registerAssertionVerifyTool(server: McpServer): void;
@@ -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
+ }