@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
@@ -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
  */
@@ -15,7 +15,8 @@ import { isInsideExecutorWorkDir, executorWorkDirRefusal, generationTargets, } f
15
15
  import { getTestsRepoDir } from "../utils/AnalysisStateManager.js";
16
16
  import { recordReuseHandOff } from "../tools/code-refactor/reuse-state.js";
17
17
  import { recordAssertionBaseline } from "../tools/code-refactor/assertion-state.js";
18
- import { isModularizeFirstTarget } from "../utils/reuseRouting.js";
18
+ import { persistGeneratedTest } from "../utils/generatedTestRecord.js";
19
+ import { buildModularizeFirstNextSteps, isModularizeFirstHandOffTarget, reuseCodeArgsClause, } from "../prompts/reuse-hand-off.js";
19
20
  /**
20
21
  * Derive the framework actually used for generation from the (normalized)
21
22
  * language + framework params. A blank/whitespace-only framework is treated as
@@ -107,12 +108,24 @@ export class TestGenerationService {
107
108
  // The files this call wrote, as codegen reports them — the reuse hand-off is
108
109
  // recorded per FILE (SKYR-4220).
109
110
  const written = generatedFilesFrom(result);
111
+ // Record the paths this call wrote, unconditionally. The generator is the
112
+ // only place they are known, and the report otherwise has to fall back to
113
+ // the agent's `fileName` — a basename, so two specs of one name in
114
+ // different directories answer for each other. Not folded into the
115
+ // assertion baseline below: that one is skipped for whole test types.
116
+ // A mock is not a test and is never executed, so it is not recorded.
117
+ const generatedType = this.getTestType();
118
+ if (generatedType !== MOCK_TYPE) {
119
+ for (const file of written) {
120
+ await persistGeneratedTest(file, generatedType);
121
+ }
122
+ }
110
123
  // Seed the assertion-enhancement baseline SERVER-SIDE at generation time
111
124
  // (same pattern as recordReuseHandOff below): the execute-time
112
125
  // verification gate arms even if the agent never calls
113
126
  // skyramp_enhance_assertions at all — the last prompt-mediated entry
114
127
  // point. Best-effort; no run state means the gate stays open as before.
115
- const testType = this.getTestType();
128
+ const testType = generatedType;
116
129
  if (params.enhanceAssertions &&
117
130
  testType !== MOCK_TYPE &&
118
131
  ASSERTION_ENHANCEABLE_TEST_TYPES.includes(testType) &&
@@ -128,25 +141,32 @@ export class TestGenerationService {
128
141
  });
129
142
  // Orchestrate code optimization workflow based on flags
130
143
  let postGenerationMessage = "";
131
- if (params.codeReuse) {
144
+ // skyramp_mock_generation's schema carries no `codeReuse` field, so the mock
145
+ // pseudo-type cannot reach this branch. Narrowed here rather than widened in
146
+ // the shared hand-off module, which deals in TestType only.
147
+ const reuseTestType = testType === MOCK_TYPE ? undefined : testType;
148
+ if (params.codeReuse && reuseTestType) {
132
149
  // Name the framework generation actually used, not the raw parameter:
133
150
  // TS/JS derive to playwright when the caller omitted it, and
134
151
  // skyramp_reuse_code requires framework to route correctly.
135
152
  const effectiveFramework = deriveEffectiveFramework(params.language || "", params.framework);
136
- const reuseArgs = `\`testFile\` set to the absolute path of the generated test file, \`language: "${params.language}"\`, \`testType: "${testType}"\`${effectiveFramework ? `, and \`framework: "${effectiveFramework}"\`` : ""}`;
153
+ const reuseArgs = reuseCodeArgsClause(params.language, reuseTestType, effectiveFramework);
137
154
  // Modularize-first: fresh codegen carries no helper functions (each
138
155
  // endpoint called once, each browser step inline), so modularization is
139
156
  // what creates the named helpers that reuse then consolidates into the
140
157
  // shared utils file. Emitted here, not in the testbot prompt, so the
141
158
  // instruction exists only on runs that actually generated this test type
142
159
  // and needs no hand-maintained step numbering.
143
- if (this.emitsModularizeFirstHandOff(params)) {
160
+ // The predicate rather than emitsModularizeFirstHandOff: both mean the
161
+ // same inside this codeReuse branch, and this one narrows the language to
162
+ // one the utils verifier covers, which is what the steps require.
163
+ if (isModularizeFirstHandOffTarget(reuseTestType, params.language)) {
144
164
  // SKYR-4220: record the hand-off at the site that emits it, under the same
145
165
  // condition, so skyramp_execute_test can refuse a test that skipped the pair
146
166
  // and the report can mark it — without ever owing it for a test that was not
147
167
  // told to run it. Keyed by the files this call wrote: a test generated into
148
168
  // the same directory without codeReuse owes nothing.
149
- await recordReuseHandOff(written, testType, params.language || "", effectiveFramework);
169
+ await recordReuseHandOff(written, testType, params.language, effectiveFramework);
150
170
  // Browser tests: the assertion enhancer anchors new assertions to
151
171
  // selectors present in the test file, and after modularize → reuse
152
172
  // those selectors live in the utils file. So for UI the enhancer runs
@@ -154,23 +174,15 @@ export class TestGenerationService {
154
174
  // assertion in the test body. API enhancers key off response paths,
155
175
  // so integration keeps its validated modularize → reuse → enhance order.
156
176
  const enhanceFirst = testType === TestType.UI && !!params.enhanceAssertions;
157
- const steps = [
158
- ...(enhanceFirst
159
- ? [
160
- `Call \`skyramp_enhance_assertions\` with \`testFile\` set to the absolute path of the generated test file, \`testType: "${testType}"\`, and \`enhanceType: "generation"\`, and apply every instruction returned to that file — BEFORE modularization, while the file's selectors are still inline.`,
161
- ]
162
- : []),
163
- `Call \`skyramp_modularization\` with \`testFile\`, \`testType: "${testType}"\`, and \`isTraceBased: true\`, and apply the returned instructions — this extracts the test's steps into named helper functions, which is what makes cross-test reuse possible.`,
164
- `Immediately after writing the modularized file — as your very NEXT skyramp tool call — call \`skyramp_reuse_code\` with ${reuseArgs}. The modularization call does NOT count as this step: reuse is a separate tool and MUST be invoked even when you expect it to find nothing. Follow the returned steps to completion. Sibling tests offering nothing to reuse is a normal outcome — the returned steps still move THIS test's own helpers into the shared utils file and import them back, so the test file IS expected to change; finish those steps, then continue (do NOT retry).`,
165
- ];
166
- const ordering = enhanceFirst
167
- ? "three sub-steps, STRICTLY SEQUENTIAL (never in the same tool-call batch)"
168
- : "two sub-steps, STRICTLY SEQUENTIAL (never in the same tool-call batch), BOTH BEFORE `skyramp_enhance_assertions`";
169
177
  postGenerationMessage += `
170
178
  Test generated successfully!
171
179
 
172
- ⏭️**CRITICAL NEXT STEPS — ${ordering}**:
173
- ${steps.map((text, i) => `${String.fromCharCode(97 + i)}. ${text}`).join("\n")}
180
+ ${buildModularizeFirstNextSteps({
181
+ testType: reuseTestType,
182
+ language: params.language,
183
+ framework: effectiveFramework,
184
+ enhanceFirst,
185
+ })}
174
186
  `;
175
187
  }
176
188
  else {
@@ -271,10 +283,15 @@ The generated test file remains unchanged and ready to use as-is.
271
283
  const suggested = /\.[tj]s$/.test(parsed.ext)
272
284
  ? params.output.replace(/\.[tj]s$/, ".spec.ts")
273
285
  : params.output + ".spec.ts";
286
+ // Both spellings are named: the repository decides which files are tests,
287
+ // and one that declares `testMatch: ["**/*.test.ts"]` collects no
288
+ // *.spec.ts (SKYR-4489).
289
+ const alternative = suggested.replace(/\.spec\.ts$/, ".test.ts");
274
290
  errList.content.push({
275
291
  type: "text",
276
- text: `Error: Playwright requires test files to match *.{spec}.{ts,js} (got "${params.output}"). ` +
277
- `Rename to e.g. ${suggested} so Playwright can discover it.`,
292
+ text: `Error: Playwright requires test files to match *.{spec,test}.{ts,js} (got "${params.output}"). ` +
293
+ `Rename to ${suggested}, or to ${alternative} if the tests already in ` +
294
+ `${params.outputDir} use that spelling.`,
278
295
  });
