@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,6 +1,7 @@
1
+ import { type ReuseHandOff, type ReuseHandOffSource } from "../../utils/AnalysisStateManager.js";
1
2
  import { type VerifyResult } from "../../utils/pom-verify/index.js";
2
- import { type ReuseOutcome, type ReuseRecord } from "./reuse-outcome.js";
3
- import { type UtilsVerifyResult } from "../../utils/utils-verify/index.js";
3
+ import { type InHouseDeclaration, type ReuseOutcome, type ReuseRecord } from "./reuse-outcome.js";
4
+ import { type UtilsVerifyResult, type UtilsViolationKind } from "../../utils/utils-verify/index.js";
4
5
  import type { ReuseVerificationFailure } from "../../types/ReuseOutcome.js";
5
6
  /**
6
7
  * Record the tier-1 candidate count STEP 1 detected, plus the identity needed to
@@ -98,7 +99,9 @@ export declare function canonPath(p: string): string;
98
99
  export declare function utilsFileLabel(files: string[]): string;
99
100
  /** Verdict of one utils verify pass. The verdict alone is stored — counts and the
100
101
  * file list are re-derived from the delivered files at report time. */
101
- export declare function recordUtilsVerifyOutcome(testFile: string, r: UtilsVerifyResult, language: string, framework: string, testType: string | undefined, explicitStateFile?: string): Promise<boolean>;
102
+ export declare function recordUtilsVerifyOutcome(testFile: string, r: UtilsVerifyResult, language: string, framework: string, testType: string | undefined, explicitStateFile?: string,
103
+ /** The agent's declarations from this verify call, when it made any. */
104
+ inHouseDeclared?: InHouseDeclaration): Promise<boolean>;
102
105
  /** `skyramp_modularization` was called for this spec. Ownership on the write, like
103
106
  * the utils debt: a same-basename spec elsewhere does not inherit the mark. */
104
107
  export declare function recordModularized(testFile: string, explicitStateFile?: string): Promise<void>;
