@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,36 +1,34 @@
1
- import { ScenarioStep } from "../types/RepositoryAnalysis.js";
2
- import { PlannedTest } from "./types.js";
1
+ import { PlannedStep, PlannedTest } from "./types.js";
3
2
  export declare const HTTP_METHODS: ReadonlySet<string>;
4
3
  /** Whether the planned test carries a `ui` or `e2e` label. The label alone exempts
5
4
  * nothing (see `isUICandidate`); the schema reads it alone only for a planned test
6
5
  * with no steps to look at. */
7
6
  export declare function hasUITestTypeLabel(rawTestType: unknown): boolean;
8
7
  /** Whether a step is an HTTP call: a real request method AND a path, since a verb
9
- * with no path names no route. `interactionType` is deliberately not consulted —
10
- * it labels what a step exercises, not how it reaches the app. Applied PER STEP. */
11
- export declare function isHTTPStep(step: ScenarioStep | undefined): boolean;
8
+ * with no path names no route. Applied PER STEP. */
9
+ export declare function isHTTPStep(step: PlannedStep | undefined): boolean;
12
10
  /** Whether a step calls the app rather than driving a screen: anything with a
13
11
  * target whose method is not a page interaction, so an HTTP request and an
14
12
  * `OPERATION` both count. The page interactions are the closed set. */
15
- export declare function isCallStep(step: ScenarioStep | undefined): boolean;
13
+ export declare function isCallStep(step: PlannedStep | undefined): boolean;
16
14
  /** Whether a planned test is exempt from the route checks. A UI test's endpoints are
17
15
  * attributions the agent wrote, not what it asserts. THE LABEL DECIDES: inferring
18
16
  * from method names read a fixed list of HTTP verbs, so a GraphQL or Thrift call
19
17
  * looked like a browser click. Every verifier reads this one function. */
20
18
  export declare function isUIPlannedTest(plannedTest: PlannedTest): boolean;
21
19
  /** Every step that calls the app rather than driving a screen. */
22
- export declare function callSteps(plannedTest: PlannedTest): ScenarioStep[];
20
+ export declare function callSteps(plannedTest: PlannedTest): PlannedStep[];
23
21
  /** The step a planned test's test is about: the one `stepUnderTest` names, or the only
24
22
  * call the planned test makes. A planned test that makes several calls and names none
25
23
  * has NO subject — the agent states it and the server asks when it is missing,
26
24
  * rather than ranking write methods and path prefixes to guess. A `stepUnderTest`
27
25
  * matching no call is undefined too: the declaration is wrong, not a hint. */
28
- export declare function subjectStep(plannedTest: PlannedTest): ScenarioStep | undefined;
26
+ export declare function subjectStep(plannedTest: PlannedTest): PlannedStep | undefined;
29
27
  /** One step's route as a single key, `METHOD path`. The method is trimmed and
30
28
  * upper-cased, because a method is case-insensitive by protocol; the PATH is
31
29
  * compared AS WRITTEN, so two spellings of one route stay two routes. A step
32
30
  * with no path names no route and gets no key. */
33
- export declare function stepRouteKey(step: ScenarioStep | undefined): string | undefined;
31
+ export declare function stepRouteKey(step: PlannedStep | undefined): string | undefined;
34
32
  /** One step's route as `METHOD path` with every record id folded to `{id}`.
35
33
  *
36
34
  * The state test asks whether the PLAN covers a route, and the id a step happened
@@ -39,4 +37,4 @@ export declare function stepRouteKey(step: ScenarioStep | undefined): string | u
39
37
  * close one by renumbering (run 33988304641, LB03). `stepRouteKey` keeps the path
40
38
  * as written because `statedDifference` asks the opposite question — whether two
41
39
  * planned tests test the same thing — and there two spellings must stay two. */
42
- export declare function stateRouteKey(step: ScenarioStep | undefined): string | undefined;
40
+ export declare function stateRouteKey(step: PlannedStep | undefined): string | undefined;
@@ -6,38 +6,35 @@ export const HTTP_METHODS = new Set(HTTP_STEP_METHODS);
6
6
  export function hasUITestTypeLabel(rawTestType) {
7
7
  // Trimmed as well as lower-cased: without the trim `"ui "` was checked and
8
8
  // `"UI"` was not, so one trailing space decided which of three verifiers ran.
9
- const testType = String(rawTestType ?? "").trim().toLowerCase();
9
+ const testType = String(rawTestType ?? "")
10
+ .trim()
11
+ .toLowerCase();
10
12
  return testType === "ui" || testType === "e2e";
11
13
  }
