@skyramp/mcp 0.4.1 → 0.4.2-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (543) hide show
  1. package/build/adapters/jestAdapter.js +23 -5
  2. package/build/adapters/mochaAdapter.js +7 -1
  3. package/build/adapters/playwrightAdapter.js +3 -1
  4. package/build/adapters/pytestAdapter.js +14 -3
  5. package/build/commands/localDevTestChangesCommand.js +1 -0
  6. package/build/commands/recommendTestsAndExecuteCommand.js +5 -6
  7. package/build/commands/testThisEndpointCommand.js +16 -4
  8. package/build/index.js +34 -4
  9. package/build/playwright/blueprintDigest.js +28 -7
  10. package/build/playwright/registerPlaywrightTools.js +33 -28
  11. package/build/playwright/traceRecordingPrompt.js +9 -2
  12. package/build/prompts/code-reuse.js +95 -29
  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 +3 -1
  17. package/build/prompts/local-dev/local-dev-prompts.d.ts +1 -1
  18. package/build/prompts/local-dev/local-dev-prompts.js +30 -3
  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 +88 -2
  26. package/build/prompts/shared-helper-policy.js +145 -11
  27. package/build/prompts/sut-setup/modes/adaptWorkflowPrompt.js +1 -1
  28. package/build/prompts/sut-setup/modes/dockerComposePrompt.js +1 -1
  29. package/build/prompts/sut-setup/shared.d.ts +4 -1
  30. package/build/prompts/sut-setup/shared.js +2 -2
  31. package/build/prompts/test-maintenance/actionsInstructions.d.ts +19 -11
  32. package/build/prompts/test-maintenance/actionsInstructions.js +47 -26
  33. package/build/prompts/test-maintenance/drift-analysis-prompt.js +3 -2
  34. package/build/prompts/test-maintenance/driftAnalysisSections.js +5 -3
  35. package/build/prompts/test-maintenance/driftAnalysisShared.js +4 -2
  36. package/build/prompts/test-maintenance/uiDriftAnalysisSections.js +7 -4
  37. package/build/prompts/test-recommendation/recommendationSections.js +19 -8
  38. package/build/prompts/test-recommendation/registerRecommendTestsPrompt.js +5 -2
  39. package/build/prompts/test-recommendation/test-recommendation-prompt.js +10 -7
  40. package/build/prompts/testbot/testbot-prompts.js +123 -55
  41. package/build/recommendation/answers.js +18 -9
  42. package/build/recommendation/pullRequestText.js +1 -1
  43. package/build/recommendation/registerPlan.js +31 -17
  44. package/build/recommendation/subjectStep.d.ts +8 -10
  45. package/build/recommendation/subjectStep.js +17 -16
  46. package/build/recommendation/types.d.ts +71 -17
  47. package/build/recommendation/types.js +9 -15
  48. package/build/recommendation/verifierContracts.d.ts +7 -3
  49. package/build/recommendation/verifierContracts.js +8 -4
  50. package/build/recommendation/verifiers/changedFile.js +11 -13
  51. package/build/recommendation/verifiers/citedPath.d.ts +8 -0
  52. package/build/recommendation/verifiers/citedPath.js +16 -2
  53. package/build/recommendation/verifiers/coverage.d.ts +2 -2
  54. package/build/recommendation/verifiers/coverage.js +190 -134
  55. package/build/recommendation/verifiers/defects.js +56 -16
  56. package/build/recommendation/verifiers/deliveredMatchesPlan.d.ts +7 -1
  57. package/build/recommendation/verifiers/deliveredMatchesPlan.js +28 -14
  58. package/build/recommendation/verifiers/endpointGrounded.js +14 -8
  59. package/build/recommendation/verifiers/existingCoverage.d.ts +6 -0
  60. package/build/recommendation/verifiers/existingCoverage.js +30 -21
  61. package/build/recommendation/verifiers/expectedOutcome.js +17 -8
  62. package/build/recommendation/verifiers/expectedValueSourced.js +54 -43
  63. package/build/recommendation/verifiers/issueTraceability.d.ts +5 -0
  64. package/build/recommendation/verifiers/issueTraceability.js +64 -7
  65. package/build/recommendation/verifiers/removedElementGuarded.js +19 -11
  66. package/build/recommendation/verifiers/reportedCategory.js +9 -4
  67. package/build/recommendation/verifiers/requirementSourced.js +34 -21
  68. package/build/recommendation/verifiers/screenRoute.js +15 -10
  69. package/build/recommendation/verifiers/statedDifference.js +15 -8
  70. package/build/recommendation/verifiers/uiElementGrounded.js +50 -16
  71. package/build/resources/analysisResources.js +7 -3
  72. package/build/resources/progressResource.js +4 -2
  73. package/build/resources/sutSetupResource.js +20 -2
  74. package/build/resources/testbotResource.js +19 -1
  75. package/build/services/AnalyticsService.js +3 -1
  76. package/build/services/ScenarioGenerationService.js +5 -5
  77. package/build/services/TestDiscoveryService.js +21 -5
  78. package/build/services/TestExecutionService.js +63 -21
  79. package/build/services/TestGenerationService.d.ts +1 -1
  80. package/build/services/TestGenerationService.js +43 -24
  81. package/build/skills/enhanceAssertionsSkill.d.ts +45 -0
  82. package/build/skills/enhanceAssertionsSkill.js +103 -0
  83. package/build/skills/fixTestImportErrorsSkill.d.ts +2 -2
  84. package/build/skills/fixTestImportErrorsSkill.js +2 -2
  85. package/build/skills/skillFiles.d.ts +38 -0
  86. package/build/skills/skillFiles.js +94 -0
  87. package/build/skills/validateAssertionAlignmentSkill.d.ts +34 -0
  88. package/build/skills/validateAssertionAlignmentSkill.js +59 -0
  89. package/build/tool-phases.js +4 -0
  90. package/build/tools/auth/loginTool.js +3 -1
  91. package/build/tools/auth/logoutTool.js +3 -1
  92. package/build/tools/code-refactor/alignAssertionsTool.d.ts +2 -0
  93. package/build/tools/code-refactor/alignAssertionsTool.js +51 -0
  94. package/build/tools/code-refactor/assertion-state.d.ts +1 -1
  95. package/build/tools/code-refactor/assertion-state.js +1 -1
  96. package/build/tools/code-refactor/assertionOperations.d.ts +44 -0
  97. package/build/tools/code-refactor/assertionOperations.js +82 -0
  98. package/build/tools/code-refactor/assertionSkillTools.d.ts +3 -0
  99. package/build/tools/code-refactor/assertionSkillTools.js +86 -0
  100. package/build/tools/code-refactor/codeReuseTool.js +27 -3
  101. package/build/tools/code-refactor/enhanceAssertionsTool.js +19 -83
  102. package/build/tools/code-refactor/gate-markers.d.ts +51 -0
  103. package/build/tools/code-refactor/gate-markers.js +95 -0
  104. package/build/tools/code-refactor/retrofit-state.d.ts +3 -1
  105. package/build/tools/code-refactor/retrofit-state.js +44 -2
  106. package/build/tools/code-refactor/reuse-outcome.d.ts +23 -1
  107. package/build/tools/code-refactor/reuse-outcome.js +36 -13
  108. package/build/tools/code-refactor/reuse-state.d.ts +90 -16
  109. package/build/tools/code-refactor/reuse-state.js +191 -61
  110. package/build/tools/code-refactor/utils-verify-gates.d.ts +4 -0
  111. package/build/tools/code-refactor/utils-verify-gates.js +252 -27
  112. package/build/tools/code-refactor/verify-gates.d.ts +15 -1
  113. package/build/tools/code-refactor/verify-gates.js +36 -4
  114. package/build/tools/enrichTestWithMocksTool.d.ts +1 -1
  115. package/build/tools/enrichTestWithMocksTool.js +9 -5
  116. package/build/tools/executeSkyrampTestTool.d.ts +22 -1
  117. package/build/tools/executeSkyrampTestTool.js +571 -271
  118. package/build/tools/execution-video-state.js +1 -1
  119. package/build/tools/fixErrorTool.js +5 -6
  120. package/build/tools/generate-tests/batchMockGenerationTool.js +1 -1
  121. package/build/tools/generate-tests/generateBatchScenarioRestTool.js +114 -73
  122. package/build/tools/generate-tests/generateContractRestTool.js +34 -16
  123. package/build/tools/generate-tests/generateE2ERestTool.d.ts +1 -0
  124. package/build/tools/generate-tests/generateE2ERestTool.js +9 -1
  125. package/build/tools/generate-tests/generateIntegrationRestTool.js +22 -7
  126. package/build/tools/generate-tests/generateMockRestTool.js +3 -1
  127. package/build/tools/generate-tests/generateUIRestTool.d.ts +2 -0
  128. package/build/tools/generate-tests/generateUIRestTool.js +11 -2
  129. package/build/tools/generate-tests/loadTestSchema.js +1 -3
  130. package/build/tools/generate-tests/planGuard.js +6 -3
  131. package/build/tools/generate-tests/scenarioFileIdentity.js +4 -1
  132. package/build/tools/generate-tests/scenarioLint.js +17 -5
  133. package/build/tools/generate-tests/trace-reuse-guard.js +5 -2
  134. package/build/tools/generateEnrichedIntegrationTestTool.js +9 -3
  135. package/build/tools/one-click/oneClickTool.js +3 -1
  136. package/build/tools/preflightMockCheckTool.js +23 -7
  137. package/build/tools/runExistingTestsTool.d.ts +1 -1
  138. package/build/tools/runExistingTestsTool.js +43 -21
  139. package/build/tools/submitReportTool.d.ts +51 -12
  140. package/build/tools/submitReportTool.js +860 -161
  141. package/build/tools/test-management/actionsTool.js +210 -51
  142. package/build/tools/test-management/analyzeChangesTool.d.ts +4 -5
  143. package/build/tools/test-management/analyzeChangesTool.js +127 -68
  144. package/build/tools/test-management/analyzeTestHealthTool.js +35 -13
  145. package/build/tools/test-management/registerTestPlanTool.d.ts +44 -34
  146. package/build/tools/test-management/registerTestPlanTool.js +255 -111
  147. package/build/tools/test-management/resolveScreenTool.js +33 -9
  148. package/build/tools/trace/startTraceCollectionTool.js +3 -1
  149. package/build/tools/trace/stopTraceCollectionTool.js +41 -5
  150. package/build/tools/verifyTestDependenciesTool.d.ts +3 -0
  151. package/build/tools/verifyTestDependenciesTool.js +54 -0
  152. package/build/tools/workspace/initScanWorkspaceTool.js +9 -3
  153. package/build/tools/workspace/initializeWorkspaceTool.js +3 -1
  154. package/build/types/AssertionOutcome.d.ts +1 -1
  155. package/build/types/EnhanceType.d.ts +6 -0
  156. package/build/types/EnhanceType.js +1 -0
  157. package/build/types/ExternalTestExecution.d.ts +2 -2
  158. package/build/types/RepositoryAnalysis.d.ts +0 -40
  159. package/build/types/ReuseOutcome.d.ts +96 -4
  160. package/build/types/ReuseOutcome.js +16 -0
  161. package/build/types/StepMethod.js +20 -6
  162. package/build/types/TestAnalysis.d.ts +10 -2
  163. package/build/types/TestExecution.d.ts +45 -0
  164. package/build/types/TestRecommendation.d.ts +1 -1
  165. package/build/types/TestRecommendation.js +4 -1
  166. package/build/types/TestTypes.d.ts +13 -0
  167. package/build/types/TestTypes.js +34 -3
  168. package/build/types/TestbotPromptOptions.d.ts +9 -1
  169. package/build/types/TestbotReport.d.ts +45 -9
  170. package/build/utils/AnalysisStateManager.d.ts +137 -27
  171. package/build/utils/AnalysisStateManager.js +227 -43
  172. package/build/utils/assertion-verify/api-shared-lints.js +34 -16
  173. package/build/utils/assertion-verify/metrics.js +39 -6
  174. package/build/utils/assertion-verify/ui-lints.js +4 -2
  175. package/build/utils/branchDiff.js +47 -12
  176. package/build/utils/canonicalJson.js +3 -1
  177. package/build/utils/dartRouteExtractor.js +36 -7
  178. package/build/utils/fixAttempts.d.ts +26 -0
  179. package/build/utils/fixAttempts.js +109 -0
  180. package/build/utils/frontendSelectors.js +23 -4
  181. package/build/utils/generatedTestRecord.d.ts +19 -0
  182. package/build/utils/generatedTestRecord.js +61 -0
  183. package/build/utils/gitStaging.js +7 -2
  184. package/build/utils/initAgent.js +26 -6
  185. package/build/utils/language-helper.js +39 -45
  186. package/build/utils/pathMatching.js +2 -1
  187. package/build/utils/pathSignatures.js +6 -2
  188. package/build/utils/planMatchKeys.d.ts +2 -2
  189. package/build/utils/planMatchKeys.js +20 -14
  190. package/build/utils/pom-catalog-parse.js +7 -2
  191. package/build/utils/pom-scope/import-expansion.js +6 -1
  192. package/build/utils/pom-scope/index.js +50 -12
  193. package/build/utils/pom-scope/scoring.js +13 -3
  194. package/build/utils/pom-scope/selector-extractor.js +16 -3
  195. package/build/utils/pom-scope/strip.d.ts +8 -0
  196. package/build/utils/pom-scope/strip.js +238 -0
  197. package/build/utils/pom-scope/testIdDiscovery.js +14 -2
  198. package/build/utils/pom-verify/__fixtures__/af-style/asset-list.page.d.ts +1 -1
  199. package/build/utils/pom-verify/__fixtures__/af-style/asset-list.page.js +4 -2
  200. package/build/utils/pom-verify/__fixtures__/af-style/report.iframe.page.js +3 -1
  201. package/build/utils/pom-verify/__fixtures__/af-style/workflow-footer.page.js +3 -1
  202. package/build/utils/pom-verify/bindings.js +5 -1
  203. package/build/utils/pom-verify/calls.js +9 -2
  204. package/build/utils/pom-verify/verify.js +27 -5
  205. package/build/utils/pr-comment-parser.js +20 -7
  206. package/build/utils/proxy-terminal.d.ts +19 -1
  207. package/build/utils/proxy-terminal.js +346 -21
  208. package/build/utils/removedUiElements.js +1 -1
  209. package/build/utils/reportLanguage.js +35 -7
  210. package/build/utils/reportVerification.d.ts +14 -8
  211. package/build/utils/reportVerification.js +19 -19
  212. package/build/utils/repositorySlug.d.ts +32 -0
  213. package/build/utils/repositorySlug.js +77 -0
  214. package/build/utils/reuseRouting.js +6 -2
  215. package/build/utils/runSerialized.d.ts +3 -0
  216. package/build/utils/runSerialized.js +39 -0
  217. package/build/utils/screenRoutes.js +74 -18
  218. package/build/utils/sourceRouteExtractor.js +13 -6
  219. package/build/utils/telemetry.d.ts +1 -0
  220. package/build/utils/telemetry.js +8 -5
  221. package/build/utils/testDependencyPolicy.d.ts +9 -0
  222. package/build/utils/testDependencyPolicy.js +788 -0
  223. package/build/utils/testExecutionRecord.d.ts +90 -0
  224. package/build/utils/testExecutionRecord.js +267 -0
  225. package/build/utils/testFileClassification.js +3 -1
  226. package/build/utils/trace-parser.js +62 -14
  227. package/build/utils/urlPath.js +3 -1
  228. package/build/utils/utils-verify/action-key.d.ts +4 -0
  229. package/build/utils/utils-verify/action-key.js +2 -2
  230. package/build/utils/utils-verify/allow.d.ts +122 -3
  231. package/build/utils/utils-verify/allow.js +146 -21
  232. package/build/utils/utils-verify/body-reach.d.ts +120 -0
  233. package/build/utils/utils-verify/body-reach.js +335 -0
  234. package/build/utils/utils-verify/call-sites.d.ts +6 -1
  235. package/build/utils/utils-verify/call-sites.js +72 -8
  236. package/build/utils/utils-verify/delivered-imports.d.ts +43 -0
  237. package/build/utils/utils-verify/delivered-imports.js +84 -0
  238. package/build/utils/utils-verify/fixed-sleep.d.ts +96 -0
  239. package/build/utils/utils-verify/fixed-sleep.js +461 -0
  240. package/build/utils/utils-verify/in-house.d.ts +93 -0
  241. package/build/utils/utils-verify/in-house.js +719 -0
  242. package/build/utils/utils-verify/incumbent.d.ts +3 -0
  243. package/build/utils/utils-verify/incumbent.js +75 -0
  244. package/build/utils/utils-verify/index.d.ts +1 -0
  245. package/build/utils/utils-verify/index.js +1 -0
  246. package/build/utils/utils-verify/language-spec.d.ts +26 -10
  247. package/build/utils/utils-verify/language-spec.js +217 -20
  248. package/build/utils/utils-verify/locate.d.ts +26 -0
  249. package/build/utils/utils-verify/locate.js +125 -23
  250. package/build/utils/utils-verify/module-name.d.ts +40 -0
  251. package/build/utils/utils-verify/module-name.js +98 -0
  252. package/build/utils/utils-verify/parse.d.ts +46 -6
  253. package/build/utils/utils-verify/parse.js +176 -38
  254. package/build/utils/utils-verify/retrofit-equivalence.d.ts +5 -0
  255. package/build/utils/utils-verify/retrofit-equivalence.js +4 -2
  256. package/build/utils/utils-verify/stage.d.ts +5 -0
  257. package/build/utils/utils-verify/stage.js +47 -2
  258. package/build/utils/utils-verify/status-once.d.ts +62 -0
  259. package/build/utils/utils-verify/status-once.js +207 -0
  260. package/build/utils/utils-verify/typecheck.d.ts +61 -0
  261. package/build/utils/utils-verify/typecheck.js +338 -0
  262. package/build/utils/utils-verify/verify.d.ts +76 -1
  263. package/build/utils/utils-verify/verify.js +516 -44
  264. package/build/utils/versions.d.ts +3 -3
  265. package/build/utils/versions.js +1 -1
  266. package/build/utils/workspaceAuth.js +107 -37
  267. package/build/workspace/queryParamResolution.js +11 -4
  268. package/build/workspace/workspace.js +7 -7
  269. package/node_modules/playwright/ThirdPartyNotices.txt +19 -19
  270. package/node_modules/playwright/lib/mcp/skyramp/assertTool.js +8 -2
  271. package/node_modules/playwright/lib/mcp/skyramp/common/cssValue.js +87 -0
  272. package/node_modules/playwright/lib/mcp/skyramp/loadTraceTool.js +31 -0
  273. package/node_modules/playwright/lib/mcp/skyramp/skyRampImport.js +3 -0
  274. package/node_modules/playwright/lib/mcp/skyramp/traceRecordingBackend.js +181 -15
  275. package/node_modules/playwright/lib/mcp/test/skyRampExport.js +24 -0
  276. package/node_modules/playwright/lib/transform/babelBundleImpl.js +2353 -190
  277. package/node_modules/playwright/node_modules/playwright-core/ThirdPartyNotices.txt +62 -34
  278. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/.package-lock.json +72 -41
  279. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/dist/serve-static.js +1 -1
  280. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/dist/serve-static.mjs +1 -1
  281. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/package.json +2 -2
  282. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/README.md +16 -1
  283. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/index.js +4 -20
  284. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/read.js +17 -17
  285. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/json.js +60 -32
  286. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/raw.js +3 -3
  287. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/text.js +3 -3
  288. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/urlencoded.js +16 -20
  289. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/utils.js +18 -16
  290. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/LICENSE +22 -0
  291. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/README.md +71 -0
  292. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.d.ts +46 -0
  293. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.js +176 -0
  294. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.js.map +1 -0
  295. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/package.json +52 -0
  296. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/package.json +23 -10
  297. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/CHANGELOG.md +21 -14
  298. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/isObject.d.ts +1 -1
  299. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/package.json +6 -7
  300. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/tsconfig.json +1 -0
  301. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/index.js +266 -45
  302. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/lib/schemes.js +9 -4
  303. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/lib/utils.js +396 -92
  304. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/package.json +1 -1
  305. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/component-safe-serialization.test.js +163 -0
  306. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/equal.test.js +31 -3
  307. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/fixtures/uri-js-parse.json +2 -0
  308. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/ipv6-canonical.test.js +34 -0
  309. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/ipv6-validation.test.js +124 -0
  310. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/malformed-percent.test.js +77 -0
  311. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/malformed-urn.test.js +61 -0
  312. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/parse.test.js +7 -3
  313. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/query-fragment-normalization.test.js +33 -0
  314. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/reserved-path-normalization.test.js +109 -0
  315. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/scheme-validation.test.js +124 -0
  316. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/security-normalization.test.js +101 -0
  317. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/security.test.js +301 -3
  318. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/urn-full-input.test.js +29 -0
  319. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/websocket-query-preservation.test.js +24 -0
  320. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/CHANGELOG.md +7 -0
  321. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/index.d.ts +0 -1
  322. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/package.json +4 -5
  323. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/client/client.js +30 -16
  324. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/client/utils.js +4 -1
  325. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/context.js +32 -13
  326. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/accepts/accepts.js +36 -2
  327. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/proxy/index.js +4 -0
  328. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/ssg/ssg.js +1 -1
  329. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/ssg/utils.js +30 -10
  330. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/streaming/sse.js +5 -4
  331. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/hono-base.js +10 -8
  332. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/base.js +44 -23
  333. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/components.js +25 -26
  334. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/context.js +5 -5
  335. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/dom/render.js +2 -0
  336. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/dom/server.js +5 -1
  337. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/hooks/index.js +16 -13
  338. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +3 -3
  339. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/streaming.js +4 -5
  340. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/cache/index.js +103 -8
  341. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/compress/index.js +5 -0
  342. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/cors/index.js +17 -14
  343. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/csrf/index.js +1 -1
  344. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/etag/digest.js +47 -1
  345. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/etag/index.js +7 -4
  346. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +9 -4
  347. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +9 -4
  348. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/language/language.js +10 -6
  349. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/method-not-allowed/index.js +90 -0
  350. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +3 -1
  351. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/secure-headers/secure-headers.js +16 -7
  352. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/request.js +20 -13
  353. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/linear-router/router.js +7 -2
  354. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/pattern-router/router.js +3 -9
  355. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +65 -59
  356. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +71 -128
  357. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +14 -5
  358. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/trie-router/node.js +47 -70
  359. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/trie-router/router.js +3 -11
  360. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/utils.js +27 -0
  361. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router.js +1 -1
  362. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/accept.js +1 -1
  363. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/body.js +21 -3
  364. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/cookie.js +4 -3
  365. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/ipaddr.js +5 -3
  366. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/stream.js +12 -3
  367. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/url.js +19 -11
  368. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/client/client.js +30 -16
  369. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/client/utils.js +4 -1
  370. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/context.js +32 -13
  371. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/accepts/accepts.js +36 -2
  372. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/proxy/index.js +4 -0
  373. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/ssg/ssg.js +1 -1
  374. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/ssg/utils.js +30 -10
  375. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/streaming/sse.js +5 -4
  376. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/hono-base.js +10 -8
  377. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/base.js +41 -23
  378. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/components.js +26 -27
  379. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/context.js +6 -6
  380. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/dom/render.js +2 -0
  381. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/dom/server.js +5 -1
  382. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/hooks/index.js +16 -13
  383. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/intrinsic-element/components.js +4 -4
  384. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/streaming.js +5 -6
  385. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/cache/index.js +103 -8
  386. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/compress/index.js +5 -0
  387. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/cors/index.js +17 -14
  388. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/csrf/index.js +1 -1
  389. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/etag/digest.js +47 -1
  390. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/etag/index.js +7 -4
  391. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/jwk/jwk.js +9 -4
  392. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/jwt/jwt.js +9 -4
  393. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/language/language.js +10 -6
  394. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/method-not-allowed/index.js +68 -0
  395. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/pretty-json/index.js +3 -1
  396. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/secure-headers/secure-headers.js +16 -7
  397. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/request.js +21 -14
  398. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/linear-router/router.js +7 -2
  399. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/pattern-router/router.js +3 -9
  400. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/node.js +61 -58
  401. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/router.js +77 -129
  402. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/trie.js +14 -5
  403. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/trie-router/node.js +47 -70
  404. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/trie-router/router.js +3 -11
  405. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/utils.js +5 -0
  406. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router.js +1 -1
  407. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/adapter/aws-lambda/types.d.ts +9 -0
  408. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/client/types.d.ts +1 -1
  409. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/context.d.ts +6 -2
  410. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/hono-base.d.ts +4 -3
  411. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/base.d.ts +7 -2
  412. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/index.d.ts +5 -5
  413. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/intrinsic-element/components.d.ts +2 -2
  414. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/server.d.ts +5 -5
  415. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/hooks/index.d.ts +8 -6
  416. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/index.d.ts +5 -5
  417. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/cache/index.d.ts +6 -4
  418. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/combine/index.d.ts +1 -1
  419. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/cors/index.d.ts +1 -1
  420. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +2 -2
  421. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jwk/jwk.d.ts +2 -0
  422. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jwt/jwt.d.ts +2 -0
  423. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/method-not-allowed/index.d.ts +49 -0
  424. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/secure-headers/permissions-policy.d.ts +3 -3
  425. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +4 -1
  426. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +2 -1
  427. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/trie-router/node.d.ts +1 -2
  428. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/trie-router/router.d.ts +0 -1
  429. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/utils.d.ts +1 -0
  430. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router.d.ts +1 -1
  431. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/utils/headers.d.ts +2 -2
  432. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/utils/url.d.ts +5 -0
  433. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/accept.js +1 -1
  434. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/body.js +21 -3
  435. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/cookie.js +5 -4
  436. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/ipaddr.js +5 -3
  437. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/stream.js +12 -3
  438. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/url.js +17 -10
  439. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/package.json +11 -4
  440. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/README.md +173 -143
  441. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/address-error.d.ts +11 -0
  442. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/address-error.js.map +1 -1
  443. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.d.ts +49 -0
  444. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.js +79 -4
  445. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.js.map +1 -1
  446. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.d.ts +78 -5
  447. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.js +119 -24
  448. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.js.map +1 -1
  449. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.d.ts +151 -10
  450. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.js +316 -90
  451. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.js.map +1 -1
  452. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.d.ts +12 -0
  453. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.js +45 -2
  454. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.js.map +1 -1
  455. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.d.ts +14 -0
  456. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.js +50 -3
  457. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.js.map +1 -1
  458. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/package.json +6 -4
  459. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/.github/THREAT_MODEL.md +3 -3
  460. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/CHANGELOG.md +26 -0
  461. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/README.md +19 -1
  462. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/dist/qs.js +25 -25
  463. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/eslint.config.mjs +1 -1
  464. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/parse.js +16 -6
  465. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/stringify.js +23 -8
  466. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/utils.js +57 -11
  467. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/package.json +8 -7
  468. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/parse.js +419 -0
  469. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/stringify.js +317 -0
  470. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/utils.js +206 -0
  471. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/CHANGELOG.md +10 -0
  472. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/README.md +1 -1
  473. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/index.js +5 -2
  474. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/package.json +10 -10
  475. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/test/index.js +16 -0
  476. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/index.js +8 -18
  477. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/LICENSE +22 -0
  478. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/README.md +71 -0
  479. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.d.ts +46 -0
  480. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.js +176 -0
  481. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.js.map +1 -0
  482. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/package.json +52 -0
  483. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/package.json +9 -5
  484. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/package-lock.json +72 -41
  485. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/.package-lock.json +6 -6
  486. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/README.md +23 -1
  487. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/index.js +265 -86
  488. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/package.json +1 -1
  489. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/README.md +173 -143
  490. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/address-error.d.ts +11 -0
  491. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/address-error.js.map +1 -1
  492. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.d.ts +49 -0
  493. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.js +79 -4
  494. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.js.map +1 -1
  495. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.d.ts +78 -5
  496. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.js +119 -24
  497. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.js.map +1 -1
  498. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.d.ts +151 -10
  499. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.js +316 -90
  500. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.js.map +1 -1
  501. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.d.ts +12 -0
  502. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.js +45 -2
  503. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.js.map +1 -1
  504. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.d.ts +14 -0
  505. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.js +50 -3
  506. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.js.map +1 -1
  507. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/package.json +6 -4
  508. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/package-lock.json +6 -6
  509. package/node_modules/playwright/node_modules/playwright-core/lib/cli/program.js +18 -9
  510. package/node_modules/playwright/node_modules/playwright-core/lib/mcpBundleImpl/index.js +47 -47
  511. package/node_modules/playwright/node_modules/playwright-core/lib/server/codegen/skyramp/jsonlReader.js +3 -0
  512. package/node_modules/playwright/node_modules/playwright-core/lib/server/recorder/recorderRunner.js +42 -0
  513. package/node_modules/playwright/node_modules/playwright-core/lib/utilsBundleImpl/index.js +121 -121
  514. package/node_modules/playwright/node_modules/playwright-core/lib/vite/traceViewer/{index.B7KbSQcC.js → index.BAkLd5DX.js} +1 -1
  515. package/node_modules/playwright/node_modules/playwright-core/lib/vite/traceViewer/index.html +1 -1
  516. package/node_modules/playwright/node_modules/playwright-core/package.json +1 -1
  517. package/node_modules/playwright/node_modules/playwright-core/src/cli/program.ts +31 -9
  518. package/node_modules/playwright/node_modules/playwright-core/src/server/codegen/skyramp/jsonlReader.ts +1 -0
  519. package/node_modules/playwright/node_modules/playwright-core/src/server/recorder/recorderRunner.ts +57 -1
  520. package/node_modules/playwright/package.json +2 -2
  521. package/package.json +7 -6
  522. package/plugin/prompts/code-reuse/hand-off.md +30 -0
  523. package/plugin/prompts/generate-tests/generation.md +1 -1
  524. package/plugin/prompts/plan-tests.md +14 -14
  525. package/plugin/prompts/testbot-task1.md +4 -2
  526. package/plugin/skills/enhance-assertions/SKILL.md +25 -0
  527. package/plugin/skills/enhance-assertions/reference/contract.md +51 -0
  528. package/plugin/skills/enhance-assertions/reference/integration.md +58 -0
  529. package/plugin/skills/enhance-assertions/reference/shared-rules.md +220 -0
  530. package/plugin/skills/enhance-assertions/reference/ui.md +373 -0
  531. package/plugin/skills/fix-test-import-errors/SKILL.md +44 -50
  532. package/plugin/skills/validate-assertion-alignment-post-execution/SKILL.md +32 -0
  533. package/plugin/skills/validate-assertion-alignment-post-execution/reference/checks.md +44 -0
  534. package/plugin/skills/validate-assertion-alignment-post-execution/reference/evidence.md +47 -0
  535. package/build/prompts/enhance-assertions/contractProviderAssertionsPrompt.d.ts +0 -2
  536. package/build/prompts/enhance-assertions/contractProviderAssertionsPrompt.js +0 -29
  537. package/build/prompts/enhance-assertions/integrationAssertionsPrompt.d.ts +0 -2
  538. package/build/prompts/enhance-assertions/integrationAssertionsPrompt.js +0 -36
  539. package/build/prompts/enhance-assertions/sharedAssertionRules.d.ts +0 -16
  540. package/build/prompts/enhance-assertions/sharedAssertionRules.js +0 -284
  541. package/build/prompts/enhance-assertions/uiAssertionsPrompt.d.ts +0 -2
  542. package/build/prompts/enhance-assertions/uiAssertionsPrompt.js +0 -388
  543. package/node_modules/playwright/node_modules/playwright-core/.DS_Store +0 -0
