@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,400 +0,0 @@
1
- /**
2
- * Startup scan safety — gates eager cache warmups to real project roots.
3
- *
4
- * Prevents pi-lens from scanning $HOME or generic directories at session
5
- * start, which would hang or produce meaningless results.
6
- *
7
- * Credit: alexx-ftw (PR #1)
8
- */
9
- import * as os from "node:os";
10
- import * as path from "node:path";
11
- import { BoundedLruCache } from "./bounded-cache.js";
12
- import { normalizeMapKey } from "./path-utils.js";
13
- import { lazyEnvNumber } from "./env-utils.js";
14
- import { getProjectIgnoreMatcher, } from "./file-utils.js";
15
- import { isAtOrAboveHomeDir } from "./path-utils.js";
16
- import { getStartupScanMaxSourceFilesDerived } from "./project-scale.js";
17
- import { shouldRecurseIntoDir, walkTreeStackAsync, walkTreeStackSync, } from "./source-walker.js";
18
- import { getDirectoryMarkers, registerWorkspaceTopologyReset, } from "./workspace-topology.js";
19
- const PROJECT_ROOT_MARKERS = [
20
- ".git",
21
- "package.json",
22
- "pyproject.toml",
23
- "Cargo.toml",
24
- "go.mod",
25
- "composer.json",
26
- ];
27
- // #758: hard ceiling on the number of directory entries the startup source
28
- // count walk will visit before it gives up and declares the tree too big to
29
- // a project has MANY source files — a repo with FEW source files but a huge
30
- // pile of non-source files (e.g. a game mod: 300 scripts among 84k data files)
31
- // never trips it, so the pre-#758 walk traversed the entire tree, dominated by
32
- // one ignoreMatcher.isIgnored() call per entry, blocking session_start for
33
- // seconds. Capping total entries bounds that worst case deterministically. The
34
- // same pattern already guards jscpd-client.ts's hasSourceFilesRecursive walk.
35
- export const MAX_STARTUP_SCAN_ENTRIES = 50_000;
36
- const SOURCE_FILE_PATTERN = /\.(ts|tsx|js|jsx|py|go|rs|rb)$/;
37
- // Default TTL for a persisted `too-many-source-files` verdict (#699): 24h.
38
- const DEFAULT_STARTUP_SCAN_VERDICT_TTL_MS = 24 * 60 * 60 * 1000;
39
- /**
40
- * How long a persisted `too-many-source-files` verdict stays reusable before
41
- * a session re-walks the tree to refresh it (#699).
42
- *
43
- * Resolution order: `PI_LENS_STARTUP_SCAN_VERDICT_TTL_MS` env var, else the
44
- * 24h default. Lazy + memoized (via `lazyEnvNumber`, #763) so importing this
45
- * module never touches `process.env` at load time (house style — see
46
- * `runtime-config.ts` / `slow-fs.ts` / `subagent-mode.ts`).
47
- */
48
- const _ttl = lazyEnvNumber("PI_LENS_STARTUP_SCAN_VERDICT_TTL_MS", DEFAULT_STARTUP_SCAN_VERDICT_TTL_MS);
49
- export const getStartupScanVerdictTtlMs = _ttl.get;
50
- /** Test-only: clears the memoized TTL so a subsequent call re-reads the env
51
- * var (matching the `_resetForTests` convention). */
52
- export const _resetStartupScanVerdictTtlForTests = _ttl._resetForTests;
53
- /**
54
- * Total directory-entry ceiling for the startup source-count walk (#758).
55
- *
56
- * Resolution order: `PI_LENS_STARTUP_SCAN_MAX_ENTRIES` env var, else the
57
- * `MAX_STARTUP_SCAN_ENTRIES` default. Lazy + memoized (via `lazyEnvNumber`,
58
- * #763) so importing this module never touches `process.env` at load time
59
- * (same house style as `getStartupScanVerdictTtlMs`).
60
- */
61
- const _maxEntries = lazyEnvNumber("PI_LENS_STARTUP_SCAN_MAX_ENTRIES", MAX_STARTUP_SCAN_ENTRIES);
62
- export const getStartupScanMaxEntries = _maxEntries.get;
63
- /** Test-only: clears the memoized entry cap so a subsequent call re-reads the
64
- * env var (matching the `_resetForTests` convention). */
65
- export const _resetStartupScanMaxEntriesForTests = _maxEntries._resetForTests;
66
- /**
67
- * Whether a persisted startup-scan verdict is still safe to reuse without
68
- * re-walking the project tree (#699).
69
- *
70
- * The content-derived reasons `too-many-source-files` and `too-many-entries`
71
- * (#758) are the ones that are TTL'd. They can go stale on their own: the repo
72
- * can shrink below the source-file cap (or below the entry ceiling)
73
- * between sessions, and nothing else would notice
74
- * — the seq-based freshness check that guards every other
75
- * `project-snapshot.json` field never fires for them, because pi-lens never
76
- * writes anything while `canWarmCaches` is false, so the snapshot's seq
77
- * never advances on its own. Trade-off, by design: a shrunk repo recovers
78
- * automatically once the TTL expires and the next session re-walks, in
79
- * exchange for skipping a walk that (per #699) can cost 17s+ on a large
80
- * monorepo, on every single process start, for a result nothing could use.
81
- *
82
- * `home-dir` / `no-project-root` describe the resolved root's location
83
- * relative to $HOME, not its contents, so they don't drift the same way —
84
- * reused indefinitely here (still gated by the snapshot's own seq-freshness
85
- * check upstream). `canWarmCaches: true` verdicts aren't TTL'd by this
86
- * function either; a fresh snapshot's `seq` match already implies the
87
- * project state hasn't moved since it warmed successfully.
88
- *
89
- * Fails closed on a verdict with no `computedAt` (e.g. hand-written test
90
- * fixture, or a pre-#699 snapshot) — treated as stale so it gets refreshed
91
- * rather than trusted indefinitely.
92
- */
93
- export function isStartupScanVerdictFresh(verdict, now = Date.now()) {
94
- if (verdict.reason !== "too-many-source-files" &&
95
- verdict.reason !== "too-many-entries")
96
- return true;
97
- if (typeof verdict.computedAt !== "number")
98
- return false;
99
- return now - verdict.computedAt < getStartupScanVerdictTtlMs();
100
- }
101
- /**
102
- * Nearest ancestor (inclusive) of `startDir` containing any of
103
- * `PROJECT_ROOT_MARKERS`, or `null` if none found before the filesystem root.
104
- *
105
- * #807: the per-directory marker check now reads through
106
- * `workspace-topology.ts`'s `getDirectoryMarkers` (one cached `readdir` per
107
- * directory) instead of doing `PROJECT_ROOT_MARKERS.length` separate
108
- * `existsSync` stats per directory — same dedup win as the rest of the #806
109
- * migration. Deliberately NOT routed through the topology service's
110
- * home-guarded `findNearestDirWithMarker`/`findNearestDirWithAnyBasename`
111
- * walkers, though: this function's callers (`computeStartupScanContext` /
112
- * `resolveStartupScanContextAsync`, below) need the ACTUAL directory a marker
113
- * resolved to — including one AT or ABOVE `$HOME` — to tell the
114
- * `"home-dir"` verdict apart from `"no-project-root"` and to populate
115
- * `scanRoot`/`projectRoot` for diagnostics (see the `startup-scan-home-ceiling`
116
- * tests: a marker found in an ancestor of `$HOME` must still be *returned*
117
- * here, with the home rejection applied by the caller). A guarded walker that
118
- * stops before ever looking at/above `$HOME` would go blind exactly where
119
- * this function's contract requires it to keep looking, silently turning a
120
- * `"home-dir"` verdict into `"no-project-root"`. The walk-UP loop itself
121
- * therefore stays hand-written, unbounded by `$HOME`/depth, matching its
122
- * pre-#807 behavior exactly.
123
- */
124
- export function findNearestProjectRoot(startDir) {
125
- let current = path.resolve(startDir);
126
- while (true) {
127
- const entryNames = getDirectoryMarkers(current).entryNames;
128
- if (PROJECT_ROOT_MARKERS.some((marker) => entryNames.has(marker))) {
129
- return current;
130
- }
131
- const parent = path.dirname(current);
132
- if (parent === current)
133
- return null;
134
- current = parent;
135
- }
136
- }
137
- /**
138
- * Per-entry step of the source-count walk (#761), plugged into both the sync
139
- * and async {@link walkTreeStackSync}/`Async` drivers, which differ only in
140
- * yield cadence. Applies both bounds in their historical order:
141
- * - `limit`: source-file early-exit (existing behavior) — fires as soon as
142
- * more than `limit` source files are seen.
143
- * - `maxEntries`: total directory-entry ceiling (#758) — fires as soon as
144
- * `maxEntries` entries have been visited (`visited >= maxEntries`, checked
145
- * AFTER classification), flagging `entryBudgetExceeded` so a mixed
146
- * source/non-source tree can't drag the walk across the whole tree.
147
- * The source-limit check precedes the entry-budget check, so an entry that
148
- * trips both stops as a source-limit hit (`entryBudgetExceeded` stays false).
149
- *
150
- * Directories here never check for generated-artifact names. Symlinked
151
- * directories are NEVER traversed — not by policy but by classification
152
- * (#775 audit follow-up): `fs.Dirent` reports a symlink-to-directory as
153
- * `isSymbolicLink() === true` / `isDirectory() === false` (junctions
154
- * included), so such entries fall through to the file branch below and are
155
- * merely counted as entries. The `followSymlinks: true` passed to
156
- * `shouldRecurseIntoDir` is therefore inert here; a symlink cycle cannot
157
- * hang this walk. Pinned by tests/clients/startup-scan-symlink-cycle.test.ts.
158
- */
159
- function makeSourceCountVisitor(state, ignoreMatcher, limit, maxEntries) {
160
- return (entry, fullPath) => {
161
- state.visited += 1;
162
- if (entry.isDirectory()) {
163
- const recurse = shouldRecurseIntoDir(entry, fullPath, {
164
- ignoreMatcher,
165
- followSymlinks: true,
166
- });
167
- if (state.visited >= maxEntries) {
168
- state.entryBudgetExceeded = true;
169
- return "stop";
170
- }
171
- return recurse ? "recurse" : "skip";
172
- }
173
- // #1974: extension-pattern gate before isIgnored — isIgnored recompiles
174
- // minimatch patterns per ancestor dir per call, so it should only run for
175
- // entries the cheap regex already flags as source.
176
- if (entry.isFile() &&
177
- SOURCE_FILE_PATTERN.test(entry.name) &&
178
- !ignoreMatcher.isIgnored(fullPath, false)) {
179
- state.count += 1;
180
- if (state.count > limit)
181
- return "stop";
182
- }
183
- if (state.visited >= maxEntries) {
184
- state.entryBudgetExceeded = true;
185
- return "stop";
186
- }
187
- return "skip";
188
- };
189
- }
190
- /**
191
- * Core synchronous source-count walk shared by the public
192
- * `countSourceFilesWithinLimit` wrapper and `computeStartupScanContext`.
193
- * Bounds are documented on `makeSourceCountVisitor`.
194
- */
195
- function walkSourceCount(dir, limit, maxEntries) {
196
- const state = {
197
- count: 0,
198
- visited: 0,
199
- entryBudgetExceeded: false,
200
- };
201
- const rootDir = path.resolve(dir);
202
- const ignoreMatcher = getProjectIgnoreMatcher(rootDir);
203
- walkTreeStackSync(rootDir, makeSourceCountVisitor(state, ignoreMatcher, limit, maxEntries));
204
- return { count: state.count, entryBudgetExceeded: state.entryBudgetExceeded };
205
- }
206
- export function countSourceFilesWithinLimit(dir, limit) {
207
- // Public wrapper keeps its pre-#758 contract: only the source-file limit
208
- // bounds it (no entry ceiling). The #758 entry budget applies solely to the
209
- // startup-scan verdict path via `walkSourceCount`.
210
- return walkSourceCount(dir, limit, Number.POSITIVE_INFINITY).count;
211
- }
212
- // Session-lifetime memo for the (cwd, homeDir, maxSourceFiles) tuple. The
213
- // underlying computation walks the entire project root counting source
214
- // files and is dominated by ignoreMatcher.isIgnored() calls; on a 2k-file
215
- // project it costs ~2-3s the first time. The topology-reset registry clears
216
- // this memo at session start, so each session re-derives its answer. The memo
217
- // remains valid until the next session-start reset.
218
- const startupScanContextCache = new BoundedLruCache(32);
219
- registerWorkspaceTopologyReset(() => startupScanContextCache.clear());
220
- function startupScanCacheKey(cwd, options) {
221
- return [
222
- normalizeMapKey(path.resolve(cwd)),
223
- options.homeDir ? normalizeMapKey(path.resolve(options.homeDir)) : "",
224
- options.maxSourceFiles ?? "",
225
- options.maxScanEntries ?? "",
226
- ].join("|");
227
- }
228
- export const __testing = { startupScanCacheKey };
229
- export function resolveStartupScanContext(cwd, options = {}) {
230
- const cacheKey = startupScanCacheKey(cwd, options);
231
- const cached = startupScanContextCache.get(cacheKey);
232
- if (cached)
233
- return cached;
234
- const result = {
235
- ...computeStartupScanContext(cwd, options),
236
- computedAt: Date.now(),
237
- };
238
- startupScanContextCache.set(cacheKey, result);
239
- return result;
240
- }
241
- function computeStartupScanContext(cwd, options = {}) {
242
- const resolvedCwd = path.resolve(cwd);
243
- const homeDir = path.resolve(options.homeDir ?? os.homedir());
244
- const maxSourceFiles = options.maxSourceFiles ?? getStartupScanMaxSourceFilesDerived(resolvedCwd);
245
- const maxScanEntries = options.maxScanEntries ?? getStartupScanMaxEntries();
246
- const projectRoot = findNearestProjectRoot(resolvedCwd);
247
- if (!projectRoot) {
248
- return {
249
- cwd: resolvedCwd,
250
- scanRoot: resolvedCwd,
251
- projectRoot: null,
252
- canWarmCaches: false,
253
- reason: isAtOrAboveHomeDir(resolvedCwd, homeDir)
254
- ? "home-dir"
255
- : "no-project-root",
256
- };
257
- }
258
- // A marker resolved at $HOME — OR at an ancestor of it (e.g. /home,
259
- // C:\Users) — means the upward search escaped the workspace; warming caches
260
- // would walk an unrelated tree (#250/#253). The old exact `=== homeDir`
261
- // check missed the above-home case.
262
- if (isAtOrAboveHomeDir(projectRoot, homeDir)) {
263
- return {
264
- cwd: resolvedCwd,
265
- scanRoot: projectRoot,
266
- projectRoot,
267
- canWarmCaches: false,
268
- reason: "home-dir",
269
- };
270
- }
271
- const { count: sourceFileCount, entryBudgetExceeded } = walkSourceCount(projectRoot, maxSourceFiles, maxScanEntries);
272
- if (sourceFileCount > maxSourceFiles || entryBudgetExceeded) {
273
- return {
274
- cwd: resolvedCwd,
275
- scanRoot: projectRoot,
276
- projectRoot,
277
- canWarmCaches: false,
278
- reason: entryBudgetExceeded
279
- ? "too-many-entries"
280
- : "too-many-source-files",
281
- sourceFileCount,
282
- };
283
- }
284
- return {
285
- cwd: resolvedCwd,
286
- scanRoot: projectRoot,
287
- projectRoot,
288
- canWarmCaches: true,
289
- sourceFileCount,
290
- };
291
- }
292
- // ---------------------------------------------------------------------------
293
- // Async, chunked-yield counterparts used by the cold-start warmup pipeline
294
- // (see runtime-session.ts handleSessionStart). The synchronous variants above
295
- // block the Node event loop for the full duration of the project walk, which
296
- // is fine when called from a non-interactive code path but freezes the TUI
297
- // when called during `session_start`. These async variants do the same work
298
- // but yield control via `await new Promise(setImmediate)` every N directory
299
- // entries, so stdin handlers (i.e. keystrokes) stay responsive.
300
- //
301
- // They share the same memo (`startupScanContextCache`) as their sync siblings,
302
- // so whichever runs first warms the cache for the other. By design the
303
- // warmup pipeline runs the async version 2s after a cold-start "quick" return,
304
- // then the user's first /new sees a sync-path cache hit and skips the work
305
- // entirely.
306
- // ---------------------------------------------------------------------------
307
- /**
308
- * Async core of the source-count walk (the yield-cadence twin of
309
- * `walkSourceCount`). Same visitor and two bounds — `limit` (source files) and
310
- * `maxEntries` (total entries, #758) — driven through the shared
311
- * {@link walkTreeStackAsync} engine (#761), which yields via `setImmediate`
312
- * every `yieldEvery` entries to keep `session_start` keystrokes responsive.
313
- */
314
- async function walkSourceCountAsync(dir, limit, maxEntries, opts = {}) {
315
- const state = {
316
- count: 0,
317
- visited: 0,
318
- entryBudgetExceeded: false,
319
- };
320
- const rootDir = path.resolve(dir);
321
- const ignoreMatcher = getProjectIgnoreMatcher(rootDir);
322
- await walkTreeStackAsync(rootDir, makeSourceCountVisitor(state, ignoreMatcher, limit, maxEntries), {
323
- // Yield every 100 entries by default. Empirically each yield costs
324
- // ~0.1ms of overhead and a 2k-file project produces ~20 yields, so the
325
- // total async overhead is well under 5ms while keeping per-burst sync
326
- // work under 50ms (the perceptual threshold for "instant" keystrokes).
327
- budgetMs: opts.budgetMs ?? 8,
328
- // #703: prime the tracked-files set ONCE before the walk (not per file)
329
- // so a tracked file matching a `.gitignore`/global pattern isn't dropped
330
- // from the startup source-file count. Fail-open: resolves even when git
331
- // is absent, and `isIgnored` degrades to pattern-only if this never
332
- // resolves before a caller inspects results.
333
- beforeWalk: () => ignoreMatcher.ensureTrackedIndex(),
334
- });
335
- return { count: state.count, entryBudgetExceeded: state.entryBudgetExceeded };
336
- }
337
- export async function countSourceFilesWithinLimitAsync(dir, limit, opts = {}) {
338
- // Public wrapper keeps its pre-#758 contract: only the source-file limit
339
- // bounds it (no entry ceiling).
340
- return (await walkSourceCountAsync(dir, limit, Number.POSITIVE_INFINITY, opts)).count;
341
- }
342
- export async function resolveStartupScanContextAsync(cwd, options = {}) {
343
- const cacheKey = startupScanCacheKey(cwd, options);
344
- const cached = startupScanContextCache.get(cacheKey);
345
- if (cached)
346
- return cached;
347
- const resolvedCwd = path.resolve(cwd);
348
- const homeDir = path.resolve(options.homeDir ?? os.homedir());
349
- const maxSourceFiles = options.maxSourceFiles ?? getStartupScanMaxSourceFilesDerived(resolvedCwd);
350
- const maxScanEntries = options.maxScanEntries ?? getStartupScanMaxEntries();
351
- const projectRoot = findNearestProjectRoot(resolvedCwd);
352
- let result;
353
- if (!projectRoot) {
354
- result = {
355
- cwd: resolvedCwd,
356
- scanRoot: resolvedCwd,
357
- projectRoot: null,
358
- canWarmCaches: false,
359
- reason: isAtOrAboveHomeDir(resolvedCwd, homeDir)
360
- ? "home-dir"
361
- : "no-project-root",
362
- };
363
- }
364
- else if (isAtOrAboveHomeDir(projectRoot, homeDir)) {
365
- result = {
366
- cwd: resolvedCwd,
367
- scanRoot: projectRoot,
368
- projectRoot,
369
- canWarmCaches: false,
370
- reason: "home-dir",
371
- };
372
- }
373
- else {
374
- const { count: sourceFileCount, entryBudgetExceeded } = await walkSourceCountAsync(projectRoot, maxSourceFiles, maxScanEntries);
375
- if (sourceFileCount > maxSourceFiles || entryBudgetExceeded) {
376
- result = {
377
- cwd: resolvedCwd,
378
- scanRoot: projectRoot,
379
- projectRoot,
380
- canWarmCaches: false,
381
- reason: entryBudgetExceeded
382
- ? "too-many-entries"
383
- : "too-many-source-files",
384
- sourceFileCount,
385
- };
386
- }
387
- else {
388
- result = {
389
- cwd: resolvedCwd,
390
- scanRoot: projectRoot,
391
- projectRoot,
392
- canWarmCaches: true,
393
- sourceFileCount,
394
- };
395
- }
396
- }
397
- result = { ...result, computedAt: Date.now() };
398
- startupScanContextCache.set(cacheKey, result);
399
- return result;
400
- }
@@ -1,130 +0,0 @@
1
- import { performance } from "node:perf_hooks";
2
- // #1434 S3d: import the constant from the side-effect-free module, not from
3
- // `console-guard-install.ts` — that module installs the console guard as an
4
- // import side effect, so importing it here (for a single constant, from a
5
- // module measuring load time) would have silently installed the guard
6
- // wherever this file is imported, including test-only measurement code that
7
- // has no business flipping a global switch.
8
- import { PI_LENS_EVAL_STARTED_MS } from "./eval-timestamp.js";
9
- import { getProcessSingleton, nextModuleEvaluationOrdinal, } from "./process-singletons.js";
10
- /**
11
- * Startup timing for pi-lens.
12
- *
13
- * `performance.now()` is measured relative to `performance.timeOrigin`, which
14
- * is the moment the host pi process started. Capturing it the instant pi-lens
15
- * has finished loading therefore yields the wall-clock cost of pi loading +
16
- * (under source mode) jiti-transpiling every pi-lens module before any of our
17
- * code runs. With the precompiled `dist/` (#182) that transpile cost is gone,
18
- * so this number is how we verify the startup win instead of guessing at it.
19
- */
20
- /** "dist" when pi-lens loaded from compiled JS, "source" when jiti-transpiled. */
21
- export const PI_LENS_LOADED_FROM = import.meta.url.endsWith(".js")
22
- ? "dist"
23
- : "source";
24
- // `loadMs`/`loadedAtMs` deliberately stay at module scope: they measure THIS
25
- // evaluation's own load cost, so a second evaluation must get its own numbers
26
- // rather than adopt the first's (#2146 class sweep — per-evaluation by design).
27
- let loadMs;
28
- let loadedAtMs;
29
- /**
30
- * The host-ready anchor is a once-PER-PROCESS latch, so it lives on the shared
31
- * process singleton (#2146). Left at module scope it was consumed once per
32
- * module evaluation, which meant a nine-evaluation process could emit the
33
- * "first session" host-ready delay nine times.
34
- */
35
- const HOST_READY_ANCHOR_FAMILY = "startup-timing.host-ready-anchor";
36
- const HOST_READY_ANCHOR_VERSION = 1;
37
- function hostReadyAnchorState() {
38
- return getProcessSingleton(HOST_READY_ANCHOR_FAMILY, HOST_READY_ANCHOR_VERSION, () => ({ consumed: false }));
39
- }
40
- /**
41
- * 1-based count of pi-lens module-graph evaluations in this process (#2146).
42
- *
43
- * Captured at module scope so it advances exactly once per evaluation, and
44
- * carried on `host_boot.metadata.evaluationOrdinal` so multi-evaluation hosts
45
- * are greppable in `latency.log`.
46
- */
47
- export const PI_LENS_EVALUATION_ORDINAL = nextModuleEvaluationOrdinal();
48
- /**
49
- * Record the load-complete time. Call once, as the first statement in the
50
- * extension entry's module body — by then every import has been evaluated, so
51
- * the full transpile/load cost has been paid. Idempotent: later calls return
52
- * the first captured value.
53
- */
54
- export function markPiLensLoaded() {
55
- if (loadMs === undefined) {
56
- loadedAtMs = performance.now();
57
- loadMs = Math.round(loadedAtMs);
58
- }
59
- return loadMs;
60
- }
61
- /** Monotonic instant when pi-lens finished loading, for cross-hook spans. */
62
- export function getPiLensLoadedAtMs() {
63
- return loadedAtMs;
64
- }
65
- /** Consume the process-lifetime first-session host-ready anchor exactly once. */
66
- export function consumeHostReadyDelayAnchor() {
67
- const state = hostReadyAnchorState();
68
- if (state.consumed)
69
- return false;
70
- state.consumed = true;
71
- return true;
72
- }
73
- /** Test seam for the process-lifetime session-state registry probe boundary. */
74
- export function resetHostReadyDelayAnchorForTests() {
75
- hostReadyAnchorState().consumed = false;
76
- }
77
- /** ms from pi process start to pi-lens load-complete, or undefined if unmarked. */
78
- export function getPiLensLoadMs() {
79
- return loadMs;
80
- }
81
- /** ms from host process start until pi-lens evaluation began. */
82
- export const PI_LENS_HOST_BOOT_MS = Math.round(PI_LENS_EVAL_STARTED_MS);
83
- /** pi-lens module-graph evaluation time once markPiLensLoaded() has run. */
84
- export function getPiLensEvalMs() {
85
- return loadMs === undefined
86
- ? undefined
87
- : Math.max(0, loadMs - PI_LENS_HOST_BOOT_MS);
88
- }
89
- /**
90
- * Build the three startup latency records the extension entry emits at module
91
- * scope (`extension_loaded`, `host_boot`, `extension_eval`).
92
- *
93
- * A builder rather than three inline `logLatency` calls in `index.ts` so the
94
- * record CONTENT is testable: `logLatency` is a no-op under `PI_LENS_TEST_MODE`,
95
- * and `index.ts`'s module body cannot be re-run per assertion. `index.ts` maps
96
- * the returned records straight into `logLatency`, so this is the production
97
- * shape, not a parallel path.
98
- *
99
- * `host_boot` carries `evaluationOrdinal` (#2146): one `host_boot` line is one
100
- * module-graph evaluation, and the ordinal makes a multi-evaluation host
101
- * greppable instead of inferable by counting lines per pid.
102
- */
103
- export function buildStartupTimingRecords(input) {
104
- return [
105
- {
106
- type: "phase",
107
- filePath: "<pi-lens>",
108
- phase: "extension_loaded",
109
- durationMs: input.loadMs,
110
- metadata: { loadedFrom: PI_LENS_LOADED_FROM },
111
- },
112
- {
113
- type: "phase",
114
- filePath: "<pi-lens>",
115
- phase: "host_boot",
116
- durationMs: PI_LENS_HOST_BOOT_MS,
117
- metadata: {
118
- loadedFrom: PI_LENS_LOADED_FROM,
119
- evaluationOrdinal: PI_LENS_EVALUATION_ORDINAL,
120
- },
121
- },
122
- {
123
- type: "phase",
124
- filePath: "<pi-lens>",
125
- phase: "extension_eval",
126
- durationMs: input.evalMs,
127
- metadata: { loadedFrom: PI_LENS_LOADED_FROM },
128
- },
129
- ];
130
- }
@@ -1,33 +0,0 @@
1
- /**
2
- * Ordinal (code-unit) string comparator for identity-feeding sorts — cache
3
- * keys, dedupe keys, hashes, and signatures. Refs #2155, #2165.
4
- *
5
- * `localeCompare` orders strings by locale-dependent collation (the DEFAULT
6
- * `Array.prototype.sort`, with no comparator, does not — it compares UTF-16
7
- * code units, which is already ordinal). Locale-dependent order is fine for
8
- * a list a human reads. It is a bug (SonarCloud S2871) when the sorted
9
- * result feeds an identity: two processes — or one process whose locale
10
- * changes — can order the same input differently under `localeCompare` and
11
- * mint different keys for equivalent state, producing a silent cache or
12
- * dedupe miss.
13
- *
14
- * Use this comparator whenever a sort's output becomes a key, a hash input,
15
- * or a signature compared for equality later. Keep `localeCompare` for
16
- * sorting that only affects what a person reads.
17
- */
18
- export function compareOrdinal(a, b) {
19
- return a < b ? -1 : a > b ? 1 : 0;
20
- }
21
- /**
22
- * Escape a string for safe interpolation into a `RegExp` source, so every
23
- * regex metacharacter it contains is matched literally instead of taking on
24
- * its regex meaning. This is the ONE runtime copy (#2558) — string-utils.ts
25
- * is a leaf (no imports of its own), so importing it never creates a cycle.
26
- * Before #2558 this same body was hand-copied under this name (and as
27
- * `escapeRegExpChar`/`escapeRegExpLiteral`) into ~8 production modules and 3
28
- * test helpers; fold new call sites onto this export instead of re-copying
29
- * it.
30
- */
31
- export function escapeRegExp(value) {
32
- return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
33
- }
@@ -1,111 +0,0 @@
1
- /**
2
- * Subagent light mode (#449 slice 0; broadened #507).
3
- *
4
- * Two known subagent-spawning ecosystems set different env vocabularies in
5
- * every spawned child's environment:
6
- *
7
- * - nicobailon/pi-subagents sets `PI_SUBAGENT_CHILD=1` unconditionally on
8
- * every process that hosts a child session — the only var light mode keys
9
- * on for this vocabulary. It ALSO used to set `PI_SUBAGENT_RUN_ID` /
10
- * `PI_SUBAGENT_CHILD_AGENT` alongside it for best-effort identity, but
11
- * removed both entirely in `pi-subagents@0.65.0`'s native-AgentSession
12
- * rewrite (grep-verified absent from the whole 0.66.0 source tree, #2581/
13
- * #2680) — child identity now travels through an in-process object, not
14
- * env vars. `getSubagentIdentity()` below already treats identity as
15
- * optional best-effort metadata, so this permanent absence for the
16
- * nicobailon vocabulary needed no behavior change, only the doc update.
17
- * - avtc-pi-subagent (the spawn engine under avtc-pi-feature-flow) is the same
18
- * execution model — real child-process `pi --mode rpc` / `--mode json -p`
19
- * spawns, full env inheritance — but never sets `PI_SUBAGENT_CHILD`. It sets
20
- * `PI_SUBAGENT_CHILD_AGENT` + `PI_SUBAGENT_PARENT_PID` instead (#507,
21
- * grep-verified against avtc-pi-subagent@1.0.3).
22
- *
23
- * Every child currently loads pi-lens fully by default, so a fan-out of N
24
- * subagents pays N full LSP pre-warms + N sets of heavyweight startup scans
25
- * in the same cwd — mostly wasted on short-lived task agents.
26
- *
27
- * Detection requires the avtc PAIR (`PI_SUBAGENT_CHILD_AGENT` AND
28
- * `PI_SUBAGENT_PARENT_PID`, both non-empty) rather than either var alone —
29
- * deliberate false-positive protection, since a lone var set by some
30
- * unrelated tool must not trigger light mode.
31
- *
32
- * This module only classifies the session; it does not change any behavior
33
- * itself. Callers (`runtime-session.ts`) gate the LSP pre-warm and the seven
34
- * heavyweight external-CLI startup scans on `isSubagentSession()`. Per-edit
35
- * LSP dispatch is untouched — light mode must not disable diagnostics.
36
- *
37
- * Escape hatch: `PI_LENS_SUBAGENT_FULL=1` forces full (non-light) behavior
38
- * even inside a detected subagent session, for either vocabulary.
39
- *
40
- * Follows the lazy-memoized-config house style (see `runtime-config.ts` /
41
- * `slow-fs.ts`): env values are read lazily at call time, not module load.
42
- */
43
- /** Lazily computed once per process (until `_resetSubagentModeForTests`),
44
- * matching the memoized-getter house style. */
45
- let cachedClassification;
46
- function classifySubagentSession() {
47
- if (cachedClassification !== undefined)
48
- return cachedClassification;
49
- if (process.env.PI_SUBAGENT_CHILD === "1") {
50
- cachedClassification = { isSubagent: true, marker: "pi-subagents" };
51
- return cachedClassification;
52
- }
53
- const childAgent = process.env.PI_SUBAGENT_CHILD_AGENT || undefined;
54
- const parentPid = process.env.PI_SUBAGENT_PARENT_PID || undefined;
55
- if (childAgent !== undefined && parentPid !== undefined) {
56
- cachedClassification = { isSubagent: true, marker: "avtc-pi-subagent" };
57
- return cachedClassification;
58
- }
59
- cachedClassification = { isSubagent: false };
60
- return cachedClassification;
61
- }
62
- /** True iff pi-lens is running inside a detected subagent child `pi` process
63
- * (nicobailon/pi-subagents' `PI_SUBAGENT_CHILD=1`, or avtc-pi-subagent's
64
- * `PI_SUBAGENT_CHILD_AGENT` + `PI_SUBAGENT_PARENT_PID` pair), and the caller
65
- * has not forced full behavior via the escape hatch. */
66
- export function isSubagentSession() {
67
- if (process.env.PI_LENS_SUBAGENT_FULL === "1")
68
- return false;
69
- return classifySubagentSession().isSubagent;
70
- }
71
- /**
72
- * Best-effort identity of the current subagent, read from the env vars the
73
- * detected extension sets alongside its subagent marker. Returns `undefined`
74
- * when neither identity var is present — not a subagent session, an
75
- * extension that never set them, OR nicobailon/pi-subagents@0.65.0+, which
76
- * removed both identity vars upstream while still setting `PI_SUBAGENT_CHILD`
77
- * (#2581/#2680): light mode still engages via `isSubagentSession()` alone,
78
- * `marker` is still populated, only `runId`/`agentName` degrade to
79
- * `undefined`. Identity is metadata for observability, never a light-mode
80
- * gate — callers must not treat its absence as "not a subagent".
81
- */
82
- export function getSubagentIdentity() {
83
- const runId = process.env.PI_SUBAGENT_RUN_ID || undefined;
84
- const agentName = process.env.PI_SUBAGENT_CHILD_AGENT || undefined;
85
- const parentPidRaw = process.env.PI_SUBAGENT_PARENT_PID || undefined;
86
- const parsedParentPid = parentPidRaw === undefined ? undefined : Number(parentPidRaw);
87
- const parentPid = parsedParentPid !== undefined &&
88
- Number.isSafeInteger(parsedParentPid) &&
89
- parsedParentPid > 0
90
- ? parsedParentPid
91
- : undefined;
92
- const classification = classifySubagentSession();
93
- if (runId === undefined &&
94
- agentName === undefined &&
95
- parentPid === undefined &&
96
- !classification.isSubagent) {
97
- return undefined;
98
- }
99
- return { runId, agentName, marker: classification.marker, parentPid };
100
- }
101
- /** Human-readable degradation notice surfaced once per session when subagent
102
- * light mode engages, so a subagent never sees a silently-empty scan result. */
103
- export function subagentLightModeNotice() {
104
- return "subagent session — skipped background code-quality scans (set PI_LENS_SUBAGENT_FULL=1 to override)";
105
- }
106
- /** Test-only: clears the memoized classification so tests can flip env vars
107
- * between cases (matching the `_resetForTests` convention used by
108
- * `runtime-config.ts` / `slow-fs.ts`). */
109
- export function _resetSubagentModeForTests() {
110
- cachedClassification = undefined;
111
- }