@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
@@ -0,0 +1,809 @@
1
+ import { execFile } from "child_process";
2
+ import { access, readFile } from "fs/promises";
3
+ import * as path from "path";
4
+ import { parse as parseToml } from "smol-toml";
5
+ import { promisify } from "util";
6
+ import fg from "fast-glob";
7
+ import { canonicalJson as canonical, isPlainObject as isObject, } from "./canonicalJson.js";
8
+ import { listChangedFiles } from "./reportVerification.js";
9
+ import { SKYRAMP_SDK_VERSION } from "./skyrampSdkVersion.js";
10
+ const execFileAsync = promisify(execFile);
11
+ export const NPM_TEST_PACKAGES = new Set([
12
+ "@playwright/test",
13
+ "@skyramp/skyramp",
14
+ "@testing-library/dom",
15
+ "@testing-library/jest-dom",
16
+ "@testing-library/react",
17
+ "@testing-library/user-event",
18
+ "@types/chai",
19
+ "@types/jest",
20
+ "@types/mocha",
21
+ "@types/supertest",
22
+ "chai",
23
+ "cypress",
24
+ "jest",
25
+ "mocha",
26
+ "playwright",
27
+ "supertest",
28
+ "ts-jest",
29
+ "ts-node",
30
+ "tsx",
31
+ "typescript",
32
+ "vitest",
33
+ ]);
34
+ export const PYTHON_TEST_PACKAGES = new Set([
35
+ "coverage",
36
+ "hypothesis",
37
+ "playwright",
38
+ "pytest",
39
+ "pytest-cov",
40
+ "pytest-playwright",
41
+ "robotframework",
42
+ "skyramp",
43
+ ]);
44
+ export const JAVA_TEST_PACKAGES = new Set([
45
+ "io.rest-assured:rest-assured",
46
+ "org.assertj:assertj-core",
47
+ "org.awaitility:awaitility",
48
+ "org.junit.jupiter:junit-jupiter",
49
+ "org.junit.platform:junit-platform-console-standalone",
50
+ "org.mockito:mockito-core",
51
+ "org.testng:testng",
52
+ "dev.skyramp:skyramp-library",
53
+ ]);
54
+ const DEPENDENCY_FILES = {
55
+ javascript: {
56
+ manifests: ["package.json"],
57
+ lockfiles: [
58
+ "package-lock.json",
59
+ "npm-shrinkwrap.json",
60
+ "yarn.lock",
61
+ "pnpm-lock.yaml",
62
+ // Named in the fix-errors guidance, so it must not bypass validation.
63
+ "bun.lock",
64
+ "bun.lockb",
65
+ ],
66
+ },
67
+ python: {
68
+ manifests: ["pyproject.toml", "requirements-dev.txt", "requirements.txt"],
69
+ lockfiles: ["poetry.lock", "uv.lock"],
70
+ },
71
+ java: {
72
+ manifests: ["pom.xml", "build.gradle", "build.gradle.kts"],
73
+ lockfiles: ["gradle.lockfile"],
74
+ },
75
+ };
76
+ const MANIFEST_NAMES = new Set(Object.values(DEPENDENCY_FILES).flatMap(({ manifests }) => manifests));
77
+ const LOCKFILE_NAMES = new Set(Object.values(DEPENDENCY_FILES).flatMap(({ lockfiles }) => lockfiles));
78
+ export async function verifyTestDependencyChanges(repositoryPath) {
79
+ const changedFiles = await listChangedFiles(repositoryPath);
80
+ const dependencyFiles = changedFiles.filter((file) => {
81
+ const name = path.posix.basename(file);
82
+ return MANIFEST_NAMES.has(name) || LOCKFILE_NAMES.has(name);
83
+ });
84
+ const violations = [];
85
+ const validManifests = new Set();
86
+ for (const file of dependencyFiles) {
87
+ const name = path.posix.basename(file);
88
+ if (LOCKFILE_NAMES.has(name)) {
89
+ if (await baselineFileExists(repositoryPath, file)) {
90
+ try {
91
+ await access(path.join(repositoryPath, file));
92
+ }
93
+ catch {
94
+ violations.push(`${file}: Deleting a lockfile is not allowed.`);
95
+ }
96
+ }
97
+ continue;
98
+ }
99
+ const committedBaseline = await baselineFile(repositoryPath, file);
100
+ const baseline = committedBaseline ??
101
+ (await baselineForNewManifest(repositoryPath, file, name, violations));
102
+ if (baseline === undefined)
103
+ continue;
104
+ let current;
105
+ try {
106
+ current = await readFile(path.join(repositoryPath, file), "utf8");
107
+ }
108
+ catch {
109
+ violations.push(`${file}: Deleting a dependency manifest is not allowed.`);
110
+ continue;
111
+ }
112
+ const beforeCount = violations.length;
113
+ const dependencyChanged = verifyManifest(file, name, baseline, current, violations);
114
+ if (committedBaseline === undefined && !dependencyChanged) {
115
+ violations.push(`${file}: A new dependency manifest must add at least one approved development/test dependency.`);
116
+ }
117
+ if (violations.length === beforeCount && dependencyChanged)
118
+ validManifests.add(file);
119
+ }
120
+ for (const file of dependencyFiles) {
121
+ const name = path.posix.basename(file);
122
+ if (!LOCKFILE_NAMES.has(name))
123
+ continue;
124
+ const paired = await correspondingManifests(repositoryPath, file, name);
125
+ if (!paired.some((manifest) => validManifests.has(manifest))) {
126
+ violations.push(`${file}: A lockfile may change only with a corresponding manifest that has a valid development/test dependency change.`);
127
+ continue;
128
+ }
129
+ await verifyLockfile(repositoryPath, file, name, paired, validManifests, violations);
130
+ }
131
+ return {
132
+ ok: violations.length === 0,
133
+ checkedFiles: dependencyFiles.sort(),
134
+ violations,
135
+ };
136
+ }
137
+ async function baselineForNewManifest(repositoryPath, file, name, violations) {
138
+ const dir = path.posix.dirname(file);
139
+ const at = (candidate) => dir === "." ? candidate : `${dir}/${candidate}`;
140
+ let competitors = [];
141
+ let baseline;
142
+ if (name === "package.json") {
143
+ baseline = "{}\n";
144
+ }
145
+ else if (name === "requirements-dev.txt") {
146
+ competitors = ["pyproject.toml"];
147
+ baseline = "";
148
+ }
149
+ else if (name === "pom.xml") {
150
+ competitors = ["build.gradle", "build.gradle.kts"];
151
+ baseline = [
152
+ '<project xmlns="http://maven.apache.org/POM/4.0.0">',
153
+ "<modelVersion>4.0.0</modelVersion>",
154
+ "<groupId>dev.skyramp.generated</groupId>",
155
+ "<artifactId>generated-tests</artifactId>",
156
+ "<version>1.0-SNAPSHOT</version>",
157
+ "<dependencies>",
158
+ "</dependencies>",
159
+ "</project>",
160
+ ].join("\n");
161
+ }
162
+ else if (name === "build.gradle" || name === "build.gradle.kts") {
163
+ competitors = ["pom.xml", "build.gradle", "build.gradle.kts"].filter((candidate) => candidate !== name);
164
+ baseline =
165
+ name === "build.gradle.kts"
166
+ ? "plugins { java }\nrepositories { mavenCentral() }\ndependencies {\n}\n"
167
+ : "plugins { id 'java' }\nrepositories { mavenCentral() }\ndependencies {\n}\n";
168
+ }
169
+ else {
170
+ violations.push(`${file}: Create requirements-dev.txt instead of synthesizing a new Python project manifest.`);
171
+ return undefined;
172
+ }
173
+ for (const competitor of competitors) {
174
+ if (await baselineFileExists(repositoryPath, at(competitor))) {
175
+ violations.push(`${file}: Cannot create a competing dependency manifest while ${at(competitor)} already exists.`);
176
+ return undefined;
177
+ }
178
+ }
179
+ return baseline;
180
+ }
181
+ function verifyManifest(file, name, baseline, current, violations) {
182
+ if (DEPENDENCY_FILES.javascript.manifests.includes(name))
183
+ return verifyJavascriptManifest(file, name, baseline, current, violations);
184
+ if (DEPENDENCY_FILES.python.manifests.includes(name))
185
+ return verifyPythonManifest(file, name, baseline, current, violations);
186
+ return verifyJavaManifest(file, name, baseline, current, violations);
187
+ }
188
+ function verifyJavascriptManifest(file, name, baseline, current, violations) {
189
+ if (name !== "package.json")
190
+ return false;
191
+ return verifyPackageJson(file, baseline, current, violations);
192
+ }
193
+ function verifyPythonManifest(file, name, baseline, current, violations) {
194
+ if (name === "pyproject.toml")
195
+ return verifyPyproject(file, baseline, current, violations);
196
+ if (name === "requirements-dev.txt")
197
+ return verifyRequirementsDev(file, baseline, current, violations);
198
+ violations.push(`${file}: Python test packages may be changed only in requirements-dev.txt or an approved pyproject.toml development dependency group.`);
199
+ return false;
200
+ }
201
+ function verifyJavaManifest(file, name, baseline, current, violations) {
202
+ if (name === "pom.xml")
203
+ return verifyMaven(file, baseline, current, violations);
204
+ return verifyGradle(file, baseline, current, violations);
205
+ }
206
+ async function baselineFile(repositoryPath, file) {
207
+ try {
208
+ const { stdout } = await execFileAsync("git", ["show", `HEAD:${file}`], {
209
+ cwd: repositoryPath,
210
+ encoding: "utf8",
211
+ maxBuffer: 10 * 1024 * 1024,
212
+ });
213
+ return stdout;
214
+ }
215
+ catch {
216
+ return undefined;
217
+ }
218
+ }
219
+ async function baselineFileExists(repositoryPath, file) {
220
+ try {
221
+ await execFileAsync("git", ["cat-file", "-e", `HEAD:${file}`], {
222
+ cwd: repositoryPath,
223
+ encoding: "utf8",
224
+ maxBuffer: 1024,
225
+ });
226
+ return true;
227
+ }
228
+ catch {
229
+ return false;
230
+ }
231
+ }
232
+ function verifyPackageJson(file, beforeRaw, afterRaw, violations) {
233
+ let before;
234
+ let after;
235
+ try {
236
+ before = JSON.parse(beforeRaw);
237
+ after = JSON.parse(afterRaw);
238
+ }
239
+ catch (error) {
240
+ violations.push(`${file}: Touched package.json must remain valid JSON: ${error.message}`);
241
+ return false;
242
+ }
243
+ for (const scope of ["dependencies", "devDependencies"]) {
244
+ if ((Object.prototype.hasOwnProperty.call(before, scope) &&
245
+ !isStringRecord(before[scope])) ||
246
+ (Object.prototype.hasOwnProperty.call(after, scope) &&
247
+ !isStringRecord(after[scope]))) {
248
+ violations.push(`${file}: ${scope} must be an object whose values are version strings.`);
249
+ return false;
250
+ }
251
+ }
252
+ const beforeRuntime = stringMap(before.dependencies);
253
+ const afterRuntime = stringMap(after.dependencies);
254
+ const beforeDev = stringMap(before.devDependencies);
255
+ const afterDev = stringMap(after.devDependencies);
256
+ const beforeRest = { ...before };
257
+ const afterRest = { ...after };
258
+ delete beforeRest.dependencies;
259
+ delete beforeRest.devDependencies;
260
+ delete afterRest.dependencies;
261
+ delete afterRest.devDependencies;
262
+ if (canonical(beforeRest) !== canonical(afterRest)) {
263
+ violations.push(`${file}: Only dependencies/devDependencies may change while fixing test imports; unrelated package.json fields changed.`);
264
+ }
265
+ for (const name of unionKeys(beforeRuntime, afterRuntime)) {
266
+ if (beforeRuntime[name] === afterRuntime[name])
267
+ continue;
268
+ const movedToDev = afterRuntime[name] === undefined && afterDev[name] !== undefined;
269
+ if (!movedToDev || !NPM_TEST_PACKAGES.has(name)) {
270
+ violations.push(`${file}: ${name} changed under dependencies; approved test packages must be restricted to devDependencies.`);
271
+ }
272
+ }
273
+ for (const name of unionKeys(beforeDev, afterDev)) {
274
+ if (beforeDev[name] === afterDev[name])
275
+ continue;
276
+ if (afterDev[name] === undefined) {
277
+ violations.push(`${file}: Removing ${name} from devDependencies is outside the fix-errors dependency policy.`);
278
+ }
279
+ else if (!NPM_TEST_PACKAGES.has(name)) {
280
+ violations.push(`${file}: ${name} is not on the approved test-package allowlist.`);
281
+ }
282
+ else if (!isSafeNpmSpecifier(afterDev[name])) {
283
+ violations.push(`${file}: ${name} must use a registry version, not an alias, URL, git, or local package source.`);
284
+ }
285
+ else if (!declaresServerSdkVersion(name, afterDev[name])) {
286
+ violations.push(`${file}: ${name} is declared as ${afterDev[name]}, but the tests were generated by ${SKYRAMP_SDK_VERSION}. Declare exactly ${SKYRAMP_SDK_VERSION}, with no range operator: a range lets a clean install resolve a different SDK.`);
287
+ }
288
+ }
289
+ return (canonical(beforeRuntime) !== canonical(afterRuntime) ||
290
+ canonical(beforeDev) !== canonical(afterDev));
291
+ }
292
+ /** The SDK the tests were generated by is the one this server imports, so the
293
+ * repository must declare exactly that version. Only the npm spelling carries
294
+ * a version: the Python and Java manifests declare the SDK without one, so
295
+ * neither is checked here.
296
+ *
297
+ * The specifier must be the bare version. A range is refused, including
298
+ * `^1.2.3`: it permits 1.3.0, so a clean install elsewhere can resolve an SDK
299
+ * that did not write these tests, which is the whole thing this prevents. */
300
+ function declaresServerSdkVersion(name, specifier) {
301
+ if (name !== "@skyramp/skyramp")
302
+ return true;
303
+ return specifier.trim() === SKYRAMP_SDK_VERSION;
304
+ }
305
+ function verifyPyproject(file, beforeRaw, afterRaw, violations) {
306
+ const before = pythonDevView(beforeRaw);
307
+ const after = pythonDevView(afterRaw);
308
+ if (before.error || after.error) {
309
+ violations.push(`${file}: Touched pyproject.toml uses an unsupported or unparsable development dependency shape: ${after.error ?? before.error}`);
310
+ return false;
311
+ }
312
+ if (canonical(before.remainder) !== canonical(after.remainder)) {
313
+ violations.push(`${file}: Python dependency edits must be restricted to an approved development dependency group: dependency-groups.dev or tool.poetry.group.dev.dependencies.`);
314
+ }
315
+ verifyNamedDevelopmentChanges(file, before.dependencies, after.dependencies, PYTHON_TEST_PACKAGES, violations, "Python");
316
+ return canonical(before.dependencies) !== canonical(after.dependencies);
317
+ }
318
+ function pythonDevView(raw) {
319
+ const dependencies = {};
320
+ let remainder;
321
+ try {
322
+ remainder = parseToml(raw);
323
+ }
324
+ catch (error) {
325
+ return {
326
+ dependencies,
327
+ remainder: {},
328
+ error: error.message,
329
+ };
330
+ }
331
+ const poetryValue = nestedValue(remainder, "tool", "poetry", "group", "dev", "dependencies");
332
+ if (poetryValue !== undefined && !isObject(poetryValue))
333
+ return {
334
+ dependencies,
335
+ remainder,
336
+ error: "Poetry development dependencies must be a table of registry version strings.",
337
+ };
338
+ const poetry = isObject(poetryValue) ? poetryValue : undefined;
339
+ if (poetry) {
340
+ for (const [rawName, value] of Object.entries(poetry)) {
341
+ const name = normalizePythonName(rawName);
342
+ if (typeof value !== "string" || !isSafePythonRequirement(value))
343
+ return {
344
+ dependencies,
345
+ remainder,
346
+ error: `Poetry dependency ${name} must use a registry version string, not a URL, VCS, or local package source.`,
347
+ };
348
+ dependencies[name] = value;
349
+ }
350
+ }
351
+ deleteNestedAndPrune(remainder, "tool", "poetry", "group", "dev", "dependencies");
352
+ const dependencyGroups = nestedObject(remainder, "dependency-groups");
353
+ const dev = dependencyGroups?.dev;
354
+ if (dev !== undefined) {
355
+ if (!Array.isArray(dev) || dev.some((value) => typeof value !== "string"))
356
+ return {
357
+ dependencies,
358
+ remainder,
359
+ error: "dependency-groups.dev supports only direct requirement strings.",
360
+ };
361
+ for (const value of dev) {
362
+ const requirement = value;
363
+ const name = normalizePythonName(requirement.match(/^[A-Za-z0-9_.-]+/)?.[0] ?? "");
364
+ if (!name || !isSafePythonRequirement(requirement))
365
+ return {
366
+ dependencies,
367
+ remainder,
368
+ error: `${name || requirement} must use a registry version, not a URL, VCS, or local package source.`,
369
+ };
370
+ dependencies[name] = requirement;
371
+ }
372
+ }
373
+ deleteNestedAndPrune(remainder, "dependency-groups", "dev");
374
+ return { dependencies, remainder };
375
+ }
376
+ function verifyRequirementsDev(file, beforeRaw, afterRaw, violations) {
377
+ const before = requirementsMap(beforeRaw);
378
+ const after = requirementsMap(afterRaw);
379
+ if (before.error || after.error) {
380
+ violations.push(`${file}: ${after.error ?? before.error}`);
381
+ return false;
382
+ }
383
+ verifyNamedDevelopmentChanges(file, before.dependencies, after.dependencies, PYTHON_TEST_PACKAGES, violations, "Python");
384
+ return canonical(before.dependencies) !== canonical(after.dependencies);
385
+ }
386
+ function requirementsMap(raw) {
387
+ const dependencies = {};
388
+ for (const line of raw.replace(/\r\n/g, "\n").split("\n")) {
389
+ const trimmed = line.replace(/\s+#.*$/, "").trim();
390
+ if (!trimmed || trimmed.startsWith("#"))
391
+ continue;
392
+ const name = normalizePythonName(trimmed.match(/^[A-Za-z0-9_.-]+/)?.[0] ?? "");
393
+ if (!name)
394
+ return {
395
+ dependencies,
396
+ error: `Unsupported requirements-dev.txt entry: ${trimmed}`,
397
+ };
398
+ if (!isSafePythonRequirement(trimmed))
399
+ return {
400
+ dependencies,
401
+ error: `${name} must use a registry version, not a URL, VCS, or local package source.`,
402
+ };
403
+ dependencies[name] = trimmed;
404
+ }
405
+ return { dependencies };
406
+ }
407
+ function verifyMaven(file, beforeRaw, afterRaw, violations) {
408
+ const before = mavenView(beforeRaw);
409
+ const after = mavenView(afterRaw);
410
+ if (before.error || after.error) {
411
+ violations.push(`${file}: ${after.error ?? before.error}`);
412
+ return false;
413
+ }
414
+ if (normalizeText(before.remainder) !== normalizeText(after.remainder)) {
415
+ violations.push(`${file}: Only allowlisted Maven dependency blocks may change while fixing test imports.`);
416
+ }
417
+ for (const coordinate of unionKeys(before.dependencies, after.dependencies)) {
418
+ const prior = before.dependencies[coordinate];
419
+ const current = after.dependencies[coordinate];
420
+ if (canonical(prior) === canonical(current))
421
+ continue;
422
+ if (current === undefined) {
423
+ violations.push(`${file}: Removing ${coordinate} is outside the fix-errors dependency policy.`);
424
+ }
425
+ else if (!JAVA_TEST_PACKAGES.has(coordinate)) {
426
+ violations.push(`${file}: ${coordinate} is not on the approved Java test-package allowlist.`);
427
+ }
428
+ else {
429
+ for (const block of current) {
430
+ const validation = mavenDependency(block);
431
+ if (validation.error) {
432
+ violations.push(`${file}: ${coordinate} ${validation.error}`);
433
+ }
434
+ }
435
+ }
436
+ }
437
+ return canonical(before.dependencies) !== canonical(after.dependencies);
438
+ }
439
+ function mavenView(raw) {
440
+ const dependencies = {};
441
+ let error;
442
+ const remainder = raw.replace(/<dependency>\s*[\s\S]*?<\/dependency>/g, (block) => {
443
+ const parsed = mavenDependency(block);
444
+ if (!parsed.coordinate)
445
+ error = parsed.error;
446
+ else
447
+ (dependencies[parsed.coordinate] ??= []).push(normalizeText(block));
448
+ return "";
449
+ });
450
+ return { dependencies, remainder, error };
451
+ }
452
+ function mavenDependency(block) {
453
+ const uncommented = block.replace(/<!--[\s\S]*?-->/g, "");
454
+ const group = singleXmlTag(uncommented, "groupId");
455
+ const artifact = singleXmlTag(uncommented, "artifactId");
456
+ if (!group || !artifact)
457
+ return {
458
+ error: "is missing exactly one groupId or artifactId.",
459
+ };
460
+ const coordinate = `${group}:${artifact}`;
461
+ const scopes = xmlTagValues(uncommented, "scope");
462
+ if (scopes.length !== 1 || scopes[0] !== "test")
463
+ return {
464
+ coordinate,
465
+ error: "must contain exactly one effective <scope>test</scope>.",
466
+ };
467
+ if (xmlTagValues(uncommented, "systemPath").length)
468
+ return {
469
+ coordinate,
470
+ error: "must not use a systemPath or another local package source.",
471
+ };
472
+ return { coordinate };
473
+ }
474
+ function xmlTagValues(block, tag) {
475
+ const values = [];
476
+ const expression = new RegExp(`<${tag}\\s*>\\s*([^<]+?)\\s*</${tag}\\s*>`, "g");
477
+ for (const match of block.matchAll(expression))
478
+ values.push(match[1].trim());
479
+ return values;
480
+ }
481
+ function singleXmlTag(block, tag) {
482
+ const values = xmlTagValues(block, tag);
483
+ return values.length === 1 ? values[0] : undefined;
484
+ }
485
+ function verifyGradle(file, beforeRaw, afterRaw, violations) {
486
+ const before = gradleView(beforeRaw);
487
+ const after = gradleView(afterRaw);
488
+ if (normalizeText(before.remainder) !== normalizeText(after.remainder)) {
489
+ violations.push(`${file}: Only simple allowlisted Gradle dependency declarations may change while fixing test imports.`);
490
+ }
491
+ for (const coordinate of unionKeys(before.dependencies, after.dependencies)) {
492
+ const prior = before.dependencies[coordinate];
493
+ const current = after.dependencies[coordinate];
494
+ if (canonical(prior) === canonical(current))
495
+ continue;
496
+ if (current === undefined) {
497
+ violations.push(`${file}: Removing ${coordinate} is outside the fix-errors dependency policy.`);
498
+ continue;
499
+ }
500
+ if (!JAVA_TEST_PACKAGES.has(coordinate)) {
501
+ violations.push(`${file}: ${coordinate} is not on the approved Java test-package allowlist.`);
502
+ }
503
+ else {
504
+ for (const declaration of current) {
505
+ const [configuration] = declaration.split("\0");
506
+ if (configuration !== "testImplementation" &&
507
+ configuration !== "testRuntimeOnly")
508
+ violations.push(`${file}: ${coordinate} must use testImplementation or testRuntimeOnly.`);
509
+ }
510
+ }
511
+ }
512
+ return canonical(before.dependencies) !== canonical(after.dependencies);
513
+ }
514
+ function gradleView(raw) {
515
+ const dependencies = {};
516
+ const remainder = raw.replace(/^\s*(\w+)\s*(?:\(\s*)?["']([^"']+)["']\s*\)?\s*$/gm, (line, configuration, value) => {
517
+ const parts = value.split(":");
518
+ if (parts.length < 2)
519
+ return line;
520
+ const coordinate = `${parts[0]}:${parts[1]}`;
521
+ (dependencies[coordinate] ??= []).push(`${configuration}\0${value}`);
522
+ return "";
523
+ });
524
+ return { dependencies, remainder };
525
+ }
526
+ function verifyNamedDevelopmentChanges(file, before, after, allowlist, violations, ecosystem) {
527
+ for (const name of unionKeys(before, after)) {
528
+ if (before[name] === after[name])
529
+ continue;
530
+ if (after[name] === undefined)
531
+ violations.push(`${file}: Removing ${name} is outside the fix-errors dependency policy.`);
532
+ else if (!allowlist.has(name))
533
+ violations.push(`${file}: ${name} is not on the approved ${ecosystem} test-package allowlist.`);
534
+ }
535
+ }
536
+ async function correspondingManifests(repositoryPath, file, lockName) {
537
+ const dir = path.posix.dirname(file);
538
+ const at = (name) => (dir === "." ? name : `${dir}/${name}`);
539
+ if (lockName === "package-lock.json" || lockName === "npm-shrinkwrap.json") {
540
+ const rootManifest = at("package.json");
541
+ // Membership comes from the committed root manifest, not the edited lockfile.
542
+ // A workspace addition is an unrelated manifest edit and remains disallowed.
543
+ const baseline = await baselineFile(repositoryPath, rootManifest);
544
+ if (baseline === undefined)
545
+ return [rootManifest];
546
+ const manifest = JSON.parse(baseline);
547
+ const workspaces = manifest.workspaces;
548
+ if (workspaces === undefined)
549
+ return [rootManifest];
550
+ if (!Array.isArray(workspaces) ||
551
+ !workspaces.every((item) => typeof item === "string")) {
552
+ throw new Error(`${rootManifest}: Cannot resolve workspace declarations.`);
553
+ }
554
+ for (const pattern of workspaces) {
555
+ if (!pattern ||
556
+ path.posix.isAbsolute(pattern) ||
557
+ path.win32.isAbsolute(pattern) ||
558
+ pattern.includes("\\") ||
559
+ pattern.split("/").includes("..")) {
560
+ throw new Error(`${rootManifest}: Workspace paths must stay within the project.`);
561
+ }
562
+ }
563
+ const workspaceManifests = await fg(workspaces.map((pattern) => `${pattern.replace(/\/$/, "")}/package.json`), {
564
+ cwd: path.join(repositoryPath, dir),
565
+ onlyFiles: true,
566
+ followSymbolicLinks: false,
567
+ ignore: ["**/node_modules/**", "**/.git/**"],
568
+ });
569
+ return [...new Set([rootManifest, ...workspaceManifests.sort().map(at)])];
570
+ }
571
+ for (const ecosystem of Object.values(DEPENDENCY_FILES)) {
572
+ if (ecosystem.lockfiles.some((candidate) => candidate === lockName))
573
+ return ecosystem.manifests.map(at);
574
+ }
575
+ return [];
576
+ }
577
+ async function verifyLockfile(repositoryPath, file, name, pairedManifests, validManifests, violations) {
578
+ const committedBaseline = await baselineFile(repositoryPath, file);
579
+ const baseline = committedBaseline ?? '{"packages":{}}\n';
580
+ let current;
581
+ try {
582
+ current = await readFile(path.join(repositoryPath, file), "utf8");
583
+ }
584
+ catch {
585
+ return;
586
+ }
587
+ const unsafeSource = addedUnsafeLockSource(baseline, current);
588
+ if (unsafeSource)
589
+ violations.push(`${file}: Lockfile source ${unsafeSource} is not an approved registry source.`);
590
+ if (name !== "package-lock.json" && name !== "npm-shrinkwrap.json")
591
+ return;
592
+ const manifests = new Map();
593
+ for (const [index, manifest] of pairedManifests.entries()) {
594
+ if (!(await baselineFileExists(repositoryPath, manifest))) {
595
+ const isNewRootManifest = index === 0 && validManifests.has(manifest);
596
+ if (!isNewRootManifest) {
597
+ violations.push(`${manifest}: Creating a new workspace manifest is not allowed.`);
598
+ continue;
599
+ }
600
+ }
601
+ const manifestRaw = await readFile(path.join(repositoryPath, manifest), "utf8");
602
+ const relativeDirectory = path.posix.relative(path.posix.dirname(file), path.posix.dirname(manifest));
603
+ manifests.set(relativeDirectory, JSON.parse(manifestRaw));
604
+ }
605
+ verifyPackageLock(file, baseline, current, manifests, violations);
606
+ }
607
+ function verifyPackageLock(file, beforeRaw, afterRaw, manifests, violations) {
608
+ let before;
609
+ let after;
610
+ try {
611
+ before = JSON.parse(beforeRaw);
612
+ after = JSON.parse(afterRaw);
613
+ }
614
+ catch (error) {
615
+ violations.push(`${file}: Changed npm lockfile must remain valid JSON: ${error.message}`);
616
+ return;
617
+ }
618
+ const beforePackages = objectMap(before.packages);
619
+ const afterPackages = objectMap(after.packages);
620
+ // Check every workspace, including unchanged ones, so a lockfile cannot hide
621
+ // new dependencies under a sibling app while another app authorizes the edit.
622
+ for (const [directory, manifest] of manifests) {
623
+ const entry = objectMap(afterPackages[directory]);
624
+ if (directory && !isObject(afterPackages[directory])) {
625
+ violations.push(`${file}: Missing workspace entry ${directory}.`);
626
+ }
627
+ if (directory) {
628
+ const linkPath = `node_modules/${manifest.name}`;
629
+ const link = objectMap(afterPackages[linkPath]);
630
+ if (link.link !== true || link.resolved !== directory) {
631
+ violations.push(`${file}: ${linkPath} must link to its declared workspace ${directory}.`);
632
+ }
633
+ }
634
+ for (const scope of [
635
+ "dependencies",
636
+ "devDependencies",
637
+ "optionalDependencies",
638
+ "peerDependencies",
639
+ ]) {
640
+ if (entry[scope] !== undefined && !isStringRecord(entry[scope])) {
641
+ violations.push(`${file}: ${directory || "Root"} ${scope} must be an object of version strings.`);
642
+ }
643
+ if (canonical(stringMap(entry[scope])) !==
644
+ canonical(stringMap(manifest[scope]))) {
645
+ violations.push(`${file}: ${directory || "Root"} ${scope} must match package.json exactly.`);
646
+ }
647
+ }
648
+ }
649
+ const reachable = reachablePackageLockEntries(afterPackages, manifests);
650
+ for (const packagePath of Object.keys(afterPackages)) {
651
+ const entry = objectMap(afterPackages[packagePath]);
652
+ if (entry.link === true &&
653
+ canonical(beforePackages[packagePath]) !== canonical(entry)) {
654
+ const target = typeof entry.resolved === "string"
655
+ ? manifests.get(entry.resolved)
656
+ : undefined;
657
+ if (!entry.resolved ||
658
+ !target ||
659
+ packagePath !== `node_modules/${target.name}`) {
660
+ violations.push(`${file}: ${packagePath} must link to its declared workspace.`);
661
+ }
662
+ }
663
+ if (packagePath &&
664
+ beforePackages[packagePath] === undefined &&
665
+ !reachable.has(packagePath))
666
+ violations.push(`${file}: Added unrelated lockfile package ${packagePath}.`);
667
+ }
668
+ }
669
+ function reachablePackageLockEntries(packages, manifests) {
670
+ const reachable = new Set();
671
+ const queue = [...manifests.keys()];
672
+ for (const [directory, manifest] of manifests) {
673
+ if (!directory)
674
+ continue;
675
+ const linkPath = `node_modules/${manifest.name}`;
676
+ const link = objectMap(packages[linkPath]);
677
+ if (link.link === true && link.resolved === directory)
678
+ queue.push(linkPath);
679
+ }
680
+ while (queue.length) {
681
+ const current = queue.shift();
682
+ if (reachable.has(current))
683
+ continue;
684
+ reachable.add(current);
685
+ const entry = objectMap(packages[current]);
686
+ if (entry.link === true) {
687
+ if (typeof entry.resolved === "string" && manifests.has(entry.resolved))
688
+ queue.push(entry.resolved);
689
+ continue;
690
+ }
691
+ // Seed workspace dependencies from their actual manifests. Registry packages
692
+ // contribute only installed dependencies, not their own development tools.
693
+ const manifest = manifests.get(current);
694
+ const dependencies = manifest ?? entry;
695
+ for (const name of Object.keys({
696
+ ...stringMap(dependencies.dependencies),
697
+ ...stringMap(manifest?.devDependencies),
698
+ ...stringMap(dependencies.optionalDependencies),
699
+ ...stringMap(dependencies.peerDependencies),
700
+ })) {
701
+ const resolved = resolvePackageLockEntry(current, name, packages);
702
+ if (resolved && !reachable.has(resolved))
703
+ queue.push(resolved);
704
+ }
705
+ }
706
+ return reachable;
707
+ }
708
+ function resolvePackageLockEntry(owner, dependency, packages) {
709
+ let directory = owner;
710
+ while (true) {
711
+ const prefix = directory ? `${directory}/node_modules` : "node_modules";
712
+ const candidate = `${prefix}/${dependency}`;
713
+ if (packages[candidate] !== undefined)
714
+ return candidate;
715
+ if (!directory)
716
+ break;
717
+ directory = path.posix.dirname(directory);
718
+ if (path.posix.basename(directory) === "node_modules")
719
+ directory = path.posix.dirname(directory);
720
+ if (directory === ".")
721
+ directory = "";
722
+ }
723
+ return undefined;
724
+ }
725
+ function addedUnsafeLockSource(beforeRaw, afterRaw) {
726
+ const allowedHosts = new Set(["registry.npmjs.org"]);
727
+ for (const match of beforeRaw.matchAll(/https:\/\/([^/\s"']+)/g))
728
+ allowedHosts.add(match[1].toLowerCase());
729
+ const beforeLines = new Set(beforeRaw.replace(/\r\n/g, "\n").split("\n"));
730
+ for (const line of afterRaw.replace(/\r\n/g, "\n").split("\n")) {
731
+ if (beforeLines.has(line))
732
+ continue;
733
+ const unsafe = line.match(/(?:file:|git\+|git@|ssh:\/\/|http:\/\/)[^\s"']*/i)?.[0];
734
+ if (unsafe)
735
+ return unsafe;
736
+ for (const match of line.matchAll(/https:\/\/([^/\s"']+)/g)) {
737
+ if (!allowedHosts.has(match[1].toLowerCase()))
738
+ return match[0];
739
+ }
740
+ }
741
+ return undefined;
742
+ }
743
+ function stringMap(value) {
744
+ if (!isObject(value))
745
+ return {};
746
+ return Object.fromEntries(Object.entries(value).filter((entry) => typeof entry[1] === "string"));
747
+ }
748
+ function objectMap(value) {
749
+ return isObject(value) ? value : {};
750
+ }
751
+ function nestedObject(root, ...keys) {
752
+ let current = root;
753
+ for (const key of keys) {
754
+ if (!isObject(current))
755
+ return undefined;
756
+ current = current[key];
757
+ }
758
+ return isObject(current) ? current : undefined;
759
+ }
760
+ function nestedValue(root, ...keys) {
761
+ let current = root;
762
+ for (const key of keys) {
763
+ if (!isObject(current))
764
+ return undefined;
765
+ current = current[key];
766
+ }
767
+ return current;
768
+ }
769
+ function deleteNestedAndPrune(root, ...keys) {
770
+ const parents = [root];
771
+ let current = root;
772
+ for (const key of keys.slice(0, -1)) {
773
+ const child = current[key];
774
+ if (!isObject(child))
775
+ return;
776
+ current = child;
777
+ parents.push(current);
778
+ }
779
+ delete current[keys.at(-1)];
780
+ for (let index = parents.length - 1; index > 0; index--) {
781
+ if (Object.keys(parents[index]).length)
782
+ break;
783
+ delete parents[index - 1][keys[index - 1]];
784
+ }
785
+ }
786
+ function isStringRecord(value) {
787
+ return (isObject(value) &&
788
+ Object.values(value).every((entry) => typeof entry === "string"));
789
+ }
790
+ function unionKeys(a, b) {
791
+ return [...new Set([...Object.keys(a), ...Object.keys(b)])].sort();
792
+ }
793
+ function normalizeText(value) {
794
+ return value
795
+ .replace(/\r\n/g, "\n")
796
+ .split("\n")
797
+ .map((line) => line.trim())
798
+ .filter(Boolean)
799
+ .join("\n");
800
+ }
801
+ function normalizePythonName(value) {
802
+ return value.trim().toLowerCase().replace(/[_.]+/g, "-");
803
+ }
804
+ function isSafeNpmSpecifier(value) {
805
+ return Boolean(value) && !/[:/\\]|^(?:\.|git\+)|\s@\s/i.test(value);
806
+ }
807
+ function isSafePythonRequirement(value) {
808
+ return !/(?:\s@\s|https?:|git\+|file:|^\s*-)/i.test(value);
809
+ }