@skyramp/mcp 0.4.1 → 0.4.2-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (543) hide show
  1. package/build/adapters/jestAdapter.js +23 -5
  2. package/build/adapters/mochaAdapter.js +7 -1
  3. package/build/adapters/playwrightAdapter.js +3 -1
  4. package/build/adapters/pytestAdapter.js +14 -3
  5. package/build/commands/localDevTestChangesCommand.js +1 -0
  6. package/build/commands/recommendTestsAndExecuteCommand.js +5 -6
  7. package/build/commands/testThisEndpointCommand.js +16 -4
  8. package/build/index.js +34 -4
  9. package/build/playwright/blueprintDigest.js +28 -7
  10. package/build/playwright/registerPlaywrightTools.js +33 -28
  11. package/build/playwright/traceRecordingPrompt.js +9 -2
  12. package/build/prompts/code-reuse.js +95 -29
  13. package/build/prompts/fix-error-prompt.d.ts +9 -1
  14. package/build/prompts/fix-error-prompt.js +31 -28
  15. package/build/prompts/local-dev/local-dev-plan.d.ts +3 -0
  16. package/build/prompts/local-dev/local-dev-plan.js +3 -1
  17. package/build/prompts/local-dev/local-dev-prompts.d.ts +1 -1
  18. package/build/prompts/local-dev/local-dev-prompts.js +30 -3
  19. package/build/prompts/modularization/integration-test-modularization.js +13 -6
  20. package/build/prompts/modularization/ui-test-modularization.js +1 -1
  21. package/build/prompts/personas.js +1 -1
  22. package/build/prompts/pom-aware-code-reuse.js +7 -9
  23. package/build/prompts/reuse-hand-off.d.ts +64 -0
  24. package/build/prompts/reuse-hand-off.js +130 -0
  25. package/build/prompts/shared-helper-policy.d.ts +88 -2
  26. package/build/prompts/shared-helper-policy.js +145 -11
  27. package/build/prompts/sut-setup/modes/adaptWorkflowPrompt.js +1 -1
  28. package/build/prompts/sut-setup/modes/dockerComposePrompt.js +1 -1
  29. package/build/prompts/sut-setup/shared.d.ts +4 -1
  30. package/build/prompts/sut-setup/shared.js +2 -2
  31. package/build/prompts/test-maintenance/actionsInstructions.d.ts +19 -11
  32. package/build/prompts/test-maintenance/actionsInstructions.js +47 -26
  33. package/build/prompts/test-maintenance/drift-analysis-prompt.js +3 -2
  34. package/build/prompts/test-maintenance/driftAnalysisSections.js +5 -3
  35. package/build/prompts/test-maintenance/driftAnalysisShared.js +4 -2
  36. package/build/prompts/test-maintenance/uiDriftAnalysisSections.js +7 -4
  37. package/build/prompts/test-recommendation/recommendationSections.js +19 -8
  38. package/build/prompts/test-recommendation/registerRecommendTestsPrompt.js +5 -2
  39. package/build/prompts/test-recommendation/test-recommendation-prompt.js +10 -7
  40. package/build/prompts/testbot/testbot-prompts.js +123 -55
  41. package/build/recommendation/answers.js +18 -9
  42. package/build/recommendation/pullRequestText.js +1 -1
  43. package/build/recommendation/registerPlan.js +31 -17
  44. package/build/recommendation/subjectStep.d.ts +8 -10
  45. package/build/recommendation/subjectStep.js +17 -16
  46. package/build/recommendation/types.d.ts +71 -17
  47. package/build/recommendation/types.js +9 -15
  48. package/build/recommendation/verifierContracts.d.ts +7 -3
  49. package/build/recommendation/verifierContracts.js +8 -4
  50. package/build/recommendation/verifiers/changedFile.js +11 -13
  51. package/build/recommendation/verifiers/citedPath.d.ts +8 -0
  52. package/build/recommendation/verifiers/citedPath.js +16 -2
  53. package/build/recommendation/verifiers/coverage.d.ts +2 -2
  54. package/build/recommendation/verifiers/coverage.js +190 -134
  55. package/build/recommendation/verifiers/defects.js +56 -16
  56. package/build/recommendation/verifiers/deliveredMatchesPlan.d.ts +7 -1
  57. package/build/recommendation/verifiers/deliveredMatchesPlan.js +28 -14
  58. package/build/recommendation/verifiers/endpointGrounded.js +14 -8
  59. package/build/recommendation/verifiers/existingCoverage.d.ts +6 -0
  60. package/build/recommendation/verifiers/existingCoverage.js +30 -21
  61. package/build/recommendation/verifiers/expectedOutcome.js +17 -8
  62. package/build/recommendation/verifiers/expectedValueSourced.js +54 -43
  63. package/build/recommendation/verifiers/issueTraceability.d.ts +5 -0
  64. package/build/recommendation/verifiers/issueTraceability.js +64 -7
  65. package/build/recommendation/verifiers/removedElementGuarded.js +19 -11
  66. package/build/recommendation/verifiers/reportedCategory.js +9 -4
  67. package/build/recommendation/verifiers/requirementSourced.js +34 -21
  68. package/build/recommendation/verifiers/screenRoute.js +15 -10
  69. package/build/recommendation/verifiers/statedDifference.js +15 -8
  70. package/build/recommendation/verifiers/uiElementGrounded.js +50 -16
  71. package/build/resources/analysisResources.js +7 -3
  72. package/build/resources/progressResource.js +4 -2
  73. package/build/resources/sutSetupResource.js +20 -2
  74. package/build/resources/testbotResource.js +19 -1
  75. package/build/services/AnalyticsService.js +3 -1
  76. package/build/services/ScenarioGenerationService.js +5 -5
  77. package/build/services/TestDiscoveryService.js +21 -5
  78. package/build/services/TestExecutionService.js +63 -21
  79. package/build/services/TestGenerationService.d.ts +1 -1
  80. package/build/services/TestGenerationService.js +43 -24
  81. package/build/skills/enhanceAssertionsSkill.d.ts +45 -0
  82. package/build/skills/enhanceAssertionsSkill.js +103 -0
  83. package/build/skills/fixTestImportErrorsSkill.d.ts +2 -2
  84. package/build/skills/fixTestImportErrorsSkill.js +2 -2
  85. package/build/skills/skillFiles.d.ts +38 -0
  86. package/build/skills/skillFiles.js +94 -0
  87. package/build/skills/validateAssertionAlignmentSkill.d.ts +34 -0
  88. package/build/skills/validateAssertionAlignmentSkill.js +59 -0
  89. package/build/tool-phases.js +4 -0
  90. package/build/tools/auth/loginTool.js +3 -1
  91. package/build/tools/auth/logoutTool.js +3 -1
  92. package/build/tools/code-refactor/alignAssertionsTool.d.ts +2 -0
  93. package/build/tools/code-refactor/alignAssertionsTool.js +51 -0
  94. package/build/tools/code-refactor/assertion-state.d.ts +1 -1
  95. package/build/tools/code-refactor/assertion-state.js +1 -1
  96. package/build/tools/code-refactor/assertionOperations.d.ts +44 -0
  97. package/build/tools/code-refactor/assertionOperations.js +82 -0
  98. package/build/tools/code-refactor/assertionSkillTools.d.ts +3 -0
  99. package/build/tools/code-refactor/assertionSkillTools.js +86 -0
  100. package/build/tools/code-refactor/codeReuseTool.js +27 -3
  101. package/build/tools/code-refactor/enhanceAssertionsTool.js +19 -83
  102. package/build/tools/code-refactor/gate-markers.d.ts +51 -0
  103. package/build/tools/code-refactor/gate-markers.js +95 -0
  104. package/build/tools/code-refactor/retrofit-state.d.ts +3 -1
  105. package/build/tools/code-refactor/retrofit-state.js +44 -2
  106. package/build/tools/code-refactor/reuse-outcome.d.ts +23 -1
  107. package/build/tools/code-refactor/reuse-outcome.js +36 -13
  108. package/build/tools/code-refactor/reuse-state.d.ts +90 -16
  109. package/build/tools/code-refactor/reuse-state.js +191 -61
  110. package/build/tools/code-refactor/utils-verify-gates.d.ts +4 -0
  111. package/build/tools/code-refactor/utils-verify-gates.js +252 -27
  112. package/build/tools/code-refactor/verify-gates.d.ts +15 -1
  113. package/build/tools/code-refactor/verify-gates.js +36 -4
  114. package/build/tools/enrichTestWithMocksTool.d.ts +1 -1
  115. package/build/tools/enrichTestWithMocksTool.js +9 -5
  116. package/build/tools/executeSkyrampTestTool.d.ts +22 -1
  117. package/build/tools/executeSkyrampTestTool.js +571 -271
  118. package/build/tools/execution-video-state.js +1 -1
  119. package/build/tools/fixErrorTool.js +5 -6
  120. package/build/tools/generate-tests/batchMockGenerationTool.js +1 -1
  121. package/build/tools/generate-tests/generateBatchScenarioRestTool.js +114 -73
  122. package/build/tools/generate-tests/generateContractRestTool.js +34 -16
  123. package/build/tools/generate-tests/generateE2ERestTool.d.ts +1 -0
  124. package/build/tools/generate-tests/generateE2ERestTool.js +9 -1
  125. package/build/tools/generate-tests/generateIntegrationRestTool.js +22 -7
  126. package/build/tools/generate-tests/generateMockRestTool.js +3 -1
  127. package/build/tools/generate-tests/generateUIRestTool.d.ts +2 -0
  128. package/build/tools/generate-tests/generateUIRestTool.js +11 -2
  129. package/build/tools/generate-tests/loadTestSchema.js +1 -3
  130. package/build/tools/generate-tests/planGuard.js +6 -3
  131. package/build/tools/generate-tests/scenarioFileIdentity.js +4 -1
  132. package/build/tools/generate-tests/scenarioLint.js +17 -5
  133. package/build/tools/generate-tests/trace-reuse-guard.js +5 -2
  134. package/build/tools/generateEnrichedIntegrationTestTool.js +9 -3
  135. package/build/tools/one-click/oneClickTool.js +3 -1
  136. package/build/tools/preflightMockCheckTool.js +23 -7
  137. package/build/tools/runExistingTestsTool.d.ts +1 -1
  138. package/build/tools/runExistingTestsTool.js +43 -21
  139. package/build/tools/submitReportTool.d.ts +51 -12
  140. package/build/tools/submitReportTool.js +860 -161
  141. package/build/tools/test-management/actionsTool.js +210 -51
  142. package/build/tools/test-management/analyzeChangesTool.d.ts +4 -5
  143. package/build/tools/test-management/analyzeChangesTool.js +127 -68
  144. package/build/tools/test-management/analyzeTestHealthTool.js +35 -13
  145. package/build/tools/test-management/registerTestPlanTool.d.ts +44 -34
  146. package/build/tools/test-management/registerTestPlanTool.js +255 -111
  147. package/build/tools/test-management/resolveScreenTool.js +33 -9
  148. package/build/tools/trace/startTraceCollectionTool.js +3 -1
  149. package/build/tools/trace/stopTraceCollectionTool.js +41 -5
  150. package/build/tools/verifyTestDependenciesTool.d.ts +3 -0
  151. package/build/tools/verifyTestDependenciesTool.js +54 -0
  152. package/build/tools/workspace/initScanWorkspaceTool.js +9 -3
  153. package/build/tools/workspace/initializeWorkspaceTool.js +3 -1
  154. package/build/types/AssertionOutcome.d.ts +1 -1
  155. package/build/types/EnhanceType.d.ts +6 -0
  156. package/build/types/EnhanceType.js +1 -0
  157. package/build/types/ExternalTestExecution.d.ts +2 -2
  158. package/build/types/RepositoryAnalysis.d.ts +0 -40
  159. package/build/types/ReuseOutcome.d.ts +96 -4
  160. package/build/types/ReuseOutcome.js +16 -0
  161. package/build/types/StepMethod.js +20 -6
  162. package/build/types/TestAnalysis.d.ts +10 -2
  163. package/build/types/TestExecution.d.ts +45 -0
  164. package/build/types/TestRecommendation.d.ts +1 -1
  165. package/build/types/TestRecommendation.js +4 -1
  166. package/build/types/TestTypes.d.ts +13 -0
  167. package/build/types/TestTypes.js +34 -3
  168. package/build/types/TestbotPromptOptions.d.ts +9 -1
  169. package/build/types/TestbotReport.d.ts +45 -9
  170. package/build/utils/AnalysisStateManager.d.ts +137 -27
  171. package/build/utils/AnalysisStateManager.js +227 -43
  172. package/build/utils/assertion-verify/api-shared-lints.js +34 -16
  173. package/build/utils/assertion-verify/metrics.js +39 -6
  174. package/build/utils/assertion-verify/ui-lints.js +4 -2
  175. package/build/utils/branchDiff.js +47 -12
  176. package/build/utils/canonicalJson.js +3 -1
  177. package/build/utils/dartRouteExtractor.js +36 -7
  178. package/build/utils/fixAttempts.d.ts +26 -0
  179. package/build/utils/fixAttempts.js +109 -0
  180. package/build/utils/frontendSelectors.js +23 -4
  181. package/build/utils/generatedTestRecord.d.ts +19 -0
  182. package/build/utils/generatedTestRecord.js +61 -0
  183. package/build/utils/gitStaging.js +7 -2
  184. package/build/utils/initAgent.js +26 -6
  185. package/build/utils/language-helper.js +39 -45
  186. package/build/utils/pathMatching.js +2 -1
  187. package/build/utils/pathSignatures.js +6 -2
  188. package/build/utils/planMatchKeys.d.ts +2 -2
  189. package/build/utils/planMatchKeys.js +20 -14
  190. package/build/utils/pom-catalog-parse.js +7 -2
  191. package/build/utils/pom-scope/import-expansion.js +6 -1
  192. package/build/utils/pom-scope/index.js +50 -12
  193. package/build/utils/pom-scope/scoring.js +13 -3
  194. package/build/utils/pom-scope/selector-extractor.js +16 -3
  195. package/build/utils/pom-scope/strip.d.ts +8 -0
  196. package/build/utils/pom-scope/strip.js +238 -0
  197. package/build/utils/pom-scope/testIdDiscovery.js +14 -2
  198. package/build/utils/pom-verify/__fixtures__/af-style/asset-list.page.d.ts +1 -1
  199. package/build/utils/pom-verify/__fixtures__/af-style/asset-list.page.js +4 -2
  200. package/build/utils/pom-verify/__fixtures__/af-style/report.iframe.page.js +3 -1
  201. package/build/utils/pom-verify/__fixtures__/af-style/workflow-footer.page.js +3 -1
  202. package/build/utils/pom-verify/bindings.js +5 -1
  203. package/build/utils/pom-verify/calls.js +9 -2
  204. package/build/utils/pom-verify/verify.js +27 -5
  205. package/build/utils/pr-comment-parser.js +20 -7
  206. package/build/utils/proxy-terminal.d.ts +19 -1
  207. package/build/utils/proxy-terminal.js +346 -21
  208. package/build/utils/removedUiElements.js +1 -1
  209. package/build/utils/reportLanguage.js +35 -7
  210. package/build/utils/reportVerification.d.ts +14 -8
  211. package/build/utils/reportVerification.js +19 -19
  212. package/build/utils/repositorySlug.d.ts +32 -0
  213. package/build/utils/repositorySlug.js +77 -0
  214. package/build/utils/reuseRouting.js +6 -2
  215. package/build/utils/runSerialized.d.ts +3 -0
  216. package/build/utils/runSerialized.js +39 -0
  217. package/build/utils/screenRoutes.js +74 -18
  218. package/build/utils/sourceRouteExtractor.js +13 -6
  219. package/build/utils/telemetry.d.ts +1 -0
  220. package/build/utils/telemetry.js +8 -5
  221. package/build/utils/testDependencyPolicy.d.ts +9 -0
  222. package/build/utils/testDependencyPolicy.js +788 -0
  223. package/build/utils/testExecutionRecord.d.ts +90 -0
  224. package/build/utils/testExecutionRecord.js +267 -0
  225. package/build/utils/testFileClassification.js +3 -1
  226. package/build/utils/trace-parser.js +62 -14
  227. package/build/utils/urlPath.js +3 -1
  228. package/build/utils/utils-verify/action-key.d.ts +4 -0
  229. package/build/utils/utils-verify/action-key.js +2 -2
  230. package/build/utils/utils-verify/allow.d.ts +122 -3
  231. package/build/utils/utils-verify/allow.js +146 -21
  232. package/build/utils/utils-verify/body-reach.d.ts +120 -0
  233. package/build/utils/utils-verify/body-reach.js +335 -0
  234. package/build/utils/utils-verify/call-sites.d.ts +6 -1
  235. package/build/utils/utils-verify/call-sites.js +72 -8
  236. package/build/utils/utils-verify/delivered-imports.d.ts +43 -0
  237. package/build/utils/utils-verify/delivered-imports.js +84 -0
  238. package/build/utils/utils-verify/fixed-sleep.d.ts +96 -0
  239. package/build/utils/utils-verify/fixed-sleep.js +461 -0
  240. package/build/utils/utils-verify/in-house.d.ts +93 -0
  241. package/build/utils/utils-verify/in-house.js +719 -0
  242. package/build/utils/utils-verify/incumbent.d.ts +3 -0
  243. package/build/utils/utils-verify/incumbent.js +75 -0
  244. package/build/utils/utils-verify/index.d.ts +1 -0
  245. package/build/utils/utils-verify/index.js +1 -0
  246. package/build/utils/utils-verify/language-spec.d.ts +26 -10
  247. package/build/utils/utils-verify/language-spec.js +217 -20
  248. package/build/utils/utils-verify/locate.d.ts +26 -0
  249. package/build/utils/utils-verify/locate.js +125 -23
  250. package/build/utils/utils-verify/module-name.d.ts +40 -0
  251. package/build/utils/utils-verify/module-name.js +98 -0
  252. package/build/utils/utils-verify/parse.d.ts +46 -6
  253. package/build/utils/utils-verify/parse.js +176 -38
  254. package/build/utils/utils-verify/retrofit-equivalence.d.ts +5 -0
  255. package/build/utils/utils-verify/retrofit-equivalence.js +4 -2
  256. package/build/utils/utils-verify/stage.d.ts +5 -0
  257. package/build/utils/utils-verify/stage.js +47 -2
  258. package/build/utils/utils-verify/status-once.d.ts +62 -0
  259. package/build/utils/utils-verify/status-once.js +207 -0
  260. package/build/utils/utils-verify/typecheck.d.ts +61 -0
  261. package/build/utils/utils-verify/typecheck.js +338 -0
  262. package/build/utils/utils-verify/verify.d.ts +76 -1
  263. package/build/utils/utils-verify/verify.js +516 -44
  264. package/build/utils/versions.d.ts +3 -3
  265. package/build/utils/versions.js +1 -1
  266. package/build/utils/workspaceAuth.js +107 -37
  267. package/build/workspace/queryParamResolution.js +11 -4
  268. package/build/workspace/workspace.js +7 -7
  269. package/node_modules/playwright/ThirdPartyNotices.txt +19 -19
  270. package/node_modules/playwright/lib/mcp/skyramp/assertTool.js +8 -2
  271. package/node_modules/playwright/lib/mcp/skyramp/common/cssValue.js +87 -0
  272. package/node_modules/playwright/lib/mcp/skyramp/loadTraceTool.js +31 -0
  273. package/node_modules/playwright/lib/mcp/skyramp/skyRampImport.js +3 -0
  274. package/node_modules/playwright/lib/mcp/skyramp/traceRecordingBackend.js +181 -15
  275. package/node_modules/playwright/lib/mcp/test/skyRampExport.js +24 -0
  276. package/node_modules/playwright/lib/transform/babelBundleImpl.js +2353 -190
  277. package/node_modules/playwright/node_modules/playwright-core/ThirdPartyNotices.txt +62 -34
  278. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/.package-lock.json +72 -41
  279. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/dist/serve-static.js +1 -1
  280. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/dist/serve-static.mjs +1 -1
  281. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/package.json +2 -2
  282. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/README.md +16 -1
  283. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/index.js +4 -20
  284. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/read.js +17 -17
  285. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/json.js +60 -32
  286. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/raw.js +3 -3
  287. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/text.js +3 -3
  288. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/urlencoded.js +16 -20
  289. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/utils.js +18 -16
  290. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/LICENSE +22 -0
  291. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/README.md +71 -0
  292. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.d.ts +46 -0
  293. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.js +176 -0
  294. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.js.map +1 -0
  295. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/package.json +52 -0
  296. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/package.json +23 -10
  297. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/CHANGELOG.md +21 -14
  298. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/isObject.d.ts +1 -1
  299. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/package.json +6 -7
  300. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/tsconfig.json +1 -0
  301. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/index.js +266 -45
  302. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/lib/schemes.js +9 -4
  303. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/lib/utils.js +396 -92
  304. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/package.json +1 -1
  305. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/component-safe-serialization.test.js +163 -0
  306. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/equal.test.js +31 -3
  307. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/fixtures/uri-js-parse.json +2 -0
  308. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/ipv6-canonical.test.js +34 -0
  309. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/ipv6-validation.test.js +124 -0
  310. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/malformed-percent.test.js +77 -0
  311. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/malformed-urn.test.js +61 -0
  312. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/parse.test.js +7 -3
  313. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/query-fragment-normalization.test.js +33 -0
  314. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/reserved-path-normalization.test.js +109 -0
  315. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/scheme-validation.test.js +124 -0
  316. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/security-normalization.test.js +101 -0
  317. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/security.test.js +301 -3
  318. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/urn-full-input.test.js +29 -0
  319. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/websocket-query-preservation.test.js +24 -0
  320. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/CHANGELOG.md +7 -0
  321. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/index.d.ts +0 -1
  322. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/package.json +4 -5
  323. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/client/client.js +30 -16
  324. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/client/utils.js +4 -1
  325. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/context.js +32 -13
  326. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/accepts/accepts.js +36 -2
  327. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/proxy/index.js +4 -0
  328. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/ssg/ssg.js +1 -1
  329. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/ssg/utils.js +30 -10
  330. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/streaming/sse.js +5 -4
  331. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/hono-base.js +10 -8
  332. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/base.js +44 -23
  333. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/components.js +25 -26
  334. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/context.js +5 -5
  335. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/dom/render.js +2 -0
  336. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/dom/server.js +5 -1
  337. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/hooks/index.js +16 -13
  338. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +3 -3
  339. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/streaming.js +4 -5
  340. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/cache/index.js +103 -8
  341. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/compress/index.js +5 -0
  342. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/cors/index.js +17 -14
  343. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/csrf/index.js +1 -1
  344. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/etag/digest.js +47 -1
  345. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/etag/index.js +7 -4
  346. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +9 -4
  347. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +9 -4
  348. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/language/language.js +10 -6
  349. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/method-not-allowed/index.js +90 -0
  350. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +3 -1
  351. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/secure-headers/secure-headers.js +16 -7
  352. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/request.js +20 -13
  353. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/linear-router/router.js +7 -2
  354. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/pattern-router/router.js +3 -9
  355. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +65 -59
  356. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +71 -128
  357. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +14 -5
  358. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/trie-router/node.js +47 -70
  359. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/trie-router/router.js +3 -11
  360. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/utils.js +27 -0
  361. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router.js +1 -1
  362. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/accept.js +1 -1
  363. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/body.js +21 -3
  364. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/cookie.js +4 -3
  365. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/ipaddr.js +5 -3
  366. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/stream.js +12 -3
  367. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/url.js +19 -11
  368. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/client/client.js +30 -16
  369. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/client/utils.js +4 -1
  370. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/context.js +32 -13
  371. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/accepts/accepts.js +36 -2
  372. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/proxy/index.js +4 -0
  373. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/ssg/ssg.js +1 -1
  374. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/ssg/utils.js +30 -10
  375. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/streaming/sse.js +5 -4
  376. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/hono-base.js +10 -8
  377. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/base.js +41 -23
  378. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/components.js +26 -27
  379. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/context.js +6 -6
  380. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/dom/render.js +2 -0
  381. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/dom/server.js +5 -1
  382. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/hooks/index.js +16 -13
  383. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/intrinsic-element/components.js +4 -4
  384. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/streaming.js +5 -6
  385. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/cache/index.js +103 -8
  386. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/compress/index.js +5 -0
  387. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/cors/index.js +17 -14
  388. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/csrf/index.js +1 -1
  389. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/etag/digest.js +47 -1
  390. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/etag/index.js +7 -4
  391. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/jwk/jwk.js +9 -4
  392. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/jwt/jwt.js +9 -4
  393. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/language/language.js +10 -6
  394. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/method-not-allowed/index.js +68 -0
  395. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/pretty-json/index.js +3 -1
  396. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/secure-headers/secure-headers.js +16 -7
  397. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/request.js +21 -14
  398. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/linear-router/router.js +7 -2
  399. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/pattern-router/router.js +3 -9
  400. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/node.js +61 -58
  401. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/router.js +77 -129
  402. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/trie.js +14 -5
  403. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/trie-router/node.js +47 -70
  404. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/trie-router/router.js +3 -11
  405. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/utils.js +5 -0
  406. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router.js +1 -1
  407. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/adapter/aws-lambda/types.d.ts +9 -0
  408. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/client/types.d.ts +1 -1
  409. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/context.d.ts +6 -2
  410. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/hono-base.d.ts +4 -3
  411. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/base.d.ts +7 -2
  412. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/index.d.ts +5 -5
  413. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/intrinsic-element/components.d.ts +2 -2
  414. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/server.d.ts +5 -5
  415. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/hooks/index.d.ts +8 -6
  416. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/index.d.ts +5 -5
  417. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/cache/index.d.ts +6 -4
  418. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/combine/index.d.ts +1 -1
  419. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/cors/index.d.ts +1 -1
  420. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +2 -2
  421. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jwk/jwk.d.ts +2 -0
  422. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jwt/jwt.d.ts +2 -0
  423. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/method-not-allowed/index.d.ts +49 -0
  424. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/secure-headers/permissions-policy.d.ts +3 -3
  425. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +4 -1
  426. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +2 -1
  427. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/trie-router/node.d.ts +1 -2
  428. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/trie-router/router.d.ts +0 -1
  429. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/utils.d.ts +1 -0
  430. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router.d.ts +1 -1
  431. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/utils/headers.d.ts +2 -2
  432. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/utils/url.d.ts +5 -0
  433. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/accept.js +1 -1
  434. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/body.js +21 -3
  435. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/cookie.js +5 -4
  436. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/ipaddr.js +5 -3
  437. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/stream.js +12 -3
  438. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/url.js +17 -10
  439. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/package.json +11 -4
  440. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/README.md +173 -143
  441. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/address-error.d.ts +11 -0
  442. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/address-error.js.map +1 -1
  443. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.d.ts +49 -0
  444. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.js +79 -4
  445. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.js.map +1 -1
  446. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.d.ts +78 -5
  447. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.js +119 -24
  448. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.js.map +1 -1
  449. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.d.ts +151 -10
  450. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.js +316 -90
  451. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.js.map +1 -1
  452. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.d.ts +12 -0
  453. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.js +45 -2
  454. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.js.map +1 -1
  455. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.d.ts +14 -0
  456. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.js +50 -3
  457. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.js.map +1 -1
  458. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/package.json +6 -4
  459. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/.github/THREAT_MODEL.md +3 -3
  460. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/CHANGELOG.md +26 -0
  461. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/README.md +19 -1
  462. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/dist/qs.js +25 -25
  463. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/eslint.config.mjs +1 -1
  464. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/parse.js +16 -6
  465. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/stringify.js +23 -8
  466. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/utils.js +57 -11
  467. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/package.json +8 -7
  468. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/parse.js +419 -0
  469. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/stringify.js +317 -0
  470. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/utils.js +206 -0
  471. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/CHANGELOG.md +10 -0
  472. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/README.md +1 -1
  473. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/index.js +5 -2
  474. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/package.json +10 -10
  475. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/test/index.js +16 -0
  476. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/index.js +8 -18
  477. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/LICENSE +22 -0
  478. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/README.md +71 -0
  479. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.d.ts +46 -0
  480. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.js +176 -0
  481. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.js.map +1 -0
  482. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/package.json +52 -0
  483. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/package.json +9 -5
  484. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/package-lock.json +72 -41
  485. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/.package-lock.json +6 -6
  486. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/README.md +23 -1
  487. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/index.js +265 -86
  488. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/package.json +1 -1
  489. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/README.md +173 -143
  490. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/address-error.d.ts +11 -0
  491. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/address-error.js.map +1 -1
  492. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.d.ts +49 -0
  493. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.js +79 -4
  494. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.js.map +1 -1
  495. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.d.ts +78 -5
  496. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.js +119 -24
  497. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.js.map +1 -1
  498. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.d.ts +151 -10
  499. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.js +316 -90
  500. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.js.map +1 -1
  501. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.d.ts +12 -0
  502. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.js +45 -2
  503. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.js.map +1 -1
  504. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.d.ts +14 -0
  505. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.js +50 -3
  506. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.js.map +1 -1
  507. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/package.json +6 -4
  508. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/package-lock.json +6 -6
  509. package/node_modules/playwright/node_modules/playwright-core/lib/cli/program.js +18 -9
  510. package/node_modules/playwright/node_modules/playwright-core/lib/mcpBundleImpl/index.js +47 -47
  511. package/node_modules/playwright/node_modules/playwright-core/lib/server/codegen/skyramp/jsonlReader.js +3 -0
  512. package/node_modules/playwright/node_modules/playwright-core/lib/server/recorder/recorderRunner.js +42 -0
  513. package/node_modules/playwright/node_modules/playwright-core/lib/utilsBundleImpl/index.js +121 -121
  514. package/node_modules/playwright/node_modules/playwright-core/lib/vite/traceViewer/{index.B7KbSQcC.js → index.BAkLd5DX.js} +1 -1
  515. package/node_modules/playwright/node_modules/playwright-core/lib/vite/traceViewer/index.html +1 -1
  516. package/node_modules/playwright/node_modules/playwright-core/package.json +1 -1
  517. package/node_modules/playwright/node_modules/playwright-core/src/cli/program.ts +31 -9
  518. package/node_modules/playwright/node_modules/playwright-core/src/server/codegen/skyramp/jsonlReader.ts +1 -0
  519. package/node_modules/playwright/node_modules/playwright-core/src/server/recorder/recorderRunner.ts +57 -1
  520. package/node_modules/playwright/package.json +2 -2
  521. package/package.json +7 -6
  522. package/plugin/prompts/code-reuse/hand-off.md +30 -0
  523. package/plugin/prompts/generate-tests/generation.md +1 -1
  524. package/plugin/prompts/plan-tests.md +14 -14
  525. package/plugin/prompts/testbot-task1.md +4 -2
  526. package/plugin/skills/enhance-assertions/SKILL.md +25 -0
  527. package/plugin/skills/enhance-assertions/reference/contract.md +51 -0
  528. package/plugin/skills/enhance-assertions/reference/integration.md +58 -0
  529. package/plugin/skills/enhance-assertions/reference/shared-rules.md +220 -0
  530. package/plugin/skills/enhance-assertions/reference/ui.md +373 -0
  531. package/plugin/skills/fix-test-import-errors/SKILL.md +44 -50
  532. package/plugin/skills/validate-assertion-alignment-post-execution/SKILL.md +32 -0
  533. package/plugin/skills/validate-assertion-alignment-post-execution/reference/checks.md +44 -0
  534. package/plugin/skills/validate-assertion-alignment-post-execution/reference/evidence.md +47 -0
  535. package/build/prompts/enhance-assertions/contractProviderAssertionsPrompt.d.ts +0 -2
  536. package/build/prompts/enhance-assertions/contractProviderAssertionsPrompt.js +0 -29
  537. package/build/prompts/enhance-assertions/integrationAssertionsPrompt.d.ts +0 -2
  538. package/build/prompts/enhance-assertions/integrationAssertionsPrompt.js +0 -36
  539. package/build/prompts/enhance-assertions/sharedAssertionRules.d.ts +0 -16
  540. package/build/prompts/enhance-assertions/sharedAssertionRules.js +0 -284
  541. package/build/prompts/enhance-assertions/uiAssertionsPrompt.d.ts +0 -2
  542. package/build/prompts/enhance-assertions/uiAssertionsPrompt.js +0 -388
  543. package/node_modules/playwright/node_modules/playwright-core/.DS_Store +0 -0
