@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,422 +0,0 @@
1
- /**
2
- * Minimal Cargo.toml reading — table-section slicing plus string-array and
3
- * scalar-string parsing.
4
- *
5
- * Single source of truth (AGENTS.md: "a hand-maintained list that mirrors a
6
- * registry is a defect"; the same rule applies to a second regex TOML
7
- * reader). `extractTomlTableSection`/`parseTomlStringArray` originated in
8
- * `clients/lsp/server.ts`'s rust-analyzer workspace-root hoisting
9
- * (#1671/#1693) and now live here so `clients/formatters.ts`'s rustfmt
10
- * `--edition` resolution (#2466) reuses the exact same parser instead of a
11
- * second hand-rolled one. `clients/lsp/server.ts` re-imports them from here.
12
- *
13
- * The ONE Cargo.toml reader in the tree (#2473): `clients/review-graph/
14
- * workspace-modules.ts`'s `scanCargoModules`/`detectWorkspaceType` used to
15
- * carry an independent regex TOML reader (`extractTomlArray`/
16
- * `extractTomlSection`/`extractTomlString`) for module-graph construction — a
17
- * third copy, folded onto `readCargoPackageName`/`readCargoWorkspaceMembers`/
18
- * `readCargoDependencyNames` below. That fold also fixed a latent defect:
19
- * the old `extractTomlString` was NOT table-scoped — it scanned the whole
20
- * file for the first `key = "value"` line regardless of which table it fell
21
- * under, so a member manifest with a `name` key under an EARLIER non-package
22
- * table (a `[[bin]] name = "..."` or `[package.metadata.*]` block preceding
23
- * `[package]`) silently returned the wrong crate name. `readCargoPackageName`
24
- * is table-scoped via `extractTomlTableSection` like every other reader here.
25
- *
26
- * Review round 2 (PR #2480) hardened the fold itself: `extractTomlTableSection`
27
- * and `parseTomlStringArray` now run everything through {@link normalizeToml}
28
- * (CRLF→LF, plus a per-line `#`-to-EOL comment strip that respects quoted
29
- * strings) before any regex runs, and both the table heading and its
30
- * terminator are anchored with `[ \t]*` rather than bare `^` so an indented
31
- * heading or sub-table is read the same way the pre-fold, per-line `.trim()`d
32
- * reader read it. `readCargoWorkspaceMembers` also gained `[workspace]`
33
- * table-scoping and a sibling `readCargoWorkspaceExclude`, both now reused by
34
- * `clients/lsp/server.ts` instead of that file hand-composing the same two
35
- * primitives itself.
36
- *
37
- * #2480's fold missed a THIRD `[workspace]` presence check: `clients/lsp/
38
- * server.ts`'s `RustWorkspaceRoot` walk-up carried its own
39
- * `/^\s*\[workspace\]/m.test(...)`, four lines above the call it had already
40
- * folded onto this file's readers. {@link hasCargoWorkspaceTable} closes that
41
- * gap (#2498) — the one presence check every caller (that walk-up, and both
42
- * of {@link resolveCargoPackageEdition}'s own checks below) now shares.
43
- */
44
- import { readFile } from "node:fs/promises";
45
- import * as os from "node:os";
46
- import * as path from "node:path";
47
- import { logExtension } from "./extension-log.js";
48
- import { findNearestMarkerRoot, isAtOrAboveHomeDir } from "./path-utils.js";
49
- export async function readTextFileOrUndefined(filePath) {
50
- try {
51
- return await readFile(filePath, "utf-8");
52
- }
53
- catch {
54
- return undefined;
55
- }
56
- }
57
- /**
58
- * Strip a `#`-to-end-of-line TOML comment from one line, leaving a `#`
59
- * character INSIDE a single- or double-quoted string alone (a version spec or
60
- * path containing a literal `#` is unusual but legal TOML). A whole-line
61
- * comment (the line's first non-whitespace character is `#`) reduces to "".
62
- */
63
- function stripTomlLineComment(line) {
64
- let quote = null;
65
- for (let i = 0; i < line.length; i++) {
66
- const ch = line[i];
67
- if (quote) {
68
- if (ch === quote)
69
- quote = null;
70
- continue;
71
- }
72
- if (ch === '"' || ch === "'") {
73
- quote = ch;
74
- continue;
75
- }
76
- if (ch === "#")
77
- return line.slice(0, i);
78
- }
79
- return line;
80
- }
81
- /**
82
- * Normalize CRLF to LF and strip `#`-to-EOL comments line by line. Every
83
- * regex-based reader below runs on the result.
84
- *
85
- * The CRLF→LF pass is DEFENSIVE, not the fix for a real match failure —
86
- * review round 2, F2 originally claimed a CRLF manifest's `\r` broke the
87
- * heading/terminator `$` anchor; it does not, because ECMAScript's
88
- * multiline `$`/`^` treat a bare `\r` as a line terminator on its own (same
89
- * as `\n`), so the `adv-e-crlf` fixture passes this suite even with this
90
- * `.replace(/\r\n/g, "\n")` call removed (review round 3, F2 — verified by
91
- * mutation: dropping the line left all tests green). It stays as
92
- * belt-and-braces normalization — a single LF-only code path for every
93
- * downstream regex is simpler to reason about than "also correct on `\r\n`
94
- * by an ECMAScript technicality" — and because `.split("\n")` below would
95
- * otherwise leave a trailing `\r` on each line for {@link stripTomlLineComment}
96
- * to walk past.
97
- *
98
- * The comment-strip pass IS load-bearing (review round 2, F1 — the pre-fold
99
- * `extractTomlArray` stripped comments per line before collecting; the
100
- * fold's single multi-line regex scan dropped that pass, so a commented-out
101
- * `# "member",` line stayed live because nothing removed it before the
102
- * quoted-string scan ran over the whole bracketed span). A commented-out
103
- * entry must never survive into a captured table/array body.
104
- *
105
- * A leading UTF-8 BOM (`\uFEFF`) is stripped first — valid at the start of a
106
- * Cargo.toml (rust-lang/cargo#2031) — because it sits OUTSIDE every reader's
107
- * heading/key anchor below (`[ \t]*`, not `\s*`) and would otherwise hide a
108
- * table or key on the file's very first line. #2498's `RustWorkspaceRoot`
109
- * walk-up used to carry its own `/^\s*\[workspace\]/m` check, and ES's `\s`
110
- * class DOES include `\uFEFF` — so that hand-rolled regex accepted a
111
- * BOM-prefixed manifest by accident; folding it onto this shared reader
112
- * without this strip would have silently regressed that shape (review round
113
- * 2, F4).
114
- */
115
- function normalizeToml(content) {
116
- return content
117
- .replace(/^\uFEFF/, "")
118
- .replace(/\r\n/g, "\n")
119
- .split("\n")
120
- .map(stripTomlLineComment)
121
- .join("\n");
122
- }
123
- /**
124
- * Slice out ONE top-level TOML table's raw body — from its `[name]` heading
125
- * to the next top-level `[...]`/`[[...]]` heading or EOF. `members`/`exclude`
126
- * must be read from the `[workspace]` table specifically: `[package]` has its
127
- * OWN `exclude` key (the standard cargo-publish exclude list, conventionally
128
- * written above `[workspace]` in a virtual-manifest-less root crate), and a
129
- * whole-file regex would misread it as workspace membership (#1671 F4).
130
- *
131
- * Both the heading and the terminating next-heading are anchored with
132
- * `[ \t]*` rather than bare `^` — TOML does not require a table heading to
133
- * start in column 0, and the pre-fold reader (which `.trim()`ed each line
134
- * before comparing) accepted an indented ` [package]` or ` [dependencies.
135
- * tokio]` sub-table. The column-0-only anchor this fold shipped with missed
136
- * both: an indented `[package]` heading never matched at all (the table read
137
- * as absent), and an indented sub-table heading never terminated the parent
138
- * slice (its keys leaked into the parent table's body) — review round 2, F2.
139
- *
140
- * Returns `undefined` when the table is ABSENT and `""` when the table IS
141
- * present but has an empty body (its heading is immediately followed by EOF
142
- * or the next heading, e.g. `[workspace]` as the last line of the file with
143
- * no trailing newline, or `[workspace] `/`[workspace] # root` at EOF) —
144
- * review round 3, F1. Both used to collapse to the same `""` sentinel, so a
145
- * caller checking `!== ""` to mean "table present" silently misread a
146
- * present-but-empty table as absent. Callers that only care about the table's
147
- * CONTENT (feeding the result to {@link parseTomlStringArray}/
148
- * {@link parseTomlScalarString}, which both already treat `undefined` as "no
149
- * match") are unaffected; callers that check PRESENCE must compare against
150
- * `undefined`, not `""`.
151
- */
152
- export function extractTomlTableSection(content, tableName) {
153
- const normalized = normalizeToml(content);
154
- const heading = new RegExp(`^[ \\t]*\\[${tableName}\\][ \\t]*(?:#.*)?$`, "m");
155
- const match = heading.exec(normalized);
156
- if (!match)
157
- return undefined;
158
- const rest = normalized.slice(match.index + match[0].length);
159
- const nextHeading = rest.match(/^[ \t]*\[{1,2}[^\]]+\]{1,2}[ \t]*(?:#.*)?$/m);
160
- return nextHeading?.index !== undefined
161
- ? rest.slice(0, nextHeading.index)
162
- : rest;
163
- }
164
- export function parseTomlStringArray(content, key) {
165
- if (content === undefined)
166
- return [];
167
- const normalized = normalizeToml(content);
168
- const match = normalized.match(new RegExp(`^[ \\t]*${key}[ \\t]*=[ \\t]*\\[([\\s\\S]*?)\\]`, "m"));
169
- if (!match)
170
- return [];
171
- return [...match[1].matchAll(/"([^"]*)"|'([^']*)'/g)].map((m) => (m[1] ?? m[2] ?? "").trim());
172
- }
173
- /**
174
- * Read a scalar `key = "value"` / `key = 'value'` line out of a TOML table
175
- * section. Anchored to line-start so `swift-edition = "..."` never matches a
176
- * `key` of `edition`, and a dotted-key inheritance line (`edition.workspace =
177
- * true`) never matches either — the literal key is immediately followed by
178
- * `=`, not `.`.
179
- */
180
- function parseTomlScalarString(content, key) {
181
- if (content === undefined)
182
- return undefined;
183
- const match = content.match(new RegExp(`^[ \\t]*${key}[ \\t]*=[ \\t]*(?:"([^"]*)"|'([^']*)')`, "m"));
184
- if (!match)
185
- return undefined;
186
- return match[1] ?? match[2];
187
- }
188
- /**
189
- * True when `content` declares a `[workspace]` table — table-scoped and
190
- * comment/indentation/CRLF-tolerant like every other reader here, because it
191
- * IS `extractTomlTableSection` underneath. Presence is `!== undefined`, not a
192
- * truthiness check on the returned string: an empty `[workspace]` table (a
193
- * heading with no keys) returns `""`, which reads as falsy but is a valid
194
- * "table present" answer (`extractTomlTableSection`'s own doc comment covers
195
- * this — review round 3, F1).
196
- *
197
- * Exists so a caller that only needs the yes/no answer does not hand-roll a
198
- * `\[workspace\]` regex to get it — that regex, four lines above
199
- * `cargoWorkspaceDeclaresMember` in `clients/lsp/server.ts`, was behaviorally
200
- * identical to this call under every probed shape (comments, indentation,
201
- * CRLF, trailing content) but sat outside the one Cargo.toml reader #2473
202
- * consolidated the rest of this file's callers onto (#2498).
203
- */
204
- export function hasCargoWorkspaceTable(content) {
205
- return hasTomlTable(content, "workspace");
206
- }
207
- /**
208
- * True when `content` declares the table `tableName` — the yes/no half of
209
- * {@link extractTomlTableSection}, for readers that only need presence.
210
- * `tableName` is a regex SOURCE (it is interpolated into the heading pattern),
211
- * so a dotted table escapes its dots: `"tool\\.uv\\.workspace"`.
212
- *
213
- * Exists so a second file does not re-derive the `!== undefined` comparison
214
- * that {@link hasCargoWorkspaceTable} exists to hold: `clients/
215
- * python-environment.ts`'s uv-workspace discovery carried a private
216
- * `hasUvWorkspaceTable` that was this function's body with a different table
217
- * name (review round 2, F5). The `!== undefined` (not a truthy test) is the
218
- * load-bearing part both callers share: an empty table — a heading with no
219
- * keys — extracts as `""`, which is falsy but IS "table present".
220
- */
221
- export function hasTomlTable(content, tableName) {
222
- return extractTomlTableSection(content, tableName) !== undefined;
223
- }
224
- /**
225
- * Read a crate's `[package] name`, table-scoped to the `[package]` section
226
- * specifically (#2473) — NOT the first `name = "..."` line in the file. A
227
- * member manifest commonly has other tables with their own `name` key
228
- * (`[[bin]] name = "..."`, `[package.metadata.*]` blocks); reading unscoped
229
- * silently returns whichever happens to sit first in the file.
230
- */
231
- export function readCargoPackageName(content) {
232
- const packageSection = extractTomlTableSection(content, "package");
233
- return parseTomlScalarString(packageSection, "name");
234
- }
235
- /**
236
- * Read `members` off a (typically root/virtual) Cargo.toml for workspace
237
- * expansion, table-scoped to `[workspace]` (review round 2, F4). A whole-file
238
- * `members` regex silently also matches `[workspace.metadata.*] members =
239
- * [...]` or any other table happening to declare a same-named key — the
240
- * exact "unscoped read of a same-named key under an unrelated table" defect
241
- * shape `readCargoPackageName` above was already fixed for (#2473), except
242
- * this reader shipped the fold WITHOUT that scoping and called it out
243
- * explicitly as intentional in the comment this replaces. It also duplicated
244
- * `clients/lsp/server.ts`'s independent, already-correctly-scoped
245
- * `extractTomlTableSection(content, "workspace")` + `parseTomlStringArray`
246
- * hand-composition for its own `members`/`exclude` read — the SAME
247
- * single-source-of-truth violation #2473 was filed to close for the OTHER
248
- * two Cargo.toml readers. `clients/lsp/server.ts` now calls this function
249
- * (and {@link readCargoWorkspaceExclude} below) instead of re-composing the
250
- * two primitives itself.
251
- */
252
- export function readCargoWorkspaceMembers(content) {
253
- return parseTomlStringArray(extractTomlTableSection(content, "workspace"), "members");
254
- }
255
- /**
256
- * Read `exclude` off a (typically root/virtual) Cargo.toml, table-scoped to
257
- * `[workspace]` — `[package]` has its OWN `exclude` key (the cargo-publish
258
- * exclude list; see {@link extractTomlTableSection}'s doc comment), so an
259
- * unscoped read would misread it as workspace exclusion (#1671 F4). Companion
260
- * to {@link readCargoWorkspaceMembers}; both replace `clients/lsp/server.ts`'s
261
- * former hand-composed `extractTomlTableSection` + `parseTomlStringArray`
262
- * pair (review round 2, F4).
263
- */
264
- export function readCargoWorkspaceExclude(content) {
265
- return parseTomlStringArray(extractTomlTableSection(content, "workspace"), "exclude");
266
- }
267
- /**
268
- * List the dependency names declared directly under `[dependencies]` (key
269
- * only — not the version/spec value, which may be a bare string, an inline
270
- * table, or workspace-inherited).
271
- */
272
- export function readCargoDependencyNames(content) {
273
- const section = extractTomlTableSection(content, "dependencies");
274
- if (section === undefined)
275
- return [];
276
- const names = [];
277
- // `section` is already comment-stripped by `extractTomlTableSection`'s
278
- // `normalizeToml` pass (quote-aware). A second, non-quote-aware
279
- // `line.split("#", 1)[0]` re-strip here was redundant AND could wrongly
280
- // truncate a line whose value legitimately contains a `#` inside a quoted
281
- // string — deleted (review round 3, F4).
282
- for (const rawLine of section.split(/\r?\n/)) {
283
- const line = rawLine.trim();
284
- const match = line.match(/^([A-Za-z0-9_-]+)\s*=/);
285
- if (match)
286
- names.push(match[1]);
287
- }
288
- return names;
289
- }
290
- /**
291
- * True when `key` is declared as workspace-inherited: the dotted-key form
292
- * (`edition.workspace = true`) or the inline-table form
293
- * (`edition = { workspace = true }`).
294
- */
295
- function isTomlKeyWorkspaceInherited(content, key) {
296
- if (content === undefined)
297
- return false;
298
- const dotted = new RegExp(`^[ \\t]*${key}\\.workspace[ \\t]*=[ \\t]*true`, "m");
299
- const inline = new RegExp(`^[ \\t]*${key}[ \\t]*=[ \\t]*\\{[^}\\n]*\\bworkspace[ \\t]*=[ \\t]*true`, "m");
300
- return dotted.test(content) || inline.test(content);
301
- }
302
- /**
303
- * rustfmt's `--edition` is a closed enum — 2015/2018/2021/2024 as of rustfmt
304
- * itself, NOT any four-digit string. A manifest typo (`edition = "2019"`) or
305
- * an edition newer than the installed rustfmt understands would otherwise be
306
- * passed straight through `--edition`, and rustfmt rejects an edition it
307
- * doesn't recognize outright — turning EVERY `.rs` format into a hard
308
- * `outcome: "failed"` where the pre-#2466 bare command formatted fine (#2466
309
- * review round 2, F2). When Rust stabilizes a new edition, append it to this
310
- * set — rustfmt's own enum is the forcing function for this list, not a
311
- * pattern match on digit count.
312
- */
313
- const SUPPORTED_RUSTFMT_EDITIONS = new Set(["2015", "2018", "2021", "2024"]);
314
- /**
315
- * Validate a manifest-read edition value against rustfmt's actual enum
316
- * before letting a caller pass it through `--edition`. A defined-but-invalid
317
- * value (as opposed to "no edition found at all") is a config anomaly worth
318
- * a debug trail, not a silent swap to `undefined` — logs the rejected value
319
- * so a future report of "rustfmt still not carrying edition X" has the exact
320
- * string that got refused.
321
- */
322
- function validatedEdition(value, filePath) {
323
- if (value === undefined)
324
- return undefined;
325
- if (SUPPORTED_RUSTFMT_EDITIONS.has(value))
326
- return value;
327
- logExtension({
328
- subsystem: "format",
329
- message: "resolveCargoPackageEdition: manifest edition is not a rustfmt-supported value; falling back to the static rustfmt command",
330
- level: "debug",
331
- metadata: { rejectedEdition: value, filePath },
332
- });
333
- return undefined;
334
- }
335
- /** Read `[workspace.package] edition` out of a manifest that declares it. */
336
- function readWorkspacePackageEdition(content) {
337
- const workspaceSection = extractTomlTableSection(content, "workspace.package");
338
- return parseTomlScalarString(workspaceSection, "edition");
339
- }
340
- /**
341
- * Resolve the four-digit `edition` for the Cargo package that owns
342
- * `filePath`, so a formatter/build tool that needs it doesn't default to an
343
- * older edition than the source actually uses (#2466 — rustfmt silently
344
- * rejecting valid Rust 2024 syntax under an older default edition).
345
- *
346
- * - Finds the nearest readable `Cargo.toml` from `filePath` via the shared
347
- * `findNearestMarkerRoot` walker (home-ceiling guarded, depth-capped —
348
- * AGENTS.md walk-confinement; never a private walk-up loop).
349
- * - Reads `[package] edition` directly when present.
350
- * - When the package declares `edition.workspace = true` (or the inline-table
351
- * equivalent):
352
- * - First checks whether the package's OWN manifest also declares
353
- * `[workspace]` — a root crate can be its own workspace root (`[package]`
354
- * + `[workspace]` + `[workspace.package]` all in one file, a documented,
355
- * common Cargo shape) — before climbing past it (#2466 review round 2,
356
- * F1).
357
- * - Otherwise climbs ancestors — same home-ceiling guard — for the nearest
358
- * one that DECLARES `[workspace]` (Cargo's own workspace-root rule, not
359
- * merely the nearest ancestor Cargo.toml: an intermediate manifest for an
360
- * unrelated plain package is skipped, not treated as the answer — #2466
361
- * review round 2, F1), then reads that root's `[workspace.package]
362
- * edition`.
363
- * - Every edition value (direct or inherited) is checked against rustfmt's
364
- * actual enum (`SUPPORTED_RUSTFMT_EDITIONS`), not just "looks like four
365
- * digits" (#2466 review round 2, F2).
366
- * - Returns `undefined` on any miss (unreadable manifest, no `[package]`
367
- * table, unsupported/invalid value, unresolved inheritance): callers fall
368
- * back to their pre-existing default argv rather than guessing.
369
- *
370
- * `homeDir` defaults to `os.homedir()` and exists as a parameter so tests can
371
- * inject a nearer ceiling and prove the guard actually stops a climb (#2466
372
- * review round 2, F5) — production callers never pass it.
373
- */
374
- export async function resolveCargoPackageEdition(filePath, homeDir = os.homedir()) {
375
- const startDir = path.dirname(path.resolve(filePath));
376
- const packageDir = findNearestMarkerRoot(startDir, ["Cargo.toml"], {
377
- homeDir,
378
- });
379
- if (!packageDir)
380
- return undefined;
381
- const packageContent = await readTextFileOrUndefined(path.join(packageDir, "Cargo.toml"));
382
- if (packageContent === undefined)
383
- return undefined;
384
- const packageSection = extractTomlTableSection(packageContent, "package");
385
- const direct = parseTomlScalarString(packageSection, "edition");
386
- if (direct !== undefined)
387
- return validatedEdition(direct, filePath);
388
- if (!isTomlKeyWorkspaceInherited(packageSection, "edition"))
389
- return undefined;
390
- // The package's own manifest may ALSO be the workspace root — check it
391
- // before climbing so this common shape doesn't fall through to searching
392
- // ancestors for a `[workspace.package]` that's actually right here. Table
393
- // PRESENCE is `!== undefined`, not `!== ""` (review round 3, F1): an
394
- // empty `[workspace]` table (heading with no keys, e.g. the last line of
395
- // the file with no trailing newline) reads as `""`, the SAME value
396
- // `extractTomlTableSection` returns for "table absent" — a `!== ""` check
397
- // would misread this common non-virtual-workspace-root shape as "no
398
- // [workspace] here" and wrongly climb past it.
399
- if (hasCargoWorkspaceTable(packageContent)) {
400
- return validatedEdition(readWorkspacePackageEdition(packageContent), filePath);
401
- }
402
- let current = path.dirname(packageDir);
403
- for (let depth = 0; depth < 64; depth++) {
404
- if (isAtOrAboveHomeDir(current, homeDir))
405
- return undefined;
406
- const ancestorContent = await readTextFileOrUndefined(path.join(current, "Cargo.toml"));
407
- // Cargo's own rule: the workspace root is the nearest ancestor
408
- // Cargo.toml that DECLARES `[workspace]`. An intermediate manifest for
409
- // an unrelated package (no `[workspace]` table) is not it — keep
410
- // climbing past it instead of stopping here. `!== undefined`, not
411
- // `!== ""` — see the same-shaped check above (review round 3, F1).
412
- if (ancestorContent !== undefined &&
413
- hasCargoWorkspaceTable(ancestorContent)) {
414
- return validatedEdition(readWorkspacePackageEdition(ancestorContent), filePath);
415
- }
416
- const parent = path.dirname(current);
417
- if (parent === current)
418
- return undefined;
419
- current = parent;
420
- }
421
- return undefined;
422
- }
@@ -1,196 +0,0 @@
1
- /**
2
- * Cascade neighbour-budget sizing (#1462).
3
- *
4
- * The flat neighbour cap (40) and the turn-end settle wait (5000 ms) were set in
5
- * two different files with nothing relating them. Dogfood 2026-08-15 measured
6
- * what that costs: n=50 cascades, median 30 ms, max 3.88 s at nbr=40 — and with
7
- * a `reverse_deps_cache` refresh ahead of the graph build (2046 ms for
8
- * `logger.ts`) the run overran the turn_end cap, so `cascade_settle_wait`
9
- * returned `settled: 0` and the finding arrived a turn late.
10
- *
11
- * ## What a slow run actually costs
12
- *
13
- * It is NOT lost. `RuntimeCoordinator.settleCascadeRuns` re-parks a promise
14
- * still in flight at the cap, `agent_settled` gives it a second and more
15
- * generous drain (`cascade_carry_over_settle`, `quietWindowWaitMs`, 15 000 ms),
16
- * and `beginTurn` deliberately keeps `_pendingCascadeRuns` so anything still
17
- * running surfaces at a later turn_end — that is #1443, and pre-#450 these
18
- * findings were always awaited. So the real trade is:
19
- *
20
- * full neighbour set, one turn late vs. a narrowed set, on time,
21
- * with the remainder lost for good
22
- *
23
- * Narrowing is therefore only worth paying for when it genuinely converts a
24
- * late run into an on-time one. That gives three zones, and the derivation
25
- * below is exactly those three:
26
- *
27
- * fits the full walk still fits the on-time window — nothing to do
28
- * narrowed the RESCUE BAND: the full walk no longer fits but a shorter
29
- * one does, so trading the tail for on-time delivery buys
30
- * something real
31
- * past-rescue not even a floor-sized walk fits any more, so narrowing would
32
- * drop neighbours permanently AND still miss the window. Keep
33
- * the full budget and let the carry-over deliver it complete.
34
- * This is the cold-session case: a fresh graph build measures up
35
- * to ~19 s (see `runtime-coordinator.ts`'s carry-over note), and
36
- * a floor-sized stub there is strictly worse than pre-#1462.
37
- *
38
- * One more guard, for the same reason. If the on-time window could not fit a
39
- * full walk even at zero prelude, there is no LATE run to rescue — every
40
- * cascade would be permanently downsized because a *wait* was configured small.
41
- * That is a budget change wearing a timeout's clothes, so the derivation stands
42
- * down entirely (`no-rescue-window`) and the flat cap applies. This is what
43
- * keeps `PI_LENS_CASCADE_SETTLE_WAIT_MS` from doubling as a neighbour-count
44
- * knob: at the 5000/100/40 defaults the band is a prelude of 1.0–4.5 s, and
45
- * shrinking the wait to 1000 ms disables narrowing rather than capping every
46
- * cascade at ~10 neighbours.
47
- */
48
- import { recordDegradationOnce } from "./degradation-ledger.js";
49
- import { toPositiveFinite } from "./env-utils.js";
50
- // The knobs only, never the scheduler — this module is arithmetic and has no
51
- // business depending on a task registry to read two numbers (#1462 review N4).
52
- // Note it buys nothing at load time: `runtime-config.js` below already reaches
53
- // `pidusage` via `lens-config.js`.
54
- import { isQuietWindowEnabled, quietWindowWaitMs, } from "./quiet-window-config.js";
55
- import { RUNTIME_CONFIG } from "./runtime-config.js";
56
- /**
57
- * Bounded wait for the turn's deferred cascade computes (#450) to settle before
58
- * they are merged at turn_end. A late compute is carried over, never dropped.
59
- *
60
- * `0` is a meaningful setting (never block turn_end), so this deliberately does
61
- * NOT use `lazyEnvNumber` — that helper treats 0 as "unset" and would silently
62
- * restore the 5000 ms default.
63
- */
64
- export function cascadeSettleWaitMs() {
65
- const raw = Number(process.env.PI_LENS_CASCADE_SETTLE_WAIT_MS);
66
- return Number.isFinite(raw) && raw >= 0 ? raw : 5000;
67
- }
68
- /** The budget floor, and the minimum any env override of the cap can produce. */
69
- const MIN_NEIGHBOUR_BUDGET = RUNTIME_CONFIG.pipeline.cascadeMaxFiles;
70
- /**
71
- * The flat per-run cap: the most neighbours a cascade walks. Still the ceiling
72
- * — the derivation below only ever narrows it, and only inside the rescue band.
73
- */
74
- const DEFAULT_NEIGHBOUR_BUDGET = 40;
75
- export const CASCADE_NEIGHBOUR_BUDGET = Math.max(MIN_NEIGHBOUR_BUDGET, Number.parseInt(process.env.PI_LENS_CASCADE_NEIGHBOUR_BUDGET ?? "40", 10) ||
76
- DEFAULT_NEIGHBOUR_BUDGET);
77
- /**
78
- * True when `PI_LENS_CASCADE_NEIGHBOUR_BUDGET` moved the ceiling away from the
79
- * default (#1462 review F-E). Raising it far enough can push
80
- * `ceiling * perNeighbourMs` past the settle window, so EVERY cascade reads
81
- * `no-rescue-window` — the whole derivation disarmed by a cap change nobody
82
- * meant as a timeout change. Read once at load, same lifetime as the constant
83
- * it describes.
84
- */
85
- const NEIGHBOUR_BUDGET_OVERRIDDEN = process.env.PI_LENS_CASCADE_NEIGHBOUR_BUDGET !== undefined &&
86
- CASCADE_NEIGHBOUR_BUDGET !== DEFAULT_NEIGHBOUR_BUDGET;
87
- /**
88
- * Marginal wall-clock cost of one more neighbour in the walk, in ms. Calibrated
89
- * on the 2026-08-15 dogfood tail: 3.88 s at nbr=40 and 3.71 s at nbr=38, both
90
- * ~97 ms per neighbour. Touches fan out in parallel, so this is the observed
91
- * marginal cost under LSP contention, not one touch's own latency.
92
- *
93
- * It is an ESTIMATE, and the derivation is sensitive to it: if the true cost is
94
- * materially above this, a walk sized against it still overruns (the rescue
95
- * fails and the tail was dropped for nothing). `scripts/bench-cascade-budget.mjs
96
- * --true-cost-ms=<n>` measures that sensitivity directly. Rounded UP from the
97
- * measurement so the estimate errs toward narrowing less.
98
- */
99
- const DEFAULT_NEIGHBOUR_COST_MS = 100;
100
- /** Read per call — sized once per cascade run, never on a hot path. */
101
- function neighbourCostMs() {
102
- return (toPositiveFinite(process.env.PI_LENS_CASCADE_NEIGHBOUR_COST_MS) ||
103
- DEFAULT_NEIGHBOUR_COST_MS);
104
- }
105
- function neighbourFloor() {
106
- return (toPositiveFinite(process.env.PI_LENS_CASCADE_NEIGHBOUR_FLOOR) ||
107
- MIN_NEIGHBOUR_BUDGET);
108
- }
109
- /**
110
- * Size one run's neighbour walk against the on-time window supplied by its
111
- * caller.
112
- *
113
- * `elapsedMs` is arithmetic input, not an observation made by this function.
114
- * The production caller measures it against the active turn_end settle window
115
- * and passes that elapsed time here. When that boundary is unavailable, the
116
- * caller passes zero to preserve the flat cap. Legacy callers may still pass
117
- * deferred run age for compatibility.
118
- *
119
- * Every override exists so the derivation can be tested and benchmarked as a
120
- * pure function; the function itself does not observe a deferred run's age.
121
- */
122
- export function deriveCascadeNeighbourBudget(options) {
123
- const ceiling = options.ceiling ?? CASCADE_NEIGHBOUR_BUDGET;
124
- // The floor can never exceed the ceiling — a floor above the cap would make
125
- // the derived budget LARGER than the flat one it exists to bound.
126
- const floor = Math.min(ceiling, options.floor ?? neighbourFloor());
127
- const onTimeMs = options.settleWaitMs ?? cascadeSettleWaitMs();
128
- const perNeighbourMs = options.perNeighbourMs ?? neighbourCostMs();
129
- const elapsedMs = toPositiveFinite(options.elapsedMs);
130
- const remainingMs = onTimeMs - elapsedMs;
131
- const deliveryWindowMs = onTimeMs +
132
- (options.quietDrainMs ??
133
- (isQuietWindowEnabled() ? quietWindowWaitMs() : 0));
134
- const full = { budget: ceiling, ceiling, remainingMs, deliveryWindowMs };
135
- // No on-time window at all, or one too small to ever fit a full walk. There
136
- // is no late run to rescue here, only every run to shrink — stand down.
137
- //
138
- // Boundary, acknowledged rather than special-cased: at exactly
139
- // `onTimeMs === ceiling * perNeighbourMs` this does not fire and the `fits`
140
- // zone has zero width, so ANY prelude narrows. Not slightly, either — at
141
- // 4000/100/40 a 2 s prelude gives 20 and a 3.5 s prelude gives the floor.
142
- // Left alone because the narrowing is honest at that setting: with the
143
- // window sized to exactly one full walk, a run that has spent any of it
144
- // really would miss, so every one of those cuts is a genuine rescue rather
145
- // than the `no-rescue-window` case this guard exists to catch. What it does
146
- // cost is headroom — see the divisor bands in the bench's `--sweep` text.
147
- if (onTimeMs <= 0 || onTimeMs < ceiling * perNeighbourMs) {
148
- // #1462 review F-E: name the override, once per session, when it is the
149
- // REASON the derivation stood down — not when a caller under test asked
150
- // for a specific ceiling, and not on every one of the cascades this
151
- // disarms for the rest of the session.
152
- if (options.ceiling === undefined && NEIGHBOUR_BUDGET_OVERRIDDEN) {
153
- recordDegradationOnce({
154
- kind: "cascade-budget-override-disarmed",
155
- subject: "cascade-neighbour-budget",
156
- reason: `PI_LENS_CASCADE_NEIGHBOUR_BUDGET=${CASCADE_NEIGHBOUR_BUDGET} needs ` +
157
- `${ceiling * perNeighbourMs}ms to walk the full cap, which exceeds ` +
158
- `the ${onTimeMs}ms settle window — the rescue band is disarmed and ` +
159
- `every cascade keeps the flat (overridden) cap`,
160
- });
161
- }
162
- return { ...full, zone: "no-rescue-window" };
163
- }
164
- // The full walk still fits. Nothing to buy.
165
- if (remainingMs >= ceiling * perNeighbourMs) {
166
- return { ...full, zone: "fits" };
167
- }
168
- // Past rescue: not even a floor-sized walk fits, so narrowing would drop the
169
- // tail permanently and still miss the window. The carry-over delivers the
170
- // whole set one turn later instead.
171
- //
172
- // #1462 review F-B, kept rather than shrunk: one dogfood log measured this
173
- // zone at 0/1090 cascades, and asked whether a 3-zone module earns its keep
174
- // at that frequency. It was measured against the WRITE-relative clock this
175
- // same round fixed, which charges elapsed time no cascade actually spent
176
- // waiting — so it under-counts how often a genuinely slow compute (a cold
177
- // graph build, ~19 s) overlaps an already-running settle window, which is
178
- // exactly what this zone exists to catch (F3, a real regression the first
179
- // review round found: a floor-sized stub on that cold-start case is
180
- // strictly worse than pre-#1462). Reachability under the corrected clock
181
- // has not been re-measured; shrinking on a stale sample would trade a
182
- // cheap, already-tested guard against a proven regression for a paper
183
- // simplification. Revisit if a post-fix dogfood window confirms it still
184
- // never fires.
185
- if (remainingMs < floor * perNeighbourMs) {
186
- return { ...full, zone: "past-rescue" };
187
- }
188
- // The rescue band: a shorter walk lands on time.
189
- return {
190
- budget: Math.min(ceiling, Math.max(floor, Math.floor(remainingMs / perNeighbourMs))),
191
- ceiling,
192
- remainingMs,
193
- deliveryWindowMs,
194
- zone: "narrowed",
195
- };
196
- }