pi-lens 4.3.0 → 4.4.0

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 (650) hide show
  1. package/CHANGELOG.md +1064 -0
  2. package/README.md +115 -25
  3. package/config/dependency-cruiser-eager-allowlist.json +6 -2
  4. package/dist/chunk-22AVIGXS.js +560 -0
  5. package/dist/chunk-27BBHSZC.js +106 -0
  6. package/dist/chunk-2BEMIWEW.js +51 -0
  7. package/dist/chunk-2EECBNC5.js +89 -0
  8. package/dist/chunk-34U7PLGE.js +23 -0
  9. package/dist/chunk-3I5QFT3N.js +181 -0
  10. package/dist/chunk-3MED75HT.js +37 -0
  11. package/dist/chunk-47D2BO4S.js +87 -0
  12. package/dist/chunk-4RERDEXR.js +348 -0
  13. package/dist/chunk-4W2PLC4J.js +27 -0
  14. package/dist/chunk-52H5B5TC.js +202 -0
  15. package/dist/chunk-54B42YRX.js +27 -0
  16. package/dist/chunk-5RXBNSW2.js +266 -0
  17. package/dist/chunk-5THXD6X5.js +201 -0
  18. package/dist/chunk-5W3R6LFT.js +24 -0
  19. package/dist/chunk-5ZEJHV35.js +341 -0
  20. package/dist/chunk-6P62QVEA.js +118 -0
  21. package/dist/chunk-6QIUX4EP.js +459 -0
  22. package/dist/chunk-6VCD4VKZ.js +78 -0
  23. package/dist/chunk-7F72PXY2.js +326 -0
  24. package/dist/chunk-7FBF7NPR.js +998 -0
  25. package/dist/chunk-7U2IDNXN.js +37 -0
  26. package/dist/chunk-ABBOA7UD.js +157 -0
  27. package/dist/chunk-AHDW3GPE.js +50 -0
  28. package/dist/chunk-AJ3QXTRQ.js +756 -0
  29. package/dist/chunk-AJVLWNFN.js +1610 -0
  30. package/dist/chunk-AJXODZY6.js +112 -0
  31. package/dist/chunk-ARFCXG7S.js +84 -0
  32. package/dist/chunk-AS44CFQ4.js +708 -0
  33. package/dist/chunk-AWE5TMPO.js +38 -0
  34. package/dist/chunk-B3I2UUT4.js +4692 -0
  35. package/dist/chunk-BRJKOBZP.js +331 -0
  36. package/dist/chunk-BW5KFIQC.js +59 -0
  37. package/dist/chunk-C2AUYXQH.js +149 -0
  38. package/dist/chunk-CGGAIP7J.js +29 -0
  39. package/dist/chunk-D6QS3U6M.js +30 -0
  40. package/dist/chunk-DFVMIKMQ.js +349 -0
  41. package/dist/chunk-DIULIWKU.js +169 -0
  42. package/dist/chunk-DQ2NZ7C4.js +2317 -0
  43. package/dist/chunk-E2WFBRHM.js +213 -0
  44. package/dist/chunk-E4MAEDPM.js +50 -0
  45. package/dist/chunk-EOKRQ3SA.js +30 -0
  46. package/dist/chunk-F3AU2TMM.js +2626 -0
  47. package/dist/chunk-F3P7VQ7H.js +170 -0
  48. package/dist/chunk-FC4RP4I2.js +12 -0
  49. package/dist/chunk-FJNKANOS.js +32 -0
  50. package/dist/chunk-GUOGVTCQ.js +146 -0
  51. package/dist/chunk-GVXA6CCE.js +18 -0
  52. package/dist/chunk-HHYAELLJ.js +2334 -0
  53. package/dist/chunk-HMFXILPV.js +83 -0
  54. package/dist/chunk-HVUZXSWK.js +421 -0
  55. package/dist/chunk-HWBZIGMJ.js +62 -0
  56. package/dist/chunk-I3R7GKDR.js +17 -0
  57. package/dist/chunk-I7SPGOWI.js +55 -0
  58. package/dist/chunk-IIXOAGHR.js +38 -0
  59. package/dist/chunk-IVP5KAB7.js +2250 -0
  60. package/dist/chunk-IXEBJSUE.js +22 -0
  61. package/dist/chunk-JOLITGCC.js +27 -0
  62. package/dist/chunk-K6VYLB2U.js +145 -0
  63. package/dist/chunk-LJDODBBZ.js +78 -0
  64. package/dist/chunk-LNAKEO63.js +78 -0
  65. package/dist/chunk-LSMJ6KBE.js +4139 -0
  66. package/dist/chunk-LW6XKDZQ.js +5565 -0
  67. package/dist/chunk-N3YQJI6O.js +899 -0
  68. package/dist/chunk-NABLC7W3.js +148 -0
  69. package/dist/chunk-NKOUFPQF.js +659 -0
  70. package/dist/chunk-NL5GLMFI.js +211 -0
  71. package/dist/chunk-NMABWBZN.js +327 -0
  72. package/dist/chunk-NTHH2J74.js +27 -0
  73. package/dist/chunk-NTUJEGDZ.js +59 -0
  74. package/dist/chunk-NXL4FFQQ.js +47 -0
  75. package/dist/chunk-NXPS2L6U.js +466 -0
  76. package/dist/chunk-O5WILGMI.js +42 -0
  77. package/dist/chunk-O6TQT6RI.js +48 -0
  78. package/dist/chunk-OAXNDZJ7.js +323 -0
  79. package/dist/chunk-ODEEOXPH.js +44 -0
  80. package/dist/chunk-OQGFCZJ4.js +4533 -0
  81. package/dist/chunk-ORTMY4Q4.js +282 -0
  82. package/dist/chunk-OS32RNR2.js +442 -0
  83. package/dist/chunk-PAK6IDME.js +189 -0
  84. package/dist/chunk-PWFHBTSF.js +406 -0
  85. package/dist/chunk-Q5U6FMDI.js +2352 -0
  86. package/dist/chunk-QOZXJ4NA.js +3364 -0
  87. package/dist/chunk-QYF5S6P6.js +45 -0
  88. package/dist/chunk-RIISMHKN.js +36 -0
  89. package/dist/chunk-RPD4ZSB7.js +25 -0
  90. package/dist/chunk-RPD5K5NC.js +79 -0
  91. package/dist/chunk-RUOG5D2C.js +262 -0
  92. package/dist/chunk-T4ERT73Y.js +599 -0
  93. package/dist/chunk-T6D4Q4AQ.js +54 -0
  94. package/dist/chunk-TGPXLY2J.js +391 -0
  95. package/dist/chunk-TLGFBM3F.js +12116 -0
  96. package/dist/chunk-TO6WL3GM.js +88 -0
  97. package/dist/chunk-TT22N74J.js +517 -0
  98. package/dist/chunk-TVN5N6GY.js +21216 -0
  99. package/dist/chunk-U3VGR4VU.js +308 -0
  100. package/dist/chunk-UK3CMEAL.js +1250 -0
  101. package/dist/chunk-UOPVJQ4N.js +103 -0
  102. package/dist/chunk-UXVNL3D7.js +23 -0
  103. package/dist/chunk-UY752QSN.js +45 -0
  104. package/dist/chunk-V5PXFSZK.js +188 -0
  105. package/dist/chunk-V7R425XG.js +398 -0
  106. package/dist/chunk-VCSRSYLF.js +81 -0
  107. package/dist/chunk-VD4JQCQC.js +162 -0
  108. package/dist/chunk-VDBPVIKD.js +62 -0
  109. package/dist/chunk-VHQLPIRJ.js +114 -0
  110. package/dist/chunk-VN2AXLEX.js +5414 -0
  111. package/dist/chunk-VNMT7C64.js +478 -0
  112. package/dist/chunk-WONERJTP.js +309 -0
  113. package/dist/chunk-XECLWQZN.js +85 -0
  114. package/dist/chunk-XIMYZ3JA.js +27 -0
  115. package/dist/chunk-XK4CIILI.js +144 -0
  116. package/dist/chunk-Y4T27COV.js +562 -0
  117. package/dist/chunk-YGVYKNSN.js +1860 -0
  118. package/dist/chunk-YLF3PPT5.js +308 -0
  119. package/dist/chunk-YSNFMJKN.js +14 -0
  120. package/dist/chunk-Z3CCVDUB.js +76 -0
  121. package/dist/chunk-Z54ZSOBZ.js +61 -0
  122. package/dist/chunk-ZAWW3AF6.js +97 -0
  123. package/dist/chunk-ZMOL6RQC.js +167 -0
  124. package/dist/index.js +16456 -8335
  125. package/dist/mcp/analyze-cli.js +186 -232
  126. package/dist/mcp/cli.js +137 -98
  127. package/dist/mcp/server.js +22589 -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 +3 -2
  135. package/docs/configuration.md +20 -1
  136. package/docs/environment-variables.md +52 -2
  137. package/docs/features.md +8 -4
  138. package/docs/globalconfig.md +1 -0
  139. package/docs/io-bridge-v2-migration.md +94 -0
  140. package/docs/lsp-capability-matrix.md +36 -4
  141. package/docs/lsp-idle-eviction.md +124 -0
  142. package/docs/mcp.md +21 -5
  143. package/docs/merge-queue-rollout.md +77 -0
  144. package/docs/pi-lens-fixer.md +156 -88
  145. package/docs/pi-lens-investigator.md +74 -26
  146. package/docs/pi-lens-merge-policy.md +694 -0
  147. package/docs/pi-lens-monitor.md +73 -7
  148. package/docs/pi-lens-retro.md +6 -4
  149. package/docs/pi-lens-reviewer.md +188 -48
  150. package/docs/pi-lens-subagent.md +246 -45
  151. package/docs/pi-lens-warden.md +18 -7
  152. package/docs/public-api-stability.md +55 -0
  153. package/docs/release-qa-baseline.md +84 -17
  154. package/docs/rfcs/3654-unified-io-bridge-v2.md +316 -0
  155. package/docs/servercapabilities.md +53 -49
  156. package/docs/settings.md +1 -0
  157. package/docs/usage.md +5 -1
  158. package/grammars/tree-sitter-bash.wasm +0 -0
  159. package/grammars/tree-sitter-bash.wasm.json +3 -3
  160. package/package.json +19 -7
  161. package/rules/ast-grep-rules/rule-tests/advisory-registry-subset-test.yml +41 -0
  162. package/rules/ast-grep-rules/rules/advisory-registry-subset.yml +50 -0
  163. package/scripts/analyze-pi-lens-logs.mjs +1275 -62
  164. package/scripts/download-grammars.js +5 -0
  165. package/scripts/grammars.lock.json +6 -1
  166. package/scripts/install-selftest.mjs +33 -34
  167. package/scripts/lib/host-provided-deps.mjs +13 -4
  168. package/scripts/lib/web-tree-sitter-dir.mjs +18 -0
  169. package/dist/clients/actionable-warnings-logger.js +0 -35
  170. package/dist/clients/actionable-warnings.js +0 -1610
  171. package/dist/clients/advisory-provenance.js +0 -593
  172. package/dist/clients/agent-behavior-client.js +0 -147
  173. package/dist/clients/agent-nudge.js +0 -325
  174. package/dist/clients/analysed-root.js +0 -1
  175. package/dist/clients/ast-grep-client.js +0 -731
  176. package/dist/clients/ast-grep-rule-manager.js +0 -146
  177. package/dist/clients/ast-grep-tool-logger.js +0 -118
  178. package/dist/clients/ast-grep-types.js +0 -10
  179. package/dist/clients/ast-grep-yaml-synth.js +0 -154
  180. package/dist/clients/atomic-write-staging.js +0 -75
  181. package/dist/clients/atomic-write.js +0 -189
  182. package/dist/clients/availability-probe-flight.js +0 -12
  183. package/dist/clients/bash-file-access.js +0 -1056
  184. package/dist/clients/biome-client.js +0 -357
  185. package/dist/clients/blocker-freshness.js +0 -837
  186. package/dist/clients/blocker-past-eof.js +0 -129
  187. package/dist/clients/bootstrap.js +0 -569
  188. package/dist/clients/bounded-cache.js +0 -190
  189. package/dist/clients/bounded-pid-file-lock.js +0 -202
  190. package/dist/clients/bounded-telemetry.js +0 -295
  191. package/dist/clients/build-identity.js +0 -95
  192. package/dist/clients/bundled-resource-health.js +0 -113
  193. package/dist/clients/bus-events-logger.js +0 -105
  194. package/dist/clients/bus-publish.js +0 -171
  195. package/dist/clients/cache/rule-cache.js +0 -190
  196. package/dist/clients/cache-manager.js +0 -524
  197. package/dist/clients/cache-observability.js +0 -1313
  198. package/dist/clients/call-graph.js +0 -852
  199. package/dist/clients/cargo-manifest.js +0 -422
  200. package/dist/clients/cascade-budget.js +0 -196
  201. package/dist/clients/cascade-format.js +0 -315
  202. package/dist/clients/cascade-logger.js +0 -31
  203. package/dist/clients/cascade-types.js +0 -9
  204. package/dist/clients/child-unref.js +0 -124
  205. package/dist/clients/code-quality-warnings.js +0 -286
  206. package/dist/clients/codebase-model.js +0 -173
  207. package/dist/clients/collateral-test-role.js +0 -40
  208. package/dist/clients/complexity-client.js +0 -462
  209. package/dist/clients/config-core/deny.js +0 -221
  210. package/dist/clients/config-core/index.js +0 -50
  211. package/dist/clients/config-core/merge.js +0 -357
  212. package/dist/clients/config-core/normalize.js +0 -340
  213. package/dist/clients/config-core/process-spec.js +0 -248
  214. package/dist/clients/config-core/provenance.js +0 -164
  215. package/dist/clients/config-core/records.js +0 -218
  216. package/dist/clients/config-core/resolve.js +0 -125
  217. package/dist/clients/config-core/safe-object.js +0 -78
  218. package/dist/clients/config-core/schema.js +0 -165
  219. package/dist/clients/config-diagnostic-codes.js +0 -285
  220. package/dist/clients/config-locations.js +0 -388
  221. package/dist/clients/config-resolve.js +0 -798
  222. package/dist/clients/config-schema.js +0 -251
  223. package/dist/clients/config-warn.js +0 -407
  224. package/dist/clients/console-guard-install.js +0 -26
  225. package/dist/clients/cooperative-budget.js +0 -42
  226. package/dist/clients/dead-code-client.js +0 -510
  227. package/dist/clients/dead-code-logger.js +0 -30
  228. package/dist/clients/deadline-utils.js +0 -280
  229. package/dist/clients/debug-handles.js +0 -211
  230. package/dist/clients/debug-heap.js +0 -174
  231. package/dist/clients/deferred-lsp-work.js +0 -106
  232. package/dist/clients/degradation-ledger.js +0 -426
  233. package/dist/clients/demoted-finding-render.js +0 -169
  234. package/dist/clients/dependency-checker.js +0 -885
  235. package/dist/clients/deps/ast-grep-napi.js +0 -22
  236. package/dist/clients/deps/js-yaml.js +0 -9
  237. package/dist/clients/deps/minimatch.js +0 -4
  238. package/dist/clients/deps/pi-tui.js +0 -14
  239. package/dist/clients/deps/typebox.js +0 -14
  240. package/dist/clients/deps/vscode-jsonrpc.js +0 -1
  241. package/dist/clients/deps/web-tree-sitter.js +0 -24
  242. package/dist/clients/diagnostic-dispositions.js +0 -630
  243. package/dist/clients/diagnostic-line-freshness.js +0 -305
  244. package/dist/clients/diagnostic-logger.js +0 -73
  245. package/dist/clients/diagnostic-tracker.js +0 -105
  246. package/dist/clients/diagnostics-publish.js +0 -230
  247. package/dist/clients/dispatch/ast-grep-catalog.js +0 -65
  248. package/dist/clients/dispatch/auxiliary-lsp.js +0 -343
  249. package/dist/clients/dispatch/collect-later-tier.js +0 -35
  250. package/dist/clients/dispatch/diagnostic-taxonomy.js +0 -66
  251. package/dist/clients/dispatch/dispatcher.js +0 -1269
  252. package/dist/clients/dispatch/fact-provider-types.js +0 -1
  253. package/dist/clients/dispatch/fact-rule-runner.js +0 -17
  254. package/dist/clients/dispatch/fact-runner.js +0 -30
  255. package/dist/clients/dispatch/fact-scheduler.js +0 -68
  256. package/dist/clients/dispatch/fact-store.js +0 -377
  257. package/dist/clients/dispatch/facts/comment-facts.js +0 -22
  258. package/dist/clients/dispatch/facts/file-content.js +0 -19
  259. package/dist/clients/dispatch/facts/function-facts.js +0 -348
  260. package/dist/clients/dispatch/facts/import-facts.js +0 -204
  261. package/dist/clients/dispatch/facts/tree-sitter-facts.js +0 -34
  262. package/dist/clients/dispatch/facts/try-catch-facts.js +0 -119
  263. package/dist/clients/dispatch/finding-policy.js +0 -339
  264. package/dist/clients/dispatch/indent-detect.js +0 -417
  265. package/dist/clients/dispatch/inline-suppressions.js +0 -89
  266. package/dist/clients/dispatch/integration.js +0 -2377
  267. package/dist/clients/dispatch/lazy.js +0 -11
  268. package/dist/clients/dispatch/pending-runner-findings.js +0 -87
  269. package/dist/clients/dispatch/plan.js +0 -278
  270. package/dist/clients/dispatch/priorities.js +0 -20
  271. package/dist/clients/dispatch/rule-id-normalize.js +0 -50
  272. package/dist/clients/dispatch/rule-ignores.js +0 -69
  273. package/dist/clients/dispatch/rule-policy.js +0 -135
  274. package/dist/clients/dispatch/rules/async-noise.js +0 -40
  275. package/dist/clients/dispatch/rules/async-unnecessary-wrapper.js +0 -27
  276. package/dist/clients/dispatch/rules/cors-wildcard.js +0 -54
  277. package/dist/clients/dispatch/rules/error-obscuring.js +0 -32
  278. package/dist/clients/dispatch/rules/error-swallowing.js +0 -31
  279. package/dist/clients/dispatch/rules/framework-call-noise.js +0 -67
  280. package/dist/clients/dispatch/rules/high-complexity.js +0 -72
  281. package/dist/clients/dispatch/rules/high-fan-out.js +0 -74
  282. package/dist/clients/dispatch/rules/high-import-coupling.js +0 -37
  283. package/dist/clients/dispatch/rules/missing-error-propagation.js +0 -62
  284. package/dist/clients/dispatch/rules/no-commented-credentials.js +0 -52
  285. package/dist/clients/dispatch/rules/pass-through-wrappers.js +0 -42
  286. package/dist/clients/dispatch/rules/placeholder-comments.js +0 -40
  287. package/dist/clients/dispatch/rules/unsafe-boundary.js +0 -126
  288. package/dist/clients/dispatch/runner-context.js +0 -52
  289. package/dist/clients/dispatch/runners/actionlint.js +0 -111
  290. package/dist/clients/dispatch/runners/ast-grep-napi.js +0 -1196
  291. package/dist/clients/dispatch/runners/biome-check.js +0 -296
  292. package/dist/clients/dispatch/runners/cpp-check.js +0 -219
  293. package/dist/clients/dispatch/runners/credo.js +0 -82
  294. package/dist/clients/dispatch/runners/cue-vet.js +0 -416
  295. package/dist/clients/dispatch/runners/dart-analyze.js +0 -183
  296. package/dist/clients/dispatch/runners/detekt.js +0 -176
  297. package/dist/clients/dispatch/runners/dotnet-build.js +0 -164
  298. package/dist/clients/dispatch/runners/elixir-check.js +0 -195
  299. package/dist/clients/dispatch/runners/eslint.js +0 -137
  300. package/dist/clients/dispatch/runners/fact-rules.js +0 -29
  301. package/dist/clients/dispatch/runners/fish-indent.js +0 -69
  302. package/dist/clients/dispatch/runners/gleam-check.js +0 -167
  303. package/dist/clients/dispatch/runners/go-vet.js +0 -104
  304. package/dist/clients/dispatch/runners/golangci-lint.js +0 -135
  305. package/dist/clients/dispatch/runners/hadolint.js +0 -91
  306. package/dist/clients/dispatch/runners/helm-lint.js +0 -171
  307. package/dist/clients/dispatch/runners/helm-render.js +0 -940
  308. package/dist/clients/dispatch/runners/htmlhint.js +0 -117
  309. package/dist/clients/dispatch/runners/index.js +0 -108
  310. package/dist/clients/dispatch/runners/javac.js +0 -99
  311. package/dist/clients/dispatch/runners/ktlint.js +0 -110
  312. package/dist/clients/dispatch/runners/lsp.js +0 -379
  313. package/dist/clients/dispatch/runners/markdownlint.js +0 -167
  314. package/dist/clients/dispatch/runners/mypy.js +0 -102
  315. package/dist/clients/dispatch/runners/oxlint.js +0 -414
  316. package/dist/clients/dispatch/runners/php-lint.js +0 -85
  317. package/dist/clients/dispatch/runners/phpstan.js +0 -120
  318. package/dist/clients/dispatch/runners/prisma-validate.js +0 -62
  319. package/dist/clients/dispatch/runners/psscriptanalyzer.js +0 -445
  320. package/dist/clients/dispatch/runners/pyright.js +0 -169
  321. package/dist/clients/dispatch/runners/rubocop.js +0 -99
  322. package/dist/clients/dispatch/runners/ruff.js +0 -88
  323. package/dist/clients/dispatch/runners/rust-clippy.js +0 -256
  324. package/dist/clients/dispatch/runners/shellcheck.js +0 -173
  325. package/dist/clients/dispatch/runners/shfmt.js +0 -102
  326. package/dist/clients/dispatch/runners/spellcheck.js +0 -128
  327. package/dist/clients/dispatch/runners/spotbugs.js +0 -259
  328. package/dist/clients/dispatch/runners/sqlfluff.js +0 -183
  329. package/dist/clients/dispatch/runners/stylelint.js +0 -166
  330. package/dist/clients/dispatch/runners/swiftlint.js +0 -163
  331. package/dist/clients/dispatch/runners/taplo.js +0 -174
  332. package/dist/clients/dispatch/runners/terragrunt.js +0 -168
  333. package/dist/clients/dispatch/runners/tflint.js +0 -125
  334. package/dist/clients/dispatch/runners/tree-sitter.js +0 -643
  335. package/dist/clients/dispatch/runners/trivy-config.js +0 -253
  336. package/dist/clients/dispatch/runners/utils/availability-policy.js +0 -496
  337. package/dist/clients/dispatch/runners/utils/candidate-probe.js +0 -90
  338. package/dist/clients/dispatch/runners/utils/diagnostic-parsers.js +0 -95
  339. package/dist/clients/dispatch/runners/utils/lazy-installer.js +0 -274
  340. package/dist/clients/dispatch/runners/utils/runner-helpers.js +0 -1701
  341. package/dist/clients/dispatch/runners/utils/spawn-outcome.js +0 -101
  342. package/dist/clients/dispatch/runners/utils/tool-failure.js +0 -235
  343. package/dist/clients/dispatch/runners/utils/toolchain-availability.js +0 -169
  344. package/dist/clients/dispatch/runners/utils.js +0 -15
  345. package/dist/clients/dispatch/runners/vale.js +0 -128
  346. package/dist/clients/dispatch/runners/yaml-rule-parser.js +0 -242
  347. package/dist/clients/dispatch/runners/yamllint.js +0 -95
  348. package/dist/clients/dispatch/runners/zig-check.js +0 -79
  349. package/dist/clients/dispatch/suppress-writer.js +0 -79
  350. package/dist/clients/dispatch/tool-profile.js +0 -30
  351. package/dist/clients/dispatch/types.js +0 -21
  352. package/dist/clients/dispatch/utils/format-utils.js +0 -45
  353. package/dist/clients/dispatch/utils/lsp-diagnostics.js +0 -35
  354. package/dist/clients/disposition-logger.js +0 -32
  355. package/dist/clients/disposition-publish.js +0 -124
  356. package/dist/clients/durable-store.js +0 -97
  357. package/dist/clients/effective-config.js +0 -415
  358. package/dist/clients/env-utils.js +0 -83
  359. package/dist/clients/error-class.js +0 -23
  360. package/dist/clients/eval-timestamp.js +0 -17
  361. package/dist/clients/event-loop-hold.js +0 -274
  362. package/dist/clients/event-loop-monitor.js +0 -250
  363. package/dist/clients/extension-log.js +0 -504
  364. package/dist/clients/extension-mode.js +0 -73
  365. package/dist/clients/feature-hints.js +0 -103
  366. package/dist/clients/file-kinds.js +0 -412
  367. package/dist/clients/file-role.js +0 -134
  368. package/dist/clients/file-time.js +0 -160
  369. package/dist/clients/file-utils.js +0 -1032
  370. package/dist/clients/finding-delivery-gate.js +0 -494
  371. package/dist/clients/finding-identity.js +0 -88
  372. package/dist/clients/fix-worklog.js +0 -103
  373. package/dist/clients/format-events-publish.js +0 -343
  374. package/dist/clients/format-service.js +0 -222
  375. package/dist/clients/formatters-lazy.js +0 -9
  376. package/dist/clients/formatters.js +0 -2032
  377. package/dist/clients/freshness-cadence.js +0 -17
  378. package/dist/clients/freshness.js +0 -38
  379. package/dist/clients/generated-artifacts.js +0 -394
  380. package/dist/clients/generation-guard.js +0 -215
  381. package/dist/clients/git-guard.js +0 -1136
  382. package/dist/clients/git-tracked-ignore.js +0 -243
  383. package/dist/clients/gitleaks-client.js +0 -509
  384. package/dist/clients/go-client.js +0 -104
  385. package/dist/clients/govulncheck-client.js +0 -605
  386. package/dist/clients/gradle-ktfmt-style.js +0 -348
  387. package/dist/clients/grammar-source.js +0 -465
  388. package/dist/clients/gzip-stage-write.js +0 -135
  389. package/dist/clients/hashline-anchor.js +0 -424
  390. package/dist/clients/hook-budgets.js +0 -76
  391. package/dist/clients/host-edit-normalize.js +0 -140
  392. package/dist/clients/host-ports.js +0 -39
  393. package/dist/clients/indent-retarget.js +0 -154
  394. package/dist/clients/inline-blocker-dispositions.js +0 -186
  395. package/dist/clients/install-diagnostics.js +0 -156
  396. package/dist/clients/installer/index.js +0 -5416
  397. package/dist/clients/installer/managed-tool-refresh-session.js +0 -58
  398. package/dist/clients/installer/managed-tool-refresh.js +0 -783
  399. package/dist/clients/instance-reaper-state.js +0 -7
  400. package/dist/clients/instance-reaper.js +0 -1137
  401. package/dist/clients/instance-registry-lock.js +0 -145
  402. package/dist/clients/instance-registry.js +0 -773
  403. package/dist/clients/jscpd-client.js +0 -378
  404. package/dist/clients/json-cache-read.js +0 -65
  405. package/dist/clients/knip-client.js +0 -788
  406. package/dist/clients/language-policy.js +0 -252
  407. package/dist/clients/language-profile.js +0 -361
  408. package/dist/clients/language-registry.js +0 -603
  409. package/dist/clients/latency-logger.js +0 -727
  410. package/dist/clients/lazy-import.js +0 -21
  411. package/dist/clients/ledger-bounds.js +0 -54
  412. package/dist/clients/lens-config.js +0 -404
  413. package/dist/clients/lens-engine.js +0 -358
  414. package/dist/clients/lens-events.js +0 -125
  415. package/dist/clients/lens-flag-registry.js +0 -467
  416. package/dist/clients/lens-map.js +0 -1156
  417. package/dist/clients/live-bus-emitter.js +0 -74
  418. package/dist/clients/log-cleanup.js +0 -222
  419. package/dist/clients/lsp/aggregation.js +0 -178
  420. package/dist/clients/lsp/cascade-tier.js +0 -421
  421. package/dist/clients/lsp/client.js +0 -4593
  422. package/dist/clients/lsp/config.js +0 -691
  423. package/dist/clients/lsp/content-limits.js +0 -41
  424. package/dist/clients/lsp/diagnostic-binding.js +0 -225
  425. package/dist/clients/lsp/document-drift.js +0 -467
  426. package/dist/clients/lsp/edits.js +0 -1219
  427. package/dist/clients/lsp/index.js +0 -8305
  428. package/dist/clients/lsp/inferred-project.js +0 -216
  429. package/dist/clients/lsp/jvm-runtime.js +0 -298
  430. package/dist/clients/lsp/language.js +0 -63
  431. package/dist/clients/lsp/launch.js +0 -746
  432. package/dist/clients/lsp/lombok.js +0 -158
  433. package/dist/clients/lsp/path-utils.js +0 -5
  434. package/dist/clients/lsp/pending-aux-coverage.js +0 -251
  435. package/dist/clients/lsp/position-encoding.js +0 -61
  436. package/dist/clients/lsp/ruby-drive-dirs.js +0 -83
  437. package/dist/clients/lsp/server.js +0 -3290
  438. package/dist/clients/lsp/session-roots.js +0 -192
  439. package/dist/clients/lsp/spawn-history.js +0 -17
  440. package/dist/clients/lsp/sync-kind.js +0 -56
  441. package/dist/clients/lsp/tsserver-sync.js +0 -332
  442. package/dist/clients/lsp/wait-policy/capability-snapshot.js +0 -1
  443. package/dist/clients/lsp/wait-policy/classification.js +0 -85
  444. package/dist/clients/lsp/wait-policy/index.js +0 -10
  445. package/dist/clients/lsp/wait-policy/strategies.js +0 -392
  446. package/dist/clients/lsp/watch-queue.js +0 -61
  447. package/dist/clients/lsp/workspace-diagnostics-cache.js +0 -639
  448. package/dist/clients/lsp/workspace-diagnostics-session.js +0 -30
  449. package/dist/clients/lsp/workspace-sweep-hold.js +0 -184
  450. package/dist/clients/lsp-budget.js +0 -186
  451. package/dist/clients/lsp-document-symbols.js +0 -110
  452. package/dist/clients/lsp-lazy.js +0 -9
  453. package/dist/clients/lsp-mutation.js +0 -396
  454. package/dist/clients/lsp-status.js +0 -59
  455. package/dist/clients/map-with-concurrency.js +0 -40
  456. package/dist/clients/mcp/analyze.js +0 -420
  457. package/dist/clients/mcp/host-shim.js +0 -31
  458. package/dist/clients/mcp/ipc.js +0 -523
  459. package/dist/clients/mcp/review.js +0 -197
  460. package/dist/clients/mcp/session.js +0 -412
  461. package/dist/clients/memory-sampler.js +0 -208
  462. package/dist/clients/message-end-attribution.js +0 -30
  463. package/dist/clients/metrics-client.js +0 -107
  464. package/dist/clients/metrics-history.js +0 -327
  465. package/dist/clients/middle-man-analysis.js +0 -263
  466. package/dist/clients/model-provider.js +0 -53
  467. package/dist/clients/module-report-lsp.js +0 -189
  468. package/dist/clients/module-report.js +0 -2150
  469. package/dist/clients/mutating-tool.js +0 -651
  470. package/dist/clients/mutation-attribution.js +0 -368
  471. package/dist/clients/mutation-bridge.js +0 -240
  472. package/dist/clients/ndjson-logger.js +0 -734
  473. package/dist/clients/observed-mutation-sources.js +0 -101
  474. package/dist/clients/observed-mutation.js +0 -1253
  475. package/dist/clients/oldtext-autopatch.js +0 -128
  476. package/dist/clients/opaque-mutation-scan.js +0 -496
  477. package/dist/clients/opengrep-client.js +0 -333
  478. package/dist/clients/opengrep-config.js +0 -76
  479. package/dist/clients/package-manager.js +0 -607
  480. package/dist/clients/package-root.js +0 -38
  481. package/dist/clients/partial-edit-apply.js +0 -439
  482. package/dist/clients/path-attribution-telemetry.js +0 -43
  483. package/dist/clients/path-keyed-map.js +0 -108
  484. package/dist/clients/path-utils.js +0 -1244
  485. package/dist/clients/performance-report.js +0 -331
  486. package/dist/clients/persist-debounce.js +0 -70
  487. package/dist/clients/persistent-reverify.js +0 -271
  488. package/dist/clients/php-cs-fixer-config.js +0 -119
  489. package/dist/clients/pipeline.js +0 -1480
  490. package/dist/clients/post-autofix-notice.js +0 -37
  491. package/dist/clients/print-mode.js +0 -21
  492. package/dist/clients/probe-home-state.js +0 -228
  493. package/dist/clients/process-bridge.js +0 -66
  494. package/dist/clients/process-singletons.js +0 -210
  495. package/dist/clients/process-snapshot.js +0 -68
  496. package/dist/clients/project-changes.js +0 -181
  497. package/dist/clients/project-conventions.js +0 -171
  498. package/dist/clients/project-diagnostics/cache.js +0 -137
  499. package/dist/clients/project-diagnostics/extractors.js +0 -109
  500. package/dist/clients/project-diagnostics/fresh-fetch.js +0 -668
  501. package/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +0 -118
  502. package/dist/clients/project-diagnostics/runner-adapters/dead-code.js +0 -47
  503. package/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +0 -40
  504. package/dist/clients/project-diagnostics/runner-adapters/govulncheck.js +0 -34
  505. package/dist/clients/project-diagnostics/runner-adapters/jscpd.js +0 -38
  506. package/dist/clients/project-diagnostics/runner-adapters/knip.js +0 -47
  507. package/dist/clients/project-diagnostics/runner-adapters/madge.js +0 -48
  508. package/dist/clients/project-diagnostics/runner-adapters/opengrep.js +0 -40
  509. package/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +0 -127
  510. package/dist/clients/project-diagnostics/runner-adapters/trivy.js +0 -81
  511. package/dist/clients/project-diagnostics/scanner.js +0 -520
  512. package/dist/clients/project-diagnostics/types.js +0 -1
  513. package/dist/clients/project-lens-config.js +0 -807
  514. package/dist/clients/project-report.js +0 -701
  515. package/dist/clients/project-scale.js +0 -237
  516. package/dist/clients/project-scan-policy.js +0 -11
  517. package/dist/clients/project-snapshot-fingerprint.js +0 -48
  518. package/dist/clients/project-snapshot-persist-worker.js +0 -20
  519. package/dist/clients/project-snapshot.js +0 -1653
  520. package/dist/clients/project-trust.js +0 -181
  521. package/dist/clients/python-environment.js +0 -217
  522. package/dist/clients/python-provenance.js +0 -639
  523. package/dist/clients/quiet-window-config.js +0 -47
  524. package/dist/clients/quiet-window.js +0 -236
  525. package/dist/clients/read-bridge.js +0 -139
  526. package/dist/clients/read-expansion.js +0 -266
  527. package/dist/clients/read-guard-logger.js +0 -251
  528. package/dist/clients/read-guard-tool-lines.js +0 -1306
  529. package/dist/clients/read-guard.js +0 -1561
  530. package/dist/clients/recent-touches.js +0 -240
  531. package/dist/clients/redact/secrets.js +0 -449
  532. package/dist/clients/resource-sampler.js +0 -628
  533. package/dist/clients/reverse-deps.js +0 -270
  534. package/dist/clients/review-graph/builder.js +0 -5126
  535. package/dist/clients/review-graph/format.js +0 -33
  536. package/dist/clients/review-graph/git-identity.js +0 -163
  537. package/dist/clients/review-graph/import-resolvers.js +0 -481
  538. package/dist/clients/review-graph/persist-worker.js +0 -10
  539. package/dist/clients/review-graph/query.js +0 -244
  540. package/dist/clients/review-graph/revision-drift.js +0 -21
  541. package/dist/clients/review-graph/service.js +0 -96
  542. package/dist/clients/review-graph/shared-extraction-ir.js +0 -82
  543. package/dist/clients/review-graph/symbol-id.js +0 -103
  544. package/dist/clients/review-graph/tsconfig-paths.js +0 -299
  545. package/dist/clients/review-graph/types.js +0 -1
  546. package/dist/clients/review-graph/workspace-modules.js +0 -449
  547. package/dist/clients/review-graph-logger.js +0 -81
  548. package/dist/clients/ruff-client.js +0 -179
  549. package/dist/clients/rules-scanner.js +0 -131
  550. package/dist/clients/run-duration.js +0 -55
  551. package/dist/clients/runtime-agent-end.js +0 -746
  552. package/dist/clients/runtime-config.js +0 -77
  553. package/dist/clients/runtime-context.js +0 -211
  554. package/dist/clients/runtime-coordinator.js +0 -1324
  555. package/dist/clients/runtime-session.js +0 -2485
  556. package/dist/clients/runtime-tool-call.js +0 -1295
  557. package/dist/clients/runtime-tool-result.js +0 -2049
  558. package/dist/clients/runtime-turn.js +0 -3767
  559. package/dist/clients/rust-client.js +0 -97
  560. package/dist/clients/safe-spawn.js +0 -2357
  561. package/dist/clients/sanitize.js +0 -286
  562. package/dist/clients/scan-utils.js +0 -25
  563. package/dist/clients/scratch-tree-policy.js +0 -165
  564. package/dist/clients/search-read-registration.js +0 -94
  565. package/dist/clients/secret-findings.js +0 -114
  566. package/dist/clients/security-scan-client.js +0 -352
  567. package/dist/clients/session-event-guard.js +0 -297
  568. package/dist/clients/session-lifecycle.js +0 -484
  569. package/dist/clients/session-start-observability.js +0 -94
  570. package/dist/clients/session-state-store.js +0 -101
  571. package/dist/clients/session-summary.js +0 -15
  572. package/dist/clients/sessionstart-logger.js +0 -27
  573. package/dist/clients/sg-runner.js +0 -876
  574. package/dist/clients/sgconfig.js +0 -347
  575. package/dist/clients/shared-checkout-guard.js +0 -338
  576. package/dist/clients/single-flight.js +0 -158
  577. package/dist/clients/situational-tool-telemetry.js +0 -108
  578. package/dist/clients/skills-resolver.js +0 -141
  579. package/dist/clients/slow-fs.js +0 -138
  580. package/dist/clients/smells-rollup.js +0 -231
  581. package/dist/clients/source-filter.js +0 -596
  582. package/dist/clients/source-walker.js +0 -211
  583. package/dist/clients/spawn-output-cap.js +0 -120
  584. package/dist/clients/spawn-timeout-cooldown.js +0 -110
  585. package/dist/clients/stale-marker.js +0 -17
  586. package/dist/clients/startup-scan.js +0 -400
  587. package/dist/clients/startup-timing.js +0 -130
  588. package/dist/clients/string-utils.js +0 -33
  589. package/dist/clients/subagent-mode.js +0 -111
  590. package/dist/clients/symbol-containment.js +0 -24
  591. package/dist/clients/symbol-types.js +0 -5
  592. package/dist/clients/test-runner-client.js +0 -2507
  593. package/dist/clients/test-runner-delivery.js +0 -287
  594. package/dist/clients/todo-scanner.js +0 -229
  595. package/dist/clients/tool-agreement.js +0 -423
  596. package/dist/clients/tool-config.js +0 -249
  597. package/dist/clients/tool-cwd.js +0 -270
  598. package/dist/clients/tool-definition.js +0 -47
  599. package/dist/clients/tool-event.js +0 -105
  600. package/dist/clients/tool-policy.js +0 -2755
  601. package/dist/clients/tool-probe.js +0 -53
  602. package/dist/clients/tool-render.js +0 -156
  603. package/dist/clients/tool-set-policy.js +0 -118
  604. package/dist/clients/tree-sitter-cache.js +0 -364
  605. package/dist/clients/tree-sitter-client.js +0 -4195
  606. package/dist/clients/tree-sitter-logger.js +0 -100
  607. package/dist/clients/tree-sitter-navigator.js +0 -269
  608. package/dist/clients/tree-sitter-query-loader.js +0 -569
  609. package/dist/clients/tree-sitter-shared.js +0 -158
  610. package/dist/clients/tree-sitter-symbol-extractor.js +0 -1265
  611. package/dist/clients/trivy-client.js +0 -467
  612. package/dist/clients/tui-fit.js +0 -50
  613. package/dist/clients/turn-context.js +0 -52
  614. package/dist/clients/turn-end/lane.js +0 -51
  615. package/dist/clients/turn-end/lanes/govulncheck.js +0 -112
  616. package/dist/clients/turn-end/lanes/secrets.js +0 -204
  617. package/dist/clients/turn-summary-render.js +0 -72
  618. package/dist/clients/turn-summary.js +0 -132
  619. package/dist/clients/typos-config.js +0 -29
  620. package/dist/clients/user-notify.js +0 -51
  621. package/dist/clients/vanished-instance-marker.js +0 -57
  622. package/dist/clients/warm-attach.js +0 -305
  623. package/dist/clients/widget-state.js +0 -1808
  624. package/dist/clients/word-index-logger.js +0 -49
  625. package/dist/clients/word-index-store.js +0 -459
  626. package/dist/clients/word-index.js +0 -2080
  627. package/dist/clients/workspace-topology.js +0 -443
  628. package/dist/clients/write-ordering-guard.js +0 -65
  629. package/dist/clients/zizmor-config.js +0 -340
  630. package/dist/i18n.js +0 -69
  631. package/dist/mcp/build-staleness.js +0 -124
  632. package/dist/scripts/lib/process-scan.mjs +0 -583
  633. package/dist/scripts/lib/skills-predicate.mjs +0 -129
  634. package/dist/scripts/lib/web-tree-sitter-dir.mjs +0 -123
  635. package/dist/tools/activate-tools.js +0 -87
  636. package/dist/tools/ast-grep-outline.js +0 -137
  637. package/dist/tools/ast-grep-replace.js +0 -244
  638. package/dist/tools/ast-grep-search.js +0 -762
  639. package/dist/tools/effective-config.js +0 -90
  640. package/dist/tools/lens-diagnostic-mark.js +0 -375
  641. package/dist/tools/lens-diagnostics.js +0 -2571
  642. package/dist/tools/lsp-diagnostics.js +0 -1745
  643. package/dist/tools/lsp-navigation.js +0 -1367
  644. package/dist/tools/lsp-structured-output.js +0 -294
  645. package/dist/tools/module-report.js +0 -382
  646. package/dist/tools/project-report.js +0 -86
  647. package/dist/tools/render-compact.js +0 -374
  648. package/dist/tools/scan-progress.js +0 -53
  649. package/dist/tools/shared.js +0 -29
  650. package/dist/tools/symbol-search.js +0 -155