@@ -79,7 +79,7 @@ export type RepoCheckoutRef = RepoCheckout;
79
79
  export declare function findAssertionRecordByFileName(outcomes: Record<string, AssertionRecord>, row: {
80
80
  fileName: string;
81
81
  testType?: string;
82
- repository?: 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
+ }
@@ -31,11 +31,33 @@ const codeReuseSchema = z.object({
31
31
  verify: z
32
32
  .boolean()
33
33
  .default(false)
34
- .describe("Verify a previously refactored test instead of returning the reuse prompt. POM path (browser tests): checks the test's POM calls against source; requires the discovery pass — this tool called for the same testFile without `verify` — to have run first. SkyrampUtils path (every other test type): stages the shared utils file for the output commit, checks its invariants, and — when skyramp_modularization recorded a baseline for this spec — compares the delivered assertion count and page.on('pageerror') guard against that hand-out, rejecting a net loss (API helpers: one helper per method+path, status-code-only assertions, method+resource names; browser helpers: actions and structural waits only, intent names, one helper per action sequence; every family: one name is defined once per module, with one parameter count across modules). Call it after the reuse edits are written; skyramp_enhance_assertions and skyramp_execute_test refuse until it has passed."),
34
+ .describe("Verify a previously refactored test instead of returning the reuse prompt. POM path (browser tests): checks the test's POM calls against source; requires the discovery pass — this tool called for the same testFile without `verify` — to have run first. SkyrampUtils path (every other test type): stages the shared utils file for the output commit, checks its invariants, and — when skyramp_modularization recorded a baseline for this spec — compares the delivered assertion count and page.on('pageerror') guard against that hand-out, rejecting a net loss (API helpers: one helper per method+path, status-code-only assertions, method+resource names; browser helpers: actions and structural waits only, intent names, one helper per action sequence; every family: one name is defined once per module, with one parameter count across modules). For a UI test it also checks the repository's own helper modules the test imports: each imported name resolves with an argument count the signature accepts, and every change this run made to such a module adds a helper or a defaulted parameter. Call it after the reuse edits are written; skyramp_enhance_assertions and skyramp_execute_test refuse until it has passed."),
35
35
  testType: z
36
36
  .nativeEnum(TestType)
37
37
  .optional()
38
38
  .describe("The type of the test being refactored (shared TestType vocabulary). The tool routes on it server-side: browser types (ui, e2e) may take the POM path; every other type takes the SkyrampUtils path. Omit when unknown."),
39
+ inHouse: z
40
+ .object({
41
+ filesRead: z
42
+ .array(z.string())
43
+ .describe("Every file the search for the repository's own browser helper modules READ, repository-relative. All of them, not only the ones that qualified."),
44
+ declined: z
45
+ .array(z.object({
46
+ file: z
47
+ .string()
48
+ .describe("Repository-relative path of the module."),
49
+ helper: z
50
+ .string()
51
+ .describe("The helper's name as the module defines it."),
52
+ reason: z
53
+ .string()
54
+ .describe("Why it was not called: the locator is not a plain string (variable, template literal, regex) so its action key is undefined; the module is not written for Playwright; no step matched it; …"),
55
+ }))
56
+ .default([])
57
+ .describe("Helpers the search read and did not call, one entry each, with the reason."),
58
+ })
59
+ .optional()
60
+ .describe("Verify mode, UI tests only (the SkyrampUtils path with page-object reuse off): what the search for the repository's own browser helper modules read and declined. These are DECLARATIONS — the report records them as what the run states it read, labelled as such, not as a measurement. Pass them on the `verify: true` call once the reuse edits are written."),
39
61
  });
40
62
  const TOOL_NAME = "skyramp_reuse_code";
41
63
  /**
@@ -144,14 +166,16 @@ async function runUtilsVerify(params) {
144
166
  // whatever the file's invariants say.
145
167
  if (staging.failed.length > 0)
146
168
  r.ok = false;
147
- const recorded = await recordUtilsVerifyOutcome(params.testFile, r, params.language, params.framework, params.testType);
169
+ const recorded = await recordUtilsVerifyOutcome(params.testFile, r, params.language, params.framework, params.testType, undefined, params.inHouse);
148
170
  return {
149
171
  content: [
150
172
  {
151
173
  type: "text",
152
174
  text: formatUtilsVerifyText(r, {
153
175
  staged: staging.staged,
154
- unstaged: staging.failed,
176
+ // A refused in-house module is the customer's file, not ours to move.
177
+ unstaged: staging.failed.filter((f) => !staging.inHouse.includes(f)),
178
+ unstagedInHouse: staging.failed.filter((f) => staging.inHouse.includes(f)),
155
179
  recorded,
156
180
  }),
157
181
  },
@@ -1,42 +1,12 @@
1
1
  import { z } from "zod";
2
- import { pendingReuseDebt } from "./reuse-state.js";
3
- import { baselineFrom, readAssertionRecord, recordAssertionBaseline, recordAssertionVerdict, trustedRecord, } from "./assertion-state.js";
4
- import { formatAssertionVerifyReport, verifyAssertionEnhancement, } from "../../utils/assertion-verify/index.js";
5
- import { stageAndRecordRetrofits } from "./retrofit-state.js";
6
- import * as path from "path";
7
2
  import { toolError } from "../../utils/utils.js";
8
- import { ASSERTION_ENHANCEABLE_TEST_TYPES, TestType, } from "../../types/TestTypes.js";
3
+ import { ASSERTION_ENHANCEABLE_TEST_TYPES } from "../../types/TestTypes.js";
9
4
  import { AnalyticsService } from "../../services/AnalyticsService.js";
10
- import { getContractProviderAssertionsPrompt } from "../../prompts/enhance-assertions/contractProviderAssertionsPrompt.js";
11
- import { getIntegrationAssertionsPrompt } from "../../prompts/enhance-assertions/integrationAssertionsPrompt.js";
12
- import { getUIAssertionsPrompt } from "../../prompts/enhance-assertions/uiAssertionsPrompt.js";
13
- import { isTestbotEnabled } from "../../utils/featureFlags.js";
14
- import { renderSharedAssertionRules } from "../../prompts/enhance-assertions/sharedAssertionRules.js";
15
- import { stageGeneratedPaths } from "../../utils/gitStaging.js";
5
+ import { buildEnhanceAssertionsInstructions, sharedAssertionRules, } from "../../skills/enhanceAssertionsSkill.js";
6
+ import { prepareAssertionCall, snapshotAssertionBaseline, verifyAssertionCall, } from "./assertionOperations.js";
16
7
  const TOOL_NAME = "skyramp_enhance_assertions";
17
- const TESTBOT_UI_CHECKS = `
18
- ### Additional Testbot-Specific Checks
19
- - If no suitable selector exists in the generated file for an assertion you need to add, go back and call \`browser_assert\` on the live page to record it with a valid selector, then re-export and regenerate. Do not re-record an assertion that is expected to fail today; add it here with the blueprint's selector.
20
- - **After executing a UI test that documents a bug from \`issuesFound\`**: if it passed when you expected it to fail, the assertions are too weak — add a stronger \`expect()\` that directly targets the buggy behavior. This counts as the single allowed retry under the 2-attempt cap — do NOT re-run more than once.
21
- `;
22
- function buildAssertionInstructions(testFile, testType, enhanceType) {
23
- if (testType === TestType.UI) {
24
- let instructions = getUIAssertionsPrompt(testFile, enhanceType);
25
- if (isTestbotEnabled()) {
26
- instructions += TESTBOT_UI_CHECKS;
27
- }
28
- return instructions;
29
- }
30
- if (testType === TestType.CONTRACT) {
31
- return getContractProviderAssertionsPrompt(testFile, enhanceType);
32
- }
33
- if (testType === TestType.INTEGRATION) {
34
- return getIntegrationAssertionsPrompt(testFile, enhanceType);
35
- }
36
- throw new Error(`Unsupported testType for ${TOOL_NAME}: ${testType}`);
37
- }
38
8
  function buildAutoApplyInstructions(testFile, testType, enhanceType) {
39
- const typeSpecificInstructions = buildAssertionInstructions(testFile, testType, enhanceType);
9
+ const typeSpecificInstructions = buildEnhanceAssertionsInstructions(testFile, testType, enhanceType);
40
10
  return [
41
11
  `Enhance response body assertions in: \`${testFile}\``,
42
12
  `Test type: ${testType} | Context: ${enhanceType}`,
@@ -44,7 +14,7 @@ function buildAutoApplyInstructions(testFile, testType, enhanceType) {
44
14
  `Read the file, apply the type-specific assertion guidance below, and write the file back directly.`,
45
15
  `Add assertions after each send_request/sendRequest status-code assertion.`,
46
16
  `Use SDK helper: Python \`skyramp.get_response_value(response, "json.path")\`, JS \`getValue(response, "json.path")\`.`,
47
- `Do NOT restructure, reformat, or add comments. You may add an import when a new assertion needs a helper — from \`@skyramp/skyramp\` or from the test's own helper module. Only add assertion lines.`,
17
+ `Do NOT restructure, reformat, add comments, or change imports. Only add assertion lines.`,
48
18
  ``,
49
19
  `Type-specific assertion guidance:`,
50
20
  typeSpecificInstructions,
@@ -91,63 +61,29 @@ export function registerEnhanceAssertionsTool(server) {
91
61
  - Optionally with \`verify: true\` for early feedback — the same deterministic checks run automatically inside skyramp_execute_test, which returns per-violation feedback instead of executing until they pass.`,
92
62
  inputSchema: enhanceAssertionsSchema,
93
63
  }, async (params) => {
94
- const { testFile, testType, enhanceType, autoApply, verify, stateFile } = params;
95
- // Everything downstream keys state by this path; a relative spelling
96
- // would fork records and fail gates open (review finding on SKYR-4262).
97
- if (!path.isAbsolute(testFile)) {
98
- return toolError(`testFile must be an absolute path, got: ${testFile}`);
99
- }
100
- // SKYR-4115: the reuse tool hands out POM mapping instructions and then relies on
101
- // the agent to come back with `verify: true` — the call that runs the zero-reuse
102
- // gate. This is the first tool called after it on the same spec, so it is where a
103
- // skipped verify is caught cheapest. Enforcing the call (not the outcome) keeps
104
- // the policy in the reuse phase where it belongs.
105
- // SKYR-4220: stage the shared utils file this spec wrote or imports BEFORE the
106
- // debt check, unconditionally — so the file reaches the output commit even on a
107
- // path where the agent never calls verify. Located by header, not by name.
108
- await stageAndRecordRetrofits(testFile);
109
- const owed = await pendingReuseDebt(testFile, stateFile, testType, {
110
- chain: false,
111
- });
112
- if (owed)
113
- return toolError(owed);
114
- // Stage so testbot includes the generated files in its output commit.
115
- await stageGeneratedPaths(testFile);
64
+ // stateFile is threaded through `params` into the shared helpers.
65
+ const { testFile, testType, enhanceType, autoApply, verify } = params;
66
+ // Path check, retrofit staging and the reuse-debt gate are shared with
67
+ // the single-purpose tools the skill drives (SKYR-4310).
68
+ const refusal = await prepareAssertionCall(params);
69
+ if (refusal)
70
+ return toolError(refusal);
116
71
  // Verify pass: deterministically check the hand-out instructions were applied
117
72
  // (hash delta, no removed coverage, rubric lints, strength increase) and give
118
73
  // per-violation feedback. isError on FAILED forces the fix-and-retry loop.
119
74
  if (verify) {
120
75
  try {
121
- const record = await readAssertionRecord(testFile, stateFile);
122
- // Discriminators come from the persisted record when it matches this
123
- // canonical path — params are agent-supplied, and flipping enhanceType
124
- // to "maintenance" would disarm the strength gate and structural lints
125
- // for a permanent PASS. Canonical comparison closes the alias bypass
126
- // (dir//x.spec.ts). Falls back to params only when stateless.
127
- const trusted = trustedRecord(record, testFile);
128
- const result = await verifyAssertionEnhancement({
129
- testFile,
130
- testType: trusted?.testType ?? testType,
131
- enhanceType: (trusted?.enhanceType ??
132
- enhanceType),
133
- baseline: baselineFrom(record, testFile),
134
- });
135
- await recordAssertionVerdict(testFile, result, stateFile);
76
+ const { ok, report } = await verifyAssertionCall(params);
136
77
  AnalyticsService.pushMCPToolEvent(TOOL_NAME, undefined, {
137
78
  testFile,
138
79
  testType,
139
80
  enhanceType,
140
81
  verify: true,
141
- verifyPassed: result.ok,
82
+ verifyPassed: ok,
142
83
  }).catch(() => { });
143
84
  return {
144
- content: [
145
- {
146
- type: "text",
147
- text: formatAssertionVerifyReport(result, testFile),
148
- },
149
- ],
150
- isError: !result.ok,
85
+ content: [{ type: "text", text: report }],
86
+ isError: !ok,
151
87
  };
152
88
  }
153
89
  catch (err) {
@@ -157,7 +93,7 @@ export function registerEnhanceAssertionsTool(server) {
157
93
  }
158
94
  // Hand-out: snapshot the file as generated so the verify pass has a baseline
159
95
  // to measure against. Best-effort — no run state means stateless verify later.
160
- await recordAssertionBaseline(testFile, testType, enhanceType, stateFile);
96
+ await snapshotAssertionBaseline(params);
161
97
  if (autoApply) {
162
98
  const compactInstructions = [
163
99
  `Enhance response body assertions in: \`${testFile}\``,
@@ -167,7 +103,7 @@ export function registerEnhanceAssertionsTool(server) {
167
103
  `Use SDK helper: Python \`skyramp.get_response_value(response, "json.path")\`, JS \`getValue(response, "json.path")\`.`,
168
104
  ``,
169
105
  `Shared assertion rules (apply all that fit):`,
170
- renderSharedAssertionRules(),
106
+ sharedAssertionRules(),
171
107
  ``,
172
108
  `Do NOT restructure, reformat, or add comments. You may add an import when a new assertion needs a helper — from \`@skyramp/skyramp\` or from the test's own helper module. Only add assertion lines.`,
173
109
  ].join("\n");
@@ -186,7 +122,7 @@ export function registerEnhanceAssertionsTool(server) {
186
122
  const enhanceCtx = enhanceType;
187
123
  const instructions = autoApply
188
124
  ? buildAutoApplyInstructions(testFile, testType, enhanceCtx)
189
- : buildAssertionInstructions(testFile, testType, enhanceCtx);
125
+ : buildEnhanceAssertionsInstructions(testFile, testType, enhanceCtx);
190
126
  const result = {
191
127
  content: [
192
128
  {
@@ -0,0 +1,51 @@
1
+ import { type UtilsLanguageSpec } from "../../utils/utils-verify/index.js";
2
+ /**
3
+ * Remove every comment addressed to a Skyramp gate from a delivered file.
4
+ *
5
+ * Two gates ask the agent to write a decline into the file it delivers — the utils
6
+ * verifier's `reuse-verify: allow <kind> <helper> — <reason>` and the POM gate's
7
+ * `// kept inline: <basename> — <reason>`. Both are how the agent tells a gate it has
8
+ * read a finding and chosen not to act, and neither says anything to the customer who
9
+ * ends up owning the file. A marker also records the state of the file at one moment,
10
+ * and nothing re-reads it when the file changes afterwards, so a delivered file can
11
+ * carry a claim its own code contradicts.
12
+ *
13
+ * A marker OWNS ITS LINE. Both gates instruct exactly that, and both parsers now
14
+ * accept only that, so removal is the deletion of a line. That one constraint is what
15
+ * keeps this safe: a line whose first characters are the comment prefix cannot be a
16
+ * regex literal, cannot carry code, cannot share a comment with the customer's prose,
17
+ * and cannot hold the `*\/` that terminates a block. Every one of those was a way an
18
+ * earlier version of this function delivered a file that did not compile.
19
+ *
20
+ * Strings are blanked first, so a marker quoted in code — or inside a Python docstring
21
+ * — is not a marker. Removal follows the WELL-FORMED grammars, not the loose patterns
22
+ * the gates use to spot a malformed marker: `// kept inline: this loop is kept inline
23
+ * for performance` is English. Neither grammar is re-spelled here; each pattern comes
24
+ * from the module that declares it.
25
+ */
26
+ export interface GateMarkerStrip {
27
+ content: string;
28
+ /** The markers removed, each the line it was. */
29
+ removed: string[];
30
+ /** Text that announces a marker but does not own its line. Left in place — the
31
+ * verify pass reports it as malformed, so it should not reach delivery. */
32
+ unremovable: string[];
33
+ }
34
+ export declare function stripGateMarkers(content: string, spec: UtilsLanguageSpec): GateMarkerStrip;
35
+ /**
36
+ * Whether the only change between two versions of a file is the deletion of whole
37
+ * comment lines.
38
+ *
39
+ * Computed WITHOUT reference to how the strip works, and that is the point. Every
40
+ * defect this function has had was a case nobody had thought of — a regex literal, a
41
+ * line carrying a block terminator, a comment shared with the customer's prose, a
42
+ * directive before a trailing marker. Each was found by a reader. This check does not
43
+ * need the case to be foreseen: it states the only edit the strip is permitted to
44
+ * make, and the caller restores the original bytes when something else happened.
45
+ *
46
+ * Two conditions, together: every line of `after` appears in `before` in the same
47
+ * order, and every line of `before` that `after` drops opens with the comment prefix.
48
+ * A line that was EDITED therefore fails the first, and a line of code that was
49
+ * deleted fails the second.
50
+ */
51
+ export declare function onlyCommentLinesRemoved(before: string, after: string, prefix: "//" | "#"): boolean;
@@ -0,0 +1,95 @@
1
+ import { blankStrings } from "../../utils/utils-verify/parse.js";
2
+ import { ALLOW_LOOSE_RE, ALLOW_START_RE, MARKER_SHAPE_RE, lineCommentOpeners, markerOnOwnLine, } from "../../utils/utils-verify/index.js";
3
+ import { KEPT_INLINE_LOOSE_RE } from "./reuse-outcome.js";
4
+ export function stripGateMarkers(content, spec) {
5
+ const removed = [];
6
+ const unremovable = [];
7
+ const rawLines = content.split("\n");
8
+ const codeLines = blankStrings(content, spec).split("\n");
9
+ const kept = [];
10
+ // Where a comment actually OPENS. A `//` on its own line inside `/* … *\/` opens
11
+ // nothing: the block does, and deleting that line can take the block's terminator
12
+ // with it. One statement of this, shared with the marker parser — when each had its
13
+ // own, the parser read a decline the strip then refused to remove.
14
+ const opensHere = lineCommentOpeners(content, spec.commentPrefix);
15
+ for (let n = 0; n < rawLines.length; n++) {
16
+ const raw = rawLines[n];
17
+ const code = codeLines[n] ?? "";
18
+ if (!ALLOW_LOOSE_RE.test(code) && !KEPT_INLINE_LOOSE_RE.test(code)) {
19
+ kept.push(raw);
20
+ continue;
21
+ }
22
+ const marker = opensHere && !opensHere.has(n)
23
+ ? undefined
24
+ : markerOnOwnLine(raw, code, spec.commentPrefix);
25
+ const body = marker === undefined
26
+ ? undefined
27
+ : marker.replace(spec.commentPrefix, "").trimStart();
28
+ // The SHAPE guard is for the ambiguous grammar only. `// kept inline: this loop is
29
+ // kept inline for performance` is English a customer may write, so removing it
30
+ // needs the separator and reason that make it a marker. `reuse-verify: allow` is
31
+ // nobody's prose: an own-line comment opening with it is gate-addressed whatever
32
+ // follows, and requiring the full shape left a MALFORMED one in the file — which
33
+ // ships once the verifier's bounded refusals run out.
34
+ const removable = body !== undefined &&
35
+ (ALLOW_START_RE.test(body) || MARKER_SHAPE_RE.test(body));
36
+ if (!removable) {
37
+ unremovable.push(raw.trim());
38
+ kept.push(raw);
39
+ continue;
40
+ }
41
+ // Removal follows the marker's SHAPE, not the grammar the gates can read. An
42
+ // own-line comment is safe to delete, and the verify pass lets some of these
43
+ // through: a marker naming an advisory kind is inert by design, so verification
44
+ // passes and the comment reached the customer. Only what the caller CARRIES has
45
+ // to parse — it re-reads `removed` with the well-formed grammars for that.
46
+ removed.push(marker);
47
+ }
48
+ return { content: kept.join("\n"), removed, unremovable };
49
+ }
50
+ /**
51
+ * Whether the only change between two versions of a file is the deletion of whole
52
+ * comment lines.
53
+ *
54
+ * Computed WITHOUT reference to how the strip works, and that is the point. Every
55
+ * defect this function has had was a case nobody had thought of — a regex literal, a
56
+ * line carrying a block terminator, a comment shared with the customer's prose, a
57
+ * directive before a trailing marker. Each was found by a reader. This check does not
58
+ * need the case to be foreseen: it states the only edit the strip is permitted to
59
+ * make, and the caller restores the original bytes when something else happened.
60
+ *
61
+ * Two conditions, together: every line of `after` appears in `before` in the same
62
+ * order, and every line of `before` that `after` drops opens with the comment prefix.
63
+ * A line that was EDITED therefore fails the first, and a line of code that was
64
+ * deleted fails the second.
65
+ */
66
+ export function onlyCommentLinesRemoved(before, after, prefix) {
67
+ const from = before.split("\n");
68
+ const to = after.split("\n");
69
+ // A line that CLOSES a block comment cannot be deleted without changing what that
70
+ // comment covers, whatever else the line looks like. Checked textually, so this
71
+ // holds even when the lexer and the strip agree with each other and are both wrong
72
+ // — which is what a `//` inside a block made them do.
73
+ //
74
+ // Only `*\/` is tested. A `/*` inside the reason of a genuine line comment is inert
75
+ // text, and deleting a line cannot open a block that was not already open; treating
76
+ // it as active made the strip abandon the write, so a marker whose reason discussed
77
+ // a selector shipped to the customer — the one outcome this pass exists to prevent.
78
+ const isComment = (line) => line.trimStart().startsWith(prefix) &&
79
+ !(prefix === "//" && line.includes("*/"));
80
+ let i = 0;
81
+ for (const line of to) {
82
+ while (i < from.length && from[i] !== line) {
83
+ if (!isComment(from[i]))
84
+ return false;
85
+ i++;
86
+ }
87
+ if (i >= from.length)
88
+ return false;
89
+ i++;
90
+ }
91
+ for (; i < from.length; i++)
92
+ if (!isComment(from[i]))
93
+ return false;
94
+ return true;
95
+ }
@@ -27,7 +27,9 @@ export interface RetrofitView {
27
27
  /** Absolute path. */
28
28
  file: string;
29
29
  utilsFile: string;
30
- /** The spec whose reuse pass caused the edit (absolute). */
30
+ /** The spec whose reuse pass caused the edit (absolute) — the row the retrofit is
31
+ * reported on. Equals `file` when the causing spec cannot be established: see
32
+ * `uncrossAttributions`. */
31
33
  testFile: string;
32
34
  /** Status of an execution that ran the CURRENT bytes (executedAt ≥ the file's
33
35
  * mtime), if any. */