@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,207 @@
1
+ import { blankCommentsAndStrings, blankStrings, hasDefault, paramName, } from "./parse.js";
2
+ import { STATUS_RECEIVER } from "./language-spec.js";
3
+ import { escapeRegExp } from "../regex.js";
4
+ /**
5
+ * Where a test states the status it expects: ONCE, as the argument of the helper
6
+ * call. The shared-helper policy says the helper asserts the status — that is the
7
+ * invariant that makes it safe for another test to call — and stopped there, so the
8
+ * agent decided what the spec then contains and decided differently each run. Two
9
+ * shapes came out: the spec states nothing (the status is a defaulted parameter the
10
+ * call omits) or states it twice (the spec asserts again on the returned response).
11
+ * Neither is a gate escape — a status assertion in a helper is allowed on purpose,
12
+ * and the assertion-loss count credits the helper's assertion to the spec — so both
13
+ * rules are stated here as code, beside the policy sentence the prompt renders.
14
+ */
15
+ /** The RECEIVER of a status assertion — `response.status`, `r.statusCode`,
16
+ * `resp.status_code`, `res.status()` — blanked before the parameters are looked
17
+ * for, so a helper handed the response as a parameter is not read as reading it. */
18
+ const STATUS_RECEIVER_RE = /[\w$.]*\.status(?:_?[cC]ode)?\b(?:\s*\(\s*\))?/g;
19
+ /** `assert.strictEqual(<status receiver>, …)` — the matcher form, with the status
20
+ * itself as the compared value rather than an expression over it. */
21
+ const ASSERT_MATCHER_STATUS_RE = new RegExp(`(?<![\\w$.])assert\\.(?:strictEqual|equal|deepStrictEqual|deepEqual)\\s*\\(\\s*${STATUS_RECEIVER}\\s*,`);
22
+ /** `assert(<status receiver> === …)` / `== …` — the one bare-assert shape that pins. */
23
+ const ASSERT_STATUS_EQUALITY_RE = new RegExp(`(?<![\\w$.])assert\\s*\\(\\s*${STATUS_RECEIVER}\\s*===?(?!=)`);
24
+ /** A TypeScript optional parameter: `expectedStatus?: number` / `expectedStatus?`. */
25
+ const OPTIONAL_PARAM_RE = /^[A-Za-z_$][\w$]*\s*\?(?:\s*:|$)/;
26
+ /** The helper's status-only assertions, as the language spec recognises them. */
27
+ export function statusAssertions(h, spec) {
28
+ return h.assertions.filter((a) => spec.allowedAssertion.test(a.text));
29
+ }
30
+ /** Whether the helper pins the status to ONE value — an equality whose operand IS
31
+ * the status, not a bound or a set (`toBeLessThan(500)`, `in (200, 201)`), and not
32
+ * an equality elsewhere in the same assertion (`… < 500 and attempts == 1`). Only
33
+ * then is a status assertion in the spec a restatement rather than a tighter
34
+ * claim. A `.not.` form pins nothing. */
35
+ export function assertsStatusEquality(h, spec) {
36
+ return statusAssertions(h, spec).some((a) => {
37
+ const code = blankStrings(a.text, spec);
38
+ // A disjunction admits more than one value — `== 200 or == 201`,
39
+ // `=== 200 || === 201` — so the status is not pinned to one.
40
+ if (spec.language === "python" ? /\bor\b/.test(code) : /\|\|/.test(code))
41
+ return false;
42
+ return spec.language === "python"
43
+ ? /\bstatus_code\b\s*==(?!=)|(?<![=!<>])==(?!=)\s*[\w$.]*\bstatus_code\b/.test(code)
44
+ : (/\)\s*\.\s*(?:toBe|toEqual|toStrictEqual)\s*\(/.test(a.text) &&
45
+ !/\.\s*not\s*\./.test(a.text)) ||
46
+ // The matcher form pins only when the status RECEIVER is the value being
47
+ // compared — its first argument, followed by the comma that ends it.
48
+ // `assert.strictEqual(r.statusCode < 500, true)` compares a BOOLEAN: the
49
+ // status is bounded, not pinned, and a later exact check is the tighter
50
+ // claim. The matcher's name alone decided, and refused that check.
51
+ ASSERT_MATCHER_STATUS_RE.test(code) ||
52
+ // The bare form pins only when a POSITIVE equality is anchored to the
53
+ // status receiver: `!==` carries `==` inside it, and an equality elsewhere
54
+ // in the condition says nothing about the status.
55
+ ASSERT_STATUS_EQUALITY_RE.test(code);
56
+ });
57
+ }
58
+ /**
59
+ * The parameter the helper's status assertion READS, when it carries a default (or
60
+ * is optional). `undefined` when the helper asserts no status, when its status
61
+ * assertion reads a literal rather than a parameter, or when the parameter has no
62
+ * default.
63
+ *
64
+ * Keyed on the assertion, not on the parameter's name: the same cohort that produced
65
+ * the evidence spelled it `expectedStatus` in one module and `expectedStatusCode` in
66
+ * another, and a name-matched rule misses whichever spelling the next run picks. A
67
+ * `None` default counts — a helper whose assertion is switched off by default lets
68
+ * a caller read the status without verifying it.
69
+ */
70
+ export function defaultedStatusParam(h, spec) {
71
+ const read = statusParamOf(h, spec);
72
+ return read && (hasDefault(read.param) || OPTIONAL_PARAM_RE.test(read.param))
73
+ ? { param: read.param.replace(/\s+/g, " "), name: read.name }
74
+ : undefined;
75
+ }
76
+ /** The declared parameter the helper's status assertion reads, or `undefined` when
77
+ * the helper asserts no status or compares it against a literal. */
78
+ export function statusParamOf(h, spec) {
79
+ if (!h.params)
80
+ return undefined;
81
+ const declared = new Map(h.params.map((p) => [paramName(p), p]));
82
+ for (const a of statusAssertions(h, spec)) {
83
+ // Strings blanked (a message may name anything), then the receiver.
84
+ const read = blankStrings(a.text, spec).replace(STATUS_RECEIVER_RE, " ");
85
+ for (const m of read.matchAll(/[A-Za-z_$][\w$]*/g)) {
86
+ const raw = declared.get(m[0]);
87
+ if (raw !== undefined)
88
+ return { param: raw, name: m[0] };
89
+ }
90
+ }
91
+ return undefined;
92
+ }
93
+ /** The literal a helper pins the status to (`200`), when it pins one and reads no
94
+ * parameter for it — the shape whose restatement cannot be fixed by deleting the
95
+ * spec's assertion alone, because the call has no status argument to keep. */
96
+ export function pinnedStatusLiteral(h, spec) {
97
+ if (!assertsStatusEquality(h, spec) || statusParamOf(h, spec))
98
+ return undefined;
99
+ for (const a of statusAssertions(h, spec)) {
100
+ const m = /\b(\d{3})\b/.exec(blankStrings(a.text, spec).replace(STATUS_RECEIVER_RE, " "));
101
+ if (m)
102
+ return m[1];
103
+ }
104
+ return "the literal";
105
+ }
106
+ /** A status-only assertion whose receiver is the variable `v`, per language — the
107
+ * `expect(…)` form and the `node:assert` form (`assert.strictEqual(r.statusCode,
108
+ * 200)`), the same two the language's assertion pattern reads. ANY operator counts
109
+ * on this side: once the helper has pinned the status to one value, a further
110
+ * status assertion on that response is redundant whatever it compares. Neither
111
+ * name may follow an identifier or a dot: `console.assert(…)` asserts nothing. */
112
+ function statusAssertionOn(v, spec) {
113
+ const id = escapeRegExp(v);
114
+ return spec.language === "python"
115
+ ? new RegExp(`\\b${id}\\.status_code\\b`)
116
+ : new RegExp(`(?<![\\w$.])(?:expect(?:\\.soft)?|assert(?:\\.\\w+)?)\\s*\\(\\s*${id}\\.status(?:_?[cC]ode)?\\b`);
117
+ }
118
+ /** `<v> = <helper>(` in either language, with or without a declaration keyword, a
119
+ * type annotation or `await` — and qualified only by a name the spec binds the
120
+ * utils MODULE to (`utils.getOrder(`). Any other qualifier is another object's
121
+ * method of the same name (`client.getOrder(`), which the helper never ran; an
122
+ * unconstrained qualifier made that a blocking finding. */
123
+ function bindingOf(helper, qualifiers) {
124
+ const qualified = qualifiers.length > 0
125
+ ? `(?:(?:${qualifiers.map(escapeRegExp).join("|")})\\.)?`
126
+ : "";
127
+ return new RegExp(`(?:^|[^\\w$.])(?:(?:const|let|var)\\s+)?([A-Za-z_$][\\w$]*)\\s*(?::[^=\\n]*)?=\\s*(?:await\\s+)?${qualified}${escapeRegExp(helper)}\\s*\\(`);
128
+ }
129
+ /** Where the variable stops naming the helper's response: an assignment to `v`, a
130
+ * declaration of `v` with or without `=` (`for (const v of …)`), or `v` declared as
131
+ * a callback parameter (`(v) =>`, `v =>`). */
132
+ function rebindingOf(v) {
133
+ const id = escapeRegExp(v);
134
+ return new RegExp(`(?:^|[^\\w$.])(?:(?:const|let|var)\\s+${id}\\b|${id}\\s*(?::[^=\\n]*)?=(?![=>])|\\(\\s*[^()]*\\b${id}\\b[^()]*\\)\\s*=>|${id}\\s*=>)`);
135
+ }
136
+ /** A line that opens another scope: a function or test block, whose `v` is whatever
137
+ * that scope binds. The scan is line-based and has no block structure, so a later
138
+ * \`def check(r)\` or the next \`test(…)\` would otherwise inherit an earlier
139
+ * binding of \`r\` and report a restatement that is not one — a false finding on a
140
+ * BLOCKING kind. Stopping here costs a miss at worst. */
141
+ function scopeBoundaryOf(spec) {
142
+ return spec.language === "python"
143
+ ? /^\s*(?:(?:async\s+)?def\s+\w+\s*\(|class\s+\w)/
144
+ : /^\s*(?:(?:export\s+)?(?:(?:async\s+)?function\b|(?:abstract\s+)?class\s+\w)|(?:test|it|describe)(?:\.\w+)*\s*\()/;
145
+ }
146
+ /**
147
+ * Call sites in the spec whose returned response the spec then asserts the status
148
+ * of — for helpers that already assert it. One finding per helper, with the count.
149
+ *
150
+ * The link from call to assertion is the RESPONSE VARIABLE: the call's result is
151
+ * bound to a name (`const r = await getOrder(…)`, `r = get_order(…)`), and a later
152
+ * line asserts on `<that name>.status…` before the name is assigned again. Read on
153
+ * a copy with comments and string contents blanked, so a commented-out call or a
154
+ * quoted example binds nothing, and it stops at the next function or test block,
155
+ * which binds its own names. What this cannot see: a destructured result
156
+ * (`const { statusCode } = await …`), a call passed straight into an assertion
157
+ * (`expect((await getOrder(…)).status)`), an alias of the status (`const s =
158
+ * r.status`), a helper called under an import alias, and a response threaded through
159
+ * a further call or a `.then`. Each is a miss, never a false finding.
160
+ */
161
+ export function restatedStatusAssertions(specContent, spec, helpers,
162
+ /** Names the spec binds the utils module to — see UtilsLanguageSpec.moduleQualifiers. */
163
+ qualifiers = []) {
164
+ if (helpers.length === 0 || specContent === "")
165
+ return [];
166
+ const lines = blankCommentsAndStrings(specContent, spec).split("\n");
167
+ const raw = specContent.split("\n");
168
+ const out = [];
169
+ const boundary = scopeBoundaryOf(spec);
170
+ for (const helper of helpers) {
171
+ const bind = bindingOf(helper, qualifiers);
172
+ let first;
173
+ for (let i = 0; i < lines.length; i++) {
174
+ const m = bind.exec(lines[i]);
175
+ if (!m)
176
+ continue;
177
+ const v = m[1];
178
+ const asserted = statusAssertionOn(v, spec);
179
+ const rebound = rebindingOf(v);
180
+ for (let j = i + 1; j < lines.length; j++) {
181
+ if (rebound.test(lines[j]) || boundary.test(lines[j]))
182
+ break;
183
+ // A formatted assertion may open on one line and name its receiver on the
184
+ // next; the window is three lines, anchored on a match that begins in this one.
185
+ const window = lines.slice(j, j + 3).join(" ");
186
+ const hit = asserted.exec(window);
187
+ if (!hit || hit.index >= lines[j].length)
188
+ continue;
189
+ if (spec.language === "python" && !spec.allowedAssertion.test(lines[j]))
190
+ continue;
191
+ if (first)
192
+ first.sites++;
193
+ else
194
+ first = {
195
+ helper,
196
+ line: j + 1,
197
+ text: raw[j].trim(),
198
+ sites: 1,
199
+ };
200
+ break;
201
+ }
202
+ }
203
+ if (first)
204
+ out.push(first);
205
+ }
206
+ return out;
207
+ }
@@ -0,0 +1,61 @@
1
+ /**
2
+ * One compiler error in a delivered file, 1-based line, `code` the TS number
3
+ * (`2322`), `message` the flattened text.
4
+ */
5
+ export interface TypeFinding {
6
+ file: string;
7
+ line: number;
8
+ code: number;
9
+ message: string;
10
+ }
11
+ export interface UtilsTypecheck {
12
+ /** Whether the compiler ran over the delivered files at all. */
13
+ ran: boolean;
14
+ /** Why it did not run. Present only when `ran` is false. */
15
+ reason?: string;
16
+ /** Errors under the most permissive settings the compiler has — every strictness
17
+ * flag off, extensionless imports accepted. An error here fails under EVERY
18
+ * configuration, so it is the customer's error whatever their tsconfig says. */
19
+ errors: TypeFinding[];
20
+ /** Errors of the "cannot find name / global" family, from the permissive pass:
21
+ * `process`, `describe`, `Promise`. Whether such a name exists depends on the
22
+ * declaration packages the repository installs (`@types/node`, a test runner's
23
+ * types) and its `lib` setting — which this run cannot see, because the
24
+ * testbot never installs the repository's dependencies. The customer's own
25
+ * `tsc`, with node_modules present, may accept every one of them, so they are
26
+ * a gap to state, never a block. */
27
+ ambientErrors: TypeFinding[];
28
+ /** Errors present only under the repository's own tsconfig (`noImplicitAny`,
29
+ * `strictNullChecks`, …). Whether that tsconfig is the one the customer's build
30
+ * runs is their call — advised, never blocked. Empty without a reaching tsconfig. */
31
+ settingErrors: TypeFinding[];
32
+ /** The tsconfig whose settings produced `settingErrors`: the nearest one above a
33
+ * delivered file that includes at least one of them (the rest come in through
34
+ * imports), followed through `references`. */
35
+ tsconfig?: string;
36
+ /** A tsconfig found above the files that includes none of them (nor does any
37
+ * project it references): the customer's `tsc` never sees these files, so no
38
+ * settings pass ran. */
39
+ tsconfigNotReaching?: string;
40
+ /** Import specifiers in the delivered files that resolved from neither the
41
+ * repository nor the MCP's own install. Everything typed by such a module is
42
+ * `any` to the compiler and was NOT checked — reported as a gap, never as an
43
+ * error, because whether a module is installed is not a fault in the file. */
44
+ unresolved: string[];
45
+ }
46
+ export declare const AMBIENT_DECLARATION_CODES: Set<number>;
47
+ /**
48
+ * Typecheck the delivered TypeScript files — the shared module and the spec that
49
+ * imports it — with the compiler the MCP itself depends on, so the check runs in
50
+ * every repository whether or not `typescript` is installed there.
51
+ *
52
+ * Two passes over the same files. The PERMISSIVE pass has every strictness flag off:
53
+ * an error it reports fails under any configuration and is blocking (`errors`). The
54
+ * SETTINGS pass runs the repository's own tsconfig, when one reaches the files; what
55
+ * it adds is an error only under those settings and is advisory (`settingErrors`).
56
+ * The executor transpiles without typechecking, so neither pass has run before this
57
+ * one, and a delivered file that fails here reaches the customer's own `tsc` first.
58
+ *
59
+ * Never throws: a compiler failure is a result that says the check did not run.
60
+ */
61
+ export declare function typecheckDelivered(files: string[], mcpRoot?: string): Promise<UtilsTypecheck>;
@@ -0,0 +1,338 @@
1
+ import * as path from "path";
2
+ import { fileURLToPath } from "url";
3
+ let tsModule;
4
+ /** The compiler, loaded on first use and once per process. Loaded statically it
5
+ * rode along with every import of the verifier — about 9 MB of JavaScript that
6
+ * each jest test file instantiated in its own module registry, which took a CI
7
+ * worker on Node 18 past its 2 GB heap. Only a verify that actually compiles
8
+ * TypeScript needs it. */
9
+ function loadTs() {
10
+ return (tsModule ??= import("typescript").then(
11
+ // The package is CommonJS: the namespace carries it as `default` where the
12
+ // loader could not lift its named exports.
13
+ (mod) => mod.default ?? mod));
14
+ }
15
+ /** The `@skyramp/mcp` package root — `typescript`, `@skyramp/skyramp` and
16
+ * `@playwright/test` are its runtime dependencies, so a module the customer's
17
+ * repository lacks can still be resolved from here. build/utils/utils-verify/x.js
18
+ * and src/utils/utils-verify/x.ts both sit three levels below it. */
19
+ function mcpPackageRoot() {
20
+ return path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "..", "..");
21
+ }
22
+ /** `Cannot find module …` — the resolution gap `unresolved` records; not an error
23
+ * in the file. 2792 is the same message with a moduleResolution hint. */
24
+ const UNRESOLVED_MODULE_CODES = new Set([2307, 2792]);
25
+ /** "Cannot find name / namespace / global value / global type", in EVERY spelling the
26
+ * compiler has, read off its own message table (the test cross-checks the list
27
+ * against `ts.Diagnostics`): the plain forms (2304, 2318, 2468, 2503), the forms
28
+ * with a suggestion attached (2552 "Did you mean", 2662/2663 member hints, 2833,
29
+ * 2311), the forms that name the missing declarations — node (2580, 2591), jQuery
30
+ * (2581, 2592), a test runner (2582, 2593), Bun (2867, 2868), `lib` (2583, 2584) —
31
+ * the Promise constructor (2705, 2712), and a shorthand property with no value in
32
+ * scope (18004). The compiler cannot tell a typo from a global whose declarations
33
+ * the run cannot see, and it picks the SPELLING by whether a declared name happens
34
+ * to sit near the missing one (`headers` beside lib.dom's `Headers` is 2552 where
35
+ * `hdrs` is 2304), so the whole family is reported as `ambientErrors`. */
36
+ /** Packages the EXECUTOR supplies at run time, whatever the repository pins. Their
37
+ * types are resolved from the MCP's own install first: a repository pinned to an
38
+ * older `@skyramp/skyramp` (one whose `SendRequestV2Options` has no `queryParams`)
39
+ * made the call shape the helper policy prescribes a blocking TS2353, on code the
40
+ * executor runs correctly — and a `type-error` has no marker, so the agent's only
41
+ * exit was to rewrite working code. Every other package still resolves from the
42
+ * repository first, because every other package is the repository's to pin. */
43
+ const EXECUTOR_PROVIDED_PACKAGES = ["@skyramp/skyramp"];
44
+ function executorProvides(specifier) {
45
+ return EXECUTOR_PROVIDED_PACKAGES.some((p) => specifier === p || specifier.startsWith(`${p}/`));
46
+ }
47
+ export const AMBIENT_DECLARATION_CODES = new Set([
48
+ 2304, 2311, 2318, 2468, 2503, 2552, 2580, 2581, 2582, 2583, 2584, 2591, 2592,
49
+ 2593, 2662, 2663, 2705, 2712, 2833, 2867, 2868, 18004,
50
+ ]);
51
+ /**
52
+ * The settings under which an error is the FILE's fault and nothing else's: every
53
+ * strictness flag off, every import form accepted, the widest target and library,
54
+ * nothing emitted. Only the repository's RESOLUTION options are carried in (the
55
+ * list below) — they decide what resolves, not what is strict or what exists.
56
+ */
57
+ /** The repository options that decide WHAT RESOLVES — an alias, a base URL, a
58
+ * type root, a `types` list, a package-condition set. Everything else in a
59
+ * tsconfig is a setting the settings pass reports; carried into the permissive
60
+ * pass it would either add errors (`target: ES5` makes a bigint literal one) or
61
+ * remove them (`noCheck: true` removes all of them). */
62
+ const RESOLUTION_OPTIONS = [
63
+ "paths",
64
+ "baseUrl",
65
+ "rootDirs",
66
+ "typeRoots",
67
+ "types",
68
+ "moduleSuffixes",
69
+ "customConditions",
70
+ "resolvePackageJsonExports",
71
+ "resolvePackageJsonImports",
72
+ "allowArbitraryExtensions",
73
+ "preserveSymlinks",
74
+ ];
75
+ function permissiveOptions(ts, base) {
76
+ const kept = {};
77
+ for (const key of RESOLUTION_OPTIONS)
78
+ if (base[key] !== undefined)
79
+ kept[key] = base[key];
80
+ return {
81
+ ...kept,
82
+ target: ts.ScriptTarget.ES2022,
83
+ jsx: ts.JsxEmit.Preserve,
84
+ noCheck: false,
85
+ noEmit: true,
86
+ skipLibCheck: true,
87
+ composite: false,
88
+ incremental: false,
89
+ declaration: false,
90
+ emitDeclarationOnly: false,
91
+ noEmitOnError: false,
92
+ // Resolution: the most accepting mode. A `.js` specifier finds the `.ts` file,
93
+ // an extensionless one too, and a `.ts` extension is not refused.
94
+ module: ts.ModuleKind.ESNext,
95
+ moduleResolution: ts.ModuleResolutionKind.Bundler,
96
+ allowImportingTsExtensions: true,
97
+ resolveJsonModule: true,
98
+ allowSyntheticDefaultImports: true,
99
+ esModuleInterop: true,
100
+ allowJs: true,
101
+ checkJs: false,
102
+ isolatedModules: false,
103
+ verbatimModuleSyntax: false,
104
+ // Strictness: everything off, individually — `strict: false` alone leaves a flag
105
+ // the repository set explicitly in force.
106
+ strict: false,
107
+ noImplicitAny: false,
108
+ strictNullChecks: false,
109
+ strictFunctionTypes: false,
110
+ strictBindCallApply: false,
111
+ strictPropertyInitialization: false,
112
+ strictBuiltinIteratorReturn: false,
113
+ noImplicitThis: false,
114
+ alwaysStrict: false,
115
+ useUnknownInCatchVariables: false,
116
+ exactOptionalPropertyTypes: false,
117
+ noUncheckedIndexedAccess: false,
118
+ noUncheckedSideEffectImports: false,
119
+ noImplicitReturns: false,
120
+ noImplicitOverride: false,
121
+ noPropertyAccessFromIndexSignature: false,
122
+ noUnusedLocals: false,
123
+ noUnusedParameters: false,
124
+ noFallthroughCasesInSwitch: false,
125
+ allowUnreachableCode: true,
126
+ allowUnusedLabels: true,
127
+ };
128
+ }
129
+ /** The repository's own options, made runnable over a hand-picked file list: nothing
130
+ * emitted, no project-build bookkeeping (`composite` would report every file the
131
+ * config did not list, and the imports it pulls in are not listed). */
132
+ function settingsOptions(base) {
133
+ return {
134
+ ...base,
135
+ noEmit: true,
136
+ skipLibCheck: true,
137
+ composite: false,
138
+ incremental: false,
139
+ tsBuildInfoFile: undefined,
140
+ declaration: false,
141
+ emitDeclarationOnly: false,
142
+ noEmitOnError: false,
143
+ };
144
+ }
145
+ function parseConfig(ts, configPath) {
146
+ const read = ts.readConfigFile(configPath, ts.sys.readFile);
147
+ if (read.error || !read.config)
148
+ return undefined;
149
+ const parsed = ts.parseJsonConfigFileContent(read.config, ts.sys, path.dirname(configPath), undefined, configPath);
150
+ return { path: configPath, parsed };
151
+ }
152
+ /** Whether the config's root files name at least one delivered file. Root files
153
+ * only — `include` lists the specs, and the shared module comes into the program
154
+ * through their imports — so one match means the customer's `tsc -p` compiles
155
+ * the whole delivery. */
156
+ function includesAny(parsed, files) {
157
+ const listed = new Set(parsed.fileNames.map((f) => path.normalize(f)));
158
+ return files.some((f) => listed.has(path.normalize(f)));
159
+ }
160
+ /**
161
+ * The nearest tsconfig above each delivered file (an imported module may live
162
+ * outside the spec's package, and the package config sits above the spec), and —
163
+ * when one of them includes a delivered file, directly or through its
164
+ * `references` (the solution-style layout: a root config with `files: []`
165
+ * pointing at per-target configs, which may point further) — the config that
166
+ * reaches the delivery. The reference graph is walked depth-first with a visited
167
+ * set: a nested graph (root → package → tests) is valid, and a cycle must not
168
+ * hang the verify. `nearest` is the first config found, in the order the files
169
+ * were given.
170
+ */
171
+ function findConfigs(ts, files) {
172
+ const seen = new Set();
173
+ const candidates = [];
174
+ for (const file of files) {
175
+ const configPath = ts.findConfigFile(path.dirname(file), ts.sys.fileExists);
176
+ if (!configPath || seen.has(configPath))
177
+ continue;
178
+ seen.add(configPath);
179
+ const parsed = parseConfig(ts, configPath);
180
+ if (parsed)
181
+ candidates.push(parsed);
182
+ }
183
+ if (candidates.length === 0)
184
+ return {};
185
+ const visited = new Set();
186
+ const reachingFrom = (config) => {
187
+ if (visited.has(config.path))
188
+ return undefined;
189
+ visited.add(config.path);
190
+ if (includesAny(config.parsed, files))
191
+ return config;
192
+ for (const ref of config.parsed.projectReferences ?? []) {
193
+ const referenced = parseConfig(ts, ts.resolveProjectReferencePath(ref));
194
+ const found = referenced && reachingFrom(referenced);
195
+ if (found)
196
+ return found;
197
+ }
198
+ return undefined;
199
+ };
200
+ for (const candidate of candidates) {
201
+ const reaching = reachingFrom(candidate);
202
+ if (reaching)
203
+ return { nearest: candidates[0], reaching };
204
+ }
205
+ return { nearest: candidates[0] };
206
+ }
207
+ /**
208
+ * One compiler run over `files`. Module resolution tries the repository first and
209
+ * the MCP's own install second, so `@skyramp/skyramp` resolves whether or not the
210
+ * customer installed it; what resolves from neither is recorded, not reported as
211
+ * an error, and its diagnostics are dropped (everything typed by it is `any` and
212
+ * was not checked — the gap is stated instead).
213
+ */
214
+ function runPass(ts, files, options, mcpRoot) {
215
+ const own = new Set(files.map((f) => path.normalize(f)));
216
+ const unresolved = new Set();
217
+ const host = ts.createCompilerHost(options, true);
218
+ // Global types (`@types/*` pulled in automatically) are looked up from the current
219
+ // directory upward. That must be the repository, not wherever the MCP process
220
+ // happens to run: the MCP's own `@types/jest` made a bare `expect` compile here
221
+ // that the customer's `tsc` cannot see.
222
+ const repoDir = path.dirname(files[0]);
223
+ host.getCurrentDirectory = () => repoDir;
224
+ // A containing file that does not exist is fine for resolution: only its
225
+ // directory is read, and node_modules is looked up from there.
226
+ const anchor = path.join(mcpRoot, "__skyramp_typecheck_anchor__.ts");
227
+ host.resolveModuleNameLiterals = (literals, containingFile, _r, opts) => literals.map((literal) => {
228
+ const delivered = own.has(path.normalize(containingFile));
229
+ // The executor's own packages are read from the MCP's install first;
230
+ // everything else from the repository first, the MCP second.
231
+ const [first, second] = executorProvides(literal.text)
232
+ ? [anchor, containingFile]
233
+ : [containingFile, anchor];
234
+ let resolved = ts.resolveModuleName(literal.text, first, opts, host);
235
+ if (!resolved.resolvedModule) {
236
+ const other = ts.resolveModuleName(literal.text, second, opts, host);
237
+ if (other.resolvedModule)
238
+ resolved = other;
239
+ else if (delivered)
240
+ unresolved.add(literal.text);
241
+ }
242
+ return resolved;
243
+ });
244
+ const program = ts.createProgram(files, options, host);
245
+ // A module the program declares AMBIENTLY (`declare module "fs"`, which every
246
+ // `@types/node` carries) resolves to no file, so the resolver above records it as
247
+ // a gap while the checker reads it correctly. Reporting it told the agent to go
248
+ // fix an import that was right — the same class of instruction as the `process`
249
+ // rewrite. The checker's own ambient list settles it.
250
+ for (const ambient of program.getTypeChecker().getAmbientModules())
251
+ unresolved.delete(ambient.name.replace(/^["']|["']$/g, ""));
252
+ const findings = [];
253
+ const unresolvedFindings = [];
254
+ for (const file of files) {
255
+ const sf = program.getSourceFile(file);
256
+ if (!sf)
257
+ continue;
258
+ for (const d of [
259
+ ...program.getSyntacticDiagnostics(sf),
260
+ ...program.getSemanticDiagnostics(sf),
261
+ ]) {
262
+ if (d.category !== ts.DiagnosticCategory.Error)
263
+ continue;
264
+ const { line } = sf.getLineAndCharacterOfPosition(d.start ?? 0);
265
+ (UNRESOLVED_MODULE_CODES.has(d.code)
266
+ ? unresolvedFindings
267
+ : findings).push({
268
+ file,
269
+ line: line + 1,
270
+ code: d.code,
271
+ message: ts.flattenDiagnosticMessageText(d.messageText, " "),
272
+ });
273
+ }
274
+ }
275
+ return { findings, unresolvedFindings, unresolved };
276
+ }
277
+ const findingKey = (f) => `${f.file}\0${f.line}\0${f.code}\0${f.message}`;
278
+ /**
279
+ * Typecheck the delivered TypeScript files — the shared module and the spec that
280
+ * imports it — with the compiler the MCP itself depends on, so the check runs in
281
+ * every repository whether or not `typescript` is installed there.
282
+ *
283
+ * Two passes over the same files. The PERMISSIVE pass has every strictness flag off:
284
+ * an error it reports fails under any configuration and is blocking (`errors`). The
285
+ * SETTINGS pass runs the repository's own tsconfig, when one reaches the files; what
286
+ * it adds is an error only under those settings and is advisory (`settingErrors`).
287
+ * The executor transpiles without typechecking, so neither pass has run before this
288
+ * one, and a delivered file that fails here reaches the customer's own `tsc` first.
289
+ *
290
+ * Never throws: a compiler failure is a result that says the check did not run.
291
+ */
292
+ export async function typecheckDelivered(files, mcpRoot = mcpPackageRoot()) {
293
+ const result = {
294
+ ran: false,
295
+ errors: [],
296
+ ambientErrors: [],
297
+ settingErrors: [],
298
+ unresolved: [],
299
+ };
300
+ if (files.length === 0) {
301
+ result.reason = "no file to check";
302
+ return result;
303
+ }
304
+ try {
305
+ const ts = await loadTs();
306
+ const { nearest, reaching } = findConfigs(ts, files);
307
+ // The permissive pass takes its RESOLUTION options (`paths`, `baseUrl`, `types`)
308
+ // from the config that reaches the files when there is one: a solution-style
309
+ // root carries none, and without the referenced config's `paths` an aliased
310
+ // import is unresolved here, typed `any`, and its unconditional error then
311
+ // surfaces only in the settings pass — downgraded to an advisory.
312
+ const base = (reaching ?? nearest)?.parsed.options ?? {};
313
+ const floor = runPass(ts, files, permissiveOptions(ts, base), mcpRoot);
314
+ result.ran = true;
315
+ result.errors = floor.findings.filter((f) => !AMBIENT_DECLARATION_CODES.has(f.code));
316
+ result.ambientErrors = floor.findings.filter((f) => AMBIENT_DECLARATION_CODES.has(f.code));
317
+ result.unresolved = [...floor.unresolved].sort();
318
+ if (reaching) {
319
+ result.tsconfig = reaching.path;
320
+ const seen = new Set([...floor.findings, ...floor.unresolvedFindings].map(findingKey));
321
+ const settings = runPass(ts, files, settingsOptions(reaching.parsed.options), mcpRoot);
322
+ // An import only the repository's resolution refuses is its `tsc`'s error,
323
+ // not a gap: the permissive pass resolved it, so the module exists.
324
+ result.settingErrors = [
325
+ ...settings.findings,
326
+ ...settings.unresolvedFindings,
327
+ ].filter((f) => !seen.has(findingKey(f)));
328
+ }
329
+ else if (nearest) {
330
+ result.tsconfigNotReaching = nearest.path;
331
+ }
332
+ }
333
+ catch (err) {
334
+ result.ran = false;
335
+ result.reason = `the compiler threw: ${String(err)}`;
336
+ }
337
+ return result;
338
+ }