@@ -1,85 +0,0 @@
1
- /**
2
- * Incumbent LSP wait-tier policy for attached sessions (#822).
3
- *
4
- * This policy is applied by the incumbent process on behalf of attached
5
- * sessions. Keep it free of session-local state: no imports from
6
- * runtime-session, runtime-turn, or warm-attach.
7
- */
8
- import { getServersForFileWithConfig } from "../config.js";
9
- import { getStrategy } from "./strategies.js";
10
- /**
11
- * Classify a SINGLE server (by id, given its live capability snapshot — or
12
- * `undefined` when none exists yet) as cascade-lane Tier-3 (push-only,
13
- * silent-on-clean) or not. This is the per-server primitive both
14
- * `classifyCascadeWaitTier` (file's PRIMARY server only, the cascade lane's
15
- * original use) and #814's capability-aware AGGREGATE wait (`touchFile`'s
16
- * `clientScope: "all"` path, `clients/lsp/index.ts`) share — one
17
- * classification rule, not two copies that could drift. Ambiguous or missing
18
- * capability data is always `"waits"` (today's behavior) — this function must
19
- * never be the reason a real answer gets missed.
20
- */
21
- export function classifyServerWaitTier(serverId, snapshot) {
22
- if (!snapshot)
23
- return "waits"; // no live snapshot yet — fail-safe
24
- const mode = snapshot.workspaceDiagnosticsSupport?.mode;
25
- if (mode === "pull")
26
- return "pull-capable";
27
- if (snapshot.customServer === true &&
28
- mode === "push-only" &&
29
- snapshot.diagnosticsUnsupported === true &&
30
- snapshot.diagnosticsPublished !== true) {
31
- return "diagnostics-unsupported";
32
- }
33
- if (mode !== "push-only")
34
- return "waits";
35
- const strategy = getStrategy(serverId, snapshot.launchVariant);
36
- if (strategy.silentOnClean !== true)
37
- return "waits"; // 2*/unknown push-only
38
- // #524/#529/#541/#558: `silentOnClean` on a server-id-keyed strategy is
39
- // only proven against the variant it was actually measured against.
40
- // "typescript" today means either classic typescript-language-server
41
- // (confirmed silent-on-clean, 2026-07-12 dual-environment re-measurement)
42
- // or TS7's native `tsc --lsp --stdio` (the SAME re-measurement found it
43
- // publishes 2 version-less diagnostic sets on clean — NOT silent, a
44
- // drift from the earlier #541 measurement). A native-ts7 snapshot must
45
- // NOT inherit the classic verdict: fall through to "waits", the same
46
- // ambiguous/fail-safe path an unmarked or non-push-only server already
47
- // takes. `launchVariant === "classic"` or absent (older snapshots that
48
- // predate the marker) keeps today's tier-3 behavior exactly.
49
- if (snapshot.launchVariant === "native-ts7")
50
- return "waits";
51
- return "tier3-silent";
52
- }
53
- /**
54
- * Resolve `filePath`'s PRIMARY (non-auxiliary) server id and its live
55
- * capability snapshot, or `undefined` when the file has no primary server
56
- * configured. The single place that decides what "this file's server" means
57
- * for wait-policy purposes — shared by {@link classifyCascadeWaitTier} and the
58
- * cascade-lane wrapper in `clients/lsp/cascade-tier.ts`, which needs the same
59
- * id/snapshot pair to apply its one cascade-only override.
60
- */
61
- export function resolvePrimaryServerForWaitPolicy(filePath, snapshots) {
62
- const servers = getServersForFileWithConfig(filePath).filter((s) => s.role !== "auxiliary");
63
- const primary = servers[0];
64
- if (!primary)
65
- return undefined;
66
- return {
67
- serverId: primary.id,
68
- snapshot: snapshots.find((s) => s.serverId === primary.id),
69
- };
70
- }
71
- /**
72
- * Classify whether `filePath`'s PRIMARY language server is a cascade-lane
73
- * Tier-3 (push-only, silent-on-clean) server. Ambiguous or missing capability
74
- * data is always `"waits"` (today's behavior) — this function must never be
75
- * the reason a real answer gets missed. Thin wrapper over
76
- * `classifyServerWaitTier` — resolves the file's primary server id/snapshot,
77
- * then defers to the shared per-server rule.
78
- */
79
- export function classifyCascadeWaitTier(lspService, filePath, snapshots) {
80
- void lspService; // kept in the signature for call-site clarity/typing only
81
- const primary = resolvePrimaryServerForWaitPolicy(filePath, snapshots);
82
- if (!primary)
83
- return "waits";
84
- return classifyServerWaitTier(primary.serverId, primary.snapshot);
85
- }
@@ -1,10 +0,0 @@
1
- /**
2
- * Incumbent-owned LSP wait policy and capability inventory boundary (#822).
3
- *
4
- * The incumbent applies this policy when it serves attached sessions. Keep
5
- * this boundary process-neutral and free of session-local state: do not import
6
- * runtime-session, runtime-turn, or warm-attach here.
7
- */
8
- export * from "./capability-snapshot.js";
9
- export * from "./classification.js";
10
- export * from "./strategies.js";
@@ -1,392 +0,0 @@
1
- /**
2
- * Incumbent LSP wait policy for attached sessions (#822).
3
- *
4
- * The incumbent process applies this policy on behalf of every attached
5
- * session. Keep this module free of session-local state: it must not import
6
- * runtime-session, runtime-turn, or warm-attach.
7
- *
8
- * Per-Server Diagnostic Strategies for pi-lens LSP
9
- *
10
- * Codifies known server behavior so timing decisions (debounce, retry budget,
11
- * first-push seeding) are automatic rather than one-size-fits-all.
12
- *
13
- * Env var overrides (PI_LENS_LSP_*) always take precedence over strategy values.
14
- */
15
- import { createRequire } from "node:module";
16
- const _require = createRequire(import.meta.url);
17
- /**
18
- * Platform/arch → `@ast-grep/cli-<platform>-<arch>[-msvc|-gnu]` native
19
- * package name, mirroring @ast-grep/cli's own `optionalDependencies` matrix
20
- * (checked directly against node_modules/@ast-grep/cli/package.json). Each
21
- * package ships the native `ast-grep`/`ast-grep.exe` binary at its package
22
- * root (no `bin/` subdir) — see node_modules/@ast-grep/cli-win32-x64-msvc/.
23
- */
24
- function astGrepNativePackageName(platform, arch) {
25
- switch (platform) {
26
- case "win32":
27
- if (arch === "x64")
28
- return "@ast-grep/cli-win32-x64-msvc";
29
- if (arch === "arm64")
30
- return "@ast-grep/cli-win32-arm64-msvc";
31
- if (arch === "ia32")
32
- return "@ast-grep/cli-win32-ia32-msvc";
33
- return undefined;
34
- case "darwin":
35
- if (arch === "arm64")
36
- return "@ast-grep/cli-darwin-arm64";
37
- if (arch === "x64")
38
- return "@ast-grep/cli-darwin-x64";
39
- return undefined;
40
- case "linux":
41
- if (arch === "x64")
42
- return "@ast-grep/cli-linux-x64-gnu";
43
- if (arch === "arm64")
44
- return "@ast-grep/cli-linux-arm64-gnu";
45
- return undefined;
46
- default:
47
- return undefined;
48
- }
49
- }
50
- /**
51
- * Resolve ast-grep's platform-native exe DIRECTLY, skipping the node-bin
52
- * wrapper (`ast-grep.cmd`/shim → node → cli.js → spawn native exe). One less
53
- * orphanable process layer (#472): a wrapper's direct child is the node/cmd
54
- * process, so on abnormal exit the actual ast-grep binary is a grandchild the
55
- * #234 teardown path never reaches — resolving straight to the native exe
56
- * means the LSP's direct child IS the real server.
57
- *
58
- * `require.resolve` is wrapped in try/catch (ESM-safe via createRequire, same
59
- * pattern as clients/deps/ast-grep-napi.ts) — returns undefined so the caller
60
- * falls back to the existing wrapper-based resolution when the platform
61
- * package isn't installed (it's an optionalDependency; native builds can be
62
- * absent on unsupported platforms/arches or a partial install).
63
- */
64
- export function resolveAstGrepNativeExe(platform = process.platform, arch = process.arch) {
65
- const pkgName = astGrepNativePackageName(platform, arch);
66
- if (!pkgName)
67
- return undefined;
68
- const binaryName = platform === "win32" ? "ast-grep.exe" : "ast-grep";
69
- try {
70
- return _require.resolve(`${pkgName}/${binaryName}`);
71
- }
72
- catch {
73
- return undefined;
74
- }
75
- }
76
- /** @public — loaded by scripts/probe-clean-signal.mjs through a dynamic import wrapper knip cannot see. */
77
- export const SERVER_DIAGNOSTIC_STRATEGIES = {
78
- typescript: {
79
- seedFirstPush: true,
80
- pullRetryBudgetMs: 0,
81
- debounceMs: 50,
82
- aggregateWaitMs: 1000,
83
- expectSemanticSecondPush: false,
84
- // Tier 3 (#458): typescript-language-server publishes nothing on a
85
- // clean→clean edit (docs/lsp-capability-matrix.md, re-confirmed
86
- // 2026-07-12). It's the lone core-set tier-3 server, which is exactly
87
- // why the cascade lane's in-lane wait is worth skipping for it
88
- // specifically. Applies to the CLASSIC server only (#524/#529/#558)
89
- // — TS7's native `tsc --lsp --stdio` variant shares this
90
- // "typescript" server id but the 2026-07-12 dual-environment
91
- // re-measurement found it now publishes on clean (a drift from the
92
- // #541 measurement); wait-policy/classification.ts's classifier checks the live
93
- // snapshot's launchVariant and never applies this flag to a
94
- // native-ts7 instance.
95
- silentOnClean: true,
96
- },
97
- "rust-analyzer": {
98
- seedFirstPush: false,
99
- pullRetryBudgetMs: 500,
100
- debounceMs: 150,
101
- aggregateWaitMs: 3000,
102
- expectSemanticSecondPush: true,
103
- },
104
- // PythonServer (pyright / basedpyright) — openFilesOnly mode: lazy per-file
105
- // analysis, startup similar to jedi. seedFirstPush: true because pyright's
106
- // first publishDiagnostics after didOpen is the complete result for that file.
107
- python: {
108
- seedFirstPush: true,
109
- pullRetryBudgetMs: 0,
110
- debounceMs: 100,
111
- aggregateWaitMs: 1500,
112
- expectSemanticSecondPush: false,
113
- },
114
- // jedi-language-server is push-only (no pull diagnostics) and its FIRST
115
- // publishDiagnostics is the complete result (seedFirstPush). But that first
116
- // push lands just after didOpen+~1s on cold start (Python/parso import) —
117
- // measured ~1011ms — so a 1000ms aggregate budget misses it by a hair and
118
- // returns zero. 3000ms gives cold-start headroom without stalling the warm path.
119
- "python-jedi": {
120
- seedFirstPush: true,
121
- pullRetryBudgetMs: 0,
122
- debounceMs: 100,
123
- aggregateWaitMs: 3000,
124
- expectSemanticSecondPush: false,
125
- },
126
- eslint: {
127
- seedFirstPush: true,
128
- pullRetryBudgetMs: 0,
129
- debounceMs: 200,
130
- aggregateWaitMs: 2000,
131
- expectSemanticSecondPush: false,
132
- },
133
- // Opengrep security scanner (cross-language LSP). It pushes an EMPTY result
134
- // during the one-time rule-load window at startup, then the real scan after
135
- // `semgrep/rulesRefreshed` — so never seed the first push. Push-only (no pull
136
- // diagnostics). Warm per-file scan ~1.3s; the first touch in a session may
137
- // also pay rule-load (~3.5s cold). aggregateWaitMs is 3500: it's this
138
- // server's OWN deadline, bounded by the per-edit caller cap as a ceiling
139
- // (#242), so on a 2500ms-capped edit opengrep waits min(2500, 3500)=2500
140
- // and on uncapped paths it gets its full 3500. 3500 covers warm and most
141
- // cold; a cold scan that overruns isn't lost — late diagnostics are cached
142
- // and surface on the next unchanged-content read through the content-bound
143
- // auxiliary carry-over path.
144
- opengrep: {
145
- seedFirstPush: false,
146
- pullRetryBudgetMs: 0,
147
- debounceMs: 250,
148
- aggregateWaitMs: 3500,
149
- expectSemanticSecondPush: false,
150
- // Opengrep re-scans only on a fresh didOpen — didChange is a no-op for it.
151
- reopenOnResync: true,
152
- },
153
- // ast-grep structural linter (sgconfig-gated auxiliary LSP). Push-only,
154
- // compiles the project rules on the first scan of a session, and — like
155
- // Opengrep — is re-synced via didClose+didOpen so edits trigger a re-scan.
156
- // Conservative budget until measured against real projects (#239).
157
- // ast-grep re-scans on didChange (verified: toggling the violation count
158
- // 3→1→4→2 returns the correct fresh count each touch, with matching doc
159
- // versions), so reopen isn't needed and didChange is the lighter path.
160
- // aggregateWaitMs is 1800: its warm scan is ~1.3s, so 1000 was under-budgeted
161
- // (only masked before because the old with-auxiliary deadline was a global
162
- // max() floor; now each server has its own caller-cap-bounded deadline, #242,
163
- // so the budget must actually cover the scan).
164
- "ast-grep": {
165
- seedFirstPush: false,
166
- pullRetryBudgetMs: 0,
167
- debounceMs: 150,
168
- aggregateWaitMs: 1800,
169
- expectSemanticSecondPush: false,
170
- reopenOnResync: false,
171
- },
172
- // zizmor (GitHub Actions security scanner, auxiliary LSP #272). Push-only
173
- // (no pull diagnostics). Its audit set is compiled-in — there's no rule-load
174
- // window like Opengrep — so the FIRST publishDiagnostics after didOpen IS the
175
- // complete result: seedFirstPush. It re-scans on didChange (FULL sync), so no
176
- // reopen-on-resync. A native single-workflow audit is sub-second offline;
177
- // online mode may add a GitHub-API round-trip, so 2000ms gives headroom
178
- // (bounded by the per-edit caller cap as a ceiling, #242), and any late online
179
- // finding can surface on the next unchanged-content read through the
180
- // content-bound auxiliary carry-over path.
181
- zizmor: {
182
- seedFirstPush: true,
183
- pullRetryBudgetMs: 0,
184
- debounceMs: 150,
185
- aggregateWaitMs: 2000,
186
- expectSemanticSecondPush: false,
187
- reopenOnResync: false,
188
- },
189
- // typos (source-code spell checker, auxiliary LSP #283). Push-only (no pull
190
- // diagnostics). Its dictionary is compiled in — there's NO rule-load window
191
- // like Opengrep — so the FIRST publishDiagnostics after didOpen IS the
192
- // complete result: seedFirstPush. It re-scans on didChange (FULL sync), so no
193
- // reopen-on-resync. A native single-file spell scan is sub-100ms, so the seed
194
- // arrives near-instantly; aggregateWaitMs is a generous ceiling (bounded by
195
- // the per-edit caller cap, #242) that the early seed resolves well under.
196
- typos: {
197
- seedFirstPush: true,
198
- pullRetryBudgetMs: 0,
199
- debounceMs: 150,
200
- aggregateWaitMs: 1500,
201
- expectSemanticSecondPush: false,
202
- reopenOnResync: false,
203
- },
204
- // marksman (Markdown LSP, #274). Push-based; native binary so the per-file
205
- // parse is fast, but its value is CROSS-file (broken intra-repo links,
206
- // missing anchors/heading refs) which needs the workspace index — so the
207
- // first push after didOpen can be empty before indexing completes. Don't
208
- // seed it (like opengrep/rust-analyzer); a modest 1500ms aggregate covers
209
- // warm edits, and any late cross-file finding surfaces on the next touch.
210
- marksman: {
211
- seedFirstPush: false,
212
- pullRetryBudgetMs: 0,
213
- debounceMs: 150,
214
- aggregateWaitMs: 1500,
215
- expectSemanticSecondPush: false,
216
- // #645: a full-tree sweep opens every markdown file, all racing the
217
- // SAME one-time workspace index build — pay the 1500ms budget once
218
- // per sweep (the first markdown file touched), not once per file.
219
- // 250ms covers a warm per-file publish (native binary, fast parse)
220
- // once the index has already had a full aggregateWaitMs window.
221
- workspaceIndexing: true,
222
- workspaceIndexingWarmWaitMs: 250,
223
- // #799 / run 35914033696: marksman is push-only and publishes NOTHING on
224
- // a clean transition — there is no pull fallback and no sync-confirm protocol (unlike
225
- // typescript's tsserver commands), so a clean markdown file's touch
226
- // waits its full budget with zero signal either way. Marking it
227
- // `silentOnClean` lets the generic push-only clean-confirm gate
228
- // (`touchFile`, the `classifyCascadeWaitTier`-driven fallback next to
229
- // the tsserver sync-confirm block) treat "no publish within budget,
230
- // notify succeeded" as CONFIRMED clean instead of inconclusive/timed
231
- // out — closing the observed 2x20s-per-sweep burn on clean markdown
232
- // (evidence: agents.md timed out at 20009ms/20014ms on both the
233
- // warm-up attempt and its retry, with zero diagnostics either time).
234
- silentOnClean: true,
235
- },
236
- // cue lsp serve (#1522, #1519, #1520). Measured directly against the real
237
- // v0.17.1 binary (`getWorkspaceDiagnosticsSupport` reports
238
- // `mode: "push-only"`; no pull support advertised).
239
- //
240
- // It reports load/parse (syntax) errors as you type, but leaves
241
- // conflicting-value/constraint-failure (evaluation) errors to `cue vet`
242
- // — the #1522 cue-vet auxiliary runner covers that gap. So the syntax
243
- // diagnostics this strategy governs are a REAL but PARTIAL signal, not
244
- // full CUE validation.
245
- //
246
- // The repaired clean-signal probe measured cue as publishing a versioned
247
- // clean-transition set (run 35914033696), so this marker stays absent:
248
- // the cascade must retain its normal early-publish path.
249
- //
250
- // seedFirstPush: true — the one cold-open case that DOES publish (a
251
- // file that is already broken) sends the complete single diagnostic on
252
- // its first push; there is no observed partial-then-complete sequence to
253
- // wait out.
254
- //
255
- // aggregateWaitMs: 2000 covers the measured warm edit-to-publish latency
256
- // (~930ms, syntax reparse) with margin; a cold spawn's first push (~2.1s
257
- // end-to-end including process start) is bounded separately by
258
- // maxClientWaitMs, not this per-diagnostics budget.
259
- // intelephense (php, #3310). Measured directly against the real v1.18.5
260
- // binary over a raw JSON-RPC session answering `workspace/configuration`
261
- // the way pi-lens does (2026-09-23, linux):
262
- //
263
- // +284ms initialize response — NO diagnosticProvider (push-only)
264
- // +295ms publishDiagnostics diags=0 version=undefined <- pre-index
265
- // +301ms indexingStarted
266
- // +689ms indexingEnded
267
- // +696ms publishDiagnostics diags=2 version=undefined <- the answer
268
- //
269
- // so `emptyFirstPublish: "indexing"`: the first publish is an artifact of
270
- // the cold index, not an answer. The same session on a genuinely CLEAN
271
- // file publishes `[]` at +304ms and `[]` AGAIN at +663ms (right after
272
- // `indexingEnded`), which is what lets the held publish be released by
273
- // the server's own second publish instead of by a timer — and a WARM
274
- // touch (a second file, index already built) publishes the real set
275
- // FIRST at +5ms, so the hold costs nothing once the session is warm.
276
- //
277
- // seedFirstPush: false — the measurement above is the direct refutation
278
- // of "the first push is complete" for this server.
279
- // pullRetryBudgetMs: 0 — no pull provider is advertised at all.
280
- // aggregateWaitMs: 8000 — the budget must cover the cold index window,
281
- // which is what the second (real) publish waits on: ~0.4s for a 139-file
282
- // index on the dev box, ~5s on the nightly ubuntu runner (#3217's
283
- // transcript). Per-edit callers cap this as a CEILING (#242), so an
284
- // interactive edit still waits only its own cap; the uncapped paths (the
285
- // tool-smoke LSP gate, which itself caps at 8000ms) get the full budget,
286
- // and the cold index is paid once per session, not once per touch.
287
- php: {
288
- seedFirstPush: false,
289
- pullRetryBudgetMs: 0,
290
- debounceMs: 150,
291
- aggregateWaitMs: 8000,
292
- expectSemanticSecondPush: false,
293
- emptyFirstPublish: "indexing",
294
- },
295
- // Svelte's pull diagnostics settle after the default 1500ms budget on a
296
- // cold server. The tool-smoke gate caps waits at 8000ms, so give this
297
- // server enough aggregate budget to return its seeded findings (#3311).
298
- svelte: {
299
- seedFirstPush: false,
300
- pullRetryBudgetMs: 0,
301
- debounceMs: 150,
302
- aggregateWaitMs: 4000,
303
- expectSemanticSecondPush: false,
304
- },
305
- // csharp-ls loads (design-time-builds) the restored project AFTER
306
- // `initialize` returns, so the publish for a seeded CS0029 lands inside
307
- // `waitForDiagnostics`, not inside the client wait. MEASURED A/B over two
308
- // nightly Tool-smoke runs of the same fixture with `dotnet restore` already
309
- // done — the ONLY difference between them was this budget:
310
- // * `aggregateWaitMs` 1500 (the default): run 36054901266 →
311
- // `[csharp] touched=0`, 4.05s after `Restored …/toolsmoke.csproj`.
312
- // A real compiler error read as clean.
313
- // * 8000: run 36058292424 → `[csharp] touched=1`, 6.49s after the same
314
- // line; gate run 36059988117 → `lsp_diagnostics returned 1 primary
315
- // finding`, 4.86s after it.
316
- // Both windows INCLUDE workspace bootstrap + spawn + initialize, so they
317
- // bound the wait from above: the required budget is in (1500, 4860] ms.
318
- // 6000 covers the measured gate window with margin and stays under the
319
- // tool-smoke gate's own 8000ms ceiling (that relation is pinned by
320
- // tests/config/lsp-gate-population.test.ts), so the gate can still witness
321
- // this budget. CONFIRMED at 6000 by run 36064829436: `✓ csharp csharp-ls 1
322
- // lsp_diagnostics returned 1 primary finding`, 4.78s after `Restored
323
- // …csproj`, census unchanged at gated 31 / handshake-only 8 / unavailable 6
324
- // — so 6000 is measured as sufficient, not merely inferred from the 8000
325
- // runs above. It is deliberately NOT the ceiling: an `lsp_diagnostics` call
326
- // that passes no `waitMs` pays this budget in full on a file the server never
327
- // publishes for (`tools/lsp-diagnostics.ts` leaves `maxClientWaitMs`
328
- // undefined → `perServerTimeout` has no caller cap), so every 1000ms here
329
- // is 1000ms of turn latency on the no-publication path (#3402 review r2).
330
- // Every other field is DEFAULT_STRATEGY's value on purpose: csharp-ls is
331
- // `mode=pull`/tier-1 authoritative-clean (#3311 investigator table), and
332
- // nothing has measured its pull retry, so this entry moves the one field
333
- // that was measured and no other (pinned in
334
- // tests/clients/lsp/server-strategies.test.ts).
335
- // fsharp/expert/vue deliberately have NO entry: the same two runs show
336
- // `touched=0` at BOTH 1500 and 8000, so the budget is not what stops them
337
- // publishing and an 8000 entry would buy nothing while costing every
338
- // uncapped production call 6.5 extra seconds. Their fixture rows carry the
339
- // observed-behavior exemption instead (`scripts/smoke-tools.mjs`), and a
340
- // probe that wants a long window sets `PI_LENS_LSP_DIAGNOSTICS_MAX_WAIT_MS`
341
- // — a flat harness override that needs no production budget.
342
- csharp: {
343
- seedFirstPush: false,
344
- pullRetryBudgetMs: 250,
345
- debounceMs: 150,
346
- aggregateWaitMs: 6000,
347
- expectSemanticSecondPush: false,
348
- },
349
- cue: {
350
- seedFirstPush: true,
351
- pullRetryBudgetMs: 0,
352
- debounceMs: 150,
353
- aggregateWaitMs: 2000,
354
- expectSemanticSecondPush: false,
355
- reopenOnResync: false,
356
- },
357
- // lua-language-server is push-only and was silent on clean transitions in
358
- // the repaired probe (run 35914033696). Keep the marker on the measured
359
- // server id so the cascade can skip its in-lane wait safely.
360
- lua: {
361
- seedFirstPush: true,
362
- pullRetryBudgetMs: 0,
363
- debounceMs: 150,
364
- aggregateWaitMs: 2000,
365
- expectSemanticSecondPush: false,
366
- silentOnClean: true,
367
- },
368
- };
369
- /** Native TS7 can publish multiple versionless partial-program snapshots for a
370
- * single open. Its first push is therefore provisional; a quiet window, rather
371
- * than a protocol-unstable publication count, establishes the settled push. */
372
- const NATIVE_TS7_DIAGNOSTIC_STRATEGY = {
373
- ...SERVER_DIAGNOSTIC_STRATEGIES.typescript,
374
- seedFirstPush: false,
375
- // Native TS7 demonstrably publishes on clean, so the classic-only marker
376
- // must not leak through the shared server id.
377
- silentOnClean: false,
378
- };
379
- /** Fallback for unknown servers. Conservative defaults. */
380
- const DEFAULT_STRATEGY = {
381
- seedFirstPush: false,
382
- pullRetryBudgetMs: 250,
383
- debounceMs: 150,
384
- aggregateWaitMs: 1500,
385
- expectSemanticSecondPush: false,
386
- };
387
- export function getStrategy(serverId, launchVariant) {
388
- if (serverId === "typescript" && launchVariant === "native-ts7") {
389
- return NATIVE_TS7_DIAGNOSTIC_STRATEGY;
390
- }
391
- return SERVER_DIAGNOSTIC_STRATEGIES[serverId] ?? DEFAULT_STRATEGY;
392
- }
@@ -1,61 +0,0 @@
1
- /**
2
- * Debounced `workspace/didChangeWatchedFiles` batching (#271).
3
- *
4
- * `handleNotifyOpen` previously sent one `workspace/didChangeWatchedFiles` per
5
- * file as each was opened. Many servers (TypeScript, …) kick off a project-wide
6
- * re-analysis on every such notification, so a turn that edits N files in one
7
- * project triggered ~N full re-analyses. This per-client queue coalesces the
8
- * changes within a short window and flushes them as a SINGLE notification, so the
9
- * server re-indexes once per burst instead of once per file.
10
- *
11
- * One queue lives per LSP client (= per serverId+root), so batching is naturally
12
- * scoped to a single server/project. Worst-case added latency before the server
13
- * learns of a change is the debounce window — negligible against the multi-second
14
- * re-analysis it gates.
15
- */
16
- export const WATCH_DEBOUNCE_MS = 100;
17
- export class WatchedFilesQueue {
18
- flushFn;
19
- debounceMs;
20
- // uri → latest FileChangeType. A Map collapses repeated events for the same
21
- // URI (last-type-wins) while preserving first-seen insertion order.
22
- pending = new Map();
23
- timer = null;
24
- constructor(flushFn, debounceMs = WATCH_DEBOUNCE_MS) {
25
- this.flushFn = flushFn;
26
- this.debounceMs = debounceMs;
27
- }
28
- /** Queue a change; arms the debounce timer if not already pending. */
29
- enqueue(uri, type) {
30
- this.pending.set(uri, type);
31
- if (this.timer)
32
- return;
33
- this.timer = setTimeout(() => this.flush(), this.debounceMs);
34
- // Never hold the event loop open for a pending watched-files flush.
35
- this.timer.unref?.();
36
- }
37
- /** Emit all queued changes as one notification (no-op when empty). */
38
- flush() {
39
- if (this.timer) {
40
- clearTimeout(this.timer);
41
- this.timer = null;
42
- }
43
- if (this.pending.size === 0)
44
- return;
45
- const changes = [...this.pending.entries()].map(([uri, type]) => ({ uri, type }));
46
- this.pending.clear();
47
- this.flushFn(changes);
48
- }
49
- /** Drop the timer + any queued changes without emitting (client teardown). */
50
- cancel() {
51
- if (this.timer) {
52
- clearTimeout(this.timer);
53
- this.timer = null;
54
- }
55
- this.pending.clear();
56
- }
57
- /** Number of distinct URIs currently queued (for tests/introspection). */
58
- get size() {
59
- return this.pending.size;
60
- }
61
- }