@skyramp/mcp 0.4.1 → 0.4.2-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (543) hide show
  1. package/build/adapters/jestAdapter.js +23 -5
  2. package/build/adapters/mochaAdapter.js +7 -1
  3. package/build/adapters/playwrightAdapter.js +3 -1
  4. package/build/adapters/pytestAdapter.js +14 -3
  5. package/build/commands/localDevTestChangesCommand.js +1 -0
  6. package/build/commands/recommendTestsAndExecuteCommand.js +5 -6
  7. package/build/commands/testThisEndpointCommand.js +16 -4
  8. package/build/index.js +34 -4
  9. package/build/playwright/blueprintDigest.js +28 -7
  10. package/build/playwright/registerPlaywrightTools.js +33 -28
  11. package/build/playwright/traceRecordingPrompt.js +9 -2
  12. package/build/prompts/code-reuse.js +95 -29
  13. package/build/prompts/fix-error-prompt.d.ts +9 -1
  14. package/build/prompts/fix-error-prompt.js +31 -28
  15. package/build/prompts/local-dev/local-dev-plan.d.ts +3 -0
  16. package/build/prompts/local-dev/local-dev-plan.js +3 -1
  17. package/build/prompts/local-dev/local-dev-prompts.d.ts +1 -1
  18. package/build/prompts/local-dev/local-dev-prompts.js +30 -3
  19. package/build/prompts/modularization/integration-test-modularization.js +13 -6
  20. package/build/prompts/modularization/ui-test-modularization.js +1 -1
  21. package/build/prompts/personas.js +1 -1
  22. package/build/prompts/pom-aware-code-reuse.js +7 -9
  23. package/build/prompts/reuse-hand-off.d.ts +64 -0
  24. package/build/prompts/reuse-hand-off.js +130 -0
  25. package/build/prompts/shared-helper-policy.d.ts +88 -2
  26. package/build/prompts/shared-helper-policy.js +145 -11
  27. package/build/prompts/sut-setup/modes/adaptWorkflowPrompt.js +1 -1
  28. package/build/prompts/sut-setup/modes/dockerComposePrompt.js +1 -1
  29. package/build/prompts/sut-setup/shared.d.ts +4 -1
  30. package/build/prompts/sut-setup/shared.js +2 -2
  31. package/build/prompts/test-maintenance/actionsInstructions.d.ts +19 -11
  32. package/build/prompts/test-maintenance/actionsInstructions.js +47 -26
  33. package/build/prompts/test-maintenance/drift-analysis-prompt.js +3 -2
  34. package/build/prompts/test-maintenance/driftAnalysisSections.js +5 -3
  35. package/build/prompts/test-maintenance/driftAnalysisShared.js +4 -2
  36. package/build/prompts/test-maintenance/uiDriftAnalysisSections.js +7 -4
  37. package/build/prompts/test-recommendation/recommendationSections.js +19 -8
  38. package/build/prompts/test-recommendation/registerRecommendTestsPrompt.js +5 -2
  39. package/build/prompts/test-recommendation/test-recommendation-prompt.js +10 -7
  40. package/build/prompts/testbot/testbot-prompts.js +123 -55
  41. package/build/recommendation/answers.js +18 -9
  42. package/build/recommendation/pullRequestText.js +1 -1
  43. package/build/recommendation/registerPlan.js +31 -17
  44. package/build/recommendation/subjectStep.d.ts +8 -10
  45. package/build/recommendation/subjectStep.js +17 -16
  46. package/build/recommendation/types.d.ts +71 -17
  47. package/build/recommendation/types.js +9 -15
  48. package/build/recommendation/verifierContracts.d.ts +7 -3
  49. package/build/recommendation/verifierContracts.js +8 -4
  50. package/build/recommendation/verifiers/changedFile.js +11 -13
  51. package/build/recommendation/verifiers/citedPath.d.ts +8 -0
  52. package/build/recommendation/verifiers/citedPath.js +16 -2
  53. package/build/recommendation/verifiers/coverage.d.ts +2 -2
  54. package/build/recommendation/verifiers/coverage.js +190 -134
  55. package/build/recommendation/verifiers/defects.js +56 -16
  56. package/build/recommendation/verifiers/deliveredMatchesPlan.d.ts +7 -1
  57. package/build/recommendation/verifiers/deliveredMatchesPlan.js +28 -14
  58. package/build/recommendation/verifiers/endpointGrounded.js +14 -8
  59. package/build/recommendation/verifiers/existingCoverage.d.ts +6 -0
  60. package/build/recommendation/verifiers/existingCoverage.js +30 -21
  61. package/build/recommendation/verifiers/expectedOutcome.js +17 -8
  62. package/build/recommendation/verifiers/expectedValueSourced.js +54 -43
  63. package/build/recommendation/verifiers/issueTraceability.d.ts +5 -0
  64. package/build/recommendation/verifiers/issueTraceability.js +64 -7
  65. package/build/recommendation/verifiers/removedElementGuarded.js +19 -11
  66. package/build/recommendation/verifiers/reportedCategory.js +9 -4
  67. package/build/recommendation/verifiers/requirementSourced.js +34 -21
  68. package/build/recommendation/verifiers/screenRoute.js +15 -10
  69. package/build/recommendation/verifiers/statedDifference.js +15 -8
  70. package/build/recommendation/verifiers/uiElementGrounded.js +50 -16
  71. package/build/resources/analysisResources.js +7 -3
  72. package/build/resources/progressResource.js +4 -2
  73. package/build/resources/sutSetupResource.js +20 -2
  74. package/build/resources/testbotResource.js +19 -1
  75. package/build/services/AnalyticsService.js +3 -1
  76. package/build/services/ScenarioGenerationService.js +5 -5
  77. package/build/services/TestDiscoveryService.js +21 -5
  78. package/build/services/TestExecutionService.js +63 -21
  79. package/build/services/TestGenerationService.d.ts +1 -1
  80. package/build/services/TestGenerationService.js +43 -24
  81. package/build/skills/enhanceAssertionsSkill.d.ts +45 -0
  82. package/build/skills/enhanceAssertionsSkill.js +103 -0
  83. package/build/skills/fixTestImportErrorsSkill.d.ts +2 -2
  84. package/build/skills/fixTestImportErrorsSkill.js +2 -2
  85. package/build/skills/skillFiles.d.ts +38 -0
  86. package/build/skills/skillFiles.js +94 -0
  87. package/build/skills/validateAssertionAlignmentSkill.d.ts +34 -0
  88. package/build/skills/validateAssertionAlignmentSkill.js +59 -0
  89. package/build/tool-phases.js +4 -0
  90. package/build/tools/auth/loginTool.js +3 -1
  91. package/build/tools/auth/logoutTool.js +3 -1
  92. package/build/tools/code-refactor/alignAssertionsTool.d.ts +2 -0
  93. package/build/tools/code-refactor/alignAssertionsTool.js +51 -0
  94. package/build/tools/code-refactor/assertion-state.d.ts +1 -1
  95. package/build/tools/code-refactor/assertion-state.js +1 -1
  96. package/build/tools/code-refactor/assertionOperations.d.ts +44 -0
  97. package/build/tools/code-refactor/assertionOperations.js +82 -0
  98. package/build/tools/code-refactor/assertionSkillTools.d.ts +3 -0
  99. package/build/tools/code-refactor/assertionSkillTools.js +86 -0
  100. package/build/tools/code-refactor/codeReuseTool.js +27 -3
  101. package/build/tools/code-refactor/enhanceAssertionsTool.js +19 -83
  102. package/build/tools/code-refactor/gate-markers.d.ts +51 -0
  103. package/build/tools/code-refactor/gate-markers.js +95 -0
  104. package/build/tools/code-refactor/retrofit-state.d.ts +3 -1
  105. package/build/tools/code-refactor/retrofit-state.js +44 -2
  106. package/build/tools/code-refactor/reuse-outcome.d.ts +23 -1
  107. package/build/tools/code-refactor/reuse-outcome.js +36 -13
  108. package/build/tools/code-refactor/reuse-state.d.ts +90 -16
  109. package/build/tools/code-refactor/reuse-state.js +191 -61
  110. package/build/tools/code-refactor/utils-verify-gates.d.ts +4 -0
  111. package/build/tools/code-refactor/utils-verify-gates.js +252 -27
  112. package/build/tools/code-refactor/verify-gates.d.ts +15 -1
  113. package/build/tools/code-refactor/verify-gates.js +36 -4
  114. package/build/tools/enrichTestWithMocksTool.d.ts +1 -1
  115. package/build/tools/enrichTestWithMocksTool.js +9 -5
  116. package/build/tools/executeSkyrampTestTool.d.ts +22 -1
  117. package/build/tools/executeSkyrampTestTool.js +571 -271
  118. package/build/tools/execution-video-state.js +1 -1
  119. package/build/tools/fixErrorTool.js +5 -6
  120. package/build/tools/generate-tests/batchMockGenerationTool.js +1 -1
  121. package/build/tools/generate-tests/generateBatchScenarioRestTool.js +114 -73
  122. package/build/tools/generate-tests/generateContractRestTool.js +34 -16
  123. package/build/tools/generate-tests/generateE2ERestTool.d.ts +1 -0
  124. package/build/tools/generate-tests/generateE2ERestTool.js +9 -1
  125. package/build/tools/generate-tests/generateIntegrationRestTool.js +22 -7
  126. package/build/tools/generate-tests/generateMockRestTool.js +3 -1
  127. package/build/tools/generate-tests/generateUIRestTool.d.ts +2 -0
  128. package/build/tools/generate-tests/generateUIRestTool.js +11 -2
  129. package/build/tools/generate-tests/loadTestSchema.js +1 -3
  130. package/build/tools/generate-tests/planGuard.js +6 -3
  131. package/build/tools/generate-tests/scenarioFileIdentity.js +4 -1
  132. package/build/tools/generate-tests/scenarioLint.js +17 -5
  133. package/build/tools/generate-tests/trace-reuse-guard.js +5 -2
  134. package/build/tools/generateEnrichedIntegrationTestTool.js +9 -3
  135. package/build/tools/one-click/oneClickTool.js +3 -1
  136. package/build/tools/preflightMockCheckTool.js +23 -7
  137. package/build/tools/runExistingTestsTool.d.ts +1 -1
  138. package/build/tools/runExistingTestsTool.js +43 -21
  139. package/build/tools/submitReportTool.d.ts +51 -12
  140. package/build/tools/submitReportTool.js +860 -161
  141. package/build/tools/test-management/actionsTool.js +210 -51
  142. package/build/tools/test-management/analyzeChangesTool.d.ts +4 -5
  143. package/build/tools/test-management/analyzeChangesTool.js +127 -68
  144. package/build/tools/test-management/analyzeTestHealthTool.js +35 -13
  145. package/build/tools/test-management/registerTestPlanTool.d.ts +44 -34
  146. package/build/tools/test-management/registerTestPlanTool.js +255 -111
  147. package/build/tools/test-management/resolveScreenTool.js +33 -9
  148. package/build/tools/trace/startTraceCollectionTool.js +3 -1
  149. package/build/tools/trace/stopTraceCollectionTool.js +41 -5
  150. package/build/tools/verifyTestDependenciesTool.d.ts +3 -0
  151. package/build/tools/verifyTestDependenciesTool.js +54 -0
  152. package/build/tools/workspace/initScanWorkspaceTool.js +9 -3
  153. package/build/tools/workspace/initializeWorkspaceTool.js +3 -1
  154. package/build/types/AssertionOutcome.d.ts +1 -1
  155. package/build/types/EnhanceType.d.ts +6 -0
  156. package/build/types/EnhanceType.js +1 -0
  157. package/build/types/ExternalTestExecution.d.ts +2 -2
  158. package/build/types/RepositoryAnalysis.d.ts +0 -40
  159. package/build/types/ReuseOutcome.d.ts +96 -4
  160. package/build/types/ReuseOutcome.js +16 -0
  161. package/build/types/StepMethod.js +20 -6
  162. package/build/types/TestAnalysis.d.ts +10 -2
  163. package/build/types/TestExecution.d.ts +45 -0
  164. package/build/types/TestRecommendation.d.ts +1 -1
  165. package/build/types/TestRecommendation.js +4 -1
  166. package/build/types/TestTypes.d.ts +13 -0
  167. package/build/types/TestTypes.js +34 -3
  168. package/build/types/TestbotPromptOptions.d.ts +9 -1
  169. package/build/types/TestbotReport.d.ts +45 -9
  170. package/build/utils/AnalysisStateManager.d.ts +137 -27
  171. package/build/utils/AnalysisStateManager.js +227 -43
  172. package/build/utils/assertion-verify/api-shared-lints.js +34 -16
  173. package/build/utils/assertion-verify/metrics.js +39 -6
  174. package/build/utils/assertion-verify/ui-lints.js +4 -2
  175. package/build/utils/branchDiff.js +47 -12
  176. package/build/utils/canonicalJson.js +3 -1
  177. package/build/utils/dartRouteExtractor.js +36 -7
  178. package/build/utils/fixAttempts.d.ts +26 -0
  179. package/build/utils/fixAttempts.js +109 -0
  180. package/build/utils/frontendSelectors.js +23 -4
  181. package/build/utils/generatedTestRecord.d.ts +19 -0
  182. package/build/utils/generatedTestRecord.js +61 -0
  183. package/build/utils/gitStaging.js +7 -2
  184. package/build/utils/initAgent.js +26 -6
  185. package/build/utils/language-helper.js +39 -45
  186. package/build/utils/pathMatching.js +2 -1
  187. package/build/utils/pathSignatures.js +6 -2
  188. package/build/utils/planMatchKeys.d.ts +2 -2
  189. package/build/utils/planMatchKeys.js +20 -14
  190. package/build/utils/pom-catalog-parse.js +7 -2
  191. package/build/utils/pom-scope/import-expansion.js +6 -1
  192. package/build/utils/pom-scope/index.js +50 -12
  193. package/build/utils/pom-scope/scoring.js +13 -3
  194. package/build/utils/pom-scope/selector-extractor.js +16 -3
  195. package/build/utils/pom-scope/strip.d.ts +8 -0
  196. package/build/utils/pom-scope/strip.js +238 -0
  197. package/build/utils/pom-scope/testIdDiscovery.js +14 -2
  198. package/build/utils/pom-verify/__fixtures__/af-style/asset-list.page.d.ts +1 -1
  199. package/build/utils/pom-verify/__fixtures__/af-style/asset-list.page.js +4 -2
  200. package/build/utils/pom-verify/__fixtures__/af-style/report.iframe.page.js +3 -1
  201. package/build/utils/pom-verify/__fixtures__/af-style/workflow-footer.page.js +3 -1
  202. package/build/utils/pom-verify/bindings.js +5 -1
  203. package/build/utils/pom-verify/calls.js +9 -2
  204. package/build/utils/pom-verify/verify.js +27 -5
  205. package/build/utils/pr-comment-parser.js +20 -7
  206. package/build/utils/proxy-terminal.d.ts +19 -1
  207. package/build/utils/proxy-terminal.js +346 -21
  208. package/build/utils/removedUiElements.js +1 -1
  209. package/build/utils/reportLanguage.js +35 -7
  210. package/build/utils/reportVerification.d.ts +14 -8
  211. package/build/utils/reportVerification.js +19 -19
  212. package/build/utils/repositorySlug.d.ts +32 -0
  213. package/build/utils/repositorySlug.js +77 -0
  214. package/build/utils/reuseRouting.js +6 -2
  215. package/build/utils/runSerialized.d.ts +3 -0
  216. package/build/utils/runSerialized.js +39 -0
  217. package/build/utils/screenRoutes.js +74 -18
  218. package/build/utils/sourceRouteExtractor.js +13 -6
  219. package/build/utils/telemetry.d.ts +1 -0
  220. package/build/utils/telemetry.js +8 -5
  221. package/build/utils/testDependencyPolicy.d.ts +9 -0
  222. package/build/utils/testDependencyPolicy.js +788 -0
  223. package/build/utils/testExecutionRecord.d.ts +90 -0
  224. package/build/utils/testExecutionRecord.js +267 -0
  225. package/build/utils/testFileClassification.js +3 -1
  226. package/build/utils/trace-parser.js +62 -14
  227. package/build/utils/urlPath.js +3 -1
  228. package/build/utils/utils-verify/action-key.d.ts +4 -0
  229. package/build/utils/utils-verify/action-key.js +2 -2
  230. package/build/utils/utils-verify/allow.d.ts +122 -3
  231. package/build/utils/utils-verify/allow.js +146 -21
  232. package/build/utils/utils-verify/body-reach.d.ts +120 -0
  233. package/build/utils/utils-verify/body-reach.js +335 -0
  234. package/build/utils/utils-verify/call-sites.d.ts +6 -1
  235. package/build/utils/utils-verify/call-sites.js +72 -8
  236. package/build/utils/utils-verify/delivered-imports.d.ts +43 -0
  237. package/build/utils/utils-verify/delivered-imports.js +84 -0
  238. package/build/utils/utils-verify/fixed-sleep.d.ts +96 -0
  239. package/build/utils/utils-verify/fixed-sleep.js +461 -0
  240. package/build/utils/utils-verify/in-house.d.ts +93 -0
  241. package/build/utils/utils-verify/in-house.js +719 -0
  242. package/build/utils/utils-verify/incumbent.d.ts +3 -0
  243. package/build/utils/utils-verify/incumbent.js +75 -0
  244. package/build/utils/utils-verify/index.d.ts +1 -0
  245. package/build/utils/utils-verify/index.js +1 -0
  246. package/build/utils/utils-verify/language-spec.d.ts +26 -10
  247. package/build/utils/utils-verify/language-spec.js +217 -20
  248. package/build/utils/utils-verify/locate.d.ts +26 -0
  249. package/build/utils/utils-verify/locate.js +125 -23
  250. package/build/utils/utils-verify/module-name.d.ts +40 -0
  251. package/build/utils/utils-verify/module-name.js +98 -0
  252. package/build/utils/utils-verify/parse.d.ts +46 -6
  253. package/build/utils/utils-verify/parse.js +176 -38
  254. package/build/utils/utils-verify/retrofit-equivalence.d.ts +5 -0
  255. package/build/utils/utils-verify/retrofit-equivalence.js +4 -2
  256. package/build/utils/utils-verify/stage.d.ts +5 -0
  257. package/build/utils/utils-verify/stage.js +47 -2
  258. package/build/utils/utils-verify/status-once.d.ts +62 -0
  259. package/build/utils/utils-verify/status-once.js +207 -0
  260. package/build/utils/utils-verify/typecheck.d.ts +61 -0
  261. package/build/utils/utils-verify/typecheck.js +338 -0
  262. package/build/utils/utils-verify/verify.d.ts +76 -1
  263. package/build/utils/utils-verify/verify.js +516 -44
  264. package/build/utils/versions.d.ts +3 -3
  265. package/build/utils/versions.js +1 -1
  266. package/build/utils/workspaceAuth.js +107 -37
  267. package/build/workspace/queryParamResolution.js +11 -4
  268. package/build/workspace/workspace.js +7 -7
  269. package/node_modules/playwright/ThirdPartyNotices.txt +19 -19
  270. package/node_modules/playwright/lib/mcp/skyramp/assertTool.js +8 -2
  271. package/node_modules/playwright/lib/mcp/skyramp/common/cssValue.js +87 -0
  272. package/node_modules/playwright/lib/mcp/skyramp/loadTraceTool.js +31 -0
  273. package/node_modules/playwright/lib/mcp/skyramp/skyRampImport.js +3 -0
  274. package/node_modules/playwright/lib/mcp/skyramp/traceRecordingBackend.js +181 -15
  275. package/node_modules/playwright/lib/mcp/test/skyRampExport.js +24 -0
  276. package/node_modules/playwright/lib/transform/babelBundleImpl.js +2353 -190
  277. package/node_modules/playwright/node_modules/playwright-core/ThirdPartyNotices.txt +62 -34
  278. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/.package-lock.json +72 -41
  279. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/dist/serve-static.js +1 -1
  280. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/dist/serve-static.mjs +1 -1
  281. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/package.json +2 -2
  282. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/README.md +16 -1
  283. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/index.js +4 -20
  284. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/read.js +17 -17
  285. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/json.js +60 -32
  286. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/raw.js +3 -3
  287. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/text.js +3 -3
  288. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/urlencoded.js +16 -20
  289. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/utils.js +18 -16
  290. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/LICENSE +22 -0
  291. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/README.md +71 -0
  292. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.d.ts +46 -0
  293. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.js +176 -0
  294. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.js.map +1 -0
  295. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/package.json +52 -0
  296. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/package.json +23 -10
  297. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/CHANGELOG.md +21 -14
  298. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/isObject.d.ts +1 -1
  299. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/package.json +6 -7
  300. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/tsconfig.json +1 -0
  301. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/index.js +266 -45
  302. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/lib/schemes.js +9 -4
  303. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/lib/utils.js +396 -92
  304. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/package.json +1 -1
  305. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/component-safe-serialization.test.js +163 -0
  306. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/equal.test.js +31 -3
  307. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/fixtures/uri-js-parse.json +2 -0
  308. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/ipv6-canonical.test.js +34 -0
  309. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/ipv6-validation.test.js +124 -0
  310. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/malformed-percent.test.js +77 -0
  311. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/malformed-urn.test.js +61 -0
  312. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/parse.test.js +7 -3
  313. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/query-fragment-normalization.test.js +33 -0
  314. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/reserved-path-normalization.test.js +109 -0
  315. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/scheme-validation.test.js +124 -0
  316. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/security-normalization.test.js +101 -0
  317. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/security.test.js +301 -3
  318. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/urn-full-input.test.js +29 -0
  319. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/websocket-query-preservation.test.js +24 -0
  320. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/CHANGELOG.md +7 -0
  321. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/index.d.ts +0 -1
  322. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/package.json +4 -5
  323. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/client/client.js +30 -16
  324. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/client/utils.js +4 -1
  325. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/context.js +32 -13
  326. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/accepts/accepts.js +36 -2
  327. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/proxy/index.js +4 -0
  328. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/ssg/ssg.js +1 -1
  329. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/ssg/utils.js +30 -10
  330. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/streaming/sse.js +5 -4
  331. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/hono-base.js +10 -8
  332. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/base.js +44 -23
  333. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/components.js +25 -26
  334. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/context.js +5 -5
  335. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/dom/render.js +2 -0
  336. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/dom/server.js +5 -1
  337. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/hooks/index.js +16 -13
  338. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +3 -3
  339. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/streaming.js +4 -5
  340. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/cache/index.js +103 -8
  341. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/compress/index.js +5 -0
  342. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/cors/index.js +17 -14
  343. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/csrf/index.js +1 -1
  344. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/etag/digest.js +47 -1
  345. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/etag/index.js +7 -4
  346. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +9 -4
  347. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +9 -4
  348. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/language/language.js +10 -6
  349. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/method-not-allowed/index.js +90 -0
  350. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +3 -1
  351. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/secure-headers/secure-headers.js +16 -7
  352. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/request.js +20 -13
  353. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/linear-router/router.js +7 -2
  354. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/pattern-router/router.js +3 -9
  355. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +65 -59
  356. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +71 -128
  357. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +14 -5
  358. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/trie-router/node.js +47 -70
  359. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/trie-router/router.js +3 -11
  360. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/utils.js +27 -0
  361. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router.js +1 -1
  362. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/accept.js +1 -1
  363. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/body.js +21 -3
  364. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/cookie.js +4 -3
  365. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/ipaddr.js +5 -3
  366. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/stream.js +12 -3
  367. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/url.js +19 -11
  368. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/client/client.js +30 -16
  369. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/client/utils.js +4 -1
  370. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/context.js +32 -13
  371. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/accepts/accepts.js +36 -2
  372. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/proxy/index.js +4 -0
  373. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/ssg/ssg.js +1 -1
  374. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/ssg/utils.js +30 -10
  375. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/streaming/sse.js +5 -4
  376. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/hono-base.js +10 -8
  377. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/base.js +41 -23
  378. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/components.js +26 -27
  379. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/context.js +6 -6
  380. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/dom/render.js +2 -0
  381. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/dom/server.js +5 -1
  382. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/hooks/index.js +16 -13
  383. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/intrinsic-element/components.js +4 -4
  384. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/streaming.js +5 -6
  385. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/cache/index.js +103 -8
  386. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/compress/index.js +5 -0
  387. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/cors/index.js +17 -14
  388. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/csrf/index.js +1 -1
  389. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/etag/digest.js +47 -1
  390. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/etag/index.js +7 -4
  391. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/jwk/jwk.js +9 -4
  392. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/jwt/jwt.js +9 -4
  393. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/language/language.js +10 -6
  394. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/method-not-allowed/index.js +68 -0
  395. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/pretty-json/index.js +3 -1
  396. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/secure-headers/secure-headers.js +16 -7
  397. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/request.js +21 -14
  398. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/linear-router/router.js +7 -2
  399. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/pattern-router/router.js +3 -9
  400. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/node.js +61 -58
  401. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/router.js +77 -129
  402. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/trie.js +14 -5
  403. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/trie-router/node.js +47 -70
  404. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/trie-router/router.js +3 -11
  405. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/utils.js +5 -0
  406. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router.js +1 -1
  407. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/adapter/aws-lambda/types.d.ts +9 -0
  408. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/client/types.d.ts +1 -1
  409. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/context.d.ts +6 -2
  410. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/hono-base.d.ts +4 -3
  411. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/base.d.ts +7 -2
  412. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/index.d.ts +5 -5
  413. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/intrinsic-element/components.d.ts +2 -2
  414. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/server.d.ts +5 -5
  415. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/hooks/index.d.ts +8 -6
  416. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/index.d.ts +5 -5
  417. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/cache/index.d.ts +6 -4
  418. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/combine/index.d.ts +1 -1
  419. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/cors/index.d.ts +1 -1
  420. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +2 -2
  421. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jwk/jwk.d.ts +2 -0
  422. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jwt/jwt.d.ts +2 -0
  423. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/method-not-allowed/index.d.ts +49 -0
  424. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/secure-headers/permissions-policy.d.ts +3 -3
  425. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +4 -1
  426. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +2 -1
  427. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/trie-router/node.d.ts +1 -2
  428. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/trie-router/router.d.ts +0 -1
  429. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/utils.d.ts +1 -0
  430. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router.d.ts +1 -1
  431. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/utils/headers.d.ts +2 -2
  432. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/utils/url.d.ts +5 -0
  433. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/accept.js +1 -1
  434. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/body.js +21 -3
  435. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/cookie.js +5 -4
  436. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/ipaddr.js +5 -3
  437. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/stream.js +12 -3
  438. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/url.js +17 -10
  439. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/package.json +11 -4
  440. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/README.md +173 -143
  441. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/address-error.d.ts +11 -0
  442. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/address-error.js.map +1 -1
  443. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.d.ts +49 -0
  444. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.js +79 -4
  445. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.js.map +1 -1
  446. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.d.ts +78 -5
  447. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.js +119 -24
  448. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.js.map +1 -1
  449. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.d.ts +151 -10
  450. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.js +316 -90
  451. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.js.map +1 -1
  452. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.d.ts +12 -0
  453. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.js +45 -2
  454. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.js.map +1 -1
  455. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.d.ts +14 -0
  456. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.js +50 -3
  457. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.js.map +1 -1
  458. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/package.json +6 -4
  459. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/.github/THREAT_MODEL.md +3 -3
  460. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/CHANGELOG.md +26 -0
  461. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/README.md +19 -1
  462. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/dist/qs.js +25 -25
  463. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/eslint.config.mjs +1 -1
  464. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/parse.js +16 -6
  465. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/stringify.js +23 -8
  466. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/utils.js +57 -11
  467. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/package.json +8 -7
  468. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/parse.js +419 -0
  469. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/stringify.js +317 -0
  470. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/utils.js +206 -0
  471. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/CHANGELOG.md +10 -0
  472. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/README.md +1 -1
  473. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/index.js +5 -2
  474. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/package.json +10 -10
  475. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/test/index.js +16 -0
  476. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/index.js +8 -18
  477. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/LICENSE +22 -0
  478. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/README.md +71 -0
  479. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.d.ts +46 -0
  480. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.js +176 -0
  481. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.js.map +1 -0
  482. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/package.json +52 -0
  483. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/package.json +9 -5
  484. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/package-lock.json +72 -41
  485. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/.package-lock.json +6 -6
  486. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/README.md +23 -1
  487. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/index.js +265 -86
  488. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/package.json +1 -1
  489. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/README.md +173 -143
  490. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/address-error.d.ts +11 -0
  491. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/address-error.js.map +1 -1
  492. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.d.ts +49 -0
  493. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.js +79 -4
  494. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.js.map +1 -1
  495. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.d.ts +78 -5
  496. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.js +119 -24
  497. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.js.map +1 -1
  498. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.d.ts +151 -10
  499. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.js +316 -90
  500. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.js.map +1 -1
  501. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.d.ts +12 -0
  502. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.js +45 -2
  503. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.js.map +1 -1
  504. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.d.ts +14 -0
  505. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.js +50 -3
  506. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.js.map +1 -1
  507. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/package.json +6 -4
  508. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/package-lock.json +6 -6
  509. package/node_modules/playwright/node_modules/playwright-core/lib/cli/program.js +18 -9
  510. package/node_modules/playwright/node_modules/playwright-core/lib/mcpBundleImpl/index.js +47 -47
  511. package/node_modules/playwright/node_modules/playwright-core/lib/server/codegen/skyramp/jsonlReader.js +3 -0
  512. package/node_modules/playwright/node_modules/playwright-core/lib/server/recorder/recorderRunner.js +42 -0
  513. package/node_modules/playwright/node_modules/playwright-core/lib/utilsBundleImpl/index.js +121 -121
  514. package/node_modules/playwright/node_modules/playwright-core/lib/vite/traceViewer/{index.B7KbSQcC.js → index.BAkLd5DX.js} +1 -1
  515. package/node_modules/playwright/node_modules/playwright-core/lib/vite/traceViewer/index.html +1 -1
  516. package/node_modules/playwright/node_modules/playwright-core/package.json +1 -1
  517. package/node_modules/playwright/node_modules/playwright-core/src/cli/program.ts +31 -9
  518. package/node_modules/playwright/node_modules/playwright-core/src/server/codegen/skyramp/jsonlReader.ts +1 -0
  519. package/node_modules/playwright/node_modules/playwright-core/src/server/recorder/recorderRunner.ts +57 -1
  520. package/node_modules/playwright/package.json +2 -2
  521. package/package.json +7 -6
  522. package/plugin/prompts/code-reuse/hand-off.md +30 -0
  523. package/plugin/prompts/generate-tests/generation.md +1 -1
  524. package/plugin/prompts/plan-tests.md +14 -14
  525. package/plugin/prompts/testbot-task1.md +4 -2
  526. package/plugin/skills/enhance-assertions/SKILL.md +25 -0
  527. package/plugin/skills/enhance-assertions/reference/contract.md +51 -0
  528. package/plugin/skills/enhance-assertions/reference/integration.md +58 -0
  529. package/plugin/skills/enhance-assertions/reference/shared-rules.md +220 -0
  530. package/plugin/skills/enhance-assertions/reference/ui.md +373 -0
  531. package/plugin/skills/fix-test-import-errors/SKILL.md +44 -50
  532. package/plugin/skills/validate-assertion-alignment-post-execution/SKILL.md +32 -0
  533. package/plugin/skills/validate-assertion-alignment-post-execution/reference/checks.md +44 -0
  534. package/plugin/skills/validate-assertion-alignment-post-execution/reference/evidence.md +47 -0
  535. package/build/prompts/enhance-assertions/contractProviderAssertionsPrompt.d.ts +0 -2
  536. package/build/prompts/enhance-assertions/contractProviderAssertionsPrompt.js +0 -29
  537. package/build/prompts/enhance-assertions/integrationAssertionsPrompt.d.ts +0 -2
  538. package/build/prompts/enhance-assertions/integrationAssertionsPrompt.js +0 -36
  539. package/build/prompts/enhance-assertions/sharedAssertionRules.d.ts +0 -16
  540. package/build/prompts/enhance-assertions/sharedAssertionRules.js +0 -284
  541. package/build/prompts/enhance-assertions/uiAssertionsPrompt.d.ts +0 -2
  542. package/build/prompts/enhance-assertions/uiAssertionsPrompt.js +0 -388
  543. package/node_modules/playwright/node_modules/playwright-core/.DS_Store +0 -0