12
14
  /** Whether a step is an HTTP call: a real request method AND a path, since a verb
13
- * with no path names no route. `interactionType` is deliberately not consulted —
14
- * it labels what a step exercises, not how it reaches the app. Applied PER STEP. */
15
+ * with no path names no route. Applied PER STEP. */
15
16
  export function isHTTPStep(step) {
16
- const method = String(step?.method ?? "").trim().toUpperCase();
17
+ const method = String(step?.method ?? "")
18
+ .trim()
19
+ .toUpperCase();
17
20
  return HTTP_METHODS.has(method) && String(step?.path ?? "").trim().length > 0;
18
21
  }
19
22
  /** Whether a step calls the app rather than driving a screen: anything with a
20
23
  * target whose method is not a page interaction, so an HTTP request and an
21
24
  * `OPERATION` both count. The page interactions are the closed set. */
22
25
  export function isCallStep(step) {
23
- return !isUiStepVerb(step?.method) && String(step?.path ?? "").trim().length > 0;
26
+ return (!isUiStepVerb(step?.method) && String(step?.path ?? "").trim().length > 0);
24
27
  }
25
28
  /** Whether a planned test is exempt from the route checks. A UI test's endpoints are
26
29
  * attributions the agent wrote, not what it asserts. THE LABEL DECIDES: inferring
27
30
  * from method names read a fixed list of HTTP verbs, so a GraphQL or Thrift call
28
31
  * looked like a browser click. Every verifier reads this one function. */
29
32
  export function isUIPlannedTest(plannedTest) {
30
- // A null entry in `plannedTests` reaches here on the second, unvalidated
31
- // caller the schema does not cover. Without this guard `planned test.scenario`
32
- // throws, and `runVerifier` turns that throw into an acknowledgeable
33
- // "crashed" objection — which hides the real objection instead of raising it.
34
- if (!plannedTest)
35
- return false;
36
- return hasUITestTypeLabel(plannedTest.scenario?.testType);
33
+ return hasUITestTypeLabel(plannedTest.scenario.testType);
37
34
  }
38
35
  /** Every step that calls the app rather than driving a screen. */
39
36
  export function callSteps(plannedTest) {
40
- return (plannedTest?.scenario?.steps ?? []).filter((step) => isCallStep(step));
37
+ return plannedTest.scenario.steps.filter((step) => isCallStep(step));
41
38
  }
42
39
  /** The step a planned test's test is about: the one `stepUnderTest` names, or the only
43
40
  * call the planned test makes. A planned test that makes several calls and names none
@@ -46,7 +43,7 @@ export function callSteps(plannedTest) {
46
43
  * matching no call is undefined too: the declaration is wrong, not a hint. */
