@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
@@ -33,7 +33,7 @@ export async function recordExecutionVideo(result, explicitStateFile) {
33
33
  return;
34
34
  // Last write wins: a retried execution leaves a video directory per attempt,
35
35
  // and the report must reference the attempt whose status it reports.
36
- await manager.writeData({
36
+ await manager.appendData({
37
37
  ...data,
38
38
  executionVideos: {
39
39
  ...data.executionVideos,
@@ -2,7 +2,6 @@ import { z } from "zod";
2
2
  import { logger } from "../utils/logger.js";
3
3
  import { getFixErrorsPrompt } from "../prompts/fix-error-prompt.js";
4
4
  import { languageSchema } from "../types/TestTypes.js";
5
- import { getLanguageSteps } from "../utils/language-helper.js";
6
5
  import { normalizeSkyrampImportsInFile } from "../utils/normalizeSkyrampImports.js";
7
6
  import { AnalyticsService } from "../services/AnalyticsService.js";
8
7
  const fixErrorSchema = z.object({
@@ -18,7 +17,7 @@ const fixErrorSchema = z.object({
18
17
  const TOOL_NAME = "skyramp_fix_errors";
19
18
  export function registerFixErrorTool(server) {
20
19
  server.registerTool(TOOL_NAME, {
21
- description: `Review the provided code for errors, inconsistencies, or missing pieces. If any are found, return corrected code. Otherwise, return the code unchanged.`,
20
+ description: "Return guidance for repairing test reference, syntax, import, and missing-dependency errors while preserving the scenario, expected behavior, and assertion strength.",
22
21
  inputSchema: fixErrorSchema.shape,
23
22
  _meta: {
24
23
  keywords: [
@@ -40,9 +39,7 @@ export function registerFixErrorTool(server) {
40
39
  content: [
41
40
  {
42
41
  type: "text",
43
- text: `
44
- ${getFixErrorsPrompt()}
45
- ${getLanguageSteps(params)}`,
42
+ text: getFixErrorsPrompt(params),
46
43
  },
47
44
  ],
48
45
  };
@@ -64,7 +61,9 @@ export function registerFixErrorTool(server) {
64
61
  AnalyticsService.pushMCPToolEvent(TOOL_NAME, errorResult, {
65
62
  prompt: params.prompt,
66
63
  testFile: params.testFile,
67
- }).catch((err) => { logger.warning("Analytics event failed", { error: String(err) }); });
64
+ }).catch((err) => {
65
+ logger.warning("Analytics event failed", { error: String(err) });
66
+ });
68
67
  }
69
68
  });
70
69
  }
@@ -1,6 +1,6 @@
1
1
  import { z } from "zod";
2
2
  import { SkyrampClient } from "@skyramp/skyramp";
3
- import { MockProtocol, RuntimeEnvironment, runtimeEnvironmentInputSchema } from "../../types/TestTypes.js";
3
+ import { MockProtocol, RuntimeEnvironment, runtimeEnvironmentInputSchema, } from "../../types/TestTypes.js";
4
4
  export { MockProtocol } from "../../types/TestTypes.js";
5
5
  import { AnalyticsService } from "../../services/AnalyticsService.js";
6
6
  import { logger } from "../../utils/logger.js";
@@ -1,12 +1,12 @@
1
1
  import { TOOL_BATCH_SCENARIO_TEST_GENERATION } from "../../toolNames.js";
2
2
  import { z } from "zod";
3
3
  import path from "path";
4
- import { ScenarioGenerationService } from "../../services/ScenarioGenerationService.js";
4
+ import { ScenarioGenerationService, } from "../../services/ScenarioGenerationService.js";
5
5
  import fs from "fs";
6
- import { baseSchema, AUTH_PLACEHOLDER_TOKEN, HttpMethod } from "../../types/TestTypes.js";
6
+ import { baseSchema, AUTH_PLACEHOLDER_TOKEN, HttpMethod, } from "../../types/TestTypes.js";
7
7
  import { AnalyticsService } from "../../services/AnalyticsService.js";
8
- import { resolveAuthFromWorkspace, getWorkspaceScopedQueryParams, mergeQueryParamsJson } from "../../utils/workspaceAuth.js";
9
- import { resolveQueryParamsForPath, ensureLeadingSlash, contributesNothing } from "../../workspace/queryParamResolution.js";
8
+ import { resolveAuthFromWorkspace, getWorkspaceScopedQueryParams, mergeQueryParamsJson, } from "../../utils/workspaceAuth.js";
9
+ import { resolveQueryParamsForPath, ensureLeadingSlash, contributesNothing, } from "../../workspace/queryParamResolution.js";
10
10
  import { deriveBasePath } from "../../utils/urlPath.js";
11
11
  import yaml from "js-yaml";
12
12
  import { logger } from "../../utils/logger.js";
@@ -49,25 +49,30 @@ function isJsonObject(v) {
49
49
  return false;
50
50
  }
51
51
  }
52
- export const stepSchema = z.object({
53
- method: z
54
- .nativeEnum(HttpMethod)
55
- .describe("HTTP method for this step."),
52
+ export const stepSchema = z
53
+ .object({
54
+ method: z.nativeEnum(HttpMethod).describe("HTTP method for this step."),
56
55
  path: z
57
56
  .string()
58
- .startsWith("/", { message: "path must begin with '/' (e.g. '/api/v1/products/123')" })
57
+ .startsWith("/", {
58
+ message: "path must begin with '/' (e.g. '/api/v1/products/123')",
59
+ })
59
60
  .describe("API path for this step, must start with '/'. For steps that reference an ID from a prior step, use the same concrete value in the path (e.g. '/api/v1/orders/1') that appears in the prior step's response body (e.g. {\"id\": 1}). The backend auto-detects chaining by matching these values across steps."),
60
61
  requestBody: z
61
62
  .string()
62
63
  .optional()
63
- .refine(isJsonValue, { message: "requestBody must be valid JSON (e.g. '{\"name\":\"product\"}')." })
64
- .describe("JSON string of the request body parsed by AI from the scenario. "
65
- + "IMPORTANT: For GET and DELETE requests, do NOT put query/filter/search parameters here — use queryParams instead. "
66
- + "requestBody should only contain data sent in the HTTP body (typically for POST, PUT, PATCH)."),
64
+ .refine(isJsonValue, {
65
+ message: 'requestBody must be valid JSON (e.g. \'{"name":"product"}\').',
66
+ })
67
+ .describe("JSON string of the request body parsed by AI from the scenario. " +
68
+ "IMPORTANT: For GET and DELETE requests, do NOT put query/filter/search parameters here — use queryParams instead. " +
69
+ "requestBody should only contain data sent in the HTTP body (typically for POST, PUT, PATCH)."),
67
70
  queryParams: z
68
71
  .string()
69
72
  .optional()
70
- .refine(isJsonObject, { message: "queryParams must be a JSON object string (e.g. '{\"limit\":\"10\"}')." })
73
+ .refine(isJsonObject, {
74
+ message: 'queryParams must be a JSON object string (e.g. \'{"limit":"10"}\').',
75
+ })
71
76
  .describe(`JSON string of URL query parameters. Provide a FLAT object where each key is the exact URL parameter name and each value is a string or number (single value per key).
72
77
 
73
78
  <examples>
@@ -89,7 +94,9 @@ Workspace-configured api.defaultQueryParams (if set) are merged into every step
89
94
  responseBody: z
90
95
  .string()
91
96
  .optional()
92
- .refine(isJsonValue, { message: "responseBody must be valid JSON (e.g. '{\"id\": 1}'). The backend extracts chaining identifiers by parsing it — a malformed body silently disables chaining for every later step." })
97
+ .refine(isJsonValue, {
98
+ message: "responseBody must be valid JSON (e.g. '{\"id\": 1}'). The backend extracts chaining identifiers by parsing it — a malformed body silently disables chaining for every later step.",
99
+ })
93
100
  .describe("JSON string of the expected response body. For steps that produce an id used by later steps, include that id field with a realistic UUID generated fresh for this scenario — the backend chains by value-matching any subsequent step path or requestBody that contains the same UUID."),
94
101
  statusCode: z
95
102
  .number()
@@ -101,13 +108,16 @@ Workspace-configured api.defaultQueryParams (if set) are merged into every step
101
108
  .describe("Response headers as a JSON object. Defaults to Content-Type: application/json."),
102
109
  uniqueFields: z
103
110
  .array(z.string().min(1, { message: "uniqueFields paths must be non-empty" }))
104
- .min(1, { message: "uniqueFields, when provided, must list at least one field path" })
111
+ .min(1, {
112
+ message: "uniqueFields, when provided, must list at least one field path",
113
+ })
105
114
  .optional()
106
- .describe("For POST/PUT create steps: request-body field paths (gjson notation, e.g. \"name\", \"slug\", \"nested.id\") "
107
- + "that carry a UNIQUE constraint in the target's data model. The generated test injects a run-unique value "
108
- + "for each so re-runs don't fail with HTTP 409 'already exists'. Identify these from the source schema "
109
- + "(e.g. Django unique=True, SQL UNIQUE, Pydantic/DTO). Omit for GET/DELETE steps and non-unique fields."),
110
- }).superRefine((step, ctx) => {
115
+ .describe('For POST/PUT create steps: request-body field paths (gjson notation, e.g. "name", "slug", "nested.id") ' +
116
+ "that carry a UNIQUE constraint in the target's data model. The generated test injects a run-unique value " +
117
+ "for each so re-runs don't fail with HTTP 409 'already exists'. Identify these from the source schema " +
118
+ "(e.g. Django unique=True, SQL UNIQUE, Pydantic/DTO). Omit for GET/DELETE steps and non-unique fields."),
119
+ })
120
+ .superRefine((step, ctx) => {
111
121
  const isBodyMethod = ["POST", "PUT", "PATCH"].includes(step.method);
112
122
  // Parse once for every body-shape check below; malformed JSON is already
113
123
  // rejected by the isJsonValue refine, so an unparseable body just skips them.
@@ -126,16 +136,16 @@ Workspace-configured api.defaultQueryParams (if set) are merged into every step
126
136
  ctx.addIssue({
127
137
  code: z.ZodIssueCode.custom,
128
138
  path: ["uniqueFields"],
129
- message: `uniqueFields is only valid on POST/PUT/PATCH steps (got ${step.method} ${step.path}). `
130
- + `Omit it for GET/DELETE steps.`,
139
+ message: `uniqueFields is only valid on POST/PUT/PATCH steps (got ${step.method} ${step.path}). ` +
140
+ `Omit it for GET/DELETE steps.`,
131
141
  });
132
142
  }
133
143
  else if (!step.requestBody) {
134
144
  ctx.addIssue({
135
145
  code: z.ZodIssueCode.custom,
136
146
  path: ["uniqueFields"],
137
- message: `uniqueFields is set for ${step.method} ${step.path} but there is no requestBody `
138
- + `containing those fields.`,
147
+ message: `uniqueFields is set for ${step.method} ${step.path} but there is no requestBody ` +
148
+ `containing those fields.`,
139
149
  });
140
150
  }
141
151
  else if (parsedBody !== undefined) {
@@ -144,23 +154,26 @@ Workspace-configured api.defaultQueryParams (if set) are merged into every step
144
154
  ctx.addIssue({
145
155
  code: z.ZodIssueCode.custom,
146
156
  path: ["uniqueFields"],
147
- message: `uniqueFields path "${fieldPath}" does not resolve in the requestBody of `
148
- + `${step.method} ${step.path}. The generator silently skips unresolvable paths, `
149
- + `disabling the run-unique protection — fix the path (gjson dot notation, e.g. `
150
- + `"name", "nested.id", "items.0.sku") to match an existing body field.`,
157
+ message: `uniqueFields path "${fieldPath}" does not resolve in the requestBody of ` +
158
+ `${step.method} ${step.path}. The generator silently skips unresolvable paths, ` +
159
+ `disabling the run-unique protection — fix the path (gjson dot notation, e.g. ` +
160
+ `"name", "nested.id", "items.0.sku") to match an existing body field.`,
151
161
  });
152
162
  }
153
163
  }
154
164
  }
155
165
  }
156
- if (isBodyMethod && parsedBody !== null && typeof parsedBody === "object"
157
- && !Array.isArray(parsedBody) && Object.keys(parsedBody).length === 0) {
166
+ if (isBodyMethod &&
167
+ parsedBody !== null &&
168
+ typeof parsedBody === "object" &&
169
+ !Array.isArray(parsedBody) &&
170
+ Object.keys(parsedBody).length === 0) {
158
171
  ctx.addIssue({
159
172
  code: z.ZodIssueCode.custom,
160
173
  path: ["requestBody"],
161
- message: `requestBody for ${step.method} ${step.path} is an empty object {}. `
162
- + `Provide actual field values from the source code schema (Pydantic model, Zod type, DTO) — `
163
- + `do not send an empty body for ${step.method} requests.`,
174
+ message: `requestBody for ${step.method} ${step.path} is an empty object {}. ` +
175
+ `Provide actual field values from the source code schema (Pydantic model, Zod type, DTO) — ` +
176
+ `do not send an empty body for ${step.method} requests.`,
164
177
  });
165
178
  }
166
179
  });
@@ -195,17 +208,17 @@ const batchScenarioSchema = {
195
208
  authScheme: z
196
209
  .string()
197
210
  .optional()
198
- .describe("Only when authHeader is 'Authorization'. The prefix before the token "
199
- + "(e.g., 'Bearer' produces 'Authorization: Bearer <token>'). "
200
- + "Common values: 'Bearer', 'Basic', 'Token'. "
201
- + "Leave empty if the API uses raw tokens with no prefix. "
202
- + "Ignored for non-Authorization headers like X-Api-Key or Cookie."),
211
+ .describe("Only when authHeader is 'Authorization'. The prefix before the token " +
212
+ "(e.g., 'Bearer' produces 'Authorization: Bearer <token>'). " +
213
+ "Common values: 'Bearer', 'Basic', 'Token'. " +
214
+ "Leave empty if the API uses raw tokens with no prefix. " +
215
+ "Ignored for non-Authorization headers like X-Api-Key or Cookie."),
203
216
  authToken: z
204
217
  .string()
205
218
  .optional()
206
- .describe("Optional explicit auth token value. Leave empty — the service auto-generates "
207
- + `${AUTH_PLACEHOLDER_TOKEN} for all auth headers (Authorization, X-API-Key, Cookie, etc.). `
208
- + `Only provide this when you need a custom value (e.g., 'session=${AUTH_PLACEHOLDER_TOKEN}' for Cookie).`),
219
+ .describe("Optional explicit auth token value. Leave empty — the service auto-generates " +
220
+ `${AUTH_PLACEHOLDER_TOKEN} for all auth headers (Authorization, X-API-Key, Cookie, etc.). ` +
221
+ `Only provide this when you need a custom value (e.g., 'session=${AUTH_PLACEHOLDER_TOKEN}' for Cookie).`),
209
222
  };
210
223
  const TOOL_NAME = TOOL_BATCH_SCENARIO_TEST_GENERATION;
211
224
  export function registerBatchScenarioTestTool(server) {
@@ -238,7 +251,10 @@ Call \`skyramp_integration_test_generation\` with the returned \`scenarioFile\`
238
251
  testType: "integration",
239
252
  });
240
253
  if (guardMessage) {
241
- return { content: [{ type: "text", text: guardMessage }], isError: true };
254
+ return {
255
+ content: [{ type: "text", text: guardMessage }],
256
+ isError: true,
257
+ };
242
258
  }
243
259
  if (params.authHeader === undefined) {
244
260
  try {
@@ -315,7 +331,8 @@ Call \`skyramp_integration_test_generation\` with the returned \`scenarioFile\`
315
331
  // limitation for now; the user can always pass apiSchema explicitly.
316
332
  const rawSchemaPath = wsRaw?.services?.[0]?.api?.schemaPath;
317
333
  if (rawSchemaPath && typeof rawSchemaPath === "string") {
318
- const isUrl = rawSchemaPath.startsWith("http://") || rawSchemaPath.startsWith("https://");
334
+ const isUrl = rawSchemaPath.startsWith("http://") ||
335
+ rawSchemaPath.startsWith("https://");
319
336
  // searchDir is the directory where workspace.yml was found — use it as
320
337
  // the resolution base so relative paths like "../openapi.yml" resolve
321
338
  // correctly regardless of outputDir depth.
@@ -323,7 +340,9 @@ Call \`skyramp_integration_test_generation\` with the returned \`scenarioFile\`
323
340
  ? rawSchemaPath
324
341
  : path.resolve(searchDir, rawSchemaPath);
325
342
  params = { ...params, apiSchema: schemaPath };
326
- logger.info("Auto-populated apiSchema from workspace config", { schemaPath });
343
+ logger.info("Auto-populated apiSchema from workspace config", {
344
+ schemaPath,
345
+ });
327
346
  }
328
347
  }
329
348
  }
@@ -343,11 +362,15 @@ Call \`skyramp_integration_test_generation\` with the returned \`scenarioFile\`
343
362
  if (graphqlSteps.length > 0) {
344
363
  return {
345
364
  isError: true,
346
- content: [{ type: "text", text: `GraphQL endpoints are not supported by Skyramp's test generation.\n` +
365
+ content: [
366
+ {
367
+ type: "text",
368
+ text: `GraphQL endpoints are not supported by Skyramp's test generation.\n` +
347
369
  `Affected steps: ${graphqlSteps.map((s) => `${s.method} ${s.path}`).join(", ")}\n\n` +
348
370
  `Skyramp supports REST API testing only. Remove GraphQL steps and use ` +
349
371
  `the REST endpoints for the same resource instead.`,
350
- }],
372
+ },
373
+ ],
351
374
  };
352
375
  }
353
376
  }
@@ -358,10 +381,13 @@ Call \`skyramp_integration_test_generation\` with the returned \`scenarioFile\`
358
381
  let specValidationWarning = "";
359
382
  if (params.apiSchema) {
360
383
  try {
361
- const isUrl = params.apiSchema.startsWith("http://") || params.apiSchema.startsWith("https://");
384
+ const isUrl = params.apiSchema.startsWith("http://") ||
385
+ params.apiSchema.startsWith("https://");
362
386
  let specText;
363
387
  if (isUrl) {
364
- const specRes = await fetch(params.apiSchema, { signal: AbortSignal.timeout(10_000) });
388
+ const specRes = await fetch(params.apiSchema, {
389
+ signal: AbortSignal.timeout(10_000),
390
+ });
365
391
  if (!specRes.ok) {
366
392
  throw new Error(`HTTP ${specRes.status} ${specRes.statusText} fetching spec at ${params.apiSchema}`);
367
393
  }
@@ -374,7 +400,9 @@ Call \`skyramp_integration_test_generation\` with the returned \`scenarioFile\`
374
400
  }
375
401
  // js-yaml handles both JSON and YAML specs
376
402
  const specLoaded = yaml.load(specText);
377
- const specPaths = new Set(Object.keys((specLoaded && typeof specLoaded === "object" ? specLoaded.paths : null) ?? {}));
403
+ const specPaths = new Set(Object.keys((specLoaded && typeof specLoaded === "object"
404
+ ? specLoaded.paths
405
+ : null) ?? {}));
378
406
  if (specPaths.size === 0) {
379
407
  logger.warning("Spec loaded but contains no paths — skipping path check", {
380
408
  apiSchema: params.apiSchema,
@@ -391,7 +419,9 @@ Call \`skyramp_integration_test_generation\` with the returned \`scenarioFile\`
391
419
  specValidationWarning =
392
420
  `\n\n⚠️ **Spec warning** — the following paths were not found in \`${params.apiSchema}\` ` +
393
421
  `(spec may be stale or incomplete — verify paths against source before running tests):\n` +
394
- unverifiedSteps.map((s) => ` ${s.method} ${s.path}`).join("\n") +
422
+ unverifiedSteps
423
+ .map((s) => ` ${s.method} ${s.path}`)
424
+ .join("\n") +
395
425
  `\n\nKnown spec paths (first 20): ${[...specPaths].slice(0, 20).join(", ")}`;
396
426
  logger.warning("Step paths not found in spec — proceeding (spec may lag code)", {
397
427
  unverifiedPaths: unverifiedSteps.map((s) => s.path),
@@ -412,11 +442,17 @@ Call \`skyramp_integration_test_generation\` with the returned \`scenarioFile\`
412
442
  const fileName = scenarioFileNameFor(params.scenarioName);
413
443
  const filePath = path.join(params.outputDir, fileName);
414
444
  const resolvedOut = path.resolve(params.outputDir);
415
- if (!path.resolve(filePath).startsWith(resolvedOut + path.sep) && path.resolve(filePath) !== resolvedOut) {
445
+ if (!path.resolve(filePath).startsWith(resolvedOut + path.sep) &&
446
+ path.resolve(filePath) !== resolvedOut) {
416
447
  return {
417
- content: [{ type: "text", text: `Validation Error: scenarioName '${params.scenarioName}' produced a file path outside outputDir.\n`
418
- + `Expected: File path within '${params.outputDir}'.\n`
419
- + `Fix: Use a simpler scenarioName without path separators or special characters.` }],
448
+ content: [
449
+ {
450
+ type: "text",
451
+ text: `Validation Error: scenarioName '${params.scenarioName}' produced a file path outside outputDir.\n` +
452
+ `Expected: File path within '${params.outputDir}'.\n` +
453
+ `Fix: Use a simpler scenarioName without path separators or special characters.`,
454
+ },
455
+ ],
420
456
  isError: true,
421
457
  };
422
458
  }
@@ -449,11 +485,11 @@ Call \`skyramp_integration_test_generation\` with the returned \`scenarioFile\`
449
485
  content: [
450
486
  {
451
487
  type: "text",
452
- text: `**Batch Scenario Generation Failed at Step ${i + 1}/${steps.length}**\n\n`
453
- + `${i}/${steps.length} steps succeeded before failure.\n\n`
454
- + `**Failed step:** ${step.method} ${step.path}\n`
455
- + `**Error:** Could not generate a trace request from the provided parameters.\n\n`
456
- + `Fix the failing step and retry with the full batch.`,
488
+ text: `**Batch Scenario Generation Failed at Step ${i + 1}/${steps.length}**\n\n` +
489
+ `${i}/${steps.length} steps succeeded before failure.\n\n` +
490
+ `**Failed step:** ${step.method} ${step.path}\n` +
491
+ `**Error:** Could not generate a trace request from the provided parameters.\n\n` +
492
+ `Fix the failing step and retry with the full batch.`,
457
493
  },
458
494
  ],
459
495
  isError: true,
@@ -482,13 +518,13 @@ Call \`skyramp_integration_test_generation\` with the returned \`scenarioFile\`
482
518
  responseBody: t.ResponseBody,
483
519
  })));
484
520
  if (chainLint.errors.length > 0) {
485
- return toolError(`**Scenario chaining errors**\n\n`
486
- + chainLint.errors.map((e) => `- ${e}`).join("\n")
487
- + `\n\nApply the remedy each error names and resubmit the full batch.`);
521
+ return toolError(`**Scenario chaining errors**\n\n` +
522
+ chainLint.errors.map((e) => `- ${e}`).join("\n") +
523
+ `\n\nApply the remedy each error names and resubmit the full batch.`);
488
524
  }
489
525
  const chainLintWarning = chainLint.warnings.length > 0
490
- ? `\n\n⚠️ **Chaining warnings** — the generated test may hardcode these instead of chaining:\n`
491
- + chainLint.warnings.map((w) => ` - ${w}`).join("\n")
526
+ ? `\n\n⚠️ **Chaining warnings** — the generated test may hardcode these instead of chaining:\n` +
527
+ chainLint.warnings.map((w) => ` - ${w}`).join("\n")
492
528
  : "";
493
529
  try {
494
530
  // The contract and integration generators create the test directory through
@@ -502,7 +538,12 @@ Call \`skyramp_integration_test_generation\` with the returned \`scenarioFile\`
502
538
  catch (error) {
503
539
  const errorMessage = error instanceof Error ? error.message : String(error);
504
540
  return {
505
- content: [{ type: "text", text: `Error writing scenario file: ${errorMessage}` }],
541
+ content: [
542
+ {
543
+ type: "text",
544
+ text: `Error writing scenario file: ${errorMessage}`,
545
+ },
546
+ ],
506
547
  isError: true,
507
548
  };
508
549
  }
@@ -511,13 +552,13 @@ Call \`skyramp_integration_test_generation\` with the returned \`scenarioFile\`
511
552
  content: [
512
553
  {
513
554
  type: "text",
514
- text: `**Batch Scenario Generated — ${stepCount} steps**\n\n`
515
- + `**Scenario:** ${params.scenarioName}\n`
516
- + `**Steps:**\n${steps.map((s, i) => ` ${i + 1}. ${s.method} ${s.path} → ${s.statusCode ?? "default"}`).join("\n")}\n\n`
517
- + `**File:** ${filePath}\n\n`
518
- + `**Next:** Call \`skyramp_integration_test_generation\` with \`scenarioFile: "${filePath}"\``
519
- + specValidationWarning
520
- + chainLintWarning,
555
+ text: `**Batch Scenario Generated — ${stepCount} steps**\n\n` +
556
+ `**Scenario:** ${params.scenarioName}\n` +
557
+ `**Steps:**\n${steps.map((s, i) => ` ${i + 1}. ${s.method} ${s.path} → ${s.statusCode ?? "default"}`).join("\n")}\n\n` +
558
+ `**File:** ${filePath}\n\n` +
559
+ `**Next:** Call \`skyramp_integration_test_generation\` with \`scenarioFile: "${filePath}"\`` +
560
+ specValidationWarning +
561
+ chainLintWarning,
521
562
  },
522
563
  ],
523
564
  isError: false,
@@ -5,9 +5,10 @@ import { baseTestSchema, TestType } from "../../types/TestTypes.js";
5
5
  import { TestGenerationService, } from "../../services/TestGenerationService.js";
6
6
  import { AnalyticsService } from "../../services/AnalyticsService.js";
7
7
  import { getPersonaPrefix } from "../../prompts/personas.js";
8
- import { isContractConsumerModeEnabled, isTestbotEnabled } from "../../utils/featureFlags.js";
8
+ import { isContractConsumerModeEnabled, isTestbotEnabled, } from "../../utils/featureFlags.js";
9
9
  import { guardScenarioApproved, pathFromEndpointURL } from "./planGuard.js";
10
10
  import { toolError } from "../../utils/utils.js";
11
+ import { enhanceAssertionsStep } from "../../skills/enhanceAssertionsSkill.js";
11
12
  // SKYRAMP_FEATURE_CONTRACT_CONSUMER_MODE gates BOTH:
12
13
  // 1. Consumer-side contract test generation (`consumerMode` /
13
14
  // `consumerOutput` schema fields, validation, post-gen instructions,
@@ -72,10 +73,13 @@ const baseContractTestSchema = {
72
73
  return true;
73
74
  const validExtensions = [".py", ".ts", ".js", ".java"];
74
75
  return validExtensions.some((ext) => val.endsWith(ext));
75
- }, { message: "Output file must have one of these extensions: .py, .ts, .js, .java" })
76
+ }, {
77
+ message: "Output file must have one of these extensions: .py, .ts, .js, .java",
78
+ })
76
79
  .describe("Output file for the generated provider contract test. " +
77
- "For Playwright framework, the file must match *.spec.ts so Playwright can discover it " +
78
- "(e.g. contract_provider_orders.spec.ts). " +
80
+ "For Playwright, name the file the way the repository names its tests: read the " +
81
+ "test files already in outputDir and match their spelling. Use *.test.ts where " +
82
+ "they use it, *.spec.ts otherwise (e.g. contract_provider_orders.spec.ts). " +
79
83
  "For other frameworks (pytest, junit), standard extensions are fine (.py, .java). " +
80
84
  "Optional — when omitted, Skyramp generates a default name."),
81
85
  parentRequestData: z
@@ -85,8 +89,8 @@ const baseContractTestSchema = {
85
89
  "IMPORTANT: Each key MUST be the exact path parameter variable name as it appears inside the curly braces in the URL path — NOT an operation ID, endpoint name, or any other identifier. " +
86
90
  "For example, for endpoint '/products/{product_id}/reviews', the key is 'product_id' (not 'create_product', not '/products', not any operation name). " +
87
91
  "The value is the sample request body JSON string used to create that parent resource. " +
88
- "For example: {\"product_id\": \"{\\\"name\\\": \\\"sample product\\\", \\\"price\\\": 10}\"}. " +
89
- "For nested parents like '/a/{a_id}/b/{b_id}/c', provide an entry for each: {\"a_id\": \"{...}\", \"b_id\": \"{...}\"}. " +
92
+ 'For example: {"product_id": "{\\"name\\": \\"sample product\\", \\"price\\": 10}"}. ' +
93
+ 'For nested parents like \'/a/{a_id}/b/{b_id}/c\', provide an entry for each: {"a_id": "{...}", "b_id": "{...}"}. ' +
90
94
  "Path parameters without an entry here should be supplied via pathParams instead. " +
91
95
  PARENT_FIELD_NOT_ALLOWED_NOTE),
92
96
  parentStatusCode: z
@@ -96,7 +100,7 @@ const baseContractTestSchema = {
96
100
  "IMPORTANT: Each key MUST be the exact path parameter variable name as it appears inside the curly braces in the URL path — the same keys used in parentRequestData. " +
97
101
  "For example, for endpoint '/products/{product_id}/reviews', the key is 'product_id' (not an operation name or endpoint path). " +
98
102
  "The value is the expected HTTP status code string for the provisioning call that creates that parent resource. " +
99
- "For example: {\"product_id\": \"201\"}. " +
103
+ 'For example: {"product_id": "201"}. ' +
100
104
  PARENT_FIELD_NOT_ALLOWED_NOTE),
101
105
  parentFormParams: z
102
106
  .record(z.string(), z.string())
@@ -123,10 +127,13 @@ const consumerModeSchemaFields = {
123
127
  return true;
124
128
  const validExtensions = [".py", ".ts", ".js", ".java"];
125
129
  return validExtensions.some((ext) => val.endsWith(ext));
126
- }, { message: "Output file must have one of these extensions: .py, .ts, .js, .java" })
130
+ }, {
131
+ message: "Output file must have one of these extensions: .py, .ts, .js, .java",
132
+ })
127
133
  .describe("Output file for the generated consumer contract test. " +
128
- "For Playwright framework, the file must match *.spec.ts so Playwright can discover it " +
129
- "(e.g. contract_consumer_orders.spec.ts). " +
134
+ "For Playwright, name the file the way the repository names its tests: read the " +
135
+ "test files already in outputDir and match their spelling. Use *.test.ts where " +
136
+ "they use it, *.spec.ts otherwise (e.g. contract_consumer_orders.spec.ts). " +
130
137
  "For other frameworks (pytest, junit), standard extensions are fine (.py, .java). " +
131
138
  "Optional — when omitted, Skyramp generates a default name."),
132
139
  };
@@ -244,7 +251,7 @@ ${this.buildPlaceholderReplacementBlock(params)}
244
251
  const nextStepNote = enhanceAssertions ? "continue to Step 2" : undefined;
245
252
  steps.push(`### Step ${steps.length + 1} — Replace placeholder values [REQUIRED]\n\n${this.buildPlaceholderReplacementBlock(params, nextStepNote)}`);
246
253
  if (enhanceAssertions) {
247
- steps.push(`### Step ${steps.length + 1} — Enhance response body assertions [REQUIRED]\nCall \`skyramp_enhance_assertions\` with \`testFile\` set to the absolute path of the generated provider contract test file, \`testType: "contract"\`, and \`enhanceType: "generation"\`. Apply every instruction returned to that file.`);
254
+ steps.push(`### Step ${steps.length + 1} — Enhance response body assertions [REQUIRED]\n${enhanceAssertionsStep("contract", "generated provider contract test file")}`);
248
255
  }
249
256
  const heading = enhanceAssertions
250
257
  ? "Replace placeholder data and enhance assertions"
@@ -283,7 +290,9 @@ The generated consumer contract test contains a stub test function that uses Sky
283
290
  if (errList.isError)
284
291
  return errList;
285
292
  const errors = [];
286
- if ((params.parentRequestData || params.parentStatusCode || params.parentFormParams) &&
293
+ if ((params.parentRequestData ||
294
+ params.parentStatusCode ||
295
+ params.parentFormParams) &&
287
296
  !params.apiSchema) {
288
297
  errors.push("parentRequestData, parentStatusCode, and parentFormParams are only allowed when apiSchema is provided.");
289
298
  }
@@ -294,7 +303,10 @@ The generated consumer contract test contains a stub test function that uses Sky
294
303
  if (params.consumerOutput && !params.consumerMode) {
295
304
  errors.push("consumerOutput is only valid when consumerMode is enabled.");
296
305
  }
297
- if (params.consumerMode && (params.parentRequestData || params.parentStatusCode || params.parentFormParams)) {
306
+ if (params.consumerMode &&
307
+ (params.parentRequestData ||
308
+ params.parentStatusCode ||
309
+ params.parentFormParams)) {
298
310
  errors.push("parentRequestData, parentStatusCode, and parentFormParams are not allowed when consumerMode is enabled.");
299
311
  }
300
312
  }
@@ -314,8 +326,12 @@ The generated consumer contract test contains a stub test function that uses Sky
314
326
  const suggested = /\.[tj]s$/.test(parsed.ext)
315
327
  ? value.replace(/\.[tj]s$/, ".spec.ts")
316
328
  : value + ".spec.ts";
317
- errors.push(`Error: Playwright requires test files to match *.{spec}.{ts,js} (got "${value}" for ${field}). ` +
318
- `Rename to e.g. ${suggested} so Playwright can discover it.`);
329
+ // Both spellings are named: a repository that declares
330
+ // `testMatch: ["**/*.test.ts"]` collects no *.spec.ts (SKYR-4489).
331
+ const alternative = suggested.replace(/\.spec\.ts$/, ".test.ts");
332
+ errors.push(`Error: Playwright requires test files to match *.{spec,test}.{ts,js} (got "${value}" for ${field}). ` +
333
+ `Rename to ${suggested}, or to ${alternative} if the tests already in ` +
334
+ `${params.outputDir} use that spelling.`);
319
335
  }
320
336
  }
321
337
  }