@@ -135,14 +138,22 @@ export declare function pendingUtilsVerification(testFile: string, explicitState
135
138
  * hand-off text, so the debt can never be owed for a test that was never told to
136
139
  * pay it (a gate that cannot be satisfied is the SKYR-4115 failure inverted).
137
140
  */
138
- export declare function recordReuseHandOff(files: string[], testType: string, language: string, framework: string, explicitStateFile?: string): Promise<void>;
141
+ export declare function recordReuseHandOff(files: string[], testType: string, language: string, framework: string, explicitStateFile?: string, source?: ReuseHandOffSource): Promise<void>;
139
142
  /**
140
- * Does this spec owe the modularize→reuse pair its generation handed off? The
143
+ * Does this spec owe the modularize→reuse pair it was handed off? The
141
144
  * chain-compliance half of SKYR-4220: 2 of 8 SKYR-4196 Part B runs wrote a second
142
- * integration test's imports by hand and skipped the pair. A hand-off of the spec's
143
- * test type exists for its directory (integration, or ui since SKYR-4224), the spec
144
- * is new in this run, and no reuse pass was ever recorded for it → refuse, naming
145
- * the two calls. Fails open on everything else.
145
+ * integration test's imports by hand and skipped the pair. A hand-off names this
146
+ * exact file with the spec's test type (integration, or ui since SKYR-4224) and no
147
+ * reuse pass was ever recorded for it → refuse, naming the two calls. Fails open on
148
+ * everything else.
149
+ *
150
+ * Whether the file is at HEAD matters only for a GENERATION hand-off: the
151
+ * `isNewInRepo` guard exists for a pre-existing test that a stale hand-off names
152
+ * although this run never wrote it (measured 2026-08-26: two maintained tests
153
+ * blocked on a debt they never owed). A MAINTENANCE hand-off is recorded by
154
+ * skyramp_actions for the file it told the agent to update or regenerate — at HEAD
155
+ * by definition — so that file owes the pair whether or not it is present at HEAD,
156
+ * and the guard is not consulted.
146
157
  */
147
158
  export declare function pendingReuseChain(testFile: string, explicitStateFile?: string, testType?: string): Promise<string | undefined>;
148
159
  /** Every reuse-phase debt a downstream tool must refuse on, first one wins. One call
@@ -153,14 +164,15 @@ export declare function pendingReuseDebt(testFile: string, explicitStateFile?: s
153
164
  /**
154
165
  * Report-time chain verdict for one report row. `fileName` is a basename, so it is
155
166
  * matched against the basenames of the handed-off files of the same test type. True
156
- * only when such a file exists, is new in this run, and no reuse record was ever
157
- * written for that basename never `false`, so a consumer omits rather than renders a
167
+ * only when such a file exists, this run wrote it (generation hand-off, new in the
168
+ * repo) or rewrote it (maintenance hand-off), and no reuse record was ever written
169
+ * for that basename — never `false`, so a consumer omits rather than renders a
158
170
  * negative.
159
171
  */
160
- export declare function reuseChainSkipped(fileName: string, testType: string, record: ReuseRecord | undefined, handOffs: Record<string, {
161
- testType: string;
162
- language: string;
163
- }> | undefined): Promise<true | undefined>;
172
+ export declare function reuseChainSkipped(fileName: string, testType: string, record: ReuseRecord | undefined,
173
+ /** Optional because `reuseHandOffs` is optional on the run state: a run that
174
+ * armed nothing never writes the field. */
175
+ handOffs: Record<string, ReuseHandOff> | undefined): Promise<true | undefined>;
164
176
  /**
165
177
  * A blocking reuse verdict measured on the DELIVERED files at report time — the
166
178
  * same predicate the live `verify: true` pass refuses on, re-run on what ships.
@@ -208,6 +220,16 @@ export declare const REUSE_SUBMIT_MAX_REFUSALS = 2;
208
220
  /** What one report row's re-derivation established: the outcome to publish, and a
209
221
  * blocking verdict when the delivered files fail the live check. */
210
222
  export interface ReuseRederivation {
223
+ /** Carried declines a finding consumed on this pass. The caller keeps these and
224
+ * retires the rest: a decline that covers nothing is permission looking for a
225
+ * fault, and the next fault it meets is one nobody declined. */
226
+ carriedConsumed?: CarriedDecline[];
227
+ /** Whether this pass actually MEASURED the spec, so `carriedConsumed` is an answer
228
+ * rather than a silence. A pass that threw, or one whose record carries no spec
229
+ * identity, consumes nothing for the same reason it reports nothing: it read
230
+ * nothing. Retiring on that deletes permission while the fault it covers is still
231
+ * in the file, and the next submission refuses a decline already made. */
232
+ carriedEvaluated?: boolean;
211
233
  outcome: ReuseOutcome | undefined;
212
234
  blocking?: ReuseBlockingVerdict;
213
235
  }
@@ -251,4 +273,56 @@ export declare function verificationFailures(r: UtilsVerifyResult): ReuseVerific
251
273
  * and no verdict. A verifier that cannot run is not evidence against the file, and
252
274
  * refusing a report on a malfunction would deliver nothing to the customer.
253
275
  */
254
- export declare function rederiveReuse(record: ReuseRecord): Promise<ReuseRederivation>;
276
+ /** A decline the run documented in a delivered file and then removed from it before
277
+ * delivery. Read exactly like a marker still in the file — the record of the decline
278
+ * belongs to the run, not to the customer's copy. */
279
+ /** A decline the run removed from a delivered file. `file` is a runtime tag the
280
+ * submit path puts on when it reads the record, so a consumption can be attributed
281
+ * back to the file it came from; it is not part of what is persisted. */
282
+ export type CarriedDecline =
283
+ /** A `reuse-verify: allow` decline: the finding it documented, by kind and helper. */
284
+ {
285
+ kind: UtilsViolationKind;
286
+ helper: string;
287
+ keptInline?: undefined;
288
+ file?: string;
289
+ }
290
+ /** A `// kept inline:` decline: the page-object file basename it named, and the
291
+ * reason it gave. The reason is the part the customer's report shows, so dropping
292
+ * it silently emptied the report's `skipped` list on a later submission. */
293
+ | {
294
+ keptInline: string;
295
+ reason: string;
296
+ kind?: undefined;
297
+ helper?: undefined;
298
+ file?: string;
299
+ };
300
+ /**
301
+ * The shared-helper record for a delivered test that has NO reuse record — derived
302
+ * from the file's own imports.
303
+ *
304
+ * The record the report normally carries is written by the verify pass, so a row
305
+ * only got one when the agent chose to call `skyramp_reuse_code` with
306
+ * `verify: true` on that file. That keys the report on the tool's activity rather
307
+ * than on the product: a contract test whose delivered file imports and calls three
308
+ * helpers reported `reuse: null`, which a reader cannot tell from "did not reuse".
309
+ *
310
+ * So where no record exists, the row is answered from the delivered file instead.
311
+ * What this can state is exactly what the file proves — which module, which helpers
312
+ * taken from it. It states NO `verification`: nothing verified this spec, and an
313
+ * optional member that is absent means "not measured", never "false". It raises no
314
+ * blocking verdict for the same reason — a file the gates never walked must not
315
+ * start failing a report at submission time.
316
+ *
317
+ * Returns `notDerived` with a stated reason where the file cannot answer, because a
318
+ * bare `null` is indistinguishable from "did not reuse" and is read as a fault.
319
+ *
320
+ * The reason names what was LOOKED AT, not what exists. `locateUtilsFiles` returns
321
+ * the modules this run wrote or changed beside the spec, plus the ones the spec
322
+ * imports — it does not enumerate the directory, so a clean tracked module beside a
323
+ * spec that imports nothing is not among them. Saying "no module was found here"
324
+ * would assert a sweep that did not happen, which is the same overclaim as the row
325
+ * this function exists to replace.
326
+ */
327
+ export declare function deriveReuseFromDelivered(testFile: string, language?: string): Promise<ReuseOutcome>;
328
+ export declare function rederiveReuse(record: ReuseRecord, carriedAllows?: CarriedDecline[]): Promise<ReuseRederivation>;
@@ -9,6 +9,8 @@ import { resolveRunStatePath, StateManager, } from "../../utils/AnalysisStateMan
9
9
  import { verifyReuse, } from "../../utils/pom-verify/index.js";
10
10
  import { buildSkipped, findUnparsableKeptInline, flaggedFrom, mergeFlagged, verificationFrom, ReuseVerificationOutcome, HelperVerificationOutcome, } from "./reuse-outcome.js";
11
11
  import { verifyUtils, realpath, utilsSpecFor, countAssertions, hasPageErrorGuard, utilsSpecForFile, } from "../../utils/utils-verify/index.js";
12
+ import { readDeliveredImports } from "../../utils/utils-verify/delivered-imports.js";
13
+ import { hasUtilsHeader } from "../../utils/utils-verify/locate.js";
12
14
  import { detectGitRoot } from "../../utils/gitStaging.js";
13
15
  import { formatUtilsVerifyText } from "./utils-verify-gates.js";
14
16
  import { composeVerifyText, infraGateFailure, zeroReuseGateFailure, } from "./verify-gates.js";
@@ -45,7 +47,7 @@ async function updateReuseOutcome(testFile, patch, explicitStateFile) {
45
47
  return false;
46
48
  const key = path.basename(testFile);
47
49
  const existing = data.reuseOutcomes?.[key] ?? {};
48
- await manager.writeData({
50
+ await manager.appendData({
49
51
  ...data,
50
52
  reuseOutcomes: {
51
53
  ...data.reuseOutcomes,
@@ -289,14 +291,18 @@ function canon(p) {
289
291
  }
290
292
  /** Verdict of one utils verify pass. The verdict alone is stored — counts and the
291
293
  * file list are re-derived from the delivered files at report time. */
292
- export async function recordUtilsVerifyOutcome(testFile, r, language, framework, testType, explicitStateFile) {
294
+ export async function recordUtilsVerifyOutcome(testFile, r, language, framework, testType, explicitStateFile,
295
+ /** The agent's declarations from this verify call, when it made any. */
296
+ inHouseDeclared) {
293
297
  // `ok` first: a baseline violation is a failed verify with or without a module
294
298
  // beside the spec (the live text says FAILED), and recording NoUtilsFile there
295
299
  // cleared the debt, let execution proceed, and left the fault to be refused first
296
- // at submit — the recorded verdict was a stale positive.
300
+ // at submit — the recorded verdict was a stale positive. A spec that calls the
301
+ // repository's own helpers and no Skyramp module was verified — the in-house
302
+ // checks ran — so it is a PASS, not "no utils file".
297
303
  const verification = !r.ok
298
304
  ? HelperVerificationOutcome.Failed
299
- : r.utilsFiles.length === 0
305
+ : r.utilsFiles.length === 0 && !r.inHouse
300
306
  ? HelperVerificationOutcome.NoUtilsFile
301
307
  : HelperVerificationOutcome.Passed;
302
308
  return updateReuseOutcome(testFile, (existing) => {
@@ -318,6 +324,11 @@ export async function recordUtilsVerifyOutcome(testFile, r, language, framework,
318
324
  testType: testType ?? prior?.testType,
319
325
  verification,
320
326
  verifyError: false,
327
+ // The latest declaration stands; a verify call that declares nothing
328
+ // keeps the one before it — the agent is told to declare once.
329
+ ...((inHouseDeclared ?? prior?.inHouseDeclared)
330
+ ? { inHouseDeclared: inHouseDeclared ?? prior?.inHouseDeclared }
331
+ : {}),
321
332
  },
322
333
  };
323
334
  }, explicitStateFile);
@@ -402,7 +413,9 @@ export async function pendingModularization(testFile, explicitStateFile) {
402
413
  return undefined;
403
414
  if (!(await runStateWritable(explicitStateFile)))
404
415
  return undefined;
405
- return (`${path.basename(testFile)} was generated with code reuse enabled, and its flow modularizes BEFORE reuse: ` +
416
+ return ((handOff.source === "maintenance"
417
+ ? `${path.basename(testFile)} was updated by this run's maintenance step, and its flow modularizes BEFORE reuse: `
418
+ : `${path.basename(testFile)} was generated with code reuse enabled, and its flow modularizes BEFORE reuse: `) +
406
419
  `modularization is what creates the named helpers reuse consolidates. Call skyramp_modularization with ` +
407
420
  `{ testFile: "${testFile}", testType: "${handOff.testType}", isTraceBased: true }, apply the returned instructions to the file, ` +
408
421
  `then call skyramp_reuse_code again with the same arguments.`);
@@ -486,7 +499,7 @@ export async function pendingUtilsVerification(testFile, explicitStateFile) {
486
499
  * hand-off text, so the debt can never be owed for a test that was never told to
487
500
  * pay it (a gate that cannot be satisfied is the SKYR-4115 failure inverted).
488
501
  */
489
- export async function recordReuseHandOff(files, testType, language, framework, explicitStateFile) {
502
+ export async function recordReuseHandOff(files, testType, language, framework, explicitStateFile, source = "generation") {
490
503
  if (files.length === 0)
491
504
  return;
492
505
  // A language the utils verifier does not cover (Java) has no payable reuse half —
@@ -501,10 +514,18 @@ export async function recordReuseHandOff(files, testType, language, framework, e
501
514
  const data = await manager.readData();
502
515
  if (!data)
503
516
  return;
517
+ // A REGENERATE marks its file as maintenance before the generation call it
518
+ // prescribes records the same file as generation. The rewrite is still the
519
+ // maintenance of a file at HEAD, so the origin is never demoted.
504
520
  const entries = {};
505
- for (const f of files)
506
- entries[await realpath(f)] = { testType, language, framework };
507
- await manager.writeData({
521
+ for (const f of files) {
522
+ const key = await realpath(f);
523
+ const origin = data.reuseHandOffs?.[key]?.source === "maintenance"
524
+ ? "maintenance"
525
+ : source;
526
+ entries[key] = { testType, language, framework, source: origin };
527
+ }
528
+ await manager.appendData({
508
529
  ...data,
509
530
  reuseHandOffs: { ...data.reuseHandOffs, ...entries },
510
531
  });
@@ -516,10 +537,12 @@ export async function recordReuseHandOff(files, testType, language, framework, e
516
537
  });
517
538
  }
518
539
  }
519
- /** True when `file` is not in HEAD — i.e. this run created it. The chain debt applies
520
- * only to tests generation wrote; pre-existing tests in the same directory are
521
- * executed by the same tool and must never be held to it. Fails open (false) when
522
- * git cannot answer. */
540
+ /** True when `file` is not in HEAD — i.e. this run created it. Consulted only for a
541
+ * GENERATION hand-off: that debt applies to the tests generation wrote, and a
542
+ * pre-existing test in the same directory, executed by the same tool, must never be
543
+ * held to it. A maintenance hand-off names a file this run rewrote in place, which
544
+ * is at HEAD by definition, so its callers do not ask. Fails open (false) when git
545
+ * cannot answer. */
523
546
  async function isNewInRepo(file) {
524
547
  const root = detectGitRoot(file);
525
548
  if (!root)
@@ -556,12 +579,20 @@ async function isNewInRepo(file) {
556
579
  }
557
580
  }
558
581
  /**
559
- * Does this spec owe the modularize→reuse pair its generation handed off? The
582
+ * Does this spec owe the modularize→reuse pair it was handed off? The
560
583
  * chain-compliance half of SKYR-4220: 2 of 8 SKYR-4196 Part B runs wrote a second
561
- * integration test's imports by hand and skipped the pair. A hand-off of the spec's
562
- * test type exists for its directory (integration, or ui since SKYR-4224), the spec
563
- * is new in this run, and no reuse pass was ever recorded for it → refuse, naming
564
- * the two calls. Fails open on everything else.
584
+ * integration test's imports by hand and skipped the pair. A hand-off names this
585
+ * exact file with the spec's test type (integration, or ui since SKYR-4224) and no
586
+ * reuse pass was ever recorded for it → refuse, naming the two calls. Fails open on
587
+ * everything else.
588
+ *
589
+ * Whether the file is at HEAD matters only for a GENERATION hand-off: the
590
+ * `isNewInRepo` guard exists for a pre-existing test that a stale hand-off names
591
+ * although this run never wrote it (measured 2026-08-26: two maintained tests
592
+ * blocked on a debt they never owed). A MAINTENANCE hand-off is recorded by
593
+ * skyramp_actions for the file it told the agent to update or regenerate — at HEAD
594
+ * by definition — so that file owes the pair whether or not it is present at HEAD,
595
+ * and the guard is not consulted.
565
596
  */
566
597
  export async function pendingReuseChain(testFile, explicitStateFile, testType) {
567
598
  try {
@@ -590,9 +621,12 @@ export async function pendingReuseChain(testFile, explicitStateFile, testType) {
590
621
  return undefined;
591
622
  if (record && reuseRan(record))
592
623
  return undefined;
593
- if (!(await isNewInRepo(testFile)))
624
+ const maintained = handOff.source === "maintenance";
625
+ if (!maintained && !(await isNewInRepo(testFile)))
594
626
  return undefined;
595
- return (`${path.basename(testFile)} was generated with code reuse enabled, but its modularize→reuse steps were never run. ` +
627
+ return ((maintained
628
+ ? `${path.basename(testFile)} was updated by this run's maintenance step, and the modularize→reuse steps it owes were never run. `
629
+ : `${path.basename(testFile)} was generated with code reuse enabled, but its modularize→reuse steps were never run. `) +
596
630
  `First call skyramp_modularization with { testFile: "${testFile}", testType: "${handOff.testType}", isTraceBased: true } and apply the result; ` +
597
631
  `then, as the very next skyramp call, skyramp_reuse_code with { testFile: "${testFile}", language: "${handOff.language}", framework: "${handOff.framework}", testType: "${handOff.testType}" } ` +
598
632
  `and follow its steps (including its final verify: true call). A "nothing to reuse" result is normal — do not retry.`);
@@ -620,11 +654,15 @@ export async function pendingReuseDebt(testFile, explicitStateFile, testType, op
620
654
  /**
621
655
  * Report-time chain verdict for one report row. `fileName` is a basename, so it is
622
656
  * matched against the basenames of the handed-off files of the same test type. True
623
- * only when such a file exists, is new in this run, and no reuse record was ever
624
- * written for that basename never `false`, so a consumer omits rather than renders a
657
+ * only when such a file exists, this run wrote it (generation hand-off, new in the
658
+ * repo) or rewrote it (maintenance hand-off), and no reuse record was ever written
659
+ * for that basename — never `false`, so a consumer omits rather than renders a
625
660
  * negative.
626
661
  */
627
- export async function reuseChainSkipped(fileName, testType, record, handOffs) {
662
+ export async function reuseChainSkipped(fileName, testType, record,
663
+ /** Optional because `reuseHandOffs` is optional on the run state: a run that
664
+ * armed nothing never writes the field. */
665
+ handOffs) {
628
666
  // Same rule as the gate: a foreign record fails open; the owner's record suppresses
629
667
  // the signal only when reuse was actually issued for it.
630
668
  if (!handOffs)
@@ -646,9 +684,9 @@ export async function reuseChainSkipped(fileName, testType, record, handOffs) {
646
684
  catch {
647
685
  continue;
648
686
  }
649
- // The hand-off names files generation wrote, so newness is implied — but the
650
- // guard is kept for state written by an older recorder that keyed directories.
651
- if (await isNewInRepo(file))
687
+ // A maintenance hand-off names a file at HEAD; the newness guard is for a
688
+ // generation hand-off only (see isNewInRepo).
689
+ if (h.source === "maintenance" || (await isNewInRepo(file)))
652
690
  return true;
653
691
  }
654
692
  return undefined;
@@ -687,7 +725,7 @@ export const REUSE_SUBMIT_MAX_REFUSALS = 2;
687
725
  * raised whether or not a utils file was located: a spec that drops below its
688
726
  * modularization baseline is below it with or without a module beside it.
689
727
  */
690
- async function rederiveHelperOutcome(record) {
728
+ async function rederiveHelperOutcome(record, carriedAllows) {
691
729
  const { testFilePath, language } = record;
692
730
  if (!testFilePath || !language)
693
731
  return { outcome: undefined };
@@ -696,6 +734,8 @@ async function rederiveHelperOutcome(record) {
696
734
  language,
697
735
  testType: record.utils?.testType,
698
736
  baseline: record.baseline,
737
+ // Only the utils grammar's declines mean anything to this verifier.
738
+ carriedAllows: (carriedAllows ?? []).filter((c) => c.kind !== undefined),
699
739
  });
700
740
  const failures = r.ok ? [] : verificationFailures(r);
701
741
  const blocking = r.ok
@@ -716,8 +756,47 @@ async function rederiveHelperOutcome(record) {
716
756
  unextractedDuplicateSites: r.unextractedDuplicates.reduce((n, d) => n + d.sites.length, 0),
717
757
  }
718
758
  : {};
759
+ // The repository's own modules the spec imports, measured now like everything
760
+ // else, with the agent's declarations attached and labelled as such by the type.
761
+ const inHouse = r.inHouse
762
+ ? {
763
+ modules: r.inHouse.modules.map((m) => utilsFileLabel([m])),
764
+ helpersUsed: r.inHouse.resolved,
765
+ helpersAdded: r.inHouse.added.map((a) => ({
766
+ module: utilsFileLabel([a.file]),
767
+ helper: a.helper,
768
+ })),
769
+ helpersWidened: r.inHouse.widened.map((a) => ({
770
+ module: utilsFileLabel([a.file]),
771
+ helper: a.helper,
772
+ })),
773
+ additiveGateRan: r.inHouse.additiveGateRan,
774
+ ...(record.utils?.inHouseDeclared
775
+ ? {
776
+ filesRead: record.utils.inHouseDeclared.filesRead,
777
+ ...(record.utils.inHouseDeclared.declined.length > 0
778
+ ? { declined: record.utils.inHouseDeclared.declined }
779
+ : {}),
780
+ }
781
+ : {}),
782
+ // With no Skyramp module there is no helpers row to carry the verdict.
783
+ ...(r.utilsFiles.length === 0
784
+ ? {
785
+ verification: r.ok
786
+ ? HelperVerificationOutcome.Passed
787
+ : HelperVerificationOutcome.Failed,
788
+ ...(r.ok ? {} : { verificationFailures: failures }),
789
+ }
790
+ : {}),
791
+ }
792
+ : undefined;
719
793
  if (r.utilsFiles.length === 0)
720
- return { outcome: unextracted, blocking };
794
+ return {
795
+ outcome: { ...unextracted, ...(inHouse ? { inHouse } : {}) },
796
+ blocking,
797
+ carriedConsumed: r.carriedConsumed,
798
+ carriedEvaluated: true,
799
+ };
721
800
  // Two faults, two fields: a deleted guard is not a lost assertion, and a reader
722
801
  // acting on the row must not be sent after the wrong one. The count is MEASURED:
723
802
  // a `reuse-verify: allow` marker documents a loss and clears the verdict, it does
@@ -726,6 +805,8 @@ async function rederiveHelperOutcome(record) {
726
805
  const assertionLoss = [...r.violations, ...r.allowed].some((v) => v.kind === "assertion-loss");
727
806
  const guardRemoved = r.violations.some((v) => v.kind === "guard-removed");
728
807
  return {
808
+ carriedConsumed: r.carriedConsumed,
809
+ carriedEvaluated: true,
729
810
  outcome: {
730
811
  ...unextracted,
731
812
  helpers: {
@@ -750,6 +831,7 @@ async function rederiveHelperOutcome(record) {
750
831
  : HelperVerificationOutcome.Failed,
751
832
  ...(r.ok ? {} : { verificationFailures: failures }),
752
833
  },
834
+ ...(inHouse ? { inHouse } : {}),
753
835
  },
754
836
  blocking,
755
837
  };
@@ -817,44 +899,61 @@ async function coverageFrom(testFilePath, specContent) {
817
899
  }
818
900
  }
819
901
  /**
820
- * Re-derive a recorded outcome from the spec as it stands NOW, so the report
821
- * describes the delivered artifact rather than the state at verify time.
822
- *
823
- * The two can differ: the execution fix-up may restore `<testFile>.raw.bak` over
824
- * the spec after verification, reverting every substitution with a plain `cp` that
825
- * this tool never sees. Trusting the recorded counts there would publish
826
- * `callsReused: 5, verification: "passed"` for a spec containing no POM calls —
827
- * a confident false claim, strictly worse than the silence this feature replaced.
828
- * Re-deriving here rather than requiring a final `verify: true` pass is deliberate:
829
- * the report step always runs, so the agent cannot skip it.
902
+ * The shared-helper record for a delivered test that has NO reuse record derived
903
+ * from the file's own imports.
830
904
  *
831
- * `candidatesDetected` is kept as recorded it counts POM FILES that detection
832
- * found, which a restore does not change. Everything else comes from the file.
905
+ * The record the report normally carries is written by the verify pass, so a row
906
+ * only got one when the agent chose to call `skyramp_reuse_code` with
907
+ * `verify: true` on that file. That keys the report on the tool's activity rather
908
+ * than on the product: a contract test whose delivered file imports and calls three
909
+ * helpers reported `reuse: null`, which a reader cannot tell from "did not reuse".
833
910
  *
834
- * `verification` is dropped when the delivered spec reuses nothing: a PASSED
835
- * verdict describes a spec that no longer exists, and pairing it with a zero count
836
- * reads as though the empty result had been blessed.
911
+ * So where no record exists, the row is answered from the delivered file instead.
912
+ * What this can state is exactly what the file proves which module, which helpers
913
+ * taken from it. It states NO `verification`: nothing verified this spec, and an
914
+ * optional member that is absent means "not measured", never "false". It raises no
915
+ * blocking verdict for the same reason — a file the gates never walked must not
916
+ * start failing a report at submission time.
837
917
  *
838
- * Returns the recorded outcome minus internals when re-derivation is impossible
839
- * (no path recorded now only the no-POM-layer path, which has no spec to measure
840
- * and no candidates to contrast against), and no outcome when it fails outright.
841
- * Failing closed matters: falling back to the recorded counts is exactly the false
842
- * claim this exists to prevent.
918
+ * Returns `notDerived` with a stated reason where the file cannot answer, because a
919
+ * bare `null` is indistinguishable from "did not reuse" and is read as a fault.
843
920
  *
844
- * Beside the outcome comes the blocking verdict the delivered files earn under the
845
- * live check see {@link ReuseBlockingVerdict}. One measurement feeds both: the row
846
- * the report publishes and the refusal `skyramp_submit_report` returns. That half
847
- * fails OPEN like every reuse check: a re-derivation that throws yields no outcome
848
- * and no verdict. A verifier that cannot run is not evidence against the file, and
849
- * refusing a report on a malfunction would deliver nothing to the customer.
921
+ * The reason names what was LOOKED AT, not what exists. `locateUtilsFiles` returns
922
+ * the modules this run wrote or changed beside the spec, plus the ones the spec
923
+ * imports it does not enumerate the directory, so a clean tracked module beside a
924
+ * spec that imports nothing is not among them. Saying "no module was found here"
925
+ * would assert a sweep that did not happen, which is the same overclaim as the row
926
+ * this function exists to replace.
850
927
  */
851
- export async function rederiveReuse(record) {
928
+ export async function deriveReuseFromDelivered(testFile, language) {
929
+ // The shared module gets a report row of its own (the `skyrampUtils.ts` UPDATE or
930
+ // VERIFY row). It is not a test and has no reuse to state, so it gets nothing —
931
+ // the row stays as it is. A reason here would read as a fault on a file that has
932
+ // none, which is the mistake this whole function exists to stop making.
933
+ if (await hasUtilsHeader(testFile))
934
+ return {};
935
+ const read = await readDeliveredImports({ testFile, language });
936
+ if ("reason" in read)
937
+ return { notDerived: read.reason };
938
+ if (read.utilsFiles.length === 0)
939
+ return {
940
+ notDerived: "no shared helper module was located for this test: this run wrote or changed none beside it, and it imports none",
941
+ };
942
+ return {
943
+ helpers: {
944
+ utilsFile: utilsFileLabel(read.utilsFiles),
945
+ helpersImported: read.importedNames.length,
946
+ helperNames: read.importedNames,
947
+ },
948
+ };
949
+ }
950
+ export async function rederiveReuse(record, carriedAllows) {
852
951
  const { candidatesDetected, verification, flagged, testFilePath, language } = record;
853
952
  // A SkyrampUtils-path record has nothing for the POM verifier to measure; its
854
953
  // outcome is re-derived from the utils file instead.
855
954
  if (record.utils) {
856
955
  try {
857
- return await rederiveHelperOutcome(record);
956
+ return await rederiveHelperOutcome(record, carriedAllows);
858
957
  }
859
958
  catch (err) {
860
959
  logger.warning("Could not re-derive the shared-helper outcome from the delivered files — omitting it rather than reporting a stale verdict", { testFile: testFilePath, error: String(err) });
@@ -870,7 +969,9 @@ export async function rederiveReuse(record) {
870
969
  try {
871
970
  const r = await verifyReuse(testFilePath, language);
872
971
  const specContent = await readFile(testFilePath, "utf8");
873
- const blocking = await pomBlockingVerdict(testFilePath, language, r);
972
+ const carriedKeptInline = (carriedAllows ?? []).filter((c) => c.keptInline !== undefined);
973
+ const classification = { covered: new Set(), ran: false };
974
+ const blocking = await pomBlockingVerdict(testFilePath, language, r, carriedKeptInline.map((c) => c.keptInline), classification);
874
975
  // Diagnose the file the report is actually built from. A marker the zero-reuse
875
976
  // gate accepts but this cannot parse satisfies the escape hatch while its
876
977
  // decline never reaches the report — silent signal loss is the failure class
@@ -880,7 +981,19 @@ export async function rederiveReuse(record) {
880
981
  logger.warning("Malformed `// kept inline:` marker(s) in the delivered spec — these declines will be missing from the PR report. " +
881
982
  "Use `// kept inline: <file basename> — <reason>` (em dash, or a hyphen with spaces around it).", { testFile: testFilePath, markers: unparsable });
882
983
  }
883
- const skipped = buildSkipped(specContent, flagged);
984
+ // Declines this run removed from the spec before delivery are put back for the
985
+ // REPORT, not for the file. `buildSkipped` reads the markers out of the delivered
986
+ // spec and this run took them out, so without this the report loses a decline it
987
+ // disclosed on the submission that stripped it.
988
+ //
989
+ // Fed through `buildSkipped` rather than appended: that function also decides
990
+ // `declinedBy`, and sometimes `member`. A raw append emitted neither, so two
991
+ // identical submissions produced different reports.
992
+ const carriedMarkers = (carriedAllows ?? [])
993
+ .filter((c) => c.keptInline !== undefined)
994
+ .map((c) => `// kept inline: ${c.keptInline} — ${c.reason}`)
995
+ .join("\n");
996
+ const skipped = buildSkipped(carriedMarkers ? `${specContent}\n${carriedMarkers}\n` : specContent, flagged);
884
997
  const coverage = await coverageFrom(testFilePath, specContent);
885
998
  const reuseHappened = r.reusedCalls > 0;
886
999
  const outcome = {
@@ -918,7 +1031,18 @@ export async function rederiveReuse(record) {
918
1031
  ...(blocking ? { verificationFailures: blocking.failures } : {}),
919
1032
  skipped: skipped.length > 0 ? skipped : undefined,
920
1033
  };
921
- return { outcome, blocking };
1034
+ return {
1035
+ outcome,
1036
+ blocking,
1037
+ // A kept-inline decline is consumed when the candidate it names is still one the
1038
+ // gate would otherwise report. One that covers nothing is retired with the rest.
1039
+ carriedConsumed: carriedKeptInline.filter((c) => classification.covered.has(c.keptInline)),
1040
+ // Only where the gate WALKED the candidates. The infra gate takes precedence
1041
+ // over it, an unknown language skips it and a scoping failure falls back — each
1042
+ // leaves nothing covered while classifying nothing, and retiring on that deletes
1043
+ // permission for a candidate still undocumented in the spec.
1044
+ carriedEvaluated: classification.ran,
1045
+ };
922
1046
  }
923
1047
  catch (err) {
924
1048
  logger.warning("Could not re-derive the POM-reuse outcome from the delivered spec — omitting the reuse summary rather than reporting counts that may no longer hold", { testFile: testFilePath, error: String(err) });
@@ -943,7 +1067,11 @@ export async function rederiveReuse(record) {
943
1067
  * record that never held it. Fails open when a gate throws — a gate that cannot run
944
1068
  * is no evidence.
945
1069
  */
946
- async function pomBlockingVerdict(testFile, language, r) {
1070
+ async function pomBlockingVerdict(testFile, language, r, carriedKeptInline,
1071
+ /** Filled with what the zero-reuse gate did — see `zeroReuseGateFailure`. `ran`
1072
+ * stays false on every path that returns before the candidate walk, including the
1073
+ * unknown language and the infra-gate precedence below. */
1074
+ classification) {
947
1075
  // The record's language was written from the reuse tool's validated `language`
948
1076
  // param, but the record type keeps it a string: a value outside the enum means a
949
1077
  // check that cannot run, and a check that cannot run does not block.
@@ -962,7 +1090,9 @@ async function pomBlockingVerdict(testFile, language, r) {
962
1090
  try {
963
1091
  infra = await infraGateFailure(target, r);
964
1092
  zero =
965
- infra === undefined ? await zeroReuseGateFailure(target, r) : undefined;
1093
+ infra === undefined
1094
+ ? await zeroReuseGateFailure(target, r, carriedKeptInline, classification)
1095
+ : undefined;
966
1096
  }
967
1097
  catch (err) {
968
1098
  logger.warning("Report-time POM gate threw — not refusing the report on a check that could not run", { testFile, error: String(err) });
@@ -19,6 +19,10 @@ export interface UtilsVerifyContext {
19
19
  staged?: string[];
20
20
  /** Utils files `git add` refused in a testbot run — a failed verification on its own. */
21
21
  unstaged?: string[];
22
+ /** The repository's own modules this run changed that `git add` refused. Rendered
23
+ * apart from `unstaged`: the remedy for a Skyramp module (move it, un-ignore it)
24
+ * is an edit to the customer's repository when the file is theirs. */
25
+ unstagedInHouse?: string[];
22
26
  /** Whether the verdict reached run state. When it did not, the checkpoints fail
23
27
  * open on the unwritable state file — the agent is told rather than left to loop. */
24
28
  recorded?: boolean;