@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,424 +0,0 @@
1
- /**
2
- * `pi-hashline-edit-pro` anchor resolution (#2423 review round 1, finding F1).
3
- *
4
- * ## Why this module exists
5
- *
6
- * `pi-hashline-edit-pro` addresses lines by a bare THREE-CHARACTER base62
7
- * anchor — `"aB3"`, never `"42"`. Its schema says so in as many words
8
- * (`src/payload-contract.ts`: *"Bare 3-char anchor only (e.g. \"aB3\")"*), and
9
- * its parser accepts exactly `trimmed.length === ANCHOR_LEN && ALPH_RE.test()`
10
- * (`src/hashline/parse.ts`). The first cut of the shape adapter in
11
- * `clients/mutating-tool.ts` read those fields as DECIMAL line numbers, so
12
- * against the real extension every anchor was "malformed" and the adapter
13
- * blocked a working edit tool.
14
- *
15
- * This module reproduces the extension's own line-hash function so pi-lens can
16
- * map an anchor back to a line, and does it from the extension's source rather
17
- * than from a guess. Everything below is a port of
18
- * `pi-hashline-edit-pro@8f027ca1c2a0796ccf1c15bd5a0d12db5d9fb9f0`
19
- * (github.com/YuGiMob/pi-hashline-edit-pro, branch `master`):
20
- *
21
- * - `src/hashline/alphabet.ts` — `HASH_LEN = 3`, the 62-character alphabet
22
- * `A-Za-z0-9`.
23
- * - `src/hashline/hash.ts` — `hashSource` (strip `\r`, `trimEnd`, truncate to
24
- * `MAX_HASH_SOURCE_BYTES = 500` UTF-8 bytes on a code-point boundary),
25
- * `baseIdx = (xxh32(source) >>> 14) % 62**3`, and open-addressed collision
26
- * probing with stride `62**2 + 62 + 1` over a used-index bitset.
27
- * - `src/hashline/hasher.ts` — `xxh32` is `xxhash-wasm`'s `h32`, i.e. standard
28
- * XXH32 with seed 0 over the UTF-8 bytes. Reimplemented here in ~40 lines of
29
- * integer arithmetic rather than taking a runtime dependency (pi installs
30
- * pi-lens with `npm install --omit=dev`, so a hashing dep would ship to every
31
- * user for one adapter).
32
- * - `src/hashline/resolve.ts` — `resAnchorFromMap`: an anchor resolves ONLY
33
- * when it matches exactly one line. Zero matches is `not_found`, two or more
34
- * is `ambiguous`, and the extension refuses both rather than guessing.
35
- *
36
- * `tests/clients/hashline-anchor.test.ts` pins the port against a vector table
37
- * generated by RUNNING the upstream code with the real `xxhash-wasm`, so a
38
- * drift in either direction is a red test rather than a silent misattribution.
39
- *
40
- * ## Why resolution is gated on UNIQUE CONTENT (review round 3, finding F1) —
41
- * and why the gate is NOT a correctness proof (review round 4, finding F1)
42
- *
43
- * The live extension does not recompute hashes on every read. It persists a
44
- * per-file snapshot (`src/hash-store.ts`) and, after every edit, carries a
45
- * surviving line's old anchor forward (`mapStableHashes` in
46
- * `src/hashline/hash.ts`) before persisting the result — so the anchors the
47
- * agent sends back are STORE-CARRIED, not freshly computed. pi-lens has no
48
- * access to that store and can only recompute with `_lineHashesPure`.
49
- *
50
- * Where a line's canonical content is unique in the file, the store's anchor
51
- * for it and pi-lens's own recomputed anchor for it USUALLY agree — that is
52
- * the case the gate below exists to hold. Where content is NOT unique — `}`,
53
- * a blank line, `continue;`, a bare comment-close line — the anchor comes
54
- * from probing, whose result depends on every line before it, so an edit
55
- * anywhere upstream repermutes those anchors among the identical lines. A
56
- * store-carried anchor then still matches EXACTLY ONE line under
57
- * recomputation: a confident, unique, WRONG answer.
58
- *
59
- * Gating on "the matched line's content is unique" narrows that failure a
60
- * long way, but it is not a proof, and review round 4 measured the two
61
- * mechanisms that survive it:
62
- *
63
- * (a) The gate is ONE-SIDED: it checks the MATCHED line's content, never the
64
- * anchor's own provenance. A probe-derived anchor that truly belongs to
65
- * some duplicate-content line elsewhere can, by construction of the
66
- * probe stride, land on the same anchor VALUE as a completely unrelated
67
- * unique-content line's own base index. Measured case: a file with 25
68
- * occurrences of a bare block-comment-close line — the store-carried
69
- * anchor for one of them resolved to an unrelated unique-content line
70
- * 1532 lines away, and the gate answered it, because that OTHER line's
71
- * content is (correctly) unique. A unique answer is not evidence the
72
- * anchor was ever meant for it.
73
- * (b) Content uniqueness does not imply base-index uniqueness. `baseIdx =
74
- * (xxh32(source) >>> 14) % 238328` has only 238,328 slots; over enough
75
- * DISTINCT line contents in a real file, two different contents collide
76
- * on the same base index and one of them is probed to a different slot
77
- * — the identical open-addressing mechanism as a literal duplicate, just
78
- * between lines whose content is each unique. Measured across 220 files:
79
- * 194 of 74,386 unique-content lines carry a probe-derived anchor, not
80
- * their own content's base index.
81
- *
82
- * So `resolveHashlineAnchor` answers when the matched line's canonical
83
- * content occurs exactly once in the file — a gate that removes nearly all
84
- * of the literal-duplicate case and neither (a) nor (b). Measured over 220
85
- * files and five edit shapes (~550,000 anchors asked): roughly 2 anchors
86
- * resolved to the wrong line, against ~67% of anchors answered at all. That
87
- * residual is ACCEPTED (review round 4 orchestrator decision), not fixed
88
- * here: closing it needs either the extension's own store, which pi-lens
89
- * does not have, or refusing every anchor within probing distance of a
90
- * collision, which costs far more coverage than the ~2-in-550,000 residual
91
- * is worth. Everything the gate refuses is `content_not_unique`: unresolved,
92
- * which is a report and never a block. pi-lens's uncertainty about a
93
- * third-party tool's addressing is not evidence that the agent's edit is
94
- * wrong. An unresolved anchor degrades to "mutation recognized, lines
95
- * unknown" — the same state a host `edit` with an unknown schema reaches on
96
- * master — so the file still gets its turn-state entry (the whole file as
97
- * its modified range), its deferred format and its change-log receipt.
98
- *
99
- * This costs coverage: roughly a third of the lines in a typical TypeScript
100
- * file are blank or a bare brace. Trading those for an almost-always-correct
101
- * answer on the rest is the deliberate choice — a wrong line range is worse
102
- * than no line range on average, because the guard acts on it, but "gated on
103
- * unique content" is a reduction of the wrong-line rate, not its elimination.
104
- */
105
- import * as nodeFs from "node:fs";
106
- import { BoundedFifoMap } from "./bounded-cache.js";
107
- /** `HASH_LEN` in `src/hashline/alphabet.ts`. */
108
- const HASHLINE_ANCHOR_LENGTH = 3;
109
- /** `ALPH` in `src/hashline/alphabet.ts`. Order is load-bearing: it is the digit set. */
110
- const ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
111
- /** `HASH_SPACE` — 62**3 = 238328 addressable anchors. */
112
- const HASH_SPACE = ALPHABET.length ** HASHLINE_ANCHOR_LENGTH;
113
- /** `HASH_PROBE_STRIDE` — 62**2 + 62 + 1, the open-addressing step. */
114
- const HASH_PROBE_STRIDE = ALPHABET.length ** 2 + ALPHABET.length + 1;
115
- /** `MAX_HASH_SOURCE_BYTES` in `src/constants.ts`. */
116
- const MAX_HASH_SOURCE_BYTES = 500;
117
- const BITSET_WORDS = Math.ceil(HASH_SPACE / 32);
118
- const ANCHOR_TOKEN_RE = /^[A-Za-z0-9]{3}$/;
119
- // --- XXH32 (seed 0), the algorithm behind `xxhash-wasm`'s `h32` -------------
120
- const XXH_PRIME1 = 0x9e3779b1;
121
- const XXH_PRIME2 = 0x85ebca77;
122
- const XXH_PRIME3 = 0xc2b2ae3d;
123
- const XXH_PRIME4 = 0x27d4eb2f;
124
- const XXH_PRIME5 = 0x165667b1;
125
- function rotl32(value, bits) {
126
- return (value << bits) | (value >>> (32 - bits));
127
- }
128
- function xxhRound(acc, input) {
129
- return (Math.imul(rotl32((acc + Math.imul(input, XXH_PRIME2)) | 0, 13), XXH_PRIME1) | 0);
130
- }
131
- /**
132
- * Standard XXH32 with seed 0 over `bytes`. Returns an unsigned 32-bit integer,
133
- * matching `xxh32()` in `src/hashline/hasher.ts`.
134
- */
135
- export function xxh32Bytes(bytes) {
136
- const length = bytes.length;
137
- let index = 0;
138
- let hash;
139
- if (length >= 16) {
140
- const limit = length - 16;
141
- let v1 = (XXH_PRIME1 + XXH_PRIME2) | 0;
142
- let v2 = XXH_PRIME2 | 0;
143
- let v3 = 0;
144
- let v4 = -XXH_PRIME1 | 0;
145
- do {
146
- v1 = xxhRound(v1, readU32(bytes, index));
147
- v2 = xxhRound(v2, readU32(bytes, index + 4));
148
- v3 = xxhRound(v3, readU32(bytes, index + 8));
149
- v4 = xxhRound(v4, readU32(bytes, index + 12));
150
- index += 16;
151
- } while (index <= limit);
152
- hash =
153
- (rotl32(v1, 1) + rotl32(v2, 7) + rotl32(v3, 12) + rotl32(v4, 18)) | 0;
154
- }
155
- else {
156
- hash = XXH_PRIME5 | 0;
157
- }
158
- hash = (hash + length) | 0;
159
- while (index + 4 <= length) {
160
- hash =
161
- Math.imul(rotl32((hash + Math.imul(readU32(bytes, index), XXH_PRIME3)) | 0, 17), XXH_PRIME4) | 0;
162
- index += 4;
163
- }
164
- while (index < length) {
165
- hash =
166
- Math.imul(rotl32((hash + Math.imul(bytes[index], XXH_PRIME5)) | 0, 11), XXH_PRIME1) | 0;
167
- index += 1;
168
- }
169
- hash = (hash ^ (hash >>> 15)) | 0;
170
- hash = Math.imul(hash, XXH_PRIME2) | 0;
171
- hash = (hash ^ (hash >>> 13)) | 0;
172
- hash = Math.imul(hash, XXH_PRIME3) | 0;
173
- hash = (hash ^ (hash >>> 16)) | 0;
174
- return hash >>> 0;
175
- }
176
- function readU32(bytes, offset) {
177
- return (bytes[offset] |
178
- (bytes[offset + 1] << 8) |
179
- (bytes[offset + 2] << 16) |
180
- (bytes[offset + 3] << 24) |
181
- 0);
182
- }
183
- // --- The line-hash function -------------------------------------------------
184
- /** `canon` in `src/hashline/hash.ts`. */
185
- function canon(line) {
186
- return line.replace(/\r/g, "").trimEnd();
187
- }
188
- /** `splitLines` in `src/utils.ts`. An empty file is ONE empty line. */
189
- function splitLines(text) {
190
- if (text.length === 0)
191
- return [""];
192
- const lines = text.split("\n");
193
- return text.endsWith("\n") ? lines.slice(0, -1) : lines;
194
- }
195
- /**
196
- * `hashSource` in `src/hashline/hash.ts`, as bytes.
197
- *
198
- * Upstream truncates the STRING to 500 UTF-8 bytes by iterating code points
199
- * (`truncateToBytes` in `src/utils.ts`) and then hashes its UTF-8 encoding.
200
- * Cutting the encoded buffer back to the last non-continuation byte is the
201
- * same operation, because a UTF-8 code point occupies contiguous bytes.
202
- */
203
- function hashSourceBytes(line) {
204
- const bytes = Buffer.from(canon(line), "utf8");
205
- if (bytes.length <= MAX_HASH_SOURCE_BYTES)
206
- return bytes;
207
- let cut = MAX_HASH_SOURCE_BYTES;
208
- while (cut > 0 && (bytes[cut] & 0xc0) === 0x80)
209
- cut -= 1;
210
- return bytes.subarray(0, cut);
211
- }
212
- /**
213
- * The same `hashSource` value as a string — the key upstream itself compares
214
- * lines by (`newByContent` / `removedByContent` in `mapStableHashes`). Two
215
- * lines with the same key are indistinguishable to BOTH implementations, which
216
- * is exactly the condition the uniqueness gate tests. Decoding the truncated
217
- * buffer is lossless because the cut lands on a code-point boundary.
218
- */
219
- function hashSourceKey(line) {
220
- return Buffer.from(hashSourceBytes(line)).toString("utf8");
221
- }
222
- function indexToAnchor(index) {
223
- let out = "";
224
- let remaining = index;
225
- for (let digit = 0; digit < HASHLINE_ANCHOR_LENGTH; digit += 1) {
226
- out = ALPHABET[remaining % ALPHABET.length] + out;
227
- remaining = Math.floor(remaining / ALPHABET.length);
228
- }
229
- return out;
230
- }
231
- function getBit(bits, index) {
232
- return ((bits[index >>> 5] >>> (index & 31)) & 1) !== 0;
233
- }
234
- function setBit(bits, index) {
235
- bits[index >>> 5] |= 1 << (index & 31);
236
- }
237
- function nextZeroBit(bits, start) {
238
- let index = start % HASH_SPACE;
239
- for (let step = 0; step < HASH_SPACE; step += 1) {
240
- if (!getBit(bits, index))
241
- return index;
242
- index += HASH_PROBE_STRIDE;
243
- if (index >= HASH_SPACE)
244
- index -= HASH_SPACE;
245
- }
246
- // Upstream throws `[E_FILE_TOO_LARGE]` here. pi-lens is an observer, so it
247
- // reports "cannot address this file" instead of failing the caller.
248
- return -1;
249
- }
250
- /**
251
- * `_lineHashesPure` in `src/hashline/hash.ts`: one anchor per line of
252
- * ALREADY-NORMALIZED content (BOM stripped, CRLF folded to LF).
253
- *
254
- * Returns `undefined` for a file with more lines than the anchor space can
255
- * address, which is where upstream raises `[E_FILE_TOO_LARGE]`.
256
- */
257
- export function computeHashlineAnchors(content) {
258
- const lines = splitLines(content);
259
- if (lines.length > HASH_SPACE)
260
- return undefined;
261
- const anchors = [];
262
- anchors.length = lines.length;
263
- const used = new Uint32Array(BITSET_WORDS);
264
- let hint = 0;
265
- const sourceCache = new Map();
266
- for (let i = 0; i < lines.length; i += 1) {
267
- const line = lines[i];
268
- let baseIndex = sourceCache.get(line);
269
- if (baseIndex === undefined) {
270
- baseIndex = (xxh32Bytes(hashSourceBytes(line)) >>> 14) % HASH_SPACE;
271
- sourceCache.set(line, baseIndex);
272
- }
273
- if (!getBit(used, baseIndex)) {
274
- setBit(used, baseIndex);
275
- hint = baseIndex + HASH_PROBE_STRIDE;
276
- anchors[i] = indexToAnchor(baseIndex);
277
- continue;
278
- }
279
- const probed = nextZeroBit(used, hint);
280
- if (probed < 0)
281
- return undefined;
282
- setBit(used, probed);
283
- hint = probed + HASH_PROBE_STRIDE;
284
- anchors[i] = indexToAnchor(probed);
285
- }
286
- return anchors;
287
- }
288
- // --- Anchor tokens ----------------------------------------------------------
289
- /**
290
- * The anchor token an edit-pro request carries, or `undefined` when the value
291
- * is not one. Mirrors `parseRef` in `src/hashline/parse.ts`: trim, then require
292
- * exactly three characters from the alphabet. A decimal line number is NOT an
293
- * anchor.
294
- */
295
- export function normalizeHashlineAnchorToken(value) {
296
- if (typeof value !== "string")
297
- return undefined;
298
- const trimmed = value.trim();
299
- return ANCHOR_TOKEN_RE.test(trimmed) ? trimmed : undefined;
300
- }
301
- /**
302
- * Files larger than this are not anchor-resolved. The extension itself caps at
303
- * `MAX_HASH_LINES` (62**3 lines); this byte cap keeps the synchronous read on
304
- * the tool_call path bounded regardless of line length.
305
- */
306
- const MAX_ANCHOR_FILE_BYTES = 4 * 1024 * 1024;
307
- /**
308
- * Bounded memo. `classifyMutatingTool` runs several times per tool call and the
309
- * same file is asked about repeatedly; without this every ask re-reads and
310
- * re-hashes the file. Keyed by path and invalidated by mtime/size, so an edit
311
- * between two asks is USUALLY not answered from the stale index.
312
- *
313
- * "Usually" (review round 4, finding F5): mtime/size alone is not sufficient.
314
- * A same-size rewrite that lands within one filesystem mtime tick (mtime
315
- * resolution is coarser than a millisecond on some platforms/filesystems)
316
- * changes neither key, so the memo can serve stale content for a file that
317
- * genuinely changed. The memo only ever needs to survive WITHIN one tool
318
- * call — the repeated-ask case above — so `dropHashlineAnchorMemo` is called
319
- * at the `tool_call` boundary in `runtime-tool-call.ts` (`handleToolCallImpl`
320
- * entry) to bound its lifetime to that, rather than trusting mtime/size
321
- * across calls.
322
- */
323
- const ANCHOR_INDEX_CACHE_LIMIT = 8;
324
- const ANCHOR_INDEX_CACHE = new BoundedFifoMap(ANCHOR_INDEX_CACHE_LIMIT);
325
- /**
326
- * Drop the memo. Called at the `tool_call` boundary in production
327
- * (`runtime-tool-call.ts`) so a stale mtime/size match from a PRIOR tool call
328
- * can never leak into this one (review round 4, finding F5), and as a test
329
- * seam so a fixture rewrite is never answered from cache.
330
- */
331
- export function dropHashlineAnchorMemo() {
332
- ANCHOR_INDEX_CACHE.clear();
333
- }
334
- function buildAnchorIndex(filePath) {
335
- let stats;
336
- try {
337
- stats = nodeFs.statSync(filePath);
338
- }
339
- catch {
340
- return { failure: "file_unreadable" };
341
- }
342
- if (!stats.isFile())
343
- return { failure: "file_unreadable" };
344
- if (stats.size > MAX_ANCHOR_FILE_BYTES)
345
- return { failure: "file_too_large" };
346
- const cached = ANCHOR_INDEX_CACHE.get(filePath);
347
- if (cached &&
348
- cached.mtimeMs === stats.mtimeMs &&
349
- cached.size === stats.size) {
350
- return { index: cached.index, contentUnique: cached.contentUnique };
351
- }
352
- let raw;
353
- try {
354
- raw = nodeFs.readFileSync(filePath, "utf8");
355
- }
356
- catch {
357
- return { failure: "file_unreadable" };
358
- }
359
- // `readNormFile` in the extension strips the BOM and folds line endings to
360
- // LF before hashing, so the same normalization has to happen here.
361
- const normalized = (raw.startsWith("") ? raw.slice(1) : raw)
362
- .replace(/\r\n/g, "\n")
363
- .replace(/\r/g, "\n");
364
- const anchors = computeHashlineAnchors(normalized);
365
- if (anchors === undefined)
366
- return { failure: "file_too_large" };
367
- const index = new Map();
368
- for (let i = 0; i < anchors.length; i += 1) {
369
- index.set(anchors[i], i + 1);
370
- }
371
- // Content multiplicity, keyed exactly as upstream keys it. A line whose key
372
- // repeats is unanswerable: see the module header.
373
- const lines = splitLines(normalized);
374
- const keys = [];
375
- keys.length = lines.length;
376
- const keyCounts = new Map();
377
- const keyCache = new Map();
378
- for (let i = 0; i < lines.length; i += 1) {
379
- const line = lines[i];
380
- let key = keyCache.get(line);
381
- if (key === undefined) {
382
- key = hashSourceKey(line);
383
- keyCache.set(line, key);
384
- }
385
- keys[i] = key;
386
- keyCounts.set(key, (keyCounts.get(key) ?? 0) + 1);
387
- }
388
- const contentUnique = keys.map((key) => keyCounts.get(key) === 1);
389
- ANCHOR_INDEX_CACHE.set(filePath, {
390
- mtimeMs: stats.mtimeMs,
391
- size: stats.size,
392
- index,
393
- contentUnique,
394
- });
395
- return { index, contentUnique };
396
- }
397
- /**
398
- * Resolve one anchor token against the file's CURRENT content.
399
- *
400
- * TWO conditions, both required (review round 3, finding F1):
401
- *
402
- * 1. The anchor matches a line of the recomputed table — `resAnchorFromMap` in
403
- * `src/hashline/resolve.ts` requires that much.
404
- * 2. That line's canonical content occurs exactly once in the file. Without
405
- * this, a store-carried anchor for one `}` resolves confidently to a
406
- * DIFFERENT `}`, and the wrong range reaches the read guard. The module
407
- * header has the measurement — including the residual this narrows but
408
- * does not close (review round 4, finding F1).
409
- */
410
- export function resolveHashlineAnchor(filePath, anchor) {
411
- const token = normalizeHashlineAnchorToken(anchor);
412
- if (token === undefined)
413
- return { failure: "not_an_anchor" };
414
- const built = buildAnchorIndex(filePath);
415
- if ("failure" in built)
416
- return { failure: built.failure };
417
- const line = built.index.get(token);
418
- if (line === undefined)
419
- return { failure: "anchor_not_found" };
420
- if (built.contentUnique[line - 1] !== true) {
421
- return { failure: "content_not_unique" };
422
- }
423
- return { line };
424
- }
@@ -1,76 +0,0 @@
1
- /**
2
- * The per-hook wall-clock budgets, in ONE table (#2523).
3
- *
4
- * ## What a budget here means
5
- *
6
- * The maintainer contract behind #2523: only the write/edit `tool_result`
7
- * path may block pi's host loop. `session_start`, `turn_end`, `agent_end`,
8
- * `agent_settled` and read-only `tool_result` must either finish inside a
9
- * small bound or deliver their work OFF-hook (`clients/deferred-lsp-work.ts`,
10
- * `publishActionableWarningsReport` #2509, the test-runner `agent_settled`
11
- * delivery #2366, the cascade deferred settle #450) — deliver, never drop.
12
- *
13
- * A number here is the TOTAL wall time the hook may spend, not a per-await
14
- * allowance. `0` means the hook may not await anything at all: whatever it
15
- * does must be synchronous bookkeeping or fire-and-forget with its own
16
- * bound.
17
- *
18
- * The numbers are the contract's, not a measurement: they are the ceilings
19
- * the maintainer set for what the host may be made to wait for. #2523's
20
- * sweep measured today's reality against them — `turn_end` p50 3687 ms /
21
- * p90 14246 ms against a 3000 ms budget, `agent_end` p90 10043 ms against
22
- * 1000 ms — which is what makes this table a target rather than a
23
- * description.
24
- *
25
- * ## Why a table, and why it is not wired yet
26
- *
27
- * Slice 1 of #2523 ships the enforcement PRIMITIVE (`bounded()` in
28
- * `clients/deadline-utils.ts`) and the guard that makes a new unbounded hook
29
- * await impossible to add (`tests/config/hook-await-bounds.test.ts`). It
30
- * deliberately changes NO hook's behavior. This table exists now so the
31
- * guard's exemption table can say which hook each unbounded await belongs to
32
- * — a claim that is checked, since every exemption's `hook` field must be a
33
- * key of {@link HOOK_WALL_BUDGET_MS}. Slice 2 (AC3-AC8) wires it into the
34
- * outer `bounded()` around each registered handler.
35
- *
36
- * #1978's phase-budget watchdog is the general form of this idea ("every
37
- * recorded duration gets a declared budget"). When it lands it must CONSUME
38
- * this table for the hook family rather than declare a second set of hook
39
- * numbers — AGENTS.md's single-source-of-truth rule, and #2523 AC7 says so
40
- * explicitly.
41
- */
42
- /**
43
- * Total wall-clock budget per hook, in milliseconds. `0` = may not await.
44
- *
45
- * `session_start` is the one VISIBLE budget: 5 s of startup is work the user
46
- * is already watching a progress line for. Everything else is time the user
47
- * did not ask to spend.
48
- */
49
- export const HOOK_WALL_BUDGET_MS = Object.freeze({
50
- /** Visible startup work; the user is watching a progress line. */
51
- session_start: 5000,
52
- /** Pure bookkeeping — nothing here may await (#2523 contract). */
53
- turn_start: 0,
54
- /** Measured p50 3687 ms / p90 14246 ms today. The gap IS the issue. */
55
- turn_end: 3000,
56
- /** Measured p90 10043 ms today, from one unbounded pipeline re-entry. */
57
- agent_end: 1000,
58
- /** The designated place for settled-time sweeps; the widest non-edit budget. */
59
- agent_settled: 10000,
60
- /** Read/Grep/Glob/Bash: must never await analyzer bootstrap (AC5). */
61
- tool_result_read_only: 500,
62
- /** The ONLY path the contract lets block the host, and only this long. */
63
- tool_result_edit: 10000,
64
- /** Teardown: spawning or awaiting here aborts libuv (#234). */
65
- session_shutdown: 0,
66
- /** Synchronous message contribution; the host is blocked on the answer. */
67
- context: 0,
68
- /** Fork bookkeeping; the session is being replaced under it. */
69
- session_before_fork: 0,
70
- });
71
- /** Every declared hook family, for sweeps that must enumerate them. */
72
- export const HOOK_BUDGET_KEYS = Object.keys(HOOK_WALL_BUDGET_MS);
73
- /** Type guard for a string that names a declared hook family. */
74
- export function isHookBudgetKey(value) {
75
- return Object.hasOwn(HOOK_WALL_BUDGET_MS, value);
76
- }
@@ -1,140 +0,0 @@
1
- /**
2
- * Vendored port of the pi host edit tool's text-normalization primitives, so
3
- * the read-guard's oldText->range matching agrees *by construction* with how the
4
- * host actually applies edits (exact-then-fuzzy in normalized space).
5
- *
6
- * SOURCE OF TRUTH: `@earendil-works/pi-coding-agent`
7
- * `dist/core/tools/edit-diff.js` -- `normalizeForFuzzyMatch`, `normalizeToLF`,
8
- * `detectLineEnding`, `restoreLineEndings`. As of 0.85.1 the BOM
9
- * split/strip primitive (`stripBom`'s underlying `splitBom`) moved to
10
- * `dist/utils/text.js`, imported by edit-diff.js rather than inlined there
11
- * -- see the sync test's two-source read.
12
- *
13
- * The host SDK is a *type-only* dependency at runtime (pi installs extensions
14
- * with `npm install --omit=dev`, so the SDK is not in `node_modules`). These
15
- * functions are therefore intentionally COPIED, not imported -- keep each one
16
- * behaviourally identical to the host. The companion sync test
17
- * (`tests/clients/host-edit-normalize-sync.test.ts`) re-reads the host source
18
- * from devDeps and fails if it drifts from this port, pinning the floor below.
19
- *
20
- * The Unicode fold classes are built from explicit code points (HOST_* below)
21
- * rather than literal glyphs so this file stays pure-ASCII; the code-point sets
22
- * are the same ones the host hard-codes as \u escapes in `normalizeForFuzzyMatch`.
23
- *
24
- * Refs #257 (read-guard / edit-autopatch alignment with the host edit tool).
25
- */
26
- /**
27
- * Host SDK version this port mirrors. Bump together with the devDependency
28
- * floor in package.json and re-confirm the sync test when the host changes its
29
- * normalization ladder.
30
- */
31
- export const HOST_EDIT_DIFF_SDK_FLOOR = "0.85.1";
32
- // Host normalizeForFuzzyMatch code-point sets (edit-diff.js). Exported so the
33
- // sync test can assert the host source still encodes exactly these.
34
- /** U+2018 U+2019 U+201A U+201B -> ' */
35
- export const HOST_SMART_SINGLE_QUOTES = [0x2018, 0x2019, 0x201a, 0x201b];
36
- /** U+201C U+201D U+201E U+201F -> " */
37
- export const HOST_SMART_DOUBLE_QUOTES = [0x201c, 0x201d, 0x201e, 0x201f];
38
- /** U+2010..U+2015 dashes + U+2212 minus -> - */
39
- export const HOST_UNICODE_DASHES = [
40
- 0x2010, 0x2011, 0x2012, 0x2013, 0x2014, 0x2015, 0x2212,
41
- ];
42
- /** U+00A0 NBSP, U+2002..U+200A spaces, U+202F, U+205F, U+3000 -> space */
43
- export const HOST_SPECIAL_SPACES = [
44
- 0x00a0, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009,
45
- 0x200a, 0x202f, 0x205f, 0x3000,
46
- ];
47
- /** U+FEFF byte-order mark */
48
- export const HOST_BOM_CODE_POINT = 0xfeff;
49
- const charClass = (codePoints) => new RegExp(`[${String.fromCharCode(...codePoints)}]`, "g");
50
- const SMART_SINGLE_QUOTES_RE = charClass(HOST_SMART_SINGLE_QUOTES);
51
- const SMART_DOUBLE_QUOTES_RE = charClass(HOST_SMART_DOUBLE_QUOTES);
52
- const UNICODE_DASHES_RE = charClass(HOST_UNICODE_DASHES);
53
- const SPECIAL_SPACES_RE = charClass(HOST_SPECIAL_SPACES);
54
- const BOM = String.fromCharCode(HOST_BOM_CODE_POINT);
55
- // --- verbatim host ports (edit-diff.js) ---------------------------------------
56
- /** First-occurrence-wins line-ending detection (CRLF vs LF). */
57
- export function detectLineEnding(content) {
58
- const crlfIdx = content.indexOf("\r\n");
59
- const lfIdx = content.indexOf("\n");
60
- if (lfIdx === -1)
61
- return "\n";
62
- if (crlfIdx === -1)
63
- return "\n";
64
- return crlfIdx < lfIdx ? "\r\n" : "\n";
65
- }
66
- /** Collapse CRLF and lone-CR line endings to LF. */
67
- export function normalizeToLF(text) {
68
- return text.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
69
- }
70
- /** Restore LF text back to the detected ending (no-op for LF files). */
71
- export function restoreLineEndings(text, ending) {
72
- return ending === "\r\n" ? text.replace(/\n/g, "\r\n") : text;
73
- }
74
- /**
75
- * Normalize text for fuzzy matching. Mirrors the host's progressive ladder:
76
- * NFKC -> strip trailing whitespace per line -> smart quotes -> Unicode
77
- * dashes/hyphens -> special Unicode spaces. None of these transforms add or
78
- * remove a newline, so line numbers computed on the result map 1:1 to file
79
- * lines.
80
- */
81
- export function normalizeForFuzzyMatch(text) {
82
- return text
83
- .normalize("NFKC")
84
- .split("\n")
85
- .map((line) => line.trimEnd())
86
- .join("\n")
87
- .replace(SMART_SINGLE_QUOTES_RE, "'")
88
- .replace(SMART_DOUBLE_QUOTES_RE, '"')
89
- .replace(UNICODE_DASHES_RE, "-")
90
- .replace(SPECIAL_SPACES_RE, " ");
91
- }
92
- /** Strip a leading UTF-8 BOM if present. */
93
- export function stripBom(content) {
94
- return content.startsWith(BOM)
95
- ? { bom: BOM, text: content.slice(1) }
96
- : { bom: "", text: content };
97
- }
98
- // --- composed guard helper ----------------------------------------------------
99
- /**
100
- * Full host MATCH-space normalization used by the read-guard's oldText->range
101
- * resolver and the autopatch synthetic-read bridge: BOM strip -> LF -> fuzzy
102
- * fold. A needle normalized this way finds exactly what the host's
103
- * `fuzzyFindText` / `countOccurrences` would find, so the gate no longer
104
- * rejects edits the host would apply (smart quotes, em-dashes, NBSP, BOM, lone
105
- * CR, NFKC-equivalent forms). Newline positions are preserved relative to the
106
- * LF view, so occurrence line numbers stay aligned with the file.
107
- */
108
- export function normalizeForGuardMatch(text) {
109
- return normalizeForFuzzyMatch(normalizeToLF(stripBom(text).text));
110
- }
111
- /**
112
- * Replicate the host edit tool's match *decision* for a single oldText against
113
- * file content, WITHOUT applying anything: exact-then-fuzzy find + duplicate
114
- * count in fuzzy space, exactly as `fuzzyFindText` + `countOccurrences` do
115
- * (edit-diff.js). The host pre-strips BOM and normalizes to LF, so this does the
116
- * same before matching.
117
- *
118
- * Used as the read-guard's counterfactual log: when the guard blocks an edit,
119
- * `wouldApply === true` flags a false-block (the host would have applied it),
120
- * `false` confirms a genuine miss (the host would also fail). This is the only
121
- * way to measure the guard's false-block rate without an A/B harness (#257).
122
- */
123
- export function hostWouldApplyOldText(content, oldText) {
124
- const c = normalizeToLF(stripBom(content).text);
125
- const o = normalizeToLF(stripBom(oldText).text);
126
- if (o.length === 0) {
127
- return { wouldApply: false, occurrences: 0, usedFuzzyMatch: false };
128
- }
129
- const exactFound = c.indexOf(o) !== -1;
130
- // The host always counts duplicates in fuzzy space, even for an exact match.
131
- const fuzzyContent = normalizeForFuzzyMatch(c);
132
- const fuzzyOldText = normalizeForFuzzyMatch(o);
133
- const fuzzyFound = fuzzyContent.indexOf(fuzzyOldText) !== -1;
134
- const occurrences = fuzzyOldText.length === 0 ? 0 : fuzzyContent.split(fuzzyOldText).length - 1;
135
- return {
136
- wouldApply: (exactFound || fuzzyFound) && occurrences === 1,
137
- occurrences,
138
- usedFuzzyMatch: !exactFound && fuzzyFound,
139
- };
140
- }
@@ -1,39 +0,0 @@
1
- /** Host-neutral capabilities available to the pi-lens engine (#1358 S2). */
2
- /**
3
- * Headless/test implementation. Its feature-detection defaults deliberately
4
- * match the pre-ports absent-host paths: unknown trust/mode, fail-open spawn,
5
- * and no-op delivery surfaces.
6
- */
7
- export function createDefaultHostPorts(overrides = {}) {
8
- const unknownMode = () => "unknown";
9
- const defaults = {
10
- notify: { user: () => { } },
11
- trust: { isProjectTrusted: () => "unknown" },
12
- mode: {
13
- current: unknownMode,
14
- supportsTuiWidget: () => true,
15
- suppressesUserNotify: () => false,
16
- },
17
- log: { extension: () => { }, debug: () => { }, sink: () => () => { } },
18
- emit: { bus: () => { } },
19
- status: { set: () => { } },
20
- spawn: { abortSignal: () => undefined, isAllowed: () => true },
21
- render: { invalidate: () => { } },
22
- session: { id: () => undefined },
23
- workspace: { cwd: () => undefined, projectRoot: () => undefined },
24
- flags: { get: () => undefined },
25
- tools: { has: async () => false, getActive: () => [], setActive: () => { } },
26
- };
27
- // SAFETY: `Object.fromEntries` is typed `Record<string, T>` — it cannot
28
- // carry the key literals or the per-group value types through. The keys
29
- // come from `Object.entries(defaults)`, and `defaults` is declared as a
30
- // complete `HostPorts`, so every group is present; each value is that
31
- // group's default spread-merged with the same group's override, so no
32
- // group's member set shrinks. Add a group to `HostPorts` without adding it
33
- // to `defaults` and this cast becomes a lie, which is why `defaults` is
34
- // annotated rather than inferred.
35
- return Object.fromEntries(Object.entries(defaults).map(([group, value]) => [
36
- group,
37
- { ...value, ...overrides[group] },
38
- ]));
39
- }