@skyramp/mcp 0.0.63 → 0.0.64-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 (577) hide show
  1. package/build/index.js +23 -6
  2. package/build/playwright/PlaywrightTraceService.js +74 -0
  3. package/build/playwright/index.js +3 -0
  4. package/build/playwright/registerPlaywrightTools.js +117 -0
  5. package/build/playwright/traceRecordingPrompt.js +54 -0
  6. package/build/prompts/startTraceCollectionPrompts.js +4 -2
  7. package/build/prompts/test-recommendation/recommendationSections.js +88 -212
  8. package/build/prompts/test-recommendation/test-recommendation-prompt.js +336 -85
  9. package/build/prompts/test-recommendation/test-recommendation-prompt.test.js +58 -15
  10. package/build/prompts/testGenerationPrompt.js +1 -1
  11. package/build/prompts/testbot/testbot-prompts.js +44 -22
  12. package/build/services/ModularizationService.js +1 -1
  13. package/build/services/TestExecutionService.js +1 -1
  14. package/build/services/TestGenerationService.js +8 -1
  15. package/build/services/TestGenerationService.test.js +11 -11
  16. package/build/tools/code-refactor/modularizationTool.js +50 -8
  17. package/build/tools/generate-tests/generateContractRestTool.js +125 -12
  18. package/build/tools/generate-tests/generateIntegrationRestTool.js +83 -1
  19. package/build/tools/generate-tests/generateUIRestTool.js +10 -2
  20. package/build/tools/submitReportTool.js +26 -7
  21. package/build/tools/submitReportTool.test.js +1 -1
  22. package/build/tools/test-management/analyzeChangesTool.js +9 -4
  23. package/build/tools/trace/startTraceCollectionTool.js +6 -9
  24. package/build/tools/trace/stopTraceCollectionTool.js +2 -2
  25. package/build/types/RepositoryAnalysis.js +3 -1
  26. package/build/utils/normalizeParams.js +45 -0
  27. package/build/utils/scenarioDrafting.js +418 -93
  28. package/build/utils/scenarioDrafting.test.js +190 -2
  29. package/build/utils/trace-parser.js +49 -22
  30. package/node_modules/playwright/ThirdPartyNotices.txt +7456 -0
  31. package/node_modules/playwright/cli.js +19 -0
  32. package/node_modules/playwright/index.d.ts +17 -0
  33. package/node_modules/playwright/index.js +17 -0
  34. package/node_modules/playwright/index.mjs +18 -0
  35. package/node_modules/playwright/jsx-runtime.js +42 -0
  36. package/node_modules/playwright/jsx-runtime.mjs +21 -0
  37. package/node_modules/playwright/lib/agents/agentParser.js +89 -0
  38. package/node_modules/playwright/lib/agents/copilot-setup-steps.yml +34 -0
  39. package/node_modules/playwright/lib/agents/generateAgents.js +348 -0
  40. package/node_modules/playwright/lib/agents/playwright-test-coverage.prompt.md +31 -0
  41. package/node_modules/playwright/lib/agents/playwright-test-generate.prompt.md +8 -0
  42. package/node_modules/playwright/lib/agents/playwright-test-generator.agent.md +88 -0
  43. package/node_modules/playwright/lib/agents/playwright-test-heal.prompt.md +6 -0
  44. package/node_modules/playwright/lib/agents/playwright-test-healer.agent.md +55 -0
  45. package/node_modules/playwright/lib/agents/playwright-test-plan.prompt.md +9 -0
  46. package/node_modules/playwright/lib/agents/playwright-test-planner.agent.md +73 -0
  47. package/node_modules/playwright/lib/common/config.js +282 -0
  48. package/node_modules/playwright/lib/common/configLoader.js +344 -0
  49. package/node_modules/playwright/lib/common/esmLoaderHost.js +104 -0
  50. package/node_modules/playwright/lib/common/expectBundle.js +28 -0
  51. package/node_modules/playwright/lib/common/expectBundleImpl.js +407 -0
  52. package/node_modules/playwright/lib/common/fixtures.js +302 -0
  53. package/node_modules/playwright/lib/common/globals.js +58 -0
  54. package/node_modules/playwright/lib/common/ipc.js +60 -0
  55. package/node_modules/playwright/lib/common/poolBuilder.js +85 -0
  56. package/node_modules/playwright/lib/common/process.js +132 -0
  57. package/node_modules/playwright/lib/common/suiteUtils.js +140 -0
  58. package/node_modules/playwright/lib/common/test.js +321 -0
  59. package/node_modules/playwright/lib/common/testLoader.js +101 -0
  60. package/node_modules/playwright/lib/common/testType.js +298 -0
  61. package/node_modules/playwright/lib/common/validators.js +68 -0
  62. package/node_modules/playwright/lib/fsWatcher.js +67 -0
  63. package/node_modules/playwright/lib/index.js +726 -0
  64. package/node_modules/playwright/lib/internalsForTest.js +42 -0
  65. package/node_modules/playwright/lib/isomorphic/events.js +77 -0
  66. package/node_modules/playwright/lib/isomorphic/folders.js +30 -0
  67. package/node_modules/playwright/lib/isomorphic/stringInternPool.js +69 -0
  68. package/node_modules/playwright/lib/isomorphic/teleReceiver.js +521 -0
  69. package/node_modules/playwright/lib/isomorphic/teleSuiteUpdater.js +157 -0
  70. package/node_modules/playwright/lib/isomorphic/testServerConnection.js +225 -0
  71. package/node_modules/playwright/lib/isomorphic/testServerInterface.js +16 -0
  72. package/node_modules/playwright/lib/isomorphic/testTree.js +329 -0
  73. package/node_modules/playwright/lib/isomorphic/types.d.js +16 -0
  74. package/node_modules/playwright/lib/loader/loaderMain.js +59 -0
  75. package/node_modules/playwright/lib/matchers/expect.js +311 -0
  76. package/node_modules/playwright/lib/matchers/matcherHint.js +44 -0
  77. package/node_modules/playwright/lib/matchers/matchers.js +383 -0
  78. package/node_modules/playwright/lib/matchers/toBeTruthy.js +75 -0
  79. package/node_modules/playwright/lib/matchers/toEqual.js +100 -0
  80. package/node_modules/playwright/lib/matchers/toHaveURL.js +101 -0
  81. package/node_modules/playwright/lib/matchers/toMatchAriaSnapshot.js +159 -0
  82. package/node_modules/playwright/lib/matchers/toMatchSnapshot.js +342 -0
  83. package/node_modules/playwright/lib/matchers/toMatchText.js +99 -0
  84. package/node_modules/playwright/lib/mcp/browser/browserContextFactory.js +329 -0
  85. package/node_modules/playwright/lib/mcp/browser/browserServerBackend.js +84 -0
  86. package/node_modules/playwright/lib/mcp/browser/config.js +421 -0
  87. package/node_modules/playwright/lib/mcp/browser/context.js +296 -0
  88. package/node_modules/playwright/lib/mcp/browser/response.js +278 -0
  89. package/node_modules/playwright/lib/mcp/browser/sessionLog.js +75 -0
  90. package/node_modules/playwright/lib/mcp/browser/tab.js +343 -0
  91. package/node_modules/playwright/lib/mcp/browser/tools/common.js +65 -0
  92. package/node_modules/playwright/lib/mcp/browser/tools/console.js +46 -0
  93. package/node_modules/playwright/lib/mcp/browser/tools/dialogs.js +60 -0
  94. package/node_modules/playwright/lib/mcp/browser/tools/evaluate.js +61 -0
  95. package/node_modules/playwright/lib/mcp/browser/tools/files.js +58 -0
  96. package/node_modules/playwright/lib/mcp/browser/tools/form.js +63 -0
  97. package/node_modules/playwright/lib/mcp/browser/tools/install.js +72 -0
  98. package/node_modules/playwright/lib/mcp/browser/tools/keyboard.js +107 -0
  99. package/node_modules/playwright/lib/mcp/browser/tools/mouse.js +107 -0
  100. package/node_modules/playwright/lib/mcp/browser/tools/navigate.js +71 -0
  101. package/node_modules/playwright/lib/mcp/browser/tools/network.js +63 -0
  102. package/node_modules/playwright/lib/mcp/browser/tools/open.js +57 -0
  103. package/node_modules/playwright/lib/mcp/browser/tools/pdf.js +49 -0
  104. package/node_modules/playwright/lib/mcp/browser/tools/runCode.js +78 -0
  105. package/node_modules/playwright/lib/mcp/browser/tools/screenshot.js +93 -0
  106. package/node_modules/playwright/lib/mcp/browser/tools/snapshot.js +173 -0
  107. package/node_modules/playwright/lib/mcp/browser/tools/tabs.js +67 -0
  108. package/node_modules/playwright/lib/mcp/browser/tools/tool.js +47 -0
  109. package/node_modules/playwright/lib/mcp/browser/tools/tracing.js +74 -0
  110. package/node_modules/playwright/lib/mcp/browser/tools/utils.js +94 -0
  111. package/node_modules/playwright/lib/mcp/browser/tools/verify.js +143 -0
  112. package/node_modules/playwright/lib/mcp/browser/tools/wait.js +63 -0
  113. package/node_modules/playwright/lib/mcp/browser/tools.js +84 -0
  114. package/node_modules/playwright/lib/mcp/browser/watchdog.js +44 -0
  115. package/node_modules/playwright/lib/mcp/config.d.js +16 -0
  116. package/node_modules/playwright/lib/mcp/extension/cdpRelay.js +351 -0
  117. package/node_modules/playwright/lib/mcp/extension/extensionContextFactory.js +76 -0
  118. package/node_modules/playwright/lib/mcp/extension/protocol.js +28 -0
  119. package/node_modules/playwright/lib/mcp/index.js +61 -0
  120. package/node_modules/playwright/lib/mcp/log.js +35 -0
  121. package/node_modules/playwright/lib/mcp/program.js +111 -0
  122. package/node_modules/playwright/lib/mcp/sdk/exports.js +28 -0
  123. package/node_modules/playwright/lib/mcp/sdk/http.js +152 -0
  124. package/node_modules/playwright/lib/mcp/sdk/inProcessTransport.js +71 -0
  125. package/node_modules/playwright/lib/mcp/sdk/server.js +223 -0
  126. package/node_modules/playwright/lib/mcp/sdk/tool.js +47 -0
  127. package/node_modules/playwright/lib/mcp/skyramp/exportTool.js +88 -0
  128. package/node_modules/playwright/lib/mcp/skyramp/index.js +36 -0
  129. package/node_modules/playwright/lib/mcp/skyramp/traceRecordingBackend.js +236 -0
  130. package/node_modules/playwright/lib/mcp/skyramp/types.js +31 -0
  131. package/node_modules/playwright/lib/mcp/terminal/cli.js +296 -0
  132. package/node_modules/playwright/lib/mcp/terminal/command.js +56 -0
  133. package/node_modules/playwright/lib/mcp/terminal/commands.js +333 -0
  134. package/node_modules/playwright/lib/mcp/terminal/daemon.js +129 -0
  135. package/node_modules/playwright/lib/mcp/terminal/help.json +32 -0
  136. package/node_modules/playwright/lib/mcp/terminal/helpGenerator.js +88 -0
  137. package/node_modules/playwright/lib/mcp/terminal/socketConnection.js +80 -0
  138. package/node_modules/playwright/lib/mcp/test/browserBackend.js +98 -0
  139. package/node_modules/playwright/lib/mcp/test/generatorTools.js +122 -0
  140. package/node_modules/playwright/lib/mcp/test/plannerTools.js +145 -0
  141. package/node_modules/playwright/lib/mcp/test/seed.js +82 -0
  142. package/node_modules/playwright/lib/mcp/test/skyRampExport.js +313 -0
  143. package/node_modules/playwright/lib/mcp/test/streams.js +44 -0
  144. package/node_modules/playwright/lib/mcp/test/testBackend.js +99 -0
  145. package/node_modules/playwright/lib/mcp/test/testContext.js +285 -0
  146. package/node_modules/playwright/lib/mcp/test/testTool.js +30 -0
  147. package/node_modules/playwright/lib/mcp/test/testTools.js +108 -0
  148. package/node_modules/playwright/lib/plugins/gitCommitInfoPlugin.js +198 -0
  149. package/node_modules/playwright/lib/plugins/index.js +28 -0
  150. package/node_modules/playwright/lib/plugins/webServerPlugin.js +237 -0
  151. package/node_modules/playwright/lib/program.js +417 -0
  152. package/node_modules/playwright/lib/reporters/base.js +634 -0
  153. package/node_modules/playwright/lib/reporters/blob.js +138 -0
  154. package/node_modules/playwright/lib/reporters/dot.js +99 -0
  155. package/node_modules/playwright/lib/reporters/empty.js +32 -0
  156. package/node_modules/playwright/lib/reporters/github.js +128 -0
  157. package/node_modules/playwright/lib/reporters/html.js +633 -0
  158. package/node_modules/playwright/lib/reporters/internalReporter.js +138 -0
  159. package/node_modules/playwright/lib/reporters/json.js +254 -0
  160. package/node_modules/playwright/lib/reporters/junit.js +232 -0
  161. package/node_modules/playwright/lib/reporters/line.js +131 -0
  162. package/node_modules/playwright/lib/reporters/list.js +253 -0
  163. package/node_modules/playwright/lib/reporters/listModeReporter.js +69 -0
  164. package/node_modules/playwright/lib/reporters/markdown.js +144 -0
  165. package/node_modules/playwright/lib/reporters/merge.js +558 -0
  166. package/node_modules/playwright/lib/reporters/multiplexer.js +112 -0
  167. package/node_modules/playwright/lib/reporters/reporterV2.js +102 -0
  168. package/node_modules/playwright/lib/reporters/teleEmitter.js +317 -0
  169. package/node_modules/playwright/lib/reporters/versions/blobV1.js +16 -0
  170. package/node_modules/playwright/lib/runner/dispatcher.js +530 -0
  171. package/node_modules/playwright/lib/runner/failureTracker.js +72 -0
  172. package/node_modules/playwright/lib/runner/lastRun.js +77 -0
  173. package/node_modules/playwright/lib/runner/loadUtils.js +334 -0
  174. package/node_modules/playwright/lib/runner/loaderHost.js +89 -0
  175. package/node_modules/playwright/lib/runner/processHost.js +180 -0
  176. package/node_modules/playwright/lib/runner/projectUtils.js +241 -0
  177. package/node_modules/playwright/lib/runner/rebase.js +189 -0
  178. package/node_modules/playwright/lib/runner/reporters.js +138 -0
  179. package/node_modules/playwright/lib/runner/sigIntWatcher.js +96 -0
  180. package/node_modules/playwright/lib/runner/storage.js +91 -0
  181. package/node_modules/playwright/lib/runner/taskRunner.js +127 -0
  182. package/node_modules/playwright/lib/runner/tasks.js +410 -0
  183. package/node_modules/playwright/lib/runner/testGroups.js +125 -0
  184. package/node_modules/playwright/lib/runner/testRunner.js +398 -0
  185. package/node_modules/playwright/lib/runner/testServer.js +269 -0
  186. package/node_modules/playwright/lib/runner/uiModeReporter.js +30 -0
  187. package/node_modules/playwright/lib/runner/vcs.js +72 -0
  188. package/node_modules/playwright/lib/runner/watchMode.js +396 -0
  189. package/node_modules/playwright/lib/runner/workerHost.js +104 -0
  190. package/node_modules/playwright/lib/third_party/pirates.js +62 -0
  191. package/node_modules/playwright/lib/third_party/tsconfig-loader.js +103 -0
  192. package/node_modules/playwright/lib/transform/babelBundle.js +46 -0
  193. package/node_modules/playwright/lib/transform/babelBundleImpl.js +461 -0
  194. package/node_modules/playwright/lib/transform/compilationCache.js +274 -0
  195. package/node_modules/playwright/lib/transform/esmLoader.js +103 -0
  196. package/node_modules/playwright/lib/transform/md.js +221 -0
  197. package/node_modules/playwright/lib/transform/portTransport.js +67 -0
  198. package/node_modules/playwright/lib/transform/transform.js +303 -0
  199. package/node_modules/playwright/lib/util.js +400 -0
  200. package/node_modules/playwright/lib/utilsBundle.js +50 -0
  201. package/node_modules/playwright/lib/utilsBundleImpl.js +103 -0
  202. package/node_modules/playwright/lib/worker/fixtureRunner.js +262 -0
  203. package/node_modules/playwright/lib/worker/testInfo.js +536 -0
  204. package/node_modules/playwright/lib/worker/testTracing.js +345 -0
  205. package/node_modules/playwright/lib/worker/timeoutManager.js +174 -0
  206. package/node_modules/playwright/lib/worker/util.js +31 -0
  207. package/node_modules/playwright/lib/worker/workerMain.js +530 -0
  208. package/node_modules/playwright/package.json +73 -0
  209. package/node_modules/playwright/test.d.ts +18 -0
  210. package/node_modules/playwright/test.js +24 -0
  211. package/node_modules/playwright/test.mjs +34 -0
  212. package/node_modules/playwright/types/test.d.ts +10251 -0
  213. package/node_modules/playwright/types/testReporter.d.ts +822 -0
  214. package/node_modules/playwright-core/LICENSE +202 -0
  215. package/node_modules/playwright-core/NOTICE +5 -0
  216. package/node_modules/playwright-core/README.md +3 -0
  217. package/node_modules/playwright-core/ThirdPartyNotices.txt +4076 -0
  218. package/node_modules/playwright-core/bin/install_media_pack.ps1 +5 -0
  219. package/node_modules/playwright-core/bin/install_webkit_wsl.ps1 +33 -0
  220. package/node_modules/playwright-core/bin/reinstall_chrome_beta_linux.sh +42 -0
  221. package/node_modules/playwright-core/bin/reinstall_chrome_beta_mac.sh +13 -0
  222. package/node_modules/playwright-core/bin/reinstall_chrome_beta_win.ps1 +24 -0
  223. package/node_modules/playwright-core/bin/reinstall_chrome_stable_linux.sh +42 -0
  224. package/node_modules/playwright-core/bin/reinstall_chrome_stable_mac.sh +12 -0
  225. package/node_modules/playwright-core/bin/reinstall_chrome_stable_win.ps1 +24 -0
  226. package/node_modules/playwright-core/bin/reinstall_msedge_beta_linux.sh +48 -0
  227. package/node_modules/playwright-core/bin/reinstall_msedge_beta_mac.sh +11 -0
  228. package/node_modules/playwright-core/bin/reinstall_msedge_beta_win.ps1 +23 -0
  229. package/node_modules/playwright-core/bin/reinstall_msedge_dev_linux.sh +48 -0
  230. package/node_modules/playwright-core/bin/reinstall_msedge_dev_mac.sh +11 -0
  231. package/node_modules/playwright-core/bin/reinstall_msedge_dev_win.ps1 +23 -0
  232. package/node_modules/playwright-core/bin/reinstall_msedge_stable_linux.sh +48 -0
  233. package/node_modules/playwright-core/bin/reinstall_msedge_stable_mac.sh +11 -0
  234. package/node_modules/playwright-core/bin/reinstall_msedge_stable_win.ps1 +24 -0
  235. package/node_modules/playwright-core/browsers.json +79 -0
  236. package/node_modules/playwright-core/cli.js +18 -0
  237. package/node_modules/playwright-core/index.d.ts +17 -0
  238. package/node_modules/playwright-core/index.js +32 -0
  239. package/node_modules/playwright-core/index.mjs +28 -0
  240. package/node_modules/playwright-core/lib/androidServerImpl.js +65 -0
  241. package/node_modules/playwright-core/lib/browserServerImpl.js +120 -0
  242. package/node_modules/playwright-core/lib/cli/driver.js +97 -0
  243. package/node_modules/playwright-core/lib/cli/program.js +589 -0
  244. package/node_modules/playwright-core/lib/cli/programWithTestStub.js +74 -0
  245. package/node_modules/playwright-core/lib/client/android.js +361 -0
  246. package/node_modules/playwright-core/lib/client/api.js +137 -0
  247. package/node_modules/playwright-core/lib/client/artifact.js +79 -0
  248. package/node_modules/playwright-core/lib/client/browser.js +161 -0
  249. package/node_modules/playwright-core/lib/client/browserContext.js +582 -0
  250. package/node_modules/playwright-core/lib/client/browserType.js +185 -0
  251. package/node_modules/playwright-core/lib/client/cdpSession.js +51 -0
  252. package/node_modules/playwright-core/lib/client/channelOwner.js +194 -0
  253. package/node_modules/playwright-core/lib/client/clientHelper.js +64 -0
  254. package/node_modules/playwright-core/lib/client/clientInstrumentation.js +55 -0
  255. package/node_modules/playwright-core/lib/client/clientStackTrace.js +69 -0
  256. package/node_modules/playwright-core/lib/client/clock.js +68 -0
  257. package/node_modules/playwright-core/lib/client/connection.js +318 -0
  258. package/node_modules/playwright-core/lib/client/consoleMessage.js +58 -0
  259. package/node_modules/playwright-core/lib/client/coverage.js +44 -0
  260. package/node_modules/playwright-core/lib/client/dialog.js +56 -0
  261. package/node_modules/playwright-core/lib/client/download.js +62 -0
  262. package/node_modules/playwright-core/lib/client/electron.js +138 -0
  263. package/node_modules/playwright-core/lib/client/elementHandle.js +284 -0
  264. package/node_modules/playwright-core/lib/client/errors.js +77 -0
  265. package/node_modules/playwright-core/lib/client/eventEmitter.js +314 -0
  266. package/node_modules/playwright-core/lib/client/events.js +103 -0
  267. package/node_modules/playwright-core/lib/client/fetch.js +368 -0
  268. package/node_modules/playwright-core/lib/client/fileChooser.js +46 -0
  269. package/node_modules/playwright-core/lib/client/fileUtils.js +34 -0
  270. package/node_modules/playwright-core/lib/client/frame.js +409 -0
  271. package/node_modules/playwright-core/lib/client/harRouter.js +87 -0
  272. package/node_modules/playwright-core/lib/client/input.js +84 -0
  273. package/node_modules/playwright-core/lib/client/jsHandle.js +109 -0
  274. package/node_modules/playwright-core/lib/client/jsonPipe.js +39 -0
  275. package/node_modules/playwright-core/lib/client/localUtils.js +60 -0
  276. package/node_modules/playwright-core/lib/client/locator.js +369 -0
  277. package/node_modules/playwright-core/lib/client/network.js +747 -0
  278. package/node_modules/playwright-core/lib/client/page.js +745 -0
  279. package/node_modules/playwright-core/lib/client/pageAgent.js +64 -0
  280. package/node_modules/playwright-core/lib/client/platform.js +77 -0
  281. package/node_modules/playwright-core/lib/client/playwright.js +71 -0
  282. package/node_modules/playwright-core/lib/client/selectors.js +55 -0
  283. package/node_modules/playwright-core/lib/client/stream.js +39 -0
  284. package/node_modules/playwright-core/lib/client/timeoutSettings.js +79 -0
  285. package/node_modules/playwright-core/lib/client/tracing.js +119 -0
  286. package/node_modules/playwright-core/lib/client/types.js +28 -0
  287. package/node_modules/playwright-core/lib/client/video.js +59 -0
  288. package/node_modules/playwright-core/lib/client/waiter.js +142 -0
  289. package/node_modules/playwright-core/lib/client/webError.js +39 -0
  290. package/node_modules/playwright-core/lib/client/webSocket.js +93 -0
  291. package/node_modules/playwright-core/lib/client/worker.js +85 -0
  292. package/node_modules/playwright-core/lib/client/writableStream.js +39 -0
  293. package/node_modules/playwright-core/lib/generated/bindingsControllerSource.js +28 -0
  294. package/node_modules/playwright-core/lib/generated/clockSource.js +28 -0
  295. package/node_modules/playwright-core/lib/generated/injectedScriptSource.js +28 -0
  296. package/node_modules/playwright-core/lib/generated/pollingRecorderSource.js +28 -0
  297. package/node_modules/playwright-core/lib/generated/storageScriptSource.js +28 -0
  298. package/node_modules/playwright-core/lib/generated/utilityScriptSource.js +28 -0
  299. package/node_modules/playwright-core/lib/generated/webSocketMockSource.js +336 -0
  300. package/node_modules/playwright-core/lib/inProcessFactory.js +60 -0
  301. package/node_modules/playwright-core/lib/inprocess.js +3 -0
  302. package/node_modules/playwright-core/lib/mcpBundle.js +84 -0
  303. package/node_modules/playwright-core/lib/mcpBundleImpl/index.js +147 -0
  304. package/node_modules/playwright-core/lib/outofprocess.js +76 -0
  305. package/node_modules/playwright-core/lib/protocol/serializers.js +197 -0
  306. package/node_modules/playwright-core/lib/protocol/validator.js +2969 -0
  307. package/node_modules/playwright-core/lib/protocol/validatorPrimitives.js +193 -0
  308. package/node_modules/playwright-core/lib/remote/playwrightConnection.js +129 -0
  309. package/node_modules/playwright-core/lib/remote/playwrightServer.js +334 -0
  310. package/node_modules/playwright-core/lib/server/agent/actionRunner.js +335 -0
  311. package/node_modules/playwright-core/lib/server/agent/actions.js +128 -0
  312. package/node_modules/playwright-core/lib/server/agent/codegen.js +111 -0
  313. package/node_modules/playwright-core/lib/server/agent/context.js +150 -0
  314. package/node_modules/playwright-core/lib/server/agent/expectTools.js +156 -0
  315. package/node_modules/playwright-core/lib/server/agent/pageAgent.js +204 -0
  316. package/node_modules/playwright-core/lib/server/agent/performTools.js +262 -0
  317. package/node_modules/playwright-core/lib/server/agent/tool.js +109 -0
  318. package/node_modules/playwright-core/lib/server/android/android.js +465 -0
  319. package/node_modules/playwright-core/lib/server/android/backendAdb.js +177 -0
  320. package/node_modules/playwright-core/lib/server/artifact.js +127 -0
  321. package/node_modules/playwright-core/lib/server/bidi/bidiBrowser.js +549 -0
  322. package/node_modules/playwright-core/lib/server/bidi/bidiChromium.js +149 -0
  323. package/node_modules/playwright-core/lib/server/bidi/bidiConnection.js +213 -0
  324. package/node_modules/playwright-core/lib/server/bidi/bidiDeserializer.js +116 -0
  325. package/node_modules/playwright-core/lib/server/bidi/bidiExecutionContext.js +267 -0
  326. package/node_modules/playwright-core/lib/server/bidi/bidiFirefox.js +128 -0
  327. package/node_modules/playwright-core/lib/server/bidi/bidiInput.js +146 -0
  328. package/node_modules/playwright-core/lib/server/bidi/bidiNetworkManager.js +383 -0
  329. package/node_modules/playwright-core/lib/server/bidi/bidiOverCdp.js +102 -0
  330. package/node_modules/playwright-core/lib/server/bidi/bidiPage.js +583 -0
  331. package/node_modules/playwright-core/lib/server/bidi/bidiPdf.js +106 -0
  332. package/node_modules/playwright-core/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
  333. package/node_modules/playwright-core/lib/server/bidi/third_party/bidiKeyboard.js +256 -0
  334. package/node_modules/playwright-core/lib/server/bidi/third_party/bidiProtocol.js +24 -0
  335. package/node_modules/playwright-core/lib/server/bidi/third_party/bidiProtocolCore.js +180 -0
  336. package/node_modules/playwright-core/lib/server/bidi/third_party/bidiProtocolPermissions.js +42 -0
  337. package/node_modules/playwright-core/lib/server/bidi/third_party/bidiSerializer.js +148 -0
  338. package/node_modules/playwright-core/lib/server/bidi/third_party/firefoxPrefs.js +259 -0
  339. package/node_modules/playwright-core/lib/server/browser.js +149 -0
  340. package/node_modules/playwright-core/lib/server/browserContext.js +702 -0
  341. package/node_modules/playwright-core/lib/server/browserType.js +336 -0
  342. package/node_modules/playwright-core/lib/server/callLog.js +82 -0
  343. package/node_modules/playwright-core/lib/server/chromium/appIcon.png +0 -0
  344. package/node_modules/playwright-core/lib/server/chromium/chromium.js +397 -0
  345. package/node_modules/playwright-core/lib/server/chromium/chromiumSwitches.js +104 -0
  346. package/node_modules/playwright-core/lib/server/chromium/crBrowser.js +520 -0
  347. package/node_modules/playwright-core/lib/server/chromium/crConnection.js +197 -0
  348. package/node_modules/playwright-core/lib/server/chromium/crCoverage.js +235 -0
  349. package/node_modules/playwright-core/lib/server/chromium/crDevTools.js +111 -0
  350. package/node_modules/playwright-core/lib/server/chromium/crDragDrop.js +131 -0
  351. package/node_modules/playwright-core/lib/server/chromium/crExecutionContext.js +146 -0
  352. package/node_modules/playwright-core/lib/server/chromium/crInput.js +187 -0
  353. package/node_modules/playwright-core/lib/server/chromium/crNetworkManager.js +707 -0
  354. package/node_modules/playwright-core/lib/server/chromium/crPage.js +1001 -0
  355. package/node_modules/playwright-core/lib/server/chromium/crPdf.js +121 -0
  356. package/node_modules/playwright-core/lib/server/chromium/crProtocolHelper.js +145 -0
  357. package/node_modules/playwright-core/lib/server/chromium/crServiceWorker.js +136 -0
  358. package/node_modules/playwright-core/lib/server/chromium/defaultFontFamilies.js +162 -0
  359. package/node_modules/playwright-core/lib/server/chromium/protocol.d.js +16 -0
  360. package/node_modules/playwright-core/lib/server/clock.js +149 -0
  361. package/node_modules/playwright-core/lib/server/codegen/csharp.js +327 -0
  362. package/node_modules/playwright-core/lib/server/codegen/java.js +274 -0
  363. package/node_modules/playwright-core/lib/server/codegen/javascript.js +247 -0
  364. package/node_modules/playwright-core/lib/server/codegen/jsonl.js +52 -0
  365. package/node_modules/playwright-core/lib/server/codegen/language.js +132 -0
  366. package/node_modules/playwright-core/lib/server/codegen/languages.js +68 -0
  367. package/node_modules/playwright-core/lib/server/codegen/python.js +279 -0
  368. package/node_modules/playwright-core/lib/server/codegen/types.js +16 -0
  369. package/node_modules/playwright-core/lib/server/console.js +57 -0
  370. package/node_modules/playwright-core/lib/server/cookieStore.js +206 -0
  371. package/node_modules/playwright-core/lib/server/debugController.js +191 -0
  372. package/node_modules/playwright-core/lib/server/debugger.js +119 -0
  373. package/node_modules/playwright-core/lib/server/deviceDescriptors.js +39 -0
  374. package/node_modules/playwright-core/lib/server/deviceDescriptorsSource.json +1779 -0
  375. package/node_modules/playwright-core/lib/server/dialog.js +116 -0
  376. package/node_modules/playwright-core/lib/server/dispatchers/androidDispatcher.js +325 -0
  377. package/node_modules/playwright-core/lib/server/dispatchers/artifactDispatcher.js +118 -0
  378. package/node_modules/playwright-core/lib/server/dispatchers/browserContextDispatcher.js +384 -0
  379. package/node_modules/playwright-core/lib/server/dispatchers/browserDispatcher.js +118 -0
  380. package/node_modules/playwright-core/lib/server/dispatchers/browserTypeDispatcher.js +64 -0
  381. package/node_modules/playwright-core/lib/server/dispatchers/cdpSessionDispatcher.js +44 -0
  382. package/node_modules/playwright-core/lib/server/dispatchers/debugControllerDispatcher.js +78 -0
  383. package/node_modules/playwright-core/lib/server/dispatchers/dialogDispatcher.js +47 -0
  384. package/node_modules/playwright-core/lib/server/dispatchers/dispatcher.js +364 -0
  385. package/node_modules/playwright-core/lib/server/dispatchers/electronDispatcher.js +89 -0
  386. package/node_modules/playwright-core/lib/server/dispatchers/elementHandlerDispatcher.js +181 -0
  387. package/node_modules/playwright-core/lib/server/dispatchers/frameDispatcher.js +227 -0
  388. package/node_modules/playwright-core/lib/server/dispatchers/jsHandleDispatcher.js +85 -0
  389. package/node_modules/playwright-core/lib/server/dispatchers/jsonPipeDispatcher.js +58 -0
  390. package/node_modules/playwright-core/lib/server/dispatchers/localUtilsDispatcher.js +149 -0
  391. package/node_modules/playwright-core/lib/server/dispatchers/networkDispatchers.js +213 -0
  392. package/node_modules/playwright-core/lib/server/dispatchers/pageAgentDispatcher.js +96 -0
  393. package/node_modules/playwright-core/lib/server/dispatchers/pageDispatcher.js +393 -0
  394. package/node_modules/playwright-core/lib/server/dispatchers/playwrightDispatcher.js +108 -0
  395. package/node_modules/playwright-core/lib/server/dispatchers/streamDispatcher.js +67 -0
  396. package/node_modules/playwright-core/lib/server/dispatchers/tracingDispatcher.js +68 -0
  397. package/node_modules/playwright-core/lib/server/dispatchers/webSocketRouteDispatcher.js +165 -0
  398. package/node_modules/playwright-core/lib/server/dispatchers/writableStreamDispatcher.js +79 -0
  399. package/node_modules/playwright-core/lib/server/dom.js +815 -0
  400. package/node_modules/playwright-core/lib/server/download.js +70 -0
  401. package/node_modules/playwright-core/lib/server/electron/electron.js +273 -0
  402. package/node_modules/playwright-core/lib/server/electron/loader.js +29 -0
  403. package/node_modules/playwright-core/lib/server/errors.js +69 -0
  404. package/node_modules/playwright-core/lib/server/fetch.js +621 -0
  405. package/node_modules/playwright-core/lib/server/fileChooser.js +43 -0
  406. package/node_modules/playwright-core/lib/server/fileUploadUtils.js +84 -0
  407. package/node_modules/playwright-core/lib/server/firefox/ffBrowser.js +418 -0
  408. package/node_modules/playwright-core/lib/server/firefox/ffConnection.js +142 -0
  409. package/node_modules/playwright-core/lib/server/firefox/ffExecutionContext.js +150 -0
  410. package/node_modules/playwright-core/lib/server/firefox/ffInput.js +159 -0
  411. package/node_modules/playwright-core/lib/server/firefox/ffNetworkManager.js +256 -0
  412. package/node_modules/playwright-core/lib/server/firefox/ffPage.js +497 -0
  413. package/node_modules/playwright-core/lib/server/firefox/firefox.js +114 -0
  414. package/node_modules/playwright-core/lib/server/firefox/protocol.d.js +16 -0
  415. package/node_modules/playwright-core/lib/server/formData.js +147 -0
  416. package/node_modules/playwright-core/lib/server/frameSelectors.js +160 -0
  417. package/node_modules/playwright-core/lib/server/frames.js +1471 -0
  418. package/node_modules/playwright-core/lib/server/har/harRecorder.js +147 -0
  419. package/node_modules/playwright-core/lib/server/har/harTracer.js +607 -0
  420. package/node_modules/playwright-core/lib/server/harBackend.js +157 -0
  421. package/node_modules/playwright-core/lib/server/helper.js +96 -0
  422. package/node_modules/playwright-core/lib/server/index.js +58 -0
  423. package/node_modules/playwright-core/lib/server/input.js +277 -0
  424. package/node_modules/playwright-core/lib/server/instrumentation.js +72 -0
  425. package/node_modules/playwright-core/lib/server/javascript.js +291 -0
  426. package/node_modules/playwright-core/lib/server/launchApp.js +128 -0
  427. package/node_modules/playwright-core/lib/server/localUtils.js +214 -0
  428. package/node_modules/playwright-core/lib/server/macEditingCommands.js +143 -0
  429. package/node_modules/playwright-core/lib/server/network.js +667 -0
  430. package/node_modules/playwright-core/lib/server/page.js +830 -0
  431. package/node_modules/playwright-core/lib/server/pipeTransport.js +89 -0
  432. package/node_modules/playwright-core/lib/server/playwright.js +69 -0
  433. package/node_modules/playwright-core/lib/server/progress.js +132 -0
  434. package/node_modules/playwright-core/lib/server/protocolError.js +52 -0
  435. package/node_modules/playwright-core/lib/server/recorder/chat.js +161 -0
  436. package/node_modules/playwright-core/lib/server/recorder/recorderApp.js +366 -0
  437. package/node_modules/playwright-core/lib/server/recorder/recorderRunner.js +138 -0
  438. package/node_modules/playwright-core/lib/server/recorder/recorderSignalProcessor.js +83 -0
  439. package/node_modules/playwright-core/lib/server/recorder/recorderUtils.js +157 -0
  440. package/node_modules/playwright-core/lib/server/recorder/throttledFile.js +57 -0
  441. package/node_modules/playwright-core/lib/server/recorder.js +499 -0
  442. package/node_modules/playwright-core/lib/server/registry/browserFetcher.js +177 -0
  443. package/node_modules/playwright-core/lib/server/registry/dependencies.js +371 -0
  444. package/node_modules/playwright-core/lib/server/registry/index.js +1422 -0
  445. package/node_modules/playwright-core/lib/server/registry/nativeDeps.js +1280 -0
  446. package/node_modules/playwright-core/lib/server/registry/oopDownloadBrowserMain.js +127 -0
  447. package/node_modules/playwright-core/lib/server/screencast.js +190 -0
  448. package/node_modules/playwright-core/lib/server/screenshotter.js +333 -0
  449. package/node_modules/playwright-core/lib/server/selectors.js +112 -0
  450. package/node_modules/playwright-core/lib/server/socksClientCertificatesInterceptor.js +383 -0
  451. package/node_modules/playwright-core/lib/server/socksInterceptor.js +95 -0
  452. package/node_modules/playwright-core/lib/server/trace/recorder/snapshotter.js +147 -0
  453. package/node_modules/playwright-core/lib/server/trace/recorder/snapshotterInjected.js +561 -0
  454. package/node_modules/playwright-core/lib/server/trace/recorder/tracing.js +604 -0
  455. package/node_modules/playwright-core/lib/server/trace/viewer/traceParser.js +72 -0
  456. package/node_modules/playwright-core/lib/server/trace/viewer/traceViewer.js +245 -0
  457. package/node_modules/playwright-core/lib/server/transport.js +181 -0
  458. package/node_modules/playwright-core/lib/server/types.js +28 -0
  459. package/node_modules/playwright-core/lib/server/usKeyboardLayout.js +145 -0
  460. package/node_modules/playwright-core/lib/server/utils/ascii.js +44 -0
  461. package/node_modules/playwright-core/lib/server/utils/comparators.js +139 -0
  462. package/node_modules/playwright-core/lib/server/utils/crypto.js +216 -0
  463. package/node_modules/playwright-core/lib/server/utils/debug.js +42 -0
  464. package/node_modules/playwright-core/lib/server/utils/debugLogger.js +122 -0
  465. package/node_modules/playwright-core/lib/server/utils/env.js +73 -0
  466. package/node_modules/playwright-core/lib/server/utils/eventsHelper.js +39 -0
  467. package/node_modules/playwright-core/lib/server/utils/expectUtils.js +123 -0
  468. package/node_modules/playwright-core/lib/server/utils/fileUtils.js +191 -0
  469. package/node_modules/playwright-core/lib/server/utils/happyEyeballs.js +207 -0
  470. package/node_modules/playwright-core/lib/server/utils/hostPlatform.js +138 -0
  471. package/node_modules/playwright-core/lib/server/utils/httpServer.js +203 -0
  472. package/node_modules/playwright-core/lib/server/utils/imageUtils.js +141 -0
  473. package/node_modules/playwright-core/lib/server/utils/image_tools/colorUtils.js +89 -0
  474. package/node_modules/playwright-core/lib/server/utils/image_tools/compare.js +109 -0
  475. package/node_modules/playwright-core/lib/server/utils/image_tools/imageChannel.js +78 -0
  476. package/node_modules/playwright-core/lib/server/utils/image_tools/stats.js +102 -0
  477. package/node_modules/playwright-core/lib/server/utils/linuxUtils.js +71 -0
  478. package/node_modules/playwright-core/lib/server/utils/network.js +242 -0
  479. package/node_modules/playwright-core/lib/server/utils/nodePlatform.js +154 -0
  480. package/node_modules/playwright-core/lib/server/utils/pipeTransport.js +84 -0
  481. package/node_modules/playwright-core/lib/server/utils/processLauncher.js +241 -0
  482. package/node_modules/playwright-core/lib/server/utils/profiler.js +65 -0
  483. package/node_modules/playwright-core/lib/server/utils/socksProxy.js +511 -0
  484. package/node_modules/playwright-core/lib/server/utils/spawnAsync.js +41 -0
  485. package/node_modules/playwright-core/lib/server/utils/task.js +51 -0
  486. package/node_modules/playwright-core/lib/server/utils/userAgent.js +98 -0
  487. package/node_modules/playwright-core/lib/server/utils/wsServer.js +121 -0
  488. package/node_modules/playwright-core/lib/server/utils/zipFile.js +74 -0
  489. package/node_modules/playwright-core/lib/server/utils/zones.js +57 -0
  490. package/node_modules/playwright-core/lib/server/videoRecorder.js +124 -0
  491. package/node_modules/playwright-core/lib/server/webkit/protocol.d.js +16 -0
  492. package/node_modules/playwright-core/lib/server/webkit/webkit.js +108 -0
  493. package/node_modules/playwright-core/lib/server/webkit/wkBrowser.js +335 -0
  494. package/node_modules/playwright-core/lib/server/webkit/wkConnection.js +144 -0
  495. package/node_modules/playwright-core/lib/server/webkit/wkExecutionContext.js +154 -0
  496. package/node_modules/playwright-core/lib/server/webkit/wkInput.js +181 -0
  497. package/node_modules/playwright-core/lib/server/webkit/wkInterceptableRequest.js +197 -0
  498. package/node_modules/playwright-core/lib/server/webkit/wkPage.js +1159 -0
  499. package/node_modules/playwright-core/lib/server/webkit/wkProvisionalPage.js +83 -0
  500. package/node_modules/playwright-core/lib/server/webkit/wkWorkers.js +105 -0
  501. package/node_modules/playwright-core/lib/third_party/pixelmatch.js +255 -0
  502. package/node_modules/playwright-core/lib/utils/isomorphic/ariaSnapshot.js +455 -0
  503. package/node_modules/playwright-core/lib/utils/isomorphic/assert.js +31 -0
  504. package/node_modules/playwright-core/lib/utils/isomorphic/colors.js +72 -0
  505. package/node_modules/playwright-core/lib/utils/isomorphic/cssParser.js +245 -0
  506. package/node_modules/playwright-core/lib/utils/isomorphic/cssTokenizer.js +1051 -0
  507. package/node_modules/playwright-core/lib/utils/isomorphic/headers.js +53 -0
  508. package/node_modules/playwright-core/lib/utils/isomorphic/locatorGenerators.js +689 -0
  509. package/node_modules/playwright-core/lib/utils/isomorphic/locatorParser.js +176 -0
  510. package/node_modules/playwright-core/lib/utils/isomorphic/locatorUtils.js +81 -0
  511. package/node_modules/playwright-core/lib/utils/isomorphic/lruCache.js +51 -0
  512. package/node_modules/playwright-core/lib/utils/isomorphic/manualPromise.js +114 -0
  513. package/node_modules/playwright-core/lib/utils/isomorphic/mimeType.js +459 -0
  514. package/node_modules/playwright-core/lib/utils/isomorphic/multimap.js +80 -0
  515. package/node_modules/playwright-core/lib/utils/isomorphic/protocolFormatter.js +81 -0
  516. package/node_modules/playwright-core/lib/utils/isomorphic/protocolMetainfo.js +330 -0
  517. package/node_modules/playwright-core/lib/utils/isomorphic/rtti.js +43 -0
  518. package/node_modules/playwright-core/lib/utils/isomorphic/selectorParser.js +386 -0
  519. package/node_modules/playwright-core/lib/utils/isomorphic/semaphore.js +54 -0
  520. package/node_modules/playwright-core/lib/utils/isomorphic/stackTrace.js +158 -0
  521. package/node_modules/playwright-core/lib/utils/isomorphic/stringUtils.js +204 -0
  522. package/node_modules/playwright-core/lib/utils/isomorphic/time.js +49 -0
  523. package/node_modules/playwright-core/lib/utils/isomorphic/timeoutRunner.js +66 -0
  524. package/node_modules/playwright-core/lib/utils/isomorphic/trace/entries.js +16 -0
  525. package/node_modules/playwright-core/lib/utils/isomorphic/trace/snapshotRenderer.js +499 -0
  526. package/node_modules/playwright-core/lib/utils/isomorphic/trace/snapshotServer.js +120 -0
  527. package/node_modules/playwright-core/lib/utils/isomorphic/trace/snapshotStorage.js +89 -0
  528. package/node_modules/playwright-core/lib/utils/isomorphic/trace/traceLoader.js +131 -0
  529. package/node_modules/playwright-core/lib/utils/isomorphic/trace/traceModel.js +365 -0
  530. package/node_modules/playwright-core/lib/utils/isomorphic/trace/traceModernizer.js +400 -0
  531. package/node_modules/playwright-core/lib/utils/isomorphic/trace/versions/traceV3.js +16 -0
  532. package/node_modules/playwright-core/lib/utils/isomorphic/trace/versions/traceV4.js +16 -0
  533. package/node_modules/playwright-core/lib/utils/isomorphic/trace/versions/traceV5.js +16 -0
  534. package/node_modules/playwright-core/lib/utils/isomorphic/trace/versions/traceV6.js +16 -0
  535. package/node_modules/playwright-core/lib/utils/isomorphic/trace/versions/traceV7.js +16 -0
  536. package/node_modules/playwright-core/lib/utils/isomorphic/trace/versions/traceV8.js +16 -0
  537. package/node_modules/playwright-core/lib/utils/isomorphic/traceUtils.js +58 -0
  538. package/node_modules/playwright-core/lib/utils/isomorphic/types.js +16 -0
  539. package/node_modules/playwright-core/lib/utils/isomorphic/urlMatch.js +190 -0
  540. package/node_modules/playwright-core/lib/utils/isomorphic/utilityScriptSerializers.js +251 -0
  541. package/node_modules/playwright-core/lib/utils/isomorphic/yaml.js +84 -0
  542. package/node_modules/playwright-core/lib/utils.js +111 -0
  543. package/node_modules/playwright-core/lib/utilsBundle.js +109 -0
  544. package/node_modules/playwright-core/lib/utilsBundleImpl/index.js +218 -0
  545. package/node_modules/playwright-core/lib/utilsBundleImpl/xdg-open +1066 -0
  546. package/node_modules/playwright-core/lib/vite/htmlReport/index.html +84 -0
  547. package/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule-DYBRYzYX.css +1 -0
  548. package/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule-DadYNm1I.js +32 -0
  549. package/node_modules/playwright-core/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  550. package/node_modules/playwright-core/lib/vite/recorder/assets/index-BSjZa4pk.css +1 -0
  551. package/node_modules/playwright-core/lib/vite/recorder/assets/index-BhTWtUlo.js +193 -0
  552. package/node_modules/playwright-core/lib/vite/recorder/index.html +29 -0
  553. package/node_modules/playwright-core/lib/vite/recorder/playwright-logo.svg +9 -0
  554. package/node_modules/playwright-core/lib/vite/traceViewer/assets/codeMirrorModule-a5XoALAZ.js +32 -0
  555. package/node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-CJSZINFr.js +266 -0
  556. package/node_modules/playwright-core/lib/vite/traceViewer/assets/xtermModule-CsJ4vdCR.js +9 -0
  557. package/node_modules/playwright-core/lib/vite/traceViewer/codeMirrorModule.DYBRYzYX.css +1 -0
  558. package/node_modules/playwright-core/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  559. package/node_modules/playwright-core/lib/vite/traceViewer/defaultSettingsView.7ch9cixO.css +1 -0
  560. package/node_modules/playwright-core/lib/vite/traceViewer/index.BDwrLSGN.js +2 -0
  561. package/node_modules/playwright-core/lib/vite/traceViewer/index.BVu7tZDe.css +1 -0
  562. package/node_modules/playwright-core/lib/vite/traceViewer/index.html +43 -0
  563. package/node_modules/playwright-core/lib/vite/traceViewer/manifest.webmanifest +16 -0
  564. package/node_modules/playwright-core/lib/vite/traceViewer/playwright-logo.svg +9 -0
  565. package/node_modules/playwright-core/lib/vite/traceViewer/snapshot.html +21 -0
  566. package/node_modules/playwright-core/lib/vite/traceViewer/sw.bundle.js +5 -0
  567. package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.Btcz36p_.css +1 -0
  568. package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.CQJ9SCIQ.js +5 -0
  569. package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.html +17 -0
  570. package/node_modules/playwright-core/lib/vite/traceViewer/xtermModule.DYP7pi_n.css +32 -0
  571. package/node_modules/playwright-core/lib/zipBundle.js +34 -0
  572. package/node_modules/playwright-core/lib/zipBundleImpl.js +5 -0
  573. package/node_modules/playwright-core/package.json +43 -0
  574. package/node_modules/playwright-core/types/protocol.d.ts +23824 -0
  575. package/node_modules/playwright-core/types/structs.d.ts +45 -0
  576. package/node_modules/playwright-core/types/types.d.ts +22843 -0
  577. package/package.json +6 -2