47
44
  export function subjectStep(plannedTest) {
48
45
  const calls = callSteps(plannedTest);
49
- const declaredOrder = plannedTest?.declarations?.stepUnderTest;
46
+ const declaredOrder = plannedTest.declarations.stepUnderTest;
50
47
  if (typeof declaredOrder === "number")
51
48
  return calls.find((step) => (step.order ?? 0) === declaredOrder);
52
49
  return calls.length === 1 ? calls[0] : undefined;
@@ -59,7 +56,9 @@ export function stepRouteKey(step) {
59
56
  const path = String(step?.path ?? "").trim();
60
57
  if (!path)
61
58
  return undefined;
62
- const method = String(step?.method ?? "ANY").trim().toUpperCase() || "ANY";
59
+ const method = String(step?.method ?? "ANY")
60
+ .trim()
61
+ .toUpperCase() || "ANY";
63
62
  return `${method} ${path}`;
64
63
  }
65
64
  /** A segment that identifies one record rather than naming part of the route: all
@@ -77,7 +76,9 @@ export function stateRouteKey(step) {
77
76
  const path = String(step?.path ?? "").trim();
78
77
  if (!path)
79
78
  return undefined;
80
- const method = String(step?.method ?? "ANY").trim().toUpperCase() || "ANY";
79
+ const method = String(step?.method ?? "ANY")
80
+ .trim()
81
+ .toUpperCase() || "ANY";
81
82
  const folded = path
82
83
  .split("/")
83
84
  .map((segment) => (RECORD_ID_SEGMENT.test(segment) ? "{id}" : segment))
@@ -1,5 +1,42 @@
1
1
  import { ChangedFileName } from "../utils/branchDiff.js";
2
- import { PlanScenario } from "../types/RepositoryAnalysis.js";
2
+ import { ScenarioCategory } from "../types/TestRecommendation.js";
3
+ import { StepMethod } from "../types/StepMethod.js";
4
+ import { TestbotSupportedTestType } from "./../types/TestTypes.js";
5
+ /** The scenario half of a planned test: exactly what `buildRegistration` builds
6
+ * from the schema, and nothing else. It used to be typed as the analysis's own
7
+ * `PlanScenario`, which declares nine required fields where four were never set,
8
+ * so every reader of `priority`, `chainingKeys`, `requiresAuth` or
9
+ * `estimatedComplexity` would have read undefined against a type that promised a
10
+ * value. `steps` is always an array: a ui planned test that names a screen instead
11
+ * of steps carries an empty one, so readers test its length. */
12
+ /** One step a planned test makes, as the plan schema takes it — NOT the
13
+ * analysis's `ScenarioStep`, which requires a `description` and an
14
+ * `expectedStatusCode` that the plan schema leaves optional, and an
15
+ * `interactionType` the plan schema does not take at all. */
16
+ export interface PlannedStep {
17
+ order: number;
18
+ /** An HTTP verb, one of `UI_STEP_VERBS` (`click`, `type`), or `OPERATION` for a
19
+ * call with no verb. The same closed set `stepMethodSchema` emits. */
20
+ method: StepMethod;
21
+ /** The request path for an HTTP step, the interaction's target for a page step
22
+ * (`checkout button`), the operation's name for an `OPERATION` step. So a step
23
+ * is a route only when `isCallStep` says it is: that helper drops the page
24
+ * verbs, and every route check reads it rather than this field. */
25
+ path: string;
26
+ description?: string;
27
+ requestBody?: unknown;
28
+ queryParams?: unknown;
29
+ omits?: string[];
30
+ expectedStatusCode?: number;
31
+ }
32
+ export interface PlannedScenario {
33
+ scenarioName: string;
34
+ description: string;
35
+ category: ScenarioCategory;
36
+ steps: PlannedStep[];
37
+ /** The schema accepts these four and no other. */
38
+ testType: TestbotSupportedTestType;
39
+ }
3
40
  import type { BlueprintCaptureDigest } from "../types/BlueprintDigest.js";
4
41
  import type { RemovedUiElement } from "../utils/removedUiElements.js";
5
42
  /** One element a UI planned test targets. EVERY field is optional and three are
@@ -32,7 +69,7 @@ export interface PlanChange {
32
69
  /** The inputs that prove this change: what a route must accept and what it must
33
70
  * reject. Exactly one of `value` and `absent` per entry. The coverage check reads
34
71
  * it; nothing else on the server does. */
35
- cases?: Array<{
72
+ testCases?: Array<{
36
73
  param: string;
37
74
  value?: string | number | boolean | null;
38
75
  absent?: true;
@@ -116,11 +153,12 @@ export interface PlannedTestDetails {
116
153
  }
117
154
  export interface PlannedTest {
118
155
  plannedTestId: string;
119
- scenario: PlanScenario;
156
+ scenario: PlannedScenario;
120
157
  declarations: PlannedTestDetails;
121
158
  /** Deliberately NOT part of the planned test id: an id stays the same across
122
- * registrations, and a single-repo plan names no repository. */
123
- repository?: string;
159
+ * registrations. Every planned test names one, a single-repository run
160
+ * included — the name is what joins the test to the diff it is checked against. */
161
+ repository: string;
124
162
  }
125
163
  export interface ObjectionAnswer {
126
164
  objectionId: string;
@@ -136,6 +174,9 @@ export interface ObjectionAnswer {
136
174
  * tested by a file I am editing" — without it, `coverage:change:` is unanswerable
137
175
  * for a correct maintenance decision, and it closes only with a `blocker`. */
138
176
  export interface PlanMaintenance {
177
+ /** The `owner/repo` holding the test. Two repositories of a run can hold the same
178
+ * relative path, so the entry says which one it edited. */
179
+ repository: string;
139
180
  /** Repository-relative path of the existing test. Only its presence in the
140
181
  * checkout is checked, the same rule `declarations.existingTests` follows. */
141
182
  file: string;
@@ -143,6 +184,9 @@ export interface PlanMaintenance {
143
184
  differsBy: string;
144
185
  /** The ids of the declared changes this maintenance covers. */
145
186
  changes: string[];
187
+ /** The declared defects this maintained test proves. Always stated, like
188
+ * `changes`: an entry that proves none sends an empty list. */
189
+ defects: string[];
146
190
  }
147
191
  export interface PlanInput {
148
192
  /** The changes the diff makes. Each planned test cites the ones it tests. */
@@ -176,7 +220,8 @@ export interface Objection {
176
220
  /** Facts the verifiers check against. Gathered once per run by the caller. */
177
221
  export interface VerifyContext {
178
222
  /** Every repository this run analyzed, and the files its diff changed there.
179
- * NAMES ONLY, never contents. A single-repository run has one entry. */
223
+ * NAMES ONLY, never contents. A single-repository run has one entry. Every
224
+ * planned test names one of these keys; there is no wildcard. */
180
225
  changedFiles: Record<string, ChangedFileName[]>;
181
226
  /** Repositories with no branch diff. Softens objections RUN-WIDE, because a
182
227
  * planned test that names no repository is checked against every one of them. */
@@ -199,16 +244,21 @@ export interface VerifyContext {
199
244
  title: string;
200
245
  description: string;
201
246
  };
202
- /** Whether a cited path names a file in any of the run's repositories. Injected
203
- * to keep the verifiers filesystem-free. */
204
- citedFileExists(relativePath: string): boolean;
247
+ /** Whether a cited path names a file in the run's repositories. Injected to keep
248
+ * the verifiers filesystem-free. Named a repository it asks that one, and a name
249
+ * this run does not know answers false. Omitted, it asks every one. */
250
+ citedFileExists(relativePath: string, repository?: string): boolean;
205
251
  /** The route patterns that mount a changed frontend file, as the framework
206
252
  * spells them (`/secrets/$envSlug`, `/orders/:id`). Injected for the same
207
253
  * reason as `citedFileExists`: the scan reads the repository, the verifier
208
- * does not. UNDEFINED means the resolver cannot speak for this file an
209
- * unsupported framework, a route table it could not parse and the check
210
- * stays silent. An EMPTY array is a statement: nothing mounts it. */
211
- routesRenderingFile?(relativePath: string): string[] | undefined;
254
+ * does not. ASKED OF ONE REPOSITORY, the one the planned test names: two
255
+ * repositories can hold the same relative file, and answering from whichever
256
+ * was scanned first objected to a test against another repository's routes.
257
+ * UNDEFINED means the resolver cannot speak for this file — an unsupported
258
+ * framework, a route table it could not parse, a repository this run does not
259
+ * know — and the check stays silent. An EMPTY array is a statement: nothing
260
+ * mounts it. */
261
+ routesRenderingFile(relativePath: string, repository: string): string[] | undefined;
212
262
  }
213
263
  /** Every changed file of the run, whatever repository it sits in. */
214
264
  export declare function allChangedFiles(ctx: VerifyContext): ChangedFileName[];
@@ -216,9 +266,13 @@ export interface Verifier {
216
266
  readonly name: string;
217
267
  run(registration: PlanInput, ctx: VerifyContext): Objection[];
218
268
  }
219
- /** The changed files a planned test is checked against: its own repository's when it
220
- * names one this run analyzed, every repository's when it names none. UNDEFINED
221
- * when it names a repository this run does not know, which the caller objects to. */
269
+ /** The changed files a planned test is checked against: its own repository's.
270
+ * UNDEFINED when it names a repository this run does not know, which the caller
271
+ * objects to. Every planned test names one, so there is no names-none case: every
272
+ * run keys its repositories by a real `owner/repo`.
273
+ *
274
+ * The schema trims the name and holds it to the `owner/repo` shape before any
275
+ * verifier runs, so the lookup takes the field as it stands. */
222
276
  export declare function changedFilesFor(ctx: VerifyContext, plannedTest: {
223
- repository?: string;
277
+ repository: string;
224
278
  }): ChangedFileName[] | undefined;
@@ -1,20 +1,14 @@
1
1
  /** Every changed file of the run, whatever repository it sits in. */
2
2
  export function allChangedFiles(ctx) {
3
- return Object.values(ctx?.changedFiles ?? {}).flatMap((files) => files ?? []);
3
+ return Object.values(ctx.changedFiles).flatMap((files) => files ?? []);
4
4
  }
5
- /** The changed files a planned test is checked against: its own repository's when it
6
- * names one this run analyzed, every repository's when it names none. UNDEFINED
7
- * when it names a repository this run does not know, which the caller objects to. */
5
+ /** The changed files a planned test is checked against: its own repository's.
6
+ * UNDEFINED when it names a repository this run does not know, which the caller
7
+ * objects to. Every planned test names one, so there is no names-none case: every
8
+ * run keys its repositories by a real `owner/repo`.
9
+ *
10
+ * The schema trims the name and holds it to the `owner/repo` shape before any
11
+ * verifier runs, so the lookup takes the field as it stands. */
8
12
  export function changedFilesFor(ctx, plannedTest) {
9
- const known = ctx?.changedFiles ?? {};
10
- const repo = String(plannedTest?.repository ?? "").trim();
11
- if (!repo)
12
- return allChangedFiles(ctx);
13
- const own = known[repo];
14
- if (own)
15
- return own;
16
- // Only a MULTI-repository run reads an unmatched name as unknown: a single-repo
17
- // run keys the primary as "the primary repository" when `metadata.repository` is
18
- // absent, which no name the agent writes will ever match.
19
- return Object.keys(known).length > 1 ? undefined : allChangedFiles(ctx);
13
+ return ctx.changedFiles[plannedTest.repository];
20
14
  }
@@ -40,7 +40,7 @@ export declare const CHANGED_FILE_CONTRACT: {
40
40
  };
41
41
  readonly unknownRepository: {
42
42
  readonly message: "This planned test names a repository this run did not analyze.";
43
- readonly suggestion: "Name one of the repositories listed in the evidence, or leave `repository` out on a single-repository run. A name nothing analyzed leaves the planned test with no diff to be checked against.";
43
+ readonly suggestion: "Name one of the repositories listed in the evidence, spelled as the evidence spells it. A name nothing analyzed leaves the planned test with no diff to be checked against.";
44
44
  };
45
45
  readonly screenEvidenceUnrelated: {
46
46
  readonly message: "The file this UI test cites for its screen is not one this pull request changed.";
@@ -176,7 +176,7 @@ export declare const COVERAGE_CONTRACT: {
176
176
  readonly message: "No test in this plan names the state the record is in when {route} mutates it.";
177
177
  readonly suggestion: "Plan one test that puts a record in a stated state — through the API, the UI, or data the app already holds; a record with no rows yet counts — then runs the mutation on it, and name that state as `startState`. If the route can meet a record that is not freshly created, use that state. Only a planned test closes this: there is no answer for it.";
178
178
  };
179
- readonly cases: {
179
+ readonly testCases: {
180
180
  readonly message: "No test for this change sends the declared case {missing}.";
181
181
  readonly suggestion: "Add the missing values to a test that cites this change, or answer in one line why they need no test.";
182
182
  };
@@ -286,7 +286,7 @@ export declare const DEFECTS_CONTRACT: {
286
286
  };
287
287
  readonly untested: {
288
288
  readonly message: "This declared defect has no test in the plan.";
289
- readonly suggestion: "Add a planned test that cites the defect in `defects` and sets `expected.outcome` to `fail`. A defect in a file this pull request touches gets the test whether or not this pull request introduced it. If something stopped this run from writing the test, answer it and set `blocker` to what stopped it.";
289
+ readonly suggestion: "Add a planned test that cites the defect in `defects` and sets `expected.outcome` to `fail`. A defect in a file this pull request touches gets the test whether or not this pull request introduced it. If an existing test already proves it and this run edits that test rather than writing a new one, declare it in `maintains` with the file, what your edit changes, and this defect's id — maintenance is proof, and a duplicate spec beside the one you edited is the mistake. If something stopped this run from writing the test, answer it and set `blocker` to what stopped it.";
290
290
  };
291
291
  readonly expectedPass: {
292
292
  readonly message: "Every test that cites this defect expects to pass, and a test that passes today proves nothing about a defect.";
@@ -296,6 +296,10 @@ export declare const DEFECTS_CONTRACT: {
296
296
  readonly message: "A planned test cites a defect id that this plan does not declare.";
297
297
  readonly suggestion: "Spell the defect's `id` exactly as your own `defects` list gives it — the match is exact apart from surrounding space. Declare the defect if it is missing.";
298
298
  };
299
+ readonly maintainedUnknownDefect: {
300
+ readonly message: "A `maintains` entry cites a defect id that this plan does not declare.";
301
+ readonly suggestion: "Spell the defect's `id` exactly as your own `defects` list gives it — the match is exact apart from surrounding space. Declare the defect if it is missing.";
302
+ };
299
303
  readonly conflictWithoutDefect: {
300
304
  readonly message: "This test reports a requirement conflict and cites no defect.";
301
305
  readonly suggestion: "List the conflict in `defects`: the file and line that contradict the requirement, and a description that quotes the requirement. Cite that id from this test.";
@@ -22,7 +22,7 @@ export const CHANGED_FILE_CONTRACT = {
22
22
  },
23
23
  unknownRepository: {
24
24
  message: "This planned test names a repository this run did not analyze.",
25
- suggestion: "Name one of the repositories listed in the evidence, or leave `repository` out on a single-repository run. A name nothing analyzed leaves the planned test with no diff to be checked against.",
25
+ suggestion: "Name one of the repositories listed in the evidence, spelled as the evidence spells it. A name nothing analyzed leaves the planned test with no diff to be checked against.",
26
26
  },
27
27
  screenEvidenceUnrelated: {
28
28
  message: "The file this UI test cites for its screen is not one this pull request changed.",
@@ -181,7 +181,7 @@ export const COVERAGE_CONTRACT = {
181
181
  // anyway. What a case IS stays the agent's judgment — the field takes any
182
182
  // parameter and any value, so nothing here has to know a kind of input in
183
183
  // advance.
184
- cases: {
184
+ testCases: {
185
185
  message: "No test for this change sends the declared case {missing}.",
186
186
  suggestion: "Add the missing values to a test that cites this change, or answer in one line why they need no test.",
187
187
  },
@@ -347,7 +347,7 @@ export const DEFECTS_CONTRACT = {
347
347
  },
348
348
  untested: {
349
349
  message: "This declared defect has no test in the plan.",
350
- suggestion: "Add a planned test that cites the defect in `defects` and sets `expected.outcome` to `fail`. A defect in a file this pull request touches gets the test whether or not this pull request introduced it. If something stopped this run from writing the test, answer it and set `blocker` to what stopped it.",
350
+ suggestion: "Add a planned test that cites the defect in `defects` and sets `expected.outcome` to `fail`. A defect in a file this pull request touches gets the test whether or not this pull request introduced it. If an existing test already proves it and this run edits that test rather than writing a new one, declare it in `maintains` with the file, what your edit changes, and this defect's id — maintenance is proof, and a duplicate spec beside the one you edited is the mistake. If something stopped this run from writing the test, answer it and set `blocker` to what stopped it.",
351
351
  },
352
352
  expectedPass: {
353
353
  message: "Every test that cites this defect expects to pass, and a test that passes today proves nothing about a defect.",
@@ -357,6 +357,10 @@ export const DEFECTS_CONTRACT = {
357
357
  message: "A planned test cites a defect id that this plan does not declare.",
358
358
  suggestion: "Spell the defect's `id` exactly as your own `defects` list gives it — the match is exact apart from surrounding space. Declare the defect if it is missing.",
359
359
  },
360
+ maintainedUnknownDefect: {
361
+ message: "A `maintains` entry cites a defect id that this plan does not declare.",
362
+ suggestion: "Spell the defect's `id` exactly as your own `defects` list gives it — the match is exact apart from surrounding space. Declare the defect if it is missing.",
363
+ },
360
364
  conflictWithoutDefect: {
361
365
  message: "This test reports a requirement conflict and cites no defect.",
362
366
  suggestion: "List the conflict in `defects`: the file and line that contradict the requirement, and a description that quotes the requirement. Cite that id from this test.",
@@ -369,5 +373,5 @@ export const DEFECTS_CONTRACT = {
369
373
  * than blanked, so a missed key shows up as `{knob}` instead of reading as a gap
370
374
  * in an otherwise ordinary sentence. */
371
375
  export function fillPlaceholders(text, values) {
372
- return text.replace(/\{(\w+)\}/g, (whole, key) => (key in values ? String(values[key]) : whole));
376
+ return text.replace(/\{(\w+)\}/g, (whole, key) => key in values ? String(values[key]) : whole);
373
377
  }
@@ -1,6 +1,6 @@
1
- import { allChangedFiles, changedFilesFor } from "../types.js";
2
- import { CHANGED_FILE_CONTRACT } from "../verifierContracts.js";
3
- import { changedPathSet, normalizeCitedPath, whyNotAChangedFile } from "./citedPath.js";
1
+ import { allChangedFiles, changedFilesFor, } from "../types.js";
2
+ import { CHANGED_FILE_CONTRACT, } from "../verifierContracts.js";
3
+ import { changedPathSet, normalizeCitedPath, whyNotAChangedFile, } from "./citedPath.js";
4
4
  /** Verifier 1. The files a planned test cites for the change it targets are files
5
5
  * this pull request really changed. NAMES ONLY — no diff content is read, so an
6
6
  * irrelevant file inside the diff cannot be caught. SILENT on a run with no
@@ -22,9 +22,9 @@ function describeType(value) {
22
22
  /** One objection, so every branch below reads the same way. */
23
23
  function raise(plannedTest, key, objection, evidence) {
24
24
  return {
25
- objectionId: `changedFile:${key}:${plannedTest?.plannedTestId}`,
25
+ objectionId: `changedFile:${key}:${plannedTest.plannedTestId}`,
26
26
  verifier: "changedFile",
27
- plannedTestId: plannedTest?.plannedTestId,
27
+ plannedTestId: plannedTest.plannedTestId,
28
28
  message: objection.message,
29
29
  evidence,
30
30
  suggestion: objection.suggestion,
@@ -44,7 +44,7 @@ export const changedFile = {
44
44
  // repository.
45
45
  const own = changedFilesFor(ctx, plannedTest);
46
46
  if (own === undefined) {
47
- objections.push(raise(plannedTest, "unknownRepository", CHANGED_FILE_CONTRACT.objections.unknownRepository, `this run analyzed ${Object.keys(ctx.changedFiles ?? {}).join(", ") || "no repository"}, and this planned test names "${String(plannedTest?.repository ?? "").trim()}"`));
47
+ objections.push(raise(plannedTest, "unknownRepository", CHANGED_FILE_CONTRACT.objections.unknownRepository, `this run analyzed ${Object.keys(ctx.changedFiles).join(", ") || "no repository"}, and this planned test names "${plannedTest.repository}"`));
48
48
  continue;
49
49
  }
50
50
  const surfaces = changedPathSet(own, true);
@@ -55,17 +55,15 @@ export const changedFile = {
55
55
  // `screenEvidence.file` has to be a file the diff changed. Independent of
56
56
  // the changed file's own result — a planned test can get both wrong, and each
57
57
  // names its own fix.
58
- const citedScreen = String(plannedTest?.declarations?.screenEvidence?.file ?? "").trim();
58
+ const citedScreen = String(plannedTest.declarations.screenEvidence?.file ?? "").trim();
59
59
  if (citedScreen && !pages.has(normalizeCitedPath(citedScreen))) {
60
- const page = String(plannedTest?.declarations?.elements?.pageUrl ?? "").trim();
60
+ const page = String(plannedTest.declarations.elements?.pageUrl ?? "").trim();
61
61
  objections.push(raise(plannedTest, "screenEvidenceUnrelated", CHANGED_FILE_CONTRACT.objections.screenEvidenceUnrelated, `${pages.size} changed file(s) still in the tree. ${whyNotAChangedFile(citedScreen)}, for ${page ? `the test that opens ${page}` : "a test that names no page"}.`));
62
62
  }
63
- // The declared type holds only on the schema-validated path. A crash here
64
- // ends the run; an objection lets the agent fix the field.
65
- const raw = plannedTest?.declarations?.changedFile;
66
- const cited = typeof raw === "string" ? raw.trim() : "";
63
+ const declared = plannedTest.declarations.changedFile;
64
+ const cited = (declared ?? "").trim();
67
65
  if (!cited) {
68
- objections.push(raise(plannedTest, "notStated", CHANGED_FILE_CONTRACT.objections.notStated, `changedFile is ${describeType(raw)}; ${surfaces.size} file(s) changed in this run and the plan does not say which one this test targets.`));
66
+ objections.push(raise(plannedTest, "notStated", CHANGED_FILE_CONTRACT.objections.notStated, `changedFile is ${describeType(declared)}; ${surfaces.size} file(s) changed in this run and the plan does not say which one this test targets.`));
69
67
  continue;
70
68
  }
71
69
  if (!surfaces.has(normalizeCitedPath(cited))) {
@@ -1,4 +1,12 @@
1
1
  import { ChangedFileName } from "../../utils/branchDiff.js";
2
+ import { PlanMaintenance, VerifyContext } from "../types.js";
3
+ /** Whether a `maintains` entry names a file that stays inside the repository and is
4
+ * present in the repository the entry names.
5
+ *
6
+ * An entry credits its ids only when it is. `coverage:change:` and
7
+ * `defects:untested:` close only with a blocker, so crediting a file nobody can
8
+ * open would route around both. */
9
+ export declare function maintainedFileIsInItsRepository(entry: PlanMaintenance, ctx: VerifyContext): boolean;
2
10
  /** A cited path reduced to the spelling `git diff --name-status` produces: `./`,
3
11
  * backslashes, doubled and trailing slashes fold, and so do git's quoting of a
4
12
  * non-ASCII path and both unicode compositions. Case does NOT fold, and a path
@@ -1,5 +1,15 @@
1
1
  import { unquoteIfQuoted } from "../../utils/branchDiff.js";
2
2
  import { escapesRepo } from "./endpointGrounded.js";
3
+ /** Whether a `maintains` entry names a file that stays inside the repository and is
4
+ * present in the repository the entry names.
5
+ *
6
+ * An entry credits its ids only when it is. `coverage:change:` and
7
+ * `defects:untested:` close only with a blocker, so crediting a file nobody can
8
+ * open would route around both. */
9
+ export function maintainedFileIsInItsRepository(entry, ctx) {
10
+ const path = entry.file.trim();
11
+ return (!!path && !escapesRepo(path) && ctx.citedFileExists(path, entry.repository));
12
+ }
3
13
  /** A cited path reduced to the spelling `git diff --name-status` produces: `./`,
4
14
  * backslashes, doubled and trailing slashes fold, and so do git's quoting of a
5
15
  * non-ASCII path and both unicode compositions. Case does NOT fold, and a path
@@ -7,10 +17,14 @@ import { escapesRepo } from "./endpointGrounded.js";
7
17
  export function normalizeCitedPath(raw) {
8
18
  if (typeof raw !== "string")
9
19
  return "";
10
- const slashed = unquoteIfQuoted(raw.trim()).normalize("NFC").replace(/\\/g, "/");
20
+ const slashed = unquoteIfQuoted(raw.trim())
21
+ .normalize("NFC")
22
+ .replace(/\\/g, "/");
11
23
  if (!slashed || escapesRepo(slashed))
12
24
  return "";
13
- const segments = slashed.split("/").filter((segment) => segment !== "" && segment !== ".");
25
+ const segments = slashed
26
+ .split("/")
27
+ .filter((segment) => segment !== "" && segment !== ".");
14
28
  return segments.join("/");
15
29
  }
16
30
  /** The changed paths a citation can name, in the same normalised spelling.
@@ -2,8 +2,8 @@ import { Verifier } from "../types.js";
2
2
  /** One declared case as the objection spells it.
3
3
  *
4
4
  * Exported: `expectedValueSourced` keys its objections on the same rendering, so
5
- * two cases on one parameter are two objections there too. */
6
- export declare function renderCase(declared: {
5
+ * two test cases on one parameter are two objections there too. */
6
+ export declare function renderTestCase(declared: {
7
7
  param: string;
8
8
  value?: unknown;
9
9
  absent?: true;