@herbertgao/pi-extensions 2026.10.1 → 2026.10.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 (707) hide show
  1. package/README.md +13 -9
  2. package/THIRD_PARTY_NOTICES.md +2 -2
  3. package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-audit.md +2 -2
  4. package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-debt.md +2 -2
  5. package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-gain.md +1 -1
  6. package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-help.md +1 -1
  7. package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-review.md +2 -2
  8. package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail.md +1 -1
  9. package/node_modules/@dietrichgebert/ponytail/.qoder/rules/ponytail.md +21 -21
  10. package/node_modules/@dietrichgebert/ponytail/.qoder-plugin/plugin.json +1 -1
  11. package/node_modules/@dietrichgebert/ponytail/AGENTS.md +21 -21
  12. package/node_modules/@dietrichgebert/ponytail/README.md +68 -72
  13. package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-activate.js +7 -0
  14. package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-instructions.js +30 -30
  15. package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-map.js +103 -0
  16. package/node_modules/@dietrichgebert/ponytail/package.json +2 -2
  17. package/node_modules/@dietrichgebert/ponytail/skills/ponytail/SKILL.md +33 -101
  18. package/node_modules/@dietrichgebert/ponytail/skills/ponytail-audit/SKILL.md +89 -32
  19. package/node_modules/@dietrichgebert/ponytail/skills/ponytail-debt/SKILL.md +13 -12
  20. package/node_modules/@dietrichgebert/ponytail/skills/ponytail-gain/SKILL.md +17 -16
  21. package/node_modules/@dietrichgebert/ponytail/skills/ponytail-help/SKILL.md +9 -10
  22. package/node_modules/@dietrichgebert/ponytail/skills/ponytail-review/SKILL.md +96 -57
  23. package/node_modules/@herbertgao/pi-agency/LICENSE +21 -0
  24. package/node_modules/@herbertgao/pi-agency/README.md +40 -0
  25. package/node_modules/@herbertgao/pi-agency/package.json +53 -0
  26. package/node_modules/@herbertgao/pi-agency/src/index.ts +441 -0
  27. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/compact-thinking.ts +12 -12
  28. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/compact-mode.ts +30 -6
  29. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/default-mode.ts +15 -9
  30. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/interaction.ts +27 -9
  31. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/codemode.ts +4 -1
  32. package/node_modules/@herbertgao/pi-cc-extensions/package.json +2 -2
  33. package/node_modules/@narumitw/pi-caffeinate/package.json +3 -3
  34. package/node_modules/@tifan/pi-mermaid-open/package.json +5 -1
  35. package/node_modules/@tifan/pi-mermaid-open/src/index.ts +26 -9
  36. package/node_modules/@tifan/pi-recap/package.json +1 -1
  37. package/node_modules/@tifan/pi-recap/src/index.ts +104 -20
  38. package/node_modules/@tifan/pi-recap/src/models.ts +46 -4
  39. package/node_modules/pi-antigravity/README.md +23 -2
  40. package/node_modules/pi-antigravity/package.json +5 -3
  41. package/node_modules/pi-antigravity/src/diagnostics/diagnostics.ts +3 -2
  42. package/node_modules/pi-antigravity/src/features/generate-image.ts +72 -0
  43. package/node_modules/pi-antigravity/src/features/google-search.ts +71 -0
  44. package/node_modules/pi-antigravity/src/image/image.ts +86 -47
  45. package/node_modules/pi-antigravity/src/image/native.ts +69 -0
  46. package/node_modules/pi-antigravity/src/index.ts +52 -137
  47. package/node_modules/pi-antigravity/src/search/search.ts +130 -31
  48. package/node_modules/pi-antigravity/src/stream/stream.ts +162 -113
  49. package/node_modules/pi-antigravity/src/types/enums.ts +1 -0
  50. package/node_modules/pi-antigravity/src/types/types.ts +1 -1
  51. package/node_modules/pi-antigravity/src/utils/security.ts +47 -1
  52. package/node_modules/pi-antigravity/src/utils/util.ts +38 -6
  53. package/node_modules/pi-lens/CHANGELOG.md +1064 -0
  54. package/node_modules/pi-lens/README.md +115 -25
  55. package/node_modules/pi-lens/config/dependency-cruiser-eager-allowlist.json +6 -2
  56. package/node_modules/pi-lens/dist/chunk-22AVIGXS.js +560 -0
  57. package/node_modules/pi-lens/dist/chunk-27BBHSZC.js +106 -0
  58. package/node_modules/pi-lens/dist/chunk-2BEMIWEW.js +51 -0
  59. package/node_modules/pi-lens/dist/chunk-2EECBNC5.js +89 -0
  60. package/node_modules/pi-lens/dist/chunk-34U7PLGE.js +23 -0
  61. package/node_modules/pi-lens/dist/chunk-3I5QFT3N.js +181 -0
  62. package/node_modules/pi-lens/dist/chunk-3MED75HT.js +37 -0
  63. package/node_modules/pi-lens/dist/chunk-47D2BO4S.js +87 -0
  64. package/node_modules/pi-lens/dist/chunk-4RERDEXR.js +348 -0
  65. package/node_modules/pi-lens/dist/chunk-4W2PLC4J.js +27 -0
  66. package/node_modules/pi-lens/dist/chunk-52H5B5TC.js +202 -0
  67. package/node_modules/pi-lens/dist/chunk-54B42YRX.js +27 -0
  68. package/node_modules/pi-lens/dist/chunk-5RXBNSW2.js +266 -0
  69. package/node_modules/pi-lens/dist/chunk-5THXD6X5.js +201 -0
  70. package/node_modules/pi-lens/dist/chunk-5W3R6LFT.js +24 -0
  71. package/node_modules/pi-lens/dist/chunk-5ZEJHV35.js +341 -0
  72. package/node_modules/pi-lens/dist/chunk-6P62QVEA.js +118 -0
  73. package/node_modules/pi-lens/dist/chunk-6QIUX4EP.js +459 -0
  74. package/node_modules/pi-lens/dist/chunk-6VCD4VKZ.js +78 -0
  75. package/node_modules/pi-lens/dist/chunk-7F72PXY2.js +326 -0
  76. package/node_modules/pi-lens/dist/chunk-7FBF7NPR.js +998 -0
  77. package/node_modules/pi-lens/dist/chunk-7U2IDNXN.js +37 -0
  78. package/node_modules/pi-lens/dist/chunk-ABBOA7UD.js +157 -0
  79. package/node_modules/pi-lens/dist/chunk-AHDW3GPE.js +50 -0
  80. package/node_modules/pi-lens/dist/chunk-AJ3QXTRQ.js +756 -0
  81. package/node_modules/pi-lens/dist/chunk-AJVLWNFN.js +1610 -0
  82. package/node_modules/pi-lens/dist/chunk-AJXODZY6.js +112 -0
  83. package/node_modules/pi-lens/dist/chunk-ARFCXG7S.js +84 -0
  84. package/node_modules/pi-lens/dist/chunk-AS44CFQ4.js +708 -0
  85. package/node_modules/pi-lens/dist/chunk-AWE5TMPO.js +38 -0
  86. package/node_modules/pi-lens/dist/chunk-B3I2UUT4.js +4692 -0
  87. package/node_modules/pi-lens/dist/chunk-BRJKOBZP.js +331 -0
  88. package/node_modules/pi-lens/dist/chunk-BW5KFIQC.js +59 -0
  89. package/node_modules/pi-lens/dist/chunk-C2AUYXQH.js +149 -0
  90. package/node_modules/pi-lens/dist/chunk-CGGAIP7J.js +29 -0
  91. package/node_modules/pi-lens/dist/chunk-D6QS3U6M.js +30 -0
  92. package/node_modules/pi-lens/dist/chunk-DFVMIKMQ.js +349 -0
  93. package/node_modules/pi-lens/dist/chunk-DIULIWKU.js +169 -0
  94. package/node_modules/pi-lens/dist/chunk-DQ2NZ7C4.js +2317 -0
  95. package/node_modules/pi-lens/dist/chunk-E2WFBRHM.js +213 -0
  96. package/node_modules/pi-lens/dist/chunk-E4MAEDPM.js +50 -0
  97. package/node_modules/pi-lens/dist/chunk-EOKRQ3SA.js +30 -0
  98. package/node_modules/pi-lens/dist/chunk-F3AU2TMM.js +2626 -0
  99. package/node_modules/pi-lens/dist/chunk-F3P7VQ7H.js +170 -0
  100. package/node_modules/pi-lens/dist/chunk-FC4RP4I2.js +12 -0
  101. package/node_modules/pi-lens/dist/chunk-FJNKANOS.js +32 -0
  102. package/node_modules/pi-lens/dist/chunk-GUOGVTCQ.js +146 -0
  103. package/node_modules/pi-lens/dist/chunk-GVXA6CCE.js +18 -0
  104. package/node_modules/pi-lens/dist/chunk-HHYAELLJ.js +2334 -0
  105. package/node_modules/pi-lens/dist/chunk-HMFXILPV.js +83 -0
  106. package/node_modules/pi-lens/dist/chunk-HVUZXSWK.js +421 -0
  107. package/node_modules/pi-lens/dist/chunk-HWBZIGMJ.js +62 -0
  108. package/node_modules/pi-lens/dist/chunk-I3R7GKDR.js +17 -0
  109. package/node_modules/pi-lens/dist/chunk-I7SPGOWI.js +55 -0
  110. package/node_modules/pi-lens/dist/chunk-IIXOAGHR.js +38 -0
  111. package/node_modules/pi-lens/dist/chunk-IVP5KAB7.js +2250 -0
  112. package/node_modules/pi-lens/dist/chunk-IXEBJSUE.js +22 -0
  113. package/node_modules/pi-lens/dist/chunk-JOLITGCC.js +27 -0
  114. package/node_modules/pi-lens/dist/chunk-K6VYLB2U.js +145 -0
  115. package/node_modules/pi-lens/dist/chunk-LJDODBBZ.js +78 -0
  116. package/node_modules/pi-lens/dist/chunk-LNAKEO63.js +78 -0
  117. package/node_modules/pi-lens/dist/chunk-LSMJ6KBE.js +4139 -0
  118. package/node_modules/pi-lens/dist/chunk-LW6XKDZQ.js +5565 -0
  119. package/node_modules/pi-lens/dist/chunk-N3YQJI6O.js +899 -0
  120. package/node_modules/pi-lens/dist/chunk-NABLC7W3.js +148 -0
  121. package/node_modules/pi-lens/dist/chunk-NKOUFPQF.js +659 -0
  122. package/node_modules/pi-lens/dist/chunk-NL5GLMFI.js +211 -0
  123. package/node_modules/pi-lens/dist/chunk-NMABWBZN.js +327 -0
  124. package/node_modules/pi-lens/dist/chunk-NTHH2J74.js +27 -0
  125. package/node_modules/pi-lens/dist/chunk-NTUJEGDZ.js +59 -0
  126. package/node_modules/pi-lens/dist/chunk-NXL4FFQQ.js +47 -0
  127. package/node_modules/pi-lens/dist/chunk-NXPS2L6U.js +466 -0
  128. package/node_modules/pi-lens/dist/chunk-O5WILGMI.js +42 -0
  129. package/node_modules/pi-lens/dist/chunk-O6TQT6RI.js +48 -0
  130. package/node_modules/pi-lens/dist/chunk-OAXNDZJ7.js +323 -0
  131. package/node_modules/pi-lens/dist/chunk-ODEEOXPH.js +44 -0
  132. package/node_modules/pi-lens/dist/chunk-OQGFCZJ4.js +4533 -0
  133. package/node_modules/pi-lens/dist/chunk-ORTMY4Q4.js +282 -0
  134. package/node_modules/pi-lens/dist/chunk-OS32RNR2.js +442 -0
  135. package/node_modules/pi-lens/dist/chunk-PAK6IDME.js +189 -0
  136. package/node_modules/pi-lens/dist/chunk-PWFHBTSF.js +406 -0
  137. package/node_modules/pi-lens/dist/chunk-Q5U6FMDI.js +2352 -0
  138. package/node_modules/pi-lens/dist/chunk-QOZXJ4NA.js +3364 -0
  139. package/node_modules/pi-lens/dist/chunk-QYF5S6P6.js +45 -0
  140. package/node_modules/pi-lens/dist/chunk-RIISMHKN.js +36 -0
  141. package/node_modules/pi-lens/dist/chunk-RPD4ZSB7.js +25 -0
  142. package/node_modules/pi-lens/dist/chunk-RPD5K5NC.js +79 -0
  143. package/node_modules/pi-lens/dist/chunk-RUOG5D2C.js +262 -0
  144. package/node_modules/pi-lens/dist/chunk-T4ERT73Y.js +599 -0
  145. package/node_modules/pi-lens/dist/chunk-T6D4Q4AQ.js +54 -0
  146. package/node_modules/pi-lens/dist/chunk-TGPXLY2J.js +391 -0
  147. package/node_modules/pi-lens/dist/chunk-TLGFBM3F.js +12116 -0
  148. package/node_modules/pi-lens/dist/chunk-TO6WL3GM.js +88 -0
  149. package/node_modules/pi-lens/dist/chunk-TT22N74J.js +517 -0
  150. package/node_modules/pi-lens/dist/chunk-TVN5N6GY.js +21216 -0
  151. package/node_modules/pi-lens/dist/chunk-U3VGR4VU.js +308 -0
  152. package/node_modules/pi-lens/dist/chunk-UK3CMEAL.js +1250 -0
  153. package/node_modules/pi-lens/dist/chunk-UOPVJQ4N.js +103 -0
  154. package/node_modules/pi-lens/dist/chunk-UXVNL3D7.js +23 -0
  155. package/node_modules/pi-lens/dist/chunk-UY752QSN.js +45 -0
  156. package/node_modules/pi-lens/dist/chunk-V5PXFSZK.js +188 -0
  157. package/node_modules/pi-lens/dist/chunk-V7R425XG.js +398 -0
  158. package/node_modules/pi-lens/dist/chunk-VCSRSYLF.js +81 -0
  159. package/node_modules/pi-lens/dist/chunk-VD4JQCQC.js +162 -0
  160. package/node_modules/pi-lens/dist/chunk-VDBPVIKD.js +62 -0
  161. package/node_modules/pi-lens/dist/chunk-VHQLPIRJ.js +114 -0
  162. package/node_modules/pi-lens/dist/chunk-VN2AXLEX.js +5414 -0
  163. package/node_modules/pi-lens/dist/chunk-VNMT7C64.js +478 -0
  164. package/node_modules/pi-lens/dist/chunk-WONERJTP.js +309 -0
  165. package/node_modules/pi-lens/dist/chunk-XECLWQZN.js +85 -0
  166. package/node_modules/pi-lens/dist/chunk-XIMYZ3JA.js +27 -0
  167. package/node_modules/pi-lens/dist/chunk-XK4CIILI.js +144 -0
  168. package/node_modules/pi-lens/dist/chunk-Y4T27COV.js +562 -0
  169. package/node_modules/pi-lens/dist/chunk-YGVYKNSN.js +1860 -0
  170. package/node_modules/pi-lens/dist/chunk-YLF3PPT5.js +308 -0
  171. package/node_modules/pi-lens/dist/chunk-YSNFMJKN.js +14 -0
  172. package/node_modules/pi-lens/dist/chunk-Z3CCVDUB.js +76 -0
  173. package/node_modules/pi-lens/dist/chunk-Z54ZSOBZ.js +61 -0
  174. package/node_modules/pi-lens/dist/chunk-ZAWW3AF6.js +97 -0
  175. package/node_modules/pi-lens/dist/chunk-ZMOL6RQC.js +167 -0
  176. package/node_modules/pi-lens/dist/index.js +16456 -8335
  177. package/node_modules/pi-lens/dist/mcp/analyze-cli.js +186 -232
  178. package/node_modules/pi-lens/dist/mcp/cli.js +137 -98
  179. package/node_modules/pi-lens/dist/mcp/server.js +22589 -1573
  180. package/node_modules/pi-lens/dist/mcp/worker.js +97 -38
  181. package/node_modules/pi-lens/dist/probes/installer.js +135 -0
  182. package/node_modules/pi-lens/dist/workers/project-snapshot-persist-worker.js +22 -0
  183. package/node_modules/pi-lens/dist/workers/review-graph-persist-worker.js +15 -0
  184. package/node_modules/pi-lens/docs/agent-guide.md +13 -4
  185. package/node_modules/pi-lens/docs/agent-tools.md +42 -0
  186. package/node_modules/pi-lens/docs/ast-grep_rules_catalog.md +3 -2
  187. package/node_modules/pi-lens/docs/configuration.md +20 -1
  188. package/node_modules/pi-lens/docs/environment-variables.md +52 -2
  189. package/node_modules/pi-lens/docs/features.md +8 -4
  190. package/node_modules/pi-lens/docs/globalconfig.md +1 -0
  191. package/node_modules/pi-lens/docs/io-bridge-v2-migration.md +94 -0
  192. package/node_modules/pi-lens/docs/lsp-capability-matrix.md +36 -4
  193. package/node_modules/pi-lens/docs/lsp-idle-eviction.md +124 -0
  194. package/node_modules/pi-lens/docs/mcp.md +21 -5
  195. package/node_modules/pi-lens/docs/merge-queue-rollout.md +77 -0
  196. package/node_modules/pi-lens/docs/pi-lens-fixer.md +156 -88
  197. package/node_modules/pi-lens/docs/pi-lens-investigator.md +74 -26
  198. package/node_modules/pi-lens/docs/pi-lens-merge-policy.md +694 -0
  199. package/node_modules/pi-lens/docs/pi-lens-monitor.md +73 -7
  200. package/node_modules/pi-lens/docs/pi-lens-retro.md +6 -4
  201. package/node_modules/pi-lens/docs/pi-lens-reviewer.md +188 -48
  202. package/node_modules/pi-lens/docs/pi-lens-subagent.md +246 -45
  203. package/node_modules/pi-lens/docs/pi-lens-warden.md +18 -7
  204. package/node_modules/pi-lens/docs/public-api-stability.md +55 -0
  205. package/node_modules/pi-lens/docs/release-qa-baseline.md +84 -17
  206. package/node_modules/pi-lens/docs/rfcs/3654-unified-io-bridge-v2.md +316 -0
  207. package/node_modules/pi-lens/docs/servercapabilities.md +53 -49
  208. package/node_modules/pi-lens/docs/settings.md +1 -0
  209. package/node_modules/pi-lens/docs/usage.md +5 -1
  210. package/node_modules/pi-lens/grammars/tree-sitter-bash.wasm +0 -0
  211. package/node_modules/pi-lens/grammars/tree-sitter-bash.wasm.json +3 -3
  212. package/node_modules/pi-lens/package.json +18 -6
  213. package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/advisory-registry-subset-test.yml +41 -0
  214. package/node_modules/pi-lens/rules/ast-grep-rules/rules/advisory-registry-subset.yml +50 -0
  215. package/node_modules/pi-lens/scripts/analyze-pi-lens-logs.mjs +1275 -62
  216. package/node_modules/pi-lens/scripts/download-grammars.js +5 -0
  217. package/node_modules/pi-lens/scripts/grammars.lock.json +6 -1
  218. package/node_modules/pi-lens/scripts/install-selftest.mjs +33 -34
  219. package/node_modules/pi-lens/scripts/lib/host-provided-deps.mjs +13 -4
  220. package/node_modules/pi-lens/scripts/lib/web-tree-sitter-dir.mjs +18 -0
  221. package/package.json +15 -10
  222. package/node_modules/@dietrichgebert/ponytail/README.es.md +0 -212
  223. package/node_modules/@dietrichgebert/ponytail/README.ja.md +0 -212
  224. package/node_modules/@dietrichgebert/ponytail/README.ko.md +0 -212
  225. package/node_modules/@dietrichgebert/ponytail/README.zh-CN.md +0 -212
  226. package/node_modules/pi-lens/dist/clients/actionable-warnings-logger.js +0 -35
  227. package/node_modules/pi-lens/dist/clients/actionable-warnings.js +0 -1610
  228. package/node_modules/pi-lens/dist/clients/advisory-provenance.js +0 -593
  229. package/node_modules/pi-lens/dist/clients/agent-behavior-client.js +0 -147
  230. package/node_modules/pi-lens/dist/clients/agent-nudge.js +0 -325
  231. package/node_modules/pi-lens/dist/clients/analysed-root.js +0 -1
  232. package/node_modules/pi-lens/dist/clients/ast-grep-client.js +0 -731
  233. package/node_modules/pi-lens/dist/clients/ast-grep-rule-manager.js +0 -146
  234. package/node_modules/pi-lens/dist/clients/ast-grep-tool-logger.js +0 -118
  235. package/node_modules/pi-lens/dist/clients/ast-grep-types.js +0 -10
  236. package/node_modules/pi-lens/dist/clients/ast-grep-yaml-synth.js +0 -154
  237. package/node_modules/pi-lens/dist/clients/atomic-write-staging.js +0 -75
  238. package/node_modules/pi-lens/dist/clients/atomic-write.js +0 -189
  239. package/node_modules/pi-lens/dist/clients/availability-probe-flight.js +0 -12
  240. package/node_modules/pi-lens/dist/clients/bash-file-access.js +0 -1056
  241. package/node_modules/pi-lens/dist/clients/biome-client.js +0 -357
  242. package/node_modules/pi-lens/dist/clients/blocker-freshness.js +0 -837
  243. package/node_modules/pi-lens/dist/clients/blocker-past-eof.js +0 -129
  244. package/node_modules/pi-lens/dist/clients/bootstrap.js +0 -569
  245. package/node_modules/pi-lens/dist/clients/bounded-cache.js +0 -190
  246. package/node_modules/pi-lens/dist/clients/bounded-pid-file-lock.js +0 -202
  247. package/node_modules/pi-lens/dist/clients/bounded-telemetry.js +0 -295
  248. package/node_modules/pi-lens/dist/clients/build-identity.js +0 -95
  249. package/node_modules/pi-lens/dist/clients/bundled-resource-health.js +0 -113
  250. package/node_modules/pi-lens/dist/clients/bus-events-logger.js +0 -105
  251. package/node_modules/pi-lens/dist/clients/bus-publish.js +0 -171
  252. package/node_modules/pi-lens/dist/clients/cache/rule-cache.js +0 -190
  253. package/node_modules/pi-lens/dist/clients/cache-manager.js +0 -524
  254. package/node_modules/pi-lens/dist/clients/cache-observability.js +0 -1313
  255. package/node_modules/pi-lens/dist/clients/call-graph.js +0 -852
  256. package/node_modules/pi-lens/dist/clients/cargo-manifest.js +0 -422
  257. package/node_modules/pi-lens/dist/clients/cascade-budget.js +0 -196
  258. package/node_modules/pi-lens/dist/clients/cascade-format.js +0 -315
  259. package/node_modules/pi-lens/dist/clients/cascade-logger.js +0 -31
  260. package/node_modules/pi-lens/dist/clients/cascade-types.js +0 -9
  261. package/node_modules/pi-lens/dist/clients/child-unref.js +0 -124
  262. package/node_modules/pi-lens/dist/clients/code-quality-warnings.js +0 -286
  263. package/node_modules/pi-lens/dist/clients/codebase-model.js +0 -173
  264. package/node_modules/pi-lens/dist/clients/collateral-test-role.js +0 -40
  265. package/node_modules/pi-lens/dist/clients/complexity-client.js +0 -462
  266. package/node_modules/pi-lens/dist/clients/config-core/deny.js +0 -221
  267. package/node_modules/pi-lens/dist/clients/config-core/index.js +0 -50
  268. package/node_modules/pi-lens/dist/clients/config-core/merge.js +0 -357
  269. package/node_modules/pi-lens/dist/clients/config-core/normalize.js +0 -340
  270. package/node_modules/pi-lens/dist/clients/config-core/process-spec.js +0 -248
  271. package/node_modules/pi-lens/dist/clients/config-core/provenance.js +0 -164
  272. package/node_modules/pi-lens/dist/clients/config-core/records.js +0 -218
  273. package/node_modules/pi-lens/dist/clients/config-core/resolve.js +0 -125
  274. package/node_modules/pi-lens/dist/clients/config-core/safe-object.js +0 -78
  275. package/node_modules/pi-lens/dist/clients/config-core/schema.js +0 -165
  276. package/node_modules/pi-lens/dist/clients/config-diagnostic-codes.js +0 -285
  277. package/node_modules/pi-lens/dist/clients/config-locations.js +0 -388
  278. package/node_modules/pi-lens/dist/clients/config-resolve.js +0 -798
  279. package/node_modules/pi-lens/dist/clients/config-schema.js +0 -251
  280. package/node_modules/pi-lens/dist/clients/config-warn.js +0 -407
  281. package/node_modules/pi-lens/dist/clients/console-guard-install.js +0 -26
  282. package/node_modules/pi-lens/dist/clients/cooperative-budget.js +0 -42
  283. package/node_modules/pi-lens/dist/clients/dead-code-client.js +0 -510
  284. package/node_modules/pi-lens/dist/clients/dead-code-logger.js +0 -30
  285. package/node_modules/pi-lens/dist/clients/deadline-utils.js +0 -280
  286. package/node_modules/pi-lens/dist/clients/debug-handles.js +0 -211
  287. package/node_modules/pi-lens/dist/clients/debug-heap.js +0 -174
  288. package/node_modules/pi-lens/dist/clients/deferred-lsp-work.js +0 -106
  289. package/node_modules/pi-lens/dist/clients/degradation-ledger.js +0 -426
  290. package/node_modules/pi-lens/dist/clients/demoted-finding-render.js +0 -169
  291. package/node_modules/pi-lens/dist/clients/dependency-checker.js +0 -885
  292. package/node_modules/pi-lens/dist/clients/deps/ast-grep-napi.js +0 -22
  293. package/node_modules/pi-lens/dist/clients/deps/js-yaml.js +0 -9
  294. package/node_modules/pi-lens/dist/clients/deps/minimatch.js +0 -4
  295. package/node_modules/pi-lens/dist/clients/deps/pi-tui.js +0 -14
  296. package/node_modules/pi-lens/dist/clients/deps/typebox.js +0 -14
  297. package/node_modules/pi-lens/dist/clients/deps/vscode-jsonrpc.js +0 -1
  298. package/node_modules/pi-lens/dist/clients/deps/web-tree-sitter.js +0 -24
  299. package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +0 -630
  300. package/node_modules/pi-lens/dist/clients/diagnostic-line-freshness.js +0 -305
  301. package/node_modules/pi-lens/dist/clients/diagnostic-logger.js +0 -73
  302. package/node_modules/pi-lens/dist/clients/diagnostic-tracker.js +0 -105
  303. package/node_modules/pi-lens/dist/clients/diagnostics-publish.js +0 -230
  304. package/node_modules/pi-lens/dist/clients/dispatch/ast-grep-catalog.js +0 -65
  305. package/node_modules/pi-lens/dist/clients/dispatch/auxiliary-lsp.js +0 -343
  306. package/node_modules/pi-lens/dist/clients/dispatch/collect-later-tier.js +0 -35
  307. package/node_modules/pi-lens/dist/clients/dispatch/diagnostic-taxonomy.js +0 -66
  308. package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +0 -1269
  309. package/node_modules/pi-lens/dist/clients/dispatch/fact-provider-types.js +0 -1
  310. package/node_modules/pi-lens/dist/clients/dispatch/fact-rule-runner.js +0 -17
  311. package/node_modules/pi-lens/dist/clients/dispatch/fact-runner.js +0 -30
  312. package/node_modules/pi-lens/dist/clients/dispatch/fact-scheduler.js +0 -68
  313. package/node_modules/pi-lens/dist/clients/dispatch/fact-store.js +0 -377
  314. package/node_modules/pi-lens/dist/clients/dispatch/facts/comment-facts.js +0 -22
  315. package/node_modules/pi-lens/dist/clients/dispatch/facts/file-content.js +0 -19
  316. package/node_modules/pi-lens/dist/clients/dispatch/facts/function-facts.js +0 -348
  317. package/node_modules/pi-lens/dist/clients/dispatch/facts/import-facts.js +0 -204
  318. package/node_modules/pi-lens/dist/clients/dispatch/facts/tree-sitter-facts.js +0 -34
  319. package/node_modules/pi-lens/dist/clients/dispatch/facts/try-catch-facts.js +0 -119
  320. package/node_modules/pi-lens/dist/clients/dispatch/finding-policy.js +0 -339
  321. package/node_modules/pi-lens/dist/clients/dispatch/indent-detect.js +0 -417
  322. package/node_modules/pi-lens/dist/clients/dispatch/inline-suppressions.js +0 -89
  323. package/node_modules/pi-lens/dist/clients/dispatch/integration.js +0 -2377
  324. package/node_modules/pi-lens/dist/clients/dispatch/lazy.js +0 -11
  325. package/node_modules/pi-lens/dist/clients/dispatch/pending-runner-findings.js +0 -87
  326. package/node_modules/pi-lens/dist/clients/dispatch/plan.js +0 -278
  327. package/node_modules/pi-lens/dist/clients/dispatch/priorities.js +0 -20
  328. package/node_modules/pi-lens/dist/clients/dispatch/rule-id-normalize.js +0 -50
  329. package/node_modules/pi-lens/dist/clients/dispatch/rule-ignores.js +0 -69
  330. package/node_modules/pi-lens/dist/clients/dispatch/rule-policy.js +0 -135
  331. package/node_modules/pi-lens/dist/clients/dispatch/rules/async-noise.js +0 -40
  332. package/node_modules/pi-lens/dist/clients/dispatch/rules/async-unnecessary-wrapper.js +0 -27
  333. package/node_modules/pi-lens/dist/clients/dispatch/rules/cors-wildcard.js +0 -54
  334. package/node_modules/pi-lens/dist/clients/dispatch/rules/error-obscuring.js +0 -32
  335. package/node_modules/pi-lens/dist/clients/dispatch/rules/error-swallowing.js +0 -31
  336. package/node_modules/pi-lens/dist/clients/dispatch/rules/framework-call-noise.js +0 -67
  337. package/node_modules/pi-lens/dist/clients/dispatch/rules/high-complexity.js +0 -72
  338. package/node_modules/pi-lens/dist/clients/dispatch/rules/high-fan-out.js +0 -74
  339. package/node_modules/pi-lens/dist/clients/dispatch/rules/high-import-coupling.js +0 -37
  340. package/node_modules/pi-lens/dist/clients/dispatch/rules/missing-error-propagation.js +0 -62
  341. package/node_modules/pi-lens/dist/clients/dispatch/rules/no-commented-credentials.js +0 -52
  342. package/node_modules/pi-lens/dist/clients/dispatch/rules/pass-through-wrappers.js +0 -42
  343. package/node_modules/pi-lens/dist/clients/dispatch/rules/placeholder-comments.js +0 -40
  344. package/node_modules/pi-lens/dist/clients/dispatch/rules/unsafe-boundary.js +0 -126
  345. package/node_modules/pi-lens/dist/clients/dispatch/runner-context.js +0 -52
  346. package/node_modules/pi-lens/dist/clients/dispatch/runners/actionlint.js +0 -111
  347. package/node_modules/pi-lens/dist/clients/dispatch/runners/ast-grep-napi.js +0 -1196
  348. package/node_modules/pi-lens/dist/clients/dispatch/runners/biome-check.js +0 -296
  349. package/node_modules/pi-lens/dist/clients/dispatch/runners/cpp-check.js +0 -219
  350. package/node_modules/pi-lens/dist/clients/dispatch/runners/credo.js +0 -82
  351. package/node_modules/pi-lens/dist/clients/dispatch/runners/cue-vet.js +0 -416
  352. package/node_modules/pi-lens/dist/clients/dispatch/runners/dart-analyze.js +0 -183
  353. package/node_modules/pi-lens/dist/clients/dispatch/runners/detekt.js +0 -176
  354. package/node_modules/pi-lens/dist/clients/dispatch/runners/dotnet-build.js +0 -164
  355. package/node_modules/pi-lens/dist/clients/dispatch/runners/elixir-check.js +0 -195
  356. package/node_modules/pi-lens/dist/clients/dispatch/runners/eslint.js +0 -137
  357. package/node_modules/pi-lens/dist/clients/dispatch/runners/fact-rules.js +0 -29
  358. package/node_modules/pi-lens/dist/clients/dispatch/runners/fish-indent.js +0 -69
  359. package/node_modules/pi-lens/dist/clients/dispatch/runners/gleam-check.js +0 -167
  360. package/node_modules/pi-lens/dist/clients/dispatch/runners/go-vet.js +0 -104
  361. package/node_modules/pi-lens/dist/clients/dispatch/runners/golangci-lint.js +0 -135
  362. package/node_modules/pi-lens/dist/clients/dispatch/runners/hadolint.js +0 -91
  363. package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-lint.js +0 -171
  364. package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-render.js +0 -940
  365. package/node_modules/pi-lens/dist/clients/dispatch/runners/htmlhint.js +0 -117
  366. package/node_modules/pi-lens/dist/clients/dispatch/runners/index.js +0 -108
  367. package/node_modules/pi-lens/dist/clients/dispatch/runners/javac.js +0 -99
  368. package/node_modules/pi-lens/dist/clients/dispatch/runners/ktlint.js +0 -110
  369. package/node_modules/pi-lens/dist/clients/dispatch/runners/lsp.js +0 -379
  370. package/node_modules/pi-lens/dist/clients/dispatch/runners/markdownlint.js +0 -167
  371. package/node_modules/pi-lens/dist/clients/dispatch/runners/mypy.js +0 -102
  372. package/node_modules/pi-lens/dist/clients/dispatch/runners/oxlint.js +0 -414
  373. package/node_modules/pi-lens/dist/clients/dispatch/runners/php-lint.js +0 -85
  374. package/node_modules/pi-lens/dist/clients/dispatch/runners/phpstan.js +0 -120
  375. package/node_modules/pi-lens/dist/clients/dispatch/runners/prisma-validate.js +0 -62
  376. package/node_modules/pi-lens/dist/clients/dispatch/runners/psscriptanalyzer.js +0 -445
  377. package/node_modules/pi-lens/dist/clients/dispatch/runners/pyright.js +0 -169
  378. package/node_modules/pi-lens/dist/clients/dispatch/runners/rubocop.js +0 -99
  379. package/node_modules/pi-lens/dist/clients/dispatch/runners/ruff.js +0 -88
  380. package/node_modules/pi-lens/dist/clients/dispatch/runners/rust-clippy.js +0 -256
  381. package/node_modules/pi-lens/dist/clients/dispatch/runners/shellcheck.js +0 -173
  382. package/node_modules/pi-lens/dist/clients/dispatch/runners/shfmt.js +0 -102
  383. package/node_modules/pi-lens/dist/clients/dispatch/runners/spellcheck.js +0 -128
  384. package/node_modules/pi-lens/dist/clients/dispatch/runners/spotbugs.js +0 -259
  385. package/node_modules/pi-lens/dist/clients/dispatch/runners/sqlfluff.js +0 -183
  386. package/node_modules/pi-lens/dist/clients/dispatch/runners/stylelint.js +0 -166
  387. package/node_modules/pi-lens/dist/clients/dispatch/runners/swiftlint.js +0 -163
  388. package/node_modules/pi-lens/dist/clients/dispatch/runners/taplo.js +0 -174
  389. package/node_modules/pi-lens/dist/clients/dispatch/runners/terragrunt.js +0 -168
  390. package/node_modules/pi-lens/dist/clients/dispatch/runners/tflint.js +0 -125
  391. package/node_modules/pi-lens/dist/clients/dispatch/runners/tree-sitter.js +0 -643
  392. package/node_modules/pi-lens/dist/clients/dispatch/runners/trivy-config.js +0 -253
  393. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/availability-policy.js +0 -496
  394. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +0 -90
  395. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/diagnostic-parsers.js +0 -95
  396. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/lazy-installer.js +0 -274
  397. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +0 -1701
  398. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/spawn-outcome.js +0 -101
  399. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/tool-failure.js +0 -235
  400. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/toolchain-availability.js +0 -169
  401. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils.js +0 -15
  402. package/node_modules/pi-lens/dist/clients/dispatch/runners/vale.js +0 -128
  403. package/node_modules/pi-lens/dist/clients/dispatch/runners/yaml-rule-parser.js +0 -242
  404. package/node_modules/pi-lens/dist/clients/dispatch/runners/yamllint.js +0 -95
  405. package/node_modules/pi-lens/dist/clients/dispatch/runners/zig-check.js +0 -79
  406. package/node_modules/pi-lens/dist/clients/dispatch/suppress-writer.js +0 -79
  407. package/node_modules/pi-lens/dist/clients/dispatch/tool-profile.js +0 -30
  408. package/node_modules/pi-lens/dist/clients/dispatch/types.js +0 -21
  409. package/node_modules/pi-lens/dist/clients/dispatch/utils/format-utils.js +0 -45
  410. package/node_modules/pi-lens/dist/clients/dispatch/utils/lsp-diagnostics.js +0 -35
  411. package/node_modules/pi-lens/dist/clients/disposition-logger.js +0 -32
  412. package/node_modules/pi-lens/dist/clients/disposition-publish.js +0 -124
  413. package/node_modules/pi-lens/dist/clients/durable-store.js +0 -97
  414. package/node_modules/pi-lens/dist/clients/effective-config.js +0 -415
  415. package/node_modules/pi-lens/dist/clients/env-utils.js +0 -83
  416. package/node_modules/pi-lens/dist/clients/error-class.js +0 -23
  417. package/node_modules/pi-lens/dist/clients/eval-timestamp.js +0 -17
  418. package/node_modules/pi-lens/dist/clients/event-loop-hold.js +0 -274
  419. package/node_modules/pi-lens/dist/clients/event-loop-monitor.js +0 -250
  420. package/node_modules/pi-lens/dist/clients/extension-log.js +0 -504
  421. package/node_modules/pi-lens/dist/clients/extension-mode.js +0 -73
  422. package/node_modules/pi-lens/dist/clients/feature-hints.js +0 -103
  423. package/node_modules/pi-lens/dist/clients/file-kinds.js +0 -412
  424. package/node_modules/pi-lens/dist/clients/file-role.js +0 -134
  425. package/node_modules/pi-lens/dist/clients/file-time.js +0 -160
  426. package/node_modules/pi-lens/dist/clients/file-utils.js +0 -1032
  427. package/node_modules/pi-lens/dist/clients/finding-delivery-gate.js +0 -494
  428. package/node_modules/pi-lens/dist/clients/finding-identity.js +0 -88
  429. package/node_modules/pi-lens/dist/clients/fix-worklog.js +0 -103
  430. package/node_modules/pi-lens/dist/clients/format-events-publish.js +0 -343
  431. package/node_modules/pi-lens/dist/clients/format-service.js +0 -222
  432. package/node_modules/pi-lens/dist/clients/formatters-lazy.js +0 -9
  433. package/node_modules/pi-lens/dist/clients/formatters.js +0 -2032
  434. package/node_modules/pi-lens/dist/clients/freshness-cadence.js +0 -17
  435. package/node_modules/pi-lens/dist/clients/freshness.js +0 -38
  436. package/node_modules/pi-lens/dist/clients/generated-artifacts.js +0 -394
  437. package/node_modules/pi-lens/dist/clients/generation-guard.js +0 -215
  438. package/node_modules/pi-lens/dist/clients/git-guard.js +0 -1136
  439. package/node_modules/pi-lens/dist/clients/git-tracked-ignore.js +0 -243
  440. package/node_modules/pi-lens/dist/clients/gitleaks-client.js +0 -509
  441. package/node_modules/pi-lens/dist/clients/go-client.js +0 -104
  442. package/node_modules/pi-lens/dist/clients/govulncheck-client.js +0 -605
  443. package/node_modules/pi-lens/dist/clients/gradle-ktfmt-style.js +0 -348
  444. package/node_modules/pi-lens/dist/clients/grammar-source.js +0 -465
  445. package/node_modules/pi-lens/dist/clients/gzip-stage-write.js +0 -135
  446. package/node_modules/pi-lens/dist/clients/hashline-anchor.js +0 -424
  447. package/node_modules/pi-lens/dist/clients/hook-budgets.js +0 -76
  448. package/node_modules/pi-lens/dist/clients/host-edit-normalize.js +0 -140
  449. package/node_modules/pi-lens/dist/clients/host-ports.js +0 -39
  450. package/node_modules/pi-lens/dist/clients/indent-retarget.js +0 -154
  451. package/node_modules/pi-lens/dist/clients/inline-blocker-dispositions.js +0 -186
  452. package/node_modules/pi-lens/dist/clients/install-diagnostics.js +0 -156
  453. package/node_modules/pi-lens/dist/clients/installer/index.js +0 -5416
  454. package/node_modules/pi-lens/dist/clients/installer/managed-tool-refresh-session.js +0 -58
  455. package/node_modules/pi-lens/dist/clients/installer/managed-tool-refresh.js +0 -783
  456. package/node_modules/pi-lens/dist/clients/instance-reaper-state.js +0 -7
  457. package/node_modules/pi-lens/dist/clients/instance-reaper.js +0 -1137
  458. package/node_modules/pi-lens/dist/clients/instance-registry-lock.js +0 -145
  459. package/node_modules/pi-lens/dist/clients/instance-registry.js +0 -773
  460. package/node_modules/pi-lens/dist/clients/jscpd-client.js +0 -378
  461. package/node_modules/pi-lens/dist/clients/json-cache-read.js +0 -65
  462. package/node_modules/pi-lens/dist/clients/knip-client.js +0 -788
  463. package/node_modules/pi-lens/dist/clients/language-policy.js +0 -252
  464. package/node_modules/pi-lens/dist/clients/language-profile.js +0 -361
  465. package/node_modules/pi-lens/dist/clients/language-registry.js +0 -603
  466. package/node_modules/pi-lens/dist/clients/latency-logger.js +0 -727
  467. package/node_modules/pi-lens/dist/clients/lazy-import.js +0 -21
  468. package/node_modules/pi-lens/dist/clients/ledger-bounds.js +0 -54
  469. package/node_modules/pi-lens/dist/clients/lens-config.js +0 -404
  470. package/node_modules/pi-lens/dist/clients/lens-engine.js +0 -358
  471. package/node_modules/pi-lens/dist/clients/lens-events.js +0 -125
  472. package/node_modules/pi-lens/dist/clients/lens-flag-registry.js +0 -467
  473. package/node_modules/pi-lens/dist/clients/lens-map.js +0 -1156
  474. package/node_modules/pi-lens/dist/clients/live-bus-emitter.js +0 -74
  475. package/node_modules/pi-lens/dist/clients/log-cleanup.js +0 -222
  476. package/node_modules/pi-lens/dist/clients/lsp/aggregation.js +0 -178
  477. package/node_modules/pi-lens/dist/clients/lsp/cascade-tier.js +0 -421
  478. package/node_modules/pi-lens/dist/clients/lsp/client.js +0 -4593
  479. package/node_modules/pi-lens/dist/clients/lsp/config.js +0 -691
  480. package/node_modules/pi-lens/dist/clients/lsp/content-limits.js +0 -41
  481. package/node_modules/pi-lens/dist/clients/lsp/diagnostic-binding.js +0 -225
  482. package/node_modules/pi-lens/dist/clients/lsp/document-drift.js +0 -467
  483. package/node_modules/pi-lens/dist/clients/lsp/edits.js +0 -1219
  484. package/node_modules/pi-lens/dist/clients/lsp/index.js +0 -8305
  485. package/node_modules/pi-lens/dist/clients/lsp/inferred-project.js +0 -216
  486. package/node_modules/pi-lens/dist/clients/lsp/jvm-runtime.js +0 -298
  487. package/node_modules/pi-lens/dist/clients/lsp/language.js +0 -63
  488. package/node_modules/pi-lens/dist/clients/lsp/launch.js +0 -746
  489. package/node_modules/pi-lens/dist/clients/lsp/lombok.js +0 -158
  490. package/node_modules/pi-lens/dist/clients/lsp/path-utils.js +0 -5
  491. package/node_modules/pi-lens/dist/clients/lsp/pending-aux-coverage.js +0 -251
  492. package/node_modules/pi-lens/dist/clients/lsp/position-encoding.js +0 -61
  493. package/node_modules/pi-lens/dist/clients/lsp/ruby-drive-dirs.js +0 -83
  494. package/node_modules/pi-lens/dist/clients/lsp/server.js +0 -3290
  495. package/node_modules/pi-lens/dist/clients/lsp/session-roots.js +0 -192
  496. package/node_modules/pi-lens/dist/clients/lsp/spawn-history.js +0 -17
  497. package/node_modules/pi-lens/dist/clients/lsp/sync-kind.js +0 -56
  498. package/node_modules/pi-lens/dist/clients/lsp/tsserver-sync.js +0 -332
  499. package/node_modules/pi-lens/dist/clients/lsp/wait-policy/capability-snapshot.js +0 -1
  500. package/node_modules/pi-lens/dist/clients/lsp/wait-policy/classification.js +0 -85
  501. package/node_modules/pi-lens/dist/clients/lsp/wait-policy/index.js +0 -10
  502. package/node_modules/pi-lens/dist/clients/lsp/wait-policy/strategies.js +0 -392
  503. package/node_modules/pi-lens/dist/clients/lsp/watch-queue.js +0 -61
  504. package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-cache.js +0 -639
  505. package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-session.js +0 -30
  506. package/node_modules/pi-lens/dist/clients/lsp/workspace-sweep-hold.js +0 -184
  507. package/node_modules/pi-lens/dist/clients/lsp-budget.js +0 -186
  508. package/node_modules/pi-lens/dist/clients/lsp-document-symbols.js +0 -110
  509. package/node_modules/pi-lens/dist/clients/lsp-lazy.js +0 -9
  510. package/node_modules/pi-lens/dist/clients/lsp-mutation.js +0 -396
  511. package/node_modules/pi-lens/dist/clients/lsp-status.js +0 -59
  512. package/node_modules/pi-lens/dist/clients/map-with-concurrency.js +0 -40
  513. package/node_modules/pi-lens/dist/clients/mcp/analyze.js +0 -420
  514. package/node_modules/pi-lens/dist/clients/mcp/host-shim.js +0 -31
  515. package/node_modules/pi-lens/dist/clients/mcp/ipc.js +0 -523
  516. package/node_modules/pi-lens/dist/clients/mcp/review.js +0 -197
  517. package/node_modules/pi-lens/dist/clients/mcp/session.js +0 -412
  518. package/node_modules/pi-lens/dist/clients/memory-sampler.js +0 -208
  519. package/node_modules/pi-lens/dist/clients/message-end-attribution.js +0 -30
  520. package/node_modules/pi-lens/dist/clients/metrics-client.js +0 -107
  521. package/node_modules/pi-lens/dist/clients/metrics-history.js +0 -327
  522. package/node_modules/pi-lens/dist/clients/middle-man-analysis.js +0 -263
  523. package/node_modules/pi-lens/dist/clients/model-provider.js +0 -53
  524. package/node_modules/pi-lens/dist/clients/module-report-lsp.js +0 -189
  525. package/node_modules/pi-lens/dist/clients/module-report.js +0 -2150
  526. package/node_modules/pi-lens/dist/clients/mutating-tool.js +0 -651
  527. package/node_modules/pi-lens/dist/clients/mutation-attribution.js +0 -368
  528. package/node_modules/pi-lens/dist/clients/mutation-bridge.js +0 -240
  529. package/node_modules/pi-lens/dist/clients/ndjson-logger.js +0 -734
  530. package/node_modules/pi-lens/dist/clients/observed-mutation-sources.js +0 -101
  531. package/node_modules/pi-lens/dist/clients/observed-mutation.js +0 -1253
  532. package/node_modules/pi-lens/dist/clients/oldtext-autopatch.js +0 -128
  533. package/node_modules/pi-lens/dist/clients/opaque-mutation-scan.js +0 -496
  534. package/node_modules/pi-lens/dist/clients/opengrep-client.js +0 -333
  535. package/node_modules/pi-lens/dist/clients/opengrep-config.js +0 -76
  536. package/node_modules/pi-lens/dist/clients/package-manager.js +0 -607
  537. package/node_modules/pi-lens/dist/clients/package-root.js +0 -38
  538. package/node_modules/pi-lens/dist/clients/partial-edit-apply.js +0 -439
  539. package/node_modules/pi-lens/dist/clients/path-attribution-telemetry.js +0 -43
  540. package/node_modules/pi-lens/dist/clients/path-keyed-map.js +0 -108
  541. package/node_modules/pi-lens/dist/clients/path-utils.js +0 -1244
  542. package/node_modules/pi-lens/dist/clients/performance-report.js +0 -331
  543. package/node_modules/pi-lens/dist/clients/persist-debounce.js +0 -70
  544. package/node_modules/pi-lens/dist/clients/persistent-reverify.js +0 -271
  545. package/node_modules/pi-lens/dist/clients/php-cs-fixer-config.js +0 -119
  546. package/node_modules/pi-lens/dist/clients/pipeline.js +0 -1480
  547. package/node_modules/pi-lens/dist/clients/post-autofix-notice.js +0 -37
  548. package/node_modules/pi-lens/dist/clients/print-mode.js +0 -21
  549. package/node_modules/pi-lens/dist/clients/probe-home-state.js +0 -228
  550. package/node_modules/pi-lens/dist/clients/process-bridge.js +0 -66
  551. package/node_modules/pi-lens/dist/clients/process-singletons.js +0 -210
  552. package/node_modules/pi-lens/dist/clients/process-snapshot.js +0 -68
  553. package/node_modules/pi-lens/dist/clients/project-changes.js +0 -181
  554. package/node_modules/pi-lens/dist/clients/project-conventions.js +0 -171
  555. package/node_modules/pi-lens/dist/clients/project-diagnostics/cache.js +0 -137
  556. package/node_modules/pi-lens/dist/clients/project-diagnostics/extractors.js +0 -109
  557. package/node_modules/pi-lens/dist/clients/project-diagnostics/fresh-fetch.js +0 -668
  558. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +0 -118
  559. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/dead-code.js +0 -47
  560. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +0 -40
  561. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/govulncheck.js +0 -34
  562. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/jscpd.js +0 -38
  563. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/knip.js +0 -47
  564. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/madge.js +0 -48
  565. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/opengrep.js +0 -40
  566. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +0 -127
  567. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/trivy.js +0 -81
  568. package/node_modules/pi-lens/dist/clients/project-diagnostics/scanner.js +0 -520
  569. package/node_modules/pi-lens/dist/clients/project-diagnostics/types.js +0 -1
  570. package/node_modules/pi-lens/dist/clients/project-lens-config.js +0 -807
  571. package/node_modules/pi-lens/dist/clients/project-report.js +0 -701
  572. package/node_modules/pi-lens/dist/clients/project-scale.js +0 -237
  573. package/node_modules/pi-lens/dist/clients/project-scan-policy.js +0 -11
  574. package/node_modules/pi-lens/dist/clients/project-snapshot-fingerprint.js +0 -48
  575. package/node_modules/pi-lens/dist/clients/project-snapshot-persist-worker.js +0 -20
  576. package/node_modules/pi-lens/dist/clients/project-snapshot.js +0 -1653
  577. package/node_modules/pi-lens/dist/clients/project-trust.js +0 -181
  578. package/node_modules/pi-lens/dist/clients/python-environment.js +0 -217
  579. package/node_modules/pi-lens/dist/clients/python-provenance.js +0 -639
  580. package/node_modules/pi-lens/dist/clients/quiet-window-config.js +0 -47
  581. package/node_modules/pi-lens/dist/clients/quiet-window.js +0 -236
  582. package/node_modules/pi-lens/dist/clients/read-bridge.js +0 -139
  583. package/node_modules/pi-lens/dist/clients/read-expansion.js +0 -266
  584. package/node_modules/pi-lens/dist/clients/read-guard-logger.js +0 -251
  585. package/node_modules/pi-lens/dist/clients/read-guard-tool-lines.js +0 -1306
  586. package/node_modules/pi-lens/dist/clients/read-guard.js +0 -1561
  587. package/node_modules/pi-lens/dist/clients/recent-touches.js +0 -240
  588. package/node_modules/pi-lens/dist/clients/redact/secrets.js +0 -449
  589. package/node_modules/pi-lens/dist/clients/resource-sampler.js +0 -628
  590. package/node_modules/pi-lens/dist/clients/reverse-deps.js +0 -270
  591. package/node_modules/pi-lens/dist/clients/review-graph/builder.js +0 -5126
  592. package/node_modules/pi-lens/dist/clients/review-graph/format.js +0 -33
  593. package/node_modules/pi-lens/dist/clients/review-graph/git-identity.js +0 -163
  594. package/node_modules/pi-lens/dist/clients/review-graph/import-resolvers.js +0 -481
  595. package/node_modules/pi-lens/dist/clients/review-graph/persist-worker.js +0 -10
  596. package/node_modules/pi-lens/dist/clients/review-graph/query.js +0 -244
  597. package/node_modules/pi-lens/dist/clients/review-graph/revision-drift.js +0 -21
  598. package/node_modules/pi-lens/dist/clients/review-graph/service.js +0 -96
  599. package/node_modules/pi-lens/dist/clients/review-graph/shared-extraction-ir.js +0 -82
  600. package/node_modules/pi-lens/dist/clients/review-graph/symbol-id.js +0 -103
  601. package/node_modules/pi-lens/dist/clients/review-graph/tsconfig-paths.js +0 -299
  602. package/node_modules/pi-lens/dist/clients/review-graph/types.js +0 -1
  603. package/node_modules/pi-lens/dist/clients/review-graph/workspace-modules.js +0 -449
  604. package/node_modules/pi-lens/dist/clients/review-graph-logger.js +0 -81
  605. package/node_modules/pi-lens/dist/clients/ruff-client.js +0 -179
  606. package/node_modules/pi-lens/dist/clients/rules-scanner.js +0 -131
  607. package/node_modules/pi-lens/dist/clients/run-duration.js +0 -55
  608. package/node_modules/pi-lens/dist/clients/runtime-agent-end.js +0 -746
  609. package/node_modules/pi-lens/dist/clients/runtime-config.js +0 -77
  610. package/node_modules/pi-lens/dist/clients/runtime-context.js +0 -211
  611. package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +0 -1324
  612. package/node_modules/pi-lens/dist/clients/runtime-session.js +0 -2485
  613. package/node_modules/pi-lens/dist/clients/runtime-tool-call.js +0 -1295
  614. package/node_modules/pi-lens/dist/clients/runtime-tool-result.js +0 -2049
  615. package/node_modules/pi-lens/dist/clients/runtime-turn.js +0 -3767
  616. package/node_modules/pi-lens/dist/clients/rust-client.js +0 -97
  617. package/node_modules/pi-lens/dist/clients/safe-spawn.js +0 -2357
  618. package/node_modules/pi-lens/dist/clients/sanitize.js +0 -286
  619. package/node_modules/pi-lens/dist/clients/scan-utils.js +0 -25
  620. package/node_modules/pi-lens/dist/clients/scratch-tree-policy.js +0 -165
  621. package/node_modules/pi-lens/dist/clients/search-read-registration.js +0 -94
  622. package/node_modules/pi-lens/dist/clients/secret-findings.js +0 -114
  623. package/node_modules/pi-lens/dist/clients/security-scan-client.js +0 -352
  624. package/node_modules/pi-lens/dist/clients/session-event-guard.js +0 -297
  625. package/node_modules/pi-lens/dist/clients/session-lifecycle.js +0 -484
  626. package/node_modules/pi-lens/dist/clients/session-start-observability.js +0 -94
  627. package/node_modules/pi-lens/dist/clients/session-state-store.js +0 -101
  628. package/node_modules/pi-lens/dist/clients/session-summary.js +0 -15
  629. package/node_modules/pi-lens/dist/clients/sessionstart-logger.js +0 -27
  630. package/node_modules/pi-lens/dist/clients/sg-runner.js +0 -876
  631. package/node_modules/pi-lens/dist/clients/sgconfig.js +0 -347
  632. package/node_modules/pi-lens/dist/clients/shared-checkout-guard.js +0 -338
  633. package/node_modules/pi-lens/dist/clients/single-flight.js +0 -158
  634. package/node_modules/pi-lens/dist/clients/situational-tool-telemetry.js +0 -108
  635. package/node_modules/pi-lens/dist/clients/skills-resolver.js +0 -141
  636. package/node_modules/pi-lens/dist/clients/slow-fs.js +0 -138
  637. package/node_modules/pi-lens/dist/clients/smells-rollup.js +0 -231
  638. package/node_modules/pi-lens/dist/clients/source-filter.js +0 -596
  639. package/node_modules/pi-lens/dist/clients/source-walker.js +0 -211
  640. package/node_modules/pi-lens/dist/clients/spawn-output-cap.js +0 -120
  641. package/node_modules/pi-lens/dist/clients/spawn-timeout-cooldown.js +0 -110
  642. package/node_modules/pi-lens/dist/clients/stale-marker.js +0 -17
  643. package/node_modules/pi-lens/dist/clients/startup-scan.js +0 -400
  644. package/node_modules/pi-lens/dist/clients/startup-timing.js +0 -130
  645. package/node_modules/pi-lens/dist/clients/string-utils.js +0 -33
  646. package/node_modules/pi-lens/dist/clients/subagent-mode.js +0 -111
  647. package/node_modules/pi-lens/dist/clients/symbol-containment.js +0 -24
  648. package/node_modules/pi-lens/dist/clients/symbol-types.js +0 -5
  649. package/node_modules/pi-lens/dist/clients/test-runner-client.js +0 -2507
  650. package/node_modules/pi-lens/dist/clients/test-runner-delivery.js +0 -287
  651. package/node_modules/pi-lens/dist/clients/todo-scanner.js +0 -229
  652. package/node_modules/pi-lens/dist/clients/tool-agreement.js +0 -423
  653. package/node_modules/pi-lens/dist/clients/tool-config.js +0 -249
  654. package/node_modules/pi-lens/dist/clients/tool-cwd.js +0 -270
  655. package/node_modules/pi-lens/dist/clients/tool-definition.js +0 -47
  656. package/node_modules/pi-lens/dist/clients/tool-event.js +0 -105
  657. package/node_modules/pi-lens/dist/clients/tool-policy.js +0 -2755
  658. package/node_modules/pi-lens/dist/clients/tool-probe.js +0 -53
  659. package/node_modules/pi-lens/dist/clients/tool-render.js +0 -156
  660. package/node_modules/pi-lens/dist/clients/tool-set-policy.js +0 -118
  661. package/node_modules/pi-lens/dist/clients/tree-sitter-cache.js +0 -364
  662. package/node_modules/pi-lens/dist/clients/tree-sitter-client.js +0 -4195
  663. package/node_modules/pi-lens/dist/clients/tree-sitter-logger.js +0 -100
  664. package/node_modules/pi-lens/dist/clients/tree-sitter-navigator.js +0 -269
  665. package/node_modules/pi-lens/dist/clients/tree-sitter-query-loader.js +0 -569
  666. package/node_modules/pi-lens/dist/clients/tree-sitter-shared.js +0 -158
  667. package/node_modules/pi-lens/dist/clients/tree-sitter-symbol-extractor.js +0 -1265
  668. package/node_modules/pi-lens/dist/clients/trivy-client.js +0 -467
  669. package/node_modules/pi-lens/dist/clients/tui-fit.js +0 -50
  670. package/node_modules/pi-lens/dist/clients/turn-context.js +0 -52
  671. package/node_modules/pi-lens/dist/clients/turn-end/lane.js +0 -51
  672. package/node_modules/pi-lens/dist/clients/turn-end/lanes/govulncheck.js +0 -112
  673. package/node_modules/pi-lens/dist/clients/turn-end/lanes/secrets.js +0 -204
  674. package/node_modules/pi-lens/dist/clients/turn-summary-render.js +0 -72
  675. package/node_modules/pi-lens/dist/clients/turn-summary.js +0 -132
  676. package/node_modules/pi-lens/dist/clients/typos-config.js +0 -29
  677. package/node_modules/pi-lens/dist/clients/user-notify.js +0 -51
  678. package/node_modules/pi-lens/dist/clients/vanished-instance-marker.js +0 -57
  679. package/node_modules/pi-lens/dist/clients/warm-attach.js +0 -305
  680. package/node_modules/pi-lens/dist/clients/widget-state.js +0 -1808
  681. package/node_modules/pi-lens/dist/clients/word-index-logger.js +0 -49
  682. package/node_modules/pi-lens/dist/clients/word-index-store.js +0 -459
  683. package/node_modules/pi-lens/dist/clients/word-index.js +0 -2080
  684. package/node_modules/pi-lens/dist/clients/workspace-topology.js +0 -443
  685. package/node_modules/pi-lens/dist/clients/write-ordering-guard.js +0 -65
  686. package/node_modules/pi-lens/dist/clients/zizmor-config.js +0 -340
  687. package/node_modules/pi-lens/dist/i18n.js +0 -69
  688. package/node_modules/pi-lens/dist/mcp/build-staleness.js +0 -124
  689. package/node_modules/pi-lens/dist/scripts/lib/process-scan.mjs +0 -583
  690. package/node_modules/pi-lens/dist/scripts/lib/skills-predicate.mjs +0 -129
  691. package/node_modules/pi-lens/dist/scripts/lib/web-tree-sitter-dir.mjs +0 -123
  692. package/node_modules/pi-lens/dist/tools/activate-tools.js +0 -87
  693. package/node_modules/pi-lens/dist/tools/ast-grep-outline.js +0 -137
  694. package/node_modules/pi-lens/dist/tools/ast-grep-replace.js +0 -244
  695. package/node_modules/pi-lens/dist/tools/ast-grep-search.js +0 -762
  696. package/node_modules/pi-lens/dist/tools/effective-config.js +0 -90
  697. package/node_modules/pi-lens/dist/tools/lens-diagnostic-mark.js +0 -375
  698. package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +0 -2571
  699. package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +0 -1745
  700. package/node_modules/pi-lens/dist/tools/lsp-navigation.js +0 -1367
  701. package/node_modules/pi-lens/dist/tools/lsp-structured-output.js +0 -294
  702. package/node_modules/pi-lens/dist/tools/module-report.js +0 -382
  703. package/node_modules/pi-lens/dist/tools/project-report.js +0 -86
  704. package/node_modules/pi-lens/dist/tools/render-compact.js +0 -374
  705. package/node_modules/pi-lens/dist/tools/scan-progress.js +0 -53
  706. package/node_modules/pi-lens/dist/tools/shared.js +0 -29
  707. package/node_modules/pi-lens/dist/tools/symbol-search.js +0 -155
