pi-lens 4.3.0 → 4.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (659) hide show
  1. package/CHANGELOG.md +1159 -0
  2. package/README.md +116 -25
  3. package/config/dependency-cruiser-eager-allowlist.json +6 -2
  4. package/dist/chunk-2BEMIWEW.js +51 -0
  5. package/dist/chunk-2EECBNC5.js +89 -0
  6. package/dist/chunk-2FQ62SPM.js +83 -0
  7. package/dist/chunk-2UMYMRI3.js +118 -0
  8. package/dist/chunk-34OCDWOS.js +48 -0
  9. package/dist/chunk-3FERWMCH.js +144 -0
  10. package/dist/chunk-3JL6IFD7.js +97 -0
  11. package/dist/chunk-3JSEWUWI.js +327 -0
  12. package/dist/chunk-3MED75HT.js +37 -0
  13. package/dist/chunk-3MRXIJ6I.js +79 -0
  14. package/dist/chunk-3P4PF2BX.js +2250 -0
  15. package/dist/chunk-3PNFWVHT.js +201 -0
  16. package/dist/chunk-3TTPKMEF.js +162 -0
  17. package/dist/chunk-5JHXUETW.js +326 -0
  18. package/dist/chunk-5W3R6LFT.js +24 -0
  19. package/dist/chunk-64LU2OVH.js +341 -0
  20. package/dist/chunk-6B5I6ICN.js +44 -0
  21. package/dist/chunk-6P54TMWL.js +274 -0
  22. package/dist/chunk-6UYA642J.js +145 -0
  23. package/dist/chunk-6XX5HCLK.js +398 -0
  24. package/dist/chunk-7AXO3ZDF.js +30 -0
  25. package/dist/chunk-7BX5DWSA.js +1907 -0
  26. package/dist/chunk-7ELY2CSM.js +902 -0
  27. package/dist/chunk-7M4T5N3V.js +38 -0
  28. package/dist/chunk-7U2IDNXN.js +37 -0
  29. package/dist/chunk-ABBOA7UD.js +157 -0
  30. package/dist/chunk-AFZYMAIV.js +756 -0
  31. package/dist/chunk-ALQRYH6O.js +112 -0
  32. package/dist/chunk-AXKPQ6ZI.js +1610 -0
  33. package/dist/chunk-BHWHXMQ2.js +62 -0
  34. package/dist/chunk-BJF25SUG.js +22 -0
  35. package/dist/chunk-BNKLYOOO.js +18 -0
  36. package/dist/chunk-BW5KFIQC.js +59 -0
  37. package/dist/chunk-CBD2B5CP.js +599 -0
  38. package/dist/chunk-CFYISHUW.js +42 -0
  39. package/dist/chunk-CMU4RMJB.js +30 -0
  40. package/dist/chunk-CULQYFLU.js +14 -0
  41. package/dist/chunk-D65GOCJB.js +289 -0
  42. package/dist/chunk-D6YF5HKX.js +59 -0
  43. package/dist/chunk-DMS52BEP.js +342 -0
  44. package/dist/chunk-ELVWJYRV.js +211 -0
  45. package/dist/chunk-EUT3B22Y.js +27 -0
  46. package/dist/chunk-F5VLZHUW.js +146 -0
  47. package/dist/chunk-FC4RP4I2.js +12 -0
  48. package/dist/chunk-FGALODG3.js +55 -0
  49. package/dist/chunk-G3RLJYA2.js +2358 -0
  50. package/dist/chunk-GAYGGICG.js +32 -0
  51. package/dist/chunk-H2W2AXD3.js +419 -0
  52. package/dist/chunk-H5EV3VMF.js +114 -0
  53. package/dist/chunk-HREZQCT3.js +106 -0
  54. package/dist/chunk-HSIRMK2D.js +517 -0
  55. package/dist/chunk-IMSQR4WO.js +184 -0
  56. package/dist/chunk-IQZXOZ7S.js +4816 -0
  57. package/dist/chunk-IR6XFA5P.js +37 -0
  58. package/dist/chunk-IUKPRZER.js +78 -0
  59. package/dist/chunk-IUR76K6A.js +262 -0
  60. package/dist/chunk-J3FZR3YY.js +98 -0
  61. package/dist/chunk-J6DFZDFA.js +562 -0
  62. package/dist/chunk-J7WJZ6W7.js +50 -0
  63. package/dist/chunk-JONGANYH.js +202 -0
  64. package/dist/chunk-KJCWXUUS.js +425 -0
  65. package/dist/chunk-KJN4IOEJ.js +17 -0
  66. package/dist/chunk-KMGPUKFD.js +25 -0
  67. package/dist/chunk-LD7WFTRX.js +4533 -0
  68. package/dist/chunk-LJDODBBZ.js +78 -0
  69. package/dist/chunk-LNOMA3MP.js +169 -0
  70. package/dist/chunk-MGIWSROG.js +2334 -0
  71. package/dist/chunk-MQA2YBAH.js +308 -0
  72. package/dist/chunk-MTDRLSI7.js +21720 -0
  73. package/dist/chunk-N2IRDBZI.js +2355 -0
  74. package/dist/chunk-N77WFUL7.js +50 -0
  75. package/dist/chunk-N7YNJE5R.js +466 -0
  76. package/dist/chunk-NABLC7W3.js +148 -0
  77. package/dist/chunk-NFXP47RV.js +999 -0
  78. package/dist/chunk-NJF2X5XF.js +45 -0
  79. package/dist/chunk-NXL4FFQQ.js +47 -0
  80. package/dist/chunk-O7HZX7CA.js +309 -0
  81. package/dist/chunk-OC7LYAU5.js +708 -0
  82. package/dist/chunk-OEX24ECI.js +348 -0
  83. package/dist/chunk-OYOB3ZFG.js +78 -0
  84. package/dist/chunk-OYTMZXRF.js +41 -0
  85. package/dist/chunk-OZJINN4O.js +84 -0
  86. package/dist/chunk-PCHDGUKT.js +23 -0
  87. package/dist/chunk-QOZXJ4NA.js +3364 -0
  88. package/dist/chunk-QYF5S6P6.js +45 -0
  89. package/dist/chunk-RJFED73B.js +79 -0
  90. package/dist/chunk-RTQNRM5X.js +27 -0
  91. package/dist/chunk-S6AMWKPC.js +189 -0
  92. package/dist/chunk-T4QZ6FEH.js +308 -0
  93. package/dist/chunk-T54VJRAD.js +5456 -0
  94. package/dist/chunk-TA5L5KWQ.js +167 -0
  95. package/dist/chunk-TQFBZVCG.js +27 -0
  96. package/dist/chunk-U52SAGRM.js +62 -0
  97. package/dist/chunk-UEAHAMEI.js +5814 -0
  98. package/dist/chunk-UGSMCQ4D.js +327 -0
  99. package/dist/chunk-UOPVJQ4N.js +103 -0
  100. package/dist/chunk-USHG4DLH.js +459 -0
  101. package/dist/chunk-UXVNL3D7.js +23 -0
  102. package/dist/chunk-V5MEBST3.js +4139 -0
  103. package/dist/chunk-VGEVL5EQ.js +29 -0
  104. package/dist/chunk-VPWKF3GN.js +87 -0
  105. package/dist/chunk-VSMJK3ZJ.js +1250 -0
  106. package/dist/chunk-VYKKMYVT.js +560 -0
  107. package/dist/chunk-VZHJS6DR.js +442 -0
  108. package/dist/chunk-WATC3IQR.js +213 -0
  109. package/dist/chunk-WPE5FPGR.js +54 -0
  110. package/dist/chunk-WSEWKCXU.js +188 -0
  111. package/dist/chunk-WW5BLB74.js +659 -0
  112. package/dist/chunk-XGUL4SLQ.js +406 -0
  113. package/dist/chunk-XHSCVSOL.js +170 -0
  114. package/dist/chunk-XIMYZ3JA.js +27 -0
  115. package/dist/chunk-YLN4K6WD.js +385 -0
  116. package/dist/chunk-Z3CCVDUB.js +76 -0
  117. package/dist/chunk-Z54ZSOBZ.js +61 -0
  118. package/dist/chunk-Z6BB4JLQ.js +478 -0
  119. package/dist/chunk-Z7QQA2KT.js +27 -0
  120. package/dist/chunk-ZETYB3XG.js +2626 -0
  121. package/dist/chunk-ZMOMPX2Z.js +87 -0
  122. package/dist/chunk-ZOEYVXSV.js +149 -0
  123. package/dist/chunk-ZZUFZUQZ.js +12120 -0
  124. package/dist/index.js +39712 -29876
  125. package/dist/mcp/analyze-cli.js +186 -232
  126. package/dist/mcp/cli.js +137 -98
  127. package/dist/mcp/server.js +22688 -1573
  128. package/dist/mcp/worker.js +97 -38
  129. package/dist/probes/installer.js +135 -0
  130. package/dist/workers/project-snapshot-persist-worker.js +22 -0
  131. package/dist/workers/review-graph-persist-worker.js +15 -0
  132. package/docs/agent-guide.md +13 -4
  133. package/docs/agent-tools.md +42 -0
  134. package/docs/ast-grep_rules_catalog.md +5 -4
  135. package/docs/configuration.md +28 -2
  136. package/docs/custom-rules.md +25 -2
  137. package/docs/environment-variables.md +86 -8
  138. package/docs/features.md +45 -5
  139. package/docs/globalconfig.md +2 -1
  140. package/docs/io-bridge-v2-migration.md +94 -0
  141. package/docs/lsp-capability-matrix.md +37 -4
  142. package/docs/lsp-idle-eviction.md +124 -0
  143. package/docs/mcp.md +21 -5
  144. package/docs/merge-queue-rollout.md +77 -0
  145. package/docs/pi-lens-fixer.md +160 -88
  146. package/docs/pi-lens-investigator.md +74 -26
  147. package/docs/pi-lens-merge-policy.md +736 -0
  148. package/docs/pi-lens-monitor.md +75 -7
  149. package/docs/pi-lens-retro.md +6 -4
  150. package/docs/pi-lens-reviewer.md +189 -48
  151. package/docs/pi-lens-subagent.md +246 -45
  152. package/docs/pi-lens-warden.md +18 -7
  153. package/docs/public-api-stability.md +55 -0
  154. package/docs/release-qa-baseline.md +84 -17
  155. package/docs/rfcs/3654-unified-io-bridge-v2.md +316 -0
  156. package/docs/schema/pi-lens-config-v1.json +530 -0
  157. package/docs/servercapabilities.md +56 -49
  158. package/docs/settings.md +1 -0
  159. package/docs/usage.md +5 -1
  160. package/docs/word-index.md +6 -0
  161. package/grammars/tree-sitter-bash.wasm +0 -0
  162. package/grammars/tree-sitter-bash.wasm.json +3 -3
  163. package/package.json +19 -7
  164. package/rules/ast-grep-rules/rule-tests/advisory-registry-subset-test.yml +41 -0
  165. package/rules/ast-grep-rules/rule-tests/no-identity-operator-on-literals-test.yml +12 -2
  166. package/rules/ast-grep-rules/rule-tests/throw-new-error-js-test.yml +2 -0
  167. package/rules/ast-grep-rules/rule-tests/throw-new-error-test.yml +2 -0
  168. package/rules/ast-grep-rules/rules/advisory-registry-subset.yml +50 -0
  169. package/rules/ast-grep-rules/rules/no-identity-operator-on-literals.yml +20 -12
  170. package/rules/ast-grep-rules/rules/throw-new-error-js.yml +2 -2
  171. package/rules/ast-grep-rules/rules/throw-new-error.yml +2 -2
  172. package/scripts/analyze-pi-lens-logs.mjs +1275 -62
  173. package/scripts/download-grammars.js +5 -0
  174. package/scripts/grammars.lock.json +6 -1
  175. package/scripts/install-selftest.mjs +33 -34
  176. package/scripts/lib/host-provided-deps.mjs +13 -4
  177. package/scripts/lib/web-tree-sitter-dir.mjs +18 -0
  178. package/dist/clients/actionable-warnings-logger.js +0 -35
  179. package/dist/clients/actionable-warnings.js +0 -1610
  180. package/dist/clients/advisory-provenance.js +0 -593
  181. package/dist/clients/agent-behavior-client.js +0 -147
  182. package/dist/clients/agent-nudge.js +0 -325
  183. package/dist/clients/analysed-root.js +0 -1
  184. package/dist/clients/ast-grep-client.js +0 -731
  185. package/dist/clients/ast-grep-rule-manager.js +0 -146
  186. package/dist/clients/ast-grep-tool-logger.js +0 -118
  187. package/dist/clients/ast-grep-types.js +0 -10
  188. package/dist/clients/ast-grep-yaml-synth.js +0 -154
  189. package/dist/clients/atomic-write-staging.js +0 -75
  190. package/dist/clients/atomic-write.js +0 -189
  191. package/dist/clients/availability-probe-flight.js +0 -12
  192. package/dist/clients/bash-file-access.js +0 -1056
  193. package/dist/clients/biome-client.js +0 -357
  194. package/dist/clients/blocker-freshness.js +0 -837
  195. package/dist/clients/blocker-past-eof.js +0 -129
  196. package/dist/clients/bootstrap.js +0 -569
  197. package/dist/clients/bounded-cache.js +0 -190
  198. package/dist/clients/bounded-pid-file-lock.js +0 -202
  199. package/dist/clients/bounded-telemetry.js +0 -295
  200. package/dist/clients/build-identity.js +0 -95
  201. package/dist/clients/bundled-resource-health.js +0 -113
  202. package/dist/clients/bus-events-logger.js +0 -105
  203. package/dist/clients/bus-publish.js +0 -171
  204. package/dist/clients/cache/rule-cache.js +0 -190
  205. package/dist/clients/cache-manager.js +0 -524
  206. package/dist/clients/cache-observability.js +0 -1313
  207. package/dist/clients/call-graph.js +0 -852
  208. package/dist/clients/cargo-manifest.js +0 -422
  209. package/dist/clients/cascade-budget.js +0 -196
  210. package/dist/clients/cascade-format.js +0 -315
  211. package/dist/clients/cascade-logger.js +0 -31
  212. package/dist/clients/cascade-types.js +0 -9
  213. package/dist/clients/child-unref.js +0 -124
  214. package/dist/clients/code-quality-warnings.js +0 -286
  215. package/dist/clients/codebase-model.js +0 -173
  216. package/dist/clients/collateral-test-role.js +0 -40
  217. package/dist/clients/complexity-client.js +0 -462
  218. package/dist/clients/config-core/deny.js +0 -221
  219. package/dist/clients/config-core/index.js +0 -50
  220. package/dist/clients/config-core/merge.js +0 -357
  221. package/dist/clients/config-core/normalize.js +0 -340
  222. package/dist/clients/config-core/process-spec.js +0 -248
  223. package/dist/clients/config-core/provenance.js +0 -164
  224. package/dist/clients/config-core/records.js +0 -218
  225. package/dist/clients/config-core/resolve.js +0 -125
  226. package/dist/clients/config-core/safe-object.js +0 -78
  227. package/dist/clients/config-core/schema.js +0 -165
  228. package/dist/clients/config-diagnostic-codes.js +0 -285
  229. package/dist/clients/config-locations.js +0 -388
  230. package/dist/clients/config-resolve.js +0 -798
  231. package/dist/clients/config-schema.js +0 -251
  232. package/dist/clients/config-warn.js +0 -407
  233. package/dist/clients/console-guard-install.js +0 -26
  234. package/dist/clients/cooperative-budget.js +0 -42
  235. package/dist/clients/dead-code-client.js +0 -510
  236. package/dist/clients/dead-code-logger.js +0 -30
  237. package/dist/clients/deadline-utils.js +0 -280
  238. package/dist/clients/debug-handles.js +0 -211
  239. package/dist/clients/debug-heap.js +0 -174
  240. package/dist/clients/deferred-lsp-work.js +0 -106
  241. package/dist/clients/degradation-ledger.js +0 -426
  242. package/dist/clients/demoted-finding-render.js +0 -169
  243. package/dist/clients/dependency-checker.js +0 -885
  244. package/dist/clients/deps/ast-grep-napi.js +0 -22
  245. package/dist/clients/deps/js-yaml.js +0 -9
  246. package/dist/clients/deps/minimatch.js +0 -4
  247. package/dist/clients/deps/pi-tui.js +0 -14
  248. package/dist/clients/deps/typebox.js +0 -14
  249. package/dist/clients/deps/vscode-jsonrpc.js +0 -1
  250. package/dist/clients/deps/web-tree-sitter.js +0 -24
  251. package/dist/clients/diagnostic-dispositions.js +0 -630
  252. package/dist/clients/diagnostic-line-freshness.js +0 -305
  253. package/dist/clients/diagnostic-logger.js +0 -73
  254. package/dist/clients/diagnostic-tracker.js +0 -105
  255. package/dist/clients/diagnostics-publish.js +0 -230
  256. package/dist/clients/dispatch/ast-grep-catalog.js +0 -65
  257. package/dist/clients/dispatch/auxiliary-lsp.js +0 -343
  258. package/dist/clients/dispatch/collect-later-tier.js +0 -35
  259. package/dist/clients/dispatch/diagnostic-taxonomy.js +0 -66
  260. package/dist/clients/dispatch/dispatcher.js +0 -1269
  261. package/dist/clients/dispatch/fact-provider-types.js +0 -1
  262. package/dist/clients/dispatch/fact-rule-runner.js +0 -17
  263. package/dist/clients/dispatch/fact-runner.js +0 -30
  264. package/dist/clients/dispatch/fact-scheduler.js +0 -68
  265. package/dist/clients/dispatch/fact-store.js +0 -377
  266. package/dist/clients/dispatch/facts/comment-facts.js +0 -22
  267. package/dist/clients/dispatch/facts/file-content.js +0 -19
  268. package/dist/clients/dispatch/facts/function-facts.js +0 -348
  269. package/dist/clients/dispatch/facts/import-facts.js +0 -204
  270. package/dist/clients/dispatch/facts/tree-sitter-facts.js +0 -34
  271. package/dist/clients/dispatch/facts/try-catch-facts.js +0 -119
  272. package/dist/clients/dispatch/finding-policy.js +0 -339
  273. package/dist/clients/dispatch/indent-detect.js +0 -417
  274. package/dist/clients/dispatch/inline-suppressions.js +0 -89
  275. package/dist/clients/dispatch/integration.js +0 -2377
  276. package/dist/clients/dispatch/lazy.js +0 -11
  277. package/dist/clients/dispatch/pending-runner-findings.js +0 -87
  278. package/dist/clients/dispatch/plan.js +0 -278
  279. package/dist/clients/dispatch/priorities.js +0 -20
  280. package/dist/clients/dispatch/rule-id-normalize.js +0 -50
  281. package/dist/clients/dispatch/rule-ignores.js +0 -69
  282. package/dist/clients/dispatch/rule-policy.js +0 -135
  283. package/dist/clients/dispatch/rules/async-noise.js +0 -40
  284. package/dist/clients/dispatch/rules/async-unnecessary-wrapper.js +0 -27
  285. package/dist/clients/dispatch/rules/cors-wildcard.js +0 -54
  286. package/dist/clients/dispatch/rules/error-obscuring.js +0 -32
  287. package/dist/clients/dispatch/rules/error-swallowing.js +0 -31
  288. package/dist/clients/dispatch/rules/framework-call-noise.js +0 -67
  289. package/dist/clients/dispatch/rules/high-complexity.js +0 -72
  290. package/dist/clients/dispatch/rules/high-fan-out.js +0 -74
  291. package/dist/clients/dispatch/rules/high-import-coupling.js +0 -37
  292. package/dist/clients/dispatch/rules/missing-error-propagation.js +0 -62
  293. package/dist/clients/dispatch/rules/no-commented-credentials.js +0 -52
  294. package/dist/clients/dispatch/rules/pass-through-wrappers.js +0 -42
  295. package/dist/clients/dispatch/rules/placeholder-comments.js +0 -40
  296. package/dist/clients/dispatch/rules/unsafe-boundary.js +0 -126
  297. package/dist/clients/dispatch/runner-context.js +0 -52
  298. package/dist/clients/dispatch/runners/actionlint.js +0 -111
  299. package/dist/clients/dispatch/runners/ast-grep-napi.js +0 -1196
  300. package/dist/clients/dispatch/runners/biome-check.js +0 -296
  301. package/dist/clients/dispatch/runners/cpp-check.js +0 -219
  302. package/dist/clients/dispatch/runners/credo.js +0 -82
  303. package/dist/clients/dispatch/runners/cue-vet.js +0 -416
  304. package/dist/clients/dispatch/runners/dart-analyze.js +0 -183
  305. package/dist/clients/dispatch/runners/detekt.js +0 -176
  306. package/dist/clients/dispatch/runners/dotnet-build.js +0 -164
  307. package/dist/clients/dispatch/runners/elixir-check.js +0 -195
  308. package/dist/clients/dispatch/runners/eslint.js +0 -137
  309. package/dist/clients/dispatch/runners/fact-rules.js +0 -29
  310. package/dist/clients/dispatch/runners/fish-indent.js +0 -69
  311. package/dist/clients/dispatch/runners/gleam-check.js +0 -167
  312. package/dist/clients/dispatch/runners/go-vet.js +0 -104
  313. package/dist/clients/dispatch/runners/golangci-lint.js +0 -135
  314. package/dist/clients/dispatch/runners/hadolint.js +0 -91
  315. package/dist/clients/dispatch/runners/helm-lint.js +0 -171
  316. package/dist/clients/dispatch/runners/helm-render.js +0 -940
  317. package/dist/clients/dispatch/runners/htmlhint.js +0 -117
  318. package/dist/clients/dispatch/runners/index.js +0 -108
  319. package/dist/clients/dispatch/runners/javac.js +0 -99
  320. package/dist/clients/dispatch/runners/ktlint.js +0 -110
  321. package/dist/clients/dispatch/runners/lsp.js +0 -379
  322. package/dist/clients/dispatch/runners/markdownlint.js +0 -167
  323. package/dist/clients/dispatch/runners/mypy.js +0 -102
  324. package/dist/clients/dispatch/runners/oxlint.js +0 -414
  325. package/dist/clients/dispatch/runners/php-lint.js +0 -85
  326. package/dist/clients/dispatch/runners/phpstan.js +0 -120
  327. package/dist/clients/dispatch/runners/prisma-validate.js +0 -62
  328. package/dist/clients/dispatch/runners/psscriptanalyzer.js +0 -445
  329. package/dist/clients/dispatch/runners/pyright.js +0 -169
  330. package/dist/clients/dispatch/runners/rubocop.js +0 -99
  331. package/dist/clients/dispatch/runners/ruff.js +0 -88
  332. package/dist/clients/dispatch/runners/rust-clippy.js +0 -256
  333. package/dist/clients/dispatch/runners/shellcheck.js +0 -173
  334. package/dist/clients/dispatch/runners/shfmt.js +0 -102
  335. package/dist/clients/dispatch/runners/spellcheck.js +0 -128
  336. package/dist/clients/dispatch/runners/spotbugs.js +0 -259
  337. package/dist/clients/dispatch/runners/sqlfluff.js +0 -183
  338. package/dist/clients/dispatch/runners/stylelint.js +0 -166
  339. package/dist/clients/dispatch/runners/swiftlint.js +0 -163
  340. package/dist/clients/dispatch/runners/taplo.js +0 -174
  341. package/dist/clients/dispatch/runners/terragrunt.js +0 -168
  342. package/dist/clients/dispatch/runners/tflint.js +0 -125
  343. package/dist/clients/dispatch/runners/tree-sitter.js +0 -643
  344. package/dist/clients/dispatch/runners/trivy-config.js +0 -253
  345. package/dist/clients/dispatch/runners/utils/availability-policy.js +0 -496
  346. package/dist/clients/dispatch/runners/utils/candidate-probe.js +0 -90
  347. package/dist/clients/dispatch/runners/utils/diagnostic-parsers.js +0 -95
  348. package/dist/clients/dispatch/runners/utils/lazy-installer.js +0 -274
  349. package/dist/clients/dispatch/runners/utils/runner-helpers.js +0 -1701
  350. package/dist/clients/dispatch/runners/utils/spawn-outcome.js +0 -101
  351. package/dist/clients/dispatch/runners/utils/tool-failure.js +0 -235
  352. package/dist/clients/dispatch/runners/utils/toolchain-availability.js +0 -169
  353. package/dist/clients/dispatch/runners/utils.js +0 -15
  354. package/dist/clients/dispatch/runners/vale.js +0 -128
  355. package/dist/clients/dispatch/runners/yaml-rule-parser.js +0 -242
  356. package/dist/clients/dispatch/runners/yamllint.js +0 -95
  357. package/dist/clients/dispatch/runners/zig-check.js +0 -79
  358. package/dist/clients/dispatch/suppress-writer.js +0 -79
  359. package/dist/clients/dispatch/tool-profile.js +0 -30
  360. package/dist/clients/dispatch/types.js +0 -21
  361. package/dist/clients/dispatch/utils/format-utils.js +0 -45
  362. package/dist/clients/dispatch/utils/lsp-diagnostics.js +0 -35
  363. package/dist/clients/disposition-logger.js +0 -32
  364. package/dist/clients/disposition-publish.js +0 -124
  365. package/dist/clients/durable-store.js +0 -97
  366. package/dist/clients/effective-config.js +0 -415
  367. package/dist/clients/env-utils.js +0 -83
  368. package/dist/clients/error-class.js +0 -23
  369. package/dist/clients/eval-timestamp.js +0 -17
  370. package/dist/clients/event-loop-hold.js +0 -274
  371. package/dist/clients/event-loop-monitor.js +0 -250
  372. package/dist/clients/extension-log.js +0 -504
  373. package/dist/clients/extension-mode.js +0 -73
  374. package/dist/clients/feature-hints.js +0 -103
  375. package/dist/clients/file-kinds.js +0 -412
  376. package/dist/clients/file-role.js +0 -134
  377. package/dist/clients/file-time.js +0 -160
  378. package/dist/clients/file-utils.js +0 -1032
  379. package/dist/clients/finding-delivery-gate.js +0 -494
  380. package/dist/clients/finding-identity.js +0 -88
  381. package/dist/clients/fix-worklog.js +0 -103
  382. package/dist/clients/format-events-publish.js +0 -343
  383. package/dist/clients/format-service.js +0 -222
  384. package/dist/clients/formatters-lazy.js +0 -9
  385. package/dist/clients/formatters.js +0 -2032
  386. package/dist/clients/freshness-cadence.js +0 -17
  387. package/dist/clients/freshness.js +0 -38
  388. package/dist/clients/generated-artifacts.js +0 -394
  389. package/dist/clients/generation-guard.js +0 -215
  390. package/dist/clients/git-guard.js +0 -1136
  391. package/dist/clients/git-tracked-ignore.js +0 -243
  392. package/dist/clients/gitleaks-client.js +0 -509
  393. package/dist/clients/go-client.js +0 -104
  394. package/dist/clients/govulncheck-client.js +0 -605
  395. package/dist/clients/gradle-ktfmt-style.js +0 -348
  396. package/dist/clients/grammar-source.js +0 -465
  397. package/dist/clients/gzip-stage-write.js +0 -135
  398. package/dist/clients/hashline-anchor.js +0 -424
  399. package/dist/clients/hook-budgets.js +0 -76
  400. package/dist/clients/host-edit-normalize.js +0 -140
  401. package/dist/clients/host-ports.js +0 -39
  402. package/dist/clients/indent-retarget.js +0 -154
  403. package/dist/clients/inline-blocker-dispositions.js +0 -186
  404. package/dist/clients/install-diagnostics.js +0 -156
  405. package/dist/clients/installer/index.js +0 -5416
  406. package/dist/clients/installer/managed-tool-refresh-session.js +0 -58
  407. package/dist/clients/installer/managed-tool-refresh.js +0 -783
  408. package/dist/clients/instance-reaper-state.js +0 -7
  409. package/dist/clients/instance-reaper.js +0 -1137
  410. package/dist/clients/instance-registry-lock.js +0 -145
  411. package/dist/clients/instance-registry.js +0 -773
  412. package/dist/clients/jscpd-client.js +0 -378
  413. package/dist/clients/json-cache-read.js +0 -65
  414. package/dist/clients/knip-client.js +0 -788
  415. package/dist/clients/language-policy.js +0 -252
  416. package/dist/clients/language-profile.js +0 -361
  417. package/dist/clients/language-registry.js +0 -603
  418. package/dist/clients/latency-logger.js +0 -727
  419. package/dist/clients/lazy-import.js +0 -21
  420. package/dist/clients/ledger-bounds.js +0 -54
  421. package/dist/clients/lens-config.js +0 -404
  422. package/dist/clients/lens-engine.js +0 -358
  423. package/dist/clients/lens-events.js +0 -125
  424. package/dist/clients/lens-flag-registry.js +0 -467
  425. package/dist/clients/lens-map.js +0 -1156
  426. package/dist/clients/live-bus-emitter.js +0 -74
  427. package/dist/clients/log-cleanup.js +0 -222
  428. package/dist/clients/lsp/aggregation.js +0 -178
  429. package/dist/clients/lsp/cascade-tier.js +0 -421
  430. package/dist/clients/lsp/client.js +0 -4593
  431. package/dist/clients/lsp/config.js +0 -691
  432. package/dist/clients/lsp/content-limits.js +0 -41
  433. package/dist/clients/lsp/diagnostic-binding.js +0 -225
  434. package/dist/clients/lsp/document-drift.js +0 -467
  435. package/dist/clients/lsp/edits.js +0 -1219
  436. package/dist/clients/lsp/index.js +0 -8305
  437. package/dist/clients/lsp/inferred-project.js +0 -216
  438. package/dist/clients/lsp/jvm-runtime.js +0 -298
  439. package/dist/clients/lsp/language.js +0 -63
  440. package/dist/clients/lsp/launch.js +0 -746
  441. package/dist/clients/lsp/lombok.js +0 -158
  442. package/dist/clients/lsp/path-utils.js +0 -5
  443. package/dist/clients/lsp/pending-aux-coverage.js +0 -251
  444. package/dist/clients/lsp/position-encoding.js +0 -61
  445. package/dist/clients/lsp/ruby-drive-dirs.js +0 -83
  446. package/dist/clients/lsp/server.js +0 -3290
  447. package/dist/clients/lsp/session-roots.js +0 -192
  448. package/dist/clients/lsp/spawn-history.js +0 -17
  449. package/dist/clients/lsp/sync-kind.js +0 -56
  450. package/dist/clients/lsp/tsserver-sync.js +0 -332
  451. package/dist/clients/lsp/wait-policy/capability-snapshot.js +0 -1
  452. package/dist/clients/lsp/wait-policy/classification.js +0 -85
  453. package/dist/clients/lsp/wait-policy/index.js +0 -10
  454. package/dist/clients/lsp/wait-policy/strategies.js +0 -392
  455. package/dist/clients/lsp/watch-queue.js +0 -61
  456. package/dist/clients/lsp/workspace-diagnostics-cache.js +0 -639
  457. package/dist/clients/lsp/workspace-diagnostics-session.js +0 -30
  458. package/dist/clients/lsp/workspace-sweep-hold.js +0 -184
  459. package/dist/clients/lsp-budget.js +0 -186
  460. package/dist/clients/lsp-document-symbols.js +0 -110
  461. package/dist/clients/lsp-lazy.js +0 -9
  462. package/dist/clients/lsp-mutation.js +0 -396
  463. package/dist/clients/lsp-status.js +0 -59
  464. package/dist/clients/map-with-concurrency.js +0 -40
  465. package/dist/clients/mcp/analyze.js +0 -420
  466. package/dist/clients/mcp/host-shim.js +0 -31
  467. package/dist/clients/mcp/ipc.js +0 -523
  468. package/dist/clients/mcp/review.js +0 -197
  469. package/dist/clients/mcp/session.js +0 -412
  470. package/dist/clients/memory-sampler.js +0 -208
  471. package/dist/clients/message-end-attribution.js +0 -30
  472. package/dist/clients/metrics-client.js +0 -107
  473. package/dist/clients/metrics-history.js +0 -327
  474. package/dist/clients/middle-man-analysis.js +0 -263
  475. package/dist/clients/model-provider.js +0 -53
  476. package/dist/clients/module-report-lsp.js +0 -189
  477. package/dist/clients/module-report.js +0 -2150
  478. package/dist/clients/mutating-tool.js +0 -651
  479. package/dist/clients/mutation-attribution.js +0 -368
  480. package/dist/clients/mutation-bridge.js +0 -240
  481. package/dist/clients/ndjson-logger.js +0 -734
  482. package/dist/clients/observed-mutation-sources.js +0 -101
  483. package/dist/clients/observed-mutation.js +0 -1253
  484. package/dist/clients/oldtext-autopatch.js +0 -128
  485. package/dist/clients/opaque-mutation-scan.js +0 -496
  486. package/dist/clients/opengrep-client.js +0 -333
  487. package/dist/clients/opengrep-config.js +0 -76
  488. package/dist/clients/package-manager.js +0 -607
  489. package/dist/clients/package-root.js +0 -38
  490. package/dist/clients/partial-edit-apply.js +0 -439
  491. package/dist/clients/path-attribution-telemetry.js +0 -43
  492. package/dist/clients/path-keyed-map.js +0 -108
  493. package/dist/clients/path-utils.js +0 -1244
  494. package/dist/clients/performance-report.js +0 -331
  495. package/dist/clients/persist-debounce.js +0 -70
  496. package/dist/clients/persistent-reverify.js +0 -271
  497. package/dist/clients/php-cs-fixer-config.js +0 -119
  498. package/dist/clients/pipeline.js +0 -1480
  499. package/dist/clients/post-autofix-notice.js +0 -37
  500. package/dist/clients/print-mode.js +0 -21
  501. package/dist/clients/probe-home-state.js +0 -228
  502. package/dist/clients/process-bridge.js +0 -66
  503. package/dist/clients/process-singletons.js +0 -210
  504. package/dist/clients/process-snapshot.js +0 -68
  505. package/dist/clients/project-changes.js +0 -181
  506. package/dist/clients/project-conventions.js +0 -171
  507. package/dist/clients/project-diagnostics/cache.js +0 -137
  508. package/dist/clients/project-diagnostics/extractors.js +0 -109
  509. package/dist/clients/project-diagnostics/fresh-fetch.js +0 -668
  510. package/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +0 -118
  511. package/dist/clients/project-diagnostics/runner-adapters/dead-code.js +0 -47
  512. package/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +0 -40
  513. package/dist/clients/project-diagnostics/runner-adapters/govulncheck.js +0 -34
  514. package/dist/clients/project-diagnostics/runner-adapters/jscpd.js +0 -38
  515. package/dist/clients/project-diagnostics/runner-adapters/knip.js +0 -47
  516. package/dist/clients/project-diagnostics/runner-adapters/madge.js +0 -48
  517. package/dist/clients/project-diagnostics/runner-adapters/opengrep.js +0 -40
  518. package/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +0 -127
  519. package/dist/clients/project-diagnostics/runner-adapters/trivy.js +0 -81
  520. package/dist/clients/project-diagnostics/scanner.js +0 -520
  521. package/dist/clients/project-diagnostics/types.js +0 -1
  522. package/dist/clients/project-lens-config.js +0 -807
  523. package/dist/clients/project-report.js +0 -701
  524. package/dist/clients/project-scale.js +0 -237
  525. package/dist/clients/project-scan-policy.js +0 -11
  526. package/dist/clients/project-snapshot-fingerprint.js +0 -48
  527. package/dist/clients/project-snapshot-persist-worker.js +0 -20
  528. package/dist/clients/project-snapshot.js +0 -1653
  529. package/dist/clients/project-trust.js +0 -181
  530. package/dist/clients/python-environment.js +0 -217
  531. package/dist/clients/python-provenance.js +0 -639
  532. package/dist/clients/quiet-window-config.js +0 -47
  533. package/dist/clients/quiet-window.js +0 -236
  534. package/dist/clients/read-bridge.js +0 -139
  535. package/dist/clients/read-expansion.js +0 -266
  536. package/dist/clients/read-guard-logger.js +0 -251
  537. package/dist/clients/read-guard-tool-lines.js +0 -1306
  538. package/dist/clients/read-guard.js +0 -1561
  539. package/dist/clients/recent-touches.js +0 -240
  540. package/dist/clients/redact/secrets.js +0 -449
  541. package/dist/clients/resource-sampler.js +0 -628
  542. package/dist/clients/reverse-deps.js +0 -270
  543. package/dist/clients/review-graph/builder.js +0 -5126
  544. package/dist/clients/review-graph/format.js +0 -33
  545. package/dist/clients/review-graph/git-identity.js +0 -163
  546. package/dist/clients/review-graph/import-resolvers.js +0 -481
  547. package/dist/clients/review-graph/persist-worker.js +0 -10
  548. package/dist/clients/review-graph/query.js +0 -244
  549. package/dist/clients/review-graph/revision-drift.js +0 -21
  550. package/dist/clients/review-graph/service.js +0 -96
  551. package/dist/clients/review-graph/shared-extraction-ir.js +0 -82
  552. package/dist/clients/review-graph/symbol-id.js +0 -103
  553. package/dist/clients/review-graph/tsconfig-paths.js +0 -299
  554. package/dist/clients/review-graph/types.js +0 -1
  555. package/dist/clients/review-graph/workspace-modules.js +0 -449
  556. package/dist/clients/review-graph-logger.js +0 -81
  557. package/dist/clients/ruff-client.js +0 -179
  558. package/dist/clients/rules-scanner.js +0 -131
  559. package/dist/clients/run-duration.js +0 -55
  560. package/dist/clients/runtime-agent-end.js +0 -746
  561. package/dist/clients/runtime-config.js +0 -77
  562. package/dist/clients/runtime-context.js +0 -211
  563. package/dist/clients/runtime-coordinator.js +0 -1324
  564. package/dist/clients/runtime-session.js +0 -2485
  565. package/dist/clients/runtime-tool-call.js +0 -1295
  566. package/dist/clients/runtime-tool-result.js +0 -2049
  567. package/dist/clients/runtime-turn.js +0 -3767
  568. package/dist/clients/rust-client.js +0 -97
  569. package/dist/clients/safe-spawn.js +0 -2357
  570. package/dist/clients/sanitize.js +0 -286
  571. package/dist/clients/scan-utils.js +0 -25
  572. package/dist/clients/scratch-tree-policy.js +0 -165
  573. package/dist/clients/search-read-registration.js +0 -94
  574. package/dist/clients/secret-findings.js +0 -114
  575. package/dist/clients/security-scan-client.js +0 -352
  576. package/dist/clients/session-event-guard.js +0 -297
  577. package/dist/clients/session-lifecycle.js +0 -484
  578. package/dist/clients/session-start-observability.js +0 -94
  579. package/dist/clients/session-state-store.js +0 -101
  580. package/dist/clients/session-summary.js +0 -15
  581. package/dist/clients/sessionstart-logger.js +0 -27
  582. package/dist/clients/sg-runner.js +0 -876
  583. package/dist/clients/sgconfig.js +0 -347
  584. package/dist/clients/shared-checkout-guard.js +0 -338
  585. package/dist/clients/single-flight.js +0 -158
  586. package/dist/clients/situational-tool-telemetry.js +0 -108
  587. package/dist/clients/skills-resolver.js +0 -141
  588. package/dist/clients/slow-fs.js +0 -138
  589. package/dist/clients/smells-rollup.js +0 -231
  590. package/dist/clients/source-filter.js +0 -596
  591. package/dist/clients/source-walker.js +0 -211
  592. package/dist/clients/spawn-output-cap.js +0 -120
  593. package/dist/clients/spawn-timeout-cooldown.js +0 -110
  594. package/dist/clients/stale-marker.js +0 -17
  595. package/dist/clients/startup-scan.js +0 -400
  596. package/dist/clients/startup-timing.js +0 -130
  597. package/dist/clients/string-utils.js +0 -33
  598. package/dist/clients/subagent-mode.js +0 -111
  599. package/dist/clients/symbol-containment.js +0 -24
  600. package/dist/clients/symbol-types.js +0 -5
  601. package/dist/clients/test-runner-client.js +0 -2507
  602. package/dist/clients/test-runner-delivery.js +0 -287
  603. package/dist/clients/todo-scanner.js +0 -229
  604. package/dist/clients/tool-agreement.js +0 -423
  605. package/dist/clients/tool-config.js +0 -249
  606. package/dist/clients/tool-cwd.js +0 -270
  607. package/dist/clients/tool-definition.js +0 -47
  608. package/dist/clients/tool-event.js +0 -105
  609. package/dist/clients/tool-policy.js +0 -2755
  610. package/dist/clients/tool-probe.js +0 -53
  611. package/dist/clients/tool-render.js +0 -156
  612. package/dist/clients/tool-set-policy.js +0 -118
  613. package/dist/clients/tree-sitter-cache.js +0 -364
  614. package/dist/clients/tree-sitter-client.js +0 -4195
  615. package/dist/clients/tree-sitter-logger.js +0 -100
  616. package/dist/clients/tree-sitter-navigator.js +0 -269
  617. package/dist/clients/tree-sitter-query-loader.js +0 -569
  618. package/dist/clients/tree-sitter-shared.js +0 -158
  619. package/dist/clients/tree-sitter-symbol-extractor.js +0 -1265
  620. package/dist/clients/trivy-client.js +0 -467
  621. package/dist/clients/tui-fit.js +0 -50
  622. package/dist/clients/turn-context.js +0 -52
  623. package/dist/clients/turn-end/lane.js +0 -51
  624. package/dist/clients/turn-end/lanes/govulncheck.js +0 -112
  625. package/dist/clients/turn-end/lanes/secrets.js +0 -204
  626. package/dist/clients/turn-summary-render.js +0 -72
  627. package/dist/clients/turn-summary.js +0 -132
  628. package/dist/clients/typos-config.js +0 -29
  629. package/dist/clients/user-notify.js +0 -51
  630. package/dist/clients/vanished-instance-marker.js +0 -57
  631. package/dist/clients/warm-attach.js +0 -305
  632. package/dist/clients/widget-state.js +0 -1808
  633. package/dist/clients/word-index-logger.js +0 -49
  634. package/dist/clients/word-index-store.js +0 -459
  635. package/dist/clients/word-index.js +0 -2080
  636. package/dist/clients/workspace-topology.js +0 -443
  637. package/dist/clients/write-ordering-guard.js +0 -65
  638. package/dist/clients/zizmor-config.js +0 -340
  639. package/dist/i18n.js +0 -69
  640. package/dist/mcp/build-staleness.js +0 -124
  641. package/dist/scripts/lib/process-scan.mjs +0 -583
  642. package/dist/scripts/lib/skills-predicate.mjs +0 -129
  643. package/dist/scripts/lib/web-tree-sitter-dir.mjs +0 -123
  644. package/dist/tools/activate-tools.js +0 -87
  645. package/dist/tools/ast-grep-outline.js +0 -137
  646. package/dist/tools/ast-grep-replace.js +0 -244
  647. package/dist/tools/ast-grep-search.js +0 -762
  648. package/dist/tools/effective-config.js +0 -90
  649. package/dist/tools/lens-diagnostic-mark.js +0 -375
  650. package/dist/tools/lens-diagnostics.js +0 -2571
  651. package/dist/tools/lsp-diagnostics.js +0 -1745
  652. package/dist/tools/lsp-navigation.js +0 -1367
  653. package/dist/tools/lsp-structured-output.js +0 -294
  654. package/dist/tools/module-report.js +0 -382
  655. package/dist/tools/project-report.js +0 -86
  656. package/dist/tools/render-compact.js +0 -374
  657. package/dist/tools/scan-progress.js +0 -53
  658. package/dist/tools/shared.js +0 -29
  659. package/dist/tools/symbol-search.js +0 -155