@@ -1,4 +1,4 @@
1
- import { callSteps, isUIPlannedTest, stepRouteKey, subjectStep } from "../subjectStep.js";
1
+ import { callSteps, isUIPlannedTest, stepRouteKey, subjectStep, } from "../subjectStep.js";
2
2
  import { STATED_DIFFERENCE_CONTRACT } from "../verifierContracts.js";
3
3
  /** What two planned tests must share before this asks how they differ: the method and
4
4
  * path of their subject step. UI planned tests are OUT — two tests of one screen are
@@ -20,7 +20,10 @@ function nameKey(raw) {
20
20
  * difference, and the pair's own objection is the question about it — naming the
21
21
  * bad reference too would ask twice about one mistake. */
22
22
  function differenceStated(a, b) {
23
- const states = (from, to) => (from.declarations?.differsFrom ?? []).some((entry) => nameKey(entry?.plannedTestId) === nameKey(to.plannedTestId) && (entry?.difference ?? "").trim().length > 0);
23
+ const states = (from, to) => (Array.isArray(from?.declarations?.differsFrom)
24
+ ? from.declarations.differsFrom
25
+ : []).some((entry) => nameKey(entry.plannedTestId) === nameKey(to?.plannedTestId) &&
26
+ String(entry.difference ?? "").trim().length > 0);
24
27
  return states(a, b) || states(b, a);
25
28
  }
