@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
@@ -111,13 +111,14 @@ Fallback service routing inputs from the one-click invocation:
111
111
  Three rules apply in fallback mode at all times:
112
112
  1. **No hand-written tests or mocks**: do NOT use Write, Edit, or any file-writing tool to create test or mock files manually. ALL test and mock files MUST be produced by Skyramp MCP generation tools (\`skyramp_batch_scenario_test_generation\`, \`skyramp_integration_test_generation\`, \`skyramp_generate_enriched_integration_test\`, \`skyramp_contract_test_generation\`, \`skyramp_mock_generation\`, \`skyramp_batch_mock_generation\`). If a generation tool fails, fix the inputs and retry — do not fall back to writing tests by hand.
113
113
  2. **Mock scope**: if the user said "mock all downstream services", "mock all", "mock everything", or "mock all except X", treat all discovered downstream dependencies as selected for mocking (same as passing \`servicesToMock: "all"\`). Do not silently default to the third-party-only policy when the user expressed broad mock intent.
114
- 3. **No pytest fallback**: if \`skyramp_execute_test\` becomes unavailable at any point (tool not found, MCP disconnected, context compaction), stop immediately and ask the user to reconnect the Skyramp MCP server. Do not fall back to \`pytest\`, \`python3\`, or any direct runtime — doing so bypasses mock deployment and produces results that cannot be trusted as Skyramp-validated.
114
+ 3. **Prefer skyramp_execute_test**: run tests through \`skyramp_execute_test\` rather than the repository's test runner directly: the server records the run, and a run it did not record cannot appear in the report.
115
115
 
116
116
  ---
117
117
 
118
118
  `;
119
119
  const ctx = {
120
120
  repositoryPath: "<REPOSITORY_PATH>",
121
+ repository: "<OWNER/REPO of the checkout, from its origin remote>",
121
122
  baseCommit: "<BASE_BRANCH from one-click baseBranch, default main>",
122
123
  maxRecommendations: 8,
123
124
  maxGenerate: 5,
@@ -1,3 +1,4 @@
1
+ import { RUN_TEST_COMMAND_RULES } from "../skills/runTestSkill.js";
1
2
  /**
2
3
  * Predefined One-Click Command: Recommend tests and generate and execute top recommended tests
3
4
  *
@@ -65,13 +66,24 @@ const fullRepoRecommendGenerateExecuteSteps = [
65
66
  toolName: "skyramp_execute_test",
66
67
  description: "Execute each generated test; resolve token before calling. For each generated test file path returned directly by the generation tools in step 2, invoke this tool with testFile set to that path.",
67
68
  inputs: {
68
- workspacePath: { source: "user", paramKey: "repositoryPath" },
69
+ commandOverride: {
70
+ source: "literal",
71
+ value: `the shell command that runs this one test file with the repository's own test runner (${RUN_TEST_COMMAND_RULES})`,
72
+ },
73
+ cwd: { source: "user", paramKey: "repositoryPath" },
69
74
  language: { source: "literal", value: "from workspace" },
70
- testType: { source: "literal", value: "from test file / recommendation" },
75
+ testType: {
76
+ source: "literal",
77
+ value: "from test file / recommendation",
78
+ },
71
79
  testFile: {
72
80
  source: "literal",
73
81
  value: "path to a single generated test file; for each test path returned by generation tools in step 2, call skyramp_execute_test separately with testFile set to that path",
74
82
  },
83
+ repository: {
84
+ source: "literal",
85
+ value: "owner/repo of the checkout, from its origin remote",
86
+ },
75
87
  token: { source: "user", paramKey: "token" },
76
88
  },
77
89
  },
@@ -110,10 +122,6 @@ export const FULLREPO_RECOMMEND_GENERATE_EXECUTE_TESTS_COMMAND = {
110
122
  steps: fullRepoRecommendGenerateExecuteSteps,
111
123
  inputParams: {
112
124
  required: ["repositoryPath"],
113
- optional: [
114
- "token",
115
- "endpointURL",
116
- "apiSchema",
117
- ],
125
+ optional: ["token", "endpointURL", "apiSchema"],
118
126
  },
119
127
  };
@@ -1,3 +1,4 @@
1
+ import { RUN_TEST_COMMAND_RULES } from "../skills/runTestSkill.js";
1
2
  /**
2
3
  * Predefined One-Click Command: Test this endpoint
3
4
  *
@@ -73,13 +74,24 @@ const comprehensivelyTestGivenEndpointSteps = [
73
74
  toolName: "skyramp_execute_test",
74
75
  description: "Execute each generated test; resolve token before calling. For each generated test file path returned directly by the generation tools in step 3, invoke this tool with testFile set to that path.",
75
76
  inputs: {
76
- workspacePath: { source: "user", paramKey: "repositoryPath" },
77
+ commandOverride: {
78
+ source: "literal",
79
+ value: `the shell command that runs this one test file with the repository's own test runner (${RUN_TEST_COMMAND_RULES})`,
80
+ },
81
+ cwd: { source: "user", paramKey: "repositoryPath" },
77
82
  language: { source: "literal", value: "from workspace" },
78
- testType: { source: "literal", value: "from generated test / recommendation" },
83
+ testType: {
84
+ source: "literal",
85
+ value: "from generated test / recommendation",
86
+ },
79
87
  testFile: {
80
88
  source: "literal",
81
89
  value: "path to a single generated test file; for each test path returned by generation tools in step 3, call skyramp_execute_test separately with testFile set to that path",
82
90
  },
91
+ repository: {
92
+ source: "literal",
93
+ value: "owner/repo of the checkout, from its origin remote",
94
+ },
83
95
  token: { source: "user", paramKey: "token" },
84
96
  },
85
97
  },
@@ -107,10 +119,27 @@ const comprehensivelyTestGivenEndpointSteps = [
107
119
  toolName: "skyramp_execute_test",
108
120
  description: "Optionally run existing tests individually; iterate over tests from stateFile and write results back",
109
121
  inputs: {
110
- workspacePath: { source: "user", paramKey: "repositoryPath" },
111
- testFile: { source: "literal", value: "path from stateFile existingTests array" },
112
- language: { source: "literal", value: "language from stateFile existingTests array" },
113
- testType: { source: "literal", value: "testType from stateFile existingTests array" },
122
+ commandOverride: {
123
+ source: "literal",
124
+ value: `the shell command that runs this one test file with the repository's own test runner (${RUN_TEST_COMMAND_RULES})`,
125
+ },
126
+ cwd: { source: "user", paramKey: "repositoryPath" },
127
+ testFile: {
128
+ source: "literal",
129
+ value: "path from stateFile existingTests array",
130
+ },
131
+ language: {
132
+ source: "literal",
133
+ value: "language from stateFile existingTests array",
134
+ },
135
+ testType: {
136
+ source: "literal",
137
+ value: "testType from stateFile existingTests array",
138
+ },
139
+ repository: {
140
+ source: "literal",
141
+ value: "owner/repo of the checkout, from its origin remote",
142
+ },
114
143
  token: { source: "user", paramKey: "token" },
115
144
  stateFile: { source: "step", stepIndex: 1, outputKey: "stateFile" },
116
145
  },
@@ -0,0 +1,56 @@
1
+ /** Playwright's `--browser` names the implicit project itself, so the wrapper must not
2
+ * declare one: it refuses the flag when the config defines projects. */
3
+ export declare function commandPassesBrowserFlag(command: string): boolean;
4
+ /** The nearest Playwright config at or above the test file, up to the git root of `cwd`. */
5
+ export declare function findRepoPlaywrightConfig(testFile: string, cwd: string): string | undefined;
6
+ /**
7
+ * A config that imports the repo's own and overlays only:
8
+ * - `video: "on"`, top level and per project — Playwright has no `--video` flag, and a
9
+ * project's `use` overrides the top level.
10
+ * - a per-run `outputDir`, so two runs in one checkout keep their videos apart.
11
+ * - `reuseExistingServer: true` on every `webServer` — the app is already running, and
12
+ * `!process.env.CI` would refuse its port.
13
+ * - the file under test appended to a declared `testMatch`. A repository that names its
14
+ * tests `*.test.ts` collects no `*.spec.ts`, so the file Skyramp generated is not a
15
+ * test to it and Playwright answers "No tests found" whatever the config or filter.
16
+ * Only the top level is widened: a project that declares its own `testMatch` keeps it,
17
+ * so the file runs once.
18
+ * - a project named `chromium`, ONLY when the repository declares no projects and the
19
+ * command passes no `--browser`. The Skyramp executor always runs
20
+ * `--browser=chromium`, which Playwright turns into a project of that name, so every
21
+ * baseline it has written is `<stem>-chromium-linux.png`. With neither a project nor
22
+ * the flag the host resolves `<stem>-linux.png`, finds no baseline, and writes a fresh
23
+ * one instead of comparing -- a visual regression then passes silently.
24
+ * The flag case needs nothing: `--browser=firefox` names the project `firefox` by
25
+ * itself. Declaring a project there would not help but throw, because Playwright
26
+ * refuses `--browser` when the config defines projects (`common/config.js`:
27
+ * "Cannot use --browser option when configuration file defines projects").
28
+ * See `utils/rebaselineSnapshots.ts` for the layout.
29
+ * No reporter: the verdict is the exit code.
30
+ */
31
+ export declare function buildWrapperConfig(opts: {
32
+ repoConfigBasename?: string;
33
+ outputDir: string;
34
+ /** Absolute path of the file this run executes. */
35
+ testFile?: string;
36
+ /** True when the command already passes `--browser`, which names the project itself. */
37
+ commandPassesBrowserFlag: boolean;
38
+ }): string;
39
+ /**
40
+ * Writes the wrapper beside the config it imports, because Playwright resolves `testDir`,
41
+ * `globalSetup` and `webServer.cwd` from the config file's directory. A dotfile with a
42
+ * random suffix: runs cannot collide and `testMatch` cannot collect it.
43
+ */
44
+ export declare function writeWrapperConfig(opts: {
45
+ repoConfigPath?: string;
46
+ /** Where to write when there is no repo config. */
47
+ fallbackDir: string;
48
+ outputDir: string;
49
+ /** Absolute path of the file this run executes. */
50
+ testFile?: string;
51
+ /** True when the command already passes `--browser`, which names the project itself. */
52
+ commandPassesBrowserFlag: boolean;
53
+ }): {
54
+ path: string;
55
+ cleanup: () => void;
56
+ };
@@ -0,0 +1,155 @@
1
+ import crypto from "crypto";
2
+ import fs from "fs";
3
+ import path from "path";
4
+ import { detectGitRoot } from "../utils/gitStaging.js";
5
+ import { samePath } from "../tools/code-refactor/reuse-state.js";
6
+ /** Playwright's own config names, in its probe order (1.59.1 `configLoader.js:314`).
7
+ * A missing name silently drops the repo's config. */
8
+ const CONFIG_NAMES = [
9
+ "playwright.config.ts",
10
+ "playwright.config.js",
11
+ "playwright.config.mts",
12
+ "playwright.config.mjs",
13
+ "playwright.config.cts",
14
+ "playwright.config.cjs",
15
+ ];
16
+ /** Playwright's `--browser` names the implicit project itself, so the wrapper must not
17
+ * declare one: it refuses the flag when the config defines projects. */
18
+ export function commandPassesBrowserFlag(command) {
19
+ return /(^|\s)--browser(=|\s)/.test(command);
20
+ }
21
+ /** The nearest Playwright config at or above the test file, up to the git root of `cwd`. */
22
+ export function findRepoPlaywrightConfig(testFile, cwd) {
23
+ const stop = detectGitRoot(cwd);
24
+ let dir = path.dirname(path.resolve(testFile));
25
+ for (;;) {
26
+ for (const name of CONFIG_NAMES) {
27
+ const candidate = path.join(dir, name);
28
+ if (fs.existsSync(candidate))
29
+ return candidate;
30
+ }
31
+ const parent = path.dirname(dir);
32
+ if (parent === dir || (stop && samePath(dir, stop)))
33
+ return undefined;
34
+ dir = parent;
35
+ }
36
+ }
37
+ /**
38
+ * A config that imports the repo's own and overlays only:
39
+ * - `video: "on"`, top level and per project — Playwright has no `--video` flag, and a
40
+ * project's `use` overrides the top level.
41
+ * - a per-run `outputDir`, so two runs in one checkout keep their videos apart.
42
+ * - `reuseExistingServer: true` on every `webServer` — the app is already running, and
43
+ * `!process.env.CI` would refuse its port.
44
+ * - the file under test appended to a declared `testMatch`. A repository that names its
45
+ * tests `*.test.ts` collects no `*.spec.ts`, so the file Skyramp generated is not a
46
+ * test to it and Playwright answers "No tests found" whatever the config or filter.
47
+ * Only the top level is widened: a project that declares its own `testMatch` keeps it,
48
+ * so the file runs once.
49
+ * - a project named `chromium`, ONLY when the repository declares no projects and the
50
+ * command passes no `--browser`. The Skyramp executor always runs
51
+ * `--browser=chromium`, which Playwright turns into a project of that name, so every
52
+ * baseline it has written is `<stem>-chromium-linux.png`. With neither a project nor
53
+ * the flag the host resolves `<stem>-linux.png`, finds no baseline, and writes a fresh
54
+ * one instead of comparing -- a visual regression then passes silently.
55
+ * The flag case needs nothing: `--browser=firefox` names the project `firefox` by
56
+ * itself. Declaring a project there would not help but throw, because Playwright
57
+ * refuses `--browser` when the config defines projects (`common/config.js`:
58
+ * "Cannot use --browser option when configuration file defines projects").
59
+ * See `utils/rebaselineSnapshots.ts` for the layout.
60
+ * No reporter: the verdict is the exit code.
61
+ */
62
+ export function buildWrapperConfig(opts) {
63
+ const outputDir = JSON.stringify(opts.outputDir);
64
+ const overlay = `outputDir: ${outputDir},`;
65
+ // Widen only what the repository declared: with no `testMatch`, Playwright's own
66
+ // default already collects both spellings, and setting one would narrow it.
67
+ // One chromium project, used by both branches below. The Skyramp executor runs
68
+ // --browser=chromium, so every baseline it has written is <stem>-chromium-linux.png;
69
+ // a wrapper with no project resolves <stem>-linux.png and compares against nothing.
70
+ // A command that passes --browser names the project itself, and Playwright refuses
71
+ // the flag when the config declares projects, so there it must stay empty.
72
+ const chromiumProject = (useExpr) => opts.commandPassesBrowserFlag
73
+ ? ""
74
+ : `{ name: "chromium", outputDir: ${outputDir}, use: { ...${useExpr}, browserName: "chromium" } }`;
75
+ const testMatchOverlay = opts.testFile
76
+ ? `...(base.testMatch ? { testMatch: [...asList(base.testMatch), ${JSON.stringify(opts.testFile)}] } : {}),`
77
+ : "";
78
+ if (!opts.repoConfigBasename) {
79
+ // No repo config: a minimal one, so video still records.
80
+ return `const config = {
81
+ testDir: ".",
82
+ ${overlay}
83
+ use: { video: "on" },${chromiumProject('{ video: "on" }')
84
+ ? `\n projects: [${chromiumProject('{ video: "on" }')}],`
85
+ : ""}
86
+ };
87
+
88
+ export default config;
89
+ `;
90
+ }
91
+ return `import base from ${JSON.stringify(`./${opts.repoConfigBasename}`)};
92
+
93
+ const withVideo = (use) => ({ ...(use ?? {}), video: "on" });
94
+ const reuseServer = (server) => ({ ...server, reuseExistingServer: true });
95
+
96
+ const asList = (m) => (Array.isArray(m) ? m : [m]);
97
+
98
+ const config = {
99
+ ...base,
100
+ ${overlay}
101
+ ${testMatchOverlay}
102
+ use: withVideo(base.use),
103
+ ...(base.webServer
104
+ ? {
105
+ webServer: Array.isArray(base.webServer)
106
+ ? base.webServer.map(reuseServer)
107
+ : reuseServer(base.webServer),
108
+ }
109
+ : {}),
110
+ ...(Array.isArray(base.projects) && base.projects.length > 0
111
+ ? {
112
+ projects: base.projects.map((p) => ({
113
+ ...p,
114
+ outputDir: ${outputDir},
115
+ use: withVideo(p.use),
116
+ })),
117
+ }
118
+ : ${chromiumProject("withVideo(base.use)")
119
+ ? `{ projects: [${chromiumProject("withVideo(base.use)")}] }`
120
+ : "{}"}),
121
+ };
122
+
123
+ export default config;
124
+ `;
125
+ }
126
+ /**
127
+ * Writes the wrapper beside the config it imports, because Playwright resolves `testDir`,
128
+ * `globalSetup` and `webServer.cwd` from the config file's directory. A dotfile with a
129
+ * random suffix: runs cannot collide and `testMatch` cannot collect it.
130
+ */
131
+ export function writeWrapperConfig(opts) {
132
+ const dir = opts.repoConfigPath
133
+ ? path.dirname(opts.repoConfigPath)
134
+ : opts.fallbackDir;
135
+ const wrapperPath = path.join(dir, `.skyramp-sut-${crypto.randomBytes(6).toString("hex")}.config.ts`);
136
+ fs.writeFileSync(wrapperPath, buildWrapperConfig({
137
+ repoConfigBasename: opts.repoConfigPath
138
+ ? path.basename(opts.repoConfigPath)
139
+ : undefined,
140
+ outputDir: opts.outputDir,
141
+ testFile: opts.testFile,
142
+ commandPassesBrowserFlag: opts.commandPassesBrowserFlag,
143
+ }));
144
+ return {
145
+ path: wrapperPath,
146
+ cleanup: () => {
147
+ try {
148
+ fs.rmSync(wrapperPath, { force: true });
149
+ }
150
+ catch {
151
+ // Best effort: never fail the run over cleanup.
152
+ }
153
+ },
154
+ };
155
+ }
package/build/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { runnableLanguagesText } from "./types/TestTypes.js";
3
4
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
5
  import { registerStartTraceCollectionPrompt } from "./prompts/startTraceCollectionPrompts.js";
5
6
  import { registerTraceTool } from "./tools/trace/startTraceCollectionTool.js";
6
7
  import { registerTraceStopTool } from "./tools/trace/stopTraceCollectionTool.js";
7
8
  import { registerExecuteSkyrampTestTool } from "./tools/executeSkyrampTestTool.js";
8
- import { registerRunExistingTestsTool } from "./tools/runExistingTestsTool.js";
9
9
  import { AUTH_PLACEHOLDER_TOKEN } from "./types/TestTypes.js";
10
10
  import { AUTH_CONFLICT_ERROR_MSG } from "./prompts/test-recommendation/recommendationSections.js";
11
11
  import { logger } from "./utils/logger.js";
@@ -19,10 +19,13 @@ import { registerE2ETestTool } from "./tools/generate-tests/generateE2ERestTool.
19
19
  import { registerLoginTool } from "./tools/auth/loginTool.js";
20
20
  import { registerLogoutTool } from "./tools/auth/logoutTool.js";
21
21
  import { registerFixErrorTool } from "./tools/fixErrorTool.js";
22
+ import { registerVerifyTestDependenciesTool } from "./tools/verifyTestDependenciesTool.js";
22
23
  import { registerRecommendTestsPrompt } from "./prompts/test-recommendation/registerRecommendTestsPrompt.js";
23
24
  import { registerModularizationTool } from "./tools/code-refactor/modularizationTool.js";
24
25
  import { registerCodeReuseTool } from "./tools/code-refactor/codeReuseTool.js";
25
26
  import { registerEnhanceAssertionsTool } from "./tools/code-refactor/enhanceAssertionsTool.js";
27
+ import { registerAlignAssertionsTool } from "./tools/code-refactor/alignAssertionsTool.js";
28
+ import { registerAssertionSnapshotTool, registerAssertionVerifyTool, } from "./tools/code-refactor/assertionSkillTools.js";
26
29
  import { registerBatchScenarioTestTool } from "./tools/generate-tests/generateBatchScenarioRestTool.js";
27
30
  import { registerMockTool } from "./tools/generate-tests/generateMockRestTool.js";
28
31
  import { registerBatchMockTool } from "./tools/generate-tests/batchMockGenerationTool.js";
@@ -68,6 +71,18 @@ else if (oneClickEnabled) {
68
71
  else if (localDevEnabled) {
69
72
  oneClickInstructions = localDevInstructions;
70
73
  }
74
+ // Global workspace-init nudge for bare MCP usage. Suppressed in testbot mode,
75
+ // which runs its own INIT_WORKSPACE step (buildWorkspaceInitSection()) instead.
76
+ const workspaceInitInstructions = isTestbotEnabled() || oneClickEnabled || localDevEnabled
77
+ ? ""
78
+ : `
79
+ ## Workspace Initialization (REQUIRED before the first Skyramp tool call)
80
+ If the workspace root is a git repo AND \`.skyramp/workspace.yml\` does not exist:
81
+ 1. Call \`skyramp_init_scan\` with \`workspacePath\` set to the current repository root → follow the returned instructions to discover all services.
82
+ 2. Call \`skyramp_init_workspace\` with that SAME \`workspacePath\`, \`services\`, and the \`scanToken\` from step 1.
83
+ 3. Proceed with the originally requested tool, if it is not one of the two workspace-init tools above.
84
+ Skip only if: not a git repo, \`.skyramp/workspace.yml\` already exists, or user explicitly declines.
85
+ `;
71
86
  const server = new McpServer({
72
87
  name: "Skyramp MCP Server",
73
88
  version: "1.0.0",
@@ -84,7 +99,7 @@ const server = new McpServer({
84
99
  },
85
100
  },
86
101
  instructions: `Skyramp MCP Server — generates and executes API tests (fuzz, contract, integration, E2E, UI).
87
-
102
+ ${workspaceInitInstructions}
88
103
  ## Rules
89
104
  - NEVER show CLI commands. NEVER attempt to install or configure the Skyramp CLI. ALWAYS use the MCP tools provided.
90
105
  - For UI and E2E tests, there are TWO recording modes:
@@ -99,11 +114,12 @@ Use \`skyramp_analyze_changes\` as the single entry point for both test recommen
99
114
  1. Call \`skyramp_analyze_changes\` with \`repositoryPath\` and \`scope\` → scans endpoints, computes branch diff, discovers existing tests → returns a \`stateFile\` **and** inline ranked test recommendations.
100
115
  2. (Optional) Use the \`skyramp_recommend_tests\` prompt with \`stateFile\` in Cursor/IDE chat for a focused recommendation view.
101
116
 
102
- ### Health Analysis (4-step)
117
+ ### Health Analysis (5-step)
103
118
  1. Call \`skyramp_analyze_changes\` with \`repositoryPath\` and \`scope\` → returns a \`stateFile\`.
104
- 2. Call \`skyramp_analyze_test_health\` with \`stateFile\` → runs drift analysis + health scoring + LLM semantic assessment.
105
- 3. (Optional) Execute tests using \`skyramp_execute_test\` with \`stateFile\` param → validates test status live and writes results back to stateFile for health scoring.
106
- 4. Call \`skyramp_actions\` with \`stateFile\` → executes UPDATE/REGENERATE/ADD recommendations (with execution-aware prioritization if step 3 ran).
119
+ 2. Run each external test in ${runnableLanguagesText()} with \`skyramp_execute_test\`, \`phase: "before"\`, and \`stateFile\` → the server runs your command and writes the verdict back to stateFile. The tool takes no other language, and the gate in step 3 does not ask for those.
120
+ 3. Call \`skyramp_analyze_test_health\` with \`stateFile\` → runs drift analysis + health scoring + LLM semantic assessment. It refuses until step 2 has run.
121
+ 4. (Optional) Run Skyramp-generated tests with \`skyramp_execute_test\` and \`stateFile\` → writes each verdict back for health scoring.
122
+ 5. Call \`skyramp_actions\` with \`stateFile\` → executes UPDATE/REGENERATE/ADD recommendations (with execution-aware prioritization if step 4 ran).
107
123
 
108
124
  After \`skyramp_analyze_changes\`, inspect enriched data via MCP Resources (use the \`sessionId\` returned in the output):
109
125
  - \`skyramp://analysis/{sessionId}/summary\` — high-level overview
@@ -172,12 +188,22 @@ const codeQualityTools = [
172
188
  registerModularizationTool,
173
189
  registerCodeReuseTool,
174
190
  registerEnhanceAssertionsTool,
191
+ registerAssertionVerifyTool,
192
+ registerVerifyTestDependenciesTool,
175
193
  ];
176
194
  // With the Skyramp plugin loaded the agent already has the
177
195
  // fix-test-import-errors skill; the tool would be a second copy of
178
196
  // the same text (SKYR-4296).
179
197
  if (!isSkillsLoaded()) {
180
- codeQualityTools.push(registerFixErrorTool);
198
+ // Same reasoning as fix-test-import-errors: with the plugin loaded the agent
199
+ // has the validate-assertion-alignment-post-execution skill directly; this
200
+ // tool exists so an agent without skill support still gets the same
201
+ // procedure, rendered from the same markdown with real arguments filled in.
202
+ codeQualityTools.push(registerFixErrorTool, registerAlignAssertionsTool);
203
+ }
204
+ else {
205
+ // The enhance-assertions skill drives its own snapshot step itself (SKYR-4310).
206
+ codeQualityTools.push(registerAssertionSnapshotTool);
181
207
  }
182
208
  codeQualityTools.forEach((registerTool) => registerTool(server));
183
209
  // Register analysis resources (MCP Resources for enriched data access)
@@ -216,7 +242,6 @@ if (isLocalDevEnabled()) {
216
242
  }
217
243
  if (isTestbotEnabled()) {
218
244
  infrastructureTools.push(registerSubmitReportTool);
219
- infrastructureTools.push(registerRunExistingTestsTool);
220
245
  logger.info("Testbot tools enabled via SKYRAMP_FEATURE_TESTBOT");
221
246
  }
222
247
  infrastructureTools.forEach((registerTool) => registerTool(server));
@@ -256,12 +281,17 @@ infrastructureTools.forEach((registerTool) => registerTool(server));
256
281
  // Editing the repo's own Playwright config is the wrong instruction: a
257
282
  // suite may have several, and none of them at the root.
258
283
  logger.info("No testIdAttribute declared or discovered — capture stays on Playwright's data-testid. " +
259
- "Set PLAYWRIGHT_MCP_TEST_ID_ATTRIBUTE to override.", { attributesSeenInSelectors: discovered.observed, filesScanned: discovered.filesScanned });
284
+ "Set PLAYWRIGHT_MCP_TEST_ID_ATTRIBUTE to override.", {
285
+ attributesSeenInSelectors: discovered.observed,
286
+ filesScanned: discovered.filesScanned,
287
+ });
260
288
  }
261
289
  }
262
290
  }
263
291
  catch (err) {
264
- logger.warning("Could not determine this repository's testIdAttribute", { error: err });
292
+ logger.warning("Could not determine this repository's testIdAttribute", {
293
+ error: err,
294
+ });
265
295
  }
266
296
  await registerPlaywrightTools(server, { testIdAttribute });
267
297
  })().catch((err) => {
@@ -15,7 +15,9 @@ export function blueprintJsonSpan(text) {
15
15
  const MAX_DEPTH = 12;
16
16
  export const MAX_ELEMENTS = 2000;
17
17
  function text(value) {
18
- return typeof value === "string" && value.trim().length > 0 ? value : undefined;
18
+ return typeof value === "string" && value.trim().length > 0
19
+ ? value
20
+ : undefined;
19
21
  }
20
22
  function rowText(value) {
21
23
  if (!Array.isArray(value))
@@ -32,13 +34,21 @@ function fillTemplate(template, parameters) {
32
34
  const values = parameters;
33
35
  return template.replace(/\{([^{}]+)\}/g, (placeholder, name) => {
34
36
  const value = values[name];
35
- return typeof value === "string" || typeof value === "number" ? String(value) : placeholder;
37
+ return typeof value === "string" || typeof value === "number"
38
+ ? String(value)
39
+ : placeholder;
36
40
  });
37
41
  }
38
42
  function identity(element) {
39
43
  // Serialised rather than joined on a separator: a row's context text is page
40
44
  // content and can hold any character, so any separator could be in it.
41
- return JSON.stringify([element.role, element.accessibleName, element.testId ?? "", element.stableId ?? "", element.contextText ?? []]);
45
+ return JSON.stringify([
46
+ element.role,
47
+ element.accessibleName,
48
+ element.testId ?? "",
49
+ element.stableId ?? "",
50
+ element.contextText ?? [],
51
+ ]);
42
52
  }
43
53
  /** Every element this record describes. A repeating one keeps BOTH its template
44
54
  * and each filled-in row, because the agent lifts a row's rendered name. */
@@ -80,7 +90,9 @@ function collectElements(root) {
80
90
  const found = [];
81
91
  let truncated = false;
82
92
  const seen = new Set();
83
- const stack = [{ value: root, depth: 0 }];
93
+ const stack = [
94
+ { value: root, depth: 0 },
95
+ ];
84
96
  while (stack.length > 0) {
85
97
  if (found.length >= MAX_ELEMENTS) {
86
98
  truncated = true;
@@ -117,12 +129,16 @@ function collectElements(root) {
117
129
  }
118
130
  function urlOf(parsed) {
119
131
  const blueprint = parsed.blueprint;
120
- const inner = blueprint && typeof blueprint === "object" ? blueprint : undefined;
132
+ const inner = blueprint && typeof blueprint === "object"
133
+ ? blueprint
134
+ : undefined;
121
135
  return text(parsed.url) ?? (inner ? text(inner.url) : undefined);
122
136
  }
123
137
  function pageHashOf(parsed) {
124
138
  const blueprint = parsed.blueprint;
125
- const inner = blueprint && typeof blueprint === "object" ? blueprint : undefined;
139
+ const inner = blueprint && typeof blueprint === "object"
140
+ ? blueprint
141
+ : undefined;
126
142
  return text(parsed.pageHash) ?? (inner ? text(inner.pageHash) : undefined);
127
143
  }
128
144
  /** The digest of one payload, or undefined when nothing in it keys to a page.
@@ -148,5 +164,10 @@ export function digestFromBlueprintText(payload, previousUrl) {
148
164
  return undefined;
149
165
  const pageHash = pageHashOf(record);
150
166
  const { elements, truncated } = collectElements(record);
151
- return { url, ...(pageHash ? { pageHash } : {}), elements, ...(truncated ? { elementsTruncated: true } : {}) };
167
+ return {
168
+ url,
169
+ ...(pageHash ? { pageHash } : {}),
170
+ elements,
171
+ ...(truncated ? { elementsTruncated: true } : {}),
172
+ };
152
173
  }
@@ -6,7 +6,8 @@ import { z } from "zod";
6
6
  import { logger } from "../utils/logger.js";
7
7
  import { PlaywrightTraceService, } from "./PlaywrightTraceService.js";
8
8
  import { blueprintJsonSpan } from "./blueprintDigest.js";
9
- import { recordBlueprintCapture, recordBrowserNavigation } from "./blueprintDigestStore.js";
9
+ import { recordBlueprintCapture, recordBrowserNavigation, } from "./blueprintDigestStore.js";
10
+ import { recordTraceExport } from "./traceExportStore.js";
10
11
  let _service = null;
11
12
  export function getPlaywrightTraceService() {
12
13
  return _service;
@@ -21,6 +22,14 @@ const BLUEPRINT_TOOL = "browser_blueprint";
21
22
  * withAssertReminder.
22
23
  */
23
24
  const NAVIGATE_TOOL = "browser_navigate";
25
+ /**
26
+ * The one browser tool whose CALL is counted — see traceExportStore.
27
+ *
28
+ * The count is what lets `skyramp_submit_report` tell "recorded, and it did not
29
+ * work" apart from "never recorded". Those two deserve opposite answers, and
30
+ * without the count the report check can only see the second as the first.
31
+ */
32
+ const EXPORT_TOOL = "skyramp_export_zip";
24
33
  /**
25
34
  * The line the agent reads the moment it has reached a page.
26
35
  *
@@ -44,11 +53,16 @@ function withAssertReminder(result) {
44
53
  const content = result?.content ?? [];
45
54
  const last = content.map((block) => block?.type).lastIndexOf("text");
46
55
  if (last < 0) {
47
- return { ...result, content: [...content, { type: "text", text: ASSERT_REMINDER }] };
56
+ return {
57
+ ...result,
58
+ content: [...content, { type: "text", text: ASSERT_REMINDER }],
59
+ };
48
60
  }
49
61
  return {
50
62
  ...result,
51
- content: content.map((block, i) => i === last && block?.type === "text" ? { ...block, text: `${block.text}\n\n${ASSERT_REMINDER}` } : block),
63
+ content: content.map((block, i) => i === last && block?.type === "text"
64
+ ? { ...block, text: `${block.text}\n\n${ASSERT_REMINDER}` }
65
+ : block),
52
66
  };
53
67
  }
54
68
  /**
@@ -171,32 +185,32 @@ export async function registerPlaywrightTools(server, options) {
171
185
  // The widgetType field on blueprint elements still signals "custom" to
172
186
  // the agent — no guidance is lost.
173
187
  const ESSENTIAL_TOOLS = new Set([
174
- 'browser_navigate',
175
- 'browser_snapshot',
176
- 'browser_click',
177
- 'browser_type',
178
- 'browser_press_key',
179
- 'browser_select_option',
180
- 'browser_hover',
181
- 'browser_drag',
182
- 'browser_file_upload',
183
- 'browser_evaluate',
184
- 'browser_tabs',
185
- 'browser_navigate_back',
186
- 'browser_wait_for',
187
- 'browser_take_screenshot',
188
- 'browser_assert',
189
- 'browser_assert_hidden',
190
- 'browser_assert_api_request',
191
- 'browser_assert_table_cell',
192
- 'browser_mouse_action',
193
- 'browser_visual_snapshot',
194
- 'browser_gojs_add_node',
195
- 'browser_gojs_link',
196
- 'skyramp_export_zip',
197
- 'skyramp_load_trace',
188
+ "browser_navigate",
189
+ "browser_snapshot",
190
+ "browser_click",
191
+ "browser_type",
192
+ "browser_press_key",
193
+ "browser_select_option",
194
+ "browser_hover",
195
+ "browser_drag",
196
+ "browser_file_upload",
197
+ "browser_evaluate",
198
+ "browser_tabs",
199
+ "browser_navigate_back",
200
+ "browser_wait_for",
201
+ "browser_take_screenshot",
202
+ "browser_assert",
203
+ "browser_assert_hidden",
204
+ "browser_assert_api_request",
205
+ "browser_assert_table_cell",
206
+ "browser_mouse_action",
207
+ "browser_visual_snapshot",
208
+ "browser_gojs_add_node",
209
+ "browser_gojs_link",
210
+ "skyramp_export_zip",
211
+ "skyramp_load_trace",
198
212
  // DOM Analyzer: blueprint capture (capture-act-capture pattern)
199
- 'browser_blueprint',
213
+ "browser_blueprint",
200
214
  ]);
201
215
  const filteredTools = tools.filter((t) => ESSENTIAL_TOOLS.has(t.name));
202
216
  logger.info(`Filtering to ${filteredTools.length} essential tools (from ${tools.length} total)`);
@@ -220,6 +234,11 @@ export async function registerPlaywrightTools(server, options) {
220
234
  };
221
235
  }
222
236
  const result = await _service.callTool(tool.name, params);
237
+ // Counted BEFORE any early return and REGARDLESS of isError: an export
238
+ // that failed still cost the agent a recording, and the report gate that
239
+ // reads this has to be satisfiable by trying. Returns nothing, never throws.
240
+ if (tool.name === EXPORT_TOOL)
241
+ recordTraceExport();
223
242
  if (isNavigate) {
224
243
  // The destination this server forwarded, so `skyramp_resolve_screen`
225
244
  // can say where the browser actually is without asking the agent.