@@ -324,7 +340,9 @@ The generated consumer contract test contains a stub test function that uses Sky
324
340
  if (!params.providerMode) {
325
341
  errors.push("skipProvisionParents requires providerMode to be enabled.");
326
342
  }
327
- if (params.parentRequestData || params.parentStatusCode || params.parentFormParams) {
343
+ if (params.parentRequestData ||
344
+ params.parentStatusCode ||
345
+ params.parentFormParams) {
328
346
  errors.push("parentRequestData, parentStatusCode, and parentFormParams are not allowed when skipProvisionParents is enabled.");
329
347
  }
330
348
  }
@@ -7,6 +7,7 @@ export declare class E2ETestService extends TestGenerationService {
7
7
  protected buildGenerationOptions(params: BaseTestParams & {
8
8
  responseData?: string;
9
9
  playwrightInput?: string;
10
+ testName?: string;
10
11
  }): any;
11
12
  protected handleApiAnalysis(_params: BaseTestParams): Promise<CallToolResult | null>;
12
13
  }
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- import { baseSchema, baseTraceSchema, TestType, codeRefactoringSchema, } from "../../types/TestTypes.js";
2
+ import { baseSchema, baseTraceSchema, TestType, codeRefactoringSchema, testNameField, } from "../../types/TestTypes.js";
3
3
  import { TestGenerationService, } from "../../services/TestGenerationService.js";
