@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,101 +0,0 @@
1
- import { LEDGER_FIELD_MAX } from "../../../ledger-bounds.js";
2
- import { truncatedByOutputCap } from "../../../spawn-output-cap.js";
3
- /**
4
- * The first non-empty line of a tool's output, bounded.
5
- *
6
- * Replaces six hand-rolled copies that spelled the same idea two ways —
7
- * `text.trim().split("\n")[0]` and `(text ?? "").trim().split("\n")[0] ||
8
- * fallback` — with differing (or absent) length caps. Two behaviours the
9
- * copies got wrong and this does not: a leading blank line no longer yields an
10
- * empty "first line", and `\r\n` output no longer keeps its carriage return.
11
- *
12
- * Returns `""` when the text is empty or all-whitespace, so callers keep using
13
- * `firstOutputLine(x) || fallback`.
14
- */
15
- export function firstOutputLine(text, max = LEDGER_FIELD_MAX) {
16
- for (const line of String(text ?? "").split(/\r?\n/)) {
17
- const trimmed = line.trim();
18
- if (!trimmed)
19
- continue;
20
- return trimmed.length > max ? `${trimmed.slice(0, max)}…` : trimmed;
21
- }
22
- return "";
23
- }
24
- /**
25
- * Decide whether a tool ran, and if not, why (#1816).
26
- *
27
- * The defect this closes (the #1736 class): a runner that reads only its
28
- * parsed diagnostics reports a CLEAN file whenever the parse yields nothing —
29
- * including when the tool exited non-zero on an unknown flag, was killed by a
30
- * signal, or never spawned at all. An empty result must distinguish clean from
31
- * errored.
32
- *
33
- * Classification order, most specific first:
34
- * 1. `result.error` or a signal — the process never completed. `did-not-run`.
35
- * 2. `status === null` with no error — no exit status ever arrived, so no
36
- * analysis can be claimed. `did-not-run`.
37
- * 3. `reportMissing` — an artifact tool wrote no report. Nonzero exit means
38
- * `report-missing`; exit 0 means a genuinely clean run that had nothing
39
- * to write.
40
- * 4. A nonzero status outside the caller's declared `ran` table.
41
- * `rejected-invocation`.
42
- * 5. A nonzero status with nothing to parse. `did-not-run` — a tool that
43
- * analysed the file says SOMETHING, so silence plus failure is evidence
44
- * it never got that far.
45
- * Everything else ran.
46
- *
47
- * Note what is deliberately NOT a non-ran path: a nonzero status WITH output
48
- * and no contradicting table. Most linters exit non-zero precisely because
49
- * they found something, and their findings are on stdout.
50
- */
51
- export function classifyRunOutcome(input) {
52
- const { result, exitCodes, reportMissing } = input;
53
- const status = result.status ?? null;
54
- const signal = result.signal ?? null;
55
- const output = input.output ?? result.stdout;
56
- const base = {
57
- status,
58
- signal,
59
- firstOutputLine: firstOutputLine(result.stderr) ||
60
- firstOutputLine(result.stdout) ||
61
- firstOutputLine(result.error?.message),
62
- // Evidence carried alongside the verdict, never part of deciding it — the
63
- // branches below are byte-for-byte the pre-#2100 rules.
64
- outputCapped: truncatedByOutputCap(result),
65
- };
66
- if (result.error || signal)
67
- return { kind: "did-not-run", ...base };
68
- if (status === null)
69
- return { kind: "did-not-run", ...base };
70
- if (reportMissing) {
71
- return status === 0
72
- ? { kind: "ran", ...base }
73
- : { kind: "report-missing", ...base };
74
- }
75
- if (status !== 0 && exitCodes && !exitCodes.ran.includes(status)) {
76
- return { kind: "rejected-invocation", ...base };
77
- }
78
- if (status !== 0 && !output?.trim()) {
79
- return { kind: "did-not-run", ...base };
80
- }
81
- return { kind: "ran", ...base };
82
- }
83
- /**
84
- * True when a tool both failed and produced nothing to parse — it never got as
85
- * far as linting the file. Callers map this to `skipped`, never `succeeded`.
86
- *
87
- * Kept as its own export because callers outside the dispatch runners use it
88
- * (`dead-code-client.ts`, `knip-client.ts`). It now DELEGATES to
89
- * `classifyRunOutcome` rather than restating the rule, but keeps its exact
90
- * historical semantics: the `!output.trim()` conjunct stays here so a spawn
91
- * error that still produced partial output keeps reaching the parser, which is
92
- * what today's callers depend on. `classifyRunOutcome` is the stricter,
93
- * outcome-typed reading; migrate callers to it deliberately, not by accident.
94
- *
95
- * `output` defaults to stdout. Runners that parse stderr too pass the exact
96
- * string they are about to hand the parser, so "nothing to parse" means both
97
- * streams rather than just one.
98
- */
99
- export function spawnFailedWithNoOutput(result, output = result.stdout) {
100
- return (classifyRunOutcome({ result, output }).kind !== "ran" && !output?.trim());
101
- }
@@ -1,235 +0,0 @@
1
- /**
2
- * One wording for a tool that produced no usable result, and the runner gate
3
- * that emits it to the degradation ledger (#1816).
4
- */
5
- import { incrementDegradationCount } from "../../../degradation-ledger.js";
6
- import { truncateForLedger } from "../../../ledger-bounds.js";
7
- import { classifyRunOutcome, firstOutputLine, } from "./spawn-outcome.js";
8
- /**
9
- * What ended this run, as one clause, most specific cause first.
10
- *
11
- * A signal is a stronger explanation than the exit status, so it displaces a
12
- * `null` one rather than sitting beside it. Our own output cap is stronger
13
- * still: the signal it killed with is a detail of OUR decision, and naming that
14
- * signal alone reads as the tool misbehaving (#2100).
15
- */
16
- function describeEnding(input) {
17
- if (input.outputCapped)
18
- return "was stopped at its output cap";
19
- if (input.signal)
20
- return `was killed by ${input.signal}`;
21
- if (input.status === null)
22
- return "did not run (spawn failure)";
23
- return `exited ${input.status}`;
24
- }
25
- /**
26
- * One wording for "this tool did not produce a usable result" (#1816).
27
- *
28
- * Before this, five reason builders spelled the same sentence five ways and
29
- * twelve sites truncated with their own literal, and NONE of them named the
30
- * signal — so a SIGKILLed tool read exactly like a clean exit 0. The wording
31
- * here is fixed, the truncation is the ledger's own `LEDGER_FIELD_MAX` policy
32
- * applied once at the end, and the signal is always named when present.
33
- *
34
- * Shape: `tool (k=v, k=v) <what happened> with <what was missing>: <detail>`
35
- */
36
- export function formatToolFailure(input) {
37
- const entries = Object.entries(input.fields ?? {}).filter(([, value]) => value !== undefined && value !== "");
38
- const identity = entries.length
39
- ? `${input.tool} (${entries.map(([key, value]) => `${key}=${value}`).join(", ")})`
40
- : input.tool;
41
- const what = describeEnding(input);
42
- const missing = input.reportMissing ? "no report file" : "no output";
43
- const detail = firstOutputLine(input.stderr) ||
44
- firstOutputLine(input.stdout) ||
45
- "no stderr";
46
- return truncateForLedger(`${identity} ${what} with ${missing}: ${detail}`);
47
- }
48
- /**
49
- * `formatToolFailure` fed straight from a `classifyRunOutcome` verdict — the
50
- * path every migrated runner takes, so the outcome and the wording can never
51
- * disagree about the status or the signal.
52
- */
53
- export function formatRunOutcomeFailure(tool, outcome, fields) {
54
- return formatToolFailure({
55
- tool,
56
- status: outcome.status,
57
- signal: outcome.signal,
58
- outputCapped: outcome.outputCapped,
59
- stderr: outcome.firstOutputLine,
60
- reportMissing: outcome.kind === "report-missing",
61
- fields: { outcome: outcome.kind, ...fields },
62
- });
63
- }
64
- /**
65
- * The migrated runners' one call: classify the spawn, and when the tool did
66
- * NOT run, record a bounded `runner-empty-result` row and hand back the
67
- * `skipped` verdict. Returns `null` when the tool ran, meaning "carry on and
68
- * parse".
69
- *
70
- * `incrementDegradationCount` keeps the record bounded — one latest-reason
71
- * entry per (kind, subject) with an exact event tally — so a permanently
72
- * broken tool costs one ledger row, not one per dispatched file. `subject` is
73
- * the tool id, which is the discriminating identity a reader needs: WHICH tool
74
- * is silently contributing nothing.
75
- */
76
- export function skipUnlessToolRan(tool, input, fields) {
77
- const outcome = classifyRunOutcome(input);
78
- if (outcome.kind === "ran")
79
- return null;
80
- incrementDegradationCount({
81
- kind: "runner-empty-result",
82
- subject: tool,
83
- reason: formatRunOutcomeFailure(tool, outcome, fields),
84
- });
85
- return { status: "skipped", diagnostics: [], semantic: "none" };
86
- }
87
- /**
88
- * The record a runner leaves when its parser read NOTHING out of output the
89
- * tool did produce (#1948).
90
- *
91
- * `skipUnlessToolRan` covers the adjacent case: the tool produced no output at
92
- * all. The hole it leaves is the one that hid five parser bugs for months —
93
- * vale (#1933), taplo, stylelint, phpstan (#1946), sqlfluff. Each received a
94
- * real report, extracted zero diagnostics from it, and reported "succeeded, 0
95
- * diagnostics", which is byte-for-byte what a genuinely clean file records.
96
- * A reader could not answer "is this file clean, or did the parser fail?".
97
- *
98
- * THE RULE: record only when the exit status is NONZERO, the output handed to
99
- * the parser is non-empty, and the parse yielded zero diagnostics. A nonzero
100
- * exit is the tool asserting something is wrong; extracting nothing from that
101
- * assertion means our reader disagrees with the tool, and one of the two is
102
- * broken.
103
- *
104
- * Exit 0 with zero parsed is deliberately NOT recorded, even with non-empty
105
- * output: that is the overwhelmingly common clean save. Linters print summary
106
- * banners, empty JSON arrays, and progress noise on a clean run, so a row per
107
- * clean save would drown the ledger and bury the real signal.
108
- *
109
- * FALSE NEGATIVES this rule accepts, stated plainly:
110
- * - A tool that reports findings under exit 0. `swiftlint` is the live
111
- * example among the adopters: a warning-only run exits 0 and still writes
112
- * a full JSON array, so a swiftlint parser break that never trips a
113
- * nonzero exit stays invisible here. (`vale` also exits 0 on findings by
114
- * default, but its actual #1933 break exited 1, so it is not the example.)
115
- * This gap is deliberate and is NOT closed by adding an output-length
116
- * threshold for exit 0. That class belongs to the captured-fixture lane —
117
- * `tests/clients/dispatch/runners/captured-real-output.test.ts` pins each
118
- * parser against real recorded binary output, which catches a broken
119
- * parser directly instead of guessing from output size. A length
120
- * threshold here would fire on every clean run of every tool that prints
121
- * a summary banner.
122
- * - A tool whose parser breaks only for a SUBSET of findings still reports
123
- * the ones it can read, so `parsedCount` is nonzero and nothing records.
124
- *
125
- * FALSE POSITIVES it accepts: a runner that legitimately parses zero
126
- * diagnostics out of a failing run — `go-vet` exits nonzero for a SIBLING
127
- * file's problem and then filters to the edited file, and `terragrunt` does
128
- * the same across a unit directory. Such runners stay off this helper rather
129
- * than being special-cased inside it; see the runner-family registries in
130
- * `tests/clients/dispatch/runners/parsed-nothing-sweep.test.ts`.
131
- *
132
- * Bounded by `incrementDegradationCount`: one latest-reason entry per
133
- * (kind, subject) with an exact tally, so a permanently broken parser costs
134
- * ONE ledger row and not one per dispatched file. `subject` is the tool id
135
- * because a parser break is a property of the tool and our reader of it, not
136
- * of the project it ran in; aggregating on the tool keeps exactly the identity
137
- * a reader needs ("which tool is stuck") while staying bounded across every
138
- * workspace in the session.
139
- *
140
- * @returns true when a row was recorded.
141
- */
142
- export function recordParsedNothing(input) {
143
- const { tool, status, output, parsedCount } = input;
144
- // Three conjuncts, one per clause of the rule above. Each is separately
145
- // load-bearing and separately tested: `parsedCount` keeps a run that DID
146
- // yield findings silent, `status` keeps the clean-save case silent (0 and a
147
- // never-arrived null alike — neither is a tool asserting a problem), and
148
- // `output` keeps "the tool said nothing at all" with `runner-empty-result`
149
- // rather than double-recording it here.
150
- if (parsedCount > 0)
151
- return false;
152
- if (!status)
153
- return false;
154
- const text = output ?? "";
155
- if (!text.trim())
156
- return false;
157
- const entries = Object.entries(input.fields ?? {}).filter(([, value]) => value !== undefined && value !== "");
158
- const identity = entries.length
159
- ? `${tool} (${entries.map(([key, value]) => `${key}=${value}`).join(", ")})`
160
- : tool;
161
- incrementDegradationCount({
162
- kind: "runner-parsed-nothing",
163
- subject: tool,
164
- reason: truncateForLedger(`${identity} exited ${status} with ${text.length} chars of output but the parser read 0 diagnostics: ${firstOutputLine(text) || "no first line"}`),
165
- });
166
- return true;
167
- }
168
- /**
169
- * The one seam a runner uses to go from a spawn result to diagnostics (#1948).
170
- *
171
- * It composes the two gates that must BOTH hold before a runner may claim a
172
- * clean file: `skipUnlessToolRan` (the tool produced nothing — #1816) and
173
- * `recordParsedNothing` (the tool produced something the parser could not
174
- * read). Runners call this instead of calling `skipUnlessToolRan` and then
175
- * parsing on their own, so the second gate cannot be forgotten by whoever
176
- * writes runner 53. `tests/clients/dispatch/runners/parsed-nothing-sweep.test.ts`
177
- * enforces that.
178
- */
179
- export function parseToolRun(tool, input, parse, options = {}) {
180
- const skipped = skipUnlessToolRan(tool, input, options.fields);
181
- if (skipped)
182
- return { skipped, diagnostics: [], parsedNothing: false };
183
- const output = options.parseOutput ?? input.output ?? input.result.stdout ?? "";
184
- const diagnostics = [...parse(output)];
185
- const parsedNothing = recordParsedNothing({
186
- tool,
187
- status: input.result.status ?? null,
188
- output,
189
- parsedCount: diagnostics.length,
190
- fields: options.fields,
191
- });
192
- if (parsedNothing && options.skipWhenParsedNothing) {
193
- return {
194
- skipped: { status: "skipped", diagnostics: [], semantic: "none" },
195
- diagnostics: [],
196
- parsedNothing,
197
- };
198
- }
199
- return { skipped: null, diagnostics, parsedNothing };
200
- }
201
- export function finishParsedRun(input) {
202
- const raw = `${input.result.stdout ?? ""}${input.result.stderr ?? ""}`;
203
- const status = input.result.status ?? null;
204
- if (input.diagnostics.length === 0) {
205
- if (status !== 0 && raw.trim().length > 0) {
206
- return {
207
- status: "failed",
208
- diagnostics: [
209
- {
210
- id: `${input.tool}:parse-error:1`,
211
- message: `${input.tool} exited ${status} but its output could not be parsed`,
212
- filePath: input.ctx.filePath,
213
- line: 1,
214
- column: 1,
215
- severity: "warning",
216
- semantic: "warning",
217
- tool: input.tool,
218
- },
219
- ],
220
- semantic: "warning",
221
- };
222
- }
223
- return { status: "succeeded", diagnostics: [], semantic: "none" };
224
- }
225
- const mapped = input.classify?.(input.diagnostics);
226
- if (mapped) {
227
- return { ...mapped, diagnostics: input.diagnostics };
228
- }
229
- const hasBlocking = input.diagnostics.some((d) => d.semantic === "blocking");
230
- return {
231
- status: hasBlocking ? "failed" : "succeeded",
232
- diagnostics: input.diagnostics,
233
- semantic: hasBlocking ? "blocking" : "warning",
234
- };
235
- }
@@ -1,169 +0,0 @@
1
- /**
2
- * Shared toolchain-availability lifecycle (#1476 Sonar follow-up).
3
- *
4
- * `candidate-probe.ts` factored out the PATH sweep the Go and Rust clients ran,
5
- * but the LIFECYCLE around it stayed written twice: the transient-aware latch,
6
- * the in-flight dedupe that keeps concurrent first-time callers to one sweep,
7
- * the path memo, and the two `availability_decision` records. Two copies of one
8
- * rule is how #1467's fix missed seven sites, so the rule lives here once and
9
- * each client contributes only its configuration.
10
- *
11
- * Callers keep their own public method names — `isGoAvailableAsync`,
12
- * `findCargoPathAsync` — because other modules call them; only the body moves.
13
- */
14
- import { createAvailabilityLatch, logAvailabilityDecision, } from "./availability-policy.js";
15
- import { probeAvailabilityCandidates } from "./candidate-probe.js";
16
- import { createAvailabilityProbeFlight } from "../../../availability-probe-flight.js";
17
- import { createGenerationSource } from "../../../generation-guard.js";
18
- import { createSingleFlight } from "../../../single-flight.js";
19
- /**
20
- * Session generation for toolchain-availability resets (#2455 fix round 3, F2).
21
- *
22
- * `reset()` clears the memo and the latch, but a probe that was ALREADY in
23
- * flight when it ran knows nothing about that. Without a generation, a
24
- * post-reset caller joins the pre-reset flight and, worse, that flight's own
25
- * settlement writes its stale verdict back into the freshly cleared latch — so
26
- * a tool installed between sessions still read "missing" for the whole new
27
- * session. That is #1674's defect read from both the sharing side and the
28
- * settle side, and the reason `SingleFlightOptions.generation` exists.
29
- *
30
- * This is the repo's extracted primitive (`clients/generation-guard.ts`, #1754)
31
- * rather than a hand-rolled counter (#2455 fix round 4, F1). Two things come
32
- * with it that the hand-rolled form did not have: the source is declared by
33
- * construction, so the #1754 ratchet can see it; and `guardedWrite` puts every
34
- * superseded write in the degradation ledger as a bounded
35
- * `generation-guard-stale-write` record per (source, subject), so a dogfood
36
- * session can tell "the guard is working" from "the guard never fires" instead
37
- * of watching superseded writes vanish silently (F4).
38
- *
39
- * A module-level source rather than a per-instance one, deliberately. It is a
40
- * counter, so nothing has to be hand-maintained and no flight is retained for
41
- * the sake of superseding it. And `toolchainProbeFlights` is itself shared
42
- * ACROSS instances (#2131: two clients probing the same candidate list run one
43
- * sweep), so its supersede signal cannot live on any one instance. The cost is
44
- * that resetting one toolchain also supersedes another's in-flight sweep; that
45
- * is at worst one extra probe, never a wrong verdict, and every registered
46
- * reset fires in the same `session_start` block anyway.
47
- */
48
- const toolchainGenerations = createGenerationSource("toolchain-availability");
49
- const toolchainProbeFlights = createAvailabilityProbeFlight({ generation: toolchainGenerations.current });
50
- /**
51
- * Own one toolchain's availability: sweep the platform candidate list, memoize
52
- * the path that answered, and park the verdict behind the shared latch so a
53
- * timed-out probe expires instead of latching "the toolchain is not installed"
54
- * for the life of the process.
55
- */
56
- export function createToolchainAvailability(config) {
57
- const availabilityLatch = createAvailabilityLatch();
58
- let toolPath = null;
59
- /** Classification of the candidate sweep, for the retry decision. */
60
- let sweepSawTransient = false;
61
- let sweepTransientCause = "probe-timeout";
62
- let sweepHostStallMs = 0;
63
- /** What the last classified candidate returned, for the decision record. */
64
- let sweepEvidence;
65
- const ensureFlight = createSingleFlight({
66
- generation: toolchainGenerations.current,
67
- });
68
- async function findPath() {
69
- if (toolPath)
70
- return toolPath;
71
- const paths = process.platform === "win32" ? config.windowsPaths : config.unixPaths;
72
- const handle = toolchainGenerations.capture();
73
- const shared = toolchainProbeFlights.run(`toolchain:${config.tool}|${config.probeArgs.join("|")}|${config.windowsPaths.join("|")}|${config.unixPaths.join("|")}`, () => probeAvailabilityCandidates(paths, config.probeArgs, config.budgetMs));
74
- const sweep = await shared.promise;
75
- // A reset may have landed while this sweep was running. Its answer then
76
- // describes the session that just ended, so it must not write itself back
77
- // into the memo `reset()` just cleared, nor into the classification fields
78
- // the replacement flight reads to build ITS verdict. The memo is the
79
- // sharper half: a superseded sweep that writes `foundPath` latches a path
80
- // the reset may have been called BECAUSE it went away, so the seam that
81
- // exists to un-latch a false "missing" would instead latch a false
82
- // "found". Callers already holding this promise still get what the sweep
83
- // actually found.
84
- handle.guardedWrite(`findPath:${config.tool}`, () => {
85
- sweepSawTransient = sweep.sawTransient;
86
- sweepTransientCause = sweep.transientCause;
87
- sweepHostStallMs = sweep.hostStallMs;
88
- sweepEvidence = sweep.evidence;
89
- if (sweep.foundPath)
90
- toolPath = sweep.foundPath;
91
- });
92
- return sweep.foundPath;
93
- }
94
- async function resolveAvailability() {
95
- const startedAt = Date.now();
96
- const handle = toolchainGenerations.capture();
97
- const resolvedPath = await findPath();
98
- const found = resolvedPath !== null;
99
- // #2455 fix round 3, F2: a reset during the probe opened a NEW session.
100
- // This flight answers the OLD one, so writing its verdict into the
101
- // freshly cleared latch would re-latch a stale "missing" for the whole
102
- // new session — the bug the reset exists to prevent, reintroduced by the
103
- // reset's own timing. Report the verdict to this flight's own callers;
104
- // do not latch it, and say so in the decision record's `latched`.
105
- const superseded = !handle.isCurrent();
106
- if (found) {
107
- handle.guardedWrite(`latch:${config.tool}`, () => availabilityLatch.noteAvailable());
108
- // The RESOLVED path, not the memo (#2455 fix round 4, F6). A superseded
109
- // sweep is forbidden from writing `toolPath`, so reading the memo here
110
- // logged `Go found: null` on exactly the branch this line exists to
111
- // explain.
112
- config.log(`${config.label} found: ${resolvedPath}`);
113
- logAvailabilityDecision({
114
- tool: config.tool,
115
- verdict: "available",
116
- outcome: "success",
117
- cause: "ok",
118
- elapsedMs: Date.now() - startedAt,
119
- latched: !superseded,
120
- hostStallMs: sweepHostStallMs,
121
- budgetMs: config.budgetMs,
122
- classifiedBy: "probe",
123
- ...(sweepEvidence !== undefined && { evidence: sweepEvidence }),
124
- });
125
- return true;
126
- }
127
- // A timed-out version probe is evidence about this moment, not about
128
- // whether the toolchain is installed; it expires instead of latching.
129
- const outcome = sweepSawTransient ? "transient" : "missing";
130
- const cause = sweepSawTransient ? sweepTransientCause : "not-found";
131
- const retryAfterMs = handle.guardedWrite(`latch:${config.tool}`, () => availabilityLatch.noteUnavailable(outcome, cause)) ?? 0;
132
- logAvailabilityDecision({
133
- tool: config.tool,
134
- verdict: "unavailable",
135
- outcome,
136
- cause,
137
- elapsedMs: Date.now() - startedAt,
138
- latched: !superseded && outcome !== "transient",
139
- hostStallMs: sweepHostStallMs,
140
- ...(retryAfterMs > 0 && { retryAfterMs }),
141
- budgetMs: config.budgetMs,
142
- // Derived from the sweep's own candidate probes, and carrying what the
143
- // last of them returned (#1500).
144
- classifiedBy: "probe",
145
- ...(sweepEvidence !== undefined && { evidence: sweepEvidence }),
146
- });
147
- return false;
148
- }
149
- async function isAvailable() {
150
- // `read()` returns null when the last verdict was transient and its
151
- // cooldown expired, which re-enters the candidate sweep (#1476).
152
- const memo = availabilityLatch.read();
153
- if (memo !== null)
154
- return memo;
155
- return ensureFlight.run("availability", resolveAvailability);
156
- }
157
- function reset() {
158
- toolPath = null;
159
- availabilityLatch.reset();
160
- // Supersede every sweep and availability flight already running, in this
161
- // instance and in the shared registry. No `clear()`: the generation bump
162
- // is what makes a stale flight unjoinable and unable to re-latch, and
163
- // `SingleFlight.release`'s identity check already stops it from evicting
164
- // its successor. Clearing the SHARED registry here would additionally
165
- // drop another toolchain's live claim and cost it a duplicate sweep.
166
- toolchainGenerations.bump();
167
- }
168
- return { findPath, isAvailable, reset };
169
- }
@@ -1,15 +0,0 @@
1
- /**
2
- * Shared utilities for runners
3
- */
4
- import * as fs from "node:fs";
5
- /**
6
- * Read file content, returning undefined if it can't be read
7
- */
8
- export function readFileContent(filePath) {
9
- try {
10
- return fs.readFileSync(filePath, "utf-8");
11
- }
12
- catch {
13
- return undefined;
14
- }
15
- }
@@ -1,128 +0,0 @@
1
- import * as fs from "node:fs";
2
- import * as path from "node:path";
3
- import { pathsEqual } from "../../path-utils.js";
4
- import { safeSpawnAsync } from "../../safe-spawn.js";
5
- import { resolveRunnerCwd } from "../../tool-cwd.js";
6
- import { PRIORITY } from "../priorities.js";
7
- import { createAvailabilityChecker, resolveToolCommandWithInstallFallback, } from "./utils/runner-helpers.js";
8
- import { parseToolRun } from "./utils/tool-failure.js";
9
- const vale = createAvailabilityChecker("vale", ".exe");
10
- /**
11
- * Check for a .vale.ini config file in cwd or parent dirs.
12
- */
13
- function findValeConfig(cwd) {
14
- const local = path.join(cwd, ".vale.ini");
15
- if (fs.existsSync(local))
16
- return local;
17
- let current = path.resolve(cwd);
18
- while (true) {
19
- const candidate = path.join(current, ".vale.ini");
20
- if (fs.existsSync(candidate))
21
- return candidate;
22
- const parent = path.dirname(current);
23
- if (parent === current)
24
- break;
25
- current = parent;
26
- }
27
- return undefined;
28
- }
29
- export function parseValeOutput(raw, filePath, cwd) {
30
- const diagnostics = [];
31
- if (!raw.trim())
32
- return diagnostics;
33
- const absTarget = path.resolve(cwd, filePath);
34
- try {
35
- const parsed = JSON.parse(raw);
36
- if (!parsed || typeof parsed !== "object")
37
- return diagnostics;
38
- // #3295: vale's top level is keyed BY the linted file's path — the only
39
- // place the reported path appears. `Object.values` dropped it, so a
40
- // `.vale.ini` glob or a directory argv charged a second file's alerts to
41
- // the dispatched one.
42
- for (const [reported, alerts] of Object.entries(parsed)) {
43
- if (!Array.isArray(alerts))
44
- continue;
45
- if (reported && !pathsEqual(path.resolve(cwd, reported), absTarget))
46
- continue;
47
- for (const alert of alerts) {
48
- if (!alert.Message)
49
- continue;
50
- const severityMap = {
51
- error: "error",
52
- warning: "warning",
53
- info: "info",
54
- suggestion: "info",
55
- };
56
- const severity = severityMap[alert.Severity?.toLowerCase() ?? ""] ?? "warning";
57
- diagnostics.push({
58
- id: `vale-${alert.Line}-${alert.Check ?? "unknown"}`,
59
- message: `[${alert.Check ?? "vale"}] ${alert.Message}`,
60
- filePath,
61
- line: alert.Line ?? 1,
62
- column: alert.Span?.[0] ?? 1,
63
- severity,
64
- semantic: severity === "error" ? "blocking" : "warning",
65
- tool: "vale",
66
- rule: alert.Check ?? "vale",
67
- fixable: false,
68
- });
69
- }
70
- }
71
- }
72
- catch {
73
- // JSON parse failed, return empty
74
- return diagnostics;
75
- }
76
- return diagnostics;
77
- }
78
- const valeRunner = {
79
- id: "vale",
80
- appliesTo: ["markdown"],
81
- priority: PRIORITY.DOC_QUALITY,
82
- skipTestFiles: false,
83
- async run(ctx) {
84
- const cwd = resolveRunnerCwd(ctx, "vale");
85
- // Config-gated: skip unless a .vale.ini is found
86
- if (!findValeConfig(cwd)) {
87
- return { status: "skipped", diagnostics: [], semantic: "none" };
88
- }
89
- let cmd = null;
90
- if (await vale.isAvailableAsync(cwd)) {
91
- cmd = vale.getCommand(cwd);
92
- }
93
- else {
94
- cmd = await resolveToolCommandWithInstallFallback(cwd, "vale");
95
- }
96
- if (!cmd)
97
- return { status: "skipped", diagnostics: [], semantic: "none" };
98
- // Vale exits 0 even on findings, non-zero only on errors
99
- const result = await safeSpawnAsync(cmd, ["--output", "JSON", ctx.filePath], { cwd, timeout: 15000 });
100
- // #1816: this runner read `result.status` zero times, so a Vale that
101
- // rejected its config exited nonzero with an empty stdout, parsed to
102
- // zero alerts, and reported clean prose. No exit-code table: Vale's
103
- // nonzero codes vary with --minAlertLevel, so the conservative
104
- // nothing-to-parse rule is the only safe discriminator here.
105
- //
106
- // #1948: `parseToolRun` adds the second gate. Vale's `Data.Files`
107
- // envelope bug produced exactly this shape — exit 1, a full JSON
108
- // report on stdout, zero alerts parsed — and left no record.
109
- const run = parseToolRun("vale", {
110
- result,
111
- // EXIT TABLE (Vale 3.9.6 docs https://vale.sh/docs/topics/metrics/): 0 clean; 1 findings; 2 error; other nonzero rejected.
112
- exitCodes: { ran: [1, 2] },
113
- }, (raw) => parseValeOutput(raw, ctx.filePath, cwd));
114
- if (run.skipped)
115
- return run.skipped;
116
- const diagnostics = run.diagnostics;
117
- if (diagnostics.length === 0) {
118
- return { status: "succeeded", diagnostics: [], semantic: "none" };
119
- }
120
- const hasBlocking = diagnostics.some((d) => d.semantic === "blocking");
121
- return {
122
- status: hasBlocking ? "failed" : "succeeded",
123
- diagnostics,
124
- semantic: hasBlocking ? "blocking" : "warning",
125
- };
126
- },
127
- };
128
- export default valeRunner;