@@ -1,668 +0,0 @@
1
- /**
2
- * THE heavyweight-analyzer reader for `lens_diagnostics mode=full` (#585).
3
- *
4
- * It superseded a cache-ONLY reader (`extractCachedProjectDiagnostics`, since
5
- * removed from ./extractors.ts as a #585-class dead parallel path — see that
6
- * file's header). That reader was deliberately cache-only because historically
7
- * mode=full had no safe way to trigger a scan itself: relaunching knip/jscpd/
8
- * gitleaks/govulncheck/opengrep/trivy/dead-code concurrently with the
9
- * session_start background pass over the SAME project root could double-spawn a
10
- * CPU-bound analyzer (the exact TUI-freeze/zombie-process pathology
11
- * `KnipClient.inFlight`'s docstring describes).
12
- *
13
- * That pathology is now closed for every one of these analyzers:
14
- * `KnipClient`, `JscpdClient`, and the `DeadCodeClient`s each carry their own
15
- * `inFlight` de-dupe map, and `GitleaksClient`/`GovulncheckClient`/
16
- * `TrivyClient`/`OpengrepClient` share `SecurityScanClient.dedupeScan` (landed
17
- * in #313, well before this issue — verified before writing this module). So
18
- * a mode=full opengrep run that races the session_start whole-tree scan of the
19
- * same root JOINS it rather than spawning a second (heavy) scan. So mode=full can
20
- * now safely trigger — or, via the de-dupe guard, *join* — a fresh run of
21
- * each analyzer instead of settling for a session_start-only snapshot that
22
- * can be hours stale in a long session.
23
- *
24
- * Mirrors the gating each analyzer already applies at session_start
25
- * (`clients/runtime-session.ts`) — same "not applicable to this project" /
26
- * "not installed" skip conditions — but never skips on a cache hit; it always
27
- * performs (or joins) an actual run. One deliberate exception: gitleaks (#608)
28
- * uses a looser "smart-default" gate here (any tracked git repo) than
29
- * session_start's strict opt-in-config gate, since mode=full is an
30
- * explicitly-requested comprehensive review and gitleaks is cheap/advisory —
31
- * see its own task below. Every fresh result is written back to
32
- * cache via the same `cacheManager.writeCache` session_start/turn_end use, so
33
- * a background pass racing in afterward reads a result at least as fresh as
34
- * its own.
35
- *
36
- * No extra write-ordering guard (`clients/write-ordering-guard.ts`) is
37
- * layered on top of this: an overlapping call to the same analyzer for the
38
- * same root always resolves to the exact same in-flight promise (the de-dupe
39
- * guard above), so concurrent writers here are always writing IDENTICAL
40
- * data — there is no "stale write lands after a fresher one" race to guard
41
- * against. A guard would only earn its keep if two *different* result
42
- * objects for the same key could race; that can't happen while every caller
43
- * for a given root shares one in-flight run.
44
- *
45
- * Does NOT change session_start's or turn_end's own scheduling (both remain
46
- * skip-if-cached) — this module is additive and mode=full-only.
47
- *
48
- * Abort handling: `formatFullMode` (`tools/lens-diagnostics.ts`) already
49
- * threads a combined signal (Escape/turn-abort OR'd with a hard wall-clock
50
- * ceiling, `FULL_SCAN_WALL_CLOCK_MS`) into the LSP sweep and the cheap
51
- * project-runner scan — this module accepts the SAME signal so a `mode=full`
52
- * abort also bounds the fresh-fetch instead of letting it run uncancelled for
53
- * up to trivy's own ~180s ceiling after the rest of the scan already stopped.
54
- * None of the six analyzer clients accept a cancellation token today (checked
55
- * each `analyze()`/`scan()` signature before assuming otherwise — none does),
56
- * so true in-flight cancellation isn't available at the client level. Instead
57
- * this races the overall `Promise.all(tasks)` against the abort signal and
58
- * returns whatever has already settled — the same "partial is OK, a hang is
59
- * not" shape `clients/deadline-utils.ts`'s `withDeadline(..., onTimeout:
60
- * "undefined")` and `clients/lsp/index.ts`'s `runWorkspaceDiagnostics` already
61
- * use. Already-spawned analyzer processes are NOT killed: they keep running in
62
- * the background (bounded by their own `SCAN_TIMEOUT_MS`/`ANALYSIS_TIMEOUT_MS`)
63
- * and still write their result to cache when they finish, so nothing already
64
- * in flight is wasted — the NEXT caller (or a background session_start/
65
- * turn_end pass) benefits from it. Analyzers that hadn't settled yet when the
66
- * abort fired are reported in both `cold` (so they don't silently read as
67
- * "ran clean") and `abortedIds` (so a caller can render a more honest reason
68
- * than "not applicable").
69
- *
70
- * One analyzer does NOT follow the trigger-or-join shape above: `test-runner`
71
- * (#1004). Its "scan" is the per-edit turn_end test fire (`runtime-turn.ts`),
72
- * which only ever runs the targeted/cascade-aware test files touched by a
73
- * turn's edits — there is no whole-project run to trigger here, and forcing
74
- * one on every mode=full call would be exactly the double-spawn-a-heavy-
75
- * analyzer cost the de-dupe guards above exist to avoid. Its task is a plain
76
- * cache-read of the `"test-runner-findings"` key turn_end already wrote,
77
- * mirroring the pre-#585 `extractCachedProjectDiagnostics` registry's
78
- * "test-runner" row (cache-only, never triggers a run) rather than the
79
- * fresh-run pattern every other task here uses — see that task's own comment.
80
- *
81
- * Refs: #585, #313 (the SecurityScanClient de-dupe prerequisite), #1004
82
- */
83
- import * as fs from "node:fs";
84
- import * as os from "node:os";
85
- import * as path from "node:path";
86
- import { applyDispositionsMultiFile } from "../diagnostic-dispositions.js";
87
- import { getKnipIgnorePatterns } from "../file-utils.js";
88
- import { isAtOrAboveHomeDir, realpathOrResolve } from "../path-utils.js";
89
- import { isSameOrWithin } from "../lsp/server.js";
90
- import { incrementDegradationCount, recordDegradationOnce, } from "../degradation-ledger.js";
91
- import { GitleaksClient } from "../gitleaks-client.js";
92
- import { GovulncheckClient } from "../govulncheck-client.js";
93
- import { isToolInstallAllowedByTrust, projectTrustDenialReason, } from "../project-trust.js";
94
- import { TrivyClient } from "../trivy-client.js";
95
- import { reasonFromAvailabilityVerdict } from "./extractors.js";
96
- import { deadCodeResultToProjectDiagnostics } from "./runner-adapters/dead-code.js";
97
- import { gitleaksResultToProjectDiagnostics } from "./runner-adapters/gitleaks.js";
98
- import { govulncheckResultToProjectDiagnostics } from "./runner-adapters/govulncheck.js";
99
- import { jscpdResultToProjectDiagnostics } from "./runner-adapters/jscpd.js";
100
- import { knipIssuesToProjectDiagnostics } from "./runner-adapters/knip.js";
101
- import { circularDepsToProjectDiagnostics } from "./runner-adapters/madge.js";
102
- import { opengrepResultToProjectDiagnostics } from "./runner-adapters/opengrep.js";
103
- import { testRunnerFindingsToProjectDiagnostics } from "./runner-adapters/runner-findings.js";
104
- import { trivyResultToProjectDiagnostics } from "./runner-adapters/trivy.js";
105
- /** The heavyweight analyzers surfaced in `lens_diagnostics mode=full` — this is
106
- * now the single source of truth for that list (#585 removed the parallel
107
- * cache-only `EXTRACTORS` registry that used to shadow it). `warmTriggerFor`
108
- * (extractors.ts) is keyed by these same ids for the "cold" honesty note.
109
- * Exported so `tests/clients/project-diagnostics/analyzer-coverage.test.ts`
110
- * (#1004's guardrail) can assert every session-start/turn-end analyzer cache
111
- * writer id is a member — the exact #585-class check that would have caught
112
- * opengrep's (and then test-runner's, #1004) omission before it shipped. */
113
- export const ANALYZER_IDS = [
114
- "knip",
115
- "jscpd",
116
- "madge",
117
- "gitleaks",
118
- "govulncheck",
119
- "opengrep",
120
- "trivy",
121
- "dead-code",
122
- "test-runner",
123
- ];
124
- function pushUnique(list, id) {
125
- if (!list.includes(id))
126
- list.push(id);
127
- }
128
- /**
129
- * Trigger (or join, via each client's in-flight de-dupe guard) a fresh run of
130
- * every heavyweight project analyzer and adapt the results to
131
- * `ProjectDiagnostic[]`. Runs all analyzers in parallel — total wall time is bounded by the
132
- * single slowest one (trivy's own timeout ceiling) rather than their sum.
133
- *
134
- * `signal`, when provided and it fires before every analyzer has settled,
135
- * makes this return immediately with whatever partial results are available
136
- * (see the module header for why this races rather than cancels in-flight
137
- * spawns).
138
- */
139
- export async function fetchFreshProjectDiagnostics(cacheManager, cwd, clients, signal, options = {}) {
140
- const requestedRoot = options.analysisRoot === undefined
141
- ? cwd
142
- : path.resolve(cwd, options.analysisRoot);
143
- let analysisRoot;
144
- let analysisRootValidation;
145
- if (options.analysisRoot !== undefined) {
146
- try {
147
- if (!fs.statSync(requestedRoot).isDirectory()) {
148
- throw new Error("is not a directory");
149
- }
150
- analysisRoot = fs.realpathSync(requestedRoot);
151
- }
152
- catch (error) {
153
- const detail = error instanceof Error ? error.message : String(error);
154
- const reason = `the explicit analysis root ${requestedRoot} is unavailable or ${detail}`;
155
- analysisRootValidation = {
156
- state: "undecided",
157
- root: requestedRoot,
158
- reason,
159
- };
160
- incrementDegradationCount({
161
- kind: "lens-diagnostics-analysis-root-rejected",
162
- subject: requestedRoot,
163
- reason,
164
- });
165
- return {
166
- analysisRootValidation,
167
- diagnostics: [],
168
- runners: [],
169
- analyzed: [],
170
- authoritativeCoverage: [],
171
- cold: [...ANALYZER_IDS],
172
- coldReasons: Object.fromEntries(ANALYZER_IDS.map((id) => [id, reason])),
173
- failed: [],
174
- timings: {},
175
- analysisRootError: reason,
176
- };
177
- }
178
- }
179
- else {
180
- analysisRoot = realpathOrResolve(cwd);
181
- }
182
- // #747: refuse to spawn any heavyweight analyzer when the analysis root is
183
- // at — or above — the home directory (the #250/#253 escape class). Every
184
- // analyzer here treats `analysisRoot` as a whole tree to walk; from $HOME
185
- // that means scanning every unrelated repo under it (observed: a jscpd run
186
- // from a WSL home reached 44 GB RSS and OOM-killed the whole instance).
187
- // Same ceiling as startup-scan.ts / runtime-session.ts's resolveSnapshotRoot
188
- // / review-graph's buildOrUpdateGraph; like the latter, there is no safe
189
- // substitute root to fall back to — the caller's `paths` scope only filters
190
- // REPORTED results, it never narrows what these analyzers walk.
191
- const unsafeRootReason = "the analysis root resolves at or above the home directory; heavyweight analyzers refuse to walk from there (#747)";
192
- const homeRoot = realpathOrResolve(options.homeDir ?? os.homedir());
193
- if (options.analysisRoot !== undefined) {
194
- const unsafeExplicitRoot = !isSameOrWithin(homeRoot, analysisRoot) ||
195
- isSameOrWithin(analysisRoot, homeRoot);
196
- analysisRootValidation = unsafeExplicitRoot
197
- ? {
198
- state: "unsafe",
199
- root: analysisRoot,
200
- reason: "explicit analysis root must be strictly contained by the canonical home directory",
201
- }
202
- : { state: "safe", root: analysisRoot };
203
- }
204
- else if (isAtOrAboveHomeDir(analysisRoot, options.homeDir)) {
205
- analysisRootValidation = {
206
- state: "unsafe",
207
- root: analysisRoot,
208
- reason: unsafeRootReason,
209
- };
210
- }
211
- else {
212
- analysisRootValidation = { state: "safe", root: analysisRoot };
213
- }
214
- if (analysisRootValidation.state !== "safe") {
215
- incrementDegradationCount({
216
- kind: "lens-diagnostics-analysis-root-rejected",
217
- subject: analysisRoot,
218
- reason: analysisRootValidation.reason,
219
- });
220
- return {
221
- analysisRootValidation,
222
- diagnostics: [],
223
- runners: [],
224
- analyzed: [],
225
- authoritativeCoverage: [],
226
- cold: [...ANALYZER_IDS],
227
- coldReasons: Object.fromEntries(ANALYZER_IDS.map((id) => [id, unsafeRootReason])),
228
- failed: [],
229
- timings: {},
230
- unsafeRoot: analysisRootValidation.state === "unsafe",
231
- };
232
- }
233
- const diagnostics = [];
234
- const runners = [];
235
- const analyzed = [];
236
- const authoritativeCoverage = [];
237
- const cold = [];
238
- // #1623: the specific reason each `cold` id was skipped, captured at the
239
- // gate that decided it — see FreshProjectDiagnosticsResult.coldReasons.
240
- const coldReasons = {};
241
- const partial = [];
242
- const partialReasons = {};
243
- const failed = [];
244
- const timings = {};
245
- // #1623: ms-old each id's data was when this call read it, for lanes that
246
- // are cache-reads by design (currently only test-runner — see its task
247
- // below) rather than a fresh execution this call. Absent for every other
248
- // key: this module's other lanes always trigger-or-join a genuine run
249
- // when attempted (see the module header), so there is nothing to date.
250
- const cachedAgeMs = {};
251
- const settledIds = new Set();
252
- let dispositionSuppressed = 0;
253
- const dispositionSuppressedByLane = {};
254
- // #1617: this is the ONE choke point every analyzer's findings pass
255
- // through on the way into `diagnostics`, so applying the agent/user
256
- // disposition filter HERE covers the whole mode=full class (knip/jscpd/
257
- // madge/gitleaks/govulncheck/opengrep/trivy/dead-code) in one place — the
258
- // same anchor derivation `dispatcher.ts:924` uses, via
259
- // `applyDispositionsMultiFile` (`diagnostic-dispositions.ts`), not a
260
- // second cloned filter. Unlike the dispatch path's one-file-at-a-time
261
- // shape, a project-wide scan's findings span many files, so this groups by
262
- // each diagnostic's own `filePath` and reads each file's current content
263
- // once — see that function's doc for the fail-open contract when a file
264
- // can't be read.
265
- function markCold(id, reason) {
266
- pushUnique(cold, id);
267
- coldReasons[id] = reason;
268
- }
269
- function markPartial(id, reason) {
270
- pushUnique(partial, id);
271
- partialReasons[id] = reason;
272
- }
273
- /**
274
- * `analysedRoot` is the client's own opt-in `AnalysedRootSignal` (#2154),
275
- * never a property of reaching this function: `success: true` is also what
276
- * a skipped, crashed-before-reporting or memoised run returns, and only the
277
- * client knows which of those it is. Findings are recorded either way — an
278
- * id that did not analyse the root simply carries no authority to retire a
279
- * retained finding.
280
- */
281
- function record(id, adapted, elapsedMs, analysedRoot, analysis) {
282
- if (analysedRoot) {
283
- pushUnique(analyzed, id);
284
- // #2962: the entry is pushed on the DECLARATION, not on its size. A
285
- // coverage producer that analysed the root and proved zero files is a
286
- // third state, distinct from both "covered, file absent from the set"
287
- // and "this runner declares no coverage" — and it is the only one of
288
- // the three that used to fall through to the whole-root id-only arm in
289
- // `runnerRetirementDecision`, retiring findings for files nothing
290
- // scanned. The eight non-producer runners pass no `analyzedFiles` at
291
- // all and are untouched by this.
292
- if (analysis?.analyzedFiles !== undefined) {
293
- const root = realpathOrResolve(analysisRoot);
294
- authoritativeCoverage.push({
295
- runnerId: id,
296
- root,
297
- files: new Set(analysis.analyzedFiles.map((file) => {
298
- return realpathOrResolve(file);
299
- })),
300
- });
301
- if (analysis.analyzedFiles.length === 0) {
302
- // Bounded at one row per (producer, root) per session: the kept
303
- // finding is otherwise indistinguishable from a healthy run, and
304
- // "the only coverage producer proved nothing" is the fact an
305
- // operator needs when mode=full keeps showing a stale finding.
306
- recordDegradationOnce({
307
- kind: "runner-coverage-empty",
308
- subject: `${id}:${root}`,
309
- reason: `${id} analysed this root but declared zero scanned files, so retained ${id} findings are kept rather than retired`,
310
- });
311
- }
312
- }
313
- }
314
- timings[id] = (timings[id] ?? 0) + elapsedMs;
315
- const kept = applyDispositionsMultiFile(adapted, analysisRoot, (d) => d.filePath);
316
- const suppressedHere = adapted.length - kept.length;
317
- dispositionSuppressed += suppressedHere;
318
- if (suppressedHere > 0) {
319
- dispositionSuppressedByLane[id] =
320
- (dispositionSuppressedByLane[id] ?? 0) + suppressedHere;
321
- }
322
- if (kept.length > 0) {
323
- diagnostics.push(...kept);
324
- pushUnique(runners, id);
325
- }
326
- }
327
- function recordFailed(id, result) {
328
- failed.push({
329
- id,
330
- ...("reason" in result && result.reason !== undefined
331
- ? { reason: result.reason }
332
- : {}),
333
- summary: "summary" in result && typeof result.summary === "string"
334
- ? result.summary
335
- : "analyzer reported an unsuccessful run",
336
- });
337
- }
338
- function task(id, run) {
339
- return run().finally(() => settledIds.add(id));
340
- }
341
- const tasks = [
342
- // knip — always applicable to probe (KnipClient.analyze itself no-ops
343
- // when no project root marker is found, matching session_start).
344
- task("knip", async () => {
345
- const startMs = Date.now();
346
- const result = await clients.knipClient.analyze(analysisRoot, getKnipIgnorePatterns());
347
- if (!result.success) {
348
- recordFailed("knip", result);
349
- return;
350
- }
351
- // knip reports `success: true` for a run that never happened (no
352
- // project root, a memo hit, an unparseable exit-0). Those belong in
353
- // the honest `cold` channel, not in "fetched fresh this call".
354
- if (result.analyzed !== true) {
355
- markCold("knip", result.summary ?? "knip did not analyse this root");
356
- return;
357
- }
358
- cacheManager.writeCache("knip", result, analysisRoot, {
359
- scanDurationMs: Date.now() - startMs,
360
- });
361
- record("knip", knipIssuesToProjectDiagnostics(analysisRoot, result.issues ?? []), Date.now() - startMs, true, result);
362
- }),
363
- // jscpd — duplicate code detection. Cache key varies with TS-project
364
- // detection, exactly mirroring session_start's own logic.
365
- task("jscpd", async () => {
366
- if (!(await clients.jscpdClient.ensureAvailable())) {
367
- markCold("jscpd", reasonFromAvailabilityVerdict("jscpd", clients.jscpdClient.getAvailabilityVerdict?.()));
368
- return;
369
- }
370
- const isTsProject = fs.existsSync(path.join(analysisRoot, "tsconfig.json"));
371
- const scannerKey = isTsProject ? "jscpd-ts" : "jscpd";
372
- const startMs = Date.now();
373
- const result = await clients.jscpdClient.scan(analysisRoot, undefined, undefined, isTsProject);
374
- if (!result.success) {
375
- recordFailed("jscpd", result);
376
- return;
377
- }
378
- if (result.analyzed !== true) {
379
- markCold("jscpd", "jscpd did not analyse this root (no source files, or the scan produced no report)");
380
- return;
381
- }
382
- cacheManager.writeCache(scannerKey, result, analysisRoot, {
383
- scanDurationMs: Date.now() - startMs,
384
- });
385
- record("jscpd", jscpdResultToProjectDiagnostics(analysisRoot, result), Date.now() - startMs, true, result);
386
- }),
387
- // madge — circular-dependency detection.
388
- task("madge", async () => {
389
- if (!(await clients.depChecker.ensureAvailable())) {
390
- markCold("madge", reasonFromAvailabilityVerdict("madge", clients.depChecker.getAvailabilityVerdict?.()));
391
- return;
392
- }
393
- const startMs = Date.now();
394
- const result = await clients.depChecker.scanProject(analysisRoot);
395
- cacheManager.writeCache("madge", result, analysisRoot, {
396
- scanDurationMs: Date.now() - startMs,
397
- });
398
- record("madge", circularDepsToProjectDiagnostics(analysisRoot, result.circular ?? []), Date.now() - startMs, result.analyzed === true, result);
399
- }),
400
- // gitleaks — committed-secrets detection. session_start/per-edit stay
401
- // config-gated per #130's strict default (GitleaksClient.hasGitleaksSignal),
402
- // but mode=full is an explicitly-requested comprehensive review — use
403
- // #130's own considered-but-unshipped "smart-default" tier instead (any
404
- // tracked git repo, GitleaksClient.hasGitRepo): gitleaks is cheap (~10MB
405
- // binary, no external DB pull) and findings are advisory-only, so the
406
- // stricter opt-in gate is needlessly conservative for this call. Refs #608
407
- // dogfooding finding that flagged gitleaks/trivy/govulncheck/dead-code as
408
- // "cold" on a project with no explicit gitleaks config.
409
- task("gitleaks", async () => {
410
- if (!GitleaksClient.hasGitRepo(analysisRoot)) {
411
- markCold("gitleaks", "not a git repository (no .git found)");
412
- return;
413
- }
414
- if (!(await clients.gitleaksClient.ensureAvailable())) {
415
- markCold("gitleaks", reasonFromAvailabilityVerdict("gitleaks", clients.gitleaksClient.getAvailabilityVerdict?.()));
416
- return;
417
- }
418
- const startMs = Date.now();
419
- const result = await clients.gitleaksClient.scan(analysisRoot, {
420
- requireSignal: false,
421
- });
422
- if (!result.success) {
423
- recordFailed("gitleaks", result);
424
- return;
425
- }
426
- cacheManager.writeCache("gitleaks", result, analysisRoot, {
427
- scanDurationMs: Date.now() - startMs,
428
- });
429
- record("gitleaks", gitleaksResultToProjectDiagnostics(analysisRoot, result), Date.now() - startMs, result.analyzed === true, result);
430
- }),
431
- // govulncheck — Go module CVE detection. Go-module-gated per #132.
432
- task("govulncheck", async () => {
433
- if (!GovulncheckClient.hasGoModule(analysisRoot)) {
434
- markCold("govulncheck", "no go.mod found (not a Go module)");
435
- return;
436
- }
437
- if (!(await clients.govulncheckClient.ensureAvailable())) {
438
- // #1623 fix-round F1: `GovulncheckClient.doEnsureAvailable` has a
439
- // branch (`assertInstallAllowed`, govulncheck-client.ts) that returns
440
- // false WITHOUT ever touching its availability latch — a
441
- // project-trust install denial, deliberately not latched so a later
442
- // trust grant can retry (see that file's own comment). The latch's
443
- // verdict is genuinely absent in that case, not merely unread, so
444
- // check trust denial FIRST via the same taxonomy project-trust.ts
445
- // already exposes, and only fall back to the probe-based verdict
446
- // (a real timeout/absence) when trust isn't the reason.
447
- markCold("govulncheck", isToolInstallAllowedByTrust()
448
- ? reasonFromAvailabilityVerdict("govulncheck", clients.govulncheckClient.getAvailabilityVerdict?.())
449
- : (projectTrustDenialReason() ?? "govulncheck binary unavailable"));
450
- return;
451
- }
452
- const startMs = Date.now();
453
- const result = await clients.govulncheckClient.analyze(analysisRoot);
454
- if (!result.success) {
455
- recordFailed("govulncheck", result);
456
- return;
457
- }
458
- cacheManager.writeCache("govulncheck", result, analysisRoot, {
459
- scanDurationMs: Date.now() - startMs,
460
- });
461
- record("govulncheck", govulncheckResultToProjectDiagnostics(analysisRoot, result), Date.now() - startMs, result.analyzed === true, result);
462
- }),
463
- // opengrep — full-workspace semgrep-grade security/quality findings via a
464
- // single project-wide CLI scan (#584). Structurally always-on: mirrors
465
- // session_start (`runtime-session.ts`) and the LSP auxiliary's own
466
- // enablement (`OpengrepClient.resolveConfig` only picks WHICH rules run,
467
- // never whether opengrep runs at all), so unlike gitleaks/govulncheck/trivy
468
- // it carries NO static project-type gate — only an availability probe.
469
- // Re-entrancy-safe like the other SecurityScanClient-family analyzers:
470
- // `OpengrepClient.scan` routes through `SecurityScanClient.dedupeScan`, so a
471
- // call here that races the session_start whole-tree scan of the same root
472
- // JOINS the in-flight run instead of paying a second heavy scan (#883 single
473
- // source of truth — the exact wiring gitleaks/trivy use above). #585: this
474
- // was the one extractor registered in `extractors.ts` but MISSING here, so
475
- // opengrep scanned+cached yet nothing production read it back into
476
- // `lens_diagnostics mode=full` — the honesty gap (#533) this task closes.
477
- task("opengrep", async () => {
478
- if (!(await clients.opengrepClient.ensureAvailable())) {
479
- markCold("opengrep", reasonFromAvailabilityVerdict("opengrep", clients.opengrepClient.getAvailabilityVerdict?.()));
480
- return;
481
- }
482
- const startMs = Date.now();
483
- const result = await clients.opengrepClient.scan(analysisRoot);
484
- if (!result.success) {
485
- recordFailed("opengrep", result);
486
- return;
487
- }
488
- if (result.analyzed !== true) {
489
- // A usable partial report with no scanned paths carries findings but
490
- // no retirement authority. Keep those findings visible and mark the
491
- // producer partial so the renderer does not call it cold/not-run.
492
- const reason = result.summary ??
493
- result.reason ??
494
- "opengrep did not analyse this root";
495
- if (result.partial)
496
- markPartial("opengrep", reason);
497
- else
498
- markCold("opengrep", reason);
499
- record("opengrep", opengrepResultToProjectDiagnostics(analysisRoot, result), Date.now() - startMs, false, result);
500
- return;
501
- }
502
- if (result.partial) {
503
- markPartial("opengrep", result.summary ??
504
- result.reason ??
505
- "opengrep scan coverage is incomplete");
506
- record("opengrep", opengrepResultToProjectDiagnostics(analysisRoot, result), Date.now() - startMs, true, result);
507
- return;
508
- }
509
- cacheManager.writeCache("opengrep", result, analysisRoot, {
510
- scanDurationMs: Date.now() - startMs,
511
- });
512
- record("opengrep", opengrepResultToProjectDiagnostics(analysisRoot, result), Date.now() - startMs, result.analyzed === true, result);
513
- }),
514
- // trivy — dependency CVE detection. Explicit opt-in per #131.
515
- task("trivy", async () => {
516
- if (!TrivyClient.shouldScan(analysisRoot)) {
517
- markCold("trivy", "not opted in (.pi-lens.json trivy.enabled) or no dependency manifest found");
518
- return;
519
- }
520
- if (!(await clients.trivyClient.ensureAvailable())) {
521
- markCold("trivy", reasonFromAvailabilityVerdict("trivy", clients.trivyClient.getAvailabilityVerdict?.()));
522
- return;
523
- }
524
- const startMs = Date.now();
525
- const result = await clients.trivyClient.scan(analysisRoot);
526
- if (!result.success) {
527
- recordFailed("trivy", result);
528
- return;
529
- }
530
- cacheManager.writeCache("trivy", result, analysisRoot, {
531
- scanDurationMs: Date.now() - startMs,
532
- });
533
- record("trivy", trivyResultToProjectDiagnostics(analysisRoot, result), Date.now() - startMs, result.analyzed === true, result);
534
- }),
535
- // dead-code — cross-file dead-code for non-JS/TS languages (#127).
536
- // Each client self-gates via detect(); only matching-language projects
537
- // incur the whole-tree scan. Run the applicable ones in parallel too.
538
- task("dead-code", async () => {
539
- const applicable = clients.deadCodeClients.filter((c) => c.detect(analysisRoot));
540
- if (applicable.length === 0) {
541
- markCold("dead-code", "no dead-code client detected an applicable language for this project");
542
- return;
543
- }
544
- await Promise.all(applicable.map(async (client) => {
545
- const cacheKey = `dead-code-${client.id}`;
546
- const startMs = Date.now();
547
- const result = await client.analyze(analysisRoot);
548
- if (!result.success) {
549
- recordFailed("dead-code", result);
550
- return;
551
- }
552
- if (result.analyzed === true) {
553
- cacheManager.writeCache(cacheKey, result, analysisRoot, {
554
- scanDurationMs: Date.now() - startMs,
555
- });
556
- }
557
- const adapted = deadCodeResultToProjectDiagnostics(analysisRoot, result);
558
- record("dead-code", adapted, Date.now() - startMs, result.analyzed === true, result);
559
- }));
560
- }),
561
- // test-runner — CACHE-READ only, unlike every task above (#1004). Its
562
- // session cadence doesn't fit the "trigger-or-join a fresh run" shape the
563
- // rest of this module uses: the actual scan is the per-edit turn_end fire
564
- // in `runtime-turn.ts`, which only ever runs the (targeted, cascade-aware)
565
- // test files touched by THIS turn's edits — there is no "whole project"
566
- // test run to (re-)trigger here, and unconditionally spawning a full suite
567
- // on every mode=full call would be the exact "heavy re-run on every call"
568
- // cost this module's other tasks avoid via de-dupe/gating. So this task
569
- // instead peeks at the `"test-runner-findings"` cache turn_end already
570
- // wrote — the same cache key, the same adapter
571
- // (`testRunnerFindingsToProjectDiagnostics`), and the same cache-only
572
- // contract the pre-#585 `extractCachedProjectDiagnostics` registry's
573
- // "test-runner" row used (see extractors.ts's removal note) — before #585
574
- // dropped that reader without replacing this one row's semantics here.
575
- // Deliberately never calls `writeCache`: there is nothing fresher to write
576
- // back, only what turn_end already produced.
577
- //
578
- // No double-count / honesty gap (#533): explicit `pilens_turn_end`
579
- // delivery may call `consumeTestFindings` (`runtime-context.ts`) to
580
- // read-and-clear this SAME cache key once. Automatic Pi delivery uses a
581
- // non-context custom entry and never consumes this pull-diagnostics cache.
582
- // This task only ever reads (never clears) it, so it can't race that
583
- // consumption into re-delivering a message twice — at most it surfaces
584
- // the same underlying failures a second time, through a different
585
- // surface (the mode=full project snapshot) that was previously silently
586
- // empty for this analyzer. If `consumeTestFindings` already cleared the
587
- // cache before this runs, this task correctly sees nothing and reports
588
- // `cold` rather than inventing stale data.
589
- task("test-runner", async () => {
590
- const startMs = Date.now();
591
- const cached = cacheManager.readCache("test-runner-findings", analysisRoot);
592
- if (!cached?.data) {
593
- markCold("test-runner", "no turn_end test-runner cache entry yet this session");
594
- return;
595
- }
596
- // #1623: unlike every other lane in this module, test-runner is a
597
- // cache-read BY DESIGN (see the task's own header comment above) — it
598
- // never performs a fresh run this call, so its age must be surfaced
599
- // the same way a genuinely-stale cache read would be, rather than
600
- // looking indistinguishable from a lane that just executed.
601
- cachedAgeMs["test-runner"] =
602
- Date.now() - new Date(cached.meta.timestamp).getTime();
603
- record("test-runner", testRunnerFindingsToProjectDiagnostics(cached.data, analysisRoot, options.runtime), Date.now() - startMs,
604
- // Never authoritative: this lane reads the cache turn_end wrote,
605
- // it never runs a suite over the root this call (#2154).
606
- false);
607
- }),
608
- ];
609
- // Swallow any later rejection so an aborted-and-abandoned task can never
610
- // surface as an unhandled rejection once this function has already
611
- // returned partial results below.
612
- const allSettled = Promise.all(tasks)
613
- .then(() => "completed")
614
- .catch(() => "completed");
615
- const outcome = signal
616
- ? await Promise.race([
617
- allSettled,
618
- new Promise((resolve) => {
619
- if (signal.aborted) {
620
- resolve("aborted");
621
- return;
622
- }
623
- signal.addEventListener("abort", () => resolve("aborted"), {
624
- once: true,
625
- });
626
- }),
627
- ])
628
- : await allSettled;
629
- if (outcome === "aborted") {
630
- const abortedIds = ANALYZER_IDS.filter((id) => !settledIds.has(id));
631
- for (const id of abortedIds)
632
- pushUnique(cold, id);
633
- return {
634
- analysisRootValidation,
635
- diagnostics,
636
- runners,
637
- analyzed,
638
- authoritativeCoverage,
639
- cold,
640
- coldReasons,
641
- partial,
642
- partialReasons,
643
- failed,
644
- timings,
645
- cachedAgeMs,
646
- aborted: true,
647
- abortedIds,
648
- dispositionSuppressed,
649
- dispositionSuppressedByLane,
650
- };
651
- }
652
- return {
653
- analysisRootValidation,
654
- diagnostics,
655
- runners,
656
- analyzed,
657
- authoritativeCoverage,
658
- cold,
659
- coldReasons,
660
- partial,
661
- partialReasons,
662
- failed,
663
- timings,
664
- cachedAgeMs,
665
- dispositionSuppressed,
666
- dispositionSuppressedByLane,
667
- };
668
- }