@@ -1,27 +1,29 @@
1
1
  import { normalizeCategory } from "../../types/TestRecommendation.js";
2
+ import { maintainedFileIsInItsRepository } from "./citedPath.js";
2
3
  import { DEFECTS_CONTRACT } from "../verifierContracts.js";
3
4
  /** A defect id as the plan spells it: trimmed, and exact otherwise. */
4
5
  function idKey(raw) {
5
- return typeof raw === "string" ? raw.trim() : "";
6
+ return raw.trim();
6
7
  }
7
- /** The defect ids one planned test cites, trimmed and without repeats. Read
8
- * defensively: the plan comes off disk, so the array type holds only on the
9
- * validated path, and a throw here would hide every other objection. */
8
+ /** The defect ids one planned test cites, trimmed and without repeats. */
10
9
  function citedDefects(plannedTest) {
11
- const declared = plannedTest?.declarations?.defects;
12
- if (!Array.isArray(declared))
13
- return [];
10
+ const declared = plannedTest.declarations.defects ?? [];
14
11
  return [...new Set(declared.map(idKey))].filter(Boolean);
15
12
  }
13
+ /** The defect ids one maintenance entry proves, trimmed and without repeats. The
14
+ * schema requires the list, so it is always an array. */
15
+ function maintainedDefects(entry) {
16
+ return [...new Set(entry.defects.map(idKey))].filter(Boolean);
17
+ }
16
18
  /** Whether a planned test expects to fail. Undeclared reads as not failing: a test
17
19
  * that says nothing about its outcome proves nothing about a defect either. */
