@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
@@ -1,4 +1,4 @@
1
- import { callSteps, isUIPlannedTest, stepRouteKey, subjectStep } from "../subjectStep.js";
1
+ import { callSteps, isUIPlannedTest, stepRouteKey, subjectStep, } from "../subjectStep.js";
2
2
  import { STATED_DIFFERENCE_CONTRACT } from "../verifierContracts.js";
3
3
  /** What two planned tests must share before this asks how they differ: the method and
4
4
  * path of their subject step. UI planned tests are OUT — two tests of one screen are
@@ -20,7 +20,10 @@ function nameKey(raw) {
20
20
  * difference, and the pair's own objection is the question about it — naming the
21
21
  * bad reference too would ask twice about one mistake. */
22
22
  function differenceStated(a, b) {
23
- const states = (from, to) => (from.declarations?.differsFrom ?? []).some((entry) => nameKey(entry?.plannedTestId) === nameKey(to.plannedTestId) && (entry?.difference ?? "").trim().length > 0);
23
+ const states = (from, to) => (Array.isArray(from?.declarations?.differsFrom)
24
+ ? from.declarations.differsFrom
25
+ : []).some((entry) => nameKey(entry.plannedTestId) === nameKey(to?.plannedTestId) &&
26
+ String(entry.difference ?? "").trim().length > 0);
24
27
  return states(a, b) || states(b, a);
25
28
  }
26
29
  /** One objection per `differsFrom` entry naming no planned test in the plan. A
@@ -29,12 +32,16 @@ function differenceStated(a, b) {
29
32
  * question the agent believes it already answered, and it would answer it again
30
33
  * the same way. A blank reference names nothing either and is one of these. */
