@skyramp/mcp 0.4.1 → 0.4.2-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (543) hide show
  1. package/build/adapters/jestAdapter.js +23 -5
  2. package/build/adapters/mochaAdapter.js +7 -1
  3. package/build/adapters/playwrightAdapter.js +3 -1
  4. package/build/adapters/pytestAdapter.js +14 -3
  5. package/build/commands/localDevTestChangesCommand.js +1 -0
  6. package/build/commands/recommendTestsAndExecuteCommand.js +5 -6
  7. package/build/commands/testThisEndpointCommand.js +16 -4
  8. package/build/index.js +34 -4
  9. package/build/playwright/blueprintDigest.js +28 -7
  10. package/build/playwright/registerPlaywrightTools.js +33 -28
  11. package/build/playwright/traceRecordingPrompt.js +9 -2
  12. package/build/prompts/code-reuse.js +95 -29
  13. package/build/prompts/fix-error-prompt.d.ts +9 -1
  14. package/build/prompts/fix-error-prompt.js +31 -28
  15. package/build/prompts/local-dev/local-dev-plan.d.ts +3 -0
  16. package/build/prompts/local-dev/local-dev-plan.js +3 -1
  17. package/build/prompts/local-dev/local-dev-prompts.d.ts +1 -1
  18. package/build/prompts/local-dev/local-dev-prompts.js +30 -3
  19. package/build/prompts/modularization/integration-test-modularization.js +13 -6
  20. package/build/prompts/modularization/ui-test-modularization.js +1 -1
  21. package/build/prompts/personas.js +1 -1
  22. package/build/prompts/pom-aware-code-reuse.js +7 -9
  23. package/build/prompts/reuse-hand-off.d.ts +64 -0
  24. package/build/prompts/reuse-hand-off.js +130 -0
  25. package/build/prompts/shared-helper-policy.d.ts +88 -2
  26. package/build/prompts/shared-helper-policy.js +145 -11
  27. package/build/prompts/sut-setup/modes/adaptWorkflowPrompt.js +1 -1
  28. package/build/prompts/sut-setup/modes/dockerComposePrompt.js +1 -1
  29. package/build/prompts/sut-setup/shared.d.ts +4 -1
  30. package/build/prompts/sut-setup/shared.js +2 -2
  31. package/build/prompts/test-maintenance/actionsInstructions.d.ts +19 -11
  32. package/build/prompts/test-maintenance/actionsInstructions.js +47 -26
  33. package/build/prompts/test-maintenance/drift-analysis-prompt.js +3 -2
  34. package/build/prompts/test-maintenance/driftAnalysisSections.js +5 -3
  35. package/build/prompts/test-maintenance/driftAnalysisShared.js +4 -2
  36. package/build/prompts/test-maintenance/uiDriftAnalysisSections.js +7 -4
  37. package/build/prompts/test-recommendation/recommendationSections.js +19 -8
  38. package/build/prompts/test-recommendation/registerRecommendTestsPrompt.js +5 -2
  39. package/build/prompts/test-recommendation/test-recommendation-prompt.js +10 -7
  40. package/build/prompts/testbot/testbot-prompts.js +123 -55
  41. package/build/recommendation/answers.js +18 -9
  42. package/build/recommendation/pullRequestText.js +1 -1
  43. package/build/recommendation/registerPlan.js +31 -17
  44. package/build/recommendation/subjectStep.d.ts +8 -10
  45. package/build/recommendation/subjectStep.js +17 -16
  46. package/build/recommendation/types.d.ts +71 -17
  47. package/build/recommendation/types.js +9 -15
  48. package/build/recommendation/verifierContracts.d.ts +7 -3
  49. package/build/recommendation/verifierContracts.js +8 -4
  50. package/build/recommendation/verifiers/changedFile.js +11 -13
  51. package/build/recommendation/verifiers/citedPath.d.ts +8 -0
  52. package/build/recommendation/verifiers/citedPath.js +16 -2
  53. package/build/recommendation/verifiers/coverage.d.ts +2 -2
  54. package/build/recommendation/verifiers/coverage.js +190 -134
  55. package/build/recommendation/verifiers/defects.js +56 -16
  56. package/build/recommendation/verifiers/deliveredMatchesPlan.d.ts +7 -1
  57. package/build/recommendation/verifiers/deliveredMatchesPlan.js +28 -14
  58. package/build/recommendation/verifiers/endpointGrounded.js +14 -8
  59. package/build/recommendation/verifiers/existingCoverage.d.ts +6 -0
  60. package/build/recommendation/verifiers/existingCoverage.js +30 -21
  61. package/build/recommendation/verifiers/expectedOutcome.js +17 -8
  62. package/build/recommendation/verifiers/expectedValueSourced.js +54 -43
  63. package/build/recommendation/verifiers/issueTraceability.d.ts +5 -0
  64. package/build/recommendation/verifiers/issueTraceability.js +64 -7
  65. package/build/recommendation/verifiers/removedElementGuarded.js +19 -11
  66. package/build/recommendation/verifiers/reportedCategory.js +9 -4
  67. package/build/recommendation/verifiers/requirementSourced.js +34 -21
  68. package/build/recommendation/verifiers/screenRoute.js +15 -10
  69. package/build/recommendation/verifiers/statedDifference.js +15 -8
  70. package/build/recommendation/verifiers/uiElementGrounded.js +50 -16
  71. package/build/resources/analysisResources.js +7 -3
  72. package/build/resources/progressResource.js +4 -2
  73. package/build/resources/sutSetupResource.js +20 -2
  74. package/build/resources/testbotResource.js +19 -1
  75. package/build/services/AnalyticsService.js +3 -1
  76. package/build/services/ScenarioGenerationService.js +5 -5
  77. package/build/services/TestDiscoveryService.js +21 -5
  78. package/build/services/TestExecutionService.js +63 -21
  79. package/build/services/TestGenerationService.d.ts +1 -1
  80. package/build/services/TestGenerationService.js +43 -24
  81. package/build/skills/enhanceAssertionsSkill.d.ts +45 -0
  82. package/build/skills/enhanceAssertionsSkill.js +103 -0
  83. package/build/skills/fixTestImportErrorsSkill.d.ts +2 -2
  84. package/build/skills/fixTestImportErrorsSkill.js +2 -2
  85. package/build/skills/skillFiles.d.ts +38 -0
  86. package/build/skills/skillFiles.js +94 -0
  87. package/build/skills/validateAssertionAlignmentSkill.d.ts +34 -0
  88. package/build/skills/validateAssertionAlignmentSkill.js +59 -0
  89. package/build/tool-phases.js +4 -0
  90. package/build/tools/auth/loginTool.js +3 -1
  91. package/build/tools/auth/logoutTool.js +3 -1
  92. package/build/tools/code-refactor/alignAssertionsTool.d.ts +2 -0
  93. package/build/tools/code-refactor/alignAssertionsTool.js +51 -0
  94. package/build/tools/code-refactor/assertion-state.d.ts +1 -1
  95. package/build/tools/code-refactor/assertion-state.js +1 -1
  96. package/build/tools/code-refactor/assertionOperations.d.ts +44 -0
  97. package/build/tools/code-refactor/assertionOperations.js +82 -0
  98. package/build/tools/code-refactor/assertionSkillTools.d.ts +3 -0
  99. package/build/tools/code-refactor/assertionSkillTools.js +86 -0
  100. package/build/tools/code-refactor/codeReuseTool.js +27 -3
  101. package/build/tools/code-refactor/enhanceAssertionsTool.js +19 -83
  102. package/build/tools/code-refactor/gate-markers.d.ts +51 -0
  103. package/build/tools/code-refactor/gate-markers.js +95 -0
  104. package/build/tools/code-refactor/retrofit-state.d.ts +3 -1
  105. package/build/tools/code-refactor/retrofit-state.js +44 -2
  106. package/build/tools/code-refactor/reuse-outcome.d.ts +23 -1
  107. package/build/tools/code-refactor/reuse-outcome.js +36 -13
  108. package/build/tools/code-refactor/reuse-state.d.ts +90 -16
  109. package/build/tools/code-refactor/reuse-state.js +191 -61
  110. package/build/tools/code-refactor/utils-verify-gates.d.ts +4 -0
  111. package/build/tools/code-refactor/utils-verify-gates.js +252 -27
  112. package/build/tools/code-refactor/verify-gates.d.ts +15 -1
  113. package/build/tools/code-refactor/verify-gates.js +36 -4
  114. package/build/tools/enrichTestWithMocksTool.d.ts +1 -1
  115. package/build/tools/enrichTestWithMocksTool.js +9 -5
  116. package/build/tools/executeSkyrampTestTool.d.ts +22 -1
  117. package/build/tools/executeSkyrampTestTool.js +571 -271
  118. package/build/tools/execution-video-state.js +1 -1
  119. package/build/tools/fixErrorTool.js +5 -6
  120. package/build/tools/generate-tests/batchMockGenerationTool.js +1 -1
  121. package/build/tools/generate-tests/generateBatchScenarioRestTool.js +114 -73
  122. package/build/tools/generate-tests/generateContractRestTool.js +34 -16
  123. package/build/tools/generate-tests/generateE2ERestTool.d.ts +1 -0
  124. package/build/tools/generate-tests/generateE2ERestTool.js +9 -1
  125. package/build/tools/generate-tests/generateIntegrationRestTool.js +22 -7
  126. package/build/tools/generate-tests/generateMockRestTool.js +3 -1
  127. package/build/tools/generate-tests/generateUIRestTool.d.ts +2 -0
  128. package/build/tools/generate-tests/generateUIRestTool.js +11 -2
  129. package/build/tools/generate-tests/loadTestSchema.js +1 -3
  130. package/build/tools/generate-tests/planGuard.js +6 -3
  131. package/build/tools/generate-tests/scenarioFileIdentity.js +4 -1
  132. package/build/tools/generate-tests/scenarioLint.js +17 -5
  133. package/build/tools/generate-tests/trace-reuse-guard.js +5 -2
  134. package/build/tools/generateEnrichedIntegrationTestTool.js +9 -3
  135. package/build/tools/one-click/oneClickTool.js +3 -1
  136. package/build/tools/preflightMockCheckTool.js +23 -7
  137. package/build/tools/runExistingTestsTool.d.ts +1 -1
  138. package/build/tools/runExistingTestsTool.js +43 -21
  139. package/build/tools/submitReportTool.d.ts +51 -12
  140. package/build/tools/submitReportTool.js +860 -161
  141. package/build/tools/test-management/actionsTool.js +210 -51
  142. package/build/tools/test-management/analyzeChangesTool.d.ts +4 -5
  143. package/build/tools/test-management/analyzeChangesTool.js +127 -68
  144. package/build/tools/test-management/analyzeTestHealthTool.js +35 -13
  145. package/build/tools/test-management/registerTestPlanTool.d.ts +44 -34
  146. package/build/tools/test-management/registerTestPlanTool.js +255 -111
  147. package/build/tools/test-management/resolveScreenTool.js +33 -9
  148. package/build/tools/trace/startTraceCollectionTool.js +3 -1
  149. package/build/tools/trace/stopTraceCollectionTool.js +41 -5
  150. package/build/tools/verifyTestDependenciesTool.d.ts +3 -0
  151. package/build/tools/verifyTestDependenciesTool.js +54 -0
  152. package/build/tools/workspace/initScanWorkspaceTool.js +9 -3
  153. package/build/tools/workspace/initializeWorkspaceTool.js +3 -1
  154. package/build/types/AssertionOutcome.d.ts +1 -1
  155. package/build/types/EnhanceType.d.ts +6 -0
  156. package/build/types/EnhanceType.js +1 -0
  157. package/build/types/ExternalTestExecution.d.ts +2 -2
  158. package/build/types/RepositoryAnalysis.d.ts +0 -40
  159. package/build/types/ReuseOutcome.d.ts +96 -4
  160. package/build/types/ReuseOutcome.js +16 -0
  161. package/build/types/StepMethod.js +20 -6
  162. package/build/types/TestAnalysis.d.ts +10 -2
  163. package/build/types/TestExecution.d.ts +45 -0
  164. package/build/types/TestRecommendation.d.ts +1 -1
  165. package/build/types/TestRecommendation.js +4 -1
  166. package/build/types/TestTypes.d.ts +13 -0
  167. package/build/types/TestTypes.js +34 -3
  168. package/build/types/TestbotPromptOptions.d.ts +9 -1
  169. package/build/types/TestbotReport.d.ts +45 -9
  170. package/build/utils/AnalysisStateManager.d.ts +137 -27
  171. package/build/utils/AnalysisStateManager.js +227 -43
  172. package/build/utils/assertion-verify/api-shared-lints.js +34 -16
  173. package/build/utils/assertion-verify/metrics.js +39 -6
  174. package/build/utils/assertion-verify/ui-lints.js +4 -2
  175. package/build/utils/branchDiff.js +47 -12
  176. package/build/utils/canonicalJson.js +3 -1
  177. package/build/utils/dartRouteExtractor.js +36 -7
  178. package/build/utils/fixAttempts.d.ts +26 -0
  179. package/build/utils/fixAttempts.js +109 -0
  180. package/build/utils/frontendSelectors.js +23 -4
  181. package/build/utils/generatedTestRecord.d.ts +19 -0
  182. package/build/utils/generatedTestRecord.js +61 -0
  183. package/build/utils/gitStaging.js +7 -2
  184. package/build/utils/initAgent.js +26 -6
  185. package/build/utils/language-helper.js +39 -45
  186. package/build/utils/pathMatching.js +2 -1
  187. package/build/utils/pathSignatures.js +6 -2
  188. package/build/utils/planMatchKeys.d.ts +2 -2
  189. package/build/utils/planMatchKeys.js +20 -14
  190. package/build/utils/pom-catalog-parse.js +7 -2
  191. package/build/utils/pom-scope/import-expansion.js +6 -1
  192. package/build/utils/pom-scope/index.js +50 -12
  193. package/build/utils/pom-scope/scoring.js +13 -3
  194. package/build/utils/pom-scope/selector-extractor.js +16 -3
  195. package/build/utils/pom-scope/strip.d.ts +8 -0
  196. package/build/utils/pom-scope/strip.js +238 -0
  197. package/build/utils/pom-scope/testIdDiscovery.js +14 -2
  198. package/build/utils/pom-verify/__fixtures__/af-style/asset-list.page.d.ts +1 -1
  199. package/build/utils/pom-verify/__fixtures__/af-style/asset-list.page.js +4 -2
  200. package/build/utils/pom-verify/__fixtures__/af-style/report.iframe.page.js +3 -1
  201. package/build/utils/pom-verify/__fixtures__/af-style/workflow-footer.page.js +3 -1
  202. package/build/utils/pom-verify/bindings.js +5 -1
  203. package/build/utils/pom-verify/calls.js +9 -2
  204. package/build/utils/pom-verify/verify.js +27 -5
  205. package/build/utils/pr-comment-parser.js +20 -7
  206. package/build/utils/proxy-terminal.d.ts +19 -1
  207. package/build/utils/proxy-terminal.js +346 -21
  208. package/build/utils/removedUiElements.js +1 -1
  209. package/build/utils/reportLanguage.js +35 -7
  210. package/build/utils/reportVerification.d.ts +14 -8
  211. package/build/utils/reportVerification.js +19 -19
  212. package/build/utils/repositorySlug.d.ts +32 -0
  213. package/build/utils/repositorySlug.js +77 -0
  214. package/build/utils/reuseRouting.js +6 -2
  215. package/build/utils/runSerialized.d.ts +3 -0
  216. package/build/utils/runSerialized.js +39 -0
  217. package/build/utils/screenRoutes.js +74 -18
  218. package/build/utils/sourceRouteExtractor.js +13 -6
  219. package/build/utils/telemetry.d.ts +1 -0
  220. package/build/utils/telemetry.js +8 -5
  221. package/build/utils/testDependencyPolicy.d.ts +9 -0
  222. package/build/utils/testDependencyPolicy.js +788 -0
  223. package/build/utils/testExecutionRecord.d.ts +90 -0
  224. package/build/utils/testExecutionRecord.js +267 -0
  225. package/build/utils/testFileClassification.js +3 -1
  226. package/build/utils/trace-parser.js +62 -14
  227. package/build/utils/urlPath.js +3 -1
  228. package/build/utils/utils-verify/action-key.d.ts +4 -0
  229. package/build/utils/utils-verify/action-key.js +2 -2
  230. package/build/utils/utils-verify/allow.d.ts +122 -3
  231. package/build/utils/utils-verify/allow.js +146 -21
  232. package/build/utils/utils-verify/body-reach.d.ts +120 -0
  233. package/build/utils/utils-verify/body-reach.js +335 -0
  234. package/build/utils/utils-verify/call-sites.d.ts +6 -1
  235. package/build/utils/utils-verify/call-sites.js +72 -8
  236. package/build/utils/utils-verify/delivered-imports.d.ts +43 -0
  237. package/build/utils/utils-verify/delivered-imports.js +84 -0
  238. package/build/utils/utils-verify/fixed-sleep.d.ts +96 -0
  239. package/build/utils/utils-verify/fixed-sleep.js +461 -0
  240. package/build/utils/utils-verify/in-house.d.ts +93 -0
  241. package/build/utils/utils-verify/in-house.js +719 -0
  242. package/build/utils/utils-verify/incumbent.d.ts +3 -0
  243. package/build/utils/utils-verify/incumbent.js +75 -0
  244. package/build/utils/utils-verify/index.d.ts +1 -0
  245. package/build/utils/utils-verify/index.js +1 -0
  246. package/build/utils/utils-verify/language-spec.d.ts +26 -10
  247. package/build/utils/utils-verify/language-spec.js +217 -20
  248. package/build/utils/utils-verify/locate.d.ts +26 -0
  249. package/build/utils/utils-verify/locate.js +125 -23
  250. package/build/utils/utils-verify/module-name.d.ts +40 -0
  251. package/build/utils/utils-verify/module-name.js +98 -0
  252. package/build/utils/utils-verify/parse.d.ts +46 -6
  253. package/build/utils/utils-verify/parse.js +176 -38
  254. package/build/utils/utils-verify/retrofit-equivalence.d.ts +5 -0
  255. package/build/utils/utils-verify/retrofit-equivalence.js +4 -2
  256. package/build/utils/utils-verify/stage.d.ts +5 -0
  257. package/build/utils/utils-verify/stage.js +47 -2
  258. package/build/utils/utils-verify/status-once.d.ts +62 -0
  259. package/build/utils/utils-verify/status-once.js +207 -0
  260. package/build/utils/utils-verify/typecheck.d.ts +61 -0
  261. package/build/utils/utils-verify/typecheck.js +338 -0
  262. package/build/utils/utils-verify/verify.d.ts +76 -1
  263. package/build/utils/utils-verify/verify.js +516 -44
  264. package/build/utils/versions.d.ts +3 -3
  265. package/build/utils/versions.js +1 -1
  266. package/build/utils/workspaceAuth.js +107 -37
  267. package/build/workspace/queryParamResolution.js +11 -4
  268. package/build/workspace/workspace.js +7 -7
  269. package/node_modules/playwright/ThirdPartyNotices.txt +19 -19
  270. package/node_modules/playwright/lib/mcp/skyramp/assertTool.js +8 -2
  271. package/node_modules/playwright/lib/mcp/skyramp/common/cssValue.js +87 -0
  272. package/node_modules/playwright/lib/mcp/skyramp/loadTraceTool.js +31 -0
  273. package/node_modules/playwright/lib/mcp/skyramp/skyRampImport.js +3 -0
  274. package/node_modules/playwright/lib/mcp/skyramp/traceRecordingBackend.js +181 -15
  275. package/node_modules/playwright/lib/mcp/test/skyRampExport.js +24 -0
  276. package/node_modules/playwright/lib/transform/babelBundleImpl.js +2353 -190
  277. package/node_modules/playwright/node_modules/playwright-core/ThirdPartyNotices.txt +62 -34
  278. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/.package-lock.json +72 -41
  279. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/dist/serve-static.js +1 -1
  280. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/dist/serve-static.mjs +1 -1
  281. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/package.json +2 -2
  282. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/README.md +16 -1
  283. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/index.js +4 -20
  284. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/read.js +17 -17
  285. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/json.js +60 -32
  286. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/raw.js +3 -3
  287. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/text.js +3 -3
  288. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/urlencoded.js +16 -20
  289. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/utils.js +18 -16
  290. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/LICENSE +22 -0
  291. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/README.md +71 -0
  292. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.d.ts +46 -0
  293. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.js +176 -0
  294. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.js.map +1 -0
  295. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/package.json +52 -0
  296. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/package.json +23 -10
  297. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/CHANGELOG.md +21 -14
  298. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/isObject.d.ts +1 -1
  299. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/package.json +6 -7
  300. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/tsconfig.json +1 -0
  301. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/index.js +266 -45
  302. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/lib/schemes.js +9 -4
  303. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/lib/utils.js +396 -92
  304. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/package.json +1 -1
  305. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/component-safe-serialization.test.js +163 -0
  306. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/equal.test.js +31 -3
  307. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/fixtures/uri-js-parse.json +2 -0
  308. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/ipv6-canonical.test.js +34 -0
  309. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/ipv6-validation.test.js +124 -0
  310. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/malformed-percent.test.js +77 -0
  311. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/malformed-urn.test.js +61 -0
  312. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/parse.test.js +7 -3
  313. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/query-fragment-normalization.test.js +33 -0
  314. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/reserved-path-normalization.test.js +109 -0
  315. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/scheme-validation.test.js +124 -0
  316. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/security-normalization.test.js +101 -0
  317. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/security.test.js +301 -3
  318. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/urn-full-input.test.js +29 -0
  319. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/websocket-query-preservation.test.js +24 -0
  320. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/CHANGELOG.md +7 -0
  321. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/index.d.ts +0 -1
  322. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/package.json +4 -5
  323. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/client/client.js +30 -16
  324. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/client/utils.js +4 -1
  325. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/context.js +32 -13
  326. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/accepts/accepts.js +36 -2
  327. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/proxy/index.js +4 -0
  328. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/ssg/ssg.js +1 -1
  329. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/ssg/utils.js +30 -10
  330. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/streaming/sse.js +5 -4
  331. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/hono-base.js +10 -8
  332. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/base.js +44 -23
  333. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/components.js +25 -26
  334. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/context.js +5 -5
  335. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/dom/render.js +2 -0
  336. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/dom/server.js +5 -1
  337. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/hooks/index.js +16 -13
  338. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +3 -3
  339. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/streaming.js +4 -5
  340. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/cache/index.js +103 -8
  341. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/compress/index.js +5 -0
  342. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/cors/index.js +17 -14
  343. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/csrf/index.js +1 -1
  344. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/etag/digest.js +47 -1
  345. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/etag/index.js +7 -4
  346. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +9 -4
  347. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +9 -4
  348. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/language/language.js +10 -6
  349. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/method-not-allowed/index.js +90 -0
  350. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +3 -1
  351. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/secure-headers/secure-headers.js +16 -7
  352. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/request.js +20 -13
  353. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/linear-router/router.js +7 -2
  354. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/pattern-router/router.js +3 -9
  355. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +65 -59
  356. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +71 -128
  357. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +14 -5
  358. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/trie-router/node.js +47 -70
  359. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/trie-router/router.js +3 -11
  360. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/utils.js +27 -0
  361. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router.js +1 -1
  362. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/accept.js +1 -1
  363. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/body.js +21 -3
  364. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/cookie.js +4 -3
  365. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/ipaddr.js +5 -3
  366. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/stream.js +12 -3
  367. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/url.js +19 -11
  368. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/client/client.js +30 -16
  369. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/client/utils.js +4 -1
  370. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/context.js +32 -13
  371. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/accepts/accepts.js +36 -2
  372. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/proxy/index.js +4 -0
  373. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/ssg/ssg.js +1 -1
  374. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/ssg/utils.js +30 -10
  375. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/streaming/sse.js +5 -4
  376. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/hono-base.js +10 -8
  377. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/base.js +41 -23
  378. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/components.js +26 -27
  379. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/context.js +6 -6
  380. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/dom/render.js +2 -0
  381. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/dom/server.js +5 -1
  382. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/hooks/index.js +16 -13
  383. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/intrinsic-element/components.js +4 -4
  384. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/streaming.js +5 -6
  385. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/cache/index.js +103 -8
  386. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/compress/index.js +5 -0
  387. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/cors/index.js +17 -14
  388. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/csrf/index.js +1 -1
  389. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/etag/digest.js +47 -1
  390. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/etag/index.js +7 -4
  391. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/jwk/jwk.js +9 -4
  392. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/jwt/jwt.js +9 -4
  393. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/language/language.js +10 -6
  394. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/method-not-allowed/index.js +68 -0
  395. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/pretty-json/index.js +3 -1
  396. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/secure-headers/secure-headers.js +16 -7
  397. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/request.js +21 -14
  398. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/linear-router/router.js +7 -2
  399. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/pattern-router/router.js +3 -9
  400. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/node.js +61 -58
  401. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/router.js +77 -129
  402. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/trie.js +14 -5
  403. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/trie-router/node.js +47 -70
  404. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/trie-router/router.js +3 -11
  405. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/utils.js +5 -0
  406. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router.js +1 -1
  407. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/adapter/aws-lambda/types.d.ts +9 -0
  408. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/client/types.d.ts +1 -1
  409. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/context.d.ts +6 -2
  410. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/hono-base.d.ts +4 -3
  411. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/base.d.ts +7 -2
  412. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/index.d.ts +5 -5
  413. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/intrinsic-element/components.d.ts +2 -2
  414. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/server.d.ts +5 -5
  415. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/hooks/index.d.ts +8 -6
  416. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/index.d.ts +5 -5
  417. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/cache/index.d.ts +6 -4
  418. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/combine/index.d.ts +1 -1
  419. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/cors/index.d.ts +1 -1
  420. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +2 -2
  421. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jwk/jwk.d.ts +2 -0
  422. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jwt/jwt.d.ts +2 -0
  423. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/method-not-allowed/index.d.ts +49 -0
  424. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/secure-headers/permissions-policy.d.ts +3 -3
  425. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +4 -1
  426. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +2 -1
  427. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/trie-router/node.d.ts +1 -2
  428. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/trie-router/router.d.ts +0 -1
  429. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/utils.d.ts +1 -0
  430. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router.d.ts +1 -1
  431. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/utils/headers.d.ts +2 -2
  432. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/utils/url.d.ts +5 -0
  433. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/accept.js +1 -1
  434. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/body.js +21 -3
  435. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/cookie.js +5 -4
  436. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/ipaddr.js +5 -3
  437. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/stream.js +12 -3
  438. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/url.js +17 -10
  439. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/package.json +11 -4
  440. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/README.md +173 -143
  441. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/address-error.d.ts +11 -0
  442. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/address-error.js.map +1 -1
  443. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.d.ts +49 -0
  444. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.js +79 -4
  445. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.js.map +1 -1
  446. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.d.ts +78 -5
  447. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.js +119 -24
  448. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.js.map +1 -1
  449. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.d.ts +151 -10
  450. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.js +316 -90
  451. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.js.map +1 -1
  452. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.d.ts +12 -0
  453. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.js +45 -2
  454. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.js.map +1 -1
  455. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.d.ts +14 -0
  456. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.js +50 -3
  457. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.js.map +1 -1
  458. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/package.json +6 -4
  459. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/.github/THREAT_MODEL.md +3 -3
  460. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/CHANGELOG.md +26 -0
  461. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/README.md +19 -1
  462. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/dist/qs.js +25 -25
  463. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/eslint.config.mjs +1 -1
  464. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/parse.js +16 -6
  465. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/stringify.js +23 -8
  466. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/utils.js +57 -11
  467. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/package.json +8 -7
  468. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/parse.js +419 -0
  469. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/stringify.js +317 -0
  470. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/utils.js +206 -0
  471. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/CHANGELOG.md +10 -0
  472. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/README.md +1 -1
  473. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/index.js +5 -2
  474. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/package.json +10 -10
  475. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/test/index.js +16 -0
  476. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/index.js +8 -18
  477. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/LICENSE +22 -0
  478. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/README.md +71 -0
  479. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.d.ts +46 -0
  480. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.js +176 -0
  481. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.js.map +1 -0
  482. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/package.json +52 -0
  483. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/package.json +9 -5
  484. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/package-lock.json +72 -41
  485. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/.package-lock.json +6 -6
  486. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/README.md +23 -1
  487. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/index.js +265 -86
  488. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/package.json +1 -1
  489. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/README.md +173 -143
  490. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/address-error.d.ts +11 -0
  491. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/address-error.js.map +1 -1
  492. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.d.ts +49 -0
  493. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.js +79 -4
  494. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.js.map +1 -1
  495. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.d.ts +78 -5
  496. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.js +119 -24
  497. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.js.map +1 -1
  498. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.d.ts +151 -10
  499. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.js +316 -90
  500. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.js.map +1 -1
  501. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.d.ts +12 -0
  502. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.js +45 -2
  503. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.js.map +1 -1
  504. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.d.ts +14 -0
  505. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.js +50 -3
  506. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.js.map +1 -1
  507. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/package.json +6 -4
  508. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/package-lock.json +6 -6
  509. package/node_modules/playwright/node_modules/playwright-core/lib/cli/program.js +18 -9
  510. package/node_modules/playwright/node_modules/playwright-core/lib/mcpBundleImpl/index.js +47 -47
  511. package/node_modules/playwright/node_modules/playwright-core/lib/server/codegen/skyramp/jsonlReader.js +3 -0
  512. package/node_modules/playwright/node_modules/playwright-core/lib/server/recorder/recorderRunner.js +42 -0
  513. package/node_modules/playwright/node_modules/playwright-core/lib/utilsBundleImpl/index.js +121 -121
  514. package/node_modules/playwright/node_modules/playwright-core/lib/vite/traceViewer/{index.B7KbSQcC.js → index.BAkLd5DX.js} +1 -1
  515. package/node_modules/playwright/node_modules/playwright-core/lib/vite/traceViewer/index.html +1 -1
  516. package/node_modules/playwright/node_modules/playwright-core/package.json +1 -1
  517. package/node_modules/playwright/node_modules/playwright-core/src/cli/program.ts +31 -9
  518. package/node_modules/playwright/node_modules/playwright-core/src/server/codegen/skyramp/jsonlReader.ts +1 -0
  519. package/node_modules/playwright/node_modules/playwright-core/src/server/recorder/recorderRunner.ts +57 -1
  520. package/node_modules/playwright/package.json +2 -2
  521. package/package.json +7 -6
  522. package/plugin/prompts/code-reuse/hand-off.md +30 -0
  523. package/plugin/prompts/generate-tests/generation.md +1 -1
  524. package/plugin/prompts/plan-tests.md +14 -14
  525. package/plugin/prompts/testbot-task1.md +4 -2
  526. package/plugin/skills/enhance-assertions/SKILL.md +25 -0
  527. package/plugin/skills/enhance-assertions/reference/contract.md +51 -0
  528. package/plugin/skills/enhance-assertions/reference/integration.md +58 -0
  529. package/plugin/skills/enhance-assertions/reference/shared-rules.md +220 -0
  530. package/plugin/skills/enhance-assertions/reference/ui.md +373 -0
  531. package/plugin/skills/fix-test-import-errors/SKILL.md +44 -50
  532. package/plugin/skills/validate-assertion-alignment-post-execution/SKILL.md +32 -0
  533. package/plugin/skills/validate-assertion-alignment-post-execution/reference/checks.md +44 -0
  534. package/plugin/skills/validate-assertion-alignment-post-execution/reference/evidence.md +47 -0
  535. package/build/prompts/enhance-assertions/contractProviderAssertionsPrompt.d.ts +0 -2
  536. package/build/prompts/enhance-assertions/contractProviderAssertionsPrompt.js +0 -29
  537. package/build/prompts/enhance-assertions/integrationAssertionsPrompt.d.ts +0 -2
  538. package/build/prompts/enhance-assertions/integrationAssertionsPrompt.js +0 -36
  539. package/build/prompts/enhance-assertions/sharedAssertionRules.d.ts +0 -16
  540. package/build/prompts/enhance-assertions/sharedAssertionRules.js +0 -284
  541. package/build/prompts/enhance-assertions/uiAssertionsPrompt.d.ts +0 -2
  542. package/build/prompts/enhance-assertions/uiAssertionsPrompt.js +0 -388
  543. package/node_modules/playwright/node_modules/playwright-core/.DS_Store +0 -0