18
20
  function expectsToFail(plannedTest) {
19
- return plannedTest?.declarations?.expected?.outcome === "fail";
21
+ return plannedTest.declarations.expected?.outcome === "fail";
20
22
  }
21
23
  /** Where the defect sits, as the objection quotes it. */
22
24
  function locate(defect) {
23
- const file = String(defect?.file ?? "").trim() || "no file";
24
- return typeof defect?.line === "number" ? `${file}:${defect.line}` : file;
25
+ const file = String(defect.file ?? "").trim() || "no file";
26
+ return typeof defect.line === "number" ? `${file}:${defect.line}` : file;
25
27
  }
26
28
  /** Every declared defect needs one planned test that cites it and expects to fail,
27
29
  * or an answer. Read off the PLAN alone, like the behaviour half of coverage: the
@@ -32,9 +34,19 @@ function locate(defect) {
32
34
  * `issuesFound`, which exists at report time, after every test is generated. */
33
35
  export const defects = {
34
36
  name: "defects",
35
- run(registration, _ctx) {
36
- const declared = (Array.isArray(registration.defects) ? registration.defects : []).filter((defect) => idKey(defect?.id).length > 0);
37
- const plannedTests = registration.plannedTests ?? [];
37
+ run(registration, ctx) {
38
+ const declared = registration.defects.filter((defect) => idKey(defect.id).length > 0);
39
+ const plannedTests = registration.plannedTests;
40
+ const maintains = registration.maintains ?? [];
41
+ // The defects the run proves by editing an existing test instead of planning a
42
+ // new one. Only from an entry whose file is in the repository it names.
43
+ const maintainedProof = new Set();
44
+ for (const entry of maintains) {
45
+ if (!maintainedFileIsInItsRepository(entry, ctx))
46
+ continue;
47
+ for (const id of maintainedDefects(entry))
48
+ maintainedProof.add(id);
49
+ }
38
50
  const objections = [];
39
51
  // An empty list is its own objection and NOT an early return: a plan that
40
52
  // declares nothing can still cite `D1` from a planned test, and that citation
@@ -57,6 +69,10 @@ export const defects = {
57
69
  continue;
58
70
  seen.add(id);
59
71
  const citing = plannedTests.filter((plannedTest) => citedDefects(plannedTest).includes(id));
72
+ // A maintained spec is green after its edit, so the outcome rule below is for
73
+ // planned tests alone.
74
+ if (citing.length === 0 && maintainedProof.has(id))
75
+ continue;
60
76
  if (citing.length === 0) {
61
77
  objections.push({
62
78
  // Keyed on the defect's id, not its position: the agent reorders the
@@ -95,18 +111,42 @@ export const defects = {
95
111
  });
96
112
  }
97
113
  }
114
+ // The maintenance mirror of `unknownId`, keyed on the file: two entries may name
115
+ // one file, and the agent answers a file once.
116
+ const unknownByFile = new Map();
117
+ for (const entry of maintains) {
118
+ const key = idKey(entry.file) || "unnamed";
119
+ for (const id of maintainedDefects(entry)) {
120
+ if (known.has(id))
121
+ continue;
122
+ const unknown = unknownByFile.get(key) ?? [];
123
+ if (!unknown.includes(id))
124
+ unknown.push(id);
125
+ unknownByFile.set(key, unknown);
126
+ }
127
+ }
128
+ for (const [key, unknown] of unknownByFile) {
129
+ objections.push({
130
+ objectionId: `defects:maintains:unknownDefect:${key}`,
131
+ verifier: "defects",
132
+ message: DEFECTS_CONTRACT.objections.maintainedUnknownDefect.message,
133
+ evidence: `${key === "unnamed" ? "an unnamed `maintains` entry" : key} cites ${unknown.map((id) => `"${id}"`).join(", ")}; this plan declares ${known.size > 0 ? [...known].map((declaredId) => `"${declaredId}"`).join(", ") : "no defects"}.`,
134
+ suggestion: DEFECTS_CONTRACT.objections.maintainedUnknownDefect.suggestion,
135
+ });
136
+ }
98
137
  // A requirement the code does not meet is a defect, and that defect's `file` is
99
138
  // the code that contradicts the requirement.
100
139
  for (const plannedTest of plannedTests) {
101
- if (normalizeCategory(plannedTest?.scenario?.category) !== "requirement_conflict")
140
+ if (normalizeCategory(plannedTest.scenario.category) !==
141
+ "requirement_conflict")
102
142
  continue;
103
143
  if (citedDefects(plannedTest).length > 0)
104
144
  continue;
105
- const plannedTestId = idKey(plannedTest?.plannedTestId) || "plan";
145
+ const plannedTestId = idKey(plannedTest.plannedTestId) || "plan";
106
146
  objections.push({
107
147
  objectionId: `defects:conflictWithoutDefect:${plannedTestId}`,
108
148
  verifier: "defects",
109
- plannedTestId: plannedTest?.plannedTestId,
149
+ plannedTestId: plannedTest.plannedTestId,
110
150
  message: DEFECTS_CONTRACT.objections.conflictWithoutDefect.message,
111
151
  evidence: `${plannedTestId} is planned as \`requirement_conflict\` and cites no defect in \`defects\`.`,
112
152
  suggestion: DEFECTS_CONTRACT.objections.conflictWithoutDefect.suggestion,
@@ -3,6 +3,10 @@ import { Plan } from "../registerPlan.js";
3
3
  /** One test as it appears in the submitted report. */
4
4
  export interface DeliveredTest {
5
5
  plannedTestId: string;
6
+ /** The repo the REPORT attributes it to. Compared against the plan's: an id is
7
+ * unique within the plan, so a row reusing one under another repo would
8
+ * otherwise join and ship the wrong attribution. */
9
+ repository: string;
6
10
  }
7
11
  /** One maintenance row that LEFT COVERAGE BEHIND, as the report publishes it. The
8
12
  * caller filters by action: a row this check is handed is one whose edit a later
@@ -17,7 +21,9 @@ export interface MaintainedTest {
17
21
  /** Verifier 5, post-execution half. Both directions on one pass: a report entry
18
22
  * that was in no plan, and a planned planned test that never shipped. The two lists
19
23
  * join on `plannedTestId` exactly — never a name, an endpoint or a similarity
20
- * score. Objections go to the report: the tests already exist. */
24
+ * score — and the matched pair must agree on the repository, so a real id cannot
25
+ * carry a made-up repo through. Objections go to the report: the tests already
26
+ * exist. */
21
27
  export declare function checkDeliveredMatchesPlan(plan: Plan, delivered: DeliveredTest[]): Objection[];
22
28
  /** The maintenance mirror of "planned but not delivered". A `maintains` entry is
23
29
  * what makes its changes count as covered, and until this ran nothing downstream
@@ -2,23 +2,37 @@ import { testFileMatches } from "../../utils/utils.js";
2
2
  /** Verifier 5, post-execution half. Both directions on one pass: a report entry
3
3
  * that was in no plan, and a planned planned test that never shipped. The two lists
4
4
  * join on `plannedTestId` exactly — never a name, an endpoint or a similarity
5
- * score. Objections go to the report: the tests already exist. */
5
+ * score — and the matched pair must agree on the repository, so a real id cannot
6
+ * carry a made-up repo through. Objections go to the report: the tests already
7
+ * exist. */
6
8
  export function checkDeliveredMatchesPlan(plan, delivered) {
7
- const planned = new Set(plan.plannedTests.map((c) => c.plannedTestId));
8
- const shipped = new Set(delivered.map((d) => d.plannedTestId));
9
+ const planned = new Map(plan.plannedTests.map((c) => [c.plannedTestId, c.repository]));
10
+ const shipped = new Map(delivered.map((d) => [d.plannedTestId, d.repository]));
9
11
  const objections = [];
10
- for (const id of shipped) {
11
- if (planned.has(id))
12
+ for (const [id, repository] of shipped) {
13
+ const plannedRepository = planned.get(id);
14
+ if (plannedRepository === undefined) {
15
+ objections.push({
16
+ objectionId: `deliveredMatchesPlan:${id}`,
17
+ verifier: "deliveredMatchesPlan",
18
+ message: "This test is in the report but was not in the plan. Every test written must be declared first.",
19
+ evidence: `delivered but unplanned: ${id}`,
20
+ suggestion: "Declare it in the plan and register it again, or take it out of the report.",
21
+ });
12
22
  continue;
13
- objections.push({
14
- objectionId: `deliveredMatchesPlan:${id}`,
15
- verifier: "deliveredMatchesPlan",
16
- message: "This test is in the report but was not in the plan. Every test written must be declared first.",
17
- evidence: `delivered but unplanned: ${id}`,
18
- suggestion: "Declare it in the plan and register it again, or take it out of the report.",
19
- });
23
+ }
24
+ if (plannedRepository !== repository) {
25
+ objections.push({
26
+ objectionId: `deliveredMatchesPlan:repository:${id}`,
27
+ verifier: "deliveredMatchesPlan",
28
+ plannedTestId: id,
29
+ message: "This test names one repository in the plan and another in the report. A test belongs to one repository.",
30
+ evidence: `planned under ${plannedRepository}, reported under ${repository}`,
31
+ suggestion: "Set the report entry's repository to the one the plan declared, or plan the test under the repository it was written for.",
32
+ });
33
+ }
20
34
  }
21
- for (const id of planned) {
35
+ for (const id of planned.keys()) {
22
36
  if (shipped.has(id))
23
37
  continue;
24
38
  objections.push({
@@ -47,7 +61,7 @@ export function checkMaintenanceDelivered(plan, maintained) {
47
61
  const claimed = Array.isArray(plan?.maintains) ? plan.maintains : [];
48
62
  if (claimed.length === 0)
49
63
  return [];
50
- const text = (value) => (typeof value === "string" ? value.trim() : "");
64
+ const text = (value) => typeof value === "string" ? value.trim() : "";
51
65
  const editedPaths = [];
52
66
  for (const row of Array.isArray(maintained) ? maintained : []) {
53
67
  for (const full of [text(row?.testFilePath), text(row?.pomFile)])
@@ -1,12 +1,14 @@
1
1
  import { isUIPlannedTest } from "../subjectStep.js";
2
- import { ENDPOINT_GROUNDED_CONTRACT } from "../verifierContracts.js";
2
+ import { ENDPOINT_GROUNDED_CONTRACT, } from "../verifierContracts.js";
3
3
  import { isTestPath } from "../../utils/testFileClassification.js";
4
4
  /** A path that leaves the checkout, in any of its spellings. Callers pass a
5
5
  * trimmed path: " ../routes.rb" splits to [" ..", "routes.rb"], so no segment
6
6
  * equals ".." and one leading space would carry it through. */
7
7
  export function escapesRepo(file) {
8
8
  // POSIX absolute, a Windows drive, a bare leading backslash, and a UNC share.
9
- if (file.startsWith("/") || file.startsWith("\\") || /^[A-Za-z]:[\\/]/.test(file))
9
+ if (file.startsWith("/") ||
10
+ file.startsWith("\\") ||
11
+ /^[A-Za-z]:[\\/]/.test(file))
10
12
  return true;
11
13
  // A URL, which both citation describes promise is not a citation: `http://host/x`
12
14
  // has no leading slash and no `..`, so without this it resolved against the
@@ -15,7 +17,9 @@ export function escapesRepo(file) {
15
17
  const scheme = /^([A-Za-z][A-Za-z0-9+.-]*):([\s\S]*)$/.exec(file);
16
18
  if (scheme) {
17
19
  const [, name, rest] = scheme;
18
- if (rest.startsWith("/") || rest.includes("://") || /^(file|data|javascript|jar|blob)$/i.test(name))
20
+ if (rest.startsWith("/") ||
21
+ rest.includes("://") ||
22
+ /^(file|data|javascript|jar|blob)$/i.test(name))
19
23
  return true;
20
24
  }
21
25
  return file.split(/[\\/]/).some((segment) => segment === "..");
@@ -70,20 +74,22 @@ export const endpointGrounded = {
70
74
  for (const plannedTest of registration.plannedTests) {
71
75
  if (isUIPlannedTest(plannedTest))
72
76
  continue;
73
- const evidence = plannedTest.declarations?.routes ?? [];
77
+ const evidence = plannedTest.declarations.routes ?? [];
74
78
  const ungrounded = [];
75
79
  let uncited = 0;
76
80
  let disqualified = 0;
77
- for (const step of plannedTest.scenario?.steps ?? []) {
81
+ for (const step of plannedTest.scenario.steps) {
78
82
  // A step naming no path calls nothing there is a file to cite for — a wait,
79
83
  // a pause, a setup line. The verb is deliberately NOT read: requiring one
80
84
  // made a Thrift or GraphQL call look like a click and skip this check.
81
- if (!String(step?.path ?? "").trim())
85
+ if (!String(step.path ?? "").trim())
82
86
  continue;
83
- const key = `${String(step?.method ?? "ANY").trim() || "ANY"} ${String(step?.path).trim()}`;
87
+ const key = `${String(step.method ?? "ANY").trim() || "ANY"} ${String(step.path).trim()}`;
84
88
  // Named by the step's own `order`, so nothing here compares two spellings
85
89
  // of one route. The number must be a number: a string `"2"` names no step.
86
- const cited = evidence.filter((e) => typeof e?.step === "number" && e.step === (step?.order ?? 0));
90
+ // The number must be a number: a string `"2"` names no step, and `===`
91
+ // alone would read one as a match against a numeric `order`.
92
+ const cited = evidence.filter((e) => typeof e.step === "number" && e.step === step.order);
87
93
  if (cited.length === 0) {
88
94
  uncited += 1;
89
95
  pushOnce(ungrounded, `${key} (no file cited)`);
@@ -3,4 +3,10 @@ import { Verifier } from "../types.js";
3
3
  * checkout, and nothing more: deciding that one already covers the planned test came
4
4
  * from route-parsed `METHOD::resource` keys, wrong in both directions. `differsBy`
5
5
  * is recorded, never judged, and citing nothing raises nothing. */
6
+ /** The id plan time raises when a `maintains` entry's file does not resolve in the
7
+ * checkout, or when the entry names no file. Built here and read by report time,
8
+ * which has no `VerifyContext` and so cannot resolve a path itself: the presence
9
+ * of this objection IS the file verdict. Exported rather than spelled twice —
10
+ * `issueTraceability` looks it up per entry. */
11
+ export declare function maintainedFileObjectionId(file: unknown): string;
6
12
  export declare const existingCoverage: Verifier;
@@ -4,20 +4,28 @@ import { EXISTING_COVERAGE_CONTRACT } from "../verifierContracts.js";
4
4
  * checkout, and nothing more: deciding that one already covers the planned test came
5
5
  * from route-parsed `METHOD::resource` keys, wrong in both directions. `differsBy`
6
6
  * is recorded, never judged, and citing nothing raises nothing. */
7
+ /** The id plan time raises when a `maintains` entry's file does not resolve in the
8
+ * checkout, or when the entry names no file. Built here and read by report time,
9
+ * which has no `VerifyContext` and so cannot resolve a path itself: the presence
10
+ * of this objection IS the file verdict. Exported rather than spelled twice —
11
+ * `issueTraceability` looks it up per entry. */
12
+ export function maintainedFileObjectionId(file) {
13
+ const named = String(file ?? "").trim();
14
+ return `existingCoverage:maintains:${named || "unnamed"}`;
15
+ }
7
16
  export const existingCoverage = {
8
17
  name: "existingCoverage",
9
18
  run(registration, ctx) {
10
19
  const objections = [];
11
20
  for (const plannedTest of registration.plannedTests) {
12
- // The plan is read off disk, so this is an array only on the validated
13
- // path. A throw here would reach the agent as `:crashed`, hiding the real
14
- // objection instead of raising it.
15
- const cited = plannedTest?.declarations?.existingTests;
21
+ // The field AND its entries: `crashContainment.test.ts` feeds `[null]`, and
22
+ // `existingCoverage.test.ts` feeds the field itself as `5` and as a string.
23
+ const cited = plannedTest.declarations.existingTests;
16
24
  if (!Array.isArray(cited))
17
25
  continue;
18
26
  const unreadable = [];
19
27
  for (const entry of cited) {
20
- const file = String(entry?.file ?? "").trim();
28
+ const file = String(entry.file ?? "").trim();
21
29
  if (!file) {
22
30
  pushOnce(unreadable, "an entry names no file");
23
31
  continue;
@@ -28,8 +36,9 @@ export const existingCoverage = {
28
36
  pushOnce(unreadable, `${file} (points outside the repository)`);
29
37
  continue;
30
38
  }
31
- if (!ctx.citedFileExists(file))
32
- pushOnce(unreadable, `${file} (not found)`);
39
+ // The planned test's own repository: two repositories can hold the same path.
40
+ if (!ctx.citedFileExists(file, plannedTest.repository))
41
+ pushOnce(unreadable, `${file} (not found in ${plannedTest.repository})`);
33
42
  }
34
43
  if (unreadable.length === 0)
35
44
  continue;
@@ -45,30 +54,28 @@ export const existingCoverage = {
45
54
  // `maintains` is what makes a change covered by an edited test count in
46
55
  // `coverage`, so the same file check applies to it, plus the change ids it
47
56
  // cites: an id no `changes` entry declares would credit coverage for nothing.
48
- const maintains = Array.isArray(registration?.maintains) ? registration.maintains : [];
49
- const declaredChanges = new Set((Array.isArray(registration?.changes) ? registration.changes : [])
50
- .map((change) => String(change?.id ?? "").trim())
51
- .filter(Boolean));
57
+ const maintains = registration.maintains ?? [];
58
+ const declaredChanges = new Set(registration.changes.map((change) => change.id.trim()).filter(Boolean));
52
59
  // Gathered per file BEFORE any objection is pushed: the schema allows two
53
60
  // entries naming the same file, the objection id is keyed on the file so the
54
61
  // agent answers a file once, and keying alone dropped the second entry's ids.
55
62
  const missingByFile = new Map();
56
63
  const unknownByFile = new Map();
57
64
  for (const entry of maintains) {
58
- const file = String(entry?.file ?? "").trim();
65
+ const file = entry.file.trim();
59
66
  const key = file || "unnamed";
60
67
  const missing = !file
61
68
  ? "an entry names no file"
62
69
  : escapesRepo(file)
63
70
  ? `${file} (points outside the repository)`
64
- : !ctx.citedFileExists(file)
65
- ? `${file} (not found)`
66
- : "";
71
+ : // The repository the entry names, for the same reason.
72
+ !ctx.citedFileExists(file, entry.repository)
73
+ ? `${file} (not found in ${entry.repository})`
74
+ : "";
67
75
  if (missing && !missingByFile.has(key))
68
76
  missingByFile.set(key, missing);
69
- const ids = Array.isArray(entry?.changes) ? entry.changes : [];
70
- for (const raw of ids) {
71
- const id = String(raw ?? "").trim();
77
+ for (const raw of entry.changes) {
78
+ const id = raw.trim();
72
79
  if (!id || declaredChanges.has(id))
73
80
  continue;
74
81
  const unknown = unknownByFile.get(key) ?? [];
@@ -79,11 +86,12 @@ export const existingCoverage = {
79
86
  }
80
87
  for (const [key, missing] of missingByFile) {
81
88
  objections.push({
82
- objectionId: `existingCoverage:maintains:${key}`,
89
+ objectionId: maintainedFileObjectionId(key),
83
90
  verifier: "existingCoverage",
84
91
  message: EXISTING_COVERAGE_CONTRACT.objections.maintainedTestMissing.message,
85
92
  evidence: `maintained test not in the checkout: ${missing}`,
86
- suggestion: EXISTING_COVERAGE_CONTRACT.objections.maintainedTestMissing.suggestion,
93
+ suggestion: EXISTING_COVERAGE_CONTRACT.objections.maintainedTestMissing
94
+ .suggestion,
87
95
  });
88
96
  }
89
97
  for (const [key, unknown] of unknownByFile) {
@@ -92,7 +100,8 @@ export const existingCoverage = {
92
100
  verifier: "existingCoverage",
93
101
  message: EXISTING_COVERAGE_CONTRACT.objections.maintainedUnknownChange.message,
94
102
  evidence: `${key === "unnamed" ? "an unnamed entry" : key} cites ${unknown.map((id) => `"${id}"`).join(", ")}; this plan declares ${[...declaredChanges].map((id) => `"${id}"`).join(", ") || "no changes"}`,
95
- suggestion: EXISTING_COVERAGE_CONTRACT.objections.maintainedUnknownChange.suggestion,
103
+ suggestion: EXISTING_COVERAGE_CONTRACT.objections.maintainedUnknownChange
104
+ .suggestion,
96
105
  });
97
106
  }
98
107
  return objections;
@@ -1,5 +1,5 @@
1
1
  import { categoryExpectsRed } from "../../types/TestRecommendation.js";
2
- import { fillPlaceholders, EXPECTED_OUTCOME_CONTRACT } from "../verifierContracts.js";
2
+ import { fillPlaceholders, EXPECTED_OUTCOME_CONTRACT, } from "../verifierContracts.js";
3
3
  import { subjectStep } from "../subjectStep.js";
4
4
  /** The severities that count as the run's own reported defect. */
5
5
  const BLOCKER_FLOOR = ["critical", "high"];
@@ -11,7 +11,9 @@ function blockingIssue(plannedTest, issues) {
11
11
  if (!path)
12
12
  return undefined;
13
13
  for (const issue of issues) {
14
- if (!BLOCKER_FLOOR.includes(String(issue?.severity ?? "").trim().toLowerCase()))
14
+ if (!BLOCKER_FLOOR.includes(String(issue?.severity ?? "")
15
+ .trim()
16
+ .toLowerCase()))
15
17
  continue;
16
18
  const description = String(issue?.description ?? "");
17
19
  const sourceFile = String(issue?.sourceFile ?? "");
@@ -36,6 +38,8 @@ export function checkExpectedOutcomeAfterExecution(plan, results, issues = []) {
36
38
  const result = byId.get(plannedTest.plannedTestId);
37
39
  if (!result)
38
40
  continue;
41
+ // The stored plan is not schema-validated. An entry with no `declarations`
42
+ // is skipped; a throw here would cost every entry after it as well.
39
43
  const declared = plannedTest.declarations?.expected?.outcome;
40
44
  if (declared === "fail" && result.passed) {
41
45
  objections.push({
@@ -62,14 +66,18 @@ export function checkExpectedOutcomeAfterExecution(plan, results, issues = []) {
62
66
  // Stated by the agent, not inferred: a 404 the test asked for and a 404 that
63
67
  // stopped it read the same in the failure text, and only whoever wrote the
64
68
  // test knows which it was. A row that leaves the field out raises nothing.
65
- if (declared === "fail" && !result.passed && result.reachedBehavior === false) {
69
+ if (declared === "fail" &&
70
+ !result.passed &&
71
+ result.reachedBehavior === false) {
66
72
  const blocker = blockingIssue(plannedTest, issues);
67
73
  objections.push({
68
74
  objectionId: `expectedOutcome:executed:${plannedTest.plannedTestId}`,
69
75
  verifier: "expectedOutcome",
70
76
  plannedTestId: plannedTest.plannedTestId,
71
77
  message: EXPECTED_OUTCOME_CONTRACT.objections.executed.message,
72
- evidence: blocker ? `blocked by reported issue: ${blocker}` : (result.failureDetail ?? ""),
78
+ evidence: blocker
79
+ ? `blocked by reported issue: ${blocker}`
80
+ : (result.failureDetail ?? ""),
73
81
  suggestion: EXPECTED_OUTCOME_CONTRACT.objections.executed.suggestion,
74
82
  });
75
83
  }
@@ -87,8 +95,8 @@ export const expectedOutcomeAtPlanTime = {
87
95
  for (const plannedTest of registration.plannedTests) {
88
96
  // Compared normalised, reported as written: the agent has to recognise the
89
97
  // value it sent in the objection.
90
- const category = String(plannedTest.scenario?.category ?? "");
91
- const declaredOutcome = plannedTest.declarations?.expected?.outcome;
98
+ const category = String(plannedTest.scenario.category ?? "");
99
+ const declaredOutcome = plannedTest.declarations.expected?.outcome;
92
100
  if (declaredOutcome !== "pass" || !categoryExpectsRed(category))
93
101
  continue;
94
102
  objections.push({
@@ -96,8 +104,9 @@ export const expectedOutcomeAtPlanTime = {
96
104
  verifier: "expectedOutcome",
97
105
  plannedTestId: plannedTest.plannedTestId,
98
106
  message: fillPlaceholders(EXPECTED_OUTCOME_CONTRACT.objections.passInShouldFailCategory.message, { category }),
99
- evidence: `category ${category}, declared pass: "${plannedTest.declarations?.expected?.why ?? ""}"`,
100
- suggestion: EXPECTED_OUTCOME_CONTRACT.objections.passInShouldFailCategory.suggestion,
107
+ evidence: `category ${category}, declared pass: "${plannedTest.declarations.expected?.why ?? ""}"`,
108
+ suggestion: EXPECTED_OUTCOME_CONTRACT.objections.passInShouldFailCategory
109
+ .suggestion,
101
110
  });
102
111
  }
103
112
  return objections;