31
34
  function unknownPartnerObjections(plannedTests) {
32
- const known = new Set(plannedTests.map((plannedTest) => nameKey(plannedTest?.plannedTestId)).filter(Boolean));
35
+ const known = new Set(plannedTests
36
+ .map((plannedTest) => nameKey(plannedTest.plannedTestId))
37
+ .filter(Boolean));
33
38
  const seen = new Set();
34
39
  const objections = [];
35
40
  for (const plannedTest of plannedTests) {
36
- for (const entry of plannedTest?.declarations?.differsFrom ?? []) {
37
- const raw = entry?.plannedTestId;
41
+ for (const entry of plannedTest.declarations.differsFrom ?? []) {
42
+ const raw = entry.plannedTestId;
43
+ // A non-string names nothing, and objecting to it put an empty reference in
44
+ // the objection's own id.
38
45
  if (typeof raw !== "string")
39
46
  continue;
40
47
  const reference = nameKey(raw);
@@ -42,7 +49,7 @@ function unknownPartnerObjections(plannedTests) {
42
49
  continue;
43
50
  // One objection per (planned test, reference): the same bad name written by
44
51
  // two planned tests is two mistakes, and each owes its own answer.
45
- const key = `${nameKey(plannedTest?.plannedTestId)}\u0000${reference}`;
52
+ const key = `${nameKey(plannedTest.plannedTestId)}\u0000${reference}`;
46
53
  if (seen.has(key))
47
54
  continue;
48
55
  seen.add(key);
@@ -70,7 +77,7 @@ function unstatedSubjectObjections(plannedTests) {
70
77
  const calls = callSteps(plannedTest);
71
78
  if (calls.length === 0 || subjectStep(plannedTest))
72
79
  continue;
73
- const declared = plannedTest?.declarations?.stepUnderTest;
80
+ const declared = plannedTest.declarations.stepUnderTest;
74
81
  objections.push({
75
82
  objectionId: `statedDifference:subjectNotStated:${plannedTest.plannedTestId}`,
76
83
  verifier: "statedDifference",
@@ -91,7 +98,7 @@ function unstatedSubjectObjections(plannedTests) {
91
98
  export const statedDifference = {
92
99
  name: "statedDifference",
93
100
  run(registration, _ctx) {
94
- const plannedTests = registration.plannedTests ?? [];
101
+ const plannedTests = registration.plannedTests;
95
102
  /** Planned-test id -> route -> the partners on that route it has NOT explained,
96
103
  * recorded while the pair is known to be unexplained. Deriving it afterwards
97
104
  * from the route would list partners this planned test already explained. */
@@ -14,7 +14,9 @@ function field(value) {
14
14
  * letter case, and the repeated spaces an HTML render collapses — and nothing
15
15
  * about what it says: a shortened or paraphrased name is not a copy. */
16
16
  function folded(value) {
17
- return typeof value === "string" ? value.trim().replace(/\s+/g, " ").toLowerCase() : "";
17
+ return typeof value === "string"
18
+ ? value.trim().replace(/\s+/g, " ").toLowerCase()
19
+ : "";
18
20
  }
19
21
  function context(value) {
20
22
  return Array.isArray(value) ? value.map(folded).filter(Boolean) : [];
@@ -75,7 +77,12 @@ function addTo(index, key, element) {
75
77
  index.set(key, [element]);
76
78
  }
77
79
  function poolOf(captured) {
78
- const pool = { byTestId: new Map(), byStableId: new Map(), byRow: new Map(), byName: new Map() };
80
+ const pool = {
81
+ byTestId: new Map(),
82
+ byStableId: new Map(),
83
+ byRow: new Map(),
84
+ byName: new Map(),
85
+ };
79
86
  for (const raw of captured) {
80
87
  const element = fieldsOf(raw);
81
88
  addTo(pool.byTestId, element.testId, element);
@@ -101,18 +108,28 @@ function grounded(declared, pool) {
101
108
  /** Identity for the duplicate check: two entries agreeing on every field name
102
109
  * one element, so the second says nothing the first did not. */
103
110
  function identityKey(element) {
104
- return JSON.stringify([element.role, element.name, element.testId, element.stableId, element.contextText]);
111
+ return JSON.stringify([
112
+ element.role,
113
+ element.name,
114
+ element.testId,
115
+ element.stableId,
116
+ element.contextText,
117
+ ]);
105
118
  }
106
119
  /** How an element reads back in an objection, in the agent's own spelling. */
107
120
  function label(raw) {
108
121
  const element = (raw && typeof raw === "object" ? raw : {});
109
122
  const parts = [
110
123
  element.role ? `role "${String(element.role).trim()}"` : "",
111
- element.accessibleName ? `name "${String(element.accessibleName).trim()}"` : "",
124
+ element.accessibleName
125
+ ? `name "${String(element.accessibleName).trim()}"`
126
+ : "",
112
127
  element.testId ? `testId "${String(element.testId).trim()}"` : "",
113
128
  element.stableId ? `stableId "${String(element.stableId).trim()}"` : "",
114
129
  ].filter(Boolean);
115
- return parts.length > 0 ? parts.join(" ") : "an entry with no role, name or identifier";
130
+ return parts.length > 0
131
+ ? parts.join(" ")
132
+ : "an entry with no role, name or identifier";
116
133
  }
117
134
  /** A url split into the part before the fragment and the fragment WHEN it is a
118
135
  * route (`#/…`). An ordinary anchor comes back as an empty route and is
@@ -123,7 +140,10 @@ function splitHashRoute(raw) {
123
140
  if (hash < 0)
124
141
  return { base: value, route: "" };
125
142
  const fragment = value.slice(hash);
126
- return { base: value.slice(0, hash), route: fragment.startsWith("#/") ? fragment.replace(/\/+$/, "") : "" };
143
+ return {
144
+ base: value.slice(0, hash),
145
+ route: fragment.startsWith("#/") ? fragment.replace(/\/+$/, "") : "",
146
+ };
127
147
  }
128
148
  /** The path half of a url. The ROOT stays `/` rather than folding to empty, or a
129
149
  * page named by its host alone would have no path to match on and the check
@@ -141,16 +161,26 @@ function urlPath(raw) {
141
161
  return new URL(base).pathname.replace(/\/+$/, "") || "/";
142
162
  }
143
163
  catch {
144
- return base.startsWith("/") ? base.split("?")[0].replace(/\/+$/, "") || "/" : "";
164
+ return base.startsWith("/")
165
+ ? base.split("?")[0].replace(/\/+$/, "") || "/"
166
+ : "";
145
167
  }
146
168
  }
147
169
  /** The spellings of the machine the run is on: a capture at `127.0.0.1` and a
148
170
  * page url at `localhost` are the same page. */
149
- const LOOPBACK_HOSTS = new Set(["localhost", "127.0.0.1", "[::1]", "::1", "0.0.0.0"]);
171
+ const LOOPBACK_HOSTS = new Set([
172
+ "localhost",
173
+ "127.0.0.1",
174
+ "[::1]",
175
+ "::1",
176
+ "0.0.0.0",
177
+ ]);
150
178
  /** The host half of a url, empty for a path-only one. Read so a wrong host
151
179
  * cannot ground an element on another service's capture. */
152
180
  function urlHost(raw) {
153
- const value = String(raw ?? "").trim().split("#")[0];
181
+ const value = String(raw ?? "")
182
+ .trim()
183
+ .split("#")[0];
154
184
  if (!value)
155
185
  return "";
156
186
  try {
@@ -175,7 +205,7 @@ function elementsForPage(captures, url) {
175
205
  const pool = captures.filter((capture) => urlPath(capture.url) === path && (!host || urlHost(capture.url) === host));
176
206
  if (pool.length === 0)
177
207
  return undefined;
178
- return poolOf(pool.flatMap((capture) => (Array.isArray(capture.elements) ? capture.elements : [])));
208
+ return poolOf(pool.flatMap((capture) => Array.isArray(capture.elements) ? capture.elements : []));
179
209
  }
180
210
  /** How many elements this run captured, across every page. The exemption below
181
211
  * reads this and never `captures.length`: a capture object that holds nothing
@@ -203,10 +233,12 @@ function capturedPages(captures) {
203
233
  * for. A guard on `data-cy` or `data-qa` reaches the plan with `testId` null and
204
234
  * nothing else that carries the pair, so this cannot recognise it. */
205
235
  function removedTestIds(ctx) {
206
- const removed = Array.isArray(ctx?.removedUiElements) ? ctx.removedUiElements : [];
236
+ const removed = Array.isArray(ctx?.removedUiElements)
237
+ ? ctx.removedUiElements
238
+ : [];
207
239
  return new Set(removed
208
- .filter((item) => field(item?.attribute).toLowerCase() === "data-testid")
209
- .map((item) => field(item?.value))
240
+ .filter((item) => field(item.attribute).toLowerCase() === "data-testid")
241
+ .map((item) => field(item.value))
210
242
  .filter(Boolean));
211
243
  }
212
244
  /** An objection names everything it saw. It used to stop at eight and say "and
@@ -223,15 +255,17 @@ export const uiElementGrounded = {
223
255
  name: "uiElementGrounded",
224
256
  run(registration, ctx) {
225
257
  const objections = [];
226
- const captures = Array.isArray(ctx.uiCaptures) ? ctx.uiCaptures.filter((capture) => capture && typeof capture === "object") : [];
258
+ const captures = Array.isArray(ctx.uiCaptures)
259
+ ? ctx.uiCaptures.filter((capture) => capture && typeof capture === "object")
260
+ : [];
227
261
  const pools = new Map();
228
262
  const removedIds = removedTestIds(ctx);
229
263
  for (const plannedTest of registration.plannedTests ?? []) {
230
264
  if (!isUIPlannedTest(plannedTest))
231
265
  continue;
232
- const raw = plannedTest.declarations?.elements?.items;
266
+ const raw = plannedTest.declarations.elements?.items;
233
267
  const declared = Array.isArray(raw) ? raw : [];
234
- const url = String(plannedTest.declarations?.elements?.pageUrl ?? "").trim();
268
+ const url = String(plannedTest.declarations.elements?.pageUrl ?? "").trim();
235
269
  if (declared.length === 0) {
236
270
  // A run that saw nothing cannot ask this: standalone and IDE use store no
237
271
  // digest and a backend-only run takes none. The boundary is the ELEMENT
@@ -2,7 +2,7 @@ import * as fs from "fs";
2
2
  import { ResourceTemplate, } from "@modelcontextprotocol/sdk/server/mcp.js";
3
3
  import { StateManager, getSessionFilePath, getRegisteredSessions, hasSessionData, getSessionData, normalizeRecommendationState, } from "../utils/AnalysisStateManager.js";
4
4
  import { logger } from "../utils/logger.js";
5
- import { AnalysisScope, } from "../types/RepositoryAnalysis.js";
5
+ import { AnalysisScope } from "../types/RepositoryAnalysis.js";
6
6
  export const ANALYSIS_URI_PREFIX = "skyramp://analysis";
7
7
  /**
8
8
  * Register MCP Resources for analysis data access.
@@ -25,7 +25,9 @@ export function registerAnalysisResources(server) {
25
25
  if (hasSessionData(sessionId)) {
26
26
  const memData = getSessionData(sessionId);
27
27
  if (memData?.analysis) {
28
- logger.debug("Loaded analysis from process memory for resource", { sessionId });
28
+ logger.debug("Loaded analysis from process memory for resource", {
29
+ sessionId,
30
+ });
29
31
  return memData;
30
32
  }
31
33
  }
@@ -125,7 +127,9 @@ export function registerAnalysisResources(server) {
125
127
  {
126
128
  uri: uri.href,
127
129
  mimeType: "application/json",
128
- text: JSON.stringify({ message: "No branch diff context (analysis scope was full_repo)." }, null, 2),
130
+ text: JSON.stringify({
131
+ message: "No branch diff context (analysis scope was full_repo).",
132
+ }, null, 2),
129
133
  },
130
134
  ],
131
135
  };
@@ -5,10 +5,12 @@ export function registerProgressResource(server) {
5
5
  description: "Maps Skyramp MCP tool names to testbot progress phases.",
6
6
  mimeType: "application/json",
7
7
  }, () => ({
8
- contents: [{
8
+ contents: [
9
+ {
9
10
  uri: "skyramp://progress/tool-phases",
10
11
  mimeType: "application/json",
11
12
  text: JSON.stringify(TOOL_PHASE_MAP),
12
- }],
13
+ },
14
+ ],
13
15
  }));
14
16
  }
@@ -4,7 +4,8 @@ import { resourceText } from "../utils/utils.js";
4
4
  import { AnalyticsService } from "../services/AnalyticsService.js";
5
5
  import { getAdaptWorkflowPrompt } from "../prompts/sut-setup/modes/adaptWorkflowPrompt.js";
6
6
  import { getDockerComposePrompt } from "../prompts/sut-setup/modes/dockerComposePrompt.js";
7
- import { SutSetupMode } from "../prompts/sut-setup/shared.js";
7
+ import { SutSetupMode, } from "../prompts/sut-setup/shared.js";
8
+ import { getLocalRepositoryInfo } from "../utils/telemetry.js";
8
9
  export function registerSutSetupResource(server) {
9
10
  logger.info("Registering SUT setup resource");
10
11
  // RFC 6570 {+rest} (reserved expansion) captures the entire query string
@@ -19,8 +20,25 @@ export function registerSutSetupResource(server) {
19
20
  }, async (uri) => {
20
21
  const param = (name, fallback) => uri.searchParams.get(name) ?? fallback;
21
22
  const mode = param("sutSetupMode", SutSetupMode.None);
23
+ const repositoryPath = param("repositoryPath", ".");
24
+ // The released action sends no `repository` on this URI at all. Read the
25
+ // same thing it reads for the testbot URI — the origin remote of this very
26
+ // checkout — so the two names can never disagree.
27
+ // TODO: drop the fallback once a released action sends it here.
28
+ let repository = (uri.searchParams.get("repository") ?? "").trim();
29
+ // Mode "none" returns a fixed string that names no repository.
30
+ if (mode !== SutSetupMode.None) {
31
+ if (!repository) {
32
+ repository =
33
+ (await getLocalRepositoryInfo(repositoryPath)).repository ?? "";
34
+ }
35
+ if (!repository) {
36
+ return resourceText(uri.toString(), `repository is required: pass the checkout's owner/repo on the resource URI, or run where ${repositoryPath} has an origin remote that names one`);
37
+ }
38
+ }
22
39
  const args = {
23
- repositoryPath: param("repositoryPath", "."),
40
+ repositoryPath,
41
+ repository,
24
42
  sutSetupMode: mode,
25
43
  sutSourceWorkflowFile: param("sutSourceWorkflowFile", ""),
26
44
  sutSourceDockerComposeFile: param("sutSourceDockerComposeFile", ""),
@@ -3,6 +3,8 @@ import { logger } from "../utils/logger.js";
3
3
  import { AnalyticsService } from "../services/AnalyticsService.js";
4
4
  import { getTestbotPrompt, parseRelatedRepositories, } from "../prompts/testbot/testbot-prompts.js";
5
5
  import { readWorkspaceServices } from "../prompts/prompt-utils.js";
6
+ import { getLocalRepositoryInfo } from "../utils/telemetry.js";
7
+ import { parseMaxFixAttemptsArg } from "../utils/fixAttempts.js";
6
8
  export function registerTestbotResource(server) {
7
9
  logger.info("Registering testbot resource");
8
10
  // RFC 6570 {+rest} (reserved expansion) captures the entire query string
@@ -35,6 +37,17 @@ export function registerTestbotResource(server) {
35
37
  };
36
38
  const prNum = intParam("prNumber");
37
39
  const repositoryPath = param("repositoryPath", ".");
40
+ // Required, like the prompt's own argument. A blank one would render an
41
+ // empty <REPOSITORY> block and tell the agent to attribute to nothing.
42
+ // The released action sends `primaryRepo` only on a multi-repo run, so a
43
+ // single-repo run names nothing. Read the same thing the action reads —
44
+ // the origin remote of this very checkout — so the two can never disagree.
45
+ // TODO: drop the fallback once a released action sends it on every run.
46
+ const primaryRepo = (uri.searchParams.get("primaryRepo") ?? "").trim() ||
47
+ (await getLocalRepositoryInfo(repositoryPath)).repository;
48
+ if (!primaryRepo) {
49
+ throw new Error(`primaryRepo is required: pass the primary checkout's owner/repo on the resource URI, or run where ${repositoryPath} has an origin remote that names one`);
50
+ }
38
51
  const services = await readWorkspaceServices(repositoryPath);
39
52
  const prompt = getTestbotPrompt({
40
53
  prTitle: param("prTitle", ""),
@@ -47,11 +60,16 @@ export function registerTestbotResource(server) {
47
60
  uiCredentials: uri.searchParams.get("uiCredentials") || undefined,
48
61
  testsRepoDir: uri.searchParams.get("testsRepoDir") || undefined,
49
62
  relatedRepositories: parseRelatedRepositories(uri.searchParams.get("relatedRepositories") || undefined),
50
- primaryRepo: uri.searchParams.get("primaryRepo") || undefined,
63
+ primaryRepo,
51
64
  // Plan-only eval lane (SKYR-3879): recommendation phase only, nothing
52
65
  // generated or executed. Same accepted spellings as the prompt schema.
53
66
  planOnly: ["true", "1"].includes(uri.searchParams.get("planOnly") ?? ""),
54
67
  language: uri.searchParams.get("language") || undefined,
68
+ // Fix-and-rerun attempt cap (SKYR-4460): the shared parser, so an unusable
69
+ // or out-of-range value reads as unset here and on the prompt alike. Named
70
+ // "perTest…" on the wire: the URI is in the agent's context, and a bare
71
+ // "maxFixAttempts" reads as a run-wide total.
72
+ maxFixAttempts: parseMaxFixAttemptsArg(uri.searchParams.get("perTestMaxFixAttempts") ?? undefined),
55
73
  });
56
74
  AnalyticsService.pushMCPToolEvent("skyramp_testbot_prompt", undefined, {}).catch(() => { });
57
75
  // The URI WITHOUT its query string. The agent reads this line above the
@@ -35,7 +35,9 @@ async function safePushToolEvent(entryPoint, toolName, errorMessage, params) {
35
35
  await withTimeout(pushToolEvent(entryPoint, toolName, errorMessage, params), ANALYTICS_TIMEOUT_MS, "pushToolEvent");
36
36
  }
37
37
  catch (error) {
38
- logger.error("safePushToolEvent failed", { error: error instanceof Error ? error.message : String(error) });
38
+ logger.error("safePushToolEvent failed", {
39
+ error: error instanceof Error ? error.message : String(error),
40
+ });
39
41
  // Swallow — analytics must never crash the server.
40
42
  }
41
43
  }
@@ -49,10 +49,8 @@ export class ScenarioGenerationService {
49
49
  const statusCode = params.statusCode ?? inferExpectedStatus(method);
50
50
  const requestBody = params.requestBody ||
51
51
  (method === "GET" || method === "DELETE" ? "" : "{}");
52
- const responseHeaders = params.responseHeaders
53
- || { "Content-Type": ["application/json"] };
54
- const isJsonResponse = (responseHeaders["Content-Type"] || [])
55
- .some(v => v.includes("application/json"));
52
+ const responseHeaders = params.responseHeaders || { "Content-Type": ["application/json"] };
53
+ const isJsonResponse = (responseHeaders["Content-Type"] || []).some((v) => v.includes("application/json"));
56
54
  const responseBody = params.responseBody || (isJsonResponse ? "{}" : "");
57
55
  const requestHeaders = {
58
56
  "Content-Type": ["application/json"],
@@ -76,7 +74,9 @@ export class ScenarioGenerationService {
76
74
  if (Array.isArray(v)) {
77
75
  const items = v
78
76
  .filter((item) => item !== null)
79
- .map((item) => (typeof item === "object" ? JSON.stringify(item) : String(item)));
77
+ .map((item) => typeof item === "object"
78
+ ? JSON.stringify(item)
79
+ : String(item));
80
80
  if (items.length === 0)
81
81
  continue;
82
82
  value = items.join(",");
@@ -4,7 +4,15 @@ import { logger } from "../utils/logger.js";
4
4
  import { TestSource } from "../types/TestAnalysis.js";
5
5
  import { TestType } from "../types/TestTypes.js";
6
6
  import fg from "fast-glob";
7
- import { isDiscoveredTestFile } from "../utils/testFileClassification.js";
7
+ import { hasTestFileName, isDiscoveredTestFile, } from "../utils/testFileClassification.js";
8
+ /**
9
+ * A Jest/Vitest snapshot in the colocated CRA layout. Its name never identifies
10
+ * it as a test (`Button.test.tsx.snap` cannot match a `.<ext>` tail across the
11
+ * `.tsx.` dot), but a render change leaves it stale, so it is maintenance
12
+ * material. It never enters the before-run gate: `detectLanguage` on `.snap`
13
+ * returns "unknown".
14
+ */
15
+ const COLOCATED_SNAPSHOT = /[\\/]__snapshots__[\\/][^\\/]+\.snap$/;
8
16
  export class TestDiscoveryService {
9
17
  EXCLUDED_DIRS = [
10
18
  "node_modules",
@@ -23,9 +31,23 @@ export class TestDiscoveryService {
23
31
  SKYRAMP_MARKER = "Generated by Skyramp";
24
32
  // Supported test file extensions — covers all common languages/frameworks
25
33
  SUPPORTED_EXTENSIONS = [
26
- ".py", ".js", ".ts", ".tsx", ".jsx", ".java",
27
- ".go", ".rb", ".kt", ".kts", ".cs", ".rs",
28
- ".php", ".scala", ".swift", ".m", ".dart",
34
+ ".py",
35
+ ".js",
36
+ ".ts",
37
+ ".tsx",
38
+ ".jsx",
39
+ ".java",
40
+ ".go",
41
+ ".rb",
42
+ ".kt",
43
+ ".kts",
44
+ ".cs",
45
+ ".rs",
46
+ ".php",
47
+ ".scala",
48
+ ".swift",
49
+ ".m",
50
+ ".dart",
29
51
  ".snap", // Jest/Vitest snapshot files — may need updating when UI changes break them
30
52
  ];
31
53
  // Concurrency control for parallel operations
@@ -54,7 +76,9 @@ export class TestDiscoveryService {
54
76
  logger.info(`Found ${classified.skyramp.length} Skyramp test files, ${classified.external.length} external test files`);
55
77
  // Process Skyramp tests (content already cached from classification)
56
78
  const skyrampTests = await this.processFilesInBatches(classified.skyramp, false, classified.contentCache);
57
- skyrampTests.forEach(t => { t.source = TestSource.Skyramp; });
79
+ skyrampTests.forEach((t) => {
80
+ t.source = TestSource.Skyramp;
81
+ });
58
82
  // No diff context reaches this service: its one caller passes no options, so
59
83
  // every external file is potentially relevant and the cap is what bounds the
60
84
  // read set.
@@ -122,11 +146,12 @@ export class TestDiscoveryService {
122
146
  // TEST_FILE_PATTERNS includes Skyramp-generated suffixes (_smoke, _contract, etc.)
123
147
  // so Skyramp files outside standard test directories are still discovered.
124
148
  // This avoids reading every source file in the repo just to check the marker.
125
- const testCandidates = allFiles.filter(f => this.isExternalTestFile(f));
149
+ const testCandidates = allFiles.filter((f) => this.isExternalTestFile(f));
126
150
  logger.debug(`Found ${allFiles.length} candidate files, narrowed to ${testCandidates.length} likely test files`);
127
151
  const result = { skyramp: [], external: [] };
128
152
  const contentCache = new Map();
129
153
  const marker = this.SKYRAMP_MARKER;
154
+ const dropped = [];
130
155
  const batchSize = 100;
131
156
  for (let i = 0; i < testCandidates.length; i += batchSize) {
132
157
  const batch = testCandidates.slice(i, i + batchSize);
@@ -137,16 +162,27 @@ export class TestDiscoveryService {
137
162
  result.skyramp.push(file);
138
163
  contentCache.set(file, content);
139
164
  }
140
- else {
165
+ else if (hasTestFileName(file) || COLOCATED_SNAPSHOT.test(file)) {
141
166
  result.external.push(file);
142
167
  contentCache.set(file, content);
143
168
  }
169
+ else {
170
+ // A candidate without the marker and without a test file name is a
171
+ // helper, fixture, page object, setup file or config that only
172
+ // qualified by sitting in a test directory. It cannot be run as a
173
+ // test, so it is not external coverage. Skyramp's own files keep the
174
+ // wide rule above -- the marker is what identifies them.
175
+ dropped.push(file);
176
+ }
144
177
  }
145
178
  catch (error) {
146
- logger.debug(`Skipping file ${file}: ${error}`);
179
+ logger.warning(`Skipping file ${file}: ${error}`);
147
180
  }
148
181
  }
149
182
  }
183
+ if (dropped.length > 0) {
184
+ logger.debug(`Dropped ${dropped.length} test-directory candidates with no test file name: ${dropped.slice(0, 10).join(", ")}`);
185
+ }
150
186
  logger.debug(`Classified ${result.skyramp.length} Skyramp files, ${result.external.length} external test files`);
151
187
  return { ...result, contentCache };
152
188
  }
@@ -155,7 +191,11 @@ export class TestDiscoveryService {
155
191
  * or directory placement.
156
192
  */
157
193
  isExternalTestFile(filePath) {
158
- return isDiscoveredTestFile(filePath);
194
+ // Either rule may admit a candidate: the directory rule for a test that
195
+ // sits in a test tree, the name rule for one that does not. Without the
196
+ // second, `auth.e2e.ts` or `OrdersIT.java` outside a test directory never
197
+ // reaches the classification below.
198
+ return isDiscoveredTestFile(filePath) || hasTestFileName(filePath);
159
199
  }
160
200
  /**
161
201
  * Extract metadata from a test file
@@ -457,7 +497,11 @@ export class TestDiscoveryService {
457
497
  const languageMap = {
458
498
  ".py": "python",
459
499
  ".js": "javascript",
500
+ ".mjs": "javascript",
501
+ ".cjs": "javascript",
460
502
  ".ts": "typescript",
503
+ ".mts": "typescript",
504
+ ".cts": "typescript",
461
505
  ".tsx": "typescript",
462
506
  ".jsx": "javascript",
463
507
  ".java": "java",