4
4
  import { AnalyticsService } from "../../services/AnalyticsService.js";
5
5
  import { toolError } from "../../utils/utils.js";
@@ -16,6 +16,7 @@ const e2eTestSchema = {
16
16
  "from a Playwright zip that already produced one is rejected — one recording covers one scenario, and reusing " +
17
17
  "it manufactures identical tests under names the recording never covered. Set true only when the same " +
18
18
  "recording genuinely covers the new scenario end-to-end."),
19
+ testName: testNameField("testE2e"),
19
20
  ...codeRefactoringSchema.shape,
20
21
  ...baseSchema.shape,
21
22
  };
@@ -28,6 +29,11 @@ export class E2ETestService extends TestGenerationService {
28
29
  ...super.buildBaseGenerationOptions(params),
29
30
  responseData: params.responseData,
30
31
  playwrightInput: params.playwrightInput,
32
+ // SKYR-4468: free-form title for the generated test, so the spec names the
33
+ // behaviour it verifies instead of the generic `testE2e`. The option is
34
+ // inert until the pinned @skyramp/skyramp release carries it — the client
35
+ // ignores options it does not know, so passing it early is safe.
36
+ testName: params.testName,
31
37
  };
32
38
  }
33
39
  async handleApiAnalysis(_params) {
@@ -44,6 +50,8 @@ End-to-End tests validate complete user journeys by testing the entire applicati
44
50
  TRACE & UI INTEGRATION:
45
51
  E2E tests require both trace files (capturing backend API interactions) and Playwright recordings (capturing UI interactions captured using start_trace_collection tool) to generate comprehensive tests that validate the complete user experience.
46
52
 
53
+ **Test title:** Pass \`testName\` with the behaviour this recording verifies (e.g. "Add to cart from search results"), taken from the recommendation the recording came from. Omit it and the spec is titled \`testE2e\`, which claims nothing.
54
+
47
55
  **CRITICAL - When using trace parameter:**
48
56
  If \`trace\` parameter is provided (path to a trace file), DO NOT pass \`apiSchema\` or \`endpointURL\` parameters. The trace file already contains all necessary endpoint and schema information. Passing both will cause test generation to fail.`,
49
57
  inputSchema: e2eTestSchema,