@@ -4,18 +4,123 @@
4
4
  * resources) with token budget (each scenario adds ~15-20 lines to the prompt).
5
5
  */
6
6
  const MAX_DRAFTED_SCENARIOS_PER_CATEGORY = 4;
7
- const ACTION_PATTERN = /^(me|merge|archive|search|login|logout|verify|forgot|reset|config|dashboard|webhook|migration|favicon|payment|health|status|ping|metrics|callback|confirm|activate|deactivate|subscribe|unsubscribe)$/i;
7
+ const ACTION_PATTERN = /^(me|merge|archive|search|login|logout|verify|forgot|reset|config|dashboard|webhook|migration|favicon|payment|health|status|ping|metrics|callback|confirm|activate|deactivate|subscribe|unsubscribe|unknown)$/i;
8
8
  const ACTION_VERB_HYPHEN = /^(forgot-|reset-|verify-|confirm-|send-|check-|get-|set-|update-|delete-|create-|trigger-|start-|stop-)/i;
9
9
  export function isRealResource(r) {
10
10
  return !ACTION_PATTERN.test(r) && !ACTION_VERB_HYPHEN.test(r);
11
11
  }
12
- export function draftScenariosFromEndpoints(endpoints) {
12
+ const SKIP_SEGMENTS = new Set(["api", "v1", "v2", "v3", "public"]);
13
+ /**
14
+ * Convert a plural resource name to its singular form for use in field names
15
+ * and step descriptions.
16
+ *
17
+ * Handles the most common irregular plurals found in REST API paths:
18
+ * -ies → -y (categories → category, companies → company)
19
+ * -ses → -s (statuses → status, classes → class)
20
+ * Falls back to removing the trailing "s" for regular plurals.
21
+ */
22
+ function singularize(word) {
23
+ if (word.endsWith("ies") && word.length > 3) {
24
+ return word.slice(0, -3) + "y";
25
+ }
26
+ if (word.endsWith("ses") && word.length > 4) {
27
+ return word.slice(0, -2); // statuses → status
28
+ }
29
+ return word.endsWith("s") && word.length > 1 ? word.slice(0, -1) : word;
30
+ }
31
+ /**
32
+ * Extract the primary resource name from an endpoint path.
33
+ * E.g. "/api/v1/flow-costs/{cost_id}" → "flow-costs"
34
+ * "/collections/{id}/links" → "links"
35
+ */
36
+ function extractResourceName(path) {
37
+ const segments = path.split("/").filter(Boolean);
38
+ const nonParam = segments.filter(s => !s.startsWith("{") && !SKIP_SEGMENTS.has(s));
39
+ const name = nonParam[nonParam.length - 1];
40
+ return name && isRealResource(name) ? name : null;
41
+ }
42
+ /**
43
+ * Infer parent→child resource relationships from two signals already present
44
+ * in the endpoint data — no source code scanning required.
45
+ *
46
+ * Signal 1 — path nesting (always available):
47
+ * /collections/{id}/links → links depends on collections
48
+ *
49
+ * Signal 2 — request body FK fields (available when trace data is merged):
50
+ * POST /orders body: { product_id: "..." } → orders depends on products
51
+ *
52
+ * Returns a map of `dependent → Set<parent>`. Only confirmed, real-resource
53
+ * pairs are included. When no signal is found the map is empty, which tells
54
+ * the caller to fall back to heuristic pairing.
55
+ */
56
+ export function inferResourceRelationships(endpoints) {
57
+ const relationships = new Map();
58
+ const addRelationship = (dependent, parent) => {
59
+ if (dependent === parent)
60
+ return;
61
+ if (!isRealResource(dependent) || !isRealResource(parent))
62
+ return;
63
+ const deps = relationships.get(dependent) ?? new Set();
64
+ deps.add(parent);
65
+ relationships.set(dependent, deps);
66
+ };
67
+ // ── Signal 1: path nesting ──
68
+ // Pattern: /…/parentResource/{param}/childResource
69
+ for (const ep of endpoints) {
70
+ const segments = ep.path.split("/").filter(Boolean);
71
+ for (let i = 0; i + 2 < segments.length; i++) {
72
+ const seg = segments[i];
73
+ const paramSeg = segments[i + 1];
74
+ const childSeg = segments[i + 2];
75
+ if (!seg.startsWith("{") &&
76
+ paramSeg.startsWith("{") &&
77
+ !childSeg.startsWith("{") &&
78
+ !SKIP_SEGMENTS.has(seg) &&
79
+ !SKIP_SEGMENTS.has(childSeg)) {
80
+ addRelationship(childSeg, seg);
81
+ }
82
+ }
83
+ }
84
+ // ── Signal 2: FK fields in request body interactions ──
85
+ // Collect all known resource names first so we can validate FK targets.
86
+ const knownResources = new Set(endpoints.map(ep => extractResourceName(ep.path)).filter(Boolean));
87
+ for (const ep of endpoints) {
88
+ const resource = extractResourceName(ep.path);
89
+ if (!resource)
90
+ continue;
91
+ for (const m of ep.methods) {
92
+ if (typeof m === "string")
93
+ continue;
94
+ if (!["POST", "PUT", "PATCH"].includes(m.method))
95
+ continue;
96
+ for (const interaction of m.interactions ?? []) {
97
+ const body = interaction.request?.body;
98
+ if (!body || typeof body !== "object")
99
+ continue;
100
+ for (const key of Object.keys(body)) {
101
+ if (!key.endsWith("_id"))
102
+ continue;
103
+ const depSingular = key.slice(0, -3); // "product_id" → "product"
104
+ const depPlural = depSingular + "s"; // → "products"
105
+ // Only create relationship when the dependency actually exists as an endpoint
106
+ if (knownResources.has(depPlural)) {
107
+ addRelationship(resource, depPlural);
108
+ }
109
+ else if (knownResources.has(depSingular)) {
110
+ addRelationship(resource, depSingular);
111
+ }
112
+ }
113
+ }
114
+ }
115
+ }
116
+ return relationships;
117
+ }
118
+ export function draftScenariosFromEndpoints(endpoints, newEndpoints = []) {
13
119
  const scenarios = [];
14
120
  const resourceGroups = new Map();
15
121
  for (const ep of endpoints) {
16
122
  const segments = ep.path.split("/").filter(Boolean);
17
- const skipSet = new Set(["api", "v1", "v2", "v3", "public"]);
18
- const nonParamSegs = segments.filter(s => !s.startsWith("{") && !skipSet.has(s));
123
+ const nonParamSegs = segments.filter(s => !s.startsWith("{") && !SKIP_SEGMENTS.has(s));
19
124
  const resource = nonParamSegs[nonParamSegs.length - 1] || "unknown";
20
125
  const hasParam = /\{/.test(ep.path);
21
126
  const resourceSegIdx = segments.lastIndexOf(resource);
@@ -43,6 +148,9 @@ export function draftScenariosFromEndpoints(endpoints) {
43
148
  });
44
149
  }
45
150
  }
151
+ // ── Cross-resource integration scenarios ──
152
+ const relationships = inferResourceRelationships(endpoints);
153
+ const hasRelationships = relationships.size > 0;
46
154
  const creatableResources = Array.from(resourceGroups.keys()).filter(r => isRealResource(r) && resourceGroups.get(r).methods.has("POST"));
47
155
  const MAX_CROSS_RESOURCE = Math.min(Math.max(3, Math.floor(creatableResources.length / 2)), 8);
48
156
  let crossCount = 0;
@@ -50,58 +158,37 @@ export function draftScenariosFromEndpoints(endpoints) {
50
158
  for (let j = i + 1; j < creatableResources.length && crossCount < MAX_CROSS_RESOURCE; j++) {
51
159
  const r1 = creatableResources[i];
52
160
  const r2 = creatableResources[j];
53
- const g1 = resourceGroups.get(r1);
54
- const g2 = resourceGroups.get(r2);
55
- const steps = [];
56
- let order = 1;
57
- const singular1 = r1.replace(/s$/, "");
58
- const singular2 = r2.replace(/s$/, "");
59
- steps.push({
60
- order: order++, method: "POST", path: g1.basePath,
61
- description: `Create a ${singular1}`,
62
- interactionType: "success", expectedStatusCode: 201,
63
- });
64
- steps.push({
65
- order: order++, method: "POST", path: g2.basePath,
66
- description: `Create a ${singular2} referencing the ${singular1}`,
67
- interactionType: "success", expectedStatusCode: 201,
68
- chainsFrom: { sourceStep: 1, sourceField: `${singular1}_id`, sourceLocation: "body", targetParam: `${singular1}_id`, targetLocation: "body" },
69
- });
70
- if (g2.paramPath && g2.methods.has("GET")) {
71
- steps.push({
72
- order: order++, method: "GET", path: g2.paramPath,
73
- description: `Verify the ${singular2} references the correct ${singular1}`,
74
- interactionType: "success", expectedStatusCode: 200,
75
- });
161
+ if (hasRelationships) {
162
+ // Only pair resources with a detected relationship; skip unrelated ones.
163
+ const r2DependsOnR1 = relationships.get(r2)?.has(r1) || relationships.get(r2)?.has(singularize(r1));
164
+ const r1DependsOnR2 = relationships.get(r1)?.has(r2) || relationships.get(r1)?.has(singularize(r2));
165
+ if (!r2DependsOnR1 && !r1DependsOnR2)
166
+ continue;
167
+ // Use relationship direction: parent is the one that doesn't depend on the other.
168
+ const [parent, child] = r2DependsOnR1 ? [r1, r2] : [r2, r1];
169
+ const gParent = resourceGroups.get(parent);
170
+ const gChild = resourceGroups.get(child);
171
+ const singularParent = singularize(parent);
172
+ const singularChild = singularize(child);
173
+ scenarios.push(buildCrossResourceScenario(parent, child, gParent, gChild, singularParent, singularChild));
76
174
  }
77
- if (g2.paramPath && g2.methods.has("DELETE")) {
78
- steps.push({
79
- order: order++, method: "DELETE", path: g2.paramPath,
80
- description: `Clean up: delete the ${singular2}`,
81
- interactionType: "success", expectedStatusCode: 204,
82
- });
175
+ else {
176
+ // No relationship signals found — fall back to sequential pairing (existing behaviour).
177
+ const g1 = resourceGroups.get(r1);
178
+ const g2 = resourceGroups.get(r2);
179
+ scenarios.push(buildCrossResourceScenario(r1, r2, g1, g2, singularize(r1), singularize(r2)));
83
180
  }
84
- scenarios.push({
85
- scenarioName: `${r1}-${r2}-integration`,
86
- description: `Multi-resource integration: create ${singular1}, create ${singular2} linked to it, verify, clean up`,
87
- category: "workflow",
88
- priority: "high",
89
- steps,
90
- chainingKeys: [`${singular1}_id`, `${singular2}_id`, "id"],
91
- requiresAuth: true,
92
- estimatedComplexity: "complex",
93
- source: "code-inferred",
94
- });
95
181
  crossCount++;
96
182
  }
97
183
  }
184
+ // ── CRUD lifecycle scenarios ──
98
185
  for (const [resource, group] of resourceGroups) {
99
186
  const m = group.methods;
100
187
  if (!m.has("POST") || !m.has("GET") || !isRealResource(resource))
101
188
  continue;
102
189
  const steps = [];
103
190
  let order = 1;
104
- const singular = resource.replace(/s$/, "");
191
+ const singular = singularize(resource);
105
192
  steps.push({ order: order++, method: "POST", path: group.basePath, description: `Create a new ${singular}`, interactionType: "success", expectedStatusCode: 201 });
106
193
  if (group.paramPath)
107
194
  steps.push({ order: order++, method: "GET", path: group.paramPath, description: `Get the created ${singular} by ID`, interactionType: "success", expectedStatusCode: 200 });
@@ -119,13 +206,56 @@ export function draftScenariosFromEndpoints(endpoints) {
119
206
  requiresAuth: true,
120
207
  estimatedComplexity: "moderate",
121
208
  source: "code-inferred",
209
+ testType: "integration",
122
210
  });
123
211
  }
124
212
  scenarios.push(...draftUniqueConstraintScenarios(resourceGroups));
125
- scenarios.push(...draftCascadeDeleteScenarios(resourceGroups));
213
+ scenarios.push(...draftCascadeDeleteScenarios(resourceGroups, relationships));
126
214
  scenarios.push(...draftPermissionBoundaryScenarios(resourceGroups));
215
+ scenarios.push(...draftDiffDirectScenarios(newEndpoints, resourceGroups));
127
216
  return scenarios;
128
217
  }
218
+ function buildCrossResourceScenario(parent, child, gParent, gChild, singularParent, singularChild) {
219
+ const steps = [];
220
+ let order = 1;
221
+ steps.push({
222
+ order: order++, method: "POST", path: gParent.basePath,
223
+ description: `Create a ${singularParent}`,
224
+ interactionType: "success", expectedStatusCode: 201,
225
+ });
226
+ steps.push({
227
+ order: order++, method: "POST", path: gChild.basePath,
228
+ description: `Create a ${singularChild} referencing the ${singularParent}`,
229
+ interactionType: "success", expectedStatusCode: 201,
230
+ chainsFrom: { sourceStep: 1, sourceField: `${singularParent}_id`, sourceLocation: "body", targetParam: `${singularParent}_id`, targetLocation: "body" },
231
+ });
232
+ if (gChild.paramPath && gChild.methods.has("GET")) {
233
+ steps.push({
234
+ order: order++, method: "GET", path: gChild.paramPath,
235
+ description: `Verify the ${singularChild} references the correct ${singularParent}`,
236
+ interactionType: "success", expectedStatusCode: 200,
237
+ });
238
+ }
239
+ if (gChild.paramPath && gChild.methods.has("DELETE")) {
240
+ steps.push({
241
+ order: order++, method: "DELETE", path: gChild.paramPath,
242
+ description: `Clean up: delete the ${singularChild}`,
243
+ interactionType: "success", expectedStatusCode: 204,
244
+ });
245
+ }
246
+ return {
247
+ scenarioName: `${parent}-${child}-integration`,
248
+ description: `Multi-resource integration: create ${singularParent}, create ${singularChild} linked to it, verify, clean up`,
249
+ category: "workflow",
250
+ priority: "high",
251
+ steps,
252
+ chainingKeys: [`${singularParent}_id`, `${singularChild}_id`, "id"],
253
+ requiresAuth: true,
254
+ estimatedComplexity: "complex",
255
+ source: "code-inferred",
256
+ testType: "integration",
257
+ };
258
+ }
129
259
  export function draftUniqueConstraintScenarios(resourceGroups) {
130
260
  const scenarios = [];
131
261
  for (const [resource, group] of resourceGroups) {
@@ -133,7 +263,7 @@ export function draftUniqueConstraintScenarios(resourceGroups) {
133
263
  break;
134
264
  if (!group.methods.has("POST") || !isRealResource(resource))
135
265
  continue;
136
- const singular = resource.replace(/s$/, "");
266
+ const singular = singularize(resource);
137
267
  scenarios.push({
138
268
  scenarioName: `${resource}-unique-constraint`,
139
269
  description: `Verify unique constraint: create ${singular}, attempt duplicate creation, expect 409 Conflict`,
@@ -160,25 +290,41 @@ export function draftUniqueConstraintScenarios(resourceGroups) {
160
290
  requiresAuth: true,
161
291
  estimatedComplexity: "moderate",
162
292
  source: "code-inferred",
293
+ testType: "integration",
163
294
  });
164
295
  }
165
296
  return scenarios;
166
297
  }
167
- export function draftCascadeDeleteScenarios(resourceGroups) {
298
+ export function draftCascadeDeleteScenarios(resourceGroups, relationships = new Map()) {
168
299
  const scenarios = [];
169
- const creatableResources = Array.from(resourceGroups.keys())
170
- .filter(r => isRealResource(r) && resourceGroups.get(r).methods.has("POST") && resourceGroups.get(r).methods.has("DELETE"));
171
- for (let i = 0; i < creatableResources.length; i++) {
172
- for (let j = i + 1; j < creatableResources.length; j++) {
173
- const parent = creatableResources[i];
174
- const child = creatableResources[j];
300
+ const hasRelationships = relationships.size > 0;
301
+ const deletableResources = Array.from(resourceGroups.keys()).filter(r => isRealResource(r) && resourceGroups.get(r).methods.has("POST") && resourceGroups.get(r).methods.has("DELETE"));
302
+ for (let i = 0; i < deletableResources.length; i++) {
303
+ for (let j = i + 1; j < deletableResources.length; j++) {
304
+ if (scenarios.length >= MAX_DRAFTED_SCENARIOS_PER_CATEGORY)
305
+ break;
306
+ const r1 = deletableResources[i];
307
+ const r2 = deletableResources[j];
308
+ // Determine relationship direction: which is parent, which is child?
309
+ let parent, child;
310
+ if (hasRelationships) {
311
+ const r2DependsOnR1 = relationships.get(r2)?.has(r1) || relationships.get(r2)?.has(singularize(r1));
312
+ const r1DependsOnR2 = relationships.get(r1)?.has(r2) || relationships.get(r1)?.has(singularize(r2));
313
+ if (!r2DependsOnR1 && !r1DependsOnR2)
314
+ continue; // no detected relationship — skip
315
+ [parent, child] = r2DependsOnR1 ? [r1, r2] : [r2, r1];
316
+ }
317
+ else {
318
+ // Fallback: treat first as parent (existing behaviour)
319
+ [parent, child] = [r1, r2];
320
+ }
175
321
  const gParent = resourceGroups.get(parent);
176
322
  const gChild = resourceGroups.get(child);
177
323
  if (!gParent.paramPath || !gChild.paramPath)
178
324
  continue;
179
- const singularParent = parent.replace(/s$/, "");
180
- const singularChild = child.replace(/s$/, "");
181
- // Scenario A: cascade delete succeeds child is removed with parent
325
+ const singularParent = singularize(parent);
326
+ const singularChild = singularize(child);
327
+ // Scenario A: cascade delete — parent delete removes child
182
328
  scenarios.push({
183
329
  scenarioName: `${parent}-${child}-cascade-delete`,
184
330
  description: `Verify cascade delete: create ${singularParent}, create ${singularChild} referencing it, delete ${singularParent}, verify ${singularChild} is also deleted`,
@@ -211,43 +357,45 @@ export function draftCascadeDeleteScenarios(resourceGroups) {
211
357
  requiresAuth: true,
212
358
  estimatedComplexity: "complex",
213
359
  source: "code-inferred",
360
+ testType: "integration",
214
361
  });
215
362
  // Scenario B: delete blocked by referential integrity — parent cannot be removed while children exist
216
- scenarios.push({
217
- scenarioName: `${parent}-${child}-delete-blocked`,
218
- description: `Verify referential integrity: create ${singularParent} with ${singularChild}, attempt to delete ${singularParent}, expect rejection (409/422), verify ${singularChild} is intact`,
219
- category: "data_integrity",
220
- priority: "high",
221
- steps: [
222
- {
223
- order: 1, method: "POST", path: gParent.basePath,
224
- description: `Create a ${singularParent}`,
225
- interactionType: "success", expectedStatusCode: 201,
226
- },
227
- {
228
- order: 2, method: "POST", path: gChild.basePath,
229
- description: `Create a ${singularChild} referencing the ${singularParent}`,
230
- interactionType: "success", expectedStatusCode: 201,
231
- chainsFrom: { sourceStep: 1, sourceField: `${singularParent}_id`, sourceLocation: "body", targetParam: `${singularParent}_id`, targetLocation: "body" },
232
- },
233
- {
234
- order: 3, method: "DELETE", path: gParent.paramPath,
235
- description: `Attempt to delete the ${singularParent} — expect 409 Conflict or 422 if referential integrity blocks it`,
236
- interactionType: "error", expectedStatusCode: 409,
237
- },
238
- {
239
- order: 4, method: "GET", path: gChild.paramPath,
240
- description: `Verify ${singularChild} is still intact after blocked delete — expect 200`,
241
- interactionType: "success", expectedStatusCode: 200,
242
- },
243
- ],
244
- chainingKeys: [`${singularParent}_id`, `${singularChild}_id`, "id"],
245
- requiresAuth: true,
246
- estimatedComplexity: "complex",
247
- source: "code-inferred",
248
- });
249
- if (scenarios.length >= MAX_DRAFTED_SCENARIOS_PER_CATEGORY)
250
- break;
363
+ if (scenarios.length < MAX_DRAFTED_SCENARIOS_PER_CATEGORY) {
364
+ scenarios.push({
365
+ scenarioName: `${parent}-${child}-delete-blocked`,
366
+ description: `Verify referential integrity: create ${singularParent} with ${singularChild}, attempt to delete ${singularParent}, expect rejection (409/422), verify ${singularChild} is intact`,
367
+ category: "data_integrity",
368
+ priority: "high",
369
+ steps: [
370
+ {
371
+ order: 1, method: "POST", path: gParent.basePath,
372
+ description: `Create a ${singularParent}`,
373
+ interactionType: "success", expectedStatusCode: 201,
374
+ },
375
+ {
376
+ order: 2, method: "POST", path: gChild.basePath,
377
+ description: `Create a ${singularChild} referencing the ${singularParent}`,
378
+ interactionType: "success", expectedStatusCode: 201,
379
+ chainsFrom: { sourceStep: 1, sourceField: `${singularParent}_id`, sourceLocation: "body", targetParam: `${singularParent}_id`, targetLocation: "body" },
380
+ },
381
+ {
382
+ order: 3, method: "DELETE", path: gParent.paramPath,
383
+ description: `Attempt to delete the ${singularParent} — expect 409 Conflict or 422 if referential integrity blocks it`,
384
+ interactionType: "error", expectedStatusCode: 409,
385
+ },
386
+ {
387
+ order: 4, method: "GET", path: gChild.paramPath,
388
+ description: `Verify ${singularChild} is still intact after blocked delete — expect 200`,
389
+ interactionType: "success", expectedStatusCode: 200,
390
+ },
391
+ ],
392
+ chainingKeys: [`${singularParent}_id`, `${singularChild}_id`, "id"],
393
+ requiresAuth: true,
394
+ estimatedComplexity: "complex",
395
+ source: "code-inferred",
396
+ testType: "integration",
397
+ });
398
+ }
251
399
  }
252
400
  if (scenarios.length >= MAX_DRAFTED_SCENARIOS_PER_CATEGORY)
253
401
  break;
@@ -261,7 +409,7 @@ export function draftPermissionBoundaryScenarios(resourceGroups) {
261
409
  break;
262
410
  if (!isRealResource(resource))
263
411
  continue;
264
- const singular = resource.replace(/s$/, "");
412
+ const singular = singularize(resource);
265
413
  const protectedMethods = ["POST", "PUT", "PATCH", "DELETE"].filter(m => group.methods.has(m));
266
414
  if (protectedMethods.length === 0)
267
415
  continue;
@@ -283,6 +431,7 @@ export function draftPermissionBoundaryScenarios(resourceGroups) {
283
431
  requiresAuth: false,
284
432
  estimatedComplexity: "simple",
285
433
  source: "code-inferred",
434
+ testType: "contract",
286
435
  });
287
436
  if (group.paramPath && group.methods.has("GET") && group.methods.has("POST") && scenarios.length < MAX_DRAFTED_SCENARIOS_PER_CATEGORY) {
288
437
  scenarios.push({
@@ -306,8 +455,184 @@ export function draftPermissionBoundaryScenarios(resourceGroups) {
306
455
  requiresAuth: true,
307
456
  estimatedComplexity: "moderate",
308
457
  source: "code-inferred",
458
+ testType: "integration",
459
+ });
460
+ }
461
+ }
462
+ return scenarios;
463
+ }
464
+ // ── Diff-direct scenario drafting ──
465
+ // Generates targeted scenarios for each new endpoint in the branch diff.
466
+ // These get category "new_endpoint" which maps to the CRITICAL priority tier
467
+ // in the scorer, so they always fill the GENERATE slots before any structural
468
+ // scenario — aligning the plan with what the LLM naturally wants to do anyway.
469
+ /**
470
+ * Build the minimum steps for a diff-direct integration scenario.
471
+ * Prerequisite resources (e.g. POST /products before POST /orders) are NOT
472
+ * computed here — the execution plan instructs the LLM to discover them from
473
+ * source code (FK fields in request bodies) and prepend the steps itself.
474
+ */
475
+ function diffDirectIntegration(method, resource, singular, group) {
476
+ const steps = [];
477
+ if (method === "POST") {
478
+ steps.push({
479
+ order: 1, method: "POST", path: group.basePath,
480
+ description: `Create a ${singular} — verify 201 and response fields`,
481
+ interactionType: "success", expectedStatusCode: 201,
482
+ });
483
+ if (group.paramPath && group.methods.has("GET")) {
484
+ steps.push({
485
+ order: 2, method: "GET", path: group.paramPath,
486
+ description: `Get the created ${singular} — verify fields match`,
487
+ interactionType: "success", expectedStatusCode: 200,
488
+ chainsFrom: { sourceStep: 1, sourceField: "id", sourceLocation: "body", targetParam: `${singular}_id`, targetLocation: "path" },
489
+ });
490
+ }
491
+ }
492
+ else {
493
+ // PUT/PATCH/DELETE: create the resource first so it exists
494
+ if (group.methods.has("POST")) {
495
+ steps.push({
496
+ order: 1, method: "POST", path: group.basePath,
497
+ description: `Create a ${singular} to be ${method === "DELETE" ? "deleted" : "updated"}`,
498
+ interactionType: "success", expectedStatusCode: 201,
309
499
  });
310
500
  }
501
+ const targetPath = group.paramPath ?? group.basePath;
502
+ const sourceStep = steps.length; // 1 if create step exists, 0 otherwise
503
+ steps.push({
504
+ order: steps.length + 1, method, path: targetPath,
505
+ description: method === "DELETE"
506
+ ? `DELETE the ${singular} — expect 204 No Content`
507
+ : `${method} the ${singular} with valid data — verify updated response fields`,
508
+ interactionType: "success", expectedStatusCode: method === "DELETE" ? 204 : 200,
509
+ ...(sourceStep > 0 ? { chainsFrom: { sourceStep, sourceField: "id", sourceLocation: "body", targetParam: `${singular}_id`, targetLocation: "path" } } : {}),
510
+ });
511
+ if (method === "DELETE" && group.paramPath && group.methods.has("GET")) {
512
+ steps.push({
513
+ order: steps.length + 1, method: "GET", path: group.paramPath,
514
+ description: `Verify the ${singular} is gone — expect 404`,
515
+ interactionType: "error", expectedStatusCode: 404,
516
+ });
517
+ }
518
+ }
519
+ const suffix = method === "DELETE" ? "delete" : method.toLowerCase();
520
+ return {
521
+ scenarioName: `${resource}-${suffix}-new-endpoint-happy-path`,
522
+ description: `New endpoint happy path: discover prerequisites from source code, then ${steps.map(s => `${s.method} ${s.path}`).join(" → ")}`,
523
+ category: "new_endpoint",
524
+ priority: "high",
525
+ steps,
526
+ chainingKeys: ["id", `${singular}_id`],
527
+ requiresAuth: true,
528
+ estimatedComplexity: "complex",
529
+ source: "code-inferred",
530
+ testType: "integration",
531
+ };
532
+ }
533
+ function diffDirectContract(method, path, resource) {
534
+ const expectedStatus = method === "POST" ? 201 : method === "DELETE" ? 204 : 200;
535
+ return {
536
+ scenarioName: `${resource}-${method.toLowerCase()}-new-endpoint-contract`,
537
+ description: `Contract: ${method} ${path} returns a schema-conformant response`,
538
+ category: "new_endpoint",
539
+ priority: "high",
540
+ steps: [{ order: 1, method, path, description: `${method} ${path} with valid input — verify response schema`, interactionType: "success", expectedStatusCode: expectedStatus }],
541
+ chainingKeys: [],
542
+ requiresAuth: true,
543
+ estimatedComplexity: "simple",
544
+ source: "code-inferred",
545
+ testType: "contract",
546
+ };
547
+ }
548
+ function diffDirectNotFound(method, path, resource, singular) {
549
+ return {
550
+ scenarioName: `${resource}-${method.toLowerCase()}-new-endpoint-not-found`,
551
+ description: `Edge case: ${method} ${path} with a non-existent ${singular} ID returns 404`,
552
+ category: "new_endpoint",
553
+ priority: "high",
554
+ steps: [{ order: 1, method, path, description: `${method} ${path} with non-existent ${singular} ID — expect 404 Not Found`, interactionType: "error", expectedStatusCode: 404 }],
555
+ chainingKeys: [],
556
+ requiresAuth: true,
557
+ estimatedComplexity: "simple",
558
+ source: "code-inferred",
559
+ testType: "contract",
560
+ };
561
+ }
562
+ function diffDirectValidation(method, path, resource) {
563
+ return {
564
+ scenarioName: `${resource}-${method.toLowerCase()}-new-endpoint-validation`,
565
+ description: `Validation: ${method} ${path} with missing required fields returns 422`,
566
+ category: "new_endpoint",
567
+ priority: "high",
568
+ steps: [{ order: 1, method, path, description: `${method} ${path} with empty/missing required fields — expect 422`, interactionType: "error", expectedStatusCode: 422 }],
569
+ chainingKeys: [],
570
+ requiresAuth: true,
571
+ estimatedComplexity: "simple",
572
+ source: "code-inferred",
573
+ testType: "contract",
574
+ };
575
+ }
576
+ /**
577
+ * Draft scenarios that directly test each new endpoint in the branch diff.
578
+ *
579
+ * For each new endpoint, up to 3 scenarios are produced:
580
+ * PUT/PATCH → integration happy path (prereqs + create + PUT), contract, not-found
581
+ * POST → integration happy path (prereqs + POST + verify GET), contract, validation error
582
+ * DELETE → integration lifecycle (create → DELETE → verify 404), contract
583
+ * GET /{id} → contract, not-found
584
+ *
585
+ * All carry category "new_endpoint" → CRITICAL priority tier so they always
586
+ * rank above structural candidates and occupy the GENERATE slots.
587
+ */
588
+ export function draftDiffDirectScenarios(newEndpoints, resourceGroups) {
589
+ if (newEndpoints.length === 0)
590
+ return [];
591
+ const scenarios = [];
592
+ const seen = new Set();
593
+ // Group flat list by path
594
+ const grouped = new Map();
595
+ for (const ep of newEndpoints) {
596
+ const methods = grouped.get(ep.path) ?? new Set();
597
+ methods.add(ep.method.toUpperCase());
598
+ grouped.set(ep.path, methods);
599
+ }
600
+ for (const [epPath, methods] of grouped) {
601
+ const resource = extractResourceName(epPath);
602
+ if (!resource)
603
+ continue;
604
+ const group = resourceGroups.get(resource);
605
+ if (!group)
606
+ continue;
607
+ const singular = singularize(resource);
608
+ const hasPathParam = epPath.includes("{");
609
+ const add = (s) => {
610
+ if (!seen.has(s.scenarioName)) {
611
+ seen.add(s.scenarioName);
612
+ scenarios.push(s);
613
+ }
614
+ };
615
+ for (const method of methods) {
616
+ if (method === "PUT" || method === "PATCH") {
617
+ add(diffDirectIntegration(method, resource, singular, group));
618
+ add(diffDirectContract(method, epPath, resource));
619
+ if (hasPathParam)
620
+ add(diffDirectNotFound(method, epPath, resource, singular));
621
+ }
622
+ else if (method === "POST") {
623
+ add(diffDirectIntegration(method, resource, singular, group));
624
+ add(diffDirectContract(method, epPath, resource));
625
+ add(diffDirectValidation(method, epPath, resource));
626
+ }
627
+ else if (method === "DELETE") {
628
+ add(diffDirectIntegration(method, resource, singular, group));
629
+ add(diffDirectContract(method, epPath, resource));
630
+ }
631
+ else if (method === "GET" && hasPathParam) {
632
+ add(diffDirectContract(method, epPath, resource));
633
+ add(diffDirectNotFound(method, epPath, resource, singular));
634
+ }
635
+ }
311
636
  }
312
637
  return scenarios;
313
638
  }