@herbertgao/pi-extensions 2026.10.0 → 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 (769) hide show
  1. package/README.md +16 -12
  2. package/THIRD_PARTY_NOTICES.md +3 -3
  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/.opencode/plugins/index.js +4 -0
  10. package/node_modules/@dietrichgebert/ponytail/.opencode/plugins/ponytail-frontmatter.cjs +43 -3
  11. package/node_modules/@dietrichgebert/ponytail/.opencode/plugins/ponytail.mjs +142 -59
  12. package/node_modules/@dietrichgebert/ponytail/.qoder/rules/ponytail.md +21 -21
  13. package/node_modules/@dietrichgebert/ponytail/.qoder-plugin/plugin.json +1 -1
  14. package/node_modules/@dietrichgebert/ponytail/AGENTS.md +21 -21
  15. package/node_modules/@dietrichgebert/ponytail/README.md +52 -242
  16. package/node_modules/@dietrichgebert/ponytail/hooks/claude-codex-hooks.json +3 -3
  17. package/node_modules/@dietrichgebert/ponytail/hooks/copilot-hooks.json +4 -4
  18. package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-activate.js +70 -16
  19. package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-config.js +8 -7
  20. package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-instructions.js +30 -30
  21. package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-map.js +103 -0
  22. package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-mode-tracker.js +46 -23
  23. package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-runtime.js +39 -7
  24. package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-subagent.js +20 -3
  25. package/node_modules/@dietrichgebert/ponytail/hooks/qoder-hooks.json +3 -3
  26. package/node_modules/@dietrichgebert/ponytail/package.json +3 -3
  27. package/node_modules/@dietrichgebert/ponytail/pi-extension/index.js +47 -17
  28. package/node_modules/@dietrichgebert/ponytail/scripts/uninstall.js +21 -7
  29. package/node_modules/@dietrichgebert/ponytail/skills/plugin.json +5 -0
  30. package/node_modules/@dietrichgebert/ponytail/skills/ponytail/SKILL.md +33 -101
  31. package/node_modules/@dietrichgebert/ponytail/skills/ponytail-audit/SKILL.md +89 -27
  32. package/node_modules/@dietrichgebert/ponytail/skills/ponytail-debt/SKILL.md +13 -12
  33. package/node_modules/@dietrichgebert/ponytail/skills/ponytail-gain/SKILL.md +21 -18
  34. package/node_modules/@dietrichgebert/ponytail/skills/ponytail-help/SKILL.md +12 -13
  35. package/node_modules/@dietrichgebert/ponytail/skills/ponytail-review/SKILL.md +96 -52
  36. package/node_modules/@herbertgao/pi-agency/LICENSE +21 -0
  37. package/node_modules/@herbertgao/pi-agency/README.md +40 -0
  38. package/node_modules/@herbertgao/pi-agency/package.json +53 -0
  39. package/node_modules/@herbertgao/pi-agency/src/index.ts +441 -0
  40. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/compact-thinking.ts +12 -12
  41. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/compact-mode.ts +30 -6
  42. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/default-mode.ts +15 -9
  43. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/interaction.ts +27 -9
  44. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/codemode.ts +4 -1
  45. package/node_modules/@herbertgao/pi-cc-extensions/package.json +2 -2
  46. package/node_modules/@narumitw/pi-caffeinate/package.json +4 -4
  47. package/node_modules/@tifan/pi-mermaid-open/package.json +5 -1
  48. package/node_modules/@tifan/pi-mermaid-open/src/index.ts +26 -9
  49. package/node_modules/@tifan/pi-recap/package.json +1 -1
  50. package/node_modules/@tifan/pi-recap/src/index.ts +104 -20
  51. package/node_modules/@tifan/pi-recap/src/models.ts +46 -4
  52. package/node_modules/pi-antigravity/README.md +23 -2
  53. package/node_modules/pi-antigravity/package.json +5 -3
  54. package/node_modules/pi-antigravity/src/diagnostics/diagnostics.ts +3 -2
  55. package/node_modules/pi-antigravity/src/features/generate-image.ts +72 -0
  56. package/node_modules/pi-antigravity/src/features/google-search.ts +71 -0
  57. package/node_modules/pi-antigravity/src/image/image.ts +86 -47
  58. package/node_modules/pi-antigravity/src/image/native.ts +69 -0
  59. package/node_modules/pi-antigravity/src/index.ts +52 -137
  60. package/node_modules/pi-antigravity/src/search/search.ts +130 -31
  61. package/node_modules/pi-antigravity/src/stream/stream.ts +162 -113
  62. package/node_modules/pi-antigravity/src/types/enums.ts +1 -0
  63. package/node_modules/pi-antigravity/src/types/types.ts +1 -1
  64. package/node_modules/pi-antigravity/src/utils/security.ts +47 -1
  65. package/node_modules/pi-antigravity/src/utils/util.ts +38 -6
  66. package/node_modules/pi-lens/CHANGELOG.md +1064 -0
  67. package/node_modules/pi-lens/README.md +115 -25
  68. package/node_modules/pi-lens/config/dependency-cruiser-eager-allowlist.json +6 -2
  69. package/node_modules/pi-lens/dist/chunk-22AVIGXS.js +560 -0
  70. package/node_modules/pi-lens/dist/chunk-27BBHSZC.js +106 -0
  71. package/node_modules/pi-lens/dist/chunk-2BEMIWEW.js +51 -0
  72. package/node_modules/pi-lens/dist/chunk-2EECBNC5.js +89 -0
  73. package/node_modules/pi-lens/dist/chunk-34U7PLGE.js +23 -0
  74. package/node_modules/pi-lens/dist/chunk-3I5QFT3N.js +181 -0
  75. package/node_modules/pi-lens/dist/chunk-3MED75HT.js +37 -0
  76. package/node_modules/pi-lens/dist/chunk-47D2BO4S.js +87 -0
  77. package/node_modules/pi-lens/dist/chunk-4RERDEXR.js +348 -0
  78. package/node_modules/pi-lens/dist/chunk-4W2PLC4J.js +27 -0
  79. package/node_modules/pi-lens/dist/chunk-52H5B5TC.js +202 -0
  80. package/node_modules/pi-lens/dist/chunk-54B42YRX.js +27 -0
  81. package/node_modules/pi-lens/dist/chunk-5RXBNSW2.js +266 -0
  82. package/node_modules/pi-lens/dist/chunk-5THXD6X5.js +201 -0
  83. package/node_modules/pi-lens/dist/chunk-5W3R6LFT.js +24 -0
  84. package/node_modules/pi-lens/dist/chunk-5ZEJHV35.js +341 -0
  85. package/node_modules/pi-lens/dist/chunk-6P62QVEA.js +118 -0
  86. package/node_modules/pi-lens/dist/chunk-6QIUX4EP.js +459 -0
  87. package/node_modules/pi-lens/dist/chunk-6VCD4VKZ.js +78 -0
  88. package/node_modules/pi-lens/dist/chunk-7F72PXY2.js +326 -0
  89. package/node_modules/pi-lens/dist/chunk-7FBF7NPR.js +998 -0
  90. package/node_modules/pi-lens/dist/chunk-7U2IDNXN.js +37 -0
  91. package/node_modules/pi-lens/dist/chunk-ABBOA7UD.js +157 -0
  92. package/node_modules/pi-lens/dist/chunk-AHDW3GPE.js +50 -0
  93. package/node_modules/pi-lens/dist/chunk-AJ3QXTRQ.js +756 -0
  94. package/node_modules/pi-lens/dist/chunk-AJVLWNFN.js +1610 -0
  95. package/node_modules/pi-lens/dist/chunk-AJXODZY6.js +112 -0
  96. package/node_modules/pi-lens/dist/chunk-ARFCXG7S.js +84 -0
  97. package/node_modules/pi-lens/dist/chunk-AS44CFQ4.js +708 -0
  98. package/node_modules/pi-lens/dist/chunk-AWE5TMPO.js +38 -0
  99. package/node_modules/pi-lens/dist/chunk-B3I2UUT4.js +4692 -0
  100. package/node_modules/pi-lens/dist/chunk-BRJKOBZP.js +331 -0
  101. package/node_modules/pi-lens/dist/chunk-BW5KFIQC.js +59 -0
  102. package/node_modules/pi-lens/dist/chunk-C2AUYXQH.js +149 -0
  103. package/node_modules/pi-lens/dist/chunk-CGGAIP7J.js +29 -0
  104. package/node_modules/pi-lens/dist/chunk-D6QS3U6M.js +30 -0
  105. package/node_modules/pi-lens/dist/chunk-DFVMIKMQ.js +349 -0
  106. package/node_modules/pi-lens/dist/chunk-DIULIWKU.js +169 -0
  107. package/node_modules/pi-lens/dist/chunk-DQ2NZ7C4.js +2317 -0
  108. package/node_modules/pi-lens/dist/chunk-E2WFBRHM.js +213 -0
  109. package/node_modules/pi-lens/dist/chunk-E4MAEDPM.js +50 -0
  110. package/node_modules/pi-lens/dist/chunk-EOKRQ3SA.js +30 -0
  111. package/node_modules/pi-lens/dist/chunk-F3AU2TMM.js +2626 -0
  112. package/node_modules/pi-lens/dist/chunk-F3P7VQ7H.js +170 -0
  113. package/node_modules/pi-lens/dist/chunk-FC4RP4I2.js +12 -0
  114. package/node_modules/pi-lens/dist/chunk-FJNKANOS.js +32 -0
  115. package/node_modules/pi-lens/dist/chunk-GUOGVTCQ.js +146 -0
  116. package/node_modules/pi-lens/dist/chunk-GVXA6CCE.js +18 -0
  117. package/node_modules/pi-lens/dist/chunk-HHYAELLJ.js +2334 -0
  118. package/node_modules/pi-lens/dist/chunk-HMFXILPV.js +83 -0
  119. package/node_modules/pi-lens/dist/chunk-HVUZXSWK.js +421 -0
  120. package/node_modules/pi-lens/dist/chunk-HWBZIGMJ.js +62 -0
  121. package/node_modules/pi-lens/dist/chunk-I3R7GKDR.js +17 -0
  122. package/node_modules/pi-lens/dist/chunk-I7SPGOWI.js +55 -0
  123. package/node_modules/pi-lens/dist/chunk-IIXOAGHR.js +38 -0
  124. package/node_modules/pi-lens/dist/chunk-IVP5KAB7.js +2250 -0
  125. package/node_modules/pi-lens/dist/chunk-IXEBJSUE.js +22 -0
  126. package/node_modules/pi-lens/dist/chunk-JOLITGCC.js +27 -0
  127. package/node_modules/pi-lens/dist/chunk-K6VYLB2U.js +145 -0
  128. package/node_modules/pi-lens/dist/chunk-LJDODBBZ.js +78 -0
  129. package/node_modules/pi-lens/dist/chunk-LNAKEO63.js +78 -0
  130. package/node_modules/pi-lens/dist/chunk-LSMJ6KBE.js +4139 -0
  131. package/node_modules/pi-lens/dist/chunk-LW6XKDZQ.js +5565 -0
  132. package/node_modules/pi-lens/dist/chunk-N3YQJI6O.js +899 -0
  133. package/node_modules/pi-lens/dist/chunk-NABLC7W3.js +148 -0
  134. package/node_modules/pi-lens/dist/chunk-NKOUFPQF.js +659 -0
  135. package/node_modules/pi-lens/dist/chunk-NL5GLMFI.js +211 -0
  136. package/node_modules/pi-lens/dist/chunk-NMABWBZN.js +327 -0
  137. package/node_modules/pi-lens/dist/chunk-NTHH2J74.js +27 -0
  138. package/node_modules/pi-lens/dist/chunk-NTUJEGDZ.js +59 -0
  139. package/node_modules/pi-lens/dist/chunk-NXL4FFQQ.js +47 -0
  140. package/node_modules/pi-lens/dist/chunk-NXPS2L6U.js +466 -0
  141. package/node_modules/pi-lens/dist/chunk-O5WILGMI.js +42 -0
  142. package/node_modules/pi-lens/dist/chunk-O6TQT6RI.js +48 -0
  143. package/node_modules/pi-lens/dist/chunk-OAXNDZJ7.js +323 -0
  144. package/node_modules/pi-lens/dist/chunk-ODEEOXPH.js +44 -0
  145. package/node_modules/pi-lens/dist/chunk-OQGFCZJ4.js +4533 -0
  146. package/node_modules/pi-lens/dist/chunk-ORTMY4Q4.js +282 -0
  147. package/node_modules/pi-lens/dist/chunk-OS32RNR2.js +442 -0
  148. package/node_modules/pi-lens/dist/chunk-PAK6IDME.js +189 -0
  149. package/node_modules/pi-lens/dist/chunk-PWFHBTSF.js +406 -0
  150. package/node_modules/pi-lens/dist/chunk-Q5U6FMDI.js +2352 -0
  151. package/node_modules/pi-lens/dist/chunk-QOZXJ4NA.js +3364 -0
  152. package/node_modules/pi-lens/dist/chunk-QYF5S6P6.js +45 -0
  153. package/node_modules/pi-lens/dist/chunk-RIISMHKN.js +36 -0
  154. package/node_modules/pi-lens/dist/chunk-RPD4ZSB7.js +25 -0
  155. package/node_modules/pi-lens/dist/chunk-RPD5K5NC.js +79 -0
  156. package/node_modules/pi-lens/dist/chunk-RUOG5D2C.js +262 -0
  157. package/node_modules/pi-lens/dist/chunk-T4ERT73Y.js +599 -0
  158. package/node_modules/pi-lens/dist/chunk-T6D4Q4AQ.js +54 -0
  159. package/node_modules/pi-lens/dist/chunk-TGPXLY2J.js +391 -0
  160. package/node_modules/pi-lens/dist/chunk-TLGFBM3F.js +12116 -0
  161. package/node_modules/pi-lens/dist/chunk-TO6WL3GM.js +88 -0
  162. package/node_modules/pi-lens/dist/chunk-TT22N74J.js +517 -0
  163. package/node_modules/pi-lens/dist/chunk-TVN5N6GY.js +21216 -0
  164. package/node_modules/pi-lens/dist/chunk-U3VGR4VU.js +308 -0
  165. package/node_modules/pi-lens/dist/chunk-UK3CMEAL.js +1250 -0
  166. package/node_modules/pi-lens/dist/chunk-UOPVJQ4N.js +103 -0
  167. package/node_modules/pi-lens/dist/chunk-UXVNL3D7.js +23 -0
  168. package/node_modules/pi-lens/dist/chunk-UY752QSN.js +45 -0
  169. package/node_modules/pi-lens/dist/chunk-V5PXFSZK.js +188 -0
  170. package/node_modules/pi-lens/dist/chunk-V7R425XG.js +398 -0
  171. package/node_modules/pi-lens/dist/chunk-VCSRSYLF.js +81 -0
  172. package/node_modules/pi-lens/dist/chunk-VD4JQCQC.js +162 -0
  173. package/node_modules/pi-lens/dist/chunk-VDBPVIKD.js +62 -0
  174. package/node_modules/pi-lens/dist/chunk-VHQLPIRJ.js +114 -0
  175. package/node_modules/pi-lens/dist/chunk-VN2AXLEX.js +5414 -0
  176. package/node_modules/pi-lens/dist/chunk-VNMT7C64.js +478 -0
  177. package/node_modules/pi-lens/dist/chunk-WONERJTP.js +309 -0
  178. package/node_modules/pi-lens/dist/chunk-XECLWQZN.js +85 -0
  179. package/node_modules/pi-lens/dist/chunk-XIMYZ3JA.js +27 -0
  180. package/node_modules/pi-lens/dist/chunk-XK4CIILI.js +144 -0
  181. package/node_modules/pi-lens/dist/chunk-Y4T27COV.js +562 -0
  182. package/node_modules/pi-lens/dist/chunk-YGVYKNSN.js +1860 -0
  183. package/node_modules/pi-lens/dist/chunk-YLF3PPT5.js +308 -0
  184. package/node_modules/pi-lens/dist/chunk-YSNFMJKN.js +14 -0
  185. package/node_modules/pi-lens/dist/chunk-Z3CCVDUB.js +76 -0
  186. package/node_modules/pi-lens/dist/chunk-Z54ZSOBZ.js +61 -0
  187. package/node_modules/pi-lens/dist/chunk-ZAWW3AF6.js +97 -0
  188. package/node_modules/pi-lens/dist/chunk-ZMOL6RQC.js +167 -0
  189. package/node_modules/pi-lens/dist/index.js +16456 -8335
  190. package/node_modules/pi-lens/dist/mcp/analyze-cli.js +186 -232
  191. package/node_modules/pi-lens/dist/mcp/cli.js +137 -98
  192. package/node_modules/pi-lens/dist/mcp/server.js +22589 -1573
  193. package/node_modules/pi-lens/dist/mcp/worker.js +97 -38
  194. package/node_modules/pi-lens/dist/probes/installer.js +135 -0
  195. package/node_modules/pi-lens/dist/workers/project-snapshot-persist-worker.js +22 -0
  196. package/node_modules/pi-lens/dist/workers/review-graph-persist-worker.js +15 -0
  197. package/node_modules/pi-lens/docs/agent-guide.md +13 -4
  198. package/node_modules/pi-lens/docs/agent-tools.md +42 -0
  199. package/node_modules/pi-lens/docs/ast-grep_rules_catalog.md +3 -2
  200. package/node_modules/pi-lens/docs/configuration.md +20 -1
  201. package/node_modules/pi-lens/docs/environment-variables.md +52 -2
  202. package/node_modules/pi-lens/docs/features.md +8 -4
  203. package/node_modules/pi-lens/docs/globalconfig.md +1 -0
  204. package/node_modules/pi-lens/docs/io-bridge-v2-migration.md +94 -0
  205. package/node_modules/pi-lens/docs/lsp-capability-matrix.md +36 -4
  206. package/node_modules/pi-lens/docs/lsp-idle-eviction.md +124 -0
  207. package/node_modules/pi-lens/docs/mcp.md +21 -5
  208. package/node_modules/pi-lens/docs/merge-queue-rollout.md +77 -0
  209. package/node_modules/pi-lens/docs/pi-lens-fixer.md +156 -88
  210. package/node_modules/pi-lens/docs/pi-lens-investigator.md +74 -26
  211. package/node_modules/pi-lens/docs/pi-lens-merge-policy.md +694 -0
  212. package/node_modules/pi-lens/docs/pi-lens-monitor.md +73 -7
  213. package/node_modules/pi-lens/docs/pi-lens-retro.md +6 -4
  214. package/node_modules/pi-lens/docs/pi-lens-reviewer.md +188 -48
  215. package/node_modules/pi-lens/docs/pi-lens-subagent.md +246 -45
  216. package/node_modules/pi-lens/docs/pi-lens-warden.md +18 -7
  217. package/node_modules/pi-lens/docs/public-api-stability.md +55 -0
  218. package/node_modules/pi-lens/docs/release-qa-baseline.md +84 -17
  219. package/node_modules/pi-lens/docs/rfcs/3654-unified-io-bridge-v2.md +316 -0
  220. package/node_modules/pi-lens/docs/servercapabilities.md +53 -49
  221. package/node_modules/pi-lens/docs/settings.md +1 -0
  222. package/node_modules/pi-lens/docs/usage.md +5 -1
  223. package/node_modules/pi-lens/grammars/tree-sitter-bash.wasm +0 -0
  224. package/node_modules/pi-lens/grammars/tree-sitter-bash.wasm.json +3 -3
  225. package/node_modules/pi-lens/package.json +18 -6
  226. package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/advisory-registry-subset-test.yml +41 -0
  227. package/node_modules/pi-lens/rules/ast-grep-rules/rules/advisory-registry-subset.yml +50 -0
  228. package/node_modules/pi-lens/scripts/analyze-pi-lens-logs.mjs +1275 -62
  229. package/node_modules/pi-lens/scripts/download-grammars.js +5 -0
  230. package/node_modules/pi-lens/scripts/grammars.lock.json +6 -1
  231. package/node_modules/pi-lens/scripts/install-selftest.mjs +33 -34
  232. package/node_modules/pi-lens/scripts/lib/host-provided-deps.mjs +13 -4
  233. package/node_modules/pi-lens/scripts/lib/web-tree-sitter-dir.mjs +18 -0
  234. package/node_modules/pi-typesafe/README.md +1 -1
  235. package/node_modules/pi-typesafe/dist/backends.d.ts +15 -5
  236. package/node_modules/pi-typesafe/dist/backends.js +18 -0
  237. package/node_modules/pi-typesafe/dist/client.d.ts +4 -3
  238. package/node_modules/pi-typesafe/dist/client.js +22 -7
  239. package/node_modules/pi-typesafe/dist/index.d.ts +2 -2
  240. package/node_modules/pi-typesafe/dist/index.js +1 -1
  241. package/node_modules/pi-typesafe/dist/usage.d.ts +14 -4
  242. package/node_modules/pi-typesafe/dist/usage.js +147 -42
  243. package/node_modules/pi-typesafe/package.json +1 -1
  244. package/node_modules/pi-web-access/CHANGELOG.md +48 -0
  245. package/node_modules/pi-web-access/README.md +57 -11
  246. package/node_modules/pi-web-access/brave-rate-limit.ts +8 -2
  247. package/node_modules/pi-web-access/curator-page.ts +5 -1
  248. package/node_modules/pi-web-access/curator-server.ts +2 -0
  249. package/node_modules/pi-web-access/declared-web-links.ts +2 -2
  250. package/node_modules/pi-web-access/degoog.ts +323 -0
  251. package/node_modules/pi-web-access/dist/index.js +3483 -2745
  252. package/node_modules/pi-web-access/dist/mcp-cli.js +27443 -0
  253. package/node_modules/pi-web-access/exa.ts +5 -1
  254. package/node_modules/pi-web-access/extract.ts +41 -3
  255. package/node_modules/pi-web-access/firecrawl.ts +35 -4
  256. package/node_modules/pi-web-access/gemini-search.ts +34 -11
  257. package/node_modules/pi-web-access/gemini-web.ts +14 -9
  258. package/node_modules/pi-web-access/index.ts +153 -1202
  259. package/node_modules/pi-web-access/keenable.ts +221 -0
  260. package/node_modules/pi-web-access/mcp-cli.ts +40 -0
  261. package/node_modules/pi-web-access/mcp-server.ts +81 -0
  262. package/node_modules/pi-web-access/mcp-tool-definitions.ts +117 -0
  263. package/node_modules/pi-web-access/openai-search.ts +34 -1
  264. package/node_modules/pi-web-access/package.json +23 -5
  265. package/node_modules/pi-web-access/perplexity.ts +64 -56
  266. package/node_modules/pi-web-access/tool-arguments.ts +20 -0
  267. package/node_modules/pi-web-access/video-extract.ts +1 -1
  268. package/node_modules/pi-web-access/web-tool-contract.ts +86 -0
  269. package/node_modules/pi-web-access/web-tool-core.ts +1502 -0
  270. package/node_modules/pi-web-access/youtube-extract.ts +2 -5
  271. package/package.json +17 -12
  272. package/node_modules/@dietrichgebert/ponytail/README.es.md +0 -329
  273. package/node_modules/@dietrichgebert/ponytail/README.ko.md +0 -346
  274. package/node_modules/@dietrichgebert/ponytail/assets/benchmark-3model.svg +0 -21
  275. package/node_modules/@dietrichgebert/ponytail/assets/benchmark-agentic.svg +0 -62
  276. package/node_modules/@dietrichgebert/ponytail/assets/logo-dark.png +0 -0
  277. package/node_modules/@dietrichgebert/ponytail/assets/logo-dark.svg +0 -115
  278. package/node_modules/@dietrichgebert/ponytail/assets/logo-greenpt-dark.svg +0 -27
  279. package/node_modules/@dietrichgebert/ponytail/assets/logo-greenpt.svg +0 -27
  280. package/node_modules/@dietrichgebert/ponytail/assets/logo.png +0 -0
  281. package/node_modules/@dietrichgebert/ponytail/assets/retriever-icon.png +0 -0
  282. package/node_modules/@dietrichgebert/ponytail/assets/retriever-logo-dark.svg +0 -4
  283. package/node_modules/@dietrichgebert/ponytail/assets/retriever-logo-light.svg +0 -4
  284. package/node_modules/@dietrichgebert/ponytail/assets/social-preview.png +0 -0
  285. package/node_modules/@dietrichgebert/ponytail/assets/waitlist-banner-es.png +0 -0
  286. package/node_modules/@dietrichgebert/ponytail/assets/waitlist-banner-ko.png +0 -0
  287. package/node_modules/@dietrichgebert/ponytail/assets/waitlist-banner.png +0 -0
  288. package/node_modules/pi-lens/dist/clients/actionable-warnings-logger.js +0 -35
  289. package/node_modules/pi-lens/dist/clients/actionable-warnings.js +0 -1610
  290. package/node_modules/pi-lens/dist/clients/advisory-provenance.js +0 -593
  291. package/node_modules/pi-lens/dist/clients/agent-behavior-client.js +0 -147
  292. package/node_modules/pi-lens/dist/clients/agent-nudge.js +0 -325
  293. package/node_modules/pi-lens/dist/clients/analysed-root.js +0 -1
  294. package/node_modules/pi-lens/dist/clients/ast-grep-client.js +0 -731
  295. package/node_modules/pi-lens/dist/clients/ast-grep-rule-manager.js +0 -146
  296. package/node_modules/pi-lens/dist/clients/ast-grep-tool-logger.js +0 -118
  297. package/node_modules/pi-lens/dist/clients/ast-grep-types.js +0 -10
  298. package/node_modules/pi-lens/dist/clients/ast-grep-yaml-synth.js +0 -154
  299. package/node_modules/pi-lens/dist/clients/atomic-write-staging.js +0 -75
  300. package/node_modules/pi-lens/dist/clients/atomic-write.js +0 -189
  301. package/node_modules/pi-lens/dist/clients/availability-probe-flight.js +0 -12
  302. package/node_modules/pi-lens/dist/clients/bash-file-access.js +0 -1056
  303. package/node_modules/pi-lens/dist/clients/biome-client.js +0 -357
  304. package/node_modules/pi-lens/dist/clients/blocker-freshness.js +0 -837
  305. package/node_modules/pi-lens/dist/clients/blocker-past-eof.js +0 -129
  306. package/node_modules/pi-lens/dist/clients/bootstrap.js +0 -569
  307. package/node_modules/pi-lens/dist/clients/bounded-cache.js +0 -190
  308. package/node_modules/pi-lens/dist/clients/bounded-pid-file-lock.js +0 -202
  309. package/node_modules/pi-lens/dist/clients/bounded-telemetry.js +0 -295
  310. package/node_modules/pi-lens/dist/clients/build-identity.js +0 -95
  311. package/node_modules/pi-lens/dist/clients/bundled-resource-health.js +0 -113
  312. package/node_modules/pi-lens/dist/clients/bus-events-logger.js +0 -105
  313. package/node_modules/pi-lens/dist/clients/bus-publish.js +0 -171
  314. package/node_modules/pi-lens/dist/clients/cache/rule-cache.js +0 -190
  315. package/node_modules/pi-lens/dist/clients/cache-manager.js +0 -524
  316. package/node_modules/pi-lens/dist/clients/cache-observability.js +0 -1313
  317. package/node_modules/pi-lens/dist/clients/call-graph.js +0 -852
  318. package/node_modules/pi-lens/dist/clients/cargo-manifest.js +0 -422
  319. package/node_modules/pi-lens/dist/clients/cascade-budget.js +0 -196
  320. package/node_modules/pi-lens/dist/clients/cascade-format.js +0 -315
  321. package/node_modules/pi-lens/dist/clients/cascade-logger.js +0 -31
  322. package/node_modules/pi-lens/dist/clients/cascade-types.js +0 -9
  323. package/node_modules/pi-lens/dist/clients/child-unref.js +0 -124
  324. package/node_modules/pi-lens/dist/clients/code-quality-warnings.js +0 -286
  325. package/node_modules/pi-lens/dist/clients/codebase-model.js +0 -173
  326. package/node_modules/pi-lens/dist/clients/collateral-test-role.js +0 -40
  327. package/node_modules/pi-lens/dist/clients/complexity-client.js +0 -462
  328. package/node_modules/pi-lens/dist/clients/config-core/deny.js +0 -221
  329. package/node_modules/pi-lens/dist/clients/config-core/index.js +0 -50
  330. package/node_modules/pi-lens/dist/clients/config-core/merge.js +0 -357
  331. package/node_modules/pi-lens/dist/clients/config-core/normalize.js +0 -340
  332. package/node_modules/pi-lens/dist/clients/config-core/process-spec.js +0 -248
  333. package/node_modules/pi-lens/dist/clients/config-core/provenance.js +0 -164
  334. package/node_modules/pi-lens/dist/clients/config-core/records.js +0 -218
  335. package/node_modules/pi-lens/dist/clients/config-core/resolve.js +0 -125
  336. package/node_modules/pi-lens/dist/clients/config-core/safe-object.js +0 -78
  337. package/node_modules/pi-lens/dist/clients/config-core/schema.js +0 -165
  338. package/node_modules/pi-lens/dist/clients/config-diagnostic-codes.js +0 -285
  339. package/node_modules/pi-lens/dist/clients/config-locations.js +0 -388
  340. package/node_modules/pi-lens/dist/clients/config-resolve.js +0 -798
  341. package/node_modules/pi-lens/dist/clients/config-schema.js +0 -251
  342. package/node_modules/pi-lens/dist/clients/config-warn.js +0 -407
  343. package/node_modules/pi-lens/dist/clients/console-guard-install.js +0 -26
  344. package/node_modules/pi-lens/dist/clients/cooperative-budget.js +0 -42
  345. package/node_modules/pi-lens/dist/clients/dead-code-client.js +0 -510
  346. package/node_modules/pi-lens/dist/clients/dead-code-logger.js +0 -30
  347. package/node_modules/pi-lens/dist/clients/deadline-utils.js +0 -280
  348. package/node_modules/pi-lens/dist/clients/debug-handles.js +0 -211
  349. package/node_modules/pi-lens/dist/clients/debug-heap.js +0 -174
  350. package/node_modules/pi-lens/dist/clients/deferred-lsp-work.js +0 -106
  351. package/node_modules/pi-lens/dist/clients/degradation-ledger.js +0 -426
  352. package/node_modules/pi-lens/dist/clients/demoted-finding-render.js +0 -169
  353. package/node_modules/pi-lens/dist/clients/dependency-checker.js +0 -885
  354. package/node_modules/pi-lens/dist/clients/deps/ast-grep-napi.js +0 -22
  355. package/node_modules/pi-lens/dist/clients/deps/js-yaml.js +0 -9
  356. package/node_modules/pi-lens/dist/clients/deps/minimatch.js +0 -4
  357. package/node_modules/pi-lens/dist/clients/deps/pi-tui.js +0 -14
  358. package/node_modules/pi-lens/dist/clients/deps/typebox.js +0 -14
  359. package/node_modules/pi-lens/dist/clients/deps/vscode-jsonrpc.js +0 -1
  360. package/node_modules/pi-lens/dist/clients/deps/web-tree-sitter.js +0 -24
  361. package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +0 -630
  362. package/node_modules/pi-lens/dist/clients/diagnostic-line-freshness.js +0 -305
  363. package/node_modules/pi-lens/dist/clients/diagnostic-logger.js +0 -73
  364. package/node_modules/pi-lens/dist/clients/diagnostic-tracker.js +0 -105
  365. package/node_modules/pi-lens/dist/clients/diagnostics-publish.js +0 -230
  366. package/node_modules/pi-lens/dist/clients/dispatch/ast-grep-catalog.js +0 -65
  367. package/node_modules/pi-lens/dist/clients/dispatch/auxiliary-lsp.js +0 -343
  368. package/node_modules/pi-lens/dist/clients/dispatch/collect-later-tier.js +0 -35
  369. package/node_modules/pi-lens/dist/clients/dispatch/diagnostic-taxonomy.js +0 -66
  370. package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +0 -1269
  371. package/node_modules/pi-lens/dist/clients/dispatch/fact-provider-types.js +0 -1
  372. package/node_modules/pi-lens/dist/clients/dispatch/fact-rule-runner.js +0 -17
  373. package/node_modules/pi-lens/dist/clients/dispatch/fact-runner.js +0 -30
  374. package/node_modules/pi-lens/dist/clients/dispatch/fact-scheduler.js +0 -68
  375. package/node_modules/pi-lens/dist/clients/dispatch/fact-store.js +0 -377
  376. package/node_modules/pi-lens/dist/clients/dispatch/facts/comment-facts.js +0 -22
  377. package/node_modules/pi-lens/dist/clients/dispatch/facts/file-content.js +0 -19
  378. package/node_modules/pi-lens/dist/clients/dispatch/facts/function-facts.js +0 -348
  379. package/node_modules/pi-lens/dist/clients/dispatch/facts/import-facts.js +0 -204
  380. package/node_modules/pi-lens/dist/clients/dispatch/facts/tree-sitter-facts.js +0 -34
  381. package/node_modules/pi-lens/dist/clients/dispatch/facts/try-catch-facts.js +0 -119
  382. package/node_modules/pi-lens/dist/clients/dispatch/finding-policy.js +0 -339
  383. package/node_modules/pi-lens/dist/clients/dispatch/indent-detect.js +0 -417
  384. package/node_modules/pi-lens/dist/clients/dispatch/inline-suppressions.js +0 -89
  385. package/node_modules/pi-lens/dist/clients/dispatch/integration.js +0 -2377
  386. package/node_modules/pi-lens/dist/clients/dispatch/lazy.js +0 -11
  387. package/node_modules/pi-lens/dist/clients/dispatch/pending-runner-findings.js +0 -87
  388. package/node_modules/pi-lens/dist/clients/dispatch/plan.js +0 -278
  389. package/node_modules/pi-lens/dist/clients/dispatch/priorities.js +0 -20
  390. package/node_modules/pi-lens/dist/clients/dispatch/rule-id-normalize.js +0 -50
  391. package/node_modules/pi-lens/dist/clients/dispatch/rule-ignores.js +0 -69
  392. package/node_modules/pi-lens/dist/clients/dispatch/rule-policy.js +0 -135
  393. package/node_modules/pi-lens/dist/clients/dispatch/rules/async-noise.js +0 -40
  394. package/node_modules/pi-lens/dist/clients/dispatch/rules/async-unnecessary-wrapper.js +0 -27
  395. package/node_modules/pi-lens/dist/clients/dispatch/rules/cors-wildcard.js +0 -54
  396. package/node_modules/pi-lens/dist/clients/dispatch/rules/error-obscuring.js +0 -32
  397. package/node_modules/pi-lens/dist/clients/dispatch/rules/error-swallowing.js +0 -31
  398. package/node_modules/pi-lens/dist/clients/dispatch/rules/framework-call-noise.js +0 -67
  399. package/node_modules/pi-lens/dist/clients/dispatch/rules/high-complexity.js +0 -72
  400. package/node_modules/pi-lens/dist/clients/dispatch/rules/high-fan-out.js +0 -74
  401. package/node_modules/pi-lens/dist/clients/dispatch/rules/high-import-coupling.js +0 -37
  402. package/node_modules/pi-lens/dist/clients/dispatch/rules/missing-error-propagation.js +0 -62
  403. package/node_modules/pi-lens/dist/clients/dispatch/rules/no-commented-credentials.js +0 -52
  404. package/node_modules/pi-lens/dist/clients/dispatch/rules/pass-through-wrappers.js +0 -42
  405. package/node_modules/pi-lens/dist/clients/dispatch/rules/placeholder-comments.js +0 -40
  406. package/node_modules/pi-lens/dist/clients/dispatch/rules/unsafe-boundary.js +0 -126
  407. package/node_modules/pi-lens/dist/clients/dispatch/runner-context.js +0 -52
  408. package/node_modules/pi-lens/dist/clients/dispatch/runners/actionlint.js +0 -111
  409. package/node_modules/pi-lens/dist/clients/dispatch/runners/ast-grep-napi.js +0 -1196
  410. package/node_modules/pi-lens/dist/clients/dispatch/runners/biome-check.js +0 -296
  411. package/node_modules/pi-lens/dist/clients/dispatch/runners/cpp-check.js +0 -219
  412. package/node_modules/pi-lens/dist/clients/dispatch/runners/credo.js +0 -82
  413. package/node_modules/pi-lens/dist/clients/dispatch/runners/cue-vet.js +0 -416
  414. package/node_modules/pi-lens/dist/clients/dispatch/runners/dart-analyze.js +0 -183
  415. package/node_modules/pi-lens/dist/clients/dispatch/runners/detekt.js +0 -176
  416. package/node_modules/pi-lens/dist/clients/dispatch/runners/dotnet-build.js +0 -164
  417. package/node_modules/pi-lens/dist/clients/dispatch/runners/elixir-check.js +0 -195
  418. package/node_modules/pi-lens/dist/clients/dispatch/runners/eslint.js +0 -137
  419. package/node_modules/pi-lens/dist/clients/dispatch/runners/fact-rules.js +0 -29
  420. package/node_modules/pi-lens/dist/clients/dispatch/runners/fish-indent.js +0 -69
  421. package/node_modules/pi-lens/dist/clients/dispatch/runners/gleam-check.js +0 -167
  422. package/node_modules/pi-lens/dist/clients/dispatch/runners/go-vet.js +0 -104
  423. package/node_modules/pi-lens/dist/clients/dispatch/runners/golangci-lint.js +0 -135
  424. package/node_modules/pi-lens/dist/clients/dispatch/runners/hadolint.js +0 -91
  425. package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-lint.js +0 -171
  426. package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-render.js +0 -940
  427. package/node_modules/pi-lens/dist/clients/dispatch/runners/htmlhint.js +0 -117
  428. package/node_modules/pi-lens/dist/clients/dispatch/runners/index.js +0 -108
  429. package/node_modules/pi-lens/dist/clients/dispatch/runners/javac.js +0 -99
  430. package/node_modules/pi-lens/dist/clients/dispatch/runners/ktlint.js +0 -110
  431. package/node_modules/pi-lens/dist/clients/dispatch/runners/lsp.js +0 -379
  432. package/node_modules/pi-lens/dist/clients/dispatch/runners/markdownlint.js +0 -167
  433. package/node_modules/pi-lens/dist/clients/dispatch/runners/mypy.js +0 -102
  434. package/node_modules/pi-lens/dist/clients/dispatch/runners/oxlint.js +0 -414
  435. package/node_modules/pi-lens/dist/clients/dispatch/runners/php-lint.js +0 -85
  436. package/node_modules/pi-lens/dist/clients/dispatch/runners/phpstan.js +0 -120
  437. package/node_modules/pi-lens/dist/clients/dispatch/runners/prisma-validate.js +0 -62
  438. package/node_modules/pi-lens/dist/clients/dispatch/runners/psscriptanalyzer.js +0 -445
  439. package/node_modules/pi-lens/dist/clients/dispatch/runners/pyright.js +0 -169
  440. package/node_modules/pi-lens/dist/clients/dispatch/runners/rubocop.js +0 -99
  441. package/node_modules/pi-lens/dist/clients/dispatch/runners/ruff.js +0 -88
  442. package/node_modules/pi-lens/dist/clients/dispatch/runners/rust-clippy.js +0 -256
  443. package/node_modules/pi-lens/dist/clients/dispatch/runners/shellcheck.js +0 -173
  444. package/node_modules/pi-lens/dist/clients/dispatch/runners/shfmt.js +0 -102
  445. package/node_modules/pi-lens/dist/clients/dispatch/runners/spellcheck.js +0 -128
  446. package/node_modules/pi-lens/dist/clients/dispatch/runners/spotbugs.js +0 -259
  447. package/node_modules/pi-lens/dist/clients/dispatch/runners/sqlfluff.js +0 -183
  448. package/node_modules/pi-lens/dist/clients/dispatch/runners/stylelint.js +0 -166
  449. package/node_modules/pi-lens/dist/clients/dispatch/runners/swiftlint.js +0 -163
  450. package/node_modules/pi-lens/dist/clients/dispatch/runners/taplo.js +0 -174
  451. package/node_modules/pi-lens/dist/clients/dispatch/runners/terragrunt.js +0 -168
  452. package/node_modules/pi-lens/dist/clients/dispatch/runners/tflint.js +0 -125
  453. package/node_modules/pi-lens/dist/clients/dispatch/runners/tree-sitter.js +0 -643
  454. package/node_modules/pi-lens/dist/clients/dispatch/runners/trivy-config.js +0 -253
  455. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/availability-policy.js +0 -496
  456. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +0 -90
  457. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/diagnostic-parsers.js +0 -95
  458. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/lazy-installer.js +0 -274
  459. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +0 -1701
  460. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/spawn-outcome.js +0 -101
  461. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/tool-failure.js +0 -235
  462. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/toolchain-availability.js +0 -169
  463. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils.js +0 -15
  464. package/node_modules/pi-lens/dist/clients/dispatch/runners/vale.js +0 -128
  465. package/node_modules/pi-lens/dist/clients/dispatch/runners/yaml-rule-parser.js +0 -242
  466. package/node_modules/pi-lens/dist/clients/dispatch/runners/yamllint.js +0 -95
  467. package/node_modules/pi-lens/dist/clients/dispatch/runners/zig-check.js +0 -79
  468. package/node_modules/pi-lens/dist/clients/dispatch/suppress-writer.js +0 -79
  469. package/node_modules/pi-lens/dist/clients/dispatch/tool-profile.js +0 -30
  470. package/node_modules/pi-lens/dist/clients/dispatch/types.js +0 -21
  471. package/node_modules/pi-lens/dist/clients/dispatch/utils/format-utils.js +0 -45
  472. package/node_modules/pi-lens/dist/clients/dispatch/utils/lsp-diagnostics.js +0 -35
  473. package/node_modules/pi-lens/dist/clients/disposition-logger.js +0 -32
  474. package/node_modules/pi-lens/dist/clients/disposition-publish.js +0 -124
  475. package/node_modules/pi-lens/dist/clients/durable-store.js +0 -97
  476. package/node_modules/pi-lens/dist/clients/effective-config.js +0 -415
  477. package/node_modules/pi-lens/dist/clients/env-utils.js +0 -83
  478. package/node_modules/pi-lens/dist/clients/error-class.js +0 -23
  479. package/node_modules/pi-lens/dist/clients/eval-timestamp.js +0 -17
  480. package/node_modules/pi-lens/dist/clients/event-loop-hold.js +0 -274
  481. package/node_modules/pi-lens/dist/clients/event-loop-monitor.js +0 -250
  482. package/node_modules/pi-lens/dist/clients/extension-log.js +0 -504
  483. package/node_modules/pi-lens/dist/clients/extension-mode.js +0 -73
  484. package/node_modules/pi-lens/dist/clients/feature-hints.js +0 -103
  485. package/node_modules/pi-lens/dist/clients/file-kinds.js +0 -412
  486. package/node_modules/pi-lens/dist/clients/file-role.js +0 -134
  487. package/node_modules/pi-lens/dist/clients/file-time.js +0 -160
  488. package/node_modules/pi-lens/dist/clients/file-utils.js +0 -1032
  489. package/node_modules/pi-lens/dist/clients/finding-delivery-gate.js +0 -494
  490. package/node_modules/pi-lens/dist/clients/finding-identity.js +0 -88
  491. package/node_modules/pi-lens/dist/clients/fix-worklog.js +0 -103
  492. package/node_modules/pi-lens/dist/clients/format-events-publish.js +0 -343
  493. package/node_modules/pi-lens/dist/clients/format-service.js +0 -222
  494. package/node_modules/pi-lens/dist/clients/formatters-lazy.js +0 -9
  495. package/node_modules/pi-lens/dist/clients/formatters.js +0 -2032
  496. package/node_modules/pi-lens/dist/clients/freshness-cadence.js +0 -17
  497. package/node_modules/pi-lens/dist/clients/freshness.js +0 -38
  498. package/node_modules/pi-lens/dist/clients/generated-artifacts.js +0 -394
  499. package/node_modules/pi-lens/dist/clients/generation-guard.js +0 -215
  500. package/node_modules/pi-lens/dist/clients/git-guard.js +0 -1136
  501. package/node_modules/pi-lens/dist/clients/git-tracked-ignore.js +0 -243
  502. package/node_modules/pi-lens/dist/clients/gitleaks-client.js +0 -509
  503. package/node_modules/pi-lens/dist/clients/go-client.js +0 -104
  504. package/node_modules/pi-lens/dist/clients/govulncheck-client.js +0 -605
  505. package/node_modules/pi-lens/dist/clients/gradle-ktfmt-style.js +0 -348
  506. package/node_modules/pi-lens/dist/clients/grammar-source.js +0 -465
  507. package/node_modules/pi-lens/dist/clients/gzip-stage-write.js +0 -135
  508. package/node_modules/pi-lens/dist/clients/hashline-anchor.js +0 -424
  509. package/node_modules/pi-lens/dist/clients/hook-budgets.js +0 -76
  510. package/node_modules/pi-lens/dist/clients/host-edit-normalize.js +0 -140
  511. package/node_modules/pi-lens/dist/clients/host-ports.js +0 -39
  512. package/node_modules/pi-lens/dist/clients/indent-retarget.js +0 -154
  513. package/node_modules/pi-lens/dist/clients/inline-blocker-dispositions.js +0 -186
  514. package/node_modules/pi-lens/dist/clients/install-diagnostics.js +0 -156
  515. package/node_modules/pi-lens/dist/clients/installer/index.js +0 -5416
  516. package/node_modules/pi-lens/dist/clients/installer/managed-tool-refresh-session.js +0 -58
  517. package/node_modules/pi-lens/dist/clients/installer/managed-tool-refresh.js +0 -783
  518. package/node_modules/pi-lens/dist/clients/instance-reaper-state.js +0 -7
  519. package/node_modules/pi-lens/dist/clients/instance-reaper.js +0 -1137
  520. package/node_modules/pi-lens/dist/clients/instance-registry-lock.js +0 -145
  521. package/node_modules/pi-lens/dist/clients/instance-registry.js +0 -773
  522. package/node_modules/pi-lens/dist/clients/jscpd-client.js +0 -378
  523. package/node_modules/pi-lens/dist/clients/json-cache-read.js +0 -65
  524. package/node_modules/pi-lens/dist/clients/knip-client.js +0 -788
  525. package/node_modules/pi-lens/dist/clients/language-policy.js +0 -252
  526. package/node_modules/pi-lens/dist/clients/language-profile.js +0 -361
  527. package/node_modules/pi-lens/dist/clients/language-registry.js +0 -603
  528. package/node_modules/pi-lens/dist/clients/latency-logger.js +0 -727
  529. package/node_modules/pi-lens/dist/clients/lazy-import.js +0 -21
  530. package/node_modules/pi-lens/dist/clients/ledger-bounds.js +0 -54
  531. package/node_modules/pi-lens/dist/clients/lens-config.js +0 -404
  532. package/node_modules/pi-lens/dist/clients/lens-engine.js +0 -358
  533. package/node_modules/pi-lens/dist/clients/lens-events.js +0 -125
  534. package/node_modules/pi-lens/dist/clients/lens-flag-registry.js +0 -467
  535. package/node_modules/pi-lens/dist/clients/lens-map.js +0 -1156
  536. package/node_modules/pi-lens/dist/clients/live-bus-emitter.js +0 -74
  537. package/node_modules/pi-lens/dist/clients/log-cleanup.js +0 -222
  538. package/node_modules/pi-lens/dist/clients/lsp/aggregation.js +0 -178
  539. package/node_modules/pi-lens/dist/clients/lsp/cascade-tier.js +0 -421
  540. package/node_modules/pi-lens/dist/clients/lsp/client.js +0 -4593
  541. package/node_modules/pi-lens/dist/clients/lsp/config.js +0 -691
  542. package/node_modules/pi-lens/dist/clients/lsp/content-limits.js +0 -41
  543. package/node_modules/pi-lens/dist/clients/lsp/diagnostic-binding.js +0 -225
  544. package/node_modules/pi-lens/dist/clients/lsp/document-drift.js +0 -467
  545. package/node_modules/pi-lens/dist/clients/lsp/edits.js +0 -1219
  546. package/node_modules/pi-lens/dist/clients/lsp/index.js +0 -8305
  547. package/node_modules/pi-lens/dist/clients/lsp/inferred-project.js +0 -216
  548. package/node_modules/pi-lens/dist/clients/lsp/jvm-runtime.js +0 -298
  549. package/node_modules/pi-lens/dist/clients/lsp/language.js +0 -63
  550. package/node_modules/pi-lens/dist/clients/lsp/launch.js +0 -746
  551. package/node_modules/pi-lens/dist/clients/lsp/lombok.js +0 -158
  552. package/node_modules/pi-lens/dist/clients/lsp/path-utils.js +0 -5
  553. package/node_modules/pi-lens/dist/clients/lsp/pending-aux-coverage.js +0 -251
  554. package/node_modules/pi-lens/dist/clients/lsp/position-encoding.js +0 -61
  555. package/node_modules/pi-lens/dist/clients/lsp/ruby-drive-dirs.js +0 -83
  556. package/node_modules/pi-lens/dist/clients/lsp/server.js +0 -3290
  557. package/node_modules/pi-lens/dist/clients/lsp/session-roots.js +0 -192
  558. package/node_modules/pi-lens/dist/clients/lsp/spawn-history.js +0 -17
  559. package/node_modules/pi-lens/dist/clients/lsp/sync-kind.js +0 -56
  560. package/node_modules/pi-lens/dist/clients/lsp/tsserver-sync.js +0 -332
  561. package/node_modules/pi-lens/dist/clients/lsp/wait-policy/capability-snapshot.js +0 -1
  562. package/node_modules/pi-lens/dist/clients/lsp/wait-policy/classification.js +0 -85
  563. package/node_modules/pi-lens/dist/clients/lsp/wait-policy/index.js +0 -10
  564. package/node_modules/pi-lens/dist/clients/lsp/wait-policy/strategies.js +0 -392
  565. package/node_modules/pi-lens/dist/clients/lsp/watch-queue.js +0 -61
  566. package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-cache.js +0 -639
  567. package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-session.js +0 -30
  568. package/node_modules/pi-lens/dist/clients/lsp/workspace-sweep-hold.js +0 -184
  569. package/node_modules/pi-lens/dist/clients/lsp-budget.js +0 -186
  570. package/node_modules/pi-lens/dist/clients/lsp-document-symbols.js +0 -110
  571. package/node_modules/pi-lens/dist/clients/lsp-lazy.js +0 -9
  572. package/node_modules/pi-lens/dist/clients/lsp-mutation.js +0 -396
  573. package/node_modules/pi-lens/dist/clients/lsp-status.js +0 -59
  574. package/node_modules/pi-lens/dist/clients/map-with-concurrency.js +0 -40
  575. package/node_modules/pi-lens/dist/clients/mcp/analyze.js +0 -420
  576. package/node_modules/pi-lens/dist/clients/mcp/host-shim.js +0 -31
  577. package/node_modules/pi-lens/dist/clients/mcp/ipc.js +0 -523
  578. package/node_modules/pi-lens/dist/clients/mcp/review.js +0 -197
  579. package/node_modules/pi-lens/dist/clients/mcp/session.js +0 -412
  580. package/node_modules/pi-lens/dist/clients/memory-sampler.js +0 -208
  581. package/node_modules/pi-lens/dist/clients/message-end-attribution.js +0 -30
  582. package/node_modules/pi-lens/dist/clients/metrics-client.js +0 -107
  583. package/node_modules/pi-lens/dist/clients/metrics-history.js +0 -327
  584. package/node_modules/pi-lens/dist/clients/middle-man-analysis.js +0 -263
  585. package/node_modules/pi-lens/dist/clients/model-provider.js +0 -53
  586. package/node_modules/pi-lens/dist/clients/module-report-lsp.js +0 -189
  587. package/node_modules/pi-lens/dist/clients/module-report.js +0 -2150
  588. package/node_modules/pi-lens/dist/clients/mutating-tool.js +0 -651
  589. package/node_modules/pi-lens/dist/clients/mutation-attribution.js +0 -368
  590. package/node_modules/pi-lens/dist/clients/mutation-bridge.js +0 -240
  591. package/node_modules/pi-lens/dist/clients/ndjson-logger.js +0 -734
  592. package/node_modules/pi-lens/dist/clients/observed-mutation-sources.js +0 -101
  593. package/node_modules/pi-lens/dist/clients/observed-mutation.js +0 -1253
  594. package/node_modules/pi-lens/dist/clients/oldtext-autopatch.js +0 -128
  595. package/node_modules/pi-lens/dist/clients/opaque-mutation-scan.js +0 -496
  596. package/node_modules/pi-lens/dist/clients/opengrep-client.js +0 -333
  597. package/node_modules/pi-lens/dist/clients/opengrep-config.js +0 -76
  598. package/node_modules/pi-lens/dist/clients/package-manager.js +0 -607
  599. package/node_modules/pi-lens/dist/clients/package-root.js +0 -38
  600. package/node_modules/pi-lens/dist/clients/partial-edit-apply.js +0 -439
  601. package/node_modules/pi-lens/dist/clients/path-attribution-telemetry.js +0 -43
  602. package/node_modules/pi-lens/dist/clients/path-keyed-map.js +0 -108
  603. package/node_modules/pi-lens/dist/clients/path-utils.js +0 -1244
  604. package/node_modules/pi-lens/dist/clients/performance-report.js +0 -331
  605. package/node_modules/pi-lens/dist/clients/persist-debounce.js +0 -70
  606. package/node_modules/pi-lens/dist/clients/persistent-reverify.js +0 -271
  607. package/node_modules/pi-lens/dist/clients/php-cs-fixer-config.js +0 -119
  608. package/node_modules/pi-lens/dist/clients/pipeline.js +0 -1480
  609. package/node_modules/pi-lens/dist/clients/post-autofix-notice.js +0 -37
  610. package/node_modules/pi-lens/dist/clients/print-mode.js +0 -21
  611. package/node_modules/pi-lens/dist/clients/probe-home-state.js +0 -228
  612. package/node_modules/pi-lens/dist/clients/process-bridge.js +0 -66
  613. package/node_modules/pi-lens/dist/clients/process-singletons.js +0 -210
  614. package/node_modules/pi-lens/dist/clients/process-snapshot.js +0 -68
  615. package/node_modules/pi-lens/dist/clients/project-changes.js +0 -181
  616. package/node_modules/pi-lens/dist/clients/project-conventions.js +0 -171
  617. package/node_modules/pi-lens/dist/clients/project-diagnostics/cache.js +0 -137
  618. package/node_modules/pi-lens/dist/clients/project-diagnostics/extractors.js +0 -109
  619. package/node_modules/pi-lens/dist/clients/project-diagnostics/fresh-fetch.js +0 -668
  620. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +0 -118
  621. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/dead-code.js +0 -47
  622. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +0 -40
  623. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/govulncheck.js +0 -34
  624. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/jscpd.js +0 -38
  625. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/knip.js +0 -47
  626. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/madge.js +0 -48
  627. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/opengrep.js +0 -40
  628. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +0 -127
  629. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/trivy.js +0 -81
  630. package/node_modules/pi-lens/dist/clients/project-diagnostics/scanner.js +0 -520
  631. package/node_modules/pi-lens/dist/clients/project-diagnostics/types.js +0 -1
  632. package/node_modules/pi-lens/dist/clients/project-lens-config.js +0 -807
  633. package/node_modules/pi-lens/dist/clients/project-report.js +0 -701
  634. package/node_modules/pi-lens/dist/clients/project-scale.js +0 -237
  635. package/node_modules/pi-lens/dist/clients/project-scan-policy.js +0 -11
  636. package/node_modules/pi-lens/dist/clients/project-snapshot-fingerprint.js +0 -48
  637. package/node_modules/pi-lens/dist/clients/project-snapshot-persist-worker.js +0 -20
  638. package/node_modules/pi-lens/dist/clients/project-snapshot.js +0 -1653
  639. package/node_modules/pi-lens/dist/clients/project-trust.js +0 -181
  640. package/node_modules/pi-lens/dist/clients/python-environment.js +0 -217
  641. package/node_modules/pi-lens/dist/clients/python-provenance.js +0 -639
  642. package/node_modules/pi-lens/dist/clients/quiet-window-config.js +0 -47
  643. package/node_modules/pi-lens/dist/clients/quiet-window.js +0 -236
  644. package/node_modules/pi-lens/dist/clients/read-bridge.js +0 -139
  645. package/node_modules/pi-lens/dist/clients/read-expansion.js +0 -266
  646. package/node_modules/pi-lens/dist/clients/read-guard-logger.js +0 -251
  647. package/node_modules/pi-lens/dist/clients/read-guard-tool-lines.js +0 -1306
  648. package/node_modules/pi-lens/dist/clients/read-guard.js +0 -1561
  649. package/node_modules/pi-lens/dist/clients/recent-touches.js +0 -240
  650. package/node_modules/pi-lens/dist/clients/redact/secrets.js +0 -449
  651. package/node_modules/pi-lens/dist/clients/resource-sampler.js +0 -628
  652. package/node_modules/pi-lens/dist/clients/reverse-deps.js +0 -270
  653. package/node_modules/pi-lens/dist/clients/review-graph/builder.js +0 -5126
  654. package/node_modules/pi-lens/dist/clients/review-graph/format.js +0 -33
  655. package/node_modules/pi-lens/dist/clients/review-graph/git-identity.js +0 -163
  656. package/node_modules/pi-lens/dist/clients/review-graph/import-resolvers.js +0 -481
  657. package/node_modules/pi-lens/dist/clients/review-graph/persist-worker.js +0 -10
  658. package/node_modules/pi-lens/dist/clients/review-graph/query.js +0 -244
  659. package/node_modules/pi-lens/dist/clients/review-graph/revision-drift.js +0 -21
  660. package/node_modules/pi-lens/dist/clients/review-graph/service.js +0 -96
  661. package/node_modules/pi-lens/dist/clients/review-graph/shared-extraction-ir.js +0 -82
  662. package/node_modules/pi-lens/dist/clients/review-graph/symbol-id.js +0 -103
  663. package/node_modules/pi-lens/dist/clients/review-graph/tsconfig-paths.js +0 -299
  664. package/node_modules/pi-lens/dist/clients/review-graph/types.js +0 -1
  665. package/node_modules/pi-lens/dist/clients/review-graph/workspace-modules.js +0 -449
  666. package/node_modules/pi-lens/dist/clients/review-graph-logger.js +0 -81
  667. package/node_modules/pi-lens/dist/clients/ruff-client.js +0 -179
  668. package/node_modules/pi-lens/dist/clients/rules-scanner.js +0 -131
  669. package/node_modules/pi-lens/dist/clients/run-duration.js +0 -55
  670. package/node_modules/pi-lens/dist/clients/runtime-agent-end.js +0 -746
  671. package/node_modules/pi-lens/dist/clients/runtime-config.js +0 -77
  672. package/node_modules/pi-lens/dist/clients/runtime-context.js +0 -211
  673. package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +0 -1324
  674. package/node_modules/pi-lens/dist/clients/runtime-session.js +0 -2485
  675. package/node_modules/pi-lens/dist/clients/runtime-tool-call.js +0 -1295
  676. package/node_modules/pi-lens/dist/clients/runtime-tool-result.js +0 -2049
  677. package/node_modules/pi-lens/dist/clients/runtime-turn.js +0 -3767
  678. package/node_modules/pi-lens/dist/clients/rust-client.js +0 -97
  679. package/node_modules/pi-lens/dist/clients/safe-spawn.js +0 -2357
  680. package/node_modules/pi-lens/dist/clients/sanitize.js +0 -286
  681. package/node_modules/pi-lens/dist/clients/scan-utils.js +0 -25
  682. package/node_modules/pi-lens/dist/clients/scratch-tree-policy.js +0 -165
  683. package/node_modules/pi-lens/dist/clients/search-read-registration.js +0 -94
  684. package/node_modules/pi-lens/dist/clients/secret-findings.js +0 -114
  685. package/node_modules/pi-lens/dist/clients/security-scan-client.js +0 -352
  686. package/node_modules/pi-lens/dist/clients/session-event-guard.js +0 -297
  687. package/node_modules/pi-lens/dist/clients/session-lifecycle.js +0 -484
  688. package/node_modules/pi-lens/dist/clients/session-start-observability.js +0 -94
  689. package/node_modules/pi-lens/dist/clients/session-state-store.js +0 -101
  690. package/node_modules/pi-lens/dist/clients/session-summary.js +0 -15
  691. package/node_modules/pi-lens/dist/clients/sessionstart-logger.js +0 -27
  692. package/node_modules/pi-lens/dist/clients/sg-runner.js +0 -876
  693. package/node_modules/pi-lens/dist/clients/sgconfig.js +0 -347
  694. package/node_modules/pi-lens/dist/clients/shared-checkout-guard.js +0 -338
  695. package/node_modules/pi-lens/dist/clients/single-flight.js +0 -158
  696. package/node_modules/pi-lens/dist/clients/situational-tool-telemetry.js +0 -108
  697. package/node_modules/pi-lens/dist/clients/skills-resolver.js +0 -141
  698. package/node_modules/pi-lens/dist/clients/slow-fs.js +0 -138
  699. package/node_modules/pi-lens/dist/clients/smells-rollup.js +0 -231
  700. package/node_modules/pi-lens/dist/clients/source-filter.js +0 -596
  701. package/node_modules/pi-lens/dist/clients/source-walker.js +0 -211
  702. package/node_modules/pi-lens/dist/clients/spawn-output-cap.js +0 -120
  703. package/node_modules/pi-lens/dist/clients/spawn-timeout-cooldown.js +0 -110
  704. package/node_modules/pi-lens/dist/clients/stale-marker.js +0 -17
  705. package/node_modules/pi-lens/dist/clients/startup-scan.js +0 -400
  706. package/node_modules/pi-lens/dist/clients/startup-timing.js +0 -130
  707. package/node_modules/pi-lens/dist/clients/string-utils.js +0 -33
  708. package/node_modules/pi-lens/dist/clients/subagent-mode.js +0 -111
  709. package/node_modules/pi-lens/dist/clients/symbol-containment.js +0 -24
  710. package/node_modules/pi-lens/dist/clients/symbol-types.js +0 -5
  711. package/node_modules/pi-lens/dist/clients/test-runner-client.js +0 -2507
  712. package/node_modules/pi-lens/dist/clients/test-runner-delivery.js +0 -287
  713. package/node_modules/pi-lens/dist/clients/todo-scanner.js +0 -229
  714. package/node_modules/pi-lens/dist/clients/tool-agreement.js +0 -423
  715. package/node_modules/pi-lens/dist/clients/tool-config.js +0 -249
  716. package/node_modules/pi-lens/dist/clients/tool-cwd.js +0 -270
  717. package/node_modules/pi-lens/dist/clients/tool-definition.js +0 -47
  718. package/node_modules/pi-lens/dist/clients/tool-event.js +0 -105
  719. package/node_modules/pi-lens/dist/clients/tool-policy.js +0 -2755
  720. package/node_modules/pi-lens/dist/clients/tool-probe.js +0 -53
  721. package/node_modules/pi-lens/dist/clients/tool-render.js +0 -156
  722. package/node_modules/pi-lens/dist/clients/tool-set-policy.js +0 -118
  723. package/node_modules/pi-lens/dist/clients/tree-sitter-cache.js +0 -364
  724. package/node_modules/pi-lens/dist/clients/tree-sitter-client.js +0 -4195
  725. package/node_modules/pi-lens/dist/clients/tree-sitter-logger.js +0 -100
  726. package/node_modules/pi-lens/dist/clients/tree-sitter-navigator.js +0 -269
  727. package/node_modules/pi-lens/dist/clients/tree-sitter-query-loader.js +0 -569
  728. package/node_modules/pi-lens/dist/clients/tree-sitter-shared.js +0 -158
  729. package/node_modules/pi-lens/dist/clients/tree-sitter-symbol-extractor.js +0 -1265
  730. package/node_modules/pi-lens/dist/clients/trivy-client.js +0 -467
  731. package/node_modules/pi-lens/dist/clients/tui-fit.js +0 -50
  732. package/node_modules/pi-lens/dist/clients/turn-context.js +0 -52
  733. package/node_modules/pi-lens/dist/clients/turn-end/lane.js +0 -51
  734. package/node_modules/pi-lens/dist/clients/turn-end/lanes/govulncheck.js +0 -112
  735. package/node_modules/pi-lens/dist/clients/turn-end/lanes/secrets.js +0 -204
  736. package/node_modules/pi-lens/dist/clients/turn-summary-render.js +0 -72
  737. package/node_modules/pi-lens/dist/clients/turn-summary.js +0 -132
  738. package/node_modules/pi-lens/dist/clients/typos-config.js +0 -29
  739. package/node_modules/pi-lens/dist/clients/user-notify.js +0 -51
  740. package/node_modules/pi-lens/dist/clients/vanished-instance-marker.js +0 -57
  741. package/node_modules/pi-lens/dist/clients/warm-attach.js +0 -305
  742. package/node_modules/pi-lens/dist/clients/widget-state.js +0 -1808
  743. package/node_modules/pi-lens/dist/clients/word-index-logger.js +0 -49
  744. package/node_modules/pi-lens/dist/clients/word-index-store.js +0 -459
  745. package/node_modules/pi-lens/dist/clients/word-index.js +0 -2080
  746. package/node_modules/pi-lens/dist/clients/workspace-topology.js +0 -443
  747. package/node_modules/pi-lens/dist/clients/write-ordering-guard.js +0 -65
  748. package/node_modules/pi-lens/dist/clients/zizmor-config.js +0 -340
  749. package/node_modules/pi-lens/dist/i18n.js +0 -69
  750. package/node_modules/pi-lens/dist/mcp/build-staleness.js +0 -124
  751. package/node_modules/pi-lens/dist/scripts/lib/process-scan.mjs +0 -583
  752. package/node_modules/pi-lens/dist/scripts/lib/skills-predicate.mjs +0 -129
  753. package/node_modules/pi-lens/dist/scripts/lib/web-tree-sitter-dir.mjs +0 -123
  754. package/node_modules/pi-lens/dist/tools/activate-tools.js +0 -87
  755. package/node_modules/pi-lens/dist/tools/ast-grep-outline.js +0 -137
  756. package/node_modules/pi-lens/dist/tools/ast-grep-replace.js +0 -244
  757. package/node_modules/pi-lens/dist/tools/ast-grep-search.js +0 -762
  758. package/node_modules/pi-lens/dist/tools/effective-config.js +0 -90
  759. package/node_modules/pi-lens/dist/tools/lens-diagnostic-mark.js +0 -375
  760. package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +0 -2571
  761. package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +0 -1745
  762. package/node_modules/pi-lens/dist/tools/lsp-navigation.js +0 -1367
  763. package/node_modules/pi-lens/dist/tools/lsp-structured-output.js +0 -294
  764. package/node_modules/pi-lens/dist/tools/module-report.js +0 -382
  765. package/node_modules/pi-lens/dist/tools/project-report.js +0 -86
  766. package/node_modules/pi-lens/dist/tools/render-compact.js +0 -374
  767. package/node_modules/pi-lens/dist/tools/scan-progress.js +0 -53
  768. package/node_modules/pi-lens/dist/tools/shared.js +0 -29
  769. 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 };