@herbertgao/pi-extensions 2026.10.1 → 2026.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (707) hide show
  1. package/README.md +13 -9
  2. package/THIRD_PARTY_NOTICES.md +2 -2
  3. package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-audit.md +2 -2
  4. package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-debt.md +2 -2
  5. package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-gain.md +1 -1
  6. package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-help.md +1 -1
  7. package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-review.md +2 -2
  8. package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail.md +1 -1
  9. package/node_modules/@dietrichgebert/ponytail/.qoder/rules/ponytail.md +21 -21
  10. package/node_modules/@dietrichgebert/ponytail/.qoder-plugin/plugin.json +1 -1
  11. package/node_modules/@dietrichgebert/ponytail/AGENTS.md +21 -21
  12. package/node_modules/@dietrichgebert/ponytail/README.md +68 -72
  13. package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-activate.js +7 -0
  14. package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-instructions.js +30 -30
  15. package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-map.js +103 -0
  16. package/node_modules/@dietrichgebert/ponytail/package.json +2 -2
  17. package/node_modules/@dietrichgebert/ponytail/skills/ponytail/SKILL.md +33 -101
  18. package/node_modules/@dietrichgebert/ponytail/skills/ponytail-audit/SKILL.md +89 -32
  19. package/node_modules/@dietrichgebert/ponytail/skills/ponytail-debt/SKILL.md +13 -12
  20. package/node_modules/@dietrichgebert/ponytail/skills/ponytail-gain/SKILL.md +17 -16
  21. package/node_modules/@dietrichgebert/ponytail/skills/ponytail-help/SKILL.md +9 -10
  22. package/node_modules/@dietrichgebert/ponytail/skills/ponytail-review/SKILL.md +96 -57
  23. package/node_modules/@herbertgao/pi-agency/LICENSE +21 -0
  24. package/node_modules/@herbertgao/pi-agency/README.md +40 -0
  25. package/node_modules/@herbertgao/pi-agency/package.json +53 -0
  26. package/node_modules/@herbertgao/pi-agency/src/index.ts +441 -0
  27. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/compact-thinking.ts +12 -12
  28. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/compact-mode.ts +30 -6
  29. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/default-mode.ts +15 -9
  30. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/interaction.ts +27 -9
  31. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/codemode.ts +4 -1
  32. package/node_modules/@herbertgao/pi-cc-extensions/package.json +2 -2
  33. package/node_modules/@narumitw/pi-caffeinate/package.json +3 -3
  34. package/node_modules/@tifan/pi-mermaid-open/package.json +5 -1
  35. package/node_modules/@tifan/pi-mermaid-open/src/index.ts +26 -9
  36. package/node_modules/@tifan/pi-recap/package.json +1 -1
  37. package/node_modules/@tifan/pi-recap/src/index.ts +104 -20
  38. package/node_modules/@tifan/pi-recap/src/models.ts +46 -4
  39. package/node_modules/pi-antigravity/README.md +23 -2
  40. package/node_modules/pi-antigravity/package.json +5 -3
  41. package/node_modules/pi-antigravity/src/diagnostics/diagnostics.ts +3 -2
  42. package/node_modules/pi-antigravity/src/features/generate-image.ts +72 -0
  43. package/node_modules/pi-antigravity/src/features/google-search.ts +71 -0
  44. package/node_modules/pi-antigravity/src/image/image.ts +86 -47
  45. package/node_modules/pi-antigravity/src/image/native.ts +69 -0
  46. package/node_modules/pi-antigravity/src/index.ts +52 -137
  47. package/node_modules/pi-antigravity/src/search/search.ts +130 -31
  48. package/node_modules/pi-antigravity/src/stream/stream.ts +162 -113
  49. package/node_modules/pi-antigravity/src/types/enums.ts +1 -0
  50. package/node_modules/pi-antigravity/src/types/types.ts +1 -1
  51. package/node_modules/pi-antigravity/src/utils/security.ts +47 -1
  52. package/node_modules/pi-antigravity/src/utils/util.ts +38 -6
  53. package/node_modules/pi-lens/CHANGELOG.md +1064 -0
  54. package/node_modules/pi-lens/README.md +115 -25
  55. package/node_modules/pi-lens/config/dependency-cruiser-eager-allowlist.json +6 -2
  56. package/node_modules/pi-lens/dist/chunk-22AVIGXS.js +560 -0
  57. package/node_modules/pi-lens/dist/chunk-27BBHSZC.js +106 -0
  58. package/node_modules/pi-lens/dist/chunk-2BEMIWEW.js +51 -0
  59. package/node_modules/pi-lens/dist/chunk-2EECBNC5.js +89 -0
  60. package/node_modules/pi-lens/dist/chunk-34U7PLGE.js +23 -0
  61. package/node_modules/pi-lens/dist/chunk-3I5QFT3N.js +181 -0
  62. package/node_modules/pi-lens/dist/chunk-3MED75HT.js +37 -0
  63. package/node_modules/pi-lens/dist/chunk-47D2BO4S.js +87 -0
  64. package/node_modules/pi-lens/dist/chunk-4RERDEXR.js +348 -0
  65. package/node_modules/pi-lens/dist/chunk-4W2PLC4J.js +27 -0
  66. package/node_modules/pi-lens/dist/chunk-52H5B5TC.js +202 -0
  67. package/node_modules/pi-lens/dist/chunk-54B42YRX.js +27 -0
  68. package/node_modules/pi-lens/dist/chunk-5RXBNSW2.js +266 -0
  69. package/node_modules/pi-lens/dist/chunk-5THXD6X5.js +201 -0
  70. package/node_modules/pi-lens/dist/chunk-5W3R6LFT.js +24 -0
  71. package/node_modules/pi-lens/dist/chunk-5ZEJHV35.js +341 -0
  72. package/node_modules/pi-lens/dist/chunk-6P62QVEA.js +118 -0
  73. package/node_modules/pi-lens/dist/chunk-6QIUX4EP.js +459 -0
  74. package/node_modules/pi-lens/dist/chunk-6VCD4VKZ.js +78 -0
  75. package/node_modules/pi-lens/dist/chunk-7F72PXY2.js +326 -0
  76. package/node_modules/pi-lens/dist/chunk-7FBF7NPR.js +998 -0
  77. package/node_modules/pi-lens/dist/chunk-7U2IDNXN.js +37 -0
  78. package/node_modules/pi-lens/dist/chunk-ABBOA7UD.js +157 -0
  79. package/node_modules/pi-lens/dist/chunk-AHDW3GPE.js +50 -0
  80. package/node_modules/pi-lens/dist/chunk-AJ3QXTRQ.js +756 -0
  81. package/node_modules/pi-lens/dist/chunk-AJVLWNFN.js +1610 -0
  82. package/node_modules/pi-lens/dist/chunk-AJXODZY6.js +112 -0
  83. package/node_modules/pi-lens/dist/chunk-ARFCXG7S.js +84 -0
  84. package/node_modules/pi-lens/dist/chunk-AS44CFQ4.js +708 -0
  85. package/node_modules/pi-lens/dist/chunk-AWE5TMPO.js +38 -0
  86. package/node_modules/pi-lens/dist/chunk-B3I2UUT4.js +4692 -0
  87. package/node_modules/pi-lens/dist/chunk-BRJKOBZP.js +331 -0
  88. package/node_modules/pi-lens/dist/chunk-BW5KFIQC.js +59 -0
  89. package/node_modules/pi-lens/dist/chunk-C2AUYXQH.js +149 -0
  90. package/node_modules/pi-lens/dist/chunk-CGGAIP7J.js +29 -0
  91. package/node_modules/pi-lens/dist/chunk-D6QS3U6M.js +30 -0
  92. package/node_modules/pi-lens/dist/chunk-DFVMIKMQ.js +349 -0
  93. package/node_modules/pi-lens/dist/chunk-DIULIWKU.js +169 -0
  94. package/node_modules/pi-lens/dist/chunk-DQ2NZ7C4.js +2317 -0
  95. package/node_modules/pi-lens/dist/chunk-E2WFBRHM.js +213 -0
  96. package/node_modules/pi-lens/dist/chunk-E4MAEDPM.js +50 -0
  97. package/node_modules/pi-lens/dist/chunk-EOKRQ3SA.js +30 -0
  98. package/node_modules/pi-lens/dist/chunk-F3AU2TMM.js +2626 -0
  99. package/node_modules/pi-lens/dist/chunk-F3P7VQ7H.js +170 -0
  100. package/node_modules/pi-lens/dist/chunk-FC4RP4I2.js +12 -0
  101. package/node_modules/pi-lens/dist/chunk-FJNKANOS.js +32 -0
  102. package/node_modules/pi-lens/dist/chunk-GUOGVTCQ.js +146 -0
  103. package/node_modules/pi-lens/dist/chunk-GVXA6CCE.js +18 -0
  104. package/node_modules/pi-lens/dist/chunk-HHYAELLJ.js +2334 -0
  105. package/node_modules/pi-lens/dist/chunk-HMFXILPV.js +83 -0
  106. package/node_modules/pi-lens/dist/chunk-HVUZXSWK.js +421 -0
  107. package/node_modules/pi-lens/dist/chunk-HWBZIGMJ.js +62 -0
  108. package/node_modules/pi-lens/dist/chunk-I3R7GKDR.js +17 -0
  109. package/node_modules/pi-lens/dist/chunk-I7SPGOWI.js +55 -0
  110. package/node_modules/pi-lens/dist/chunk-IIXOAGHR.js +38 -0
  111. package/node_modules/pi-lens/dist/chunk-IVP5KAB7.js +2250 -0
  112. package/node_modules/pi-lens/dist/chunk-IXEBJSUE.js +22 -0
  113. package/node_modules/pi-lens/dist/chunk-JOLITGCC.js +27 -0
  114. package/node_modules/pi-lens/dist/chunk-K6VYLB2U.js +145 -0
  115. package/node_modules/pi-lens/dist/chunk-LJDODBBZ.js +78 -0
  116. package/node_modules/pi-lens/dist/chunk-LNAKEO63.js +78 -0
  117. package/node_modules/pi-lens/dist/chunk-LSMJ6KBE.js +4139 -0
  118. package/node_modules/pi-lens/dist/chunk-LW6XKDZQ.js +5565 -0
  119. package/node_modules/pi-lens/dist/chunk-N3YQJI6O.js +899 -0
  120. package/node_modules/pi-lens/dist/chunk-NABLC7W3.js +148 -0
  121. package/node_modules/pi-lens/dist/chunk-NKOUFPQF.js +659 -0
  122. package/node_modules/pi-lens/dist/chunk-NL5GLMFI.js +211 -0
  123. package/node_modules/pi-lens/dist/chunk-NMABWBZN.js +327 -0
  124. package/node_modules/pi-lens/dist/chunk-NTHH2J74.js +27 -0
  125. package/node_modules/pi-lens/dist/chunk-NTUJEGDZ.js +59 -0
  126. package/node_modules/pi-lens/dist/chunk-NXL4FFQQ.js +47 -0
  127. package/node_modules/pi-lens/dist/chunk-NXPS2L6U.js +466 -0
  128. package/node_modules/pi-lens/dist/chunk-O5WILGMI.js +42 -0
  129. package/node_modules/pi-lens/dist/chunk-O6TQT6RI.js +48 -0
  130. package/node_modules/pi-lens/dist/chunk-OAXNDZJ7.js +323 -0
  131. package/node_modules/pi-lens/dist/chunk-ODEEOXPH.js +44 -0
  132. package/node_modules/pi-lens/dist/chunk-OQGFCZJ4.js +4533 -0
  133. package/node_modules/pi-lens/dist/chunk-ORTMY4Q4.js +282 -0
  134. package/node_modules/pi-lens/dist/chunk-OS32RNR2.js +442 -0
  135. package/node_modules/pi-lens/dist/chunk-PAK6IDME.js +189 -0
  136. package/node_modules/pi-lens/dist/chunk-PWFHBTSF.js +406 -0
  137. package/node_modules/pi-lens/dist/chunk-Q5U6FMDI.js +2352 -0
  138. package/node_modules/pi-lens/dist/chunk-QOZXJ4NA.js +3364 -0
  139. package/node_modules/pi-lens/dist/chunk-QYF5S6P6.js +45 -0
  140. package/node_modules/pi-lens/dist/chunk-RIISMHKN.js +36 -0
  141. package/node_modules/pi-lens/dist/chunk-RPD4ZSB7.js +25 -0
  142. package/node_modules/pi-lens/dist/chunk-RPD5K5NC.js +79 -0
  143. package/node_modules/pi-lens/dist/chunk-RUOG5D2C.js +262 -0
  144. package/node_modules/pi-lens/dist/chunk-T4ERT73Y.js +599 -0
  145. package/node_modules/pi-lens/dist/chunk-T6D4Q4AQ.js +54 -0
  146. package/node_modules/pi-lens/dist/chunk-TGPXLY2J.js +391 -0
  147. package/node_modules/pi-lens/dist/chunk-TLGFBM3F.js +12116 -0
  148. package/node_modules/pi-lens/dist/chunk-TO6WL3GM.js +88 -0
  149. package/node_modules/pi-lens/dist/chunk-TT22N74J.js +517 -0
  150. package/node_modules/pi-lens/dist/chunk-TVN5N6GY.js +21216 -0
  151. package/node_modules/pi-lens/dist/chunk-U3VGR4VU.js +308 -0
  152. package/node_modules/pi-lens/dist/chunk-UK3CMEAL.js +1250 -0
  153. package/node_modules/pi-lens/dist/chunk-UOPVJQ4N.js +103 -0
  154. package/node_modules/pi-lens/dist/chunk-UXVNL3D7.js +23 -0
  155. package/node_modules/pi-lens/dist/chunk-UY752QSN.js +45 -0
  156. package/node_modules/pi-lens/dist/chunk-V5PXFSZK.js +188 -0
  157. package/node_modules/pi-lens/dist/chunk-V7R425XG.js +398 -0
  158. package/node_modules/pi-lens/dist/chunk-VCSRSYLF.js +81 -0
  159. package/node_modules/pi-lens/dist/chunk-VD4JQCQC.js +162 -0
  160. package/node_modules/pi-lens/dist/chunk-VDBPVIKD.js +62 -0
  161. package/node_modules/pi-lens/dist/chunk-VHQLPIRJ.js +114 -0
  162. package/node_modules/pi-lens/dist/chunk-VN2AXLEX.js +5414 -0
  163. package/node_modules/pi-lens/dist/chunk-VNMT7C64.js +478 -0
  164. package/node_modules/pi-lens/dist/chunk-WONERJTP.js +309 -0
  165. package/node_modules/pi-lens/dist/chunk-XECLWQZN.js +85 -0
  166. package/node_modules/pi-lens/dist/chunk-XIMYZ3JA.js +27 -0
  167. package/node_modules/pi-lens/dist/chunk-XK4CIILI.js +144 -0
  168. package/node_modules/pi-lens/dist/chunk-Y4T27COV.js +562 -0
  169. package/node_modules/pi-lens/dist/chunk-YGVYKNSN.js +1860 -0
  170. package/node_modules/pi-lens/dist/chunk-YLF3PPT5.js +308 -0
  171. package/node_modules/pi-lens/dist/chunk-YSNFMJKN.js +14 -0
  172. package/node_modules/pi-lens/dist/chunk-Z3CCVDUB.js +76 -0
  173. package/node_modules/pi-lens/dist/chunk-Z54ZSOBZ.js +61 -0
  174. package/node_modules/pi-lens/dist/chunk-ZAWW3AF6.js +97 -0
  175. package/node_modules/pi-lens/dist/chunk-ZMOL6RQC.js +167 -0
  176. package/node_modules/pi-lens/dist/index.js +16456 -8335
  177. package/node_modules/pi-lens/dist/mcp/analyze-cli.js +186 -232
  178. package/node_modules/pi-lens/dist/mcp/cli.js +137 -98
  179. package/node_modules/pi-lens/dist/mcp/server.js +22589 -1573
  180. package/node_modules/pi-lens/dist/mcp/worker.js +97 -38
  181. package/node_modules/pi-lens/dist/probes/installer.js +135 -0
  182. package/node_modules/pi-lens/dist/workers/project-snapshot-persist-worker.js +22 -0
  183. package/node_modules/pi-lens/dist/workers/review-graph-persist-worker.js +15 -0
  184. package/node_modules/pi-lens/docs/agent-guide.md +13 -4
  185. package/node_modules/pi-lens/docs/agent-tools.md +42 -0
  186. package/node_modules/pi-lens/docs/ast-grep_rules_catalog.md +3 -2
  187. package/node_modules/pi-lens/docs/configuration.md +20 -1
  188. package/node_modules/pi-lens/docs/environment-variables.md +52 -2
  189. package/node_modules/pi-lens/docs/features.md +8 -4
  190. package/node_modules/pi-lens/docs/globalconfig.md +1 -0
  191. package/node_modules/pi-lens/docs/io-bridge-v2-migration.md +94 -0
  192. package/node_modules/pi-lens/docs/lsp-capability-matrix.md +36 -4
  193. package/node_modules/pi-lens/docs/lsp-idle-eviction.md +124 -0
  194. package/node_modules/pi-lens/docs/mcp.md +21 -5
  195. package/node_modules/pi-lens/docs/merge-queue-rollout.md +77 -0
  196. package/node_modules/pi-lens/docs/pi-lens-fixer.md +156 -88
  197. package/node_modules/pi-lens/docs/pi-lens-investigator.md +74 -26
  198. package/node_modules/pi-lens/docs/pi-lens-merge-policy.md +694 -0
  199. package/node_modules/pi-lens/docs/pi-lens-monitor.md +73 -7
  200. package/node_modules/pi-lens/docs/pi-lens-retro.md +6 -4
  201. package/node_modules/pi-lens/docs/pi-lens-reviewer.md +188 -48
  202. package/node_modules/pi-lens/docs/pi-lens-subagent.md +246 -45
  203. package/node_modules/pi-lens/docs/pi-lens-warden.md +18 -7
  204. package/node_modules/pi-lens/docs/public-api-stability.md +55 -0
  205. package/node_modules/pi-lens/docs/release-qa-baseline.md +84 -17
  206. package/node_modules/pi-lens/docs/rfcs/3654-unified-io-bridge-v2.md +316 -0
  207. package/node_modules/pi-lens/docs/servercapabilities.md +53 -49
  208. package/node_modules/pi-lens/docs/settings.md +1 -0
  209. package/node_modules/pi-lens/docs/usage.md +5 -1
  210. package/node_modules/pi-lens/grammars/tree-sitter-bash.wasm +0 -0
  211. package/node_modules/pi-lens/grammars/tree-sitter-bash.wasm.json +3 -3
  212. package/node_modules/pi-lens/package.json +18 -6
  213. package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/advisory-registry-subset-test.yml +41 -0
  214. package/node_modules/pi-lens/rules/ast-grep-rules/rules/advisory-registry-subset.yml +50 -0
  215. package/node_modules/pi-lens/scripts/analyze-pi-lens-logs.mjs +1275 -62
  216. package/node_modules/pi-lens/scripts/download-grammars.js +5 -0
  217. package/node_modules/pi-lens/scripts/grammars.lock.json +6 -1
  218. package/node_modules/pi-lens/scripts/install-selftest.mjs +33 -34
  219. package/node_modules/pi-lens/scripts/lib/host-provided-deps.mjs +13 -4
  220. package/node_modules/pi-lens/scripts/lib/web-tree-sitter-dir.mjs +18 -0
  221. package/package.json +15 -10
  222. package/node_modules/@dietrichgebert/ponytail/README.es.md +0 -212
  223. package/node_modules/@dietrichgebert/ponytail/README.ja.md +0 -212
  224. package/node_modules/@dietrichgebert/ponytail/README.ko.md +0 -212
  225. package/node_modules/@dietrichgebert/ponytail/README.zh-CN.md +0 -212
  226. package/node_modules/pi-lens/dist/clients/actionable-warnings-logger.js +0 -35
  227. package/node_modules/pi-lens/dist/clients/actionable-warnings.js +0 -1610
  228. package/node_modules/pi-lens/dist/clients/advisory-provenance.js +0 -593
  229. package/node_modules/pi-lens/dist/clients/agent-behavior-client.js +0 -147
  230. package/node_modules/pi-lens/dist/clients/agent-nudge.js +0 -325
  231. package/node_modules/pi-lens/dist/clients/analysed-root.js +0 -1
  232. package/node_modules/pi-lens/dist/clients/ast-grep-client.js +0 -731
  233. package/node_modules/pi-lens/dist/clients/ast-grep-rule-manager.js +0 -146
  234. package/node_modules/pi-lens/dist/clients/ast-grep-tool-logger.js +0 -118
  235. package/node_modules/pi-lens/dist/clients/ast-grep-types.js +0 -10
  236. package/node_modules/pi-lens/dist/clients/ast-grep-yaml-synth.js +0 -154
  237. package/node_modules/pi-lens/dist/clients/atomic-write-staging.js +0 -75
  238. package/node_modules/pi-lens/dist/clients/atomic-write.js +0 -189
  239. package/node_modules/pi-lens/dist/clients/availability-probe-flight.js +0 -12
  240. package/node_modules/pi-lens/dist/clients/bash-file-access.js +0 -1056
  241. package/node_modules/pi-lens/dist/clients/biome-client.js +0 -357
  242. package/node_modules/pi-lens/dist/clients/blocker-freshness.js +0 -837
  243. package/node_modules/pi-lens/dist/clients/blocker-past-eof.js +0 -129
  244. package/node_modules/pi-lens/dist/clients/bootstrap.js +0 -569
  245. package/node_modules/pi-lens/dist/clients/bounded-cache.js +0 -190
  246. package/node_modules/pi-lens/dist/clients/bounded-pid-file-lock.js +0 -202
  247. package/node_modules/pi-lens/dist/clients/bounded-telemetry.js +0 -295
  248. package/node_modules/pi-lens/dist/clients/build-identity.js +0 -95
  249. package/node_modules/pi-lens/dist/clients/bundled-resource-health.js +0 -113
  250. package/node_modules/pi-lens/dist/clients/bus-events-logger.js +0 -105
  251. package/node_modules/pi-lens/dist/clients/bus-publish.js +0 -171
  252. package/node_modules/pi-lens/dist/clients/cache/rule-cache.js +0 -190
  253. package/node_modules/pi-lens/dist/clients/cache-manager.js +0 -524
  254. package/node_modules/pi-lens/dist/clients/cache-observability.js +0 -1313
  255. package/node_modules/pi-lens/dist/clients/call-graph.js +0 -852
  256. package/node_modules/pi-lens/dist/clients/cargo-manifest.js +0 -422
  257. package/node_modules/pi-lens/dist/clients/cascade-budget.js +0 -196
  258. package/node_modules/pi-lens/dist/clients/cascade-format.js +0 -315
  259. package/node_modules/pi-lens/dist/clients/cascade-logger.js +0 -31
  260. package/node_modules/pi-lens/dist/clients/cascade-types.js +0 -9
  261. package/node_modules/pi-lens/dist/clients/child-unref.js +0 -124
  262. package/node_modules/pi-lens/dist/clients/code-quality-warnings.js +0 -286
  263. package/node_modules/pi-lens/dist/clients/codebase-model.js +0 -173
  264. package/node_modules/pi-lens/dist/clients/collateral-test-role.js +0 -40
  265. package/node_modules/pi-lens/dist/clients/complexity-client.js +0 -462
  266. package/node_modules/pi-lens/dist/clients/config-core/deny.js +0 -221
  267. package/node_modules/pi-lens/dist/clients/config-core/index.js +0 -50
  268. package/node_modules/pi-lens/dist/clients/config-core/merge.js +0 -357
  269. package/node_modules/pi-lens/dist/clients/config-core/normalize.js +0 -340
  270. package/node_modules/pi-lens/dist/clients/config-core/process-spec.js +0 -248
  271. package/node_modules/pi-lens/dist/clients/config-core/provenance.js +0 -164
  272. package/node_modules/pi-lens/dist/clients/config-core/records.js +0 -218
  273. package/node_modules/pi-lens/dist/clients/config-core/resolve.js +0 -125
  274. package/node_modules/pi-lens/dist/clients/config-core/safe-object.js +0 -78
  275. package/node_modules/pi-lens/dist/clients/config-core/schema.js +0 -165
  276. package/node_modules/pi-lens/dist/clients/config-diagnostic-codes.js +0 -285
  277. package/node_modules/pi-lens/dist/clients/config-locations.js +0 -388
  278. package/node_modules/pi-lens/dist/clients/config-resolve.js +0 -798
  279. package/node_modules/pi-lens/dist/clients/config-schema.js +0 -251
  280. package/node_modules/pi-lens/dist/clients/config-warn.js +0 -407
  281. package/node_modules/pi-lens/dist/clients/console-guard-install.js +0 -26
  282. package/node_modules/pi-lens/dist/clients/cooperative-budget.js +0 -42
  283. package/node_modules/pi-lens/dist/clients/dead-code-client.js +0 -510
  284. package/node_modules/pi-lens/dist/clients/dead-code-logger.js +0 -30
  285. package/node_modules/pi-lens/dist/clients/deadline-utils.js +0 -280
  286. package/node_modules/pi-lens/dist/clients/debug-handles.js +0 -211
  287. package/node_modules/pi-lens/dist/clients/debug-heap.js +0 -174
  288. package/node_modules/pi-lens/dist/clients/deferred-lsp-work.js +0 -106
  289. package/node_modules/pi-lens/dist/clients/degradation-ledger.js +0 -426
  290. package/node_modules/pi-lens/dist/clients/demoted-finding-render.js +0 -169
  291. package/node_modules/pi-lens/dist/clients/dependency-checker.js +0 -885
  292. package/node_modules/pi-lens/dist/clients/deps/ast-grep-napi.js +0 -22
  293. package/node_modules/pi-lens/dist/clients/deps/js-yaml.js +0 -9
  294. package/node_modules/pi-lens/dist/clients/deps/minimatch.js +0 -4
  295. package/node_modules/pi-lens/dist/clients/deps/pi-tui.js +0 -14
  296. package/node_modules/pi-lens/dist/clients/deps/typebox.js +0 -14
  297. package/node_modules/pi-lens/dist/clients/deps/vscode-jsonrpc.js +0 -1
  298. package/node_modules/pi-lens/dist/clients/deps/web-tree-sitter.js +0 -24
  299. package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +0 -630
  300. package/node_modules/pi-lens/dist/clients/diagnostic-line-freshness.js +0 -305
  301. package/node_modules/pi-lens/dist/clients/diagnostic-logger.js +0 -73
  302. package/node_modules/pi-lens/dist/clients/diagnostic-tracker.js +0 -105
  303. package/node_modules/pi-lens/dist/clients/diagnostics-publish.js +0 -230
  304. package/node_modules/pi-lens/dist/clients/dispatch/ast-grep-catalog.js +0 -65
  305. package/node_modules/pi-lens/dist/clients/dispatch/auxiliary-lsp.js +0 -343
  306. package/node_modules/pi-lens/dist/clients/dispatch/collect-later-tier.js +0 -35
  307. package/node_modules/pi-lens/dist/clients/dispatch/diagnostic-taxonomy.js +0 -66
  308. package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +0 -1269
  309. package/node_modules/pi-lens/dist/clients/dispatch/fact-provider-types.js +0 -1
  310. package/node_modules/pi-lens/dist/clients/dispatch/fact-rule-runner.js +0 -17
  311. package/node_modules/pi-lens/dist/clients/dispatch/fact-runner.js +0 -30
  312. package/node_modules/pi-lens/dist/clients/dispatch/fact-scheduler.js +0 -68
  313. package/node_modules/pi-lens/dist/clients/dispatch/fact-store.js +0 -377
  314. package/node_modules/pi-lens/dist/clients/dispatch/facts/comment-facts.js +0 -22
  315. package/node_modules/pi-lens/dist/clients/dispatch/facts/file-content.js +0 -19
  316. package/node_modules/pi-lens/dist/clients/dispatch/facts/function-facts.js +0 -348
  317. package/node_modules/pi-lens/dist/clients/dispatch/facts/import-facts.js +0 -204
  318. package/node_modules/pi-lens/dist/clients/dispatch/facts/tree-sitter-facts.js +0 -34
  319. package/node_modules/pi-lens/dist/clients/dispatch/facts/try-catch-facts.js +0 -119
  320. package/node_modules/pi-lens/dist/clients/dispatch/finding-policy.js +0 -339
  321. package/node_modules/pi-lens/dist/clients/dispatch/indent-detect.js +0 -417
  322. package/node_modules/pi-lens/dist/clients/dispatch/inline-suppressions.js +0 -89
  323. package/node_modules/pi-lens/dist/clients/dispatch/integration.js +0 -2377
  324. package/node_modules/pi-lens/dist/clients/dispatch/lazy.js +0 -11
  325. package/node_modules/pi-lens/dist/clients/dispatch/pending-runner-findings.js +0 -87
  326. package/node_modules/pi-lens/dist/clients/dispatch/plan.js +0 -278
  327. package/node_modules/pi-lens/dist/clients/dispatch/priorities.js +0 -20
  328. package/node_modules/pi-lens/dist/clients/dispatch/rule-id-normalize.js +0 -50
  329. package/node_modules/pi-lens/dist/clients/dispatch/rule-ignores.js +0 -69
  330. package/node_modules/pi-lens/dist/clients/dispatch/rule-policy.js +0 -135
  331. package/node_modules/pi-lens/dist/clients/dispatch/rules/async-noise.js +0 -40
  332. package/node_modules/pi-lens/dist/clients/dispatch/rules/async-unnecessary-wrapper.js +0 -27
  333. package/node_modules/pi-lens/dist/clients/dispatch/rules/cors-wildcard.js +0 -54
  334. package/node_modules/pi-lens/dist/clients/dispatch/rules/error-obscuring.js +0 -32
  335. package/node_modules/pi-lens/dist/clients/dispatch/rules/error-swallowing.js +0 -31
  336. package/node_modules/pi-lens/dist/clients/dispatch/rules/framework-call-noise.js +0 -67
  337. package/node_modules/pi-lens/dist/clients/dispatch/rules/high-complexity.js +0 -72
  338. package/node_modules/pi-lens/dist/clients/dispatch/rules/high-fan-out.js +0 -74
  339. package/node_modules/pi-lens/dist/clients/dispatch/rules/high-import-coupling.js +0 -37
  340. package/node_modules/pi-lens/dist/clients/dispatch/rules/missing-error-propagation.js +0 -62
  341. package/node_modules/pi-lens/dist/clients/dispatch/rules/no-commented-credentials.js +0 -52
  342. package/node_modules/pi-lens/dist/clients/dispatch/rules/pass-through-wrappers.js +0 -42
  343. package/node_modules/pi-lens/dist/clients/dispatch/rules/placeholder-comments.js +0 -40
  344. package/node_modules/pi-lens/dist/clients/dispatch/rules/unsafe-boundary.js +0 -126
  345. package/node_modules/pi-lens/dist/clients/dispatch/runner-context.js +0 -52
  346. package/node_modules/pi-lens/dist/clients/dispatch/runners/actionlint.js +0 -111
  347. package/node_modules/pi-lens/dist/clients/dispatch/runners/ast-grep-napi.js +0 -1196
  348. package/node_modules/pi-lens/dist/clients/dispatch/runners/biome-check.js +0 -296
  349. package/node_modules/pi-lens/dist/clients/dispatch/runners/cpp-check.js +0 -219
  350. package/node_modules/pi-lens/dist/clients/dispatch/runners/credo.js +0 -82
  351. package/node_modules/pi-lens/dist/clients/dispatch/runners/cue-vet.js +0 -416
  352. package/node_modules/pi-lens/dist/clients/dispatch/runners/dart-analyze.js +0 -183
  353. package/node_modules/pi-lens/dist/clients/dispatch/runners/detekt.js +0 -176
  354. package/node_modules/pi-lens/dist/clients/dispatch/runners/dotnet-build.js +0 -164
  355. package/node_modules/pi-lens/dist/clients/dispatch/runners/elixir-check.js +0 -195
  356. package/node_modules/pi-lens/dist/clients/dispatch/runners/eslint.js +0 -137
  357. package/node_modules/pi-lens/dist/clients/dispatch/runners/fact-rules.js +0 -29
  358. package/node_modules/pi-lens/dist/clients/dispatch/runners/fish-indent.js +0 -69
  359. package/node_modules/pi-lens/dist/clients/dispatch/runners/gleam-check.js +0 -167
  360. package/node_modules/pi-lens/dist/clients/dispatch/runners/go-vet.js +0 -104
  361. package/node_modules/pi-lens/dist/clients/dispatch/runners/golangci-lint.js +0 -135
  362. package/node_modules/pi-lens/dist/clients/dispatch/runners/hadolint.js +0 -91
  363. package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-lint.js +0 -171
  364. package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-render.js +0 -940
  365. package/node_modules/pi-lens/dist/clients/dispatch/runners/htmlhint.js +0 -117
  366. package/node_modules/pi-lens/dist/clients/dispatch/runners/index.js +0 -108
  367. package/node_modules/pi-lens/dist/clients/dispatch/runners/javac.js +0 -99
  368. package/node_modules/pi-lens/dist/clients/dispatch/runners/ktlint.js +0 -110
  369. package/node_modules/pi-lens/dist/clients/dispatch/runners/lsp.js +0 -379
  370. package/node_modules/pi-lens/dist/clients/dispatch/runners/markdownlint.js +0 -167
  371. package/node_modules/pi-lens/dist/clients/dispatch/runners/mypy.js +0 -102
  372. package/node_modules/pi-lens/dist/clients/dispatch/runners/oxlint.js +0 -414
  373. package/node_modules/pi-lens/dist/clients/dispatch/runners/php-lint.js +0 -85
  374. package/node_modules/pi-lens/dist/clients/dispatch/runners/phpstan.js +0 -120
  375. package/node_modules/pi-lens/dist/clients/dispatch/runners/prisma-validate.js +0 -62
  376. package/node_modules/pi-lens/dist/clients/dispatch/runners/psscriptanalyzer.js +0 -445
  377. package/node_modules/pi-lens/dist/clients/dispatch/runners/pyright.js +0 -169
  378. package/node_modules/pi-lens/dist/clients/dispatch/runners/rubocop.js +0 -99
  379. package/node_modules/pi-lens/dist/clients/dispatch/runners/ruff.js +0 -88
  380. package/node_modules/pi-lens/dist/clients/dispatch/runners/rust-clippy.js +0 -256
  381. package/node_modules/pi-lens/dist/clients/dispatch/runners/shellcheck.js +0 -173
  382. package/node_modules/pi-lens/dist/clients/dispatch/runners/shfmt.js +0 -102
  383. package/node_modules/pi-lens/dist/clients/dispatch/runners/spellcheck.js +0 -128
  384. package/node_modules/pi-lens/dist/clients/dispatch/runners/spotbugs.js +0 -259
  385. package/node_modules/pi-lens/dist/clients/dispatch/runners/sqlfluff.js +0 -183
  386. package/node_modules/pi-lens/dist/clients/dispatch/runners/stylelint.js +0 -166
  387. package/node_modules/pi-lens/dist/clients/dispatch/runners/swiftlint.js +0 -163
  388. package/node_modules/pi-lens/dist/clients/dispatch/runners/taplo.js +0 -174
  389. package/node_modules/pi-lens/dist/clients/dispatch/runners/terragrunt.js +0 -168
  390. package/node_modules/pi-lens/dist/clients/dispatch/runners/tflint.js +0 -125
  391. package/node_modules/pi-lens/dist/clients/dispatch/runners/tree-sitter.js +0 -643
  392. package/node_modules/pi-lens/dist/clients/dispatch/runners/trivy-config.js +0 -253
  393. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/availability-policy.js +0 -496
  394. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +0 -90
  395. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/diagnostic-parsers.js +0 -95
  396. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/lazy-installer.js +0 -274
  397. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +0 -1701
  398. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/spawn-outcome.js +0 -101
  399. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/tool-failure.js +0 -235
  400. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/toolchain-availability.js +0 -169
  401. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils.js +0 -15
  402. package/node_modules/pi-lens/dist/clients/dispatch/runners/vale.js +0 -128
  403. package/node_modules/pi-lens/dist/clients/dispatch/runners/yaml-rule-parser.js +0 -242
  404. package/node_modules/pi-lens/dist/clients/dispatch/runners/yamllint.js +0 -95
  405. package/node_modules/pi-lens/dist/clients/dispatch/runners/zig-check.js +0 -79
  406. package/node_modules/pi-lens/dist/clients/dispatch/suppress-writer.js +0 -79
  407. package/node_modules/pi-lens/dist/clients/dispatch/tool-profile.js +0 -30
  408. package/node_modules/pi-lens/dist/clients/dispatch/types.js +0 -21
  409. package/node_modules/pi-lens/dist/clients/dispatch/utils/format-utils.js +0 -45
  410. package/node_modules/pi-lens/dist/clients/dispatch/utils/lsp-diagnostics.js +0 -35
  411. package/node_modules/pi-lens/dist/clients/disposition-logger.js +0 -32
  412. package/node_modules/pi-lens/dist/clients/disposition-publish.js +0 -124
  413. package/node_modules/pi-lens/dist/clients/durable-store.js +0 -97
  414. package/node_modules/pi-lens/dist/clients/effective-config.js +0 -415
  415. package/node_modules/pi-lens/dist/clients/env-utils.js +0 -83
  416. package/node_modules/pi-lens/dist/clients/error-class.js +0 -23
  417. package/node_modules/pi-lens/dist/clients/eval-timestamp.js +0 -17
  418. package/node_modules/pi-lens/dist/clients/event-loop-hold.js +0 -274
  419. package/node_modules/pi-lens/dist/clients/event-loop-monitor.js +0 -250
  420. package/node_modules/pi-lens/dist/clients/extension-log.js +0 -504
  421. package/node_modules/pi-lens/dist/clients/extension-mode.js +0 -73
  422. package/node_modules/pi-lens/dist/clients/feature-hints.js +0 -103
  423. package/node_modules/pi-lens/dist/clients/file-kinds.js +0 -412
  424. package/node_modules/pi-lens/dist/clients/file-role.js +0 -134
  425. package/node_modules/pi-lens/dist/clients/file-time.js +0 -160
  426. package/node_modules/pi-lens/dist/clients/file-utils.js +0 -1032
  427. package/node_modules/pi-lens/dist/clients/finding-delivery-gate.js +0 -494
  428. package/node_modules/pi-lens/dist/clients/finding-identity.js +0 -88
  429. package/node_modules/pi-lens/dist/clients/fix-worklog.js +0 -103
  430. package/node_modules/pi-lens/dist/clients/format-events-publish.js +0 -343
  431. package/node_modules/pi-lens/dist/clients/format-service.js +0 -222
  432. package/node_modules/pi-lens/dist/clients/formatters-lazy.js +0 -9
  433. package/node_modules/pi-lens/dist/clients/formatters.js +0 -2032
  434. package/node_modules/pi-lens/dist/clients/freshness-cadence.js +0 -17
  435. package/node_modules/pi-lens/dist/clients/freshness.js +0 -38
  436. package/node_modules/pi-lens/dist/clients/generated-artifacts.js +0 -394
  437. package/node_modules/pi-lens/dist/clients/generation-guard.js +0 -215
  438. package/node_modules/pi-lens/dist/clients/git-guard.js +0 -1136
  439. package/node_modules/pi-lens/dist/clients/git-tracked-ignore.js +0 -243
  440. package/node_modules/pi-lens/dist/clients/gitleaks-client.js +0 -509
  441. package/node_modules/pi-lens/dist/clients/go-client.js +0 -104
  442. package/node_modules/pi-lens/dist/clients/govulncheck-client.js +0 -605
  443. package/node_modules/pi-lens/dist/clients/gradle-ktfmt-style.js +0 -348
  444. package/node_modules/pi-lens/dist/clients/grammar-source.js +0 -465
  445. package/node_modules/pi-lens/dist/clients/gzip-stage-write.js +0 -135
  446. package/node_modules/pi-lens/dist/clients/hashline-anchor.js +0 -424
  447. package/node_modules/pi-lens/dist/clients/hook-budgets.js +0 -76
  448. package/node_modules/pi-lens/dist/clients/host-edit-normalize.js +0 -140
  449. package/node_modules/pi-lens/dist/clients/host-ports.js +0 -39
  450. package/node_modules/pi-lens/dist/clients/indent-retarget.js +0 -154
  451. package/node_modules/pi-lens/dist/clients/inline-blocker-dispositions.js +0 -186
  452. package/node_modules/pi-lens/dist/clients/install-diagnostics.js +0 -156
  453. package/node_modules/pi-lens/dist/clients/installer/index.js +0 -5416
  454. package/node_modules/pi-lens/dist/clients/installer/managed-tool-refresh-session.js +0 -58
  455. package/node_modules/pi-lens/dist/clients/installer/managed-tool-refresh.js +0 -783
  456. package/node_modules/pi-lens/dist/clients/instance-reaper-state.js +0 -7
  457. package/node_modules/pi-lens/dist/clients/instance-reaper.js +0 -1137
  458. package/node_modules/pi-lens/dist/clients/instance-registry-lock.js +0 -145
  459. package/node_modules/pi-lens/dist/clients/instance-registry.js +0 -773
  460. package/node_modules/pi-lens/dist/clients/jscpd-client.js +0 -378
  461. package/node_modules/pi-lens/dist/clients/json-cache-read.js +0 -65
  462. package/node_modules/pi-lens/dist/clients/knip-client.js +0 -788
  463. package/node_modules/pi-lens/dist/clients/language-policy.js +0 -252
  464. package/node_modules/pi-lens/dist/clients/language-profile.js +0 -361
  465. package/node_modules/pi-lens/dist/clients/language-registry.js +0 -603
  466. package/node_modules/pi-lens/dist/clients/latency-logger.js +0 -727
  467. package/node_modules/pi-lens/dist/clients/lazy-import.js +0 -21
  468. package/node_modules/pi-lens/dist/clients/ledger-bounds.js +0 -54
  469. package/node_modules/pi-lens/dist/clients/lens-config.js +0 -404
  470. package/node_modules/pi-lens/dist/clients/lens-engine.js +0 -358
  471. package/node_modules/pi-lens/dist/clients/lens-events.js +0 -125
  472. package/node_modules/pi-lens/dist/clients/lens-flag-registry.js +0 -467
  473. package/node_modules/pi-lens/dist/clients/lens-map.js +0 -1156
  474. package/node_modules/pi-lens/dist/clients/live-bus-emitter.js +0 -74
  475. package/node_modules/pi-lens/dist/clients/log-cleanup.js +0 -222
  476. package/node_modules/pi-lens/dist/clients/lsp/aggregation.js +0 -178
  477. package/node_modules/pi-lens/dist/clients/lsp/cascade-tier.js +0 -421
  478. package/node_modules/pi-lens/dist/clients/lsp/client.js +0 -4593
  479. package/node_modules/pi-lens/dist/clients/lsp/config.js +0 -691
  480. package/node_modules/pi-lens/dist/clients/lsp/content-limits.js +0 -41
  481. package/node_modules/pi-lens/dist/clients/lsp/diagnostic-binding.js +0 -225
  482. package/node_modules/pi-lens/dist/clients/lsp/document-drift.js +0 -467
  483. package/node_modules/pi-lens/dist/clients/lsp/edits.js +0 -1219
  484. package/node_modules/pi-lens/dist/clients/lsp/index.js +0 -8305
  485. package/node_modules/pi-lens/dist/clients/lsp/inferred-project.js +0 -216
  486. package/node_modules/pi-lens/dist/clients/lsp/jvm-runtime.js +0 -298
  487. package/node_modules/pi-lens/dist/clients/lsp/language.js +0 -63
  488. package/node_modules/pi-lens/dist/clients/lsp/launch.js +0 -746
  489. package/node_modules/pi-lens/dist/clients/lsp/lombok.js +0 -158
  490. package/node_modules/pi-lens/dist/clients/lsp/path-utils.js +0 -5
  491. package/node_modules/pi-lens/dist/clients/lsp/pending-aux-coverage.js +0 -251
  492. package/node_modules/pi-lens/dist/clients/lsp/position-encoding.js +0 -61
  493. package/node_modules/pi-lens/dist/clients/lsp/ruby-drive-dirs.js +0 -83
  494. package/node_modules/pi-lens/dist/clients/lsp/server.js +0 -3290
  495. package/node_modules/pi-lens/dist/clients/lsp/session-roots.js +0 -192
  496. package/node_modules/pi-lens/dist/clients/lsp/spawn-history.js +0 -17
  497. package/node_modules/pi-lens/dist/clients/lsp/sync-kind.js +0 -56
  498. package/node_modules/pi-lens/dist/clients/lsp/tsserver-sync.js +0 -332
  499. package/node_modules/pi-lens/dist/clients/lsp/wait-policy/capability-snapshot.js +0 -1
  500. package/node_modules/pi-lens/dist/clients/lsp/wait-policy/classification.js +0 -85
  501. package/node_modules/pi-lens/dist/clients/lsp/wait-policy/index.js +0 -10
  502. package/node_modules/pi-lens/dist/clients/lsp/wait-policy/strategies.js +0 -392
  503. package/node_modules/pi-lens/dist/clients/lsp/watch-queue.js +0 -61
  504. package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-cache.js +0 -639
  505. package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-session.js +0 -30
  506. package/node_modules/pi-lens/dist/clients/lsp/workspace-sweep-hold.js +0 -184
  507. package/node_modules/pi-lens/dist/clients/lsp-budget.js +0 -186
  508. package/node_modules/pi-lens/dist/clients/lsp-document-symbols.js +0 -110
  509. package/node_modules/pi-lens/dist/clients/lsp-lazy.js +0 -9
  510. package/node_modules/pi-lens/dist/clients/lsp-mutation.js +0 -396
  511. package/node_modules/pi-lens/dist/clients/lsp-status.js +0 -59
  512. package/node_modules/pi-lens/dist/clients/map-with-concurrency.js +0 -40
  513. package/node_modules/pi-lens/dist/clients/mcp/analyze.js +0 -420
  514. package/node_modules/pi-lens/dist/clients/mcp/host-shim.js +0 -31
  515. package/node_modules/pi-lens/dist/clients/mcp/ipc.js +0 -523
  516. package/node_modules/pi-lens/dist/clients/mcp/review.js +0 -197
  517. package/node_modules/pi-lens/dist/clients/mcp/session.js +0 -412
  518. package/node_modules/pi-lens/dist/clients/memory-sampler.js +0 -208
  519. package/node_modules/pi-lens/dist/clients/message-end-attribution.js +0 -30
  520. package/node_modules/pi-lens/dist/clients/metrics-client.js +0 -107
  521. package/node_modules/pi-lens/dist/clients/metrics-history.js +0 -327
  522. package/node_modules/pi-lens/dist/clients/middle-man-analysis.js +0 -263
  523. package/node_modules/pi-lens/dist/clients/model-provider.js +0 -53
  524. package/node_modules/pi-lens/dist/clients/module-report-lsp.js +0 -189
  525. package/node_modules/pi-lens/dist/clients/module-report.js +0 -2150
  526. package/node_modules/pi-lens/dist/clients/mutating-tool.js +0 -651
  527. package/node_modules/pi-lens/dist/clients/mutation-attribution.js +0 -368
  528. package/node_modules/pi-lens/dist/clients/mutation-bridge.js +0 -240
  529. package/node_modules/pi-lens/dist/clients/ndjson-logger.js +0 -734
  530. package/node_modules/pi-lens/dist/clients/observed-mutation-sources.js +0 -101
  531. package/node_modules/pi-lens/dist/clients/observed-mutation.js +0 -1253
  532. package/node_modules/pi-lens/dist/clients/oldtext-autopatch.js +0 -128
  533. package/node_modules/pi-lens/dist/clients/opaque-mutation-scan.js +0 -496
  534. package/node_modules/pi-lens/dist/clients/opengrep-client.js +0 -333
  535. package/node_modules/pi-lens/dist/clients/opengrep-config.js +0 -76
  536. package/node_modules/pi-lens/dist/clients/package-manager.js +0 -607
  537. package/node_modules/pi-lens/dist/clients/package-root.js +0 -38
  538. package/node_modules/pi-lens/dist/clients/partial-edit-apply.js +0 -439
  539. package/node_modules/pi-lens/dist/clients/path-attribution-telemetry.js +0 -43
  540. package/node_modules/pi-lens/dist/clients/path-keyed-map.js +0 -108
  541. package/node_modules/pi-lens/dist/clients/path-utils.js +0 -1244
  542. package/node_modules/pi-lens/dist/clients/performance-report.js +0 -331
  543. package/node_modules/pi-lens/dist/clients/persist-debounce.js +0 -70
  544. package/node_modules/pi-lens/dist/clients/persistent-reverify.js +0 -271
  545. package/node_modules/pi-lens/dist/clients/php-cs-fixer-config.js +0 -119
  546. package/node_modules/pi-lens/dist/clients/pipeline.js +0 -1480
  547. package/node_modules/pi-lens/dist/clients/post-autofix-notice.js +0 -37
  548. package/node_modules/pi-lens/dist/clients/print-mode.js +0 -21
  549. package/node_modules/pi-lens/dist/clients/probe-home-state.js +0 -228
  550. package/node_modules/pi-lens/dist/clients/process-bridge.js +0 -66
  551. package/node_modules/pi-lens/dist/clients/process-singletons.js +0 -210
  552. package/node_modules/pi-lens/dist/clients/process-snapshot.js +0 -68
  553. package/node_modules/pi-lens/dist/clients/project-changes.js +0 -181
  554. package/node_modules/pi-lens/dist/clients/project-conventions.js +0 -171
  555. package/node_modules/pi-lens/dist/clients/project-diagnostics/cache.js +0 -137
  556. package/node_modules/pi-lens/dist/clients/project-diagnostics/extractors.js +0 -109
  557. package/node_modules/pi-lens/dist/clients/project-diagnostics/fresh-fetch.js +0 -668
  558. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +0 -118
  559. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/dead-code.js +0 -47
  560. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +0 -40
  561. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/govulncheck.js +0 -34
  562. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/jscpd.js +0 -38
  563. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/knip.js +0 -47
  564. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/madge.js +0 -48
  565. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/opengrep.js +0 -40
  566. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +0 -127
  567. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/trivy.js +0 -81
  568. package/node_modules/pi-lens/dist/clients/project-diagnostics/scanner.js +0 -520
  569. package/node_modules/pi-lens/dist/clients/project-diagnostics/types.js +0 -1
  570. package/node_modules/pi-lens/dist/clients/project-lens-config.js +0 -807
  571. package/node_modules/pi-lens/dist/clients/project-report.js +0 -701
  572. package/node_modules/pi-lens/dist/clients/project-scale.js +0 -237
  573. package/node_modules/pi-lens/dist/clients/project-scan-policy.js +0 -11
  574. package/node_modules/pi-lens/dist/clients/project-snapshot-fingerprint.js +0 -48
  575. package/node_modules/pi-lens/dist/clients/project-snapshot-persist-worker.js +0 -20
  576. package/node_modules/pi-lens/dist/clients/project-snapshot.js +0 -1653
  577. package/node_modules/pi-lens/dist/clients/project-trust.js +0 -181
  578. package/node_modules/pi-lens/dist/clients/python-environment.js +0 -217
  579. package/node_modules/pi-lens/dist/clients/python-provenance.js +0 -639
  580. package/node_modules/pi-lens/dist/clients/quiet-window-config.js +0 -47
  581. package/node_modules/pi-lens/dist/clients/quiet-window.js +0 -236
  582. package/node_modules/pi-lens/dist/clients/read-bridge.js +0 -139
  583. package/node_modules/pi-lens/dist/clients/read-expansion.js +0 -266
  584. package/node_modules/pi-lens/dist/clients/read-guard-logger.js +0 -251
  585. package/node_modules/pi-lens/dist/clients/read-guard-tool-lines.js +0 -1306
  586. package/node_modules/pi-lens/dist/clients/read-guard.js +0 -1561
  587. package/node_modules/pi-lens/dist/clients/recent-touches.js +0 -240
  588. package/node_modules/pi-lens/dist/clients/redact/secrets.js +0 -449
  589. package/node_modules/pi-lens/dist/clients/resource-sampler.js +0 -628
  590. package/node_modules/pi-lens/dist/clients/reverse-deps.js +0 -270
  591. package/node_modules/pi-lens/dist/clients/review-graph/builder.js +0 -5126
  592. package/node_modules/pi-lens/dist/clients/review-graph/format.js +0 -33
  593. package/node_modules/pi-lens/dist/clients/review-graph/git-identity.js +0 -163
  594. package/node_modules/pi-lens/dist/clients/review-graph/import-resolvers.js +0 -481
  595. package/node_modules/pi-lens/dist/clients/review-graph/persist-worker.js +0 -10
  596. package/node_modules/pi-lens/dist/clients/review-graph/query.js +0 -244
  597. package/node_modules/pi-lens/dist/clients/review-graph/revision-drift.js +0 -21
  598. package/node_modules/pi-lens/dist/clients/review-graph/service.js +0 -96
  599. package/node_modules/pi-lens/dist/clients/review-graph/shared-extraction-ir.js +0 -82
  600. package/node_modules/pi-lens/dist/clients/review-graph/symbol-id.js +0 -103
  601. package/node_modules/pi-lens/dist/clients/review-graph/tsconfig-paths.js +0 -299
  602. package/node_modules/pi-lens/dist/clients/review-graph/types.js +0 -1
  603. package/node_modules/pi-lens/dist/clients/review-graph/workspace-modules.js +0 -449
  604. package/node_modules/pi-lens/dist/clients/review-graph-logger.js +0 -81
  605. package/node_modules/pi-lens/dist/clients/ruff-client.js +0 -179
  606. package/node_modules/pi-lens/dist/clients/rules-scanner.js +0 -131
  607. package/node_modules/pi-lens/dist/clients/run-duration.js +0 -55
  608. package/node_modules/pi-lens/dist/clients/runtime-agent-end.js +0 -746
  609. package/node_modules/pi-lens/dist/clients/runtime-config.js +0 -77
  610. package/node_modules/pi-lens/dist/clients/runtime-context.js +0 -211
  611. package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +0 -1324
  612. package/node_modules/pi-lens/dist/clients/runtime-session.js +0 -2485
  613. package/node_modules/pi-lens/dist/clients/runtime-tool-call.js +0 -1295
  614. package/node_modules/pi-lens/dist/clients/runtime-tool-result.js +0 -2049
  615. package/node_modules/pi-lens/dist/clients/runtime-turn.js +0 -3767
  616. package/node_modules/pi-lens/dist/clients/rust-client.js +0 -97
  617. package/node_modules/pi-lens/dist/clients/safe-spawn.js +0 -2357
  618. package/node_modules/pi-lens/dist/clients/sanitize.js +0 -286
  619. package/node_modules/pi-lens/dist/clients/scan-utils.js +0 -25
  620. package/node_modules/pi-lens/dist/clients/scratch-tree-policy.js +0 -165
  621. package/node_modules/pi-lens/dist/clients/search-read-registration.js +0 -94
  622. package/node_modules/pi-lens/dist/clients/secret-findings.js +0 -114
  623. package/node_modules/pi-lens/dist/clients/security-scan-client.js +0 -352
  624. package/node_modules/pi-lens/dist/clients/session-event-guard.js +0 -297
  625. package/node_modules/pi-lens/dist/clients/session-lifecycle.js +0 -484
  626. package/node_modules/pi-lens/dist/clients/session-start-observability.js +0 -94
  627. package/node_modules/pi-lens/dist/clients/session-state-store.js +0 -101
  628. package/node_modules/pi-lens/dist/clients/session-summary.js +0 -15
  629. package/node_modules/pi-lens/dist/clients/sessionstart-logger.js +0 -27
  630. package/node_modules/pi-lens/dist/clients/sg-runner.js +0 -876
  631. package/node_modules/pi-lens/dist/clients/sgconfig.js +0 -347
  632. package/node_modules/pi-lens/dist/clients/shared-checkout-guard.js +0 -338
  633. package/node_modules/pi-lens/dist/clients/single-flight.js +0 -158
  634. package/node_modules/pi-lens/dist/clients/situational-tool-telemetry.js +0 -108
  635. package/node_modules/pi-lens/dist/clients/skills-resolver.js +0 -141
  636. package/node_modules/pi-lens/dist/clients/slow-fs.js +0 -138
  637. package/node_modules/pi-lens/dist/clients/smells-rollup.js +0 -231
  638. package/node_modules/pi-lens/dist/clients/source-filter.js +0 -596
  639. package/node_modules/pi-lens/dist/clients/source-walker.js +0 -211
  640. package/node_modules/pi-lens/dist/clients/spawn-output-cap.js +0 -120
  641. package/node_modules/pi-lens/dist/clients/spawn-timeout-cooldown.js +0 -110
  642. package/node_modules/pi-lens/dist/clients/stale-marker.js +0 -17
  643. package/node_modules/pi-lens/dist/clients/startup-scan.js +0 -400
  644. package/node_modules/pi-lens/dist/clients/startup-timing.js +0 -130
  645. package/node_modules/pi-lens/dist/clients/string-utils.js +0 -33
  646. package/node_modules/pi-lens/dist/clients/subagent-mode.js +0 -111
  647. package/node_modules/pi-lens/dist/clients/symbol-containment.js +0 -24
  648. package/node_modules/pi-lens/dist/clients/symbol-types.js +0 -5
  649. package/node_modules/pi-lens/dist/clients/test-runner-client.js +0 -2507
  650. package/node_modules/pi-lens/dist/clients/test-runner-delivery.js +0 -287
  651. package/node_modules/pi-lens/dist/clients/todo-scanner.js +0 -229
  652. package/node_modules/pi-lens/dist/clients/tool-agreement.js +0 -423
  653. package/node_modules/pi-lens/dist/clients/tool-config.js +0 -249
  654. package/node_modules/pi-lens/dist/clients/tool-cwd.js +0 -270
  655. package/node_modules/pi-lens/dist/clients/tool-definition.js +0 -47
  656. package/node_modules/pi-lens/dist/clients/tool-event.js +0 -105
  657. package/node_modules/pi-lens/dist/clients/tool-policy.js +0 -2755
  658. package/node_modules/pi-lens/dist/clients/tool-probe.js +0 -53
  659. package/node_modules/pi-lens/dist/clients/tool-render.js +0 -156
  660. package/node_modules/pi-lens/dist/clients/tool-set-policy.js +0 -118
  661. package/node_modules/pi-lens/dist/clients/tree-sitter-cache.js +0 -364
  662. package/node_modules/pi-lens/dist/clients/tree-sitter-client.js +0 -4195
  663. package/node_modules/pi-lens/dist/clients/tree-sitter-logger.js +0 -100
  664. package/node_modules/pi-lens/dist/clients/tree-sitter-navigator.js +0 -269
  665. package/node_modules/pi-lens/dist/clients/tree-sitter-query-loader.js +0 -569
  666. package/node_modules/pi-lens/dist/clients/tree-sitter-shared.js +0 -158
  667. package/node_modules/pi-lens/dist/clients/tree-sitter-symbol-extractor.js +0 -1265
  668. package/node_modules/pi-lens/dist/clients/trivy-client.js +0 -467
  669. package/node_modules/pi-lens/dist/clients/tui-fit.js +0 -50
  670. package/node_modules/pi-lens/dist/clients/turn-context.js +0 -52
  671. package/node_modules/pi-lens/dist/clients/turn-end/lane.js +0 -51
  672. package/node_modules/pi-lens/dist/clients/turn-end/lanes/govulncheck.js +0 -112
  673. package/node_modules/pi-lens/dist/clients/turn-end/lanes/secrets.js +0 -204
  674. package/node_modules/pi-lens/dist/clients/turn-summary-render.js +0 -72
  675. package/node_modules/pi-lens/dist/clients/turn-summary.js +0 -132
  676. package/node_modules/pi-lens/dist/clients/typos-config.js +0 -29
  677. package/node_modules/pi-lens/dist/clients/user-notify.js +0 -51
  678. package/node_modules/pi-lens/dist/clients/vanished-instance-marker.js +0 -57
  679. package/node_modules/pi-lens/dist/clients/warm-attach.js +0 -305
  680. package/node_modules/pi-lens/dist/clients/widget-state.js +0 -1808
  681. package/node_modules/pi-lens/dist/clients/word-index-logger.js +0 -49
  682. package/node_modules/pi-lens/dist/clients/word-index-store.js +0 -459
  683. package/node_modules/pi-lens/dist/clients/word-index.js +0 -2080
  684. package/node_modules/pi-lens/dist/clients/workspace-topology.js +0 -443
  685. package/node_modules/pi-lens/dist/clients/write-ordering-guard.js +0 -65
  686. package/node_modules/pi-lens/dist/clients/zizmor-config.js +0 -340
  687. package/node_modules/pi-lens/dist/i18n.js +0 -69
  688. package/node_modules/pi-lens/dist/mcp/build-staleness.js +0 -124
  689. package/node_modules/pi-lens/dist/scripts/lib/process-scan.mjs +0 -583
  690. package/node_modules/pi-lens/dist/scripts/lib/skills-predicate.mjs +0 -129
  691. package/node_modules/pi-lens/dist/scripts/lib/web-tree-sitter-dir.mjs +0 -123
  692. package/node_modules/pi-lens/dist/tools/activate-tools.js +0 -87
  693. package/node_modules/pi-lens/dist/tools/ast-grep-outline.js +0 -137
  694. package/node_modules/pi-lens/dist/tools/ast-grep-replace.js +0 -244
  695. package/node_modules/pi-lens/dist/tools/ast-grep-search.js +0 -762
  696. package/node_modules/pi-lens/dist/tools/effective-config.js +0 -90
  697. package/node_modules/pi-lens/dist/tools/lens-diagnostic-mark.js +0 -375
  698. package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +0 -2571
  699. package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +0 -1745
  700. package/node_modules/pi-lens/dist/tools/lsp-navigation.js +0 -1367
  701. package/node_modules/pi-lens/dist/tools/lsp-structured-output.js +0 -294
  702. package/node_modules/pi-lens/dist/tools/module-report.js +0 -382
  703. package/node_modules/pi-lens/dist/tools/project-report.js +0 -86
  704. package/node_modules/pi-lens/dist/tools/render-compact.js +0 -374
  705. package/node_modules/pi-lens/dist/tools/scan-progress.js +0 -53
  706. package/node_modules/pi-lens/dist/tools/shared.js +0 -29
  707. package/node_modules/pi-lens/dist/tools/symbol-search.js +0 -155
