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