@@ -5,7 +5,7 @@ import { execFile } from "child_process";
5
5
  import { promisify } from "util";
6
6
  import { testFileMatches } from "./utils.js";
7
7
  import { DriftAction } from "../types/TestAnalysis.js";
8
- import { baselineFileMatchesStem, baselineStem } from "./rebaselineSnapshots.js";
8
+ import { baselineFileMatchesStem, baselineStem, } from "./rebaselineSnapshots.js";
9
9
  const execFileAsync = promisify(execFile);
10
10
  /**
11
11
  * Enumerate every path that differs from HEAD in the working tree — staged,
@@ -122,11 +122,13 @@ export async function listChangedFiles(repoRoot) {
122
122
  * - DELETE verdicts — applied deterministically by the delivery step, not
123
123
  * necessarily reflected in the tree at report time.
124
124
  * - IGNORE / VERIFY verdicts — assert that NO edit was needed.
125
- * - Claims for files outside this checkout (cross-repo `repository`, or an
126
- * absolute path resolving outside `repoRoot`) — a different checkout owns them.
125
+ * - Claims for files outside this checkout (a `repository` naming another
126
+ * checkout THIS RUN ANALYZED, or an absolute path resolving outside
127
+ * `repoRoot`) — a different checkout owns them. A name the run does not know
128
+ * owns nothing, so it is reported rather than exempted.
127
129
  */
