@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,251 +0,0 @@
1
- /**
2
- * THE canonical pi-lens config schema (#2426).
3
- *
4
- * A plain JSON-Schema-shaped object, per `config-core/schema.ts`: the same
5
- * value the validator runs on is the value #2416 publishes as
6
- * `docs/schema/pi-lens-config-v1.json`, so there is no compiler between the two
7
- * for drift to hide in. It is the FIRST real schema through the #2418 harness —
8
- * `tests/config/pi-lens-config-schema.test.ts` runs `assertSchemaStabilityTiers`
9
- * and `assertSchemaIdentityAnchor` over this object rather than over the
10
- * placeholder fixture, which is what makes those two assertions load-bearing
11
- * instead of self-referential.
12
- *
13
- * Three deliberate shapes:
14
- *
15
- * 1. THE ROOT IS OPEN (`additionalProperties: true`). pi-lens's default is
16
- * closed (`docs/public-api-stability.md`), and this is the one place that
17
- * default is overridden on purpose. Both loaders already have their OWN,
18
- * richer unknown-key diagnostics — the global loader names the typo, and the
19
- * project loader distinguishes "typo" from "that is a global-only setting"
20
- * (#533/#883). Letting `validate()` drop an unknown root key first would
21
- * replace both messages with a generic `PILENS_CFG_0004`, which is strictly
22
- * less information for the user. Closing the root belongs to the slice that
23
- * moves those diagnostics into the schema, not to this one.
24
- *
25
- * 2. THE NAMESPACE LIST IS DERIVED, NEVER RESTATED. Every top-level section
26
- * comes from `lens-flag-registry.ts`'s registries; adding a flag or a
27
- * section needs no edit here. A hand-copied mirror of a registry is the
28
- * defect AGENTS.md's single-source-of-truth rule names, and it is the exact
29
- * thing #883 already removed from the two loaders' unknown-key scans.
30
- *
31
- * 3. ONLY `lsp` DECLARES A TYPE, and only one level deep. #2416 owns the
32
- * `lsp.servers.<id>` shape; this slice RESERVES the namespace and moves the
33
- * loader. Everything else stays schema-opaque, which `config-core` walks
34
- * open — the node is still depth-bounded, prototype-key-checked and
35
- * recorded, but no field's accepted values change in a slice whose
36
- * acceptance criterion is that they do not.
37
- */
38
- import { CONFIG_SCHEMA_ANCHOR_KEY, CONFIG_SCHEMA_ID, STABILITY_TIER_KEY, } from "./config-diagnostic-codes.js";
39
- import { LEGACY_ROOT_LSP_KEYS, LSP_NAMESPACE_KEY } from "./config-locations.js";
40
- // From the owning module, not the barrel — same reason as `config-resolve.ts`:
41
- // the barrel's width would drag `process-spec.js` -> `project-trust.js` into
42
- // every config loader's import graph for one type alias.
43
- import { DENY_KEY, } from "./config-core/schema.js";
44
- import { flagConfigSectionKeys, GLOBAL_NON_FLAG_CONFIG_SECTIONS, LENS_FLAGS, PROJECT_FOREIGN_CONFIG_NAMESPACES, PROJECT_NON_FLAG_CONFIG_SECTIONS, } from "./lens-flag-registry.js";
45
- import { LENS_TOOL_NAMES } from "./tool-config.js";
46
- /** The JSON Schema dialect the published artifact declares. */
47
- const CONFIG_SCHEMA_DIALECT = "https://json-schema.org/draft/2020-12/schema";
48
- /**
49
- * A node the schema says nothing else about. `config-core` treats a node with
50
- * no `type` as opaque and walks its children OPEN, so an undeclared section
51
- * keeps exactly the values it kept before this schema existed.
52
- */
53
- function opaque(tier) {
54
- return { [STABILITY_TIER_KEY]: tier };
55
- }
56
- /**
57
- * The `lsp` namespace: reserved here, shaped by #2416.
58
- *
59
- * `enabled` is the pre-existing `--no-lsp` toggle and keeps living here, which
60
- * is why `lsp` is a NAMESPACE rather than a new sibling of the toggle: a config
61
- * key that already means "is the LSP on" and a key that means "which servers"
62
- * belong under one heading, and splitting them would have been a second name
63
- * for the same subsystem.
64
- *
65
- * The four catalog keys are `experimental` on purpose. They are the canonical
66
- * home of the four legacy ROOT keys deprecated by this PR, and #2416 replaces
67
- * the bare-command server form with the trust-gated `ProcessSpec` — promising
68
- * stability on a shape that is already scheduled to change would be a promise
69
- * made only to be broken.
70
- */
71
- /**
72
- * The JSON type each canonical `lsp.*` key carries. Spelled out rather than
73
- * inferred from the key's name: this is the ONE piece of validation the slice
74
- * adds, and it earns its place — pre-#2426 a `disabledServers` that was a
75
- * STRING reached `new Set(config.disabledServers)` and disabled one server per
76
- * CHARACTER. `tests/config/pi-lens-config-schema.test.ts` asserts every
77
- * `LEGACY_ROOT_LSP_KEYS` member has an entry here, so a new registry row cannot
78
- * land untyped.
79
- */
80
- const LSP_KEY_TYPES = {
81
- servers: "object",
82
- serverOverrides: "object",
83
- disabledServers: "array",
84
- warmFiles: "array",
85
- };
86
- export { LSP_KEY_TYPES };
87
- /**
88
- * The canonical `lsp.*` keys that carry a DENIAL rather than an ordinary value
89
- * (#2427).
90
- *
91
- * `config-core/deny.ts` has shipped monotonic deny precedence since #2440 and
92
- * `merge()` has consulted it since — but it only fires for a node the SCHEMA
93
- * annotates, and no production node did. The consequence was live and
94
- * measurable: with `~/.pi-lens/config.json` saying
95
- * `lsp.disabledServers: ["typos"]` and a repository's `.pi-lens.json` saying
96
- * `lsp.disabledServers: []`, the resolution returned `[]` attributed to the
97
- * `project` tier and `loadLSPConfig` handed `initLSPConfig` an empty disable
98
- * set — repository content silently re-enabling a server the operator turned
99
- * off, which is the exact scenario `deny.ts`'s module doc says it exists to
100
- * prevent and #2415 AC 3 forbids. One annotation is the whole fix: the union
101
- * of every tier's members, attributed to the tier that first denied.
102
- *
103
- * `enabled` is deliberately NOT annotated here. `boolean-false` pins an
104
- * operator denial against every higher tier including `cli`, and `env`/`cli`
105
- * are still unpopulated (`docs/configuration.md`), so annotating it now would
106
- * decide what `--lsp` means against a global `lsp.enabled: false` in a slice
107
- * that cannot test the tiers involved. That belongs to the slice that
108
- * populates them.
109
- */
110
- const LSP_KEY_DENY = {
111
- disabledServers: "array-union",
112
- };
113
- /** The `x-deny` annotation for a key, or nothing when it carries no denial. */
114
- function denyAnnotation(key) {
115
- const policy = LSP_KEY_DENY[key];
116
- return policy === undefined ? {} : { [DENY_KEY]: policy };
117
- }
118
- function lspNamespace() {
119
- const properties = {
120
- // Reserved but deliberately UNTYPED. `lens-config.ts` already rejects a
121
- // non-boolean here with `lsp.enabled must be a boolean` — a message that
122
- // names the key and the expected type — and it is the one every flag in
123
- // the registry shares. Declaring `type: "boolean"` would make `validate()`
124
- // drop the value first and replace that message with the core's generic
125
- // `expected boolean, got string`, which is strictly less useful. The flag
126
- // sections move into the schema when their diagnostics do, not before.
127
- enabled: { [STABILITY_TIER_KEY]: "stable" },
128
- };
129
- for (const key of LEGACY_ROOT_LSP_KEYS) {
130
- const declared = LSP_KEY_TYPES[key];
131
- properties[key] = {
132
- ...(declared ? { type: declared } : {}),
133
- [STABILITY_TIER_KEY]: "experimental",
134
- ...(declared === "object" ? { additionalProperties: true } : {}),
135
- ...denyAnnotation(key),
136
- };
137
- }
138
- return {
139
- type: "object",
140
- additionalProperties: true,
141
- [STABILITY_TIER_KEY]: "stable",
142
- properties,
143
- };
144
- }
145
- function buildConfigSchema() {
146
- const properties = {};
147
- // Every top-level section pi-lens recognizes today, derived from the
148
- // registries rather than listed. These have shipped and are documented, so
149
- // they are `stable`; declaring long-published fields experimental would
150
- // understate a guarantee users already rely on.
151
- for (const key of [
152
- ...flagConfigSectionKeys(LENS_FLAGS),
153
- ...GLOBAL_NON_FLAG_CONFIG_SECTIONS,
154
- ...PROJECT_NON_FLAG_CONFIG_SECTIONS,
155
- ]) {
156
- properties[key] = opaque("stable");
157
- }
158
- properties.tools = {
159
- type: "object",
160
- additionalProperties: true,
161
- properties: Object.fromEntries(LENS_TOOL_NAMES.map((name) => [
162
- name,
163
- {
164
- type: "object",
165
- additionalProperties: true,
166
- properties: {
167
- enabled: { type: "boolean", [STABILITY_TIER_KEY]: "experimental" },
168
- },
169
- [STABILITY_TIER_KEY]: "experimental",
170
- },
171
- ])),
172
- [STABILITY_TIER_KEY]: "stable",
173
- };
174
- // Namespaces owned by another tool that ride in the same file (`trivy`,
175
- // `helm`). Reserved so they survive validation, `experimental` because their
176
- // shape belongs to those runners, not to this schema.
177
- for (const key of PROJECT_FOREIGN_CONFIG_NAMESPACES) {
178
- properties[key] ??= opaque("experimental");
179
- }
180
- for (const key of [
181
- "knip",
182
- "jscpd",
183
- "madge",
184
- "gitleaks",
185
- "govulncheck",
186
- "deadCode",
187
- "complexity",
188
- ]) {
189
- properties[key] = {
190
- type: "object",
191
- additionalProperties: true,
192
- properties: {
193
- enabled: { type: "boolean", [STABILITY_TIER_KEY]: "experimental" },
194
- },
195
- [STABILITY_TIER_KEY]: "stable",
196
- };
197
- }
198
- properties.startup = {
199
- type: "object",
200
- additionalProperties: true,
201
- properties: {
202
- mode: {
203
- type: "string",
204
- enum: ["quick", "full", "minimal"],
205
- [STABILITY_TIER_KEY]: "experimental",
206
- },
207
- scans: {
208
- type: "object",
209
- additionalProperties: true,
210
- properties: {
211
- enabled: { type: "boolean", [STABILITY_TIER_KEY]: "experimental" },
212
- },
213
- [STABILITY_TIER_KEY]: "experimental",
214
- },
215
- },
216
- [STABILITY_TIER_KEY]: "stable",
217
- };
218
- // The four legacy ROOT LSP keys. Still accepted for their deprecation window
219
- // (#2418 registry), and `experimental` because they are scheduled for
220
- // removal — a `stable` tier on a key with a `removeNotBefore` would be two
221
- // registries contradicting each other.
222
- //
223
- // NO deny annotation, unlike round 1 of #2427 (review round 2, F1). Round 1
224
- // annotated BOTH spellings and got two independent deny unions for one
225
- // setting, neither seeing the other tiers. Both resolution entry points now
226
- // normalize a document legacy root LSP keys into the `lsp` namespace before
227
- // merging, so this node never receives a contribution at all and a policy on
228
- // it could not fire. The denial is resolved once, at the canonical node,
229
- // over every tier and every spelling — which is what the second annotation
230
- // was trying to achieve and structurally could not.
231
- for (const key of LEGACY_ROOT_LSP_KEYS) {
232
- properties[key] = opaque("experimental");
233
- }
234
- properties[LSP_NAMESPACE_KEY] = lspNamespace();
235
- properties[CONFIG_SCHEMA_ANCHOR_KEY] = {
236
- type: "string",
237
- description: "Identity anchor naming the schema version this config was written against.",
238
- [STABILITY_TIER_KEY]: "stable",
239
- };
240
- return {
241
- $schema: CONFIG_SCHEMA_DIALECT,
242
- $id: CONFIG_SCHEMA_ID,
243
- type: "object",
244
- // See shape 1 in the module doc: deliberately open, so the loaders keep
245
- // their own richer unknown-key diagnostics.
246
- additionalProperties: true,
247
- properties,
248
- };
249
- }
250
- /** The canonical schema both canonical files are validated against. */
251
- export const PI_LENS_CONFIG_SCHEMA = buildConfigSchema();
@@ -1,407 +0,0 @@
1
- /**
2
- * The ONE seam for "a config the user wrote is being ignored" (#2418).
3
- *
4
- * Three loaders — `clients/lsp/config.ts`, `clients/lens-config.ts`,
5
- * `clients/project-lens-config.ts` — each degraded a malformed config to
6
- * defaults and warned about it, with three near-identical bodies: a warn-once
7
- * latch, a `logExtension` line, and a `notifyUserDegradation` call. Three
8
- * copies meant three places to forget the stable diagnostic code, and three
9
- * places for the message shape to drift. They now share this helper, which
10
- * owns all four obligations:
11
- *
12
- * 1. the warn-once latch, keyed on (subsystem, file, key, reason) so a repeat
13
- * load of the same broken file does not re-nag the user;
14
- * 2. the MACHINE-audience `extension.log` line;
15
- * 3. the durable degradation-ledger row, through the repo's existing
16
- * `recordDegradationOnce` choke point rather than a parallel tally;
17
- * 4. the HUMAN-audience notification, carrying the stable `PILENS_CFG_*` code
18
- * that `docs/public-api-stability.md` makes the user's match key.
19
- *
20
- * The message prose is assembled here from a per-subsystem label so every
21
- * caller's rendered string is byte-identical to what it emitted before the
22
- * extraction — the prose is not API (the code is), but silently rewording a
23
- * warning inside a refactor is still not a thing this PR does.
24
- */
25
- import { DEPRECATED_CONFIG_SURFACES, withConfigDiagnosticCode, } from "./config-diagnostic-codes.js";
26
- import { recordDegradationOnce } from "./degradation-ledger.js";
27
- import { errorClassName } from "./error-class.js";
28
- import { logExtension } from "./extension-log.js";
29
- import { redactSecrets } from "./redact/secrets.js";
30
- import { notifyUserDegradation } from "./user-notify.js";
31
- /**
32
- * The noun each subsystem uses for the config it is ignoring. These strings
33
- * are load-bearing for byte-identical prose: `ignoring invalid LSP config …`,
34
- * `… global config …`, `… project config …` are what shipped before #2418
35
- * extracted this helper, and `tests/clients/lsp/config.test.ts` +
36
- * `tests/clients/project-lens-config.test.ts` still assert on them.
37
- */
38
- const SUBSYSTEM_CONFIG_LABEL = {
39
- "lsp-config": "LSP config",
40
- "lens-config": "global config",
41
- "project-lens-config": "project config",
42
- };
43
- /**
44
- * The code every ignored-config warning carries: PILENS_CFG_0001, "config file
45
- * unreadable or unparsable; ignored". Named here rather than repeated at three
46
- * call sites so the registry entry has exactly one referent in production code.
47
- */
48
- const IGNORED_CONFIG_CODE = "PILENS_CFG_0001";
49
- /**
50
- * The degradation kind this helper records under. One kind for all three
51
- * loaders: the subject discriminates WHICH file, and `metadata.subsystem`
52
- * discriminates which loader, so aggregation answers both without a kind
53
- * explosion.
54
- */
55
- const IGNORED_CONFIG_KIND = "config-ignored";
56
- /**
57
- * The degradation kind a DEPRECATION notice records under (#2426).
58
- *
59
- * Kept apart from `config-ignored` because the two are opposite facts about a
60
- * session: an ignored config means pi-lens ran on defaults instead of what the
61
- * user asked for, while a deprecated one means it ran on exactly what the user
62
- * asked for and the location will stop working. Folding them together would
63
- * have made "how many sessions ran degraded" un-answerable from the ledger.
64
- */
65
- const DEPRECATED_CONFIG_KIND = "config-deprecated";
66
- /**
67
- * The code that says a notice LIST was truncated (#2426 review round 6, F2).
68
- *
69
- * It is the one code on this seam that describes the OUTPUT rather than the
70
- * config, so it is the one that must not inherit either default below.
71
- */
72
- const SUPPRESSED_NOTICE_CODE = "PILENS_CFG_0007";
73
- /**
74
- * The degradation kind a SUPPRESSED-NOTICE summary records under (#2426 review
75
- * round 6, F2).
76
- *
77
- * Neither of the other two: nothing was ignored and nothing is deprecated —
78
- * a legacy file whose 28 settings ALL applied still overflows the bound, and
79
- * before this it produced a `config-ignored` row and an `ignoring invalid
80
- * project config` notice for a file with nothing invalid in it. That is the
81
- * same inversion `DEPRECATED_CONFIG_KIND` exists to prevent, arriving through
82
- * the default branch instead of through a wrong one.
83
- */
84
- const SUPPRESSED_NOTICE_KIND = "config-notice-suppressed";
85
- /**
86
- * The codes that mean "accepted, but deprecated". DERIVED from the deprecation
87
- * registry rather than listed, so a future `kind` of deprecated surface with a
88
- * new code cannot render as `ignoring invalid …` by omission.
89
- */
90
- const DEPRECATION_NOUN_BY_CODE = new Map(DEPRECATED_CONFIG_SURFACES.map((row) => [
91
- row.code,
92
- row.kind === "file" ? "location" : "key",
93
- ]));
94
- /** Warn-once latch, keyed on (subsystem, file, key, reason). */
95
- const warnedIgnoredConfigs = new Set();
96
- /**
97
- * The one shape `JSON.parse`'s own `SyntaxError#message` states a position
98
- * in, on every supported Node (CI pins Node 22; V8 has emitted `at position N
99
- * (line L column C)` for this shape since ~Node 20). Captures the absolute
100
- * offset too (group 1), not just V8's own stated line/col (groups 2, 3):
101
- * with source text in hand, line/col is recomputed by scanning the source
102
- * ourselves rather than trusted from the message (#2451) — the offset is
103
- * still just a digit, kept only as the pre-#2451 fallback for a caller that
104
- * has no source text to scan.
105
- *
106
- * V8 also emits a position-free shape for a token error — `Unexpected token
107
- * 'x', "<snippet>"... is not valid JSON` — which carries no position at all,
108
- * only a slice of the source text being parsed. That is the exact shape
109
- * #2431's evidence hit (`ghp_SECRET` sitting in the snippet on Node 24), and
110
- * `locateSyntaxErrorOffset` below locates it in the source instead.
111
- */
112
- const JSON_PARSE_POSITION = /at position (\d+) \(line (\d+) column (\d+)\)/;
113
- /**
114
- * True for `JSON.parse`'s own `SyntaxError`, including one thrown across a
115
- * realm boundary (e.g. `vm.runInContext`), where BOTH `instanceof SyntaxError`
116
- * and `instanceof Error` fail — a realm-bound object's prototype chain
117
- * resolves through that OTHER realm's `Error.prototype`/`Object.prototype`,
118
- * never this one's. Duck-typed on `name` and `message` instead, which are
119
- * plain string own/inherited properties readable regardless of which realm's
120
- * prototype chain the object carries.
121
- */
122
- function isSyntaxError(error) {
123
- return (typeof error === "object" &&
124
- error !== null &&
125
- error.name === "SyntaxError" &&
126
- typeof error.message === "string");
127
- }
128
- /**
129
- * Line (1-based) and column (1-based, V8's own convention) of a character
130
- * offset, scanned directly from the source — never trusted from anything the
131
- * message states (#2451). `offset` is always in `[0, sourceText.length]`: it
132
- * comes from either V8's own `at position N` digit (bounded by construction —
133
- * V8 cannot state a position past the text it just parsed) or a snippet
134
- * `indexOf` match inside `sourceText` itself, so there is no out-of-range
135
- * case for this function to guard against.
136
- */
137
- function lineColAt(sourceText, offset) {
138
- let line = 1;
139
- let lastNewline = -1;
140
- for (let i = 0; i < offset; i++) {
141
- if (sourceText[i] === "\n") {
142
- line++;
143
- lastNewline = i;
144
- }
145
- }
146
- return { line, col: offset - lastNewline };
147
- }
148
- /**
149
- * Split V8's position-free `Unexpected token` message into the offending
150
- * token and the (possibly truncated) source snippet around it.
151
- *
152
- * NOT regex-quote-matched: the snippet is a raw slice of the user's source
153
- * text and can itself contain `"`, which a `/"([\s\S]*?)"/`-shaped pattern
154
- * would stop at prematurely (`{"a": ghp_SECRET` has one right after the
155
- * opening `{`). Fixed prefix/suffix stripping instead, which is exact
156
- * regardless of what the snippet contains.
157
- */
158
- function parseUnexpectedTokenMessage(message) {
159
- const prefix = "Unexpected token '";
160
- if (!message.startsWith(prefix))
161
- return undefined;
162
- const closeIdx = message.indexOf("', ", prefix.length);
163
- // No explicit `closeIdx === -1` branch: when the marker is missing,
164
- // `closeIdx` is `-1`, so `rest` below starts at `message[2]` — always
165
- // still inside the fixed `prefix` text the `startsWith` check just
166
- // confirmed, never `"`. The `rest.startsWith('"')` check a few lines down
167
- // already rejects that case; a second explicit check here could never be
168
- // exercised by any input that passes the first, so it stayed untestable
169
- // dead code rather than a guard (#2451 mutation pass).
170
- const token = message.slice(prefix.length, closeIdx);
171
- let rest = message.slice(closeIdx + 3);
172
- if (rest.startsWith("..."))
173
- rest = rest.slice(3);
174
- if (!rest.startsWith('"'))
175
- return undefined;
176
- rest = rest.slice(1);
177
- const truncatedSuffix = '"... is not valid JSON';
178
- const plainSuffix = '" is not valid JSON';
179
- const snippet = rest.endsWith(truncatedSuffix)
180
- ? rest.slice(0, -truncatedSuffix.length)
181
- : rest.endsWith(plainSuffix)
182
- ? rest.slice(0, -plainSuffix.length)
183
- : undefined;
184
- // No explicit `snippet.length === 0` branch: `String#indexOf("")` matches
185
- // at EVERY position, so an empty snippet always fails the caller's
186
- // uniqueness check (`sourceText.indexOf(snippet, snippetAt + 1) !== -1`
187
- // is true at every offset, including on an empty `sourceText`) — a second
188
- // explicit check here could never be exercised by any input the first
189
- // does not already catch (#2451 mutation pass).
190
- return snippet === undefined ? undefined : { token, snippet };
191
- }
192
- /**
193
- * Locate a `JSON.parse` `SyntaxError`'s offset in ITS OWN source text
194
- * (#2451). Two shapes, both anchored to the source rather than to anything
195
- * V8 states about it:
196
- *
197
- * - `at position N`: N is already an exact offset.
198
- * - `Unexpected token 'x', "<snippet>"...`: no offset in the message at all,
199
- * only a slice of the source. `snippet` is searched for in `sourceText`
200
- * with `indexOf`; a match that is not unique is not trusted (the wrong
201
- * occurrence would report a false location, and a `config-ignored` reason
202
- * is not worth that risk). Inside a unique match, the offending token's
203
- * own OFFSET is used when it too occurs exactly once in the snippet — the
204
- * common case (JSON punctuation, a typo'd letter) — otherwise the snippet's
205
- * own start stands in: still the correct line far more often than not
206
- * (the snippet is a ~20-char window around the real offset), never a
207
- * snippet the user did not already put in their own file.
208
- *
209
- * Returns `undefined` when neither shape locates unambiguously — the honest,
210
- * safe answer, which the caller degrades to the bare class name for.
211
- */
212
- function locateSyntaxErrorOffset(message, sourceText) {
213
- const stated = JSON_PARSE_POSITION.exec(message);
214
- if (stated)
215
- return Number(stated[1]);
216
- const parsed = parseUnexpectedTokenMessage(message);
217
- if (!parsed)
218
- return undefined;
219
- const { token, snippet } = parsed;
220
- const snippetAt = sourceText.indexOf(snippet);
221
- if (snippetAt === -1 || sourceText.indexOf(snippet, snippetAt + 1) !== -1) {
222
- return undefined;
223
- }
224
- const tokenAt = snippet.indexOf(token);
225
- const onlyTokenOccurrence = tokenAt !== -1 && snippet.indexOf(token, tokenAt + 1) === -1;
226
- return snippetAt + (onlyTokenOccurrence ? tokenAt : 0);
227
- }
228
- /**
229
- * Normalize a caught parse/validation error into a bounded, snippet-free
230
- * reason: the error's own class plus a position, when one can be derived —
231
- * NEVER the raw message (#2431), and never anything but the class name at
232
- * all for a `classOnly` caller (#2451).
233
- *
234
- * `JSON.parse`'s `SyntaxError#message` is DOCUMENTED (V8) to embed a slice of
235
- * the source text being parsed. A user's malformed config that happens to
236
- * carry a credential next to the syntax error would otherwise leak it into
237
- * `extension.log`, the user-facing notification, and the durable
238
- * degradation-ledger row through this one seam — so a `SyntaxError` NEVER
239
- * keeps its message, position-derived or not.
240
- *
241
- * Every other caught error reaching this helper (a loader's own hand-thrown
242
- * validation error, an `fs` error) is not documented to embed file content,
243
- * and is additionally routed through the repo's own secret scanner
244
- * (`redactSecrets`) — but that scanner is a floor, not a guarantee: it only
245
- * recognizes secrets shaped like its registered patterns and long enough to
246
- * clear each pattern's `minSuffixLength` (16-40 chars), so a short truncated
247
- * fragment of a real credential can still pass through untouched. It is
248
- * still worth calling on this branch because most non-`SyntaxError` messages
249
- * are hand-authored by this codebase, not engine dumps of file content — but
250
- * `normalizeParseErrorReason`'s own guarantee (no message survives at all)
251
- * applies only to the `SyntaxError` branch (and, unconditionally, to a
252
- * `classOnly` caller). `warnIgnoredConfigOnce` (the one `{ parseError }`
253
- * caller) additionally redacts EVERY reason, including hand-authored ones,
254
- * so a caller-composed string that happens to interpolate file content (a
255
- * user-authored config KEY, a rule id) is still covered.
256
- */
257
- export function normalizeParseErrorReason(error, options = {}) {
258
- if (options.classOnly) {
259
- return errorClassName(error);
260
- }
261
- if (isSyntaxError(error)) {
262
- if (options.sourceText !== undefined) {
263
- const offset = locateSyntaxErrorOffset(error.message, options.sourceText);
264
- if (offset !== undefined) {
265
- const { line, col } = lineColAt(options.sourceText, offset);
266
- return `${error.name} at line ${line} col ${col}`;
267
- }
268
- return error.name;
269
- }
270
- const match = JSON_PARSE_POSITION.exec(error.message);
271
- return match
272
- ? `${error.name} at line ${match[2]} col ${match[3]}`
273
- : error.name;
274
- }
275
- const message = error instanceof Error ? error.message : String(error);
276
- return redactSecrets(message);
277
- }
278
- /**
279
- * Which durable kind a notice records under. Three facts, three kinds, decided
280
- * in ONE place so a fourth code cannot inherit "ignored" by falling through.
281
- */
282
- function degradationKindFor(suppressedNotice, deprecationNoun) {
283
- if (suppressedNotice)
284
- return SUPPRESSED_NOTICE_KIND;
285
- return deprecationNoun ? DEPRECATED_CONFIG_KIND : IGNORED_CONFIG_KIND;
286
- }
287
- /**
288
- * The rendered prose for one notice.
289
- *
290
- * The two pre-existing shapes are BYTE-IDENTICAL to what shipped — several
291
- * suites assert on them — and the third is deliberately built from neither
292
- * vocabulary: a truncation summary describes the notice list, never the
293
- * config, so it says nothing about the file being invalid or ignored.
294
- */
295
- function noticeMessage(options) {
296
- const label = SUBSYSTEM_CONFIG_LABEL[options.subsystem];
297
- if (options.suppressedNotice) {
298
- return `${label} notices for ${options.file} were summarised: ${options.reason}`;
299
- }
300
- return options.deprecationNoun
301
- ? `deprecated ${label} ${options.deprecationNoun} in ${options.file}: ${options.reason}`
302
- : `ignoring invalid ${label} ${options.file}: ${options.reason}`;
303
- }
304
- /**
305
- * Warn once that a config file (or one key in it) is being ignored.
306
- *
307
- * Fires the durable ledger row, the machine log, and the user-facing
308
- * notification. Every one of the three is bounded, but on two DIFFERENT
309
- * lifetimes: the latch here bounds the log line and the notification for the
310
- * life of the PROCESS, while `recordDegradationOnce` bounds the ledger row on
311
- * (kind, subject) for the life of the SESSION. That is why the ledger call sits
312
- * in front of the latch's early return — see the comment on it. The ledger
313
- * bound is also coarser, so a file failing for two different reasons warns
314
- * twice but is counted as one degraded config.
315
- */
316
- export function warnIgnoredConfigOnce(options) {
317
- const { subsystem, file, key } = options;
318
- const code = options.code ?? IGNORED_CONFIG_CODE;
319
- // The ONLY place a caught parse/read error becomes a string (#2431). A
320
- // `{ parseError }` is normalized to error class + position, never the raw
321
- // message. A hand-authored reason is still `redactSecrets`-scrubbed here —
322
- // review round 2, F1: several callers interpolate a user-authored KEY or
323
- // rule id straight from the parsed config (`unknown key "${key}" is not a
324
- // recognized pi-lens setting`), so "hand-authored" does not mean
325
- // "content-free"; the ONE seam every caller shares is where that gets
326
- // caught, not each of the ~8 call sites that format one of these strings.
327
- const reason = redactSecrets(typeof options.reason === "string"
328
- ? options.reason
329
- : normalizeParseErrorReason(options.reason.parseError, {
330
- sourceText: options.reason.sourceText,
331
- }));
332
- // The durable half (#2418 F6), and it runs BEFORE the latch on purpose
333
- // (#2418 review round 3, F1). The latch is a PROCESS-lifetime Set; the
334
- // ledger is per SESSION, reset by `resetDegradationLedger()` at the top of
335
- // `handleSessionStart`. With the early return in front of this call, every
336
- // session after the first recorded nothing while the config on disk was
337
- // still ignored — the exact catalog-shape-17 defect
338
- // `refreshGrammarSessionLatches` exists to prevent in tree-sitter-client.
339
- //
340
- // No second, generation-compared latch is needed to re-arm it, unlike that
341
- // precedent: `recordDegradationOnce` already dedupes on (kind, subject)
342
- // through its own once-key set, and that set IS cleared by the ledger
343
- // reset. Calling it unconditionally makes the ledger the single source of
344
- // truth for "once per session", instead of a parallel Set here that mirrors
345
- // it and has to be kept in step. (tree-sitter needs its own gates because
346
- // they guard `incrementDegradationCount`, which counts EVERY call, plus
347
- // non-ledger state.)
348
- //
349
- // Subject is `<file>\0<key>` when a single key is rejected, and plain
350
- // `<file>` otherwise, so a per-key rejection and a whole-file rejection are
351
- // distinct rows for the same file without a trailing separator on every row.
352
- const suppressedNotice = code === SUPPRESSED_NOTICE_CODE;
353
- const deprecationNoun = suppressedNotice
354
- ? undefined
355
- : DEPRECATION_NOUN_BY_CODE.get(code);
356
- recordDegradationOnce({
357
- kind: degradationKindFor(suppressedNotice, deprecationNoun),
358
- subject: key ? `${file}\0${key}` : file,
359
- reason,
360
- metadata: { subsystem, configPath: file },
361
- code,
362
- });
363
- const latchKey = `${subsystem}\0${file}\0${key ?? ""}\0${reason}`;
364
- if (warnedIgnoredConfigs.has(latchKey))
365
- return;
366
- warnedIgnoredConfigs.add(latchKey);
367
- // Three prose shapes for three different facts. A deprecation notice — or a
368
- // truncation summary — that said "ignoring invalid …" would tell the user
369
- // their setting is not being applied when it IS: the one thing #2426's
370
- // "no user is broken silently" rule cannot afford to get backwards.
371
- const message = noticeMessage({
372
- subsystem,
373
- file,
374
- reason,
375
- suppressedNotice,
376
- deprecationNoun,
377
- });
378
- logExtension({
379
- subsystem,
380
- level: "warn",
381
- message: withConfigDiagnosticCode(message, code),
382
- metadata: { configPath: file, reason, code, ...(key ? { key } : {}) },
383
- });
384
- // HUMAN-audience too: a config the user wrote is being ignored. Routed
385
- // through the host's own render path (#1333), never a raw write. The stable
386
- // code (#2418) is what a user matches or suppresses on; the prose may still
387
- // change. Once per PROCESS, deliberately: re-nagging about the same broken
388
- // file at every session boundary is noise, while the ledger row above is
389
- // the per-session record.
390
- notifyUserDegradation(`pi-lens: ${message}`, "warning", { code });
391
- }
392
- /**
393
- * Clear the warn-once latch. Test-only seam, and the one the loaders' own
394
- * reset helpers delegate to — a subsystem argument clears just that loader's
395
- * entries so one loader's test cannot silently un-latch another's.
396
- */
397
- export function resetIgnoredConfigWarnCache(subsystem) {
398
- if (!subsystem) {
399
- warnedIgnoredConfigs.clear();
400
- return;
401
- }
402
- for (const latchKey of warnedIgnoredConfigs) {
403
- if (latchKey.startsWith(`${subsystem}\0`)) {
404
- warnedIgnoredConfigs.delete(latchKey);
405
- }
406
- }
407
- }