@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
@@ -0,0 +1,441 @@
1
+ import { createHash } from "node:crypto"
2
+ import {
3
+ existsSync,
4
+ mkdirSync,
5
+ readdirSync,
6
+ readFileSync,
7
+ realpathSync,
8
+ writeFileSync,
9
+ } from "node:fs"
10
+ import { homedir } from "node:os"
11
+ import { basename, isAbsolute, join, relative, sep } from "node:path"
12
+ import { Type } from "@earendil-works/pi-ai"
13
+ import {
14
+ defineTool,
15
+ parseFrontmatter,
16
+ type ExtensionAPI,
17
+ } from "@earendil-works/pi-coding-agent"
18
+
19
+ export const CATALOG_ROOT = join(homedir(), ".agency-agents")
20
+
21
+ // Top-level catalog directories that hold no source personas.
22
+ const NON_PERSONA_DIRS = new Set([
23
+ "examples",
24
+ "integrations",
25
+ "scripts",
26
+ "strategy",
27
+ ])
28
+
29
+ export type Card = { path: string; name: string; description: string }
30
+ export type ScoredCard = Card & { score: number }
31
+
32
+ function realRoot(root: string): string {
33
+ try {
34
+ return realpathSync(root)
35
+ } catch {
36
+ throw new Error(
37
+ `Agency Agents catalog not found at ${root}; clone https://github.com/msitarzewski/agency-agents there`,
38
+ )
39
+ }
40
+ }
41
+
42
+ /** Every `<division>/**\/*.md` with `name` and `description` frontmatter, sorted by path. */
43
+ export function loadCatalog(root: string): Card[] {
44
+ const base = realRoot(root)
45
+ const cards: Card[] = []
46
+ const walk = (dir: string): void => {
47
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
48
+ const path = join(dir, entry.name)
49
+ if (entry.name.startsWith(".")) continue
50
+ if (entry.isDirectory()) {
51
+ if (dir !== base || !NON_PERSONA_DIRS.has(entry.name)) walk(path)
52
+ } else if (dir !== base && entry.isFile() && path.endsWith(".md")) {
53
+ try {
54
+ const { name, description } = parseFrontmatter(
55
+ readFileSync(path, "utf8"),
56
+ ).frontmatter
57
+ if (typeof name === "string" && typeof description === "string") {
58
+ const relativePath = relative(base, path).split(sep).join("/")
59
+ cards.push({ path: relativePath, name, description })
60
+ }
61
+ } catch {
62
+ // Malformed YAML frontmatter: not a usable persona.
63
+ }
64
+ }
65
+ }
66
+ }
67
+ walk(base)
68
+ return cards.toSorted((a, b) => a.path.localeCompare(b.path))
69
+ }
70
+
71
+ const STOP_WORDS = new Set(
72
+ "a an and are as at be by for from in is it of on or that the this to with".split(
73
+ " ",
74
+ ),
75
+ )
76
+
77
+ export function tokenize(text: string): string[] {
78
+ return text
79
+ .replace(/([a-z0-9])([A-Z])/g, "$1 $2")
80
+ .toLowerCase()
81
+ .split(/[^\p{L}\p{N}]+/u)
82
+ .filter((token) => token && !STOP_WORDS.has(token))
83
+ .map((token) =>
84
+ token.length > 3 && token.endsWith("s") && !token.endsWith("ss")
85
+ ? token.slice(0, -1)
86
+ : token,
87
+ )
88
+ }
89
+
90
+ /** Okapi BM25 over name, path and description, keeping at most `perDivision` cards per division. */
91
+ export function searchCatalog(
92
+ cards: Card[],
93
+ query: string,
94
+ limit = 6,
95
+ perDivision = 2,
96
+ ): ScoredCard[] {
97
+ const terms = [...new Set(tokenize(query))]
98
+ const docs = cards.map((card) =>
99
+ tokenize(`${card.name} ${card.path} ${card.description}`),
100
+ )
101
+ const avgLength =
102
+ docs.reduce((sum, doc) => sum + doc.length, 0) / (docs.length || 1)
103
+ const idf = terms.map((term) => {
104
+ const df = docs.filter((doc) => doc.includes(term)).length
105
+ return Math.log(1 + (docs.length - df + 0.5) / (df + 0.5))
106
+ })
107
+ const taken = new Map<string, number>()
108
+ return cards
109
+ .map((card, i) => {
110
+ const doc = docs[i]
111
+ let score = 0
112
+ terms.forEach((term, t) => {
113
+ const tf = doc.filter((token) => token === term).length
114
+ if (tf)
115
+ score +=
116
+ (idf[t] * tf * 2.2) /
117
+ (tf + 1.2 * (0.25 + (0.75 * doc.length) / avgLength))
118
+ })
119
+ return { ...card, score: Math.round(score * 100) / 100 }
120
+ })
121
+ .filter((card) => card.score > 0)
122
+ .toSorted((a, b) => b.score - a.score)
123
+ .filter((card) => {
124
+ const division = card.path.split("/")[0]
125
+ const count = (taken.get(division) ?? 0) + 1
126
+ taken.set(division, count)
127
+ return count <= perDivision
128
+ })
129
+ .slice(0, limit)
130
+ }
131
+
132
+ /** A catalog persona's body without frontmatter. */
133
+ export function loadPersona(root: string, persona: string): string {
134
+ const base = realRoot(root)
135
+ const file = realpathSync(isAbsolute(persona) ? persona : join(base, persona))
136
+ if (!file.startsWith(base + sep) || !file.endsWith(".md")) {
137
+ throw new Error(`${persona} is not a persona file inside ${root}`)
138
+ }
139
+ const { frontmatter, body } = parseFrontmatter(readFileSync(file, "utf8"))
140
+ if (typeof frontmatter.name !== "string") {
141
+ throw new Error(`${persona} has no persona frontmatter`)
142
+ }
143
+ if (/<\/?persona>/i.test(body)) {
144
+ throw new Error(`${persona} contains a reserved <persona> delimiter`)
145
+ }
146
+ return body
147
+ }
148
+
149
+ /** Fills `{{persona}}` and `{{shared}}` in one pass, so inserted text is never rescanned or `$`-expanded. */
150
+ export function fillPrompt(
151
+ template: string,
152
+ values: { persona?: string; shared?: string },
153
+ ): string {
154
+ for (const key of ["persona", "shared"] as const) {
155
+ const count = template.split(`{{${key}}}`).length - 1
156
+ if (values[key] === undefined && count > 0) {
157
+ throw new Error(`prompt contains {{${key}}} but no ${key} was given`)
158
+ }
159
+ if (values[key] !== undefined && count !== 1) {
160
+ throw new Error(`prompt must contain {{${key}}} exactly once`)
161
+ }
162
+ }
163
+ return template.replace(
164
+ /\{\{(persona|shared)\}\}/g,
165
+ (_match, key: "persona" | "shared") => values[key] ?? "",
166
+ )
167
+ }
168
+
169
+ const sha256 = (text: string) => createHash("sha256").update(text).digest("hex")
170
+ const NullableString = Type.Union([Type.String(), Type.Null()])
171
+
172
+ /** Some models fill every optional parameter with "" or 0; every such value here means omitted. */
173
+ export function dropPlaceholders(args: unknown): any {
174
+ return JSON.parse(
175
+ JSON.stringify(args ?? {}),
176
+ function (this: unknown, _key: string, value: unknown) {
177
+ return !Array.isArray(this) && (value === "" || value === 0)
178
+ ? undefined
179
+ : value
180
+ },
181
+ )
182
+ }
183
+
184
+ export function agencyTools(root = CATALOG_ROOT) {
185
+ const search = defineTool({
186
+ name: "agency_search",
187
+ label: "Agency Search",
188
+ description:
189
+ "Search the local Agency Agents catalog (~/.agency-agents) without listing or reading it into context. Each query (one per review axis or touchpoint) returns up to `limit` cards (catalog path, name, description) ranked by BM25 over name, path and description, with at most `per_division` cards per top-level division. Pick personas from the cards; read a persona file only if its card is not enough.",
190
+ promptSnippet: "Shortlist Agency Agents personas by query",
191
+ prepareArguments: dropPlaceholders,
192
+ parameters: Type.Object({
193
+ queries: Type.Array(Type.String(), {
194
+ minItems: 1,
195
+ description: "One query per axis or touchpoint.",
196
+ }),
197
+ limit: Type.Optional(
198
+ Type.Integer({
199
+ minimum: 1,
200
+ description: "Cards per query. Default 6.",
201
+ }),
202
+ ),
203
+ per_division: Type.Optional(
204
+ Type.Integer({
205
+ minimum: 1,
206
+ description: "Cards per division and query. Default 2.",
207
+ }),
208
+ ),
209
+ }),
210
+ outputSchema: Type.Object({
211
+ catalog: Type.String(),
212
+ personas: Type.Integer(),
213
+ results: Type.Array(
214
+ Type.Object({
215
+ query: Type.String(),
216
+ cards: Type.Array(
217
+ Type.Object({
218
+ path: Type.String(),
219
+ name: Type.String(),
220
+ description: Type.String(),
221
+ score: Type.Number(),
222
+ }),
223
+ ),
224
+ }),
225
+ ),
226
+ }),
227
+ async execute(_toolCallId, params) {
228
+ const cards = loadCatalog(root)
229
+ const results = params.queries.map((query) => ({
230
+ query,
231
+ cards: searchCatalog(cards, query, params.limit, params.per_division),
232
+ }))
233
+ const text = results
234
+ .map(
235
+ (result) =>
236
+ `## ${result.query}\n` +
237
+ (result.cards
238
+ .map(
239
+ (card) => `- ${card.path} — ${card.name}: ${card.description}`,
240
+ )
241
+ .join("\n") || "(no match)"),
242
+ )
243
+ .join("\n\n")
244
+ return {
245
+ content: [
246
+ {
247
+ type: "text",
248
+ text: `${cards.length} personas in ${root}\n\n${text}`,
249
+ },
250
+ ],
251
+ details: {},
252
+ structuredContent: { catalog: root, personas: cards.length, results },
253
+ }
254
+ },
255
+ })
256
+
257
+ const dispatch = defineTool({
258
+ name: "agency_dispatch",
259
+ label: "Agency Dispatch",
260
+ description:
261
+ "Run subagents in parallel through pi-subagents' Agent tool and return all results together. Runs are foreground, so no completion notifications follow. Each run's prompt is sent as written after `{{persona}}` is replaced by the persona file's body (frontmatter removed) and `{{shared}}` by `shared` or the text of `shared_file`, so persona text never passes through your context. Personas outside the catalog or containing <persona> delimiters are rejected. Results include the SHA-256 of each sent prompt; `record_dir` also saves <id>.prompt.txt and <id>.return.txt and never overwrites. Defaults: subagent_type general-purpose, isolated true (built-in tools only).",
262
+ promptSnippet:
263
+ "Dispatch catalog personas to parallel subagents without reading them",
264
+ prepareArguments: dropPlaceholders,
265
+ promptGuidelines: [
266
+ "For Agency Agents personas, use agency_search and agency_dispatch instead of listing the catalog or reading persona files into context.",
267
+ ],
268
+ parameters: Type.Object({
269
+ runs: Type.Array(
270
+ Type.Object({
271
+ prompt: Type.String({
272
+ description:
273
+ "Sent as written. Contains {{persona}} exactly once when persona is set, and {{shared}} exactly once when shared or shared_file is set.",
274
+ }),
275
+ persona: Type.Optional(
276
+ Type.String({
277
+ description:
278
+ "Persona file relative to the catalog, e.g. security/security-architect.md, or an absolute path inside it.",
279
+ }),
280
+ ),
281
+ id: Type.Optional(
282
+ Type.String({
283
+ description:
284
+ "Record file stem: letters, digits, dot, dash or underscore. Default: 1-based run index.",
285
+ }),
286
+ ),
287
+ description: Type.Optional(
288
+ Type.String({ description: "3-5 word label shown in the UI." }),
289
+ ),
290
+ }),
291
+ { minItems: 1 },
292
+ ),
293
+ shared: Type.Optional(
294
+ Type.String({ description: "Text for {{shared}} in every prompt." }),
295
+ ),
296
+ shared_file: Type.Optional(
297
+ Type.String({ description: "File whose text fills {{shared}}." }),
298
+ ),
299
+ subagent_type: Type.Optional(Type.String()),
300
+ isolated: Type.Optional(Type.Boolean()),
301
+ model: Type.Optional(Type.String()),
302
+ thinking: Type.Optional(Type.String()),
303
+ max_turns: Type.Optional(Type.Integer({ minimum: 1 })),
304
+ record_dir: Type.Optional(
305
+ Type.String({
306
+ description:
307
+ "Absolute directory for <id>.prompt.txt and <id>.return.txt (mode 0600).",
308
+ }),
309
+ ),
310
+ }),
311
+ outputSchema: Type.Object({
312
+ results: Type.Array(
313
+ Type.Object({
314
+ id: Type.String(),
315
+ persona: NullableString,
316
+ promptSha256: Type.String(),
317
+ status: Type.String(),
318
+ agentId: NullableString,
319
+ model: NullableString,
320
+ output: Type.String(),
321
+ }),
322
+ ),
323
+ }),
324
+ async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
325
+ if (!ctx?.tools?.some((tool) => tool.name === "Agent")) {
326
+ throw new Error(
327
+ "agency_dispatch needs the Agent tool from pi-subagents",
328
+ )
329
+ }
330
+ if (params.shared !== undefined && params.shared_file !== undefined) {
331
+ throw new Error("Give shared or shared_file, not both")
332
+ }
333
+ const shared =
334
+ params.shared_file === undefined
335
+ ? params.shared
336
+ : readFileSync(params.shared_file, "utf8")
337
+ const runs = params.runs.map((run, index) => {
338
+ const id = run.id ?? String(index + 1)
339
+ if (!/^[\w.-]+$/.test(id)) throw new Error(`Invalid run id: ${id}`)
340
+ const prompt = fillPrompt(run.prompt, {
341
+ persona:
342
+ run.persona === undefined
343
+ ? undefined
344
+ : loadPersona(root, run.persona),
345
+ shared,
346
+ })
347
+ return { ...run, id, prompt }
348
+ })
349
+ if (new Set(runs.map((run) => run.id)).size !== runs.length) {
350
+ throw new Error("Run ids must be unique")
351
+ }
352
+
353
+ const recordDir = params.record_dir
354
+ const record = (name: string, text: string) =>
355
+ recordDir &&
356
+ writeFileSync(join(recordDir, name), text, { flag: "wx", mode: 0o600 })
357
+ if (recordDir !== undefined) {
358
+ if (!isAbsolute(recordDir)) {
359
+ throw new Error("record_dir must be an absolute path")
360
+ }
361
+ mkdirSync(recordDir, { recursive: true, mode: 0o700 })
362
+ const existing = runs
363
+ .flatMap((run) => [`${run.id}.prompt.txt`, `${run.id}.return.txt`])
364
+ .map((name) => join(recordDir, name))
365
+ .find((path) => existsSync(path))
366
+ if (existing) throw new Error(`${existing} already exists`)
367
+ for (const run of runs) record(`${run.id}.prompt.txt`, run.prompt)
368
+ }
369
+
370
+ const options = Object.fromEntries(
371
+ Object.entries({
372
+ model: params.model,
373
+ thinking: params.thinking,
374
+ max_turns: params.max_turns,
375
+ }).filter(([, value]) => value !== undefined),
376
+ )
377
+ const outcomes = await Promise.all(
378
+ runs.map((run) =>
379
+ ctx.executeTool("Agent", {
380
+ subagent_type: params.subagent_type ?? "general-purpose",
381
+ description:
382
+ run.description ??
383
+ (run.persona ? basename(run.persona, ".md") : `agency ${run.id}`),
384
+ prompt: run.prompt,
385
+ run_in_background: false,
386
+ isolated: params.isolated ?? true,
387
+ ...options,
388
+ }),
389
+ ),
390
+ )
391
+
392
+ const results = outcomes.map(({ result, isError }, i) => {
393
+ const run = runs[i]
394
+ const text = result.content
395
+ .map((part) => (part.type === "text" ? part.text : ""))
396
+ .join("")
397
+ const details = (result.details ?? {}) as {
398
+ status?: string
399
+ agentId?: string
400
+ modelName?: string
401
+ }
402
+ // pi-subagents prefixes foreground output with "Agent completed in …\n\n".
403
+ const header = /^(?:[\s\S]*?\n)?Agent completed in [^\n]*\n\n/.exec(
404
+ text,
405
+ )
406
+ const output = header ? text.slice(header[0].length) : text
407
+ record(`${run.id}.return.txt`, output)
408
+ return {
409
+ id: run.id,
410
+ persona: run.persona ?? null,
411
+ promptSha256: sha256(run.prompt),
412
+ status: isError
413
+ ? "error"
414
+ : (details.status ?? (header ? "completed" : "unknown")),
415
+ agentId: details.agentId ?? null,
416
+ model: details.modelName ?? null,
417
+ output,
418
+ }
419
+ })
420
+ const text = results
421
+ .map(
422
+ (run) =>
423
+ `## ${run.id}${run.persona ? ` ${run.persona}` : ""}: ${run.status}\nsha256 ${run.promptSha256}\n\n${run.output}`,
424
+ )
425
+ .join("\n\n")
426
+ return {
427
+ content: [{ type: "text", text }],
428
+ details: {},
429
+ structuredContent: { results },
430
+ }
431
+ },
432
+ })
433
+
434
+ return { search, dispatch }
435
+ }
436
+
437
+ export default function piAgency(pi: ExtensionAPI): void {
438
+ const { search, dispatch } = agencyTools()
439
+ pi.registerTool(search)
440
+ pi.registerTool(dispatch)
441
+ }
@@ -324,7 +324,7 @@ function hiddenPreviewHint(
324
324
  return undefined;
325
325
  }