@@ -1,119 +0,0 @@
1
- import { extractFactsFromTree, firstChildOfType, walk, } from "./tree-sitter-facts.js";
2
- // --- Helpers ---
3
- /** Does `node`'s subtree contain an `assignment_expression` (`x = ...`, `x += ...`, …)? */
4
- function hasAssignmentExpression(node) {
5
- if (!node)
6
- return false;
7
- let found = false;
8
- walk(node, (n) => {
9
- if (n.type === "assignment_expression")
10
- found = true;
11
- });
12
- return found;
13
- }
14
- function isOnlyWhitespaceOrComments(text) {
15
- let stripped = text.replace(/\/\*[\s\S]*?\*\//g, "");
16
- stripped = stripped.replace(/\/\/[^\n]*/g, "");
17
- return stripped.trim().length === 0;
18
- }
19
- const DEFAULT_VALUE_PATTERN = /\breturn\s+(null|undefined|false|true|0|""|''|``|\[\]|\{\}|new\s+\w+\(\))/;
20
- const STRUCTURED_ERROR_PATTERN = /\breturn\s+\{[^}]*(?:success\s*:\s*false|error\s*:)/;
21
- // Any non-trivial comment (≥ 4 non-space chars) counts as documented intent.
22
- // This covers patterns like: // continue, /* not found */, // best-effort, etc.
23
- const EXPLAINING_COMMENT_PATTERN = /(?:\/\/\s*\S.{3,}|\/\*\s*\S[\s\S]{3,}?\*\/)/;
24
- const FS_PROBE_PATTERN = /\b(?:existsSync|statSync|lstatSync|readFileSync|accessSync)\b/;
25
- const DB_PATTERN = /\b(?:query|execute|findOne|findMany|findById|insert|update|delete|select|prisma\.|knex\.|sequelize\.)/;
26
- const NETWORK_PATTERN = /\b(?:fetch|axios|http\.|https\.|request\.|got\.|undici\.)/;
27
- const FS_PATTERN = /\b(?:readFileSync?|writeFileSync?|appendFileSync?|readdirSync?|mkdirSync?|statSync?|unlinkSync?|existsSync|accessSync?|copyFileSync?|renameSync?)\b/;
28
- const PROCESS_PATTERN = /\b(?:spawn|exec|execSync|spawnSync|child_process\.)\b/;
29
- function detectBoundaryCategory(tryText) {
30
- if (DB_PATTERN.test(tryText))
31
- return "db";
32
- if (NETWORK_PATTERN.test(tryText))
33
- return "network";
34
- if (FS_PATTERN.test(tryText))
35
- return "fs";
36
- if (PROCESS_PATTERN.test(tryText))
37
- return "process";
38
- return "none";
39
- }
40
- function detectTryResolvesLocalValues(tryText) {
41
- // Heuristic: no await, no IO calls, no mutations via known side-effectful APIs
42
- const hasAwait = /\bawait\b/.test(tryText);
43
- const hasIO = DB_PATTERN.test(tryText) ||
44
- NETWORK_PATTERN.test(tryText) ||
45
- FS_PATTERN.test(tryText) ||
46
- PROCESS_PATTERN.test(tryText);
47
- return !hasAwait && !hasIO;
48
- }
49
- // --- Provider ---
50
- export const tryCatchFactProvider = {
51
- id: "tryCatchFacts",
52
- provides: ["file.tryCatchSummaries"],
53
- requires: ["file.content"],
54
- appliesTo(ctx) {
55
- return /\.tsx?$/.test(ctx.filePath);
56
- },
57
- async run(ctx, store) {
58
- await extractFactsFromTree(ctx, store, { "file.tryCatchSummaries": [] }, (root) => {
59
- const summaries = [];
60
- walk(root, (node) => {
61
- if (node.type !== "try_statement")
62
- return;
63
- // The direct `statement_block` child is the try body; the catch/finally
64
- // blocks are nested inside their own clauses (not direct children).
65
- const tryBlock = firstChildOfType(node, "statement_block");
66
- const catchClause = firstChildOfType(node, "catch_clause");
67
- if (!tryBlock || !catchClause)
68
- return;
69
- const tryText = tryBlock.text;
70
- const tryResolvesLocalValues = detectTryResolvesLocalValues(tryText);
71
- const boundaryCategory = detectBoundaryCategory(tryText);
72
- // Catch binding: `catch (e)` → identifier param; `catch {}` or a destructuring
73
- // pattern → null (matching the old `ts.isIdentifier` gate).
74
- const paramNode = firstChildOfType(catchClause, "identifier");
75
- const catchParam = paramNode ? paramNode.text : null;
76
- const catchBody = firstChildOfType(catchClause, "statement_block");
77
- const bodyText = catchBody
78
- ? catchBody.text.replace(/^\{/, "").replace(/\}$/, "").trim()
79
- : "";
80
- const isEmpty = isOnlyWhitespaceOrComments(bodyText);
81
- const hasRethrow = /\bthrow\b/.test(bodyText);
82
- const hasLogging = /\bconsole\.(log|warn|error)\b/.test(bodyText) ||
83
- /\blogger\./.test(bodyText);
84
- // Derived enrichment fields
85
- const catchReturnsDefault = DEFAULT_VALUE_PATTERN.test(bodyText);
86
- const catchReturnsStructuredError = STRUCTURED_ERROR_PATTERN.test(bodyText);
87
- const isDocumentedLocalFallback = EXPLAINING_COMMENT_PATTERN.test(bodyText);
88
- const catchHasFallbackAssignment = hasAssignmentExpression(catchBody);
89
- const catchLogsOnly = hasLogging &&
90
- !hasRethrow &&
91
- !catchReturnsDefault &&
92
- !catchReturnsStructuredError &&
93
- !/\b(?:set|update|notify|emit|dispatch|resolve|reject)\b/.test(bodyText);
94
- // Filesystem existence probe: try reads a file/path, catch returns a default
95
- const isFilesystemExistenceProbe = boundaryCategory === "fs" &&
96
- FS_PROBE_PATTERN.test(tryText) &&
97
- catchReturnsDefault;
98
- summaries.push({
99
- line: catchClause.startPosition.row + 1,
100
- column: catchClause.startPosition.column + 1,
101
- catchParam,
102
- bodyText,
103
- isEmpty,
104
- hasRethrow,
105
- hasLogging,
106
- catchLogsOnly,
107
- catchReturnsDefault,
108
- catchReturnsStructuredError,
109
- isDocumentedLocalFallback,
110
- catchHasFallbackAssignment,
111
- tryResolvesLocalValues,
112
- isFilesystemExistenceProbe,
113
- boundaryCategory,
114
- });
115
- });
116
- return { "file.tryCatchSummaries": summaries };
117
- });
118
- },
119
- };
@@ -1,339 +0,0 @@
1
- /**
2
- * The ONE filter stack a findings surface applies before a diagnostic reaches
3
- * the agent: inline `pi-lens-ignore` comments (#442), stored dispositions
4
- * (#690 — false-positive/suppress/defer), and the project's `.pi-lens.json`
5
- * `rules.<id>.disable`/`select` policy, in that order.
6
- *
7
- * The order is load-bearing and is the one the per-edit dispatcher established:
8
- * inline suppression first (the user's in-file intent), then the stored marks,
9
- * then the project policy — so the policy filter sees the same set the per-edit
10
- * path produces, with no double counting and no policy-rejected leftovers.
11
- *
12
- * #3088: these were three separate calls open-coded in `lens-diagnostics.ts`'s
13
- * `mode=full` merge and nothing at all on the `lens_diagnostics source=lsp` /
14
- * `lsp_diagnostics` probe lane — so a finding an agent had marked
15
- * `false-positive` was hidden in `mode=delta`/`mode=full` and re-reported on
16
- * the lane `skills/pi-lens-lsp-navigation` steers agents to as PRIMARY. Both
17
- * lanes call this module now: `applyFindingPolicy` for surfaces that already
18
- * hold dispatch `Diagnostic`s, `applyLspFindingPolicy` for the probe lane,
19
- * which holds raw `LSPDiagnostic`s.
20
- */
21
- import { applyDispositions, applyDispositionsMultiFile, hasAnyDispositionMarks, } from "../diagnostic-dispositions.js";
22
- import { loadPiLensProjectConfig } from "../project-lens-config.js";
23
- import { retagAuxiliaryDiagnostics } from "./auxiliary-lsp.js";
24
- import { applyInlineSuppressions } from "./inline-suppressions.js";
25
- import { applyRulePolicy, rulePolicyMapFromConfig } from "./rule-policy.js";
26
- import { convertLspDiagnostics } from "./utils/lsp-diagnostics.js";
27
- /**
28
- * Inline suppression → stored dispositions → project rule policy, over
29
- * diagnostics that already carry dispatch identity (`tool`/`rule`/`line`).
30
- */
31
- export function applyFindingPolicy(diagnostics, options) {
32
- const inlineKept = applyInlineSuppressions(diagnostics, options.content);
33
- const disposed = filterDisposed(inlineKept, options);
34
- return { kept: applyRulePolicy(disposed, options.policyMap), inlineKept };
35
- }
36
- /** The project's `.pi-lens.json` `rules.<id>.disable`/`select` policy map.
37
- * One derivation for every surface that filters by it — `loadPiLensProjectConfig`
38
- * is mtime-cached, so repeated calls in one sweep cost one stat. */
39
- export function loadProjectRulePolicyMap(cwd) {
40
- return rulePolicyMapFromConfig(loadPiLensProjectConfig(cwd).rules);
41
- }
42
- /**
43
- * Disposition filter over the candidate identities a mark can carry.
44
- *
45
- * With no `identities` provider this is `applyDispositions` on the diagnostics
46
- * themselves — one anchor pair per diagnostic, the behavior every existing
47
- * caller has. With one, the SAME `applyDispositions` runs over the flattened
48
- * candidate list — no second strict/weak implementation to drift away from it
49
- * (#1617's single-source rule) — and a diagnostic drops when ANY of its
50
- * candidate identities was disposed.
51
- */
52
- function filterDisposed(diagnostics, options) {
53
- const identities = options.identities;
54
- if (!identities) {
55
- return applyDispositions(diagnostics, options.cwd, options.filePath, options.content);
56
- }
57
- // Same zero-I/O hoist the cache-only modes use (#1625 F2): with no marks at
58
- // all there is nothing a candidate expansion could match, so the probe lane
59
- // pays no per-finding allocation for the overwhelmingly common empty store.
60
- if (!diagnostics.length || !hasAnyDispositionMarks(options.cwd)) {
61
- return diagnostics;
62
- }
63
- const expanded = diagnostics.flatMap((diagnostic) => identities(diagnostic).map((identity) => ({
64
- diagnostic,
65
- candidate: {
66
- ...identity,
67
- message: diagnostic.message,
68
- ...(diagnostic.line !== undefined && { line: diagnostic.line }),
69
- ...(diagnostic.semantic !== undefined && {
70
- semantic: diagnostic.semantic,
71
- }),
72
- },
73
- })));
74
- const survivors = new Set(applyDispositions(expanded.map((entry) => entry.candidate), options.cwd, options.filePath, options.content));
75
- const disposed = new Set();
76
- for (const entry of expanded) {
77
- if (!survivors.has(entry.candidate))
78
- disposed.add(entry.diagnostic);
79
- }
80
- return disposed.size === 0
81
- ? diagnostics
82
- : diagnostics.filter((diagnostic) => !disposed.has(diagnostic));
83
- }
84
- /**
85
- * #3088 / AGENTS.md shape 26: the identity spellings a mark against a probe
86
- * finding can carry, derived from the surfaces that RENDER it rather than
87
- * guessed:
88
- *
89
- * - `convertLspDiagnostics` + `retagAuxiliaryDiagnostics` — the canonical
90
- * dispatch identity (`tool: "lsp"`, or the auxiliary's own id, and
91
- * `rule: "<source>:<code>"`). This is what the widget footer, `mode=delta`
92
- * and `mode=full` render, so it is the spelling of a mark made anywhere
93
- * else in the session.
94
- * - `formatDiag` in `tools/lsp-diagnostics.ts` — the probe's OWN text render
95
- * is `[<source>] (<code>)`, so a mark made from THIS lane's output carries
96
- * `tool: "<source>"`, `rule: "<code>"`.
97
- *
98
- * plus, for each, the form with `tool` omitted: `lens_diagnostic_mark`'s
99
- * `tool` parameter is optional and #3088's own reproduction omits it. A
100
- * single-spelling filter honors a mark made on one surface while re-reporting
101
- * the same finding when the mark was made on the other, which is exactly the
102
- * non-convergence #3088 reported.
103
- */
104
- function probeIdentities(canonical, raw) {
105
- const rendered = [
106
- [canonical.tool, canonical.rule],
107
- ];
108
- if (raw !== undefined &&
109
- (raw.source !== undefined || raw.code !== undefined)) {
110
- rendered.push([
111
- raw.source,
112
- raw.code === undefined ? undefined : String(raw.code),
113
- ]);
114
- }
115
- return expandRenderedIdentities(rendered);
116
- }
117
- /**
118
- * #3102: the identity spellings a mark against a surface that renders a
119
- * finding's RULE but never its TOOL can carry — the turn-end late-auxiliary
120
- * advisory (`<file>:<line>:<col> [<rule>] <message>`) and the cold-neighbour
121
- * cascade run (`line N, col M rule=<rule>: <message>`). Both print the
122
- * canonical dispatch `rule`, so a mark made ELSEWHERE (the widget, `mode=full`)
123
- * carries the full `(tool, rule)` pair while a mark made from the surface's own
124
- * output has no tool to pass on — and `lens_diagnostic_mark`'s `tool` parameter
125
- * is optional. Honoring only one of the two spellings is exactly the
126
- * non-convergence #3088 reported, so both go through the SAME expansion
127
- * `probeIdentities` uses.
128
- */
129
- export function renderedRuleIdentities(diagnostic) {
130
- return expandRenderedIdentities([[diagnostic.tool, diagnostic.rule]]);
131
- }
132
- /**
133
- * #3246: the identity spellings a mark against a surface that renders NEITHER
134
- * the tool NOR the rule can carry — the turn-end unresolved-inline-blocker
135
- * body, whose every line is `formatDiagnostics`' ` L<n>: <message>` (plus an
136
- * optional fix hint). An agent marking from that text has only the message and
137
- * the line to give `lens_diagnostic_mark`, whose `tool` AND `rule` parameters
138
- * are both optional, so the mark's anchor carries neither; a mark made from the
139
- * widget or `mode=full` carries the full canonical pair for the same finding.
140
- * Honoring one spelling and not the other is exactly the non-convergence #3088
141
- * reported, so both go through the SAME expansion `probeIdentities` uses. The
142
- * bare spelling stays safe for this STOP-tier surface because a `"blocking"`
143
- * diagnostic can only ever be dropped by the STRICT, content-bound
144
- * false-positive anchor (`applyDispositions`' F1 rule), which still binds the
145
- * normalized message and the flagged line's content hash.
146
- */
147
- export function inlineBlockerIdentities(diagnostic) {
148
- return expandRenderedIdentities([
149
- [diagnostic.tool, diagnostic.rule],
150
- [undefined, undefined],
151
- ]);
152
- }
153
- /**
154
- * The whole stack for a turn-end PUSH surface that renders dispatch
155
- * diagnostics for ONE file — the late-auxiliary drain (#3102) and the
156
- * late-runner drain (#3248), which are the same shape: a post-freshness-gate
157
- * `Diagnostic[]`, a `<file>:<line>:<col> [<rule>] <message>` rendering that
158
- * prints the rule but never the tool, and a suppressed count the caller
159
- * surfaces once per delivery (#1616).
160
- *
161
- * It exists so those two lanes cannot drift apart: this used to be open-coded
162
- * at the late-auxiliary site, and #3248 would have made a second copy of the
163
- * identical four arguments — the single-source rule's exact failure shape. The
164
- * caller still owns its own content read, because the two lanes read on
165
- * different schedules (the auxiliary drain reads once per FILE across several
166
- * server pairs; the runner drain reads once per pending runner).
167
- *
168
- * `content` is `undefined` when the file could not be read: it becomes `""`,
169
- * `FindingPolicyOptions.content`'s documented fail-open input, so the STRICT
170
- * anchor cannot match and nothing is hidden over an I/O error (shape 48).
171
- */
172
- export function applyPushedFindingPolicy(findings, options) {
173
- const { kept } = applyFindingPolicy(findings, {
174
- cwd: options.cwd,
175
- filePath: options.filePath,
176
- content: options.content ?? "",
177
- // mtime-cached, so several files in one drain cost one stat.
178
- policyMap: loadProjectRulePolicyMap(options.cwd),
179
- identities: renderedRuleIdentities,
180
- });
181
- return { kept, suppressed: findings.length - kept.length };
182
- }
183
- /** Every rendered `(tool, rule)` spelling plus the `tool`-omitted form of
184
- * each, de-duplicated, in order. One derivation for both callers. */
185
- function expandRenderedIdentities(rendered) {
186
- const out = [];
187
- const seen = new Set();
188
- for (const [tool, rule] of rendered) {
189
- // Both spellings also in the `tool`-omitted form the mark tool admits.
190
- for (const candidateTool of [tool, undefined]) {
191
- const key = `${candidateTool ?? ""}\u0000${rule ?? ""}`;
192
- if (seen.has(key))
193
- continue;
194
- seen.add(key);
195
- out.push({
196
- ...(candidateTool !== undefined && { tool: candidateTool }),
197
- ...(rule !== undefined && { rule }),
198
- });
199
- }
200
- }
201
- return out;
202
- }
203
- /* No drop COUNT is returned here on purpose (round 2 F1): the number an agent
204
- * is shown has to be scoped to that caller's severity threshold, and this
205
- * module must not learn about a threshold its other caller (`mode=full`) does
206
- * not have. `kept` versus the input is all a caller needs to derive its own. */
207
- /**
208
- * The probe lane's entry point: the same stack, over RAW LSP diagnostics.
209
- *
210
- * Identity comes from the two shared converters the widget footer already runs
211
- * on this very path (`convertLspDiagnostics` + `retagAuxiliaryDiagnostics`),
212
- * never a third derivation — a second copy of the conversion giving the same
213
- * finding a different `rule`, and orphaning every mark against it, is the #692
214
- * defect itself.
215
- *
216
- * `retagAuxiliaryDiagnostics` is used for its in-place re-tag only; its own
217
- * drop set (native aux comments, `skipTestFiles`) is deliberately ignored here
218
- * because `applyAuxiliarySuppressions` already applied exactly that filter to
219
- * these diagnostics at collection time — re-dropping would double-apply a
220
- * filter this route owns upstream.
221
- */
222
- export function applyLspFindingPolicy(diagnostics, options) {
223
- if (!diagnostics.length)
224
- return { kept: diagnostics, inlineKept: diagnostics };
225
- const content = options.content ?? "";
226
- // `convertLspDiagnostics` drops entries with no start line, which would
227
- // break the 1:1 index alignment `retagAuxiliaryDiagnostics` and the map-back
228
- // below depend on. Partition first so the converted array IS aligned with
229
- // `anchored`; a line-less entry passes straight through (it carries no line
230
- // for an anchor to bind to, and dropping it would silently lose a finding
231
- // this filter has no claim over).
232
- const anchored = [];
233
- for (const diagnostic of diagnostics) {
234
- if (diagnostic.range?.start?.line !== undefined)
235
- anchored.push(diagnostic);
236
- }
237
- if (!anchored.length)
238
- return { kept: diagnostics, inlineKept: diagnostics };
239
- const converted = convertLspDiagnostics(anchored, options.filePath);
240
- retagAuxiliaryDiagnostics(converted, anchored, content, {
241
- cwd: options.cwd,
242
- fileRole: options.fileRole,
243
- });
244
- // `convertLspDiagnostics` maps its (pre-filtered) input 1:1, so `converted[i]`
245
- // belongs to `anchored[i]`. Pair them up front and work from the pairing: a
246
- // converted entry with no counterpart is simply never paired, so it can never
247
- // be dropped — fail open, never hide a finding this filter could not identify.
248
- const rawByConverted = new Map();
249
- for (const [index, diagnostic] of converted.entries()) {
250
- const raw = anchored[index];
251
- if (raw !== undefined)
252
- rawByConverted.set(diagnostic, raw);
253
- }
254
- const { kept, inlineKept } = applyFindingPolicy(converted, {
255
- cwd: options.cwd,
256
- filePath: options.filePath,
257
- content,
258
- policyMap: options.policyMap,
259
- identities: (diagnostic) => probeIdentities(diagnostic, rawByConverted.get(diagnostic)),
260
- });
261
- const survivorsOf = (survivors) => {
262
- if (survivors.length === converted.length)
263
- return diagnostics;
264
- const keptConverted = new Set(survivors);
265
- const dropped = new Set();
266
- for (const [diagnostic, raw] of rawByConverted) {
267
- if (!keptConverted.has(diagnostic))
268
- dropped.add(raw);
269
- }
270
- return diagnostics.filter((d) => !dropped.has(d));
271
- };
272
- return { kept: survivorsOf(kept), inlineKept: survivorsOf(inlineKept) };
273
- }
274
- /**
275
- * #1617: turn_end reads gitleaks/govulncheck/trivy straight from their
276
- * session-scan caches and formats them into advisory/blocker text — a
277
- * reporting lane parallel to (and, before this fix, entirely bypassing)
278
- * `dispatcher.ts:924`'s `applyDispositions` filter. An agent-marked
279
- * false-positive/won't-fix on one of these findings never suppressed it
280
- * here, so it re-reported on every turn.
281
- *
282
- * Filters `findings` through the SAME anchor derivation the dispatch path
283
- * and `lens_diagnostics mode=full` use (`applyDispositionsMultiFile` in
284
- * `diagnostic-dispositions.ts`), keyed off each lane's own canonical
285
- * `ProjectDiagnostic` adapter (`toDiagnostic`) — the exact tool/rule/message
286
- * identity `lens_diagnostics` already surfaces and `lens_diagnostic_mark`
287
- * already anchors a mark against, not a second, cloned identity that would
288
- * silently diverge from what the agent actually marked.
289
- *
290
- * Returns the surviving findings plus how many were dropped, so a caller can
291
- * still surface a "suppressed by disposition: N" trace (the #1616
292
- * suppressed-bucket rule — a security finding must never vanish with no
293
- * trace, even when the disposition that dropped it is working as intended).
294
- */
295
- export function filterFindingsByDisposition(findings, cwd, toDiagnostic) {
296
- if (findings.length === 0)
297
- return { kept: findings, suppressed: 0 };
298
- // #3248: every `(tool, rule)` spelling a mark against these findings can
299
- // carry, not just the canonical one. NONE of these turn-end surfaces prints
300
- // a tool — knip renders `<file>:<line> — <type>: <name>`, dead-code
301
- // `unused <kind> <name>`, the security lanes `Potential secret: <rule>` —
302
- // so an agent marking from what it was SHOWN has no tool to pass, and
303
- // `lens_diagnostic_mark`'s `tool` parameter is optional. Honouring only the
304
- // spelling `lens_diagnostics` happens to show is the #3088 non-convergence,
305
- // and it is fixed HERE, once, for every caller of this helper rather than
306
- // per lane. Widening is safe for the blocking members because a
307
- // `semantic: "blocking"` finding can still only be dropped by the STRICT,
308
- // content-bound false-positive anchor, which keeps binding the normalized
309
- // message and the flagged line's content.
310
- // The expanded candidate is a `DispositionCandidate` with a path, NOT a
311
- // `ProjectDiagnostic`: the tool-omitted spelling has no `tool`, which that
312
- // type requires. Only the anchor derivation reads it.
313
- const candidates = findings.flatMap((finding) => {
314
- const diagnostic = toDiagnostic(finding);
315
- return renderedRuleIdentities(diagnostic).map((identity) => ({
316
- finding,
317
- candidate: {
318
- filePath: diagnostic.filePath,
319
- message: diagnostic.message,
320
- ...(diagnostic.line !== undefined && { line: diagnostic.line }),
321
- ...(diagnostic.semantic !== undefined && {
322
- semantic: diagnostic.semantic,
323
- }),
324
- ...(identity.tool !== undefined && { tool: identity.tool }),
325
- ...(identity.rule !== undefined && { rule: identity.rule }),
326
- },
327
- }));
328
- });
329
- const survivors = new Set(applyDispositionsMultiFile(candidates.map((c) => c.candidate), cwd, (d) => d.filePath));
330
- const disposed = new Set();
331
- for (const candidate of candidates) {
332
- if (!survivors.has(candidate.candidate))
333
- disposed.add(candidate.finding);
334
- }
335
- const kept = disposed.size === 0
336
- ? findings
337
- : findings.filter((finding) => !disposed.has(finding));
338
- return { kept, suppressed: findings.length - kept.length };
339
- }