26
29
  /** One objection per `differsFrom` entry naming no planned test in the plan. A
@@ -29,12 +32,16 @@ function differenceStated(a, b) {
29
32
  * question the agent believes it already answered, and it would answer it again
30
33
  * the same way. A blank reference names nothing either and is one of these. */
31
34
  function unknownPartnerObjections(plannedTests) {
32
- const known = new Set(plannedTests.map((plannedTest) => nameKey(plannedTest?.plannedTestId)).filter(Boolean));
35
+ const known = new Set(plannedTests
36
+ .map((plannedTest) => nameKey(plannedTest.plannedTestId))
37
+ .filter(Boolean));
33
38
  const seen = new Set();
34
39
  const objections = [];
35
40
  for (const plannedTest of plannedTests) {
36
- for (const entry of plannedTest?.declarations?.differsFrom ?? []) {
37
- const raw = entry?.plannedTestId;
41
+ for (const entry of plannedTest.declarations.differsFrom ?? []) {
42
+ const raw = entry.plannedTestId;
43
+ // A non-string names nothing, and objecting to it put an empty reference in
44
+ // the objection's own id.
38
45
  if (typeof raw !== "string")
39
46
  continue;
40
47
  const reference = nameKey(raw);
@@ -42,7 +49,7 @@ function unknownPartnerObjections(plannedTests) {
42
49
  continue;
43
50
  // One objection per (planned test, reference): the same bad name written by
44
51
  // two planned tests is two mistakes, and each owes its own answer.
45
- const key = `${nameKey(plannedTest?.plannedTestId)}\u0000${reference}`;
52
+ const key = `${nameKey(plannedTest.plannedTestId)}\u0000${reference}`;
46
53
  if (seen.has(key))
47
54
  continue;
48
55
  seen.add(key);
@@ -70,7 +77,7 @@ function unstatedSubjectObjections(plannedTests) {
70
77
  const calls = callSteps(plannedTest);
71
78
  if (calls.length === 0 || subjectStep(plannedTest))
72
79
  continue;
73
- const declared = plannedTest?.declarations?.stepUnderTest;
80
+ const declared = plannedTest.declarations.stepUnderTest;
74
81
  objections.push({
75
82
  objectionId: `statedDifference:subjectNotStated:${plannedTest.plannedTestId}`,
76
83
  verifier: "statedDifference",
@@ -91,7 +98,7 @@ function unstatedSubjectObjections(plannedTests) {
91
98
  export const statedDifference = {
92
99
  name: "statedDifference",
93
100
  run(registration, _ctx) {
94
- const plannedTests = registration.plannedTests ?? [];
101
+ const plannedTests = registration.plannedTests;
95
102
  /** Planned-test id -> route -> the partners on that route it has NOT explained,
96
103
  * recorded while the pair is known to be unexplained. Deriving it afterwards
97
104
  * from the route would list partners this planned test already explained. */
@@ -14,7 +14,9 @@ function field(value) {
14
14
  * letter case, and the repeated spaces an HTML render collapses — and nothing
15
15
  * about what it says: a shortened or paraphrased name is not a copy. */
16
16
  function folded(value) {
17
- return typeof value === "string" ? value.trim().replace(/\s+/g, " ").toLowerCase() : "";
17
+ return typeof value === "string"
18
+ ? value.trim().replace(/\s+/g, " ").toLowerCase()
19
+ : "";
18
20
  }
19
21
  function context(value) {
20
22
  return Array.isArray(value) ? value.map(folded).filter(Boolean) : [];
@@ -75,7 +77,12 @@ function addTo(index, key, element) {
75
77
  index.set(key, [element]);
76
78
  }
77
79
  function poolOf(captured) {
78
- const pool = { byTestId: new Map(), byStableId: new Map(), byRow: new Map(), byName: new Map() };
80
+ const pool = {
81
+ byTestId: new Map(),
82
+ byStableId: new Map(),
83
+ byRow: new Map(),
84
+ byName: new Map(),
85
+ };
79
86
  for (const raw of captured) {
80
87
  const element = fieldsOf(raw);
81
88
  addTo(pool.byTestId, element.testId, element);
@@ -101,18 +108,28 @@ function grounded(declared, pool) {
101
108
  /** Identity for the duplicate check: two entries agreeing on every field name
102
109
  * one element, so the second says nothing the first did not. */
103
110
  function identityKey(element) {
104
- return JSON.stringify([element.role, element.name, element.testId, element.stableId, element.contextText]);
111
+ return JSON.stringify([
112
+ element.role,
113
+ element.name,
114
+ element.testId,
115
+ element.stableId,
116
+ element.contextText,
117
+ ]);
105
118
  }
106
119
  /** How an element reads back in an objection, in the agent's own spelling. */
107
120
  function label(raw) {
108
121
  const element = (raw && typeof raw === "object" ? raw : {});
109
122
  const parts = [
110
123
  element.role ? `role "${String(element.role).trim()}"` : "",
111
- element.accessibleName ? `name "${String(element.accessibleName).trim()}"` : "",
124
+ element.accessibleName
125
+ ? `name "${String(element.accessibleName).trim()}"`
126
+ : "",
112
127
  element.testId ? `testId "${String(element.testId).trim()}"` : "",
113
128
  element.stableId ? `stableId "${String(element.stableId).trim()}"` : "",
114
129
  ].filter(Boolean);
115
- return parts.length > 0 ? parts.join(" ") : "an entry with no role, name or identifier";
130
+ return parts.length > 0
131
+ ? parts.join(" ")
132
+ : "an entry with no role, name or identifier";
116
133
  }
117
134
  /** A url split into the part before the fragment and the fragment WHEN it is a
118
135
  * route (`#/…`). An ordinary anchor comes back as an empty route and is
@@ -123,7 +140,10 @@ function splitHashRoute(raw) {
123
140
  if (hash < 0)
124
141
  return { base: value, route: "" };
125
142
  const fragment = value.slice(hash);
126
- return { base: value.slice(0, hash), route: fragment.startsWith("#/") ? fragment.replace(/\/+$/, "") : "" };
143
+ return {
144
+ base: value.slice(0, hash),
145
+ route: fragment.startsWith("#/") ? fragment.replace(/\/+$/, "") : "",
146
+ };
127
147
  }
128
148
  /** The path half of a url. The ROOT stays `/` rather than folding to empty, or a
129
149
  * page named by its host alone would have no path to match on and the check
@@ -141,16 +161,26 @@ function urlPath(raw) {
141
161
  return new URL(base).pathname.replace(/\/+$/, "") || "/";
142
162
  }
143
163
  catch {
144
- return base.startsWith("/") ? base.split("?")[0].replace(/\/+$/, "") || "/" : "";
164
+ return base.startsWith("/")
165
+ ? base.split("?")[0].replace(/\/+$/, "") || "/"
166
+ : "";
145
167
  }
146
168
  }
147
169
  /** The spellings of the machine the run is on: a capture at `127.0.0.1` and a
148
170
  * page url at `localhost` are the same page. */
149
- const LOOPBACK_HOSTS = new Set(["localhost", "127.0.0.1", "[::1]", "::1", "0.0.0.0"]);
171
+ const LOOPBACK_HOSTS = new Set([
172
+ "localhost",
173
+ "127.0.0.1",
174
+ "[::1]",
175
+ "::1",
176
+ "0.0.0.0",
177
+ ]);
150
178
  /** The host half of a url, empty for a path-only one. Read so a wrong host
151
179
  * cannot ground an element on another service's capture. */
152
180
  function urlHost(raw) {
153
- const value = String(raw ?? "").trim().split("#")[0];
181
+ const value = String(raw ?? "")
182
+ .trim()
183
+ .split("#")[0];
154
184
  if (!value)
155
185
  return "";
156
186
  try {
@@ -175,7 +205,7 @@ function elementsForPage(captures, url) {
175
205
  const pool = captures.filter((capture) => urlPath(capture.url) === path && (!host || urlHost(capture.url) === host));
176
206
  if (pool.length === 0)
177
207
  return undefined;
178
- return poolOf(pool.flatMap((capture) => (Array.isArray(capture.elements) ? capture.elements : [])));
208
+ return poolOf(pool.flatMap((capture) => Array.isArray(capture.elements) ? capture.elements : []));
179
209
  }
180
210
  /** How many elements this run captured, across every page. The exemption below
181
211
  * reads this and never `captures.length`: a capture object that holds nothing
@@ -203,10 +233,12 @@ function capturedPages(captures) {
203
233
  * for. A guard on `data-cy` or `data-qa` reaches the plan with `testId` null and
204
234
  * nothing else that carries the pair, so this cannot recognise it. */
205
235
  function removedTestIds(ctx) {
206
- const removed = Array.isArray(ctx?.removedUiElements) ? ctx.removedUiElements : [];
236
+ const removed = Array.isArray(ctx?.removedUiElements)
237
+ ? ctx.removedUiElements
238
+ : [];
207
239
  return new Set(removed
208
- .filter((item) => field(item?.attribute).toLowerCase() === "data-testid")
209
- .map((item) => field(item?.value))
240
+ .filter((item) => field(item.attribute).toLowerCase() === "data-testid")
241
+ .map((item) => field(item.value))
210
242
  .filter(Boolean));
211
243
  }
212
244
  /** An objection names everything it saw. It used to stop at eight and say "and
@@ -223,15 +255,17 @@ export const uiElementGrounded = {
223
255
  name: "uiElementGrounded",
224
256
  run(registration, ctx) {
225
257
  const objections = [];
226
- const captures = Array.isArray(ctx.uiCaptures) ? ctx.uiCaptures.filter((capture) => capture && typeof capture === "object") : [];
258
+ const captures = Array.isArray(ctx.uiCaptures)
259
+ ? ctx.uiCaptures.filter((capture) => capture && typeof capture === "object")
260
+ : [];
227
261
  const pools = new Map();
228
262
  const removedIds = removedTestIds(ctx);
229
263
  for (const plannedTest of registration.plannedTests ?? []) {
230
264
  if (!isUIPlannedTest(plannedTest))
231
265
  continue;
232
- const raw = plannedTest.declarations?.elements?.items;
266
+ const raw = plannedTest.declarations.elements?.items;
233
267
  const declared = Array.isArray(raw) ? raw : [];
234
- const url = String(plannedTest.declarations?.elements?.pageUrl ?? "").trim();
268
+ const url = String(plannedTest.declarations.elements?.pageUrl ?? "").trim();
235
269
  if (declared.length === 0) {
236
270
  // A run that saw nothing cannot ask this: standalone and IDE use store no
237
271
  // digest and a backend-only run takes none. The boundary is the ELEMENT
@@ -2,7 +2,7 @@ import * as fs from "fs";
2
2
  import { ResourceTemplate, } from "@modelcontextprotocol/sdk/server/mcp.js";
3
3
  import { StateManager, getSessionFilePath, getRegisteredSessions, hasSessionData, getSessionData, normalizeRecommendationState, } from "../utils/AnalysisStateManager.js";
4
4
  import { logger } from "../utils/logger.js";
5
- import { AnalysisScope, } from "../types/RepositoryAnalysis.js";
5
+ import { AnalysisScope } from "../types/RepositoryAnalysis.js";
6
6
  export const ANALYSIS_URI_PREFIX = "skyramp://analysis";
7
7
  /**
8
8
  * Register MCP Resources for analysis data access.
@@ -25,7 +25,9 @@ export function registerAnalysisResources(server) {
25
25
  if (hasSessionData(sessionId)) {
26
26
  const memData = getSessionData(sessionId);
27
27
  if (memData?.analysis) {
28
- logger.debug("Loaded analysis from process memory for resource", { sessionId });
28
+ logger.debug("Loaded analysis from process memory for resource", {
29
+ sessionId,
30
+ });
29
31
  return memData;
30
32
  }
31
33
  }
@@ -125,7 +127,9 @@ export function registerAnalysisResources(server) {
125
127
  {
126
128
  uri: uri.href,
127
129
  mimeType: "application/json",
128
- text: JSON.stringify({ message: "No branch diff context (analysis scope was full_repo)." }, null, 2),
130
+ text: JSON.stringify({
131
+ message: "No branch diff context (analysis scope was full_repo).",
132
+ }, null, 2),
129
133
  },
130
134
  ],
131
135
  };
@@ -5,10 +5,12 @@ export function registerProgressResource(server) {
5
5
  description: "Maps Skyramp MCP tool names to testbot progress phases.",
6
6
  mimeType: "application/json",
7
7
  }, () => ({
8
- contents: [{
8
+ contents: [
9
+ {
9
10
  uri: "skyramp://progress/tool-phases",
10
11
  mimeType: "application/json",
11
12
  text: JSON.stringify(TOOL_PHASE_MAP),
12
- }],
13
+ },
14
+ ],
13
15
  }));
14
16
  }
@@ -4,7 +4,8 @@ import { resourceText } from "../utils/utils.js";
4
4
  import { AnalyticsService } from "../services/AnalyticsService.js";
5
5
  import { getAdaptWorkflowPrompt } from "../prompts/sut-setup/modes/adaptWorkflowPrompt.js";
6
6
  import { getDockerComposePrompt } from "../prompts/sut-setup/modes/dockerComposePrompt.js";
7
- import { SutSetupMode } from "../prompts/sut-setup/shared.js";
7
+ import { SutSetupMode, } from "../prompts/sut-setup/shared.js";
8
+ import { getLocalRepositoryInfo } from "../utils/telemetry.js";
8
9
  export function registerSutSetupResource(server) {
9
10
  logger.info("Registering SUT setup resource");
10
11
  // RFC 6570 {+rest} (reserved expansion) captures the entire query string
@@ -19,8 +20,25 @@ export function registerSutSetupResource(server) {
19
20
  }, async (uri) => {
20
21
  const param = (name, fallback) => uri.searchParams.get(name) ?? fallback;
21
22
  const mode = param("sutSetupMode", SutSetupMode.None);
23
+ const repositoryPath = param("repositoryPath", ".");
24
+ // The released action sends no `repository` on this URI at all. Read the
25
+ // same thing it reads for the testbot URI — the origin remote of this very
26
+ // checkout — so the two names can never disagree.
27
+ // TODO: drop the fallback once a released action sends it here.
28
+ let repository = (uri.searchParams.get("repository") ?? "").trim();
29
+ // Mode "none" returns a fixed string that names no repository.
30
+ if (mode !== SutSetupMode.None) {
31
+ if (!repository) {
32
+ repository =
33
+ (await getLocalRepositoryInfo(repositoryPath)).repository ?? "";
34
+ }
35
+ if (!repository) {
36
+ return resourceText(uri.toString(), `repository is required: pass the checkout's owner/repo on the resource URI, or run where ${repositoryPath} has an origin remote that names one`);
37
+ }
38
+ }
22
39
  const args = {
23
- repositoryPath: param("repositoryPath", "."),
40
+ repositoryPath,
41
+ repository,
24
42
  sutSetupMode: mode,
25
43
  sutSourceWorkflowFile: param("sutSourceWorkflowFile", ""),
26
44
  sutSourceDockerComposeFile: param("sutSourceDockerComposeFile", ""),
@@ -3,6 +3,8 @@ import { logger } from "../utils/logger.js";
3
3
  import { AnalyticsService } from "../services/AnalyticsService.js";
4
4
  import { getTestbotPrompt, parseRelatedRepositories, } from "../prompts/testbot/testbot-prompts.js";
5
5
  import { readWorkspaceServices } from "../prompts/prompt-utils.js";
6
+ import { getLocalRepositoryInfo } from "../utils/telemetry.js";
7
+ import { parseMaxFixAttemptsArg } from "../utils/fixAttempts.js";
6
8
  export function registerTestbotResource(server) {
7
9
  logger.info("Registering testbot resource");
8
10
  // RFC 6570 {+rest} (reserved expansion) captures the entire query string
@@ -35,6 +37,17 @@ export function registerTestbotResource(server) {
35
37
  };
36
38
  const prNum = intParam("prNumber");
37
39
  const repositoryPath = param("repositoryPath", ".");
40
+ // Required, like the prompt's own argument. A blank one would render an
41
+ // empty <REPOSITORY> block and tell the agent to attribute to nothing.
42
+ // The released action sends `primaryRepo` only on a multi-repo run, so a
43
+ // single-repo run names nothing. Read the same thing the action reads —
44
+ // the origin remote of this very checkout — so the two can never disagree.
45
+ // TODO: drop the fallback once a released action sends it on every run.
46
+ const primaryRepo = (uri.searchParams.get("primaryRepo") ?? "").trim() ||
47
+ (await getLocalRepositoryInfo(repositoryPath)).repository;
48
+ if (!primaryRepo) {
49
+ throw new Error(`primaryRepo is required: pass the primary checkout's owner/repo on the resource URI, or run where ${repositoryPath} has an origin remote that names one`);
50
+ }
38
51
  const services = await readWorkspaceServices(repositoryPath);
39
52
  const prompt = getTestbotPrompt({
40
53
  prTitle: param("prTitle", ""),
@@ -47,11 +60,16 @@ export function registerTestbotResource(server) {
47
60
  uiCredentials: uri.searchParams.get("uiCredentials") || undefined,
48
61
  testsRepoDir: uri.searchParams.get("testsRepoDir") || undefined,
49
62
  relatedRepositories: parseRelatedRepositories(uri.searchParams.get("relatedRepositories") || undefined),
50
- primaryRepo: uri.searchParams.get("primaryRepo") || undefined,
63
+ primaryRepo,
51
64
  // Plan-only eval lane (SKYR-3879): recommendation phase only, nothing
52
65
  // generated or executed. Same accepted spellings as the prompt schema.
53
66
  planOnly: ["true", "1"].includes(uri.searchParams.get("planOnly") ?? ""),
54
67
  language: uri.searchParams.get("language") || undefined,
68
+ // Fix-and-rerun attempt cap (SKYR-4460): the shared parser, so an unusable
69
+ // or out-of-range value reads as unset here and on the prompt alike. Named
70
+ // "perTest…" on the wire: the URI is in the agent's context, and a bare
71
+ // "maxFixAttempts" reads as a run-wide total.
72
+ maxFixAttempts: parseMaxFixAttemptsArg(uri.searchParams.get("perTestMaxFixAttempts") ?? undefined),
55
73
  });
56
74
  AnalyticsService.pushMCPToolEvent("skyramp_testbot_prompt", undefined, {}).catch(() => { });
57
75
  // The URI WITHOUT its query string. The agent reads this line above the
@@ -35,7 +35,9 @@ async function safePushToolEvent(entryPoint, toolName, errorMessage, params) {
35
35
  await withTimeout(pushToolEvent(entryPoint, toolName, errorMessage, params), ANALYTICS_TIMEOUT_MS, "pushToolEvent");
36
36
  }
37
37
  catch (error) {
38
- logger.error("safePushToolEvent failed", { error: error instanceof Error ? error.message : String(error) });
38
+ logger.error("safePushToolEvent failed", {
39
+ error: error instanceof Error ? error.message : String(error),
40
+ });
39
41
  // Swallow — analytics must never crash the server.
40
42
  }
41
43
  }
@@ -49,10 +49,8 @@ export class ScenarioGenerationService {
49
49
  const statusCode = params.statusCode ?? inferExpectedStatus(method);
50
50
  const requestBody = params.requestBody ||
51
51
  (method === "GET" || method === "DELETE" ? "" : "{}");
52
- const responseHeaders = params.responseHeaders
53
- || { "Content-Type": ["application/json"] };
54
- const isJsonResponse = (responseHeaders["Content-Type"] || [])
55
- .some(v => v.includes("application/json"));
52
+ const responseHeaders = params.responseHeaders || { "Content-Type": ["application/json"] };
53
+ const isJsonResponse = (responseHeaders["Content-Type"] || []).some((v) => v.includes("application/json"));
56
54
  const responseBody = params.responseBody || (isJsonResponse ? "{}" : "");
57
55
  const requestHeaders = {
58
56
  "Content-Type": ["application/json"],
@@ -76,7 +74,9 @@ export class ScenarioGenerationService {
76
74
  if (Array.isArray(v)) {
77
75
  const items = v
78
76
  .filter((item) => item !== null)
79
- .map((item) => (typeof item === "object" ? JSON.stringify(item) : String(item)));
77
+ .map((item) => typeof item === "object"
78
+ ? JSON.stringify(item)
79
+ : String(item));
80
80
  if (items.length === 0)
81
81
  continue;
82
82
  value = items.join(",");
@@ -23,9 +23,23 @@ export class TestDiscoveryService {
23
23
  SKYRAMP_MARKER = "Generated by Skyramp";
24
24
  // Supported test file extensions — covers all common languages/frameworks
25
25
  SUPPORTED_EXTENSIONS = [
26
- ".py", ".js", ".ts", ".tsx", ".jsx", ".java",
27
- ".go", ".rb", ".kt", ".kts", ".cs", ".rs",
28
- ".php", ".scala", ".swift", ".m", ".dart",
26
+ ".py",
27
+ ".js",
28
+ ".ts",
29
+ ".tsx",
30
+ ".jsx",
31
+ ".java",
32
+ ".go",
33
+ ".rb",
34
+ ".kt",
35
+ ".kts",
36
+ ".cs",
37
+ ".rs",
38
+ ".php",
39
+ ".scala",
40
+ ".swift",
41
+ ".m",
42
+ ".dart",
29
43
  ".snap", // Jest/Vitest snapshot files — may need updating when UI changes break them
30
44
  ];
31
45
  // Concurrency control for parallel operations
@@ -54,7 +68,9 @@ export class TestDiscoveryService {
54
68
  logger.info(`Found ${classified.skyramp.length} Skyramp test files, ${classified.external.length} external test files`);
55
69
  // Process Skyramp tests (content already cached from classification)
56
70
  const skyrampTests = await this.processFilesInBatches(classified.skyramp, false, classified.contentCache);
57
- skyrampTests.forEach(t => { t.source = TestSource.Skyramp; });
71
+ skyrampTests.forEach((t) => {
72
+ t.source = TestSource.Skyramp;
73
+ });
58
74
  // No diff context reaches this service: its one caller passes no options, so
59
75
  // every external file is potentially relevant and the cap is what bounds the
60
76
  // read set.
@@ -122,7 +138,7 @@ export class TestDiscoveryService {
122
138
  // TEST_FILE_PATTERNS includes Skyramp-generated suffixes (_smoke, _contract, etc.)
123
139
  // so Skyramp files outside standard test directories are still discovered.
124
140
  // This avoids reading every source file in the repo just to check the marker.
125
- const testCandidates = allFiles.filter(f => this.isExternalTestFile(f));
141
+ const testCandidates = allFiles.filter((f) => this.isExternalTestFile(f));
126
142
  logger.debug(`Found ${allFiles.length} candidate files, narrowed to ${testCandidates.length} likely test files`);
127
143
  const result = { skyramp: [], external: [] };
128
144
  const contentCache = new Map();
@@ -43,7 +43,11 @@ process.on("exit", () => {
43
43
  // resolving from the mounted repo. Node treats the empty shadow as a miss and
44
44
  // walks up to NODE_PATH's global install (both packages are global in the
45
45
  // executor image).
46
- const SHADOWED_NESTED_PACKAGES = ["@playwright/test", "playwright", "@skyramp/skyramp"];
46
+ const SHADOWED_NESTED_PACKAGES = [
47
+ "@playwright/test",
48
+ "playwright",
49
+ "@skyramp/skyramp",
50
+ ];
47
51
  // Minimal Playwright config — shadows repo configs that may import dotenv or other
48
52
  // dependencies not available in the executor container.
49
53
  const MINIMAL_PLAYWRIGHT_CONFIG_PATH = path.join(os.tmpdir(), "skyramp-playwright.config.ts");
@@ -60,9 +64,7 @@ export const PLAYWRIGHT_CONFIG_FILES = [
60
64
  // IS mounted (see mountRepoTree) — but walking it would shadow every package's
61
65
  // own package.json with empty JSON via MOUNT_NULL_ITEMS, breaking resolution
62
66
  // for the whole tree.
63
- export const MOUNT_SCAN_SKIP_DIRS = [
64
- "node_modules",
65
- ];
67
+ export const MOUNT_SCAN_SKIP_DIRS = ["node_modules"];
66
68
  // Reserved container subdir under /home/user where a cross-repo test repository
67
69
  // (testsRepoDir, SKYR-3819) is mounted. Must live INSIDE /home/user: the generated
68
70
  // Playwright config's testDir is anchored there, and a test path outside it is
@@ -94,8 +96,14 @@ export function isBrowserTest(testType) {
94
96
  * based on the test file path
95
97
  */
96
98
  export function getVideoSubdir(testFile) {
97
- const basename = path.basename(testFile, path.extname(testFile)).replace(/[^A-Za-z0-9._-]/g, "-");
98
- const hash = crypto.createHash("sha256").update(testFile).digest("hex").slice(0, 8);
99
+ const basename = path
100
+ .basename(testFile, path.extname(testFile))
101
+ .replace(/[^A-Za-z0-9._-]/g, "-");
102
+ const hash = crypto
103
+ .createHash("sha256")
104
+ .update(testFile)
105
+ .digest("hex")
106
+ .slice(0, 8);
99
107
  return `${basename}-${hash}`;
100
108
  }
101
109
  /**
@@ -359,7 +367,8 @@ export function detectSessionFiles(testFilePath) {
359
367
  */
360
368
  export function findExcludedPaths(dir, excludedItems) {
361
369
  const results = [];
362
- const shouldSkipDir = (entry) => excludedItems.includes(entry.name) || MOUNT_SCAN_SKIP_DIRS.includes(entry.name);
370
+ const shouldSkipDir = (entry) => excludedItems.includes(entry.name) ||
371
+ MOUNT_SCAN_SKIP_DIRS.includes(entry.name);
363
372
  for (const [entry, fullPath] of walkDir(dir, { shouldSkipDir })) {
364
373
  // Only shadow files — mounting /dev/null to a directory target causes Docker errors
365
374
  if (excludedItems.includes(entry.name)) {
@@ -523,7 +532,9 @@ export class TestExecutionService {
523
532
  // include it and the relative-path computation would escape /home/user. Anchor
524
533
  // it under the reserved subdir instead; the test repo is mounted there below.
525
534
  const absTestFile = path.resolve(options.testFile);
526
- const testRepoPath = options.testRepoPath ? path.resolve(options.testRepoPath) : undefined;
535
+ const testRepoPath = options.testRepoPath
536
+ ? path.resolve(options.testRepoPath)
537
+ : undefined;
527
538
  // A root-level test repo would bind-mount large portions of the host
528
539
  // (read-write, alongside the Docker socket) into the executor — reject it
529
540
  // explicitly rather than falling through to the generic path error below.
@@ -532,7 +543,9 @@ export class TestExecutionService {
532
543
  !isUnder(workspacePath, absTestFile)) {
533
544
  throw new Error(`testRepoPath must not be the filesystem root, got: ${options.testRepoPath}`);
534
545
  }
535
- const crossRepoTestRoot = !isUnder(workspacePath, absTestFile) && testRepoPath && isUnder(testRepoPath, absTestFile)
546
+ const crossRepoTestRoot = !isUnder(workspacePath, absTestFile) &&
547
+ testRepoPath &&
548
+ isUnder(testRepoPath, absTestFile)
536
549
  ? testRepoPath
537
550
  : undefined;
538
551
  if (crossRepoTestRoot) {
@@ -555,7 +568,7 @@ export class TestExecutionService {
555
568
  testFilePath = path.resolve(containerMountPath, path.relative(workspacePath, absTestFile));
556
569
  }
557
570
  // Video recording setup for UI/E2E browser tests (no-op for API tests).
558
- const { browserTest, videoHostDir, videoContainerDir, playwrightConfigPath, pytestConfigPath } = setupVideoCapture(options, workspacePath, containerMountPath);
571
+ const { browserTest, videoHostDir, videoContainerDir, playwrightConfigPath, pytestConfigPath, } = setupVideoCapture(options, workspacePath, containerMountPath);
559
572
  // Prepare Docker command
560
573
  const command = [
561
574
  "bash",
@@ -637,10 +650,15 @@ export class TestExecutionService {
637
650
  // copies that must not load from the repo.
638
651
  const entriesToMount = fs
639
652
  .readdirSync(hostRoot)
640
- .filter((file) => !MOUNT_NULL_ITEMS.includes(file) && !PLAYWRIGHT_CONFIG_FILES.includes(file));
653
+ .filter((file) => !MOUNT_NULL_ITEMS.includes(file) &&
654
+ !PLAYWRIGHT_CONFIG_FILES.includes(file));
641
655
  for (const file of entriesToMount) {
642
656
  const source = path.join(hostRoot, file);
643
- pushMount({ Type: "bind", Target: path.join(containerRoot, file), Source: source });
657
+ pushMount({
658
+ Type: "bind",
659
+ Target: path.join(containerRoot, file),
660
+ Source: source,
661
+ });
644
662
  if (mirrorToHost) {
645
663
  pushMount({ Type: "bind", Target: source, Source: source });
646
664
  }
@@ -648,8 +666,14 @@ export class TestExecutionService {
648
666
  // Shadow MOUNT_NULL_ITEMS (found recursively) with /dev/null (or empty JSON for .json files).
649
667
  for (const absolutePath of findExcludedPaths(hostRoot, MOUNT_NULL_ITEMS)) {
650
668
  const rel = path.relative(hostRoot, absolutePath);
651
- const source = absolutePath.endsWith(".json") ? EMPTY_JSON_PATH : "/dev/null";
652
- pushMount({ Type: "bind", Source: source, Target: path.join(containerRoot, rel) });
669
+ const source = absolutePath.endsWith(".json")
670
+ ? EMPTY_JSON_PATH
671
+ : "/dev/null";
672
+ pushMount({
673
+ Type: "bind",
674
+ Source: source,
675
+ Target: path.join(containerRoot, rel),
676
+ });
653
677
  if (mirrorToHost) {
654
678
  pushMount({ Type: "bind", Source: source, Target: absolutePath });
655
679
  }
@@ -669,7 +693,12 @@ export class TestExecutionService {
669
693
  ReadOnly: true,
670
694
  });
671
695
  if (mirrorToHost) {
672
- pushMount({ Type: "bind", Source: EMPTY_DIR_PATH, Target: pkgPath, ReadOnly: true });
696
+ pushMount({
697
+ Type: "bind",
698
+ Source: EMPTY_DIR_PATH,
699
+ Target: pkgPath,
700
+ ReadOnly: true,
701
+ });
673
702
  }
674
703
  }
675
704
  }
@@ -681,9 +710,17 @@ export class TestExecutionService {
681
710
  // `npx playwright test <file>` and read playwright.config.ts.
682
711
  for (const absolutePath of findExcludedPaths(hostRoot, PLAYWRIGHT_CONFIG_FILES)) {
683
712
  const rel = path.relative(hostRoot, absolutePath);
684
- pushMount({ Type: "bind", Source: playwrightConfigPath, Target: path.join(containerRoot, rel) });
713
+ pushMount({
714
+ Type: "bind",
715
+ Source: playwrightConfigPath,
716
+ Target: path.join(containerRoot, rel),
717
+ });
685
718
  if (mirrorToHost) {
686
- pushMount({ Type: "bind", Source: playwrightConfigPath, Target: absolutePath });
719
+ pushMount({
720
+ Type: "bind",
721
+ Source: playwrightConfigPath,
722
+ Target: absolutePath,
723
+ });
687
724
  }
688
725
  }
689
726
  };
@@ -692,7 +729,8 @@ export class TestExecutionService {
692
729
  // even if the repo has no config file. The pushMount dedup ensures later shadows
693
730
  // for the same target are dropped.
694
731
  if (browserTest) {
695
- if (options.language === "typescript" || options.language === "javascript") {
732
+ if (options.language === "typescript" ||
733
+ options.language === "javascript") {
696
734
  // Mount generated Playwright config at canonical container path
697
735
  pushMount({
698
736
  Type: "bind",
@@ -962,11 +1000,15 @@ export class TestExecutionService {
962
1000
  const errors = this.parseErrors(cleanOutput);
963
1001
  const warnings = this.parseWarnings(cleanOutput);
964
1002
  // Collect the recorded video (browser tests only).
965
- const videoPath = browserTest ? collectVideoPath(videoHostDir) : undefined;
1003
+ const videoPath = browserTest
1004
+ ? collectVideoPath(videoHostDir)
1005
+ : undefined;
966
1006
  const result = {
967
1007
  testFile: options.testFile,
968
- status: statusCode === 0 ? TestExecutionStatus.Pass
969
- : statusCode !== 1 ? TestExecutionStatus.Error
1008
+ status: statusCode === 0
1009
+ ? TestExecutionStatus.Pass
1010
+ : statusCode !== 1
1011
+ ? TestExecutionStatus.Error
970
1012
  : TestExecutionStatus.Fail,
971
1013
  executedAt,
972
1014
  duration,
@@ -62,7 +62,7 @@ export declare abstract class TestGenerationService {
62
62
  protected abstract getTestType(): TestType | typeof MOCK_TYPE;
63
63
  /**
64
64
  * Whether this generation's codeReuse hand-off sequences skyramp_modularization
65
- * before skyramp_reuse_code (routing: isModularizeFirstTarget). Subclasses that
65
+ * before skyramp_reuse_code (isModularizeFirstHandOffTarget). Subclasses that
66
66
  * add their own post-generation steps consult this so modularization is
67
67
  * instructed exactly once.
68
68
  */