279
296
  }
280
297
  }
@@ -303,13 +320,15 @@ The generated test file remains unchanged and ready to use as-is.
303
320
  }
304
321
  /**
305
322
  * Whether this generation's codeReuse hand-off sequences skyramp_modularization
306
- * before skyramp_reuse_code (routing: isModularizeFirstTarget). Subclasses that
323
+ * before skyramp_reuse_code (isModularizeFirstHandOffTarget). Subclasses that
307
324
  * add their own post-generation steps consult this so modularization is
308
325
  * instructed exactly once.
309
326
  */
310
327
  emitsModularizeFirstHandOff(params) {
328
+ const testType = this.getTestType();
311
329
  return (!!params.codeReuse &&
312
- isModularizeFirstTarget(this.getTestType(), params.language));
330
+ testType !== MOCK_TYPE &&
331
+ isModularizeFirstHandOffTarget(testType, params.language));
313
332
  }
314
333
  async handleApiAnalysis(params) {
315
334
  if (params.apiSchema && params.endpointURL && params.method === "") {
@@ -0,0 +1,45 @@
1
+ import type { EnhanceType } from "../types/EnhanceType.js";
2
+ /**
3
+ * The `enhance-assertions` skill ships in `plugin/skills/` at the
4
+ * package root (SKYR-4310). Its markdown is the single source of the assertion
5
+ * instructions: Claude Code loads the skill through `--plugin-dir`, and every
6
+ * other agent gets the same rules assembled from the same files by
7
+ * `skyramp_enhance_assertions`, whose behaviour is otherwise unchanged.
8
+ */
9
+ export declare const ENHANCE_ASSERTIONS_SKILL = "enhance-assertions";
10
+ /** The shared response-body rules, without the surrounding framing. */
11
+ export declare function sharedAssertionRules(): string;
12
+ /** Full instruction text, assembled from the same markdown the skill reads.
13
+ * Used by agents that cannot load the plugin. */
14
+ export declare function buildEnhanceAssertionsInstructions(testFile: string, testType: string, enhanceType: EnhanceType): string;
15
+ /**
16
+ * The maintenance equivalent, for the UPDATE strategy. It covers a set of
17
+ * already-edited files rather than one freshly generated file, so it names no
18
+ * single test type and states the per-file duty over that set.
19
+ *
20
+ * This route was the last one still naming the tool literally. Because MCP tool
21
+ * output beats the prompt on conflict, that one call handed the agent the whole
22
+ * rule text, and an agent already holding the rules has no reason to invoke the
23
+ * skill — which is why two A/B runs recorded zero invocations while the
24
+ * per-file gates worked (SKYR-4310).
25
+ */
26
+ export declare function enhanceAssertionsMaintenanceCall(): string;
27
+ /** `enhanceAssertionsCall` as a standalone sentence, for a generation result's
28
+ * numbered step list. */
29
+ export declare function enhanceAssertionsStep(testType: string, fileDescription: string): string;
30
+ /**
31
+ * How a prompt or a generation result should tell the agent to enhance
32
+ * assertions. With the skills plugin loaded the skill owns the whole workflow
33
+ * — baseline, rules, verification — so naming the tool here would hand the
34
+ * agent the same rules a second time (SKYR-4310).
35
+ *
36
+ * The per-file duty is stated HERE, in the routing text, not left to the skill
37
+ * body. A tool call is cheap and repeatable, so the agent makes one per file
38
+ * without thinking; a skill invocation loads instructions into the
39
+ * conversation, and invoking it again reads as redundant. In the first A/B the
40
+ * agent therefore invoked the skill once and enhanced 3 of 5 files, against 5
41
+ * of 5 with the plugin off. So the routing says the count, and puts the
42
+ * repeated action on the two tools, which are called once per file however
43
+ * many times the skill itself is invoked.
44
+ */
45
+ export declare function enhanceAssertionsCall(testType: string, fileDescription: string): string;
@@ -0,0 +1,103 @@
1
+ import { getPersonaPrefix } from "../prompts/personas.js";
2
+ import { TestType } from "../types/TestTypes.js";
3
+ import { isSkillsLoaded, isTestbotEnabled } from "../utils/featureFlags.js";
4
+ import { readSkillFile, section, sectionBody, sliceBetween, sliceFrom, sliceUntil, fillPlaceholders, } from "./skillFiles.js";
5
+ /**
6
+ * The `enhance-assertions` skill ships in `plugin/skills/` at the
7
+ * package root (SKYR-4310). Its markdown is the single source of the assertion
8
+ * instructions: Claude Code loads the skill through `--plugin-dir`, and every
9
+ * other agent gets the same rules assembled from the same files by
10
+ * `skyramp_enhance_assertions`, whose behaviour is otherwise unchanged.
11
+ */
12
+ export const ENHANCE_ASSERTIONS_SKILL = "enhance-assertions";
13
+ const TESTBOT_UI_SECTION = "## Additional checks in Testbot runs";
14
+ function reference(name) {
15
+ return readSkillFile(ENHANCE_ASSERTIONS_SKILL, `reference/${name}.md`);
16
+ }
17
+ /** The shared response-body rules, without the surrounding framing. */
18
+ export function sharedAssertionRules() {
19
+ return sectionBody(reference("shared-rules"), "## Assertion Rules with Examples");
20
+ }
21
+ /** Full instruction text, assembled from the same markdown the skill reads.
22
+ * Used by agents that cannot load the plugin. */
23
+ export function buildEnhanceAssertionsInstructions(testFile, testType, enhanceType) {
24
+ const shared = reference("shared-rules");
25
+ // Only the maintenance mode narrows scope; generation keeps the whole file.
26
+ const scope = enhanceType === "maintenance"
27
+ ? ` ${sectionBody(shared, "### When maintaining an existing test")}`
28
+ : "";
29
+ if (testType === TestType.UI) {
30
+ const uiRef = reference("ui");
31
+ const ui = sliceFrom(uiRef, "## First Check");
32
+ const rules = isTestbotEnabled() ? ui : sliceUntil(ui, TESTBOT_UI_SECTION);
33
+ // The principle governs every rule below it, so it leads the hand-out too.
34
+ // Both slicers used to start below it and dropped it silently.
35
+ const body = `${section(uiRef, "## What to assert")}\n\n${rules}`;
36
+ // Positional order matches the skill: the two fixed values first, then
37
+ // the path, so a path containing a space cannot shift them.
38
+ return fillPlaceholders(`${getPersonaPrefix()}Your task is to enhance assertions for the given UI test file: \`${testFile}\`.${scope}\n\n${body}\n`, [testType, enhanceType, testFile]);
39
+ }
40
+ if (testType !== TestType.CONTRACT && testType !== TestType.INTEGRATION) {
41
+ throw new Error(`Unsupported testType for skyramp_enhance_assertions: ${testType}`);
42
+ }
43
+ const body = [
44
+ section(shared, "## What to assert"),
45
+ sliceBetween(shared, "## Pre-Edit Assertion Analysis", "## What not to do"),
46
+ sliceFrom(reference(testType), "## Additional assertion rules"),
47
+ sliceFrom(shared, "## What not to do"),
48
+ ].join("\n\n");
49
+ return fillPlaceholders(`${getPersonaPrefix()}Your task is to enhance response body assertions in the given test file: \`${testFile}\`.${scope}\n\n${body}`, [testType, enhanceType, testFile]);
50
+ }
51
+ /**
52
+ * The maintenance equivalent, for the UPDATE strategy. It covers a set of
53
+ * already-edited files rather than one freshly generated file, so it names no
54
+ * single test type and states the per-file duty over that set.
55
+ *
56
+ * This route was the last one still naming the tool literally. Because MCP tool
57
+ * output beats the prompt on conflict, that one call handed the agent the whole
58
+ * rule text, and an agent already holding the rules has no reason to invoke the
59
+ * skill — which is why two A/B runs recorded zero invocations while the
60
+ * per-file gates worked (SKYR-4310).
61
+ */
62
+ export function enhanceAssertionsMaintenanceCall() {
63
+ if (isSkillsLoaded()) {
64
+ return (`invoke the \`${ENHANCE_ASSERTIONS_SKILL}\` skill for each updated file, with arguments ` +
65
+ `\`<testType> maintenance <absolute path of the file>\`. Do this for EVERY file you just ` +
66
+ `edited, one at a time: five updated files means five ` +
67
+ `\`skyramp_enhance_assertions_snapshot\` calls and five passing ` +
68
+ `\`skyramp_verify_enhance_assertions\` calls. The snapshot for a file comes after your ` +
69
+ `maintenance edit and before you add assertions to it — it is the baseline the ` +
70
+ `verification measures against. Read the skill's rules once, then repeat its per-file ` +
71
+ `steps for the rest`);
72
+ }
73
+ return (`call \`skyramp_enhance_assertions\` once per updated file, with that file's path, its ` +
74
+ `\`testType\`, and \`enhanceType: "maintenance"\`, and apply every instruction returned to ` +
75
+ `that file`);
76
+ }
77
+ /** `enhanceAssertionsCall` as a standalone sentence, for a generation result's
78
+ * numbered step list. */
79
+ export function enhanceAssertionsStep(testType, fileDescription) {
80
+ const call = enhanceAssertionsCall(testType, fileDescription);
81
+ return `${call.charAt(0).toUpperCase()}${call.slice(1)}.`;
82
+ }
83
+ /**
84
+ * How a prompt or a generation result should tell the agent to enhance
85
+ * assertions. With the skills plugin loaded the skill owns the whole workflow
86
+ * — baseline, rules, verification — so naming the tool here would hand the
87
+ * agent the same rules a second time (SKYR-4310).
88
+ *
89
+ * The per-file duty is stated HERE, in the routing text, not left to the skill
90
+ * body. A tool call is cheap and repeatable, so the agent makes one per file
91
+ * without thinking; a skill invocation loads instructions into the
92
+ * conversation, and invoking it again reads as redundant. In the first A/B the
93
+ * agent therefore invoked the skill once and enhanced 3 of 5 files, against 5
94
+ * of 5 with the plugin off. So the routing says the count, and puts the
95
+ * repeated action on the two tools, which are called once per file however
96
+ * many times the skill itself is invoked.
97
+ */
98
+ export function enhanceAssertionsCall(testType, fileDescription) {
99
+ if (isSkillsLoaded()) {
100
+ return `invoke the \`${ENHANCE_ASSERTIONS_SKILL}\` skill with arguments \`${testType} generation <absolute path of the ${fileDescription}>\` (a project skill with the same name takes precedence over the plugin copy) and follow every step it lists, including its final verification. Do this for EVERY ${fileDescription}, one file at a time. Read the skill's rules once, then repeat its per-file steps for each remaining file — \`skyramp_enhance_assertions_snapshot\` and \`skyramp_verify_enhance_assertions\` are called once per file, so N such files means N snapshot calls and N passing verify calls. Do not re-invoke the skill for a file whose rules you already hold, and do not stop after the first file`;
101
+ }
102
+ return `call \`skyramp_enhance_assertions\` with \`testFile\` set to the absolute path of the ${fileDescription}, \`testType: "${testType}"\`, and \`enhanceType: "generation"\`, and apply every instruction returned to that file. Do this for EVERY ${fileDescription} — N such files means N calls`;
103
+ }
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * The `fix-test-import-errors` skill ships in `plugin/skills/` at the package
3
3
  * root (SKYR-4296). It carries the same instructions `skyramp_fix_errors`
4
- * returns, so an agent that loads the plugin follows the skill and an agent
5
- * that does not keeps calling the tool. The tool itself is unchanged.
4
+ * returns from the same Markdown, so an agent that loads the plugin follows
5
+ * the skill and an agent that does not keeps calling the tool.
6
6
  */
7
7
  export declare const FIX_TEST_IMPORT_ERRORS_SKILL = "fix-test-import-errors";
8
8
  /**
@@ -2,8 +2,8 @@ import { isSkillsLoaded } from "../utils/featureFlags.js";
2
2
  /**
3
3
  * The `fix-test-import-errors` skill ships in `plugin/skills/` at the package
4
4
  * root (SKYR-4296). It carries the same instructions `skyramp_fix_errors`
5
- * returns, so an agent that loads the plugin follows the skill and an agent
6
- * that does not keeps calling the tool. The tool itself is unchanged.
5
+ * returns from the same Markdown, so an agent that loads the plugin follows
6
+ * the skill and an agent that does not keeps calling the tool.
7
7
  */
8
8
  export const FIX_TEST_IMPORT_ERRORS_SKILL = "fix-test-import-errors";
9
9
  const FIX_ERRORS_TOOL = "skyramp_fix_errors";
@@ -0,0 +1,6 @@
1
+ /** The `run-test` skill ships in `plugin/skills/` at the package root. */
2
+ export declare const RUN_TEST_SKILL = "run-test";
3
+ /** How to shape a command for skyramp_execute_test without the skill. */
4
+ export declare const RUN_TEST_COMMAND_RULES: string;
5
+ /** How a prompt tells the agent to run one test file. */
6
+ export declare function runTestCall(): string;
@@ -0,0 +1,17 @@
1
+ import { isSkillsLoaded } from "../utils/featureFlags.js";
2
+ import { fixErrorsInstruction } from "./fixTestImportErrorsSkill.js";
3
+ /** The `run-test` skill ships in `plugin/skills/` at the package root. */
4
+ export const RUN_TEST_SKILL = "run-test";
5
+ /** How to shape a command for skyramp_execute_test without the skill. */
6
+ export const RUN_TEST_COMMAND_RULES = `for a TypeScript or JavaScript Playwright UI or end-to-end test, add \`--config "$SKYRAMP_PLAYWRIGHT_CONFIG"\`; ` +
7
+ `find the environment variable the test reads for its base URL — \`SKYRAMP_TEST_BASE_URL\` in a generated test, or the name the repository's own config reads in an existing one — and when the run exports no value for that name, put \`<NAME>=$SKYRAMP_TEST_SERVICE_URL_<SERVICENAME>\` in front of the command, for the service the test targets`;
8
+ /** How a prompt tells the agent to run one test file. */
9
+ export function runTestCall() {
10
+ if (isSkillsLoaded()) {
11
+ return (`invoke the \`${RUN_TEST_SKILL}\` skill with arguments ` +
12
+ `\`<absolute path of the test file> <language> <framework> <test type>\``);
13
+ }
14
+ return (`call \`skyramp_execute_test\` with the repository's own command for that one test file, ` +
15
+ `or the framework's usual command when the repository has none (${RUN_TEST_COMMAND_RULES}). ` +
16
+ `If the output shows that a package is missing — the runner itself, or a module the test or its config imports — ${fixErrorsInstruction()} and run the test again`);
17
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Reader for the Agent Skills shipped in `plugin/skills/` at the package root
3
+ * (SKYR-4296, SKYR-4310). The markdown files are the single source of the
4
+ * instruction text: Claude Code loads them through `--plugin-dir`, and every
5
+ * other agent receives the same text back from the MCP tool that would
6
+ * otherwise hand out a prompt.
7
+ */
8
+ /** Absolute path of the shipped `plugin/` directory. */
9
+ export declare function pluginRoot(): string;
10
+ /** Removes a leading YAML frontmatter block, if present. */
11
+ export declare function stripFrontmatter(raw: string): string;
12
+ /** Raw contents of a file inside one skill directory, e.g. `SKILL.md` or
13
+ * `reference/ui.md`. */
14
+ export declare function readSkillFile(skillName: string, relPath: string): string;
15
+ /** SKILL.md body with the YAML frontmatter removed. */
16
+ export declare function readSkillBody(skillName: string): string;
17
+ /** Fill positional `$0`, `$1`, ... placeholders in `text` with `values[n]`,
18
+ * in one pass. `\$` unescapes to a literal `$`, so `\$19.98` in an example
19
+ * reads as itself rather than value 1 followed by "9.98". A placeholder's
20
+ * surrounding backticks, if any, are untouched by the match — the regex
21
+ * matches only the token, not its context — so a standalone code span
22
+ * (`` `$0` ``) and a placeholder nested inside a larger one both come out
23
+ * correctly with no extra handling. */
24
+ export declare function fillPlaceholders(text: string, values: string[]): string;
25
+ /** Everything from `heading` (matched as a line prefix) to the end. */
26
+ export declare function sliceFrom(markdown: string, heading: string): string;
27
+ /** Everything before `heading`; the whole text when the heading is absent. */
28
+ export declare function sliceUntil(markdown: string, heading: string): string;
29
+ /** Everything from `heading` up to `until`, exclusive. */
30
+ export declare function sliceBetween(markdown: string, heading: string, until: string): string;
31
+ /** One section including its heading: `heading` plus the lines under it, up to
32
+ * the next heading of the same or a higher level. */
33
+ export declare function section(markdown: string, heading: string): string;
34
+ /** Body of one section: the lines under `heading`, up to the next heading of
35
+ * the same or a higher level. Lines inside a fenced code block are code, not
36
+ * headings — a Python comment in an example starts with `#` and would
37
+ * otherwise end the section at the first example that carries one. */
38
+ export declare function sectionBody(markdown: string, heading: string): string;