@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
@@ -1,4 +1,5 @@
1
1
  import { spawn, exec } from "child_process";
2
+ import { randomBytes } from "crypto";
2
3
  import path from "path";
3
4
  import fs from "fs";
4
5
  import os from "os";
@@ -16,16 +17,66 @@ const shellEnvVariables = {
16
17
  };
17
18
  let terminalProcess;
18
19
  let terminalPID;
20
+ // Windows closes its console window by title rather than by PID. cmd.exe has no
21
+ // built-in variable for its own process id, so the PID file it used to write
22
+ // never held a number and cleanup silently did nothing (SKYR-4446). The title
23
+ // carries a timestamp so a stop closes the window this session opened and
24
+ // leaves a window from an earlier session alone.
25
+ const WINDOWS_TERMINAL_TITLE_PREFIX = "Skyramp Trace Collection";
26
+ let windowsTerminalTitle;
27
+ // Titles of windows a stop failed to close and a later launch then displaced.
28
+ // Kept so the user is still told which windows are open: clearing them on the
29
+ // next successful close would silently drop the older orphans.
30
+ const orphanedWindowsTerminalTitles = [];
31
+ // The stamp avoids colons: taskkill takes the title as a quoted /FI value, and
32
+ // a colon there is needlessly awkward to reproduce by hand when checking with
33
+ // `tasklist /FI "WINDOWTITLE eq ..."`.
34
+ //
35
+ // The trailing nonce is not decoration. `taskkill /FI "WINDOWTITLE eq ..."`
36
+ // terminates *every* process tree whose title matches, so a title unique only
37
+ // to the second lets two windows opened in the same second - two editors, two
38
+ // workspaces, two server processes - collide, and stopping one would kill the
39
+ // other. The nonce makes each launch its own identity.
40
+ export function makeWindowsTerminalTitle(now = new Date()) {
41
+ const pad = (n) => String(n).padStart(2, "0");
42
+ const stamp = `${now.getFullYear()}-${pad(now.getMonth() + 1)}-${pad(now.getDate())} ` +
43
+ `${pad(now.getHours())}-${pad(now.getMinutes())}-${pad(now.getSeconds())}`;
44
+ const nonce = randomBytes(4).toString("hex");
45
+ return `${WINDOWS_TERMINAL_TITLE_PREFIX} ${stamp} ${nonce}`;
46
+ }
47
+ // buildWindowsTerminalArgs assembles the `cmd` arguments that open the titled
48
+ // window. Split out from openProxyTerminal so the shape can be asserted without
49
+ // spawning anything - the title silently going missing here is exactly the
50
+ // regression the title-based cleanup cannot survive.
51
+ export function buildWindowsTerminalArgs(title) {
52
+ // `start` reads its first *quoted* argument as the window title. libuv quotes
53
+ // an argument containing whitespace (also an empty one, or one containing a
54
+ // double quote), and the title always has spaces, so cmd receives
55
+ // `start "Skyramp Trace Collection ..." cmd /k <script>`. A title without
56
+ // spaces would arrive unquoted and `start` would treat it as the command to
57
+ // run, so the spaces are load-bearing.
58
+ //
59
+ // This holds only while the spawn passes no `shell` option: `shell: true`
60
+ // resolving to cmd.exe forces windowsVerbatimArguments, which would skip the
61
+ // quoting and silently un-title the window. No unit test on this array can
62
+ // catch that, so do not add a shell option to the launch without revisiting.
63
+ return ["/c", "start", title, "cmd", "/k"];
64
+ }
19
65
  function getTerminalConfig() {
20
66
  const platform = os.platform();
21
67
  switch (platform) {
22
68
  case "win32":
23
69
  return {
24
70
  command: "cmd",
25
- args: ["/c", "start", "cmd", "/k"],
71
+ // Never used: openProxyTerminal replaces args wholesale on win32 with
72
+ // buildWindowsTerminalArgs(title), which is the only source of truth.
73
+ // Editing this array changes nothing. Kept only to satisfy the type.
74
+ args: [],
26
75
  scriptExtension: ".bat",
27
76
  scriptHeader: "@echo off",
28
- pidCommand: "echo %$",
77
+ // Unused on Windows: cmd.exe cannot report its own PID, so the script
78
+ // writes no PID file and the window is closed by title instead.
79
+ pidCommand: "",
29
80
  };
30
81
  case "darwin":
31
82
  return {
@@ -48,9 +99,11 @@ function getTerminalConfig() {
48
99
  };
49
100
  }
50
101
  }
51
- function createEnvironmentScript(config) {
102
+ function createEnvironmentScript(config, scriptId) {
52
103
  const tempDir = os.tmpdir();
53
- const scriptPath = path.join(tempDir, `skyramp-launch${config.scriptExtension}`);
104
+ // Per-launch filename. With a shared name, the 2s cleanup timer from one
105
+ // launch deletes the next launch's script while its cmd is still reading it.
106
+ const scriptPath = path.join(tempDir, `skyramp-launch-${scriptId}${config.scriptExtension}`);
54
107
  const pidFile = path.join(tempDir, "skyramp-terminal.pid");
55
108
  const infoMessage = os.platform() === "win32"
56
109
  ? "A new terminal has been spawned here by Skyramp to enable trace collection.\\nAsk skyramp agent to stop trace to terminate trace collection and return to where you were.\\nFor more information, visit skyramp.dev/docs."
@@ -61,11 +114,18 @@ function createEnvironmentScript(config) {
61
114
  const setStatements = Object.entries(shellEnvVariables)
62
115
  .map(([key, value]) => `set ${key}=${value}`)
63
116
  .join("\n");
117
+ // Deliberately no trailing `cmd /k`: the window is already launched as
118
+ // `cmd /k <script>`, so it drops to an interactive prompt with these vars
119
+ // applied once the script ends. Starting a second cmd inside the same
120
+ // console would be redundant, and a nested shell appends to the console
121
+ // title - which would move the title out from under the exact-match
122
+ // taskkill filter that closes this window (SKYR-4446).
123
+ //
124
+ // No PID file either: cmd.exe has no variable holding its own process id,
125
+ // so anything echoed would be a literal string.
64
126
  scriptContent = `${config.scriptHeader}
65
127
  ${setStatements}
66
- echo %^%^% > "${pidFile}"
67
- echo ${infoMessage}
68
- cmd /k`;
128
+ echo ${infoMessage}`;
69
129
  }
70
130
  else {
71
131
  // Unix-like script (macOS/Linux)
@@ -155,11 +215,35 @@ async function findAvailableTerminal() {
155
215
  logger.warning("No common Linux terminal found, falling back to xterm");
156
216
  return "xterm";
157
217
  }
218
+ // The launcher hands the script to a console that reads it asynchronously, so
219
+ // the file cannot be removed the moment the launcher exits.
220
+ const SCRIPT_CLEANUP_DELAY_MS = 2000;
221
+ function scheduleScriptCleanup(scriptPath) {
222
+ setTimeout(() => {
223
+ try {
224
+ if (fs.existsSync(scriptPath)) {
225
+ fs.unlinkSync(scriptPath);
226
+ logger.debug("Script file cleaned up", { scriptPath });
227
+ }
228
+ }
229
+ catch (scriptCleanupError) {
230
+ logger.debug("Script cleanup completed with minor issues", {
231
+ error: scriptCleanupError instanceof Error
232
+ ? scriptCleanupError.message
233
+ : String(scriptCleanupError),
234
+ });
235
+ }
236
+ }, SCRIPT_CLEANUP_DELAY_MS);
237
+ }
158
238
  export default async function openProxyTerminal() {
159
239
  logger.info("Starting cross-platform proxy terminal creation", {
160
240
  platform: os.platform(),
161
241
  arch: os.arch(),
162
242
  });
243
+ // Which title this launch owns, so both error paths can tell their own
244
+ // failure from a newer launch's success. Declared out here so the catch
245
+ // below sees it too.
246
+ let launchedTitle;
163
247
  try {
164
248
  const config = getTerminalConfig();
165
249
  // For Linux, try to find an available terminal
@@ -176,7 +260,20 @@ export default async function openProxyTerminal() {
176
260
  }
177
261
  }
178
262
  }
179
- const scriptPath = createEnvironmentScript(config);
263
+ if (os.platform() === "win32") {
264
+ // A title still set here belongs to a window a previous stop failed to
265
+ // close. Overwriting it is how that window's handle is actually lost, so
266
+ // carry it forward rather than let a later stop claim nothing was opened.
267
+ if (windowsTerminalTitle) {
268
+ logger.warning("Previous Windows trace terminal was never closed; its window must be " +
269
+ "closed by hand", { title: windowsTerminalTitle });
270
+ orphanedWindowsTerminalTitles.push(windowsTerminalTitle);
271
+ }
272
+ windowsTerminalTitle = makeWindowsTerminalTitle();
273
+ launchedTitle = windowsTerminalTitle;
274
+ config.args = buildWindowsTerminalArgs(windowsTerminalTitle);
275
+ }
276
+ const scriptPath = createEnvironmentScript(config, randomBytes(4).toString("hex"));
180
277
  const pidFile = path.join(os.tmpdir(), "skyramp-terminal.pid");
181
278
  // Verify script exists before launching terminal
182
279
  if (!fs.existsSync(scriptPath)) {
@@ -217,6 +314,16 @@ export default async function openProxyTerminal() {
217
314
  platform: os.platform(),
218
315
  exitCode: code,
219
316
  });
317
+ // Windows writes no PID file - the script cannot produce one and cleanup
318
+ // works by window title instead - so there is nothing to wait for or read.
319
+ // Skipping the read also stops a stale skyramp-terminal.pid left by an
320
+ // older build from being parsed as this session's terminal. The script
321
+ // still has to be removed, so take that path directly rather than
322
+ // returning past it.
323
+ if (os.platform() === "win32") {
324
+ scheduleScriptCleanup(scriptPath);
325
+ return;
326
+ }
220
327
  // Wait for terminal to write PID and execute script
221
328
  // On macOS, Terminal.app takes longer to start and execute the script
222
329
  const cleanupDelay = os.platform() === "darwin" ? 10000 : 3000;
@@ -283,12 +390,42 @@ export default async function openProxyTerminal() {
283
390
  }
284
391
  }, cleanupDelay);
285
392
  });
393
+ // Node emits "error" both for a failed spawn and for a later kill() that
394
+ // could not deliver its signal. Only the first means no window exists, so
395
+ // track whether the child ever started before treating an error as a
396
+ // non-launch - otherwise a failed kill would clear a live window's title
397
+ // and cleanup would skip taskkill entirely.
398
+ let hasSpawned = false;
399
+ terminalProcess.on("spawn", () => {
400
+ hasSpawned = true;
401
+ });
286
402
  terminalProcess.on("error", (error) => {
287
403
  logger.error("Terminal spawn error", {
288
404
  platform: os.platform(),
289
405
  command: config.command,
290
406
  error: error.message,
291
407
  });
408
+ if (hasSpawned) {
409
+ // The window exists; this is a kill() that could not signal it. Leave
410
+ // the title alone so cleanup still runs taskkill against it.
411
+ return;
412
+ }
413
+ // Pre-spawn failure (ENOENT, permissions): reported here rather than by
414
+ // the synchronous catch below, and no window exists. Keeping the title
415
+ // would have the next stop taskkill a phantom and blame the user for it.
416
+ // Guarded on identity - a newer launch may already own the title.
417
+ if (windowsTerminalTitle === launchedTitle) {
418
+ windowsTerminalTitle = undefined;
419
+ }
420
+ // A displaced title from this same failed launch is not a real window
421
+ // either, so it must not linger in the orphan list.
422
+ if (launchedTitle) {
423
+ const at = orphanedWindowsTerminalTitles.indexOf(launchedTitle);
424
+ if (at !== -1) {
425
+ orphanedWindowsTerminalTitles.splice(at, 1);
426
+ }
427
+ }
428
+ scheduleScriptCleanup(scriptPath);
292
429
  });
293
430
  logger.info("Cross-platform proxy terminal opened successfully", {
294
431
  platform: os.platform(),
@@ -296,6 +433,13 @@ export default async function openProxyTerminal() {
296
433
  });
297
434
  }
298
435
  catch (error) {
436
+ // The title is claimed before the script is written and before spawn can
437
+ // fail. Holding on to it after a failed launch would have a later stop
438
+ // taskkill a window that was never opened and tell the user to close it.
439
+ // Same ownership guard as the async error handler above.
440
+ if (windowsTerminalTitle === launchedTitle) {
441
+ windowsTerminalTitle = undefined;
442
+ }
299
443
  logger.error("Failed to open proxy terminal", {
300
444
  platform: os.platform(),
301
445
  error: error instanceof Error ? error.message : String(error),
@@ -303,17 +447,193 @@ export default async function openProxyTerminal() {
303
447
  throw error;
304
448
  }
305
449
  }
306
- export async function closeProxyTerminal() {
450
+ // `cmd /c start` returns as soon as it has handed the window off, so the new
451
+ // console can still be registering its title when a quick stop arrives. A
452
+ // single taskkill would miss it and the window would be orphaned, so poll
453
+ // briefly rather than give up on the first miss.
454
+ const WINDOWS_CLOSE_TIMEOUT_MS = 5000;
455
+ const WINDOWS_CLOSE_POLL_MS = 250;
456
+ // Neither taskkill's text nor its exit code is trustworthy on its own: the exit
457
+ // code for an unmatched filter is undocumented, and the whole message including
458
+ // the SUCCESS: token is localised. So SUCCESS: is a fast path for the English
459
+ // case only, and windowsTerminalIsGone below is the authority.
460
+ const TASKKILL_SUCCESS = /\bSUCCESS:/i;
461
+ // tasklist prints one row per match - image name, then PID - and a single
462
+ // informational line when nothing matches. The prose is localised; the row
463
+ // shape is not, so an "<image> <pid>" row is the locale-independent signal.
464
+ const TASKLIST_ROW = /^\s*\S+\s+\d+\s/m;
465
+ async function windowsTerminalIsGone(title) {
466
+ try {
467
+ const { stdout } = await execAsync(`tasklist /FI "WINDOWTITLE eq ${title}*" /NH`);
468
+ return !TASKLIST_ROW.test(stdout);
469
+ }
470
+ catch {
471
+ // tasklist unavailable: fall back to believing the taskkill output.
472
+ return false;
473
+ }
474
+ }
475
+ // Orphans are windows an earlier stop could not close and a later launch then
476
+ // displaced. Every stop has another go at them and drops the ones that are no
477
+ // longer there, so the list cannot grow without bound and a window the user
478
+ // closed by hand stops being reported. One attempt each, no polling: these are
479
+ // old windows, so the start-up race the current window can lose does not apply.
480
+ //
481
+ // A hard failure (taskkill missing, access denied) keeps the entry: that is the
482
+ // case where the window really may still be open.
483
+ async function retryOrphanedWindowsTerminals() {
484
+ if (orphanedWindowsTerminalTitles.length === 0) {
485
+ return;
486
+ }
487
+ const survivors = [];
488
+ for (const title of [...orphanedWindowsTerminalTitles]) {
489
+ try {
490
+ const { stdout, stderr } = await execAsync(`taskkill /FI "WINDOWTITLE eq ${title}*" /T /F`);
491
+ const output = `${stdout}${stderr}`.trim();
492
+ if (TASKKILL_SUCCESS.test(output)) {
493
+ logger.info("Closed a previously orphaned Windows terminal", { title });
494
+ }
495
+ else if (await windowsTerminalIsGone(title)) {
496
+ // The user closed it, or it died with its parent.
497
+ logger.debug("Orphaned Windows terminal is already gone", { title });
498
+ }
499
+ else {
500
+ survivors.push(title);
501
+ }
502
+ }
503
+ catch (err) {
504
+ const failure = err;
505
+ const output = `${failure?.stdout ?? ""}${failure?.stderr ?? ""}`.trim();
506
+ // A rejection is not proof the window is still there - see
507
+ // windowsTerminalIsGone. Ask tasklist rather than read the exit code.
508
+ if (TASKKILL_SUCCESS.test(output) ||
509
+ (await windowsTerminalIsGone(title))) {
510
+ logger.info("Previously orphaned Windows terminal is gone", { title });
511
+ }
512
+ else {
513
+ survivors.push(title);
514
+ logger.warning("Could not close a previously orphaned terminal", {
515
+ title,
516
+ error: output || (err instanceof Error ? err.message : String(err)),
517
+ });
518
+ }
519
+ }
520
+ }
521
+ orphanedWindowsTerminalTitles.length = 0;
522
+ orphanedWindowsTerminalTitles.push(...survivors);
523
+ }
524
+ async function closeWindowsTerminal(opts = {}) {
525
+ const timeoutMs = opts.timeoutMs ?? WINDOWS_CLOSE_TIMEOUT_MS;
526
+ const pollMs = opts.pollMs ?? WINDOWS_CLOSE_POLL_MS;
527
+ await retryOrphanedWindowsTerminals();
528
+ if (!windowsTerminalTitle) {
529
+ // Two ways to arrive here: nothing was opened (start failed, or stop ran
530
+ // twice), or earlier windows were opened and displaced. Only the second
531
+ // leaves anything on screen, so only it is worth telling the user about.
532
+ const orphans = [...orphanedWindowsTerminalTitles];
533
+ const reason = orphans.length
534
+ ? `${orphans.length} earlier trace terminal(s) were opened and could not be closed`
535
+ : "no trace terminal was opened by this server process";
536
+ logger.warning(`Skipping Windows terminal closure - ${reason}`, {
537
+ orphanedTitles: orphans,
538
+ });
539
+ return { closed: orphans.length === 0, reason, orphanedTitles: orphans };
540
+ }
541
+ const deadline = Date.now() + timeoutMs;
542
+ const title = windowsTerminalTitle;
543
+ let lastOutput = "";
544
+ for (;;) {
545
+ try {
546
+ // The trailing `*` is defensive: the filter is otherwise exact, and
547
+ // anything appending to the console title would put the window out of
548
+ // reach. The nonce is at the end of the title, so it survives it.
549
+ const { stdout, stderr } = await execAsync(`taskkill /FI "WINDOWTITLE eq ${title}*" /T /F`);
550
+ lastOutput = `${stdout}${stderr}`.trim();
551
+ if (TASKKILL_SUCCESS.test(lastOutput) ||
552
+ (await windowsTerminalIsGone(title))) {
553
+ logger.info("Windows terminal closed via window-title filter", {
554
+ title,
555
+ output: lastOutput,
556
+ });
557
+ // This window is gone, so its title is no longer a handle to anything
558
+ // and must not survive into the next stop. Cleared here rather than in
559
+ // closeProxyTerminal because this is the only place that knows the kill
560
+ // was confirmed - `closed` below is false whenever an earlier orphan is
561
+ // still outstanding, even though this window died.
562
+ //
563
+ // By identity: this path has awaited (see the same guard on the error
564
+ // paths), so a newer start may own the title by now.
565
+ if (windowsTerminalTitle === title) {
566
+ windowsTerminalTitle = undefined;
567
+ }
568
+ // A success here says nothing about windows displaced earlier; those
569
+ // are still on screen and still the user's to close.
570
+ // No `title` on success, deliberately: callers read `title` as "this
571
+ // window is still open". Returning the one just killed would have the
572
+ // stop tool tell the user to close an already-terminated window
573
+ // whenever an older orphan kept `closed` false.
574
+ return {
575
+ closed: orphanedWindowsTerminalTitles.length === 0,
576
+ orphanedTitles: [...orphanedWindowsTerminalTitles],
577
+ };
578
+ }
579
+ // No match yet - either the window has not registered its title, or it is
580
+ // already gone. Both look the same here, so keep polling until the
581
+ // deadline and let the caller report the ambiguity.
582
+ }
583
+ catch (err) {
584
+ // A rejection is not proof of failure: taskkill can kill the titled root
585
+ // and still exit non-zero because a descendant could not be killed, and
586
+ // execAsync rejects on any non-zero exit. The rejection carries the same
587
+ // stdout/stderr, so test it before believing the exit code.
588
+ const failure = err;
589
+ const output = `${failure?.stdout ?? ""}${failure?.stderr ?? ""}`.trim();
590
+ lastOutput =
591
+ output ||
592
+ (err instanceof Error ? err.message : String(err ?? "unknown error"));
593
+ if (TASKKILL_SUCCESS.test(lastOutput) ||
594
+ (await windowsTerminalIsGone(title))) {
595
+ logger.info("Windows terminal closed via window-title filter (taskkill exited non-zero)", { title, output: lastOutput });
596
+ if (windowsTerminalTitle === title) {
597
+ windowsTerminalTitle = undefined;
598
+ }
599
+ return {
600
+ closed: orphanedWindowsTerminalTitles.length === 0,
601
+ orphanedTitles: [...orphanedWindowsTerminalTitles],
602
+ };
603
+ }
604
+ }
605
+ if (Date.now() >= deadline) {
606
+ break;
607
+ }
608
+ await new Promise((resolve) => setTimeout(resolve, pollMs));
609
+ }
610
+ const reason = `taskkill matched no window titled "${title}" within ` +
611
+ `${timeoutMs}ms` +
612
+ (lastOutput ? `: ${lastOutput}` : "");
613
+ logger.warning("Could not close Windows terminal", { title, lastOutput });
614
+ return {
615
+ closed: false,
616
+ title,
617
+ reason,
618
+ orphanedTitles: [...orphanedWindowsTerminalTitles],
619
+ };
620
+ }
621
+ export async function closeProxyTerminal(opts = {}) {
307
622
  logger.info("Starting cross-platform proxy terminal closure", {
308
623
  platform: os.platform(),
309
624
  });
625
+ let result = { closed: true };
310
626
  // Kill the spawn process if it exists
311
627
  if (terminalProcess) {
312
628
  const killResult = terminalProcess.kill();
313
629
  logger.debug("Terminal spawn process kill result", { killResult });
314
630
  }
315
- // Handle platform-specific terminal closing
316
- if (terminalPID) {
631
+ // Handle platform-specific terminal closing. Windows is handled first and
632
+ // without a PID: it never captures one (see closeWindowsTerminal).
633
+ if (os.platform() === "win32") {
634
+ result = await closeWindowsTerminal(opts);
635
+ }
636
+ else if (terminalPID) {
317
637
  try {
318
638
  const platform = os.platform();
319
639
  if (platform === "darwin") {
@@ -360,13 +680,6 @@ export async function closeProxyTerminal() {
360
680
  logger.info("macOS terminal closed via AppleScript fallback");
361
681
  }
362
682
  }
363
- else if (platform === "win32") {
364
- // Windows: Use taskkill with /T flag to kill process tree
365
- await execAsync(`taskkill /PID ${terminalPID} /T /F`);
366
- logger.info("Windows terminal and children closed via taskkill", {
367
- terminalPID,
368
- });
369
- }
370
683
  else {
371
684
  // Linux: Send SIGTERM to process group
372
685
  try {
@@ -411,20 +724,32 @@ export async function closeProxyTerminal() {
411
724
  }
412
725
  }
413
726
  catch (err) {
727
+ const reason = err instanceof Error ? err.message : String(err ?? "unknown error");
414
728
  logger.warning("Error during platform-specific terminal closure", {
415
729
  platform: os.platform(),
416
730
  terminalPID,
417
- error: err instanceof Error ? err.message : String(err),
731
+ error: reason,
418
732
  });
733
+ result = { closed: false, reason };
419
734
  }
420
735
  }
421
736
  else {
422
- logger.warning("No terminal PID available for cleanup - terminal may not have been properly tracked");
737
+ // Unix captures a real shell PID from the script; its absence means the
738
+ // terminal was never tracked, so nothing was closed. Say so rather than let
739
+ // the default {closed: true} report a cleanup that did not happen.
740
+ const reason = "no terminal PID was captured, so the terminal could not be closed";
741
+ logger.warning(`${reason} - it may not have been properly tracked`);
742
+ result = { closed: false, reason };
423
743
  }
424
- // Reset state
744
+ // Reset state.
425
745
  terminalProcess = undefined;
426
746
  terminalPID = undefined;
747
+ // Nothing to reset for the title here: only the win32 path ever sets it, and
748
+ // closeWindowsTerminal clears it on a confirmed kill so a failed close keeps
749
+ // the handle for a retried stop.
427
750
  logger.info("Cross-platform proxy terminal closure completed", {
428
751
  platform: os.platform(),
752
+ closed: result.closed,
429
753
  });
754
+ return result;
430
755
  }
@@ -6,7 +6,7 @@ import { z } from "zod";
6
6
  *
7
7
  * Bare filename only: no path separators, and no commas or whitespace, because the
8
8
  * list is joined with commas into `SKYRAMP_UPDATE_SNAPSHOTS` and split again in the
9
- * executor, where `a,b.png` would read as two baselines. One definition shared by
9
+ * test runtime, where `a,b.png` would read as two baselines. One definition shared by
10
10
  * both tools so they can never drift apart.
11
11
  */
12
12
  export declare const REBASELINE_SNAPSHOT_NAME_RE: RegExp;
@@ -7,7 +7,7 @@ import { z } from "zod";
7
7
  *
8
8
  * Bare filename only: no path separators, and no commas or whitespace, because the
9
9
  * list is joined with commas into `SKYRAMP_UPDATE_SNAPSHOTS` and split again in the
10
- * executor, where `a,b.png` would read as two baselines. One definition shared by
10
+ * test runtime, where `a,b.png` would read as two baselines. One definition shared by
11
11
  * both tools so they can never drift apart.
12
12
  */
13
13
  export const REBASELINE_SNAPSHOT_NAME_RE = /^[^/\\,\s]+\.png$/i;
@@ -22,21 +22,11 @@ export function baselineStem(name) {
22
22
  return path.basename(name).replace(/\.png$/i, "");
23
23
  }
24
24
  /**
25
- * Playwright's default snapshot layout, which is what the executor produces: the
26
- * baseline for `<stem>.png` lives in `<spec>-snapshots/` as `<stem>-<project>-<platform>.png`
27
- * (or `<stem>-<platform>.png` with no project, or `<stem>.png` under a custom
28
- * `snapshotPathTemplate`). Safe to assume here because TestExecutionService mounts
29
- * its own generated Playwright config over any the repo carries, so a repo cannot
30
- * relocate its snapshots out from under this rule.
31
- *
32
- * The executor's generated config declares no `projects`, but runner.sh passes
33
- * `--browser=chromium`, so Playwright names the implicit project "chromium" and a
34
- * refresh writes `<stem>-chromium-linux.png` (observed end to end on demoshop).
35
- * Baselines the Skyramp executor produced therefore round-trip exactly. A baseline
36
- * a repo's own CI wrote under another project name (`<stem>-Desktop-Chrome-linux.png`)
37
- * is a different file: the executor's refresh adds its own and leaves that one as
38
- * it was — the tool reports what it rewrote, and the repo's own suite is out of
39
- * scope for skyramp_execute_test (which never runs it).
25
+ * Playwright's default snapshot layout: the baseline for `<stem>.png` lives in
26
+ * `<spec>-snapshots/` as `<stem>-<project>-<platform>.png` (or `<stem>-<platform>.png`
27
+ * with no project, or `<stem>.png` under a custom `snapshotPathTemplate`). A repo
28
+ * config that sets another `snapshotPathTemplate` moves its baselines out from under
29
+ * this rule; the tool then reports them as not refreshed rather than claim a refresh.
40
30
  *
41
31
  * Anchored so a longer baseline cannot vouch for a shorter one: `page-001-wide-chromium-linux.png`
42
32
  * belongs to `page-001-wide.png` and must not satisfy a claim on `page-001.png`.
@@ -26,7 +26,7 @@
26
26
  * Every skip is logged at debug with its reason so a missing guard is diagnosable.
27
27
  */
28
28
  import * as fs from "fs";
29
- import { extractAddedAttributeValues, extractAttributeChanges } from "./frontendSelectors.js";
29
+ import { extractAddedAttributeValues, extractAttributeChanges, } from "./frontendSelectors.js";
30
30
  import { escapeRegExp } from "./regex.js";
31
31
  import { logger } from "./logger.js";
32
32
  function defaultReadFile(absPath) {
@@ -46,7 +46,8 @@ export function isEnforcedReportLanguage(language) {
46
46
  * ultimately caller-supplied, and a name lookup must never throw. */
47
47
  export function reportLanguageDisplayName(language) {
48
48
  try {
49
- return new Intl.DisplayNames(["en"], { type: "language" }).of(language) ?? language;
49
+ return (new Intl.DisplayNames(["en"], { type: "language" }).of(language) ??
50
+ language);
50
51
  }
51
52
  catch {
52
53
  return language;
@@ -58,11 +59,36 @@ const UNTRANSLATED_WORDS = new Set([
58
59
  // Exact enum values only. NOT "passed"/"failed" — those are ordinary English
59
60
  // prose and are exactly what leaks in pytest summaries ("1 passed in 0.88s",
60
61
  // "failed: count was 13"; see letsramp/api-insight#215).
61
- "pass", "fail", "skipped", "error", "unknown",
62
- "critical", "high", "medium", "low",
63
- "get", "post", "put", "patch", "delete", "head", "options",
64
- "ui", "e2e", "api", "contract", "integration", "smoke", "fuzz", "load", "mock",
65
- "http", "https", "json", "yaml", "ok",
62
+ "pass",
63
+ "fail",
64
+ "skipped",
65
+ "error",
66
+ "unknown",
67
+ "critical",
68
+ "high",
69
+ "medium",
70
+ "low",
71
+ "get",
72
+ "post",
73
+ "put",
74
+ "patch",
75
+ "delete",
76
+ "head",
77
+ "options",
78
+ "ui",
79
+ "e2e",
80
+ "api",
81
+ "contract",
82
+ "integration",
83
+ "smoke",
84
+ "fuzz",
85
+ "load",
86
+ "mock",
87
+ "http",
88
+ "https",
89
+ "json",
90
+ "yaml",
91
+ "ok",
66
92
  ]);
67
93
  /** A field must contain at least this many plain English prose words (after the
68
94
  * stripping below) to be flagged — so identifier-and-timing-only details like
@@ -81,7 +107,9 @@ function countProseWords(text, script) {
81
107
  const withoutCode = text.replace(/`[^`]*`/g, " ");
82
108
  let proseWords = 0;
83
109
  for (const raw of withoutCode.split(/\s+/)) {
84
- const token = raw.replace(/^[^A-Za-z0-9]+/, "").replace(/[^A-Za-z0-9]+$/, "");
110
+ const token = raw
111
+ .replace(/^[^A-Za-z0-9]+/, "")
112
+ .replace(/[^A-Za-z0-9]+$/, "");
85
113
  // Pure alphabetic words only: anything with digits or interior punctuation
86
114
  // (paths, file names, snake_case, versions, "10.8s") is not prose.
87
115
  if (token.length < 2 || !/^[A-Za-z]+$/.test(token))
@@ -38,14 +38,18 @@ export interface UnchangedFileClaimsInput {
38
38
  newTests: {
39
39
  testId?: string;
40
40
  fileName?: string;
41
- repository?: string;
41
+ repository: string;
42
42
  }[];
43
43
  /** Maintenance verdicts (server-derived from skyramp_actions). `pomFile`, when set, is
44
44
  * the file the edit actually lands in — see the UPDATE rule below. */
45
45
  verdicts: Pick<MaintenanceActionCore, "action" | "testFilePath" | "pomFile" | "rebaselineSnapshots" | "rebaselineOnly">[];
46
46
  /** owner/repo of the primary repo — used to exempt cross-repo newTest claims
47
47
  * whose files live in a different checkout. */
48
- primaryRepository?: string;
48
+ primaryRepository: string;
49
+ /** Every owner/repo this run analyzed, the primary included. A newTest claim
50
+ * attributed outside this set names no checkout at all, so exempting it would
51
+ * let an uncreated test ship behind a typo. */
52
+ knownRepositories: string[];
49
53
  /** SKYR-4250: a plan-only eval run generates nothing — `newTestsCreated`
50
54
  * declares the approved GENERATE list — so no declaration can be backed by
51
55
  * a working-tree change. Exempts the declaration half only; a maintenance
@@ -81,17 +85,19 @@ export interface UnchangedFileClaimsInput {
81
85
  * - DELETE verdicts — applied deterministically by the delivery step, not
82
86
  * necessarily reflected in the tree at report time.
83
87
  * - IGNORE / VERIFY verdicts — assert that NO edit was needed.
84
- * - Claims for files outside this checkout (cross-repo `repository`, or an
85
- * absolute path resolving outside `repoRoot`) a different checkout owns them.
88
+ * - Claims for files outside this checkout (a `repository` naming another
89
+ * checkout THIS RUN ANALYZED, or an absolute path resolving outside
90
+ * `repoRoot`) — a different checkout owns them. A name the run does not know
91
+ * owns nothing, so it is reported rather than exempted.
86
92
  */
87
93
  export declare function findUnchangedFileClaims(input: UnchangedFileClaimsInput): string[];
88
94
  /** One checkout of the run, and the owner/repo it holds. */
89
95
  export interface RepoCheckout {
90
96
  /** Absolute checkout path. */
91
97
  root: string;
92
- /** owner/repo of this checkout, when the run recorded one. Undefined means the
93
- * checkout cannot be named, so nothing resolved in it can be attributed. */
94
- repository?: string;
98
+ /** owner/repo of this checkout. The primary takes it from the root metadata,
99
+ * a related repo from its own section key. */
100
+ repository: string;
95
101
  /** True for the run's primary checkout — the repo an entry with no `repository`
96
102
  * already means downstream, so its citations are never stamped. */
97
103
  primary?: boolean;
@@ -105,7 +111,7 @@ export interface SourceCitationInput {
105
111
  issues: {
106
112
  sourceFile?: string;
107
113
  sourceSymbol?: string;
108
- repository?: string;
114
+ repository: string;
109
115
  }[];
110
116
  }
111
117
  export interface SourceCitationCheck {