@@ -1,691 +0,0 @@
1
- /**
2
- * LSP Configuration for pi-lens
3
- *
4
- * Allows users to define custom LSP servers and override initialization options
5
- * for built-in servers via configuration.
6
- *
7
- * CANONICAL LOCATION (#2426): the `lsp` namespace of `.pi-lens.json` (project)
8
- * and `~/.pi-lens/config.json` (machine-global). `.pi-lens/lsp.json`,
9
- * `pi-lsp.json` and `~/.pi-lens/lsp.json` — and the four LSP keys at the ROOT
10
- * of a canonical file — are still read for their deprecation window
11
- * (`DEPRECATED_CONFIG_SURFACES`) and emit one migration warning per
12
- * `(file, key)` naming where the setting moves. The canonical spelling wins
13
- * every collision. `docs/configuration.md` documents the full lookup order;
14
- * discovery itself lives in `clients/config-resolve.ts`, which this module and
15
- * the other two loaders now share.
16
- *
17
- * Example — custom server (canonical spelling, inside `.pi-lens.json`):
18
- * {
19
- * "lsp": {
20
- * "servers": {
21
- * "my-server": {
22
- * "name": "My Custom LSP",
23
- * "extensions": [".myext"],
24
- * "command": "my-lsp-server",
25
- * "args": ["--stdio"],
26
- * "rootMarkers": ["package.json"]
27
- * }
28
- * }
29
- * }
30
- * }
31
- *
32
- * Example — override initializationOptions for a built-in server:
33
- * {
34
- * "lsp": {
35
- * "serverOverrides": {
36
- * "rust": {
37
- * "initializationOptions": {
38
- * "check": { "command": "clippy", "allTargets": true },
39
- * "cargo": { "features": "all", "targetDir": true }
40
- * }
41
- * },
42
- * "nix": {
43
- * "initializationOptions": {
44
- * "nixpkgs": { "expr": "import <nixpkgs> {}" }
45
- * }
46
- * }
47
- * }
48
- * }
49
- * }
50
- *
51
- * The `initializationOptions` object is deep-merged onto the server's built-in
52
- * defaults, so you only need to specify the keys you want to change or add.
53
- * User-supplied values win on conflicts at every level of nesting.
54
- *
55
- * Server IDs match the `id` field of each built-in server definition in
56
- * clients/lsp/server.ts (e.g. "rust", "nix", "bash", "python", "go", "ts").
57
- */
58
- import { resetIgnoredConfigWarnCache } from "../config-warn.js";
59
- import * as os from "node:os";
60
- import path from "node:path";
61
- import { lspSectionOf, reportConfigReadFailure, reportPiLensConfigRecords, resolvePiLensConfig, summarizeConfigResolution, } from "../config-resolve.js";
62
- import { getGlobalPiLensDir } from "../file-utils.js";
63
- import { claimPhaseOncePerSession, currentSessionRecordId, logLatency, releaseOncePerSessionPhase, releasePhaseClaim, } from "../latency-logger.js";
64
- import { getPiLensGlobalConfigPath } from "../lens-config.js";
65
- import { normalizeFilePath } from "../path-utils.js";
66
- import { resolveToolCwd } from "../tool-cwd.js";
67
- import { logSessionStart } from "../sessionstart-logger.js";
68
- import { launchLSP } from "./launch.js";
69
- import { registerSessionRoot, resetSessionRootsForTests, sessionRootConfigEntries, setSessionRootConfig, } from "./session-roots.js";
70
- import { LSP_SERVERS, resetLSPCaseSensitivityState, resolveLspServerCwd, } from "./server.js";
71
- // --- Config Loading ---
72
- /**
73
- * For tests that need to force the warn-once cache to reset between cases —
74
- * the LSP loader's counterpart to `resetGlobalConfigWarnCache` in
75
- * lens-config.ts and to the clear folded into `resetProjectLensConfigCache`
76
- * (#2418 review round 3, S3). Without it, this loader's cases had to lean on
77
- * every fixture landing in a fresh temp path to stay unlatched, which is a
78
- * property of the fixture rather than of the test.
79
- */
80
- export function resetLSPConfigWarnCache() {
81
- resetIgnoredConfigWarnCache("lsp-config");
82
- }
83
- function asRecord(value) {
84
- return value && typeof value === "object" && !Array.isArray(value)
85
- ? value
86
- : undefined;
87
- }
88
- /** The session-scoped phase this loader claims (#2526). */
89
- const CONFIG_RESOLVED_PHASE = "config_resolved";
90
- /**
91
- * Write the session's ONE `config_resolved` record (#2526).
92
- *
93
- * Positive observability for the Phase 0 config stack: before this, a correct
94
- * canonical-only resolution proved itself only by the ABSENCE of
95
- * `PILENS_CFG_*` rows — the silent-success gap AGENTS.md warns about.
96
- *
97
- * REDACTED by construction, not by mode. Everything it can say comes from
98
- * `summarizeConfigResolution`, the same projection `pilens_effective_config`
99
- * embeds: document PATHS (home-relative), tiers, the legacy flag, per-tier
100
- * leaf counts, and a record COUNT. No config value, and no absolute `$HOME`,
101
- * can reach the log through it.
102
- *
103
- * NO SECOND RESOLUTION (#2513's facade rule): it reads the resolution its
104
- * caller already performed. And it adds no `await` — `logLatency` and
105
- * `logSessionStart` are synchronous buffered writers — so the session-start
106
- * hook path gains nothing to wait on (#2523).
107
- *
108
- * ONE row per session AND SERVED ROOT, claimed through the logger's own
109
- * session-scoped bookkeeping rather than a latch kept here. `loadLSPConfig` is
110
- * the funnel every config resolution goes through (`initLSPConfig` at session
111
- * start and at each served root, the MCP `ensureReady` boot,
112
- * `ensureLSPConfigInitialized` on the first edit), so an unconditional write
113
- * would emit one row per resolution and the per-session count the smell
114
- * analyzer joins on would be unrecoverable from the log.
115
- *
116
- * The ROOT is part of the claim (#2526 review round 2, F3). A warm MCP server
117
- * calls `ensureReady` per served root (`mcp/server.ts`), and a phase-only
118
- * claim recorded the FIRST root's documents and nothing else — project B's
119
- * legacy config document never reached a row, so the
120
- * "legacy-document-with-no-records" smell structurally could not fire for it.
121
- * `configResolutionKey` keys it (fold, canonicalize, fold — see below), the
122
- * repo-wide rule for every path-keyed map (#210): a `/`-vs-`\` spelling of
123
- * one root must not buy a second row.
124
- */
125
- /**
126
- * THE (session, root) key of every config-resolution record: the
127
- * `config_resolution_pending` mark, the `config_resolved` row and claim, and
128
- * the release of that claim when the root is evicted.
129
- *
130
- * Fold separators, THEN canonicalize, then fold again — in that order, and
131
- * neither step alone is enough (#2518 review F6). `normalizeFilePath` folds
132
- * separators and Windows casing but is the IDENTITY on a POSIX path that
133
- * merely needs canonicalizing, so `"/proj/"` and `"/proj"` produced two
134
- * different claim keys. `path.resolve` fixes that and nothing else — and it
135
- * cannot run first: on POSIX a backslash is an ordinary filename character,
136
- * so resolving `"/proj\\sub"` before folding yields
137
- * `<process.cwd()>/proj\sub`, a different root entirely. That is the #2526 R2
138
- * spelling case (`tests/clients/config-resolved-phase.test.ts`, "a /-vs-\
139
- * spelling of one root does not buy a second row"), which caught exactly this
140
- * ordering while it was wrong. Resolving here rather than at
141
- * each caller is what makes the keys identical BY CONSTRUCTION: the callers
142
- * do not agree today (`initLSPConfig` passes its registry-resolved cwd,
143
- * `clients/runtime-session.ts`'s two warm-path `loadLSPConfig` calls pass the
144
- * session cwd verbatim, and `analysisRoot` from `.pi-lens.json` can carry a
145
- * trailing slash), and a per-caller normalization is exactly the shape 1
146
- * defect this key keeps being bitten by — the write form and the read form
147
- * diverging because two sites each folded the path their own way.
148
- *
149
- * It is also the key `clients/lsp/session-roots.ts` stores its roots under,
150
- * once composed: the registry key is `path.resolve(cwd)`, and this function
151
- * applied to it is idempotent, so `forgetConfigResolvedClaims` releases
152
- * exactly the claim `recordConfigResolved` took.
153
- */
154
- function configResolutionKey(cwd) {
155
- // Fold first (separators, Windows casing), canonicalize second (trailing
156
- // separators, relative segments), fold again so the result keeps the
157
- // forward-slash shape every producer and the analyzer already compare on.
158
- return normalizeFilePath(path.resolve(normalizeFilePath(cwd)));
159
- }
160
- /**
161
- * Announce, at the instant a resolution is actually about to be attempted,
162
- * that THIS session expects a `config_resolved` row (#2526 review round 3,
163
- * S1).
164
- *
165
- * Round 2 PREDICTED this from three flags in `runtime-session.ts`
166
- * (`no-lsp`/`subagent`/`warm-attach`), each mirroring one gate the resolution
167
- * paths themselves check — and the mirror drifted: quick and minimal mode's
168
- * SECOND session in one process schedule no resolution at all
169
- * (`ensureLSPConfigInitialized`'s `_lspConfigInitializedCwds` memo skips the
170
- * synchronous resolve past the first session, and only FULL mode's deferred
171
- * `setImmediate` reschedules one), so the predicate kept saying
172
- * `expected=true` for a session that was never going to resolve, and the
173
- * analyzer flagged a real session every time under `PI_LENS_STARTUP_MODE=quick`
174
- * or `=minimal`. STOP PREDICTING: this function is called from `loadLSPConfig`
175
- * itself rather than from any of its callers' decision points, because
176
- * `loadLSPConfig` is the ONE funnel every production caller reaches —
177
- * `initLSPConfig` (`ensureLSPConfigInitialized`'s first-session-per-cwd path
178
- * in index.ts, the MCP `ensureReady` boot via `ensureLspConfig`,
179
- * `igniteWarmFiles`/`igniteDominantLanguageWarm`) and the two direct calls in
180
- * `runtime-session.ts` (the full-mode deferred `setImmediate` load and the
181
- * quick-mode warm-up's LSP pre-warm). Placing the mark here rather than at
182
- * each of those four sites buys three things: (a) it fires exactly when a
183
- * resolution is genuinely attempted, never merely decided likely; (b) a
184
- * session that never reaches ANY of those sites — quick or minimal mode's
185
- * second-and-later session in a process, for the same root — never gets a
186
- * mark, so the analyzer silently excludes it instead of counting it against;
187
- * (c) this mark and {@link recordConfigResolved}'s row are stamped from the
188
- * SAME `currentSessionRecordId()` read, a few lines apart in one function
189
- * call, so they can never disagree about which session they belong to —
190
- * writing the mark at each scheduling site instead (e.g. before a
191
- * `setImmediate`) would let a session boundary between scheduling and
192
- * execution attribute the two halves to different sessions.
193
- *
194
- * Written unconditionally — before {@link resolvePiLensConfig} can throw —
195
- * so a resolution that is entered but fails mid-flight leaves a mark with no
196
- * row, which the analyzer's join reads as "expected and never happened"
197
- * rather than silently matching "never expected at all".
198
- *
199
- * Carries `root=<configResolutionKey(cwd)>` (#2552 review round 4, MEDIUM): the
200
- * warm MCP server keeps ONE session id for the life of the process but calls
201
- * this once per SERVED ROOT (`ensureReady` per root, `mcp/server.ts`) — a
202
- * session-id-only mark let one root's `config_resolved` row silently clear
203
- * every OTHER root's deficit under the same id, reintroducing review round
204
- * 2's F3 defect one layer up, at the analyzer's join instead of the claim.
205
- * The value is the SAME {@link configResolutionKey} string
206
- * {@link recordConfigResolved} uses for its claim scope and its row's
207
- * `filePath`, so the mark and the row compare equal without the analyzer
208
- * re-deriving any path normalization of its own.
209
- */
210
- function publishConfigResolutionPending(cwd) {
211
- logSessionStart(`session_start config_resolution_pending session=${currentSessionRecordId()} ` +
212
- `root=${configResolutionKey(cwd)}`);
213
- }
214
- function recordConfigResolved(cwd, resolution, lspConfig, homeDir, resolveMs) {
215
- // #2552 review round 4: computed ONCE and reused for the claim scope, the
216
- // row's `filePath`, and the sessionstart line's `root=` — one normalization
217
- // of `cwd`, so the pending mark, the row, and the claim can never disagree
218
- // about which root they name. #2518 review F6 moved that one normalization
219
- // into `configResolutionKey`, so callers passing the same root spelled
220
- // differently cannot disagree either.
221
- const root = configResolutionKey(cwd);
222
- if (!claimPhaseOncePerSession(CONFIG_RESOLVED_PHASE, root)) {
223
- return;
224
- }
225
- const summary = summarizeConfigResolution(resolution, homeDir);
226
- // #2526 R2 F2: the session identity the analyzer joins on. Written on both
227
- // sinks from this ONE call, so the latency row and the sessionstart line
228
- // carry the same id by construction rather than by agreement.
229
- const sessionId = currentSessionRecordId();
230
- // The deny UNION's size, read off the same projection the gates consume
231
- // (`lspConfigOf`) rather than re-read from the raw value — one definition of
232
- // "which servers are denied", so the record cannot describe a different
233
- // deny set than the one that actually suppresses a server.
234
- const deniedServers = lspConfig.disabledServers?.length ?? 0;
235
- const legacyDocuments = summary.documents.filter((document) => document.legacy).length;
236
- logLatency({
237
- type: "phase",
238
- phase: CONFIG_RESOLVED_PHASE,
239
- filePath: root,
240
- durationMs: resolveMs,
241
- metadata: {
242
- sessionId,
243
- documents: summary.documents,
244
- countsByTier: summary.countsByTier,
245
- recordCount: summary.recordCount,
246
- deniedServers,
247
- resolveMs,
248
- },
249
- });
250
- logSessionStart(`config resolved documents=${summary.documents.length} legacy=${legacyDocuments} ` +
251
- `records=${summary.recordCount} deniedServers=${deniedServers} resolveMs=${resolveMs} ` +
252
- `session=${sessionId} root=${root}`);
253
- }
254
- export async function loadLSPConfig(cwd, homeDir = os.homedir(), options = {}) {
255
- const reporting = options.report !== false;
256
- // #2526 review round 3, S1: announce the attempt before anything that
257
- // resolves it can throw — see `publishConfigResolutionPending`'s doc
258
- // comment for why this lives here rather than at each caller.
259
- publishConfigResolutionPending(cwd);
260
- const resolveStartedAt = Date.now();
261
- const resolution = resolvePiLensConfig({
262
- cwd,
263
- globalDir: getGlobalPiLensDir(),
264
- // The global tier reads the PRODUCTION resolution (global-config-location
265
- // PR, refs #2457): which file supplies it is an env fact (PI_LENS_CONFIG_PATH,
266
- // then a legacy default, then PI_CODING_AGENT_DIR, then the
267
- // PI_LENS_HOME-relocated canonical default), not a property of the
268
- // `$HOME` this call's project walk is ceiling-bounded by. `homeDir`
269
- // stays threaded below for the walk and `globalDir`; a test redirecting
270
- // the global tier does it through the env, the same way production is
271
- // controlled.
272
- globalConfigPath: getPiLensGlobalConfigPath(),
273
- homeDir,
274
- // The subsystem comes from the failing DOCUMENT, not from this loader
275
- // (#2445). This resolution opens `~/.pi-lens/config.json` and
276
- // `.pi-lens.json` as well as the LSP-scoped files, and reporting all of
277
- // them as `lsp-config` announced an "invalid LSP config" for a file whose
278
- // contents are pi-lens settings. An LSP-scoped file still reports here.
279
- ...(reporting ? { onReadError: reportConfigReadFailure } : {}),
280
- });
281
- // EVERY record this resolution produced (#2426 review round 3, F1) — not
282
- // filtered to what this loader "owns". `reportPiLensConfigRecords` derives
283
- // the reporting subsystem per record; the warn-once latch collapses this
284
- // loader's report with the pi-lens loaders' report of the SAME record into
285
- // one notice. Filtering here (as round 2 did) silently dropped a pi-lens-
286
- // owned record from a document only this multi-file resolution discovered.
287
- if (reporting)
288
- reportPiLensConfigRecords(resolution.records);
289
- const config = lspConfigOf(resolution.value);
290
- // #2526: the session's one positive record that config resolution HAPPENED,
291
- // written where the resolution actually exists. `report: false` is not a
292
- // gate here — the option suppresses USER-FACING notices, and a record in
293
- // the latency log is not a notice; gating on it would let a session whose
294
- // only resolution was a quiet one look, in the log, like a session that
295
- // never resolved config at all.
296
- recordConfigResolved(cwd, resolution, config, homeDir, Date.now() - resolveStartedAt);
297
- return config;
298
- }
299
- /**
300
- * THE resolved-value → {@link LSPConfig} projection: read the `lsp` namespace
301
- * and keep the four keys the gates consume, each only when the resolution
302
- * actually produced it in the right shape.
303
- *
304
- * Exported and named in #2427 review round 5 (F-R4-1). `effectiveConfig`
305
- * needs the LSP config AND the provenance of the same resolution, and
306
- * `loadLSPConfig` returns only the former — it discards the resolution it
307
- * just performed. Round 4 therefore had the query call `loadLSPConfig` for
308
- * the gates and run a SECOND `resolvePiLensConfig` for the provenance, at a
309
- * different root, and the two disagreed: the gates answered from the file's
310
- * own directory while the reported spec, provenance and document list came
311
- * from the workspace root. With the projection spelled here the query performs
312
- * ONE resolution and derives both halves from it, and the projection is still
313
- * a single definition, so a derived config and a session-registered one cannot
314
- * disagree about what a document means.
315
- */
316
- export function lspConfigOf(value) {
317
- const section = lspSectionOf(value);
318
- const config = {};
319
- const servers = asRecord(section.servers);
320
- if (servers)
321
- config.servers = servers;
322
- const serverOverrides = asRecord(section.serverOverrides);
323
- if (serverOverrides) {
324
- config.serverOverrides = serverOverrides;
325
- }
326
- if (Array.isArray(section.disabledServers)) {
327
- config.disabledServers = section.disabledServers;
328
- }
329
- if (Array.isArray(section.warmFiles)) {
330
- config.warmFiles = section.warmFiles;
331
- }
332
- return config;
333
- }
334
- // --- Custom Server Factory ---
335
- /**
336
- * Create LSPServerInfo from user configuration
337
- */
338
- export function createCustomServer(config, id) {
339
- return {
340
- id,
341
- name: config.name,
342
- custom: true,
343
- extensions: config.extensions,
344
- ...(config.rootMarkers ? { rootMarkers: config.rootMarkers } : {}),
345
- root: config.rootMarkers
346
- ? async (file) => resolveToolCwd("lsp", id, file, {
347
- cwd: process.cwd(),
348
- ...(config.rootMarkers ? { rootMarkers: config.rootMarkers } : {}),
349
- }).cwd
350
- : async (file) => resolveToolCwd("lsp", id, file, { cwd: process.cwd() }).cwd,
351
- async spawn(root) {
352
- const proc = await launchLSP(config.command, config.args ?? ["--stdio"], {
353
- cwd: root,
354
- env: config.env ? { ...process.env, ...config.env } : process.env,
355
- });
356
- return { process: proc };
357
- },
358
- };
359
- }
360
- // --- Registry Management ---
361
- const EMPTY_CONFIG = {
362
- customServers: [],
363
- disabledServerIds: new Set(),
364
- serverOverrides: new Map(),
365
- };
366
- /** In-flight config initialization promises to prevent duplicate concurrent loads */
367
- const configInFlight = new Map();
368
- function normalizeWorkspacePath(cwd) {
369
- return path.resolve(cwd);
370
- }
371
- function isSameOrChildPath(filePath, candidateRoot) {
372
- if (filePath === candidateRoot)
373
- return true;
374
- return filePath.startsWith(`${candidateRoot}${path.sep}`);
375
- }
376
- function getConfigForFile(filePath) {
377
- const resolvedFilePath = path.resolve(filePath);
378
- let bestMatch;
379
- // #2518: the per-root configs ARE the session-root registry's values, so
380
- // this walk sees a config for exactly the roots that registry still serves.
381
- // `undefined` is a root whose first load is still in flight — the same
382
- // "no entry yet" state this walk skipped before the two stores merged.
383
- for (const [root, config] of sessionRootConfigEntries()) {
384
- if (config === undefined)
385
- continue;
386
- if (!isSameOrChildPath(resolvedFilePath, root))
387
- continue;
388
- if (!bestMatch || root.length > bestMatch.root.length) {
389
- bestMatch = { root, config };
390
- }
391
- }
392
- return bestMatch?.config ?? EMPTY_CONFIG;
393
- }
394
- /**
395
- * THE `LSPConfig` → `RegisteredLSPConfig` conversion: construct the custom
396
- * servers, index the deny list, index the overrides. Pure — it reads no
397
- * module state and writes none.
398
- *
399
- * Extracted from `initLSPConfig`'s body in #2427 review round 3 so that
400
- * `effectiveConfig` can build the config its question needs WITHOUT calling
401
- * `initLSPConfig`. That call was the finding: a read-only query ran a full
402
- * session initialization, which (a) registered the caller's cwd as a served
403
- * session root, widening the #2052 access gate for a tree the session never
404
- * opened, and (b) wrote the per-root config store, which was then a separate
405
- * 32-entry LRU, so ~40 queries against other directories evicted a live root's
406
- * config and silently lifted the operator's `disabledServers` denial — the
407
- * exact inversion the surface promises cannot happen. With the conversion
408
- * spelled here, both writes stop being something the query has to opt out of:
409
- * it never reaches them. (#2518 later removed the second cap by making the
410
- * config the registry's own value; a query that skips the registry still skips
411
- * both.)
412
- *
413
- * Still ONE definition, so the derived config and the session-registered one
414
- * cannot disagree about what a document means.
415
- */
416
- export function registerLSPConfig(config) {
417
- const customServers = [];
418
- const disabledServerIds = new Set(config.disabledServers ?? []);
419
- if (config.servers) {
420
- for (const [id, serverConfig] of Object.entries(config.servers)) {
421
- try {
422
- const server = createCustomServer(serverConfig, id);
423
- customServers.push(server);
424
- }
425
- catch {
426
- // pi-lens-ignore: missing-error-propagation — per-server registration, skip bad entries
427
- }
428
- }
429
- }
430
- const serverOverrides = new Map();
431
- if (config.serverOverrides) {
432
- for (const [id, entry] of Object.entries(config.serverOverrides)) {
433
- if (entry && typeof entry === "object" && !Array.isArray(entry)) {
434
- const initOpts = entry
435
- .initializationOptions;
436
- if (initOpts !== undefined &&
437
- typeof initOpts === "object" &&
438
- initOpts !== null &&
439
- !Array.isArray(initOpts)) {
440
- serverOverrides.set(id, {
441
- initializationOptions: initOpts,
442
- });
443
- }
444
- }
445
- }
446
- }
447
- return { customServers, disabledServerIds, serverOverrides };
448
- }
449
- /**
450
- * Drop the `config_resolved` claim of every root the registry just evicted
451
- * (#2518 review F1).
452
- *
453
- * `recordConfigResolved` claims that row once per (session, root), which is
454
- * right while the resolved config is still in the store: a second
455
- * `loadLSPConfig` for a root already resolved this session re-derives the same
456
- * answer and needs no second row. An EVICTED root is the other case — its
457
- * resolved config is gone, the reload is a genuine second resolution, and its
458
- * row is the only record of what the reloaded config was. Without this release
459
- * the reload publishes a `config_resolution_pending` mark that no row ever
460
- * answers, which reads in the analyzer exactly like a resolution that never
461
- * finished.
462
- *
463
- * Rows stay bounded because evictions do, and evictions are counted:
464
- * `lsp-session-root-evicted` in the degradation ledger.
465
- *
466
- * The release derives its key with {@link configResolutionKey}, the ONE
467
- * expression the claim itself is taken with — not a second normalization that
468
- * happens to match. Round 2 shipped `normalizeFilePath(root)` here against a
469
- * claim keyed on the caller's own `normalizeFilePath(cwd)`, which is the same
470
- * string only when `path.resolve` is the identity on that cwd: a trailing
471
- * slash (what `analysisRoot` from `.pi-lens.json` and the warm paths can pass)
472
- * made the release miss and the reload silent again (review F6).
473
- */
474
- function forgetConfigResolvedClaims(evictedRoots) {
475
- for (const root of evictedRoots) {
476
- releasePhaseClaim(CONFIG_RESOLVED_PHASE, configResolutionKey(root));
477
- }
478
- }
479
- /**
480
- * Initialize LSP configuration (call at session start).
481
- * Deduplicates concurrent calls for the same workspace.
482
- *
483
- * It takes no options on purpose. Every one of its callers is a session
484
- * DECLARING a root it will serve — `ensureLSPConfigInitialized`, `ensureReady`,
485
- * `runtime-session.ts`, `lens-engine.ts` — and a session-start load is exactly
486
- * the caller that must report its config notices. There is no mode in which
487
- * this function runs silently, because there is no caller that is not a
488
- * session (#2427 review round 3).
489
- */
490
- export async function initLSPConfig(cwd) {
491
- const normalizedCwd = normalizeWorkspacePath(cwd);
492
- // #2052: this cwd is now a served session root. Registered BEFORE the
493
- // in-flight dedup return below, so a concurrent duplicate init still
494
- // registers it rather than returning early with the root unrecorded.
495
- forgetConfigResolvedClaims(registerSessionRoot(normalizedCwd));
496
- const existing = configInFlight.get(normalizedCwd);
497
- if (existing)
498
- return existing;
499
- const promise = (async () => {
500
- const config = registerLSPConfig(await loadLSPConfig(cwd, os.homedir()));
501
- forgetConfigResolvedClaims(setSessionRootConfig(normalizedCwd, config));
502
- })();
503
- configInFlight.set(normalizedCwd, promise);
504
- try {
505
- await promise;
506
- }
507
- finally {
508
- // Identity-guarded release (#1968's pattern): delete only if THIS run is
509
- // still the registered one. A bare delete-by-key lets a late-settling run
510
- // evict a live successor a second writer registered under the same cwd
511
- // mid-flight, after which the next caller starts a duplicate config load.
512
- if (configInFlight.get(normalizedCwd) === promise) {
513
- configInFlight.delete(normalizedCwd);
514
- }
515
- }
516
- }
517
- /**
518
- * Every server a workspace knows about, in registry-then-custom order and
519
- * BEFORE any gate is applied.
520
- *
521
- * Spelled once because two callers need the same list for opposite purposes:
522
- * `getAllServers` DROPS the disabled ones, `explainServersForFile` REPORTS
523
- * them. A custom server that only one of the two composed would be a server
524
- * the runtime runs and the introspection cannot see, or the reverse.
525
- */
526
- function registeredServers(config) {
527
- return [...LSP_SERVERS, ...config.customServers];
528
- }
529
- /**
530
- * Get all available servers (built-in + custom, minus disabled)
531
- */
532
- export function getAllServers(filePath) {
533
- const config = filePath ? getConfigForFile(filePath) : EMPTY_CONFIG;
534
- return registeredServers(config).filter((s) => !config.disabledServerIds.has(s.id));
535
- }
536
- /**
537
- * Check if a server is disabled
538
- */
539
- export function isServerDisabled(serverId, filePath) {
540
- const config = filePath ? getConfigForFile(filePath) : EMPTY_CONFIG;
541
- return config.disabledServerIds.has(serverId);
542
- }
543
- /**
544
- * THE server-selection gate: why this server does or does not attach to this
545
- * file (#2427).
546
- *
547
- * One evaluation, two projections. `getServersForFileWithConfig` asks it for a
548
- * verdict and `explainServersForFile` asks it for a reason; before #2427 the
549
- * verdict lived here and the reason did not exist, so answering "why is server
550
- * X not running" meant re-implementing these three gates at the asking site —
551
- * a second copy of a filter is a copy that drifts, which is what AGENTS.md's
552
- * single-source-of-truth rule forbids.
553
- *
554
- * Returning a REASON rather than a boolean is also what keeps the verdict path
555
- * allocation-free: `getServersForFileWithConfig` runs per file on the dispatch
556
- * and cascade paths, and materializing one decision object per registered
557
- * server per call would put ~46 short-lived objects on a hot path to serve a
558
- * question only the introspection surface asks.
559
- *
560
- * Gate order is the ANSWER order, not just an implementation detail: a server
561
- * the operator disabled reports `disabled-by-config` even when the file's
562
- * extension would not have matched it anyway, because "you turned it off" is
563
- * the fact the asker can act on.
564
- */
565
- function selectionReason(server, config, filePath, ext, base) {
566
- if (config.disabledServerIds.has(server.id))
567
- return "disabled-by-config";
568
- let matched = false;
569
- for (const value of server.extensions) {
570
- const lower = value.toLowerCase();
571
- if (lower === ext || lower === base) {
572
- matched = true;
573
- break;
574
- }
575
- }
576
- if (!matched)
577
- return "extension-mismatch";
578
- // #636: a server's extension match can be intentionally broader than what
579
- // it can usefully act on (zizmor attaches to "yaml" but only ever reports
580
- // on GitHub Actions workflow/action/dependabot paths). `pathFilter`, when
581
- // present, is an ADDITIONAL narrowing gate — never a widening one.
582
- if (server.pathFilter && !server.pathFilter(filePath))
583
- return "path-filter";
584
- return "selected";
585
- }
586
- /**
587
- * Every registered server's decision for a file, with the reason for each.
588
- *
589
- * `config` defaults to the SESSION's registered config for the file's tree —
590
- * what the runtime would actually use. An explicit one is for a caller that
591
- * must not touch session state to ask: `effectiveConfig` derives its own from
592
- * `loadLSPConfig(..., { report: false })` rather than initializing the
593
- * workspace (#2427 review round 3). Both spellings run the identical gate, and
594
- * `tests/clients/effective-config.test.ts` pins them equal for the same cwd.
595
- */
596
- export function explainServersForFile(filePath, config = getConfigForFile(filePath)) {
597
- const ext = path.extname(filePath).toLowerCase();
598
- const base = path.basename(filePath).toLowerCase();
599
- return registeredServers(config).map((server) => {
600
- const reason = selectionReason(server, config, filePath, ext, base);
601
- return { server, selected: reason === "selected", reason };
602
- });
603
- }
604
- export function getServersForFileWithConfig(filePath) {
605
- const config = getConfigForFile(filePath);
606
- const ext = path.extname(filePath).toLowerCase();
607
- const base = path.basename(filePath).toLowerCase();
608
- return registeredServers(config).filter((server) => selectionReason(server, config, filePath, ext, base) === "selected");
609
- }
610
- /**
611
- * The primary language server ENTRY for a file — the one "first non-auxiliary
612
- * server" predicate, shared by {@link primaryServerId} and
613
- * {@link resolveLspCwdForFile} so the id-level and entry-level consumers
614
- * cannot drift. `role` is only ever set to "auxiliary" on cross-cutting
615
- * scanner entries (ast-grep, opengrep, zizmor, typos, marksman, ...) — see
616
- * clients/lsp/server.ts; undefined here means a real language server.
617
- */
618
- function primaryServerEntry(filePath) {
619
- return getServersForFileWithConfig(filePath).find((s) => s.role !== "auxiliary");
620
- }
621
- /**
622
- * The primary language server for a file (e.g. "typescript"), as opposed to a
623
- * cross-cutting auxiliary scanner attached via clientScope "all"/
624
- * "with-auxiliary" (ast-grep, opengrep, zizmor, typos, marksman, ...). Used to
625
- * split a file's diagnostics into "primary confirmation" vs "auxiliary
626
- * findings" so a page of ast-grep/opengrep/marksman noise never buries
627
- * whether the actual type checker/compiler confirmed the file clean.
628
- *
629
- * #646: extracted from `tools/lsp-diagnostics.ts` (where it originated) so
630
- * `tools/lens-diagnostics.ts`'s `mode=full` sweep can share the exact same
631
- * primary/auxiliary classification instead of hand-copying it — both tools
632
- * now report the same primary-vs-auxiliary split for the same file.
633
- */
634
- export function primaryServerId(filePath) {
635
- return primaryServerEntry(filePath)?.id;
636
- }
637
- /**
638
- * #2777 O1: the one seam a tool uses to answer "which cwd did this file's
639
- * primary LSP server resolve to". Folds the three-step lookup callers used to
640
- * hand-roll (`primaryServerId` + `getServersForFileWithConfig` +
641
- * `resolveLspServerCwd`) into one call that returns `undefined` for a file
642
- * with no primary LSP server, so the caller must handle the absent case
643
- * instead of rendering it (the N1 `cwd=undefined` row becomes structurally
644
- * impossible).
645
- */
646
- export async function resolveLspCwdForFile(filePath, sessionCwd) {
647
- const primary = primaryServerEntry(filePath);
648
- if (!primary)
649
- return undefined;
650
- return resolveLspServerCwd(primary, filePath, sessionCwd);
651
- }
652
- /**
653
- * Look up an initializationOptions override for a built-in server.
654
- * Returns undefined when no config was loaded or no override was specified
655
- * for this server ID.
656
- *
657
- * @param serverId Built-in server id (e.g. "rust", "nix", "bash")
658
- * @param filePath Any file path within the project (used to locate the
659
- * workspace config that was loaded for this directory tree)
660
- */
661
- export function getServerInitOverride(serverId, filePath) {
662
- return getConfigForFile(filePath).serverOverrides.get(serverId);
663
- }
664
- export function resetLSPConfigStateForTests() {
665
- resetLSPCaseSensitivityState();
666
- // One call clears both the served roots and their configs: since #2518 they
667
- // are one store, so a reset cannot leave a cleared config store beside a
668
- // live session-root registry declining files for roots nothing can serve.
669
- resetSessionRootsForTests();
670
- // The warn latch is loader state too: a test that re-reads the same broken
671
- // path after this reset must see the warning again, not a latched silence.
672
- resetLSPConfigWarnCache();
673
- // #2526: same reasoning for the per-session `config_resolved` claim — a
674
- // test that resolves again after this reset must produce its record, not
675
- // inherit a previous test's "already recorded" claim. Narrowed to THIS
676
- // loader's own phase (review round 2, S1): the blanket
677
- // `resetOncePerSessionPhases()` this used to call is the SESSION boundary's
678
- // call to make — it also re-mints the session identity — and reaching for
679
- // it from one producer's test reset cleared claims this module does not own.
680
- releaseOncePerSessionPhase(CONFIG_RESOLVED_PHASE);
681
- }
682
- /**
683
- * Test hook — read the `initLSPConfig` in-flight map directly (#1968's ABA
684
- * regression: a second writer replacing an entry mid-flight, then a
685
- * late-settling first run evicting it with a bare delete-by-key).
686
- */
687
- export function _peekConfigInFlightForTests() {
688
- return configInFlight;
689
- }
690
- // Re-export with config support
691
- export { getAllServers as getServersForFile };