128
130
  export function findUnchangedFileClaims(input) {
129
- const { repoRoot, changedFiles, newTests, verdicts, primaryRepository, planOnly, } = input;
131
+ const { repoRoot, changedFiles, newTests, verdicts, primaryRepository, knownRepositories, planOnly, } = input;
130
132
  const unbacked = [];
131
133
  const isBacked = (claimedPath) => {
132
134
  let candidate = claimedPath;
@@ -182,12 +184,14 @@ export function findUnchangedFileClaims(input) {
182
184
  if (!t.fileName)
183
185
  continue;
184
186
  // Cross-repo finding — its file lives in a different checkout, not this tree.
185
- // Exempt any claim explicitly attributed to a repo that isn't the primary.
186
- // When the primary repo is unknown (primaryRepository undefined) we can't
187
- // confirm the file belongs to this checkout, so any explicitly-attributed
188
- // claim is exempted rather than risk a false rejection.
189
- if (t.repository && t.repository !== primaryRepository)
187
+ // Exempt it only when the run actually analyzed that checkout: any other name
188
+ // points at no tree, and waving it through is how an uncreated test ships.
189
+ if (t.repository !== primaryRepository) {
190
+ if (knownRepositories.includes(t.repository))
191
+ continue;
192
+ unbacked.push(`newTestsCreated "${t.testId ?? t.fileName}" names repository "${t.repository}", which this run did not analyze (it analyzed ${knownRepositories.join(", ")})`);
190
193
  continue;
194
+ }
191
195
  if (!isBacked(t.fileName)) {
192
196
  unbacked.push(`newTestsCreated "${t.testId ?? t.fileName}" claims file "${t.fileName}", but no matching file was created or modified in the working tree`);
193
197
  }
@@ -395,7 +399,7 @@ export async function findInvalidSourceCitations(input) {
395
399
  entry: `issuesFound[${i}]`,
396
400
  cited,
397
401
  symbol,
398
- declared: input.issues[i].repository?.trim(),
402
+ declared: input.issues[i].repository,
399
403
  resolved: resolved.map((hit) => hit.checkout),
400
404
  });
401
405
  if (attribution.message)
@@ -408,9 +412,7 @@ export async function findInvalidSourceCitations(input) {
408
412
  * A checkout the run could not name contributes nothing: it can be neither
409
413
  * stamped nor offered as a candidate. */
410
414
  function namesOf(resolved) {
411
- return [
412
- ...new Set(resolved.map((c) => c.repository).filter((r) => !!r)),
413
- ];
415
+ return [...new Set(resolved.map((c) => c.repository))];
414
416
  }
415
417
  /**
416
418
  * Reconcile where a citation resolved with what the entry says about it, giving
@@ -425,7 +427,7 @@ function attributeCitation(args) {
425
427
  // owner/repo is case-insensitive on GitHub, so a differently-cased attribution
426
428
  // is the same repo — accepted, and re-stamped in the run's own spelling rather
427
429
  // than sent back for a rewrite that would change nothing.
428
- const match = resolved.find((c) => c.repository && c.repository.toLowerCase() === declared.toLowerCase());
430
+ const match = resolved.find((c) => c.repository.toLowerCase() === declared.toLowerCase());
429
431
  if (match)
430
432
  return match.repository === declared
431
433
  ? {}
@@ -449,10 +451,8 @@ function attributeCitation(args) {
449
451
  }
450
452
  return {}; // Cannot name the alternatives — accept, and stamp nothing.
451
453
  }
452
- // Exactly one checkout. Stamp it unless it is the primary, whose findings are
453
- // identified downstream by having NO repository — see SourceCitationCheck.
454
+ // Exactly one checkout. Stamp it, the primary included: an item names its repo
455
+ // whichever checkout it came from, so absence no longer means "the primary".
454
456
  const [only] = resolved;
455
- return only.primary || !only.repository
456
- ? {}
457
- : { repository: only.repository };
457
+ return { repository: only.repository };
458
458
  }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * `owner/repo` from a git remote URL. Accepts the two spellings a checkout's
3
+ * `origin` carries — ssh (`git@host:owner/repo.git`) and https
4
+ * (`https://host/owner/repo`) — with or without the `.git` suffix.
5
+ *
6
+ * Returns undefined when the URL yields no owner/repo pair, which the callers
7
+ * treat differently: see `repositorySlugOf` and `tryRepositorySlug` below.
8
+ */
9
+ export declare function parseOwnerRepo(remoteUrl: string): string | undefined;
10
+ /**
11
+ * `owner/repo` of the checkout at `dir`, or undefined when it is not a git repo,
12
+ * has no `origin` remote, or the remote URL names no owner/repo pair.
13
+ *
14
+ * For a caller that cannot proceed without the name, use `repositorySlugOf`.
15
+ */
16
+ export declare function tryRepositorySlug(dir: string): Promise<string | undefined>;
17
+ /**
18
+ * `owner/repo` of the checkout at `dir`. Throws, naming the path, when the
19
+ * directory cannot name one: every repository attribution in a run comes from
20
+ * here, so a missing name is a run that cannot attribute anything rather than
21
+ * one that attributes it to a guess.
22
+ */
23
+ export declare function repositorySlugOf(dir: string): Promise<string>;
24
+ /** Test seam: drop the memoized lookups so a fixture can rebuild a checkout. */
25
+ export declare function clearRepositorySlugCache(): void;
26
+ /**
27
+ * A checkout path in the spelling two calls can be compared in: symlinks
28
+ * resolved, relative spellings absolute. Falls back to the absolute path when
29
+ * the directory does not exist, so a caller comparing paths still gets an
30
+ * answer rather than an error about a path it only means to name.
31
+ */
32
+ export declare function resolveRealPath(dir: string): Promise<string>;
@@ -0,0 +1,77 @@
1
+ import { execFile } from "child_process";
2
+ import { promisify } from "util";
3
+ import fs from "fs/promises";
4
+ import path from "path";
5
+ const execFileAsync = promisify(execFile);
6
+ /**
7
+ * `owner/repo` from a git remote URL. Accepts the two spellings a checkout's
8
+ * `origin` carries — ssh (`git@host:owner/repo.git`) and https
9
+ * (`https://host/owner/repo`) — with or without the `.git` suffix.
10
+ *
11
+ * Returns undefined when the URL yields no owner/repo pair, which the callers
12
+ * treat differently: see `repositorySlugOf` and `tryRepositorySlug` below.
13
+ */
14
+ export function parseOwnerRepo(remoteUrl) {
15
+ const match = remoteUrl.trim().match(/[:/]([^/]+)\/([^/]+?)(?:\.git)?\/?$/);
16
+ if (!match)
17
+ return undefined;
18
+ const [, owner, repo] = match;
19
+ return `${owner}/${repo}`;
20
+ }
21
+ // One `git remote get-url` per directory for the life of the process. The
22
+ // value is the resolved slug, or undefined when the directory cannot name one.
23
+ const slugCache = new Map();
24
+ /**
25
+ * `owner/repo` of the checkout at `dir`, or undefined when it is not a git repo,
26
+ * has no `origin` remote, or the remote URL names no owner/repo pair.
27
+ *
28
+ * For a caller that cannot proceed without the name, use `repositorySlugOf`.
29
+ */
30
+ export function tryRepositorySlug(dir) {
31
+ const cached = slugCache.get(dir);
32
+ if (cached)
33
+ return cached;
34
+ const lookup = (async () => {
35
+ try {
36
+ const { stdout } = await execFileAsync("git", ["-C", dir, "remote", "get-url", "origin"], { timeout: 5_000 });
37
+ return parseOwnerRepo(stdout);
38
+ }
39
+ catch {
40
+ return undefined;
41
+ }
42
+ })();
43
+ slugCache.set(dir, lookup);
44
+ return lookup;
45
+ }
46
+ /**
47
+ * `owner/repo` of the checkout at `dir`. Throws, naming the path, when the
48
+ * directory cannot name one: every repository attribution in a run comes from
49
+ * here, so a missing name is a run that cannot attribute anything rather than
50
+ * one that attributes it to a guess.
51
+ */
52
+ export async function repositorySlugOf(dir) {
53
+ const slug = await tryRepositorySlug(dir);
54
+ if (!slug) {
55
+ throw new Error(`cannot read owner/repo from the origin remote of ${dir}: the checkout has no origin, or its URL names no owner/repo`);
56
+ }
57
+ return slug;
58
+ }
59
+ /** Test seam: drop the memoized lookups so a fixture can rebuild a checkout. */
60
+ export function clearRepositorySlugCache() {
61
+ slugCache.clear();
62
+ }
63
+ /**
64
+ * A checkout path in the spelling two calls can be compared in: symlinks
65
+ * resolved, relative spellings absolute. Falls back to the absolute path when
66
+ * the directory does not exist, so a caller comparing paths still gets an
67
+ * answer rather than an error about a path it only means to name.
68
+ */
69
+ export async function resolveRealPath(dir) {
70
+ const absolute = path.resolve(dir);
71
+ try {
72
+ return await fs.realpath(absolute);
73
+ }
74
+ catch {
75
+ return absolute;
76
+ }
77
+ }
@@ -14,8 +14,12 @@ export function isBrowserTestType(testType) {
14
14
  // skyramp_modularization runs BEFORE skyramp_reuse_code and the reuse pass seeds
15
15
  // the shared utils file from the helpers it created. The utils flag is the
16
16
  // single gate for every test type — the modularization prompts' per-step
17
- // extraction reads the same predicate, so the hand-off, the extraction and the
18
- // seeding step agree on every codeReuse flow. Integration qualifies whenever the flag is on;
17
+ // extraction reads this predicate, so the extraction and the seeding step agree
18
+ // on every codeReuse flow. The two hand-off sites (generation and the
19
+ // maintenance step) read isModularizeFirstHandOffTarget in prompts/reuse-hand-off.ts,
20
+ // which is THIS predicate plus a utils spec for the language: a language the
21
+ // verifier does not cover has no payable reuse half, so no hand-off is owed for
22
+ // it. Integration qualifies whenever the flag is on;
19
23
  // UI only while the POM path is off (POM refactoring supersedes modularization,
20
24
  // and the testbot UI flow asks for codeReuse unconditionally, so the flag is what
21
25
  // keeps the default-off behavior a no-op reuse pass). e2e and load are not
@@ -0,0 +1,3 @@
1
+ export declare function runSerialized<T>(key: string, fn: () => Promise<T>): Promise<T>;
2
+ /** Test seam: how many keys currently have work queued or running. */
3
+ export declare function pendingSerializedKeys(): number;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Run async work one at a time per key, in arrival order, within this process.
3
+ *
4
+ * A caller that must read some state, act, and write the state back cannot be
5
+ * interleaved with another caller on the same key without both reading the
6
+ * same starting state. Callers on different keys never wait for each other.
7
+ * A rejected run releases the key like a resolved one.
8
+ *
9
+ * Re-entrant: work that already holds a key (it is running inside a
10
+ * runSerialized on that key, however deep) runs immediately instead of
11
+ * queueing behind itself — otherwise a helper that serializes on the state
12
+ * file, called from a handler that already serializes on it, would wait for
13
+ * its own caller to finish and deadlock.
14
+ */
15
+ import { AsyncLocalStorage } from "async_hooks";
16
+ const tails = new Map();
17
+ const held = new AsyncLocalStorage();
18
+ export async function runSerialized(key, fn) {
19
+ const holding = held.getStore() ?? new Set();
20
+ if (holding.has(key))
21
+ return fn();
22
+ const previous = tails.get(key) ?? Promise.resolve();
23
+ const run = previous.then(() => held.run(new Set([...holding, key]), fn));
24
+ // What the next caller waits on: settled either way, so one failure does not
25
+ // wedge the key.
26
+ const tail = run.then(() => undefined, () => undefined);
27
+ tails.set(key, tail);
28
+ try {
29
+ return await run;
30
+ }
31
+ finally {
32
+ if (tails.get(key) === tail)
33
+ tails.delete(key);
34
+ }
35
+ }
36
+ /** Test seam: how many keys currently have work queued or running. */
37
+ export function pendingSerializedKeys() {
38
+ return tails.size;
39
+ }
@@ -39,7 +39,16 @@ import { extractSourceRoutes } from "./sourceRouteExtractor.js";
39
39
  /** Files that can import, and therefore render, a frontend module. */
40
40
  const FRONTEND_SOURCE_EXT = /\.(ts|tsx|js|jsx|mjs|cjs|vue|svelte|dart)$/i;
41
41
  const SKIP_DIRS = new Set([
42
- "node_modules", ".git", "dist", "build", "out", ".next", ".nuxt", ".svelte-kit", "coverage", "vendor",
42
+ "node_modules",
43
+ ".git",
44
+ "dist",
45
+ "build",
46
+ "out",
47
+ ".next",
48
+ ".nuxt",
49
+ ".svelte-kit",
50
+ "coverage",
51
+ "vendor",
43
52
  ]);
44
53
  /** Walk cap. Hitting it means the index is incomplete, and an incomplete index
45
54
  * cannot honestly say "nothing mounts this" — the whole repository answers
@@ -65,7 +74,9 @@ function toPosix(value) {
65
74
  return value.replace(/\\/g, "/");
66
75
  }
67
76
  function stripExtension(file) {
68
- return /\.d\.ts$/i.test(file) ? file.slice(0, -5) : file.slice(0, file.length - path.posix.extname(file).length);
77
+ return /\.d\.ts$/i.test(file)
78
+ ? file.slice(0, -5)
79
+ : file.slice(0, file.length - path.posix.extname(file).length);
69
80
  }
70
81
  /** The strings an import specifier can use to name this file: the file itself, the
71
82
  * file without its extension, and for an `index.*` module its directory. */
@@ -94,7 +105,9 @@ function normalizeRelative(relativePath) {
94
105
  * and this index is keyed by the stem instead because the specifier is already
95
106
  * isolated by the time we get here. */
96
107
  function stemKeys(file) {
97
- return [...new Set(buildPathSignatures(file).map((signature) => signature.slice(0, -1)))];
108
+ return [
109
+ ...new Set(buildPathSignatures(file).map((signature) => signature.slice(0, -1))),
110
+ ];
98
111
  }
99
112
  /**
100
113
  * The candidate repository paths an import specifier could name.
@@ -125,8 +138,11 @@ function specifierCandidates(spec) {
125
138
  if (segments.length === 1)
126
139
  return { relative: false, paths: [] };
127
140
  const paths = [clean];
128
- const scopedPackageShape = segments[0].length > 1 && segments[0].startsWith("@") && segments.length < 3;
129
- if (!scopedPackageShape && (/^[@~#]/.test(segments[0]) || segments[0] === "src")) {
141
+ const scopedPackageShape = segments[0].length > 1 &&
142
+ segments[0].startsWith("@") &&
143
+ segments.length < 3;
144
+ if (!scopedPackageShape &&
145
+ (/^[@~#]/.test(segments[0]) || segments[0] === "src")) {
130
146
  paths.push(segments.slice(1).join("/"));
131
147
  }
132
148
  return { relative: false, paths };
@@ -217,7 +233,11 @@ function readTanStackRouteTree(repositoryPath, treeFile, filesByStem) {
217
233
  }
218
234
  const preLoader = /^\s*preLoaderRoute:\s*typeof\s+(\w+)/.exec(line);
219
235
  if (preLoader && pendingId !== undefined && pendingFullPath !== undefined) {
220
- blocks.push({ id: pendingId, fullPath: pendingFullPath, ident: preLoader[1] });
236
+ blocks.push({
237
+ id: pendingId,
238
+ fullPath: pendingFullPath,
239
+ ident: preLoader[1],
240
+ });
221
241
  pendingId = undefined;
222
242
  pendingFullPath = undefined;
223
243
  }
@@ -316,7 +336,9 @@ function flutterPackages(repositoryPath) {
316
336
  for (const parent of PUBSPEC_MONOREPO_PARENTS) {
317
337
  let entries;
318
338
  try {
319
- entries = fs.readdirSync(path.join(repositoryPath, parent), { withFileTypes: true });
339
+ entries = fs.readdirSync(path.join(repositoryPath, parent), {
340
+ withFileTypes: true,
341
+ });
320
342
  }
321
343
  catch {
322
344
  continue;
@@ -360,7 +382,9 @@ function dartPackagePath(spec, packages) {
360
382
  export function frameworkRouteFor(relativePath, framework) {
361
383
  // Next.js and Nuxt accept their routing directory at the root or under `src/`,
362
384
  // and neither spelling appears in the URL.
363
- const below = relativePath.startsWith("src/") ? relativePath.slice(4) : relativePath;
385
+ const below = relativePath.startsWith("src/")
386
+ ? relativePath.slice(4)
387
+ : relativePath;
364
388
  switch (framework) {
365
389
  case "next":
366
390
  return nextRoute(below);
@@ -381,7 +405,9 @@ function bracketParam(segment) {
381
405
  /** Segments the Next app router organises the tree with and leaves out of the
382
406
  * URL: route groups `(shop)`, private folders `_internal`, slots `@modal`. */
383
407
  function isNextAppOrganisingSegment(segment) {
384
- return /^\(.+\)$/.test(segment) || segment.startsWith("_") || segment.startsWith("@");
408
+ return (/^\(.+\)$/.test(segment) ||
409
+ segment.startsWith("_") ||
410
+ segment.startsWith("@"));
385
411
  }
386
412
  function nextRoute(below) {
387
413
  const app = /^app\/(.*)$/.exec(below);
@@ -394,7 +420,11 @@ function nextRoute(below) {
394
420
  // `template`, `loading`, `error` and `not-found` wrap a page without being one.
395
421
  if (segments.pop() !== "page")
396
422
  return undefined;
397
- return "/" + segments.filter((s) => !isNextAppOrganisingSegment(s)).map(bracketParam).join("/");
423
+ return ("/" +
424
+ segments
425
+ .filter((s) => !isNextAppOrganisingSegment(s))
426
+ .map(bracketParam)
427
+ .join("/"));
398
428
  }
399
429
  const pages = /^pages\/(.*)$/.exec(below);
400
430
  if (!pages)
@@ -411,14 +441,22 @@ function nextRoute(below) {
411
441
  return undefined;
412
442
  // No route groups in this router — `(shop)` is a literal directory name.
413
443
  const segments = stem.replace(/(?:^|\/)index$/, "").split("/");
414
- return "/" + segments.filter((s) => s !== "").map(bracketParam).join("/");
444
+ return ("/" +
445
+ segments
446
+ .filter((s) => s !== "")
447
+ .map(bracketParam)
448
+ .join("/"));
415
449
  }
416
450
  function nuxtRoute(below) {
417
451
  const pages = /^pages\/(.*)\.vue$/.exec(below);
418
452
  if (!pages)
419
453
  return undefined;
420
454
  const segments = pages[1].replace(/(?:^|\/)index$/, "").split("/");
421
- return "/" + segments.filter((s) => s !== "").map(nuxtParam).join("/");
455
+ return ("/" +
456
+ segments
457
+ .filter((s) => s !== "")
458
+ .map(nuxtParam)
459
+ .join("/"));
422
460
  }
423
461
  /** Nuxt 3 spells a parameter `[id]`, Nuxt 2 spells it `_id`. The underscore names
424
462
  * one only as the WHOLE segment: a blanket rule made `order_total` `/order:total`. */
@@ -438,7 +476,11 @@ function svelteKitRoute(below) {
438
476
  if (segments.pop() !== "+page.svelte")
439
477
  return undefined;
440
478
  // The one non-Next framework with route groups, spelled the same way.
441
- return "/" + segments.filter((s) => !/^\(.+\)$/.test(s)).map(svelteParam).join("/");
479
+ return ("/" +
480
+ segments
481
+ .filter((s) => !/^\(.+\)$/.test(s))
482
+ .map(svelteParam)
483
+ .join("/"));
442
484
  }
443
485
  /** SvelteKit adds an optional parameter, `[[lang]]`, to the bracket spellings. */
444
486
  function svelteParam(segment) {
@@ -476,7 +518,9 @@ function fileSystemRouteEntries(files) {
476
518
  * through the stem index first: the route tree names hundreds of entry files, and
477
519
  * comparing each against every file in the repository is quadratic. */
478
520
  function resolveWithin(dir, spec, filesByStem) {
479
- const base = spec.startsWith(".") ? path.posix.normalize(path.posix.join(dir, spec)) : spec;
521
+ const base = spec.startsWith(".")
522
+ ? path.posix.normalize(path.posix.join(dir, spec))
523
+ : spec;
480
524
  const lastSegment = base.split("/").pop();
481
525
  if (!lastSegment)
482
526
  return undefined;
@@ -515,7 +559,9 @@ function collectRouteEntries(repositoryPath, files, fileSet, filesByStem, packag
515
559
  }
516
560
  if (packages.size > 0) {
517
561
  for (const route of extractDartRoutes(repositoryPath)) {
518
- const relative = route.componentFile ? toPosix(path.relative(repositoryPath, route.componentFile)) : undefined;
562
+ const relative = route.componentFile
563
+ ? toPosix(path.relative(repositoryPath, route.componentFile))
564
+ : undefined;
519
565
  // A widget this reader could not trace to a file leaves the table short of
520
566
  // a route, the same way an unresolved web component does.
521
567
  if (relative && fileSet.has(relative))
@@ -533,7 +579,9 @@ function collectRouteEntries(repositoryPath, files, fileSet, filesByStem, packag
533
579
  for (const route of extractSourceRoutes(repositoryPath)) {
534
580
  if (!route.path)
535
581
  continue;
536
- const relative = route.componentFile ? toPosix(path.relative(repositoryPath, route.componentFile)) : undefined;
582
+ const relative = route.componentFile
583
+ ? toPosix(path.relative(repositoryPath, route.componentFile))
584
+ : undefined;
537
585
  if (relative && fileSet.has(relative)) {
538
586
  entries.push({ pattern: route.path, entryFile: relative });
539
587
  continue;
@@ -601,7 +649,13 @@ function buildIndex(repositoryPath) {
601
649
  }
602
650
  }
603
651
  }
604
- return { fileSet, importers, patternsByEntry, tableComplete: table.complete, importsComplete };
652
+ return {
653
+ fileSet,
654
+ importers,
655
+ patternsByEntry,
656
+ tableComplete: table.complete,
657
+ importsComplete,
658
+ };
605
659
  }
606
660
  // ── Query ───────────────────────────────────────────────────────────────────
607
661
  function candidatesFor(index, file) {
@@ -708,7 +762,9 @@ export function createScreenRouteLookup(repositoryPath) {
708
762
  /** The routes for a file, without the evidence. */
709
763
  export function createScreenRouteResolver(repositoryPath) {
710
764
  const lookup = createScreenRouteLookup(repositoryPath);
711
- return (relativePath) => lookup.candidatesFor(relativePath)?.map((candidate) => candidate.routePattern);
765
+ return (relativePath) => lookup
766
+ .candidatesFor(relativePath)
767
+ ?.map((candidate) => candidate.routePattern);
712
768
  }
713
769
  /** The same answer with its evidence: every route, and the import chain that
714
770
  * reaches the file from that route's entry file. */
@@ -135,7 +135,8 @@ function findRouterFiles(repoPath) {
135
135
  // hosts a `defineModule({ routes: [...] })` call.
136
136
  if (lower.startsWith("index.")) {
137
137
  const ext = path.extname(lower);
138
- return indexExtensions.has(ext) && full.includes(`${path.sep}modules${path.sep}`);
138
+ return (indexExtensions.has(ext) &&
139
+ full.includes(`${path.sep}modules${path.sep}`));
139
140
  }
140
141
  return false;
141
142
  },
@@ -529,8 +530,10 @@ function resolveExportedSymbolToString(filePath, exportedName, cache, depth) {
529
530
  // `export default <expr>` — direct default export.
530
531
  return resolveExpressionToString(stmt.expression, filePath, imports, localConsts, cache, depth + 1);
531
532
  }
532
- if (ts.isExportDeclaration(stmt) && stmt.exportClause &&
533
- ts.isNamedExports(stmt.exportClause) && !stmt.moduleSpecifier) {
533
+ if (ts.isExportDeclaration(stmt) &&
534
+ stmt.exportClause &&
535
+ ts.isNamedExports(stmt.exportClause) &&
536
+ !stmt.moduleSpecifier) {
534
537
  // `export { X as default }` — local re-export aliased as default.
535
538
  for (const elt of stmt.exportClause.elements) {
536
539
  if (elt.name.text !== "default")
@@ -643,7 +646,9 @@ function resolveModuleSpecifier(spec, fromDir, cache) {
643
646
  const viaPaths = resolveViaTsconfigPaths(spec, tsconfig);
644
647
  if (viaPaths)
645
648
  return viaPaths;
646
- return tsconfig.baseUrl ? resolveImportPath(tsconfig.baseUrl, spec) : undefined;
649
+ return tsconfig.baseUrl
650
+ ? resolveImportPath(tsconfig.baseUrl, spec)
651
+ : undefined;
647
652
  }
648
653
  /** The file a `paths` alias names, trying the most specific pattern first and,
649
654
  * within one pattern, the first target that exists. */
@@ -1052,7 +1057,8 @@ function dataRouterRoutesFromArray(arr, prefix, filePath, imports, localConsts,
1052
1057
  else if (name === "element" || name === "component") {
1053
1058
  componentName = componentIdentifierOf(prop.initializer);
1054
1059
  }
1055
- else if (name === "children" && ts.isArrayLiteralExpression(prop.initializer)) {
1060
+ else if (name === "children" &&
1061
+ ts.isArrayLiteralExpression(prop.initializer)) {
1056
1062
  childrenArray = prop.initializer;
1057
1063
  }
1058
1064
  }
@@ -1141,7 +1147,8 @@ function defineModuleRoutesFromCall(call, filePath, imports, localConsts, cache)
1141
1147
  if (idVal !== null)
1142
1148
  moduleId = idVal;
1143
1149
  }
1144
- else if (propName === "routes" && ts.isArrayLiteralExpression(prop.initializer)) {
1150
+ else if (propName === "routes" &&
1151
+ ts.isArrayLiteralExpression(prop.initializer)) {
1145
1152
  routesArray = prop.initializer;
1146
1153
  }
1147
1154
  }
@@ -14,6 +14,7 @@ export interface RepositoryInfo {
14
14
  * forms, with or without the trailing ".git". Returns undefined if no match.
15
15
  */
16
16
  export declare function parseRepositoryFromRemoteUrl(remoteUrl: string): RepositoryInfo | undefined;
17
+ export declare function getLocalRepositoryInfo(cwd: string): Promise<RepositoryInfo>;
17
18
  /**
18
19
  * Resolves source-repository attribution for telemetry, segmenting usage per
19
20
  * customer/repo.
@@ -7,6 +7,7 @@ import { execFile } from "child_process";
7
7
  import { promisify } from "util";
8
8
  import { isTestbotEnabled } from "./featureFlags.js";
9
9
  import { logger } from "./logger.js";
10
+ import { parseOwnerRepo } from "./repositorySlug.js";
10
11
  const execFileAsync = promisify(execFile);
11
12
  export function getEntryPoint() {
12
13
  return isTestbotEnabled() ? "testbot" : "mcp";
@@ -32,17 +33,19 @@ export function getCIPlatform() {
32
33
  * forms, with or without the trailing ".git". Returns undefined if no match.
33
34
  */
34
35
  export function parseRepositoryFromRemoteUrl(remoteUrl) {
35
- const match = remoteUrl.trim().match(/[:/]([^/]+)\/([^/.]+?)(?:\.git)?$/);
36
- if (!match)
36
+ const repository = parseOwnerRepo(remoteUrl);
37
+ if (!repository)
37
38
  return undefined;
38
- const [, owner, repo] = match;
39
- return { repository: `${owner}/${repo}`, repositoryOwner: owner };
39
+ return { repository, repositoryOwner: repository.split("/")[0] };
40
40
  }
41
41
  // Memoize the local git lookup per working directory so we shell out at most
42
42
  // once per cwd for the lifetime of the MCP server process. The value is the
43
43
  // resolved RepositoryInfo (possibly empty when not a git repo / no remote).
44
+ //
45
+ // Also read outside telemetry: the testbot and SUT resources name their
46
+ // repository from the checkout's own remote, the same way the action does.
44
47
  const localRepoInfoCache = new Map();
45
- async function getLocalRepositoryInfo(cwd) {
48
+ export async function getLocalRepositoryInfo(cwd) {
46
49
  const cached = localRepoInfoCache.get(cwd);
47
50
  if (cached)
48
51
  return cached;
@@ -0,0 +1,9 @@
1
+ export declare const NPM_TEST_PACKAGES: ReadonlySet<string>;
2
+ export declare const PYTHON_TEST_PACKAGES: ReadonlySet<string>;
3
+ export declare const JAVA_TEST_PACKAGES: ReadonlySet<string>;
4
+ export interface TestDependencyVerification {
5
+ ok: boolean;
6
+ checkedFiles: string[];
7
+ violations: string[];
8
+ }
9
+ export declare function verifyTestDependencyChanges(repositoryPath: string): Promise<TestDependencyVerification>;