326
326
 
327
- const expandedThinking = new Set<number>();
327
+ const expandedThinking = new Set<string>();
328
328
 
329
329
  /** 折叠预览 + 展开全文。fullscreen 点击 hint 展开、展开卡单击整块收起(拖动选择文本时不收起)。 */
330
330
  export class ThinkingPreviewBlock implements Component {
@@ -335,7 +335,6 @@ export class ThinkingPreviewBlock implements Component {
335
335
  readonly runStartIndex: number;
336
336
  private style: (text: string) => string;
337
337
  private theme: Theme | undefined;
338
- private _expanded: boolean;
339
338
  private hintHovered = false;
340
339
  private collapsedMemo:
341
340
  | {
@@ -363,7 +362,6 @@ export class ThinkingPreviewBlock implements Component {
363
362
  this.runStartIndex = runStartIndex;
364
363
  this.style = style;
365
364
  this.theme = theme;
366
- this._expanded = expandedThinking.has(messageTimestamp);
367
365
  }
368
366
 
369
367
  private paint(color: string, text: string): string {
@@ -372,18 +370,20 @@ export class ThinkingPreviewBlock implements Component {
372
370
  : text;
373
371
  }
374
372
 
373
+ /** 展开态按消息时间戳 + run 序号共享:面板重排/内容重建换掉实例后,
374
+ * 布局里的旧实例与 render 的新实例同键,点谁都能展开。 */
375
375
  get expanded(): boolean {
376
- return this._expanded;
376
+ return expandedThinking.has(`${this.messageTimestamp}:${this.runStartIndex}`);
377
377
  }
378
378
 
379
379
  setExpanded(expanded: boolean): void {
380
- if (this._expanded !== expanded) this.collapsedMemo = undefined;
381
- this._expanded = expanded;
382
- if (expanded) expandedThinking.add(this.messageTimestamp);
380
+ const key = `${this.messageTimestamp}:${this.runStartIndex}`;
381
+ if (expanded) expandedThinking.add(key);
383
382
  else {
384
- expandedThinking.delete(this.messageTimestamp);
383
+ expandedThinking.delete(key);
385
384
  evictExpandedWraps(this.messageTimestamp, this.runStartIndex);
386
385
  }
386
+ this.collapsedMemo = undefined;
387
387
  }
388
388
 
389
389
  setHintHovered(hovered: boolean): void {
@@ -392,7 +392,7 @@ export class ThinkingPreviewBlock implements Component {
392
392
  }
393
393
 
394
394
  private headingLines(width: number, hiddenLines: number, padding: number): string[] {
395
- const hint = this._expanded
395
+ const hint = this.expanded
396
396
  ? undefined
397
397
  : hiddenPreviewHint(hiddenLines, Boolean(this.text) && config.previewLines <= 0);
398
398
  if (!hint) return new Text(this.heading, padding, 0).render(width);
@@ -412,10 +412,10 @@ export class ThinkingPreviewBlock implements Component {
412
412
  }
413
413
 
414
414
  private bodyLines(width: number, padding: number): { lines: string[]; hiddenLines: number } {
415
- if (!this.text || (config.previewLines <= 0 && !this._expanded)) {
415
+ if (!this.text || (config.previewLines <= 0 && !this.expanded)) {
416
416
  return { lines: [], hiddenLines: 0 };
417
417
  }
418
- if (this._expanded) {
418
+ if (this.expanded) {
419
419
  return {
420
420
  lines: wrapExpandedThinking(this.messageTimestamp, this.runStartIndex, this.text, width),
421
421
  hiddenLines: 0,
@@ -426,7 +426,7 @@ export class ThinkingPreviewBlock implements Component {
426
426
  }
427
427
 
428
428
  render(width: number) {
429
- if (this._expanded) {
429
+ if (this.expanded) {
430
430
  const innerWidth = Math.max(1, width - 2);
431
431
  const body = this.bodyLines(innerWidth, 0);
432
432
  const heading = this.headingLines(innerWidth, 0, 0);
@@ -535,6 +535,12 @@ function isToolComponent(value: any): boolean {
535
535
  return value instanceof ToolExecutionComponent;
536
536
  }
537
537
 
538
+ /** 成员离开回合后不再算外层面板,避免点别的卡时被跳过收起。 */
539
+ function clearRoundAnchor(component: any): void {
540
+ if (!component || Object.getOwnPropertyDescriptor(component, "roundAnchor")?.get) return;
541
+ delete component.roundAnchor;
542
+ }
543
+
538
544
  function detachAssistantExpansion(component: any): void {
539
545
  if (
540
546
  typeof component?.[ASSISTANT_SET_EXPANDED_KEY] !== "function" ||
@@ -546,6 +552,7 @@ function detachAssistantExpansion(component: any): void {
546
552
  delete component[ASSISTANT_SET_EXPANDED_KEY];
547
553
  delete component[ASSISTANT_TOGGLE_ROUND_KEY];
548
554
  delete component[ASSISTANT_REENTRY_KEY];
555
+ clearRoundAnchor(component);
549
556
  }
550
557
 
551
558
  /** 供 mouse-interaction 识别可点击的 compact assistant 行(仅 compact 模式下生效)。 */
@@ -703,8 +710,9 @@ function compactEditWriteLine(
703
710
  // 展开卡 Box(1,1) 已 pad;折叠行自己留 1 格前导空格
704
711
  const iconPart = `${options.flushLeft ? "" : " "}${theme.fg(iconColor, icon)} `;
705
712
  const namePart = theme.fg("toolTitle", name);
706
- const hintText =
707
- options.hint !== false && component.expanded !== true ? ` · ${showMoreHintText()}` : "";
713
+ const clickable = options.hint !== false && component.expanded !== true;
714
+ const clickText = clickable ? showMoreHintText() : "";
715
+ const hintText = clickable ? ` · ${clickText}` : "";
708
716
  const fixedWidth =
709
717
  visibleWidth(iconPart) +
710
718
  visibleWidth(namePart) +
@@ -713,7 +721,11 @@ function compactEditWriteLine(
713
721
  const pathWidth = Math.max(0, width - fixedWidth - (path ? 1 : 0));
714
722
  const pathPart =
715
723
  pathWidth > 0 && path ? ` ${formatDisplayPath(path, component.cwd, pathWidth)}` : "";
716
- const line = `${iconPart}${namePart}${theme.fg("toolTitle", pathPart)}${statsStyled}${hintText ? theme.fg("dim", hintText) : ""}`;
724
+ // 圆点保持 dim;hover 只高亮可点击文字,与 compact 摘要行一致
725
+ const hintPart = clickable
726
+ ? `${theme.fg("dim", " · ")}${theme.fg(isToolCallHovered(component.toolCallId) ? "text" : "dim", clickText)}`
727
+ : "";
728
+ const line = `${iconPart}${namePart}${theme.fg("toolTitle", pathPart)}${statsStyled}${hintPart}`;
717
729
  return ["", truncateToWidth(line, width, "")];
718
730
  }
719
731
 
@@ -949,8 +961,11 @@ function compactAssistantLineComponent(
949
961
  text = `${styleCompactThinkingText(heading, theme)}${plain(tools)}`;
950
962
  }
951
963
  }
952
- const hintColor = hover ? "text" : "dim";
953
- const line = `${text}${hintText ? theme.fg(hintColor, hintText) : ""}`;
964
+ // 圆点保持 dim;hover 只高亮可点击文字。
965
+ const hintPart = hint
966
+ ? `${theme.fg("dim", " · ")}${theme.fg(hover ? "text" : "dim", showMoreHintText())}`
967
+ : "";
968
+ const line = `${text}${hintPart}`;
954
969
  const rendered = `${" ".repeat(pad)}${truncateToWidth(line, available, "")}`;
955
970
  const lines = leadingBlank ? ["", rendered] : [rendered];
956
971
  paint = {
@@ -1695,6 +1710,10 @@ export function installCompactMode(deps: CompactModeInstallDeps): CompactModeHoo
1695
1710
  for (const [component, message] of round.messages) {
1696
1711
  component.lastMessage = message;
1697
1712
  ensureAssistantSetExpanded(component);
1713
+ // 尾行用 getter 指向 anchor;成员用同名属性,点内部工具时能认出同一回合。
1714
+ if (!Object.getOwnPropertyDescriptor(component, "roundAnchor")?.get) {
1715
+ component.roundAnchor = round.anchor;
1716
+ }
1698
1717
  component[ASSISTANT_TOGGLE_ROUND_KEY] = (expanded: boolean) => {
1699
1718
  const wasExpanded = round.anchor.expanded === true;
1700
1719
  if (expanded && !wasExpanded) capturePanelViewport(round.anchor);
@@ -1946,7 +1965,10 @@ export function installCompactMode(deps: CompactModeInstallDeps): CompactModeHoo
1946
1965
  if (hasToolCalls) {
1947
1966
  let round = roundByComponent.get(this);
1948
1967
  if (hasText && (!round || round.anchor !== this)) {
1949
- if (round) round.messages.delete(this);
1968
+ if (round) {
1969
+ round.messages.delete(this);
1970
+ clearRoundAnchor(this);
1971
+ }
1950
1972
  if (activeRound) finishRound(activeRound);
1951
1973
  round = createRound(this, message);
1952
1974
  roundByComponent.set(this, round);
@@ -1966,6 +1988,7 @@ export function installCompactMode(deps: CompactModeInstallDeps): CompactModeHoo
1966
1988
  // 最终回答开始后,当前组件恢复原生文本;它已完成的 thinking
1967
1989
  // 留在上一轮摘要中,避免再次生成独立 Thought 行。
1968
1990
  round.messages.delete(this);
1991
+ clearRoundAnchor(this);
1969
1992
  round.detachedMessages.push(previousMessage);
1970
1993
  roundByComponent.delete(this);
1971
1994
  finishRound(round);
@@ -1975,6 +1998,7 @@ export function installCompactMode(deps: CompactModeInstallDeps): CompactModeHoo
1975
1998
  // 围观态下 anchor 还挂着槽位卡,必须重绘才能收回。
1976
1999
  endRound(round, true);
1977
2000
  roundByComponent.delete(this);
2001
+ clearRoundAnchor(this);
1978
2002
  return passThroughAssistant(this, message);
1979
2003
  }
1980
2004
  if (activeRound) finishRound(activeRound);
@@ -85,8 +85,8 @@ type GlobalToolRenderPatch = {
85
85
  prototype: any;
86
86
  active: boolean;
87
87
  mode: () => CompactStyleMode;
88
- wrap: (tool: any) => any;
89
- byDefinition: WeakMap<object, any>;
88
+ wrap: (tool: any, toolName: string) => any;
89
+ byDefinition: WeakMap<object, Map<string, any>>;
90
90
  byName: Map<string, any>;
91
91
  downstream: ToolRenderMethods;
92
92
  installed: ToolRenderMethods;
@@ -217,8 +217,8 @@ function renderExpandedTaskResult(
217
217
  function createCcstyleTool(
218
218
  originalTool: any,
219
219
  writeExecutionMetadata: WriteExecutionMetadataStore,
220
+ toolName: string,
220
221
  ): any {
221
- const toolName = originalTool.name;
222
222
  const label = originalTool.label || toolName;
223
223
  const defaultTitle = label === toolName ? humanizeToolLabel(label) : label;
224
224
  // MCP 工具直接用 adapter 暴露的真实工具名,不做人性化
@@ -459,19 +459,24 @@ function shouldGloballyStyleTool(component: any, patch: GlobalToolRenderPatch):
459
459
 
460
460
  function getGloballyStyledTool(component: any, patch: GlobalToolRenderPatch): any {
461
461
  const definition = component.toolDefinition ?? component.builtInToolDefinition;
462
+ const name = String(component.toolName || definition?.name || "tool");
462
463
  if (definition && typeof definition === "object") {
463
- let wrapped = patch.byDefinition.get(definition);
464
+ let byName = patch.byDefinition.get(definition);
465
+ if (!byName) {
466
+ byName = new Map();
467
+ patch.byDefinition.set(definition, byName);
468
+ }
469
+ let wrapped = byName.get(name);
464
470
  if (!wrapped) {
465
- wrapped = patch.wrap(definition);
466
- patch.byDefinition.set(definition, wrapped);
471
+ wrapped = patch.wrap(definition, name);
472
+ byName.set(name, wrapped);
467
473
  }
468
474
  return wrapped;
469
475
  }
470
476
 
471
- const name = String(component.toolName || "tool");
472
477
  let wrapped = patch.byName.get(name);
473
478
  if (!wrapped) {
474
- wrapped = patch.wrap({ name, label: name });
479
+ wrapped = patch.wrap({ name, label: name }, name);
475
480
  patch.byName.set(name, wrapped);
476
481
  }
477
482
  return wrapped;
@@ -568,7 +573,8 @@ function installGlobalToolRendering(
568
573
  prototype,
569
574
  active: true,
570
575
  mode: () => config.mode,
571
- wrap: (tool: any) => createCcstyleTool(tool, writeExecutionMetadata),
576
+ wrap: (tool: any, toolName: string) =>
577
+ createCcstyleTool(tool, writeExecutionMetadata, toolName),
572
578
  byDefinition: new WeakMap(),
573
579
  byName: new Map(),
574
580
  downstream,