@herbertgao/pi-extensions 2026.8.11 → 2026.8.12

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 (374) hide show
  1. package/README.md +18 -10
  2. package/{node_modules/@herbertgao/pi-inline-skills/LICENSE → THIRD_PARTY_NOTICES.md} +15 -1
  3. package/node_modules/@czottmann/pi-automode/CHANGELOG.md +15 -0
  4. package/node_modules/@czottmann/pi-automode/README.md +5 -3
  5. package/node_modules/@czottmann/pi-automode/docs/adr/ADR-001-permission-precedence-and-trust-boundaries.md +2 -0
  6. package/node_modules/@czottmann/pi-automode/docs/adr/ADR-002-global-config-in-extension-data-directory.md +60 -0
  7. package/node_modules/@czottmann/pi-automode/docs/adr/INDEX.md +1 -0
  8. package/node_modules/@czottmann/pi-automode/docs/automode-classifier-flow.md +4 -4
  9. package/node_modules/@czottmann/pi-automode/docs/configuration.md +20 -4
  10. package/node_modules/@czottmann/pi-automode/docs/observability-logging.md +1 -1
  11. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/bash.ts +692 -0
  12. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/config.ts +181 -3
  13. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/constants.ts +4 -1
  14. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/extension.ts +143 -36
  15. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/hard-deny.ts +103 -148
  16. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/paths.ts +32 -6
  17. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/permissions.ts +344 -22
  18. package/node_modules/@czottmann/pi-automode/extensions/auto-mode.ts +1 -0
  19. package/node_modules/@czottmann/pi-automode/package.json +4 -1
  20. package/node_modules/@herbertgao/pi-cc-extensions/README.en.md +2 -1
  21. package/node_modules/@herbertgao/pi-cc-extensions/README.md +2 -1
  22. package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/config.ts +4 -0
  23. package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/panel.ts +21 -1
  24. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/agent-summary/core.ts +1 -1
  25. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/context.ts +19 -19
  26. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/compact-mode.ts +4 -2
  27. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/default-mode.ts +2 -1
  28. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/grouping.ts +10 -2
  29. package/node_modules/@herbertgao/pi-cc-extensions/package.json +3 -3
  30. package/node_modules/@herbertgao/pi-subagents/CHANGELOG.md +10 -0
  31. package/node_modules/@herbertgao/pi-subagents/README.md +21 -15
  32. package/node_modules/@herbertgao/pi-subagents/package.json +3 -3
  33. package/node_modules/@herbertgao/pi-subagents/src/agent-file-toggle.ts +11 -8
  34. package/node_modules/@herbertgao/pi-subagents/src/agent-manager.ts +184 -106
  35. package/node_modules/@herbertgao/pi-subagents/src/cross-extension-rpc.ts +31 -11
  36. package/node_modules/@herbertgao/pi-subagents/src/custom-agents.ts +9 -1
  37. package/node_modules/@herbertgao/pi-subagents/src/index.ts +156 -31
  38. package/node_modules/@herbertgao/pi-subagents/src/invocation-config.ts +17 -0
  39. package/node_modules/@herbertgao/pi-subagents/src/model-resolver.ts +14 -0
  40. package/node_modules/@herbertgao/pi-subagents/src/schedule.ts +8 -0
  41. package/node_modules/@herbertgao/pi-subagents/src/settings.ts +32 -1
  42. package/node_modules/@herbertgao/pi-subagents/src/types.ts +17 -2
  43. package/node_modules/@herbertgao/pi-subagents/src/ui/agent-widget.ts +23 -2
  44. package/node_modules/@herbertgao/pi-subagents/src/ui/conversation-viewer.ts +259 -24
  45. package/node_modules/@juicesharp/rpiv-ask-user-question/package.json +2 -2
  46. package/node_modules/@narumitw/pi-btw/dist/index.ts +143 -46
  47. package/node_modules/@narumitw/pi-btw/dist/index.ts.map +3 -3
  48. package/node_modules/@narumitw/pi-btw/package.json +6 -6
  49. package/node_modules/@narumitw/pi-btw/src/fullscreen-ui.ts +136 -22
  50. package/node_modules/{@herbertgao → @tifan}/pi-copy-response/README.md +2 -4
  51. package/node_modules/{@herbertgao → @tifan}/pi-copy-response/package.json +5 -15
  52. package/node_modules/{@herbertgao → @tifan}/pi-handoff/README.md +4 -6
  53. package/node_modules/@tifan/pi-handoff/package.json +43 -0
  54. package/node_modules/{@herbertgao → @tifan}/pi-handoff/src/index.ts +1 -1
  55. package/node_modules/{@herbertgao → @tifan}/pi-inline-skills/README.md +2 -4
  56. package/node_modules/{@herbertgao → @tifan}/pi-inline-skills/package.json +5 -15
  57. package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/README.md +5 -7
  58. package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/package.json +5 -19
  59. package/node_modules/{@herbertgao → @tifan}/pi-preferred-thinking/README.md +4 -6
  60. package/node_modules/{@herbertgao → @tifan}/pi-preferred-thinking/package.json +6 -16
  61. package/node_modules/{@herbertgao → @tifan}/pi-preferred-thinking/src/index.ts +1 -6
  62. package/node_modules/{@herbertgao → @tifan}/pi-recap/README.md +4 -6
  63. package/node_modules/@tifan/pi-recap/package.json +42 -0
  64. package/node_modules/{@herbertgao → @tifan}/pi-recap/src/models.ts +1 -6
  65. package/node_modules/{@herbertgao → @tifan}/pi-rename/README.md +13 -8
  66. package/node_modules/@tifan/pi-rename/package.json +47 -0
  67. package/node_modules/@tifan/pi-rename/src/herdr-label.ts +4 -0
  68. package/node_modules/{@herbertgao → @tifan}/pi-rename/src/index.ts +4 -16
  69. package/node_modules/{@herbertgao → @tifan}/pi-rename/src/models.ts +1 -6
  70. package/node_modules/{@herbertgao → @tifan}/pi-titlebar-spinner/README.md +2 -4
  71. package/node_modules/{@herbertgao → @tifan}/pi-titlebar-spinner/package.json +5 -15
  72. package/node_modules/pi-lens/CHANGELOG.md +96 -1
  73. package/node_modules/pi-lens/dist/clients/actionable-warnings-logger.js +2 -1
  74. package/node_modules/pi-lens/dist/clients/actionable-warnings.js +14 -5
  75. package/node_modules/pi-lens/dist/clients/advisory-provenance.js +48 -18
  76. package/node_modules/pi-lens/dist/clients/ast-grep-client.js +1 -3
  77. package/node_modules/pi-lens/dist/clients/atomic-write-staging.js +16 -4
  78. package/node_modules/pi-lens/dist/clients/bash-file-access.js +3 -1
  79. package/node_modules/pi-lens/dist/clients/biome-client.js +1 -3
  80. package/node_modules/pi-lens/dist/clients/blocker-freshness.js +21 -8
  81. package/node_modules/pi-lens/dist/clients/bounded-cache.js +24 -8
  82. package/node_modules/pi-lens/dist/clients/bounded-pid-file-lock.js +4 -3
  83. package/node_modules/pi-lens/dist/clients/cache-manager.js +6 -7
  84. package/node_modules/pi-lens/dist/clients/cache-observability.js +461 -66
  85. package/node_modules/pi-lens/dist/clients/call-graph.js +238 -63
  86. package/node_modules/pi-lens/dist/clients/codebase-model.js +13 -5
  87. package/node_modules/pi-lens/dist/clients/complexity-client.js +1 -3
  88. package/node_modules/pi-lens/dist/clients/dead-code-client.js +19 -8
  89. package/node_modules/pi-lens/dist/clients/dead-code-logger.js +1 -2
  90. package/node_modules/pi-lens/dist/clients/deadline-utils.js +3 -1
  91. package/node_modules/pi-lens/dist/clients/debug-heap.js +8 -1
  92. package/node_modules/pi-lens/dist/clients/degradation-ledger.js +1 -1
  93. package/node_modules/pi-lens/dist/clients/dependency-checker.js +11 -7
  94. package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +39 -2
  95. package/node_modules/pi-lens/dist/clients/diagnostic-line-freshness.js +5 -1
  96. package/node_modules/pi-lens/dist/clients/dispatch/auxiliary-lsp.js +2 -3
  97. package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +13 -1
  98. package/node_modules/pi-lens/dist/clients/dispatch/facts/function-facts.js +3 -1
  99. package/node_modules/pi-lens/dist/clients/dispatch/facts/import-facts.js +2 -1
  100. package/node_modules/pi-lens/dist/clients/dispatch/facts/tree-sitter-facts.js +1 -1
  101. package/node_modules/pi-lens/dist/clients/dispatch/integration.js +9 -4
  102. package/node_modules/pi-lens/dist/clients/dispatch/rules/error-swallowing.js +3 -1
  103. package/node_modules/pi-lens/dist/clients/dispatch/rules/pass-through-wrappers.js +6 -2
  104. package/node_modules/pi-lens/dist/clients/dispatch/rules/unsafe-boundary.js +31 -7
  105. package/node_modules/pi-lens/dist/clients/dispatch/runners/actionlint.js +5 -2
  106. package/node_modules/pi-lens/dist/clients/dispatch/runners/biome-check.js +10 -14
  107. package/node_modules/pi-lens/dist/clients/dispatch/runners/cpp-check.js +5 -1
  108. package/node_modules/pi-lens/dist/clients/dispatch/runners/dotnet-build.js +1 -1
  109. package/node_modules/pi-lens/dist/clients/dispatch/runners/elixir-check.js +3 -1
  110. package/node_modules/pi-lens/dist/clients/dispatch/runners/eslint.js +25 -6
  111. package/node_modules/pi-lens/dist/clients/dispatch/runners/fish-indent.js +1 -1
  112. package/node_modules/pi-lens/dist/clients/dispatch/runners/gleam-check.js +1 -1
  113. package/node_modules/pi-lens/dist/clients/dispatch/runners/golangci-lint.js +3 -1
  114. package/node_modules/pi-lens/dist/clients/dispatch/runners/hadolint.js +13 -8
  115. package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-lint.js +4 -1
  116. package/node_modules/pi-lens/dist/clients/dispatch/runners/htmlhint.js +25 -10
  117. package/node_modules/pi-lens/dist/clients/dispatch/runners/javac.js +1 -1
  118. package/node_modules/pi-lens/dist/clients/dispatch/runners/ktlint.js +1 -1
  119. package/node_modules/pi-lens/dist/clients/dispatch/runners/lsp.js +1 -1
  120. package/node_modules/pi-lens/dist/clients/dispatch/runners/markdownlint.js +28 -4
  121. package/node_modules/pi-lens/dist/clients/dispatch/runners/mypy.js +6 -8
  122. package/node_modules/pi-lens/dist/clients/dispatch/runners/oxlint.js +212 -11
  123. package/node_modules/pi-lens/dist/clients/dispatch/runners/php-lint.js +1 -1
  124. package/node_modules/pi-lens/dist/clients/dispatch/runners/phpstan.js +8 -4
  125. package/node_modules/pi-lens/dist/clients/dispatch/runners/psscriptanalyzer.js +10 -6
  126. package/node_modules/pi-lens/dist/clients/dispatch/runners/pyright.js +23 -14
  127. package/node_modules/pi-lens/dist/clients/dispatch/runners/rust-clippy.js +1 -1
  128. package/node_modules/pi-lens/dist/clients/dispatch/runners/shellcheck.js +7 -9
  129. package/node_modules/pi-lens/dist/clients/dispatch/runners/shfmt.js +5 -2
  130. package/node_modules/pi-lens/dist/clients/dispatch/runners/sqlfluff.js +7 -7
  131. package/node_modules/pi-lens/dist/clients/dispatch/runners/stylelint.js +6 -8
  132. package/node_modules/pi-lens/dist/clients/dispatch/runners/terragrunt.js +13 -8
  133. package/node_modules/pi-lens/dist/clients/dispatch/runners/tflint.js +13 -8
  134. package/node_modules/pi-lens/dist/clients/dispatch/runners/tree-sitter.js +17 -3
  135. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +7 -1
  136. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +24 -1
  137. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/tool-failure.js +35 -0
  138. package/node_modules/pi-lens/dist/clients/dispatch/runners/yaml-rule-parser.js +1 -3
  139. package/node_modules/pi-lens/dist/clients/dispatch/runners/yamllint.js +6 -8
  140. package/node_modules/pi-lens/dist/clients/dispatch/runners/zig-check.js +1 -1
  141. package/node_modules/pi-lens/dist/clients/dispatch/suppress-writer.js +2 -1
  142. package/node_modules/pi-lens/dist/clients/dispatch/types.js +6 -1
  143. package/node_modules/pi-lens/dist/clients/dispatch/utils/lsp-diagnostics.js +6 -2
  144. package/node_modules/pi-lens/dist/clients/extension-log.js +5 -3
  145. package/node_modules/pi-lens/dist/clients/feature-hints.js +8 -1
  146. package/node_modules/pi-lens/dist/clients/file-kinds.js +34 -129
  147. package/node_modules/pi-lens/dist/clients/file-utils.js +17 -1
  148. package/node_modules/pi-lens/dist/clients/finding-delivery-gate.js +57 -2
  149. package/node_modules/pi-lens/dist/clients/formatters.js +144 -27
  150. package/node_modules/pi-lens/dist/clients/freshness.js +38 -0
  151. package/node_modules/pi-lens/dist/clients/git-guard.js +43 -13
  152. package/node_modules/pi-lens/dist/clients/go-client.js +1 -3
  153. package/node_modules/pi-lens/dist/clients/grammar-source.js +1 -1
  154. package/node_modules/pi-lens/dist/clients/gzip-stage-write.js +30 -4
  155. package/node_modules/pi-lens/dist/clients/host-edit-normalize.js +1 -3
  156. package/node_modules/pi-lens/dist/clients/install-diagnostics.js +4 -2
  157. package/node_modules/pi-lens/dist/clients/installer/index.js +86 -77
  158. package/node_modules/pi-lens/dist/clients/instance-reaper.js +5 -2
  159. package/node_modules/pi-lens/dist/clients/instance-registry.js +4 -2
  160. package/node_modules/pi-lens/dist/clients/jscpd-client.js +6 -1
  161. package/node_modules/pi-lens/dist/clients/knip-client.js +29 -15
  162. package/node_modules/pi-lens/dist/clients/language-profile.js +4 -1
  163. package/node_modules/pi-lens/dist/clients/latency-logger.js +13 -2
  164. package/node_modules/pi-lens/dist/clients/lens-config.js +1 -1
  165. package/node_modules/pi-lens/dist/clients/lens-map.js +8 -3
  166. package/node_modules/pi-lens/dist/clients/live-bus-emitter.js +1 -1
  167. package/node_modules/pi-lens/dist/clients/lsp/config.js +4 -6
  168. package/node_modules/pi-lens/dist/clients/lsp/edits.js +119 -32
  169. package/node_modules/pi-lens/dist/clients/lsp/index.js +94 -35
  170. package/node_modules/pi-lens/dist/clients/lsp/inferred-project.js +2 -1
  171. package/node_modules/pi-lens/dist/clients/lsp/jvm-runtime.js +4 -1
  172. package/node_modules/pi-lens/dist/clients/lsp/launch.js +11 -3
  173. package/node_modules/pi-lens/dist/clients/lsp/pending-aux-coverage.js +152 -0
  174. package/node_modules/pi-lens/dist/clients/lsp/server.js +19 -7
  175. package/node_modules/pi-lens/dist/clients/lsp/tsserver-sync.js +10 -2
  176. package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-cache.js +9 -4
  177. package/node_modules/pi-lens/dist/clients/lsp-document-symbols.js +1 -3
  178. package/node_modules/pi-lens/dist/clients/lsp-mutation.js +10 -20
  179. package/node_modules/pi-lens/dist/clients/mcp/host-shim.js +1 -1
  180. package/node_modules/pi-lens/dist/clients/memory-sampler.js +73 -7
  181. package/node_modules/pi-lens/dist/clients/metrics-client.js +1 -3
  182. package/node_modules/pi-lens/dist/clients/middle-man-analysis.js +8 -3
  183. package/node_modules/pi-lens/dist/clients/module-report-lsp.js +7 -1
  184. package/node_modules/pi-lens/dist/clients/module-report.js +14 -17
  185. package/node_modules/pi-lens/dist/clients/ndjson-logger.js +3 -5
  186. package/node_modules/pi-lens/dist/clients/opaque-mutation-scan.js +220 -0
  187. package/node_modules/pi-lens/dist/clients/package-manager.js +6 -1
  188. package/node_modules/pi-lens/dist/clients/pipeline.js +57 -9
  189. package/node_modules/pi-lens/dist/clients/project-conventions.js +2 -8
  190. package/node_modules/pi-lens/dist/clients/project-diagnostics/cache.js +10 -7
  191. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +2 -1
  192. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +3 -1
  193. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +13 -9
  194. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/trivy.js +3 -1
  195. package/node_modules/pi-lens/dist/clients/project-diagnostics/scanner.js +5 -2
  196. package/node_modules/pi-lens/dist/clients/project-lens-config.js +12 -5
  197. package/node_modules/pi-lens/dist/clients/project-snapshot-fingerprint.js +48 -0
  198. package/node_modules/pi-lens/dist/clients/project-snapshot-persist-worker.js +15 -1
  199. package/node_modules/pi-lens/dist/clients/project-snapshot.js +472 -66
  200. package/node_modules/pi-lens/dist/clients/read-expansion.js +12 -2
  201. package/node_modules/pi-lens/dist/clients/read-guard-logger.js +5 -4
  202. package/node_modules/pi-lens/dist/clients/read-guard-tool-lines.js +5 -2
  203. package/node_modules/pi-lens/dist/clients/read-guard.js +1 -1
  204. package/node_modules/pi-lens/dist/clients/resource-sampler.js +1 -1
  205. package/node_modules/pi-lens/dist/clients/reverse-deps.js +6 -5
  206. package/node_modules/pi-lens/dist/clients/review-graph/builder.js +42 -17
  207. package/node_modules/pi-lens/dist/clients/review-graph/git-identity.js +8 -2
  208. package/node_modules/pi-lens/dist/clients/review-graph/import-resolvers.js +10 -1
  209. package/node_modules/pi-lens/dist/clients/review-graph/query.js +2 -1
  210. package/node_modules/pi-lens/dist/clients/review-graph/tsconfig-paths.js +4 -2
  211. package/node_modules/pi-lens/dist/clients/review-graph/workspace-modules.js +2 -2
  212. package/node_modules/pi-lens/dist/clients/ruff-client.js +6 -5
  213. package/node_modules/pi-lens/dist/clients/runtime-agent-end.js +63 -31
  214. package/node_modules/pi-lens/dist/clients/runtime-context.js +12 -4
  215. package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +83 -4
  216. package/node_modules/pi-lens/dist/clients/runtime-session.js +14 -0
  217. package/node_modules/pi-lens/dist/clients/runtime-tool-call.js +59 -3
  218. package/node_modules/pi-lens/dist/clients/runtime-tool-result.js +148 -34
  219. package/node_modules/pi-lens/dist/clients/runtime-turn.js +147 -6
  220. package/node_modules/pi-lens/dist/clients/rust-client.js +1 -3
  221. package/node_modules/pi-lens/dist/clients/safe-spawn.js +150 -11
  222. package/node_modules/pi-lens/dist/clients/security-scan-client.js +1 -3
  223. package/node_modules/pi-lens/dist/clients/session-summary.js +3 -1
  224. package/node_modules/pi-lens/dist/clients/sg-runner.js +1 -3
  225. package/node_modules/pi-lens/dist/clients/source-filter.js +10 -6
  226. package/node_modules/pi-lens/dist/clients/source-walker.js +1 -1
  227. package/node_modules/pi-lens/dist/clients/spawn-timeout-cooldown.js +96 -0
  228. package/node_modules/pi-lens/dist/clients/startup-scan.js +4 -1
  229. package/node_modules/pi-lens/dist/clients/tool-definition.js +7 -0
  230. package/node_modules/pi-lens/dist/clients/tool-policy.js +26 -11
  231. package/node_modules/pi-lens/dist/clients/tool-render.js +2 -1
  232. package/node_modules/pi-lens/dist/clients/tree-sitter-client.js +10 -4
  233. package/node_modules/pi-lens/dist/clients/tree-sitter-logger.js +2 -2
  234. package/node_modules/pi-lens/dist/clients/tree-sitter-symbol-extractor.js +12 -5
  235. package/node_modules/pi-lens/dist/clients/warm-attach.js +12 -5
  236. package/node_modules/pi-lens/dist/clients/widget-state.js +27 -11
  237. package/node_modules/pi-lens/dist/clients/word-index.js +3 -1
  238. package/node_modules/pi-lens/dist/clients/workspace-topology.js +8 -2
  239. package/node_modules/pi-lens/dist/clients/zizmor-config.js +9 -1
  240. package/node_modules/pi-lens/dist/i18n.js +13 -5
  241. package/node_modules/pi-lens/dist/index.js +10797 -8627
  242. package/node_modules/pi-lens/dist/mcp/server.js +3 -1
  243. package/node_modules/pi-lens/dist/tools/ast-grep-replace.js +68 -12
  244. package/node_modules/pi-lens/dist/tools/lens-diagnostic-mark.js +21 -7
  245. package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +164 -35
  246. package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +24 -7
  247. package/node_modules/pi-lens/dist/tools/lsp-navigation.js +3 -1
  248. package/node_modules/pi-lens/dist/tools/module-report.js +1 -1
  249. package/node_modules/pi-lens/dist/tools/project-report.js +1 -1
  250. package/node_modules/pi-lens/dist/tools/symbol-search.js +5 -2
  251. package/node_modules/pi-lens/docs/durable-store-audit-1202.md +1 -1
  252. package/node_modules/pi-lens/docs/servercapabilities.md +1 -1
  253. package/node_modules/pi-lens/package.json +160 -156
  254. package/node_modules/pi-lens/rules/typos/_typos.toml +2 -2
  255. package/node_modules/pi-lens/scripts/analyze-pi-lens-logs.mjs +31 -13
  256. package/node_modules/pi-lens/scripts/download-grammars.js +9 -3
  257. package/node_modules/pi-lens/scripts/rpc-load-check.mjs +30 -9
  258. package/node_modules/pi-mcp-adapter/CHANGELOG.md +34 -0
  259. package/node_modules/pi-mcp-adapter/README.md +42 -13
  260. package/node_modules/pi-mcp-adapter/commands.ts +4 -2
  261. package/node_modules/pi-mcp-adapter/config.ts +35 -5
  262. package/node_modules/pi-mcp-adapter/direct-tools.ts +103 -92
  263. package/node_modules/pi-mcp-adapter/dist/agent-dir.d.ts +10 -0
  264. package/node_modules/pi-mcp-adapter/dist/agent-dir.js +63 -0
  265. package/node_modules/pi-mcp-adapter/dist/agent-dir.js.map +1 -0
  266. package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.d.ts +8 -0
  267. package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.js +356 -0
  268. package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.js.map +1 -0
  269. package/node_modules/pi-mcp-adapter/dist/config.d.ts +123 -0
  270. package/node_modules/pi-mcp-adapter/dist/config.js +1077 -0
  271. package/node_modules/pi-mcp-adapter/dist/config.js.map +1 -0
  272. package/node_modules/pi-mcp-adapter/dist/metadata-cache.d.ts +19 -0
  273. package/node_modules/pi-mcp-adapter/dist/metadata-cache.js +319 -0
  274. package/node_modules/pi-mcp-adapter/dist/metadata-cache.js.map +1 -0
  275. package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.d.ts +2 -0
  276. package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.js +156 -0
  277. package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.js.map +1 -0
  278. package/node_modules/pi-mcp-adapter/dist/resource-tools.d.ts +1 -0
  279. package/node_modules/pi-mcp-adapter/dist/resource-tools.js +15 -0
  280. package/node_modules/pi-mcp-adapter/dist/resource-tools.js.map +1 -0
  281. package/node_modules/pi-mcp-adapter/dist/types.d.ts +564 -0
  282. package/node_modules/pi-mcp-adapter/dist/types.js +287 -0
  283. package/node_modules/pi-mcp-adapter/dist/types.js.map +1 -0
  284. package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.d.ts +6 -0
  285. package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.js +37 -0
  286. package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.js.map +1 -0
  287. package/node_modules/pi-mcp-adapter/dist/ui-stream-types.d.ts +104 -0
  288. package/node_modules/pi-mcp-adapter/dist/ui-stream-types.js +59 -0
  289. package/node_modules/pi-mcp-adapter/dist/ui-stream-types.js.map +1 -0
  290. package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.d.ts +4 -0
  291. package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.js +27 -0
  292. package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.js.map +1 -0
  293. package/node_modules/pi-mcp-adapter/dist/utils.d.ts +32 -0
  294. package/node_modules/pi-mcp-adapter/dist/utils.js +338 -0
  295. package/node_modules/pi-mcp-adapter/dist/utils.js.map +1 -0
  296. package/node_modules/pi-mcp-adapter/failure-backoff.ts +23 -0
  297. package/node_modules/pi-mcp-adapter/index.ts +204 -82
  298. package/node_modules/pi-mcp-adapter/init.ts +36 -29
  299. package/node_modules/pi-mcp-adapter/lifecycle.ts +16 -8
  300. package/node_modules/pi-mcp-adapter/mcp-code.ts +2 -0
  301. package/node_modules/pi-mcp-adapter/mcp-oauth-provider.ts +66 -16
  302. package/node_modules/pi-mcp-adapter/mcp-output-guard.ts +95 -7
  303. package/node_modules/pi-mcp-adapter/mcp-probe.ts +18 -4
  304. package/node_modules/pi-mcp-adapter/mcp-references.ts +368 -0
  305. package/node_modules/pi-mcp-adapter/mcp-status.ts +8 -19
  306. package/node_modules/pi-mcp-adapter/metadata-cache.ts +20 -12
  307. package/node_modules/pi-mcp-adapter/namespace-tools.ts +276 -0
  308. package/node_modules/pi-mcp-adapter/package.json +24 -6
  309. package/node_modules/pi-mcp-adapter/proxy-modes.ts +66 -10
  310. package/node_modules/pi-mcp-adapter/search-ranking.ts +2 -0
  311. package/node_modules/pi-mcp-adapter/server-manager.ts +63 -12
  312. package/node_modules/pi-mcp-adapter/state.ts +1 -3
  313. package/node_modules/pi-mcp-adapter/tool-result-renderer.ts +16 -2
  314. package/node_modules/pi-mcp-adapter/types.ts +48 -1
  315. package/node_modules/pi-mcp-adapter/ui-server.ts +3 -19
  316. package/node_modules/pi-mcp-adapter/ui-session.ts +2 -1
  317. package/node_modules/pi-mcp-adapter/utils.ts +21 -19
  318. package/node_modules/pi-web-access/CHANGELOG.md +26 -0
  319. package/node_modules/pi-web-access/README.md +71 -14
  320. package/node_modules/pi-web-access/chrome-cookies.ts +115 -35
  321. package/node_modules/pi-web-access/credential-source.ts +6 -2
  322. package/node_modules/pi-web-access/curator-page.ts +5 -3
  323. package/node_modules/pi-web-access/curator-server.ts +2 -1
  324. package/node_modules/pi-web-access/extract.ts +89 -9
  325. package/node_modules/pi-web-access/fetch-params.ts +13 -0
  326. package/node_modules/pi-web-access/gemini-adc.ts +298 -0
  327. package/node_modules/pi-web-access/gemini-api.ts +59 -15
  328. package/node_modules/pi-web-access/gemini-search.ts +58 -18
  329. package/node_modules/pi-web-access/gemini-url-context.ts +3 -2
  330. package/node_modules/pi-web-access/gemini-web-config.ts +57 -7
  331. package/node_modules/pi-web-access/gemini-web.ts +9 -3
  332. package/node_modules/pi-web-access/github-api.ts +5 -4
  333. package/node_modules/pi-web-access/github-issue-pr.ts +700 -0
  334. package/node_modules/pi-web-access/index.ts +403 -297
  335. package/node_modules/pi-web-access/kimi-search.ts +234 -0
  336. package/node_modules/pi-web-access/openai-search.ts +118 -21
  337. package/node_modules/pi-web-access/package.json +3 -2
  338. package/node_modules/pi-web-access/ssrf-protection.ts +4 -1
  339. package/node_modules/pi-web-access/utils.ts +307 -1
  340. package/node_modules/pi-web-access/youtube-extract.ts +2 -2
  341. package/package.json +40 -37
  342. package/node_modules/@herbertgao/pi-copy-response/CHANGELOG.md +0 -49
  343. package/node_modules/@herbertgao/pi-copy-response/LICENSE +0 -22
  344. package/node_modules/@herbertgao/pi-handoff/CHANGELOG.md +0 -83
  345. package/node_modules/@herbertgao/pi-handoff/LICENSE +0 -22
  346. package/node_modules/@herbertgao/pi-handoff/package.json +0 -60
  347. package/node_modules/@herbertgao/pi-inline-skills/CHANGELOG.md +0 -57
  348. package/node_modules/@herbertgao/pi-mermaid-open/CHANGELOG.md +0 -39
  349. package/node_modules/@herbertgao/pi-mermaid-open/LICENSE +0 -22
  350. package/node_modules/@herbertgao/pi-preferred-thinking/CHANGELOG.md +0 -63
  351. package/node_modules/@herbertgao/pi-preferred-thinking/LICENSE +0 -22
  352. package/node_modules/@herbertgao/pi-recap/CHANGELOG.md +0 -101
  353. package/node_modules/@herbertgao/pi-recap/LICENSE +0 -22
  354. package/node_modules/@herbertgao/pi-recap/package.json +0 -55
  355. package/node_modules/@herbertgao/pi-rename/CHANGELOG.md +0 -49
  356. package/node_modules/@herbertgao/pi-rename/LICENSE +0 -22
  357. package/node_modules/@herbertgao/pi-rename/package.json +0 -63
  358. package/node_modules/@herbertgao/pi-titlebar-spinner/CHANGELOG.md +0 -25
  359. package/node_modules/@herbertgao/pi-titlebar-spinner/LICENSE +0 -22
  360. /package/node_modules/{@herbertgao → @tifan}/pi-copy-response/src/index.ts +0 -0
  361. /package/node_modules/{@herbertgao → @tifan}/pi-handoff/src/complete-text.ts +0 -0
  362. /package/node_modules/{@herbertgao → @tifan}/pi-handoff/src/session-query.ts +0 -0
  363. /package/node_modules/{@herbertgao → @tifan}/pi-inline-skills/src/index.ts +0 -0
  364. /package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/herdr-plugin/herdr-plugin.toml +0 -0
  365. /package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/herdr-plugin/viewer.mjs +0 -0
  366. /package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/src/index.ts +0 -0
  367. /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/index.ts +0 -0
  368. /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/model-picker.ts +0 -0
  369. /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/sanitize.ts +0 -0
  370. /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/tui.ts +0 -0
  371. /package/node_modules/{@herbertgao → @tifan}/pi-rename/src/model-picker.ts +0 -0
  372. /package/node_modules/{@herbertgao → @tifan}/pi-rename/src/naming.ts +0 -0
  373. /package/node_modules/{@herbertgao → @tifan}/pi-rename/src/sanitize.ts +0 -0
  374. /package/node_modules/{@herbertgao → @tifan}/pi-titlebar-spinner/src/index.ts +0 -0
@@ -7,7 +7,7 @@
7
7
  */
8
8
  import * as path from "node:path";
9
9
  import { Type } from "../clients/deps/typebox.js";
10
- import { symbolSearch } from "../clients/lens-engine.js";
10
+ import { symbolSearch, } from "../clients/lens-engine.js";
11
11
  import { baseName, compactRenderResult } from "./render-compact.js";
12
12
  /**
13
13
  * Machine-actionable follow-up hint (#771) — mirrors ast-grep-search.ts's
@@ -136,7 +136,10 @@ export function createSymbolSearchTool(getProjectRoot) {
136
136
  };
137
137
  return {
138
138
  content: [
139
- { type: "text", text: `${lines.join("\n")}\n\n${JSON.stringify(payload)}` },
139
+ {
140
+ type: "text",
141
+ text: `${lines.join("\n")}\n\n${JSON.stringify(payload)}`,
142
+ },
140
143
  ],
141
144
  details: {
142
145
  available: true,
@@ -22,7 +22,7 @@ audit classifies stores reachable by extension, MCP, CLI, and subagent processes
22
22
  | Diagnostic dispositions — `<project>/cache/diagnostic-dispositions.json` | extension, MCP, CLI tools, subagents | read-modify-write behavior gate | (c) possible, harmful | **fixed here:** exclusive pid lock, in-lock disk re-read, and per-anchor merge refuse stale whole-file promotion. |
23
23
  | Recent touches — `<project>/recent-touches.json` | every extension/subagent publisher | read-append-overwrite bounded attribution ring | (b) possible, benign | explicitly best-effort nudge attribution; lost entries do not gate edits/checks and later touches replenish it. Accepted benign. |
24
24
  | Instance registry — `<global>/instances.json` | every host/MCP/subagent process and reaper | read-modify-overwrite observability registry | (b) possible, benign | explicitly best-effort. Backstop orphan reaping intentionally kills untracked managed processes on dead-parent confirmation; missing registry entries allow this (intentional, #1267-adjacent; no fix needed). |
25
- | Project snapshot — `<project>/cache/project-snapshot.json.gz` + `.meta.json` | extension/MCP/CLI builders, subagents | monotonic derived snapshot | (a) impossible | durable project sequence/source identity and generation-gated staged promotion; body embeds its seq so mismatched metadata is rejected. |
25
+ | Project snapshot — `<project>/cache/project-snapshot.json.gz` + `.meta.json` | extension/MCP/CLI builders, subagents | monotonic derived snapshot | (a) impossible | durable project sequence/source identity, one active plus latest queued request per root, worker-earned semantic fingerprint dedupe, and generation-gated staged promotion; body embeds its seq so mismatched metadata is rejected. |
26
26
  | Review graph + checkpoint — `<project>/cache/review-graph.json.gz`, `review-graph.checkpoint.json.gz` | extension/MCP/CLI builders, subagents | overwrite-only derived graph | (a) impossible | source signature/project-seq validation plus staged, generation-gated promotion; stale content is rejected on load. |
27
27
  | Probe cache — `<global>/probe-cache.json` | every installer/prober | read-modify-write tool availability | (a) impossible | existing bounded cross-process lock + in-lock re-read/change merge (#1263). |
28
28
  | Stop-hook status — OS temp `pi-lens-turn-end-*.json` | concurrent CLI Stop hooks | read-modify-overwrite counters | (b) possible, benign | atomic publication; explicitly bounded best-effort telemetry. Accepted benign. |
@@ -6,7 +6,7 @@ server's `initialize` handshake. Generated by `node scripts/server-capabilities.
6
6
  absent on the generating host are listed under *Unavailable* — run in a
7
7
  provisioned environment (the nightly) to capture those rows.
8
8
 
9
- _Last generated: 2026-08-20 on linux; 30 servers captured, 14 unavailable._
9
+ _Last generated: 2026-08-21 on linux; 30 servers captured, 14 unavailable._
10
10
 
11
11
  ## Diagnostic mode + navigation/edit operations
12
12
 
@@ -1,158 +1,162 @@
1
1
  {
2
- "name": "pi-lens",
3
- "version": "4.1.1",
4
- "type": "module",
5
- "description": "Real-time code feedback for pi — LSP, linters, formatters, type-checking, structural analysis & booboo",
6
- "repository": {
7
- "type": "git",
8
- "url": "git+https://github.com/apmantza/pi-lens.git"
9
- },
10
- "main": "./dist/index.js",
11
- "bin": {
12
- "pi-lens": "dist/mcp/cli.js",
13
- "pi-lens-mcp": "dist/mcp/server.js",
14
- "pi-lens-analyze": "dist/mcp/analyze-cli.js"
15
- },
16
- "scripts": {
17
- "build": "tsc --project tsconfig.build.json",
18
- "build:dist": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && npx --yes -p typescript@7.0.2 tsc --project tsconfig.dist.json --noCheck && npm run bundle:dist",
19
- "bundle:dist": "node scripts/bundle-dist.mjs",
20
- "prepare": "npm run build:dist && node scripts/download-grammars.js --core --dest grammars && node scripts/setup-git-hooks.mjs && node scripts/warm-loader-cache.mjs",
21
- "lint": "tsc --project tsconfig.json",
22
- "watch": "tsc --watch",
23
- "test": "node scripts/with-test-lock.mjs -- vitest run",
24
- "test:unit": "node scripts/with-test-lock.mjs -- vitest run",
25
- "test:integration": "node scripts/with-test-lock.mjs -- vitest run tests/index-integration.test.ts tests/clients/lsp/integration.test.ts",
26
- "test:watch": "vitest",
27
- "check": "node scripts/check-extensions.mjs",
28
- "selftest:install": "node scripts/install-selftest.mjs",
29
- "check:lockfile": "node scripts/check-lockfile-sync.mjs",
30
- "check:grammars": "node scripts/check-grammar-provenance.mjs",
31
- "check:grammar-load": "node scripts/check-grammar-load.mjs",
32
- "audit:tree-sitter": "node scripts/audit-tree-sitter-rules.mjs",
33
- "audit:rule-catalog": "node scripts/validate-rule-catalog.mjs",
34
- "audit:astgrep-rule-pairs": "node scripts/audit-astgrep-rule-pairs.mjs",
35
- "astgrep:self-scan": "node scripts/run-astgrep-pi-lens.mjs",
36
- "astgrep:self-scan:update-baseline": "node scripts/run-astgrep-pi-lens.mjs --update-baseline",
37
- "audit:playground": "node scripts/playground-verify-rule.mjs",
38
- "bench:cascade-budget": "node scripts/bench-cascade-budget.mjs",
39
- "logs:smells": "node scripts/analyze-pi-lens-logs.mjs",
40
- "changelog:check": "node scripts/rollup-changelog.mjs --check",
41
- "changelog:release": "node scripts/changelog-release.mjs",
42
- "changelog:extract": "node scripts/changelog-extract.mjs",
43
- "release:backfill-notes": "node scripts/backfill-github-releases.mjs",
44
- "release:backfill-thanks": "node scripts/backfill-release-thanks.mjs",
45
- "docs:rule-catalogs": "node scripts/gen-rule-catalogs.mjs",
46
- "banner": "npx -y sharp-cli --input banner.svg --output banner.png resize 2200 620",
47
- "download-grammars": "node scripts/download-grammars.js",
48
- "harness:poc": "node scripts/run-harness.mjs cases/ts/pipeline-dispatch-poc",
49
- "harness:python-poc": "node scripts/run-harness.mjs cases/python/pipeline-dispatch-poc",
50
- "harness:ts-format-poc": "node scripts/run-harness.mjs cases/ts/format-default-poc",
51
- "harness:python-autofix-poc": "node scripts/run-harness.mjs cases/python/autofix-default-poc",
52
- "harness:go-poc": "node scripts/run-harness.mjs cases/go/pipeline-dispatch-poc"
53
- },
54
- "keywords": [
55
- "pi",
56
- "pi-extension",
57
- "pi-package",
58
- "linter",
59
- "biome",
60
- "ast-grep",
61
- "ruff",
62
- "typescript",
63
- "code-quality",
64
- "feedback",
65
- "type-coverage",
66
- "jscpd",
67
- "knip"
68
- ],
69
- "author": "Apostolos Mantzaris",
70
- "license": "MIT",
71
- "files": [
72
- "dist/",
73
- "docs/",
74
- "grammars/",
75
- "vendor/grammars/",
76
- "config/",
77
- "rules/",
78
- "skills/",
79
- "scripts/download-grammars.js",
80
- "scripts/grammars.lock.json",
81
- "scripts/analyze-pi-lens-logs.mjs",
82
- "scripts/install-selftest.mjs",
83
- "scripts/lib/host-provided-deps.mjs",
84
- "scripts/lib/warm-loader-cache.mjs",
85
- "scripts/warm-loader-cache.mjs",
86
- "scripts/rpc-load-check.mjs",
87
- "README.md",
88
- "CHANGELOG.md",
89
- "banner.svg",
90
- "banner.png"
91
- ],
92
- "dependencies": {
93
- "@ast-grep/cli": "^0.45.0",
94
- "@ast-grep/napi": "^0.45.0",
95
- "js-yaml": "^5.2.2",
96
- "minimatch": "^10.2.6",
97
- "pidusage": "^4.0.1",
98
- "vscode-jsonrpc": "^9.0.0"
99
- },
100
- "peerDependencies": {
101
- "@earendil-works/pi-coding-agent": "*",
102
- "@earendil-works/pi-tui": "^0.84.1",
103
- "typebox": "^1.0.0"
104
- },
105
- "peerDependenciesMeta": {
106
- "@earendil-works/pi-coding-agent": {
107
- "optional": true
108
- },
109
- "@earendil-works/pi-tui": {
110
- "optional": true
111
- },
112
- "typebox": {
113
- "optional": true
114
- }
115
- },
116
- "optionalDependencies": {
117
- "jiti": "^2.7.0",
118
- "web-tree-sitter": "0.25.10"
119
- },
120
- "devDependencies": {
121
- "@biomejs/biome": "^2.4.10",
122
- "@earendil-works/pi-coding-agent": "^0.84.1",
123
- "@earendil-works/pi-tui": "^0.84.1",
124
- "@types/node": "^26.0.0",
125
- "@types/pidusage": "^2.0.5",
126
- "@vitest/coverage-v8": "^4.1.5",
127
- "husky": "^9.1.7",
128
- "typebox": "^1.0.0",
129
- "typescript": "^7.0.2",
130
- "typescript-language-server": "^5.1.3",
131
- "vitest": "^4.1.1"
132
- },
133
- "pi": {
134
- "extensions": [
135
- "./dist/index.js"
136
- ],
137
- "skills": [
138
- "../../skills"
139
- ]
140
- },
141
- "knip": {
142
- "entry": [
143
- "index.ts"
144
- ],
145
- "project": [
146
- "**/*.ts",
147
- "!**/*.test.ts"
148
- ],
149
- "ignore": [
150
- "**/*.test.ts"
151
- ]
152
- },
153
- "allowScripts": {
154
- "@ast-grep/cli@0.45.1": true,
155
- "@google/genai@1.52.0": true,
156
- "protobufjs@7.6.5": true
157
- }
2
+ "name": "pi-lens",
3
+ "version": "4.1.2",
4
+ "type": "module",
5
+ "description": "Real-time code feedback for pi — LSP, linters, formatters, type-checking, structural analysis & booboo",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/apmantza/pi-lens.git"
9
+ },
10
+ "main": "./dist/index.js",
11
+ "bin": {
12
+ "pi-lens": "dist/mcp/cli.js",
13
+ "pi-lens-mcp": "dist/mcp/server.js",
14
+ "pi-lens-analyze": "dist/mcp/analyze-cli.js"
15
+ },
16
+ "scripts": {
17
+ "build": "tsc --project tsconfig.build.json",
18
+ "build:dist": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && npx --yes -p typescript@7.0.2 tsc --project tsconfig.dist.json --noCheck && npm run bundle:dist",
19
+ "bundle:dist": "node scripts/bundle-dist.mjs",
20
+ "prepare": "npm run build:dist && node scripts/download-grammars.js --core --dest grammars && node scripts/setup-git-hooks.mjs && node scripts/warm-loader-cache.mjs",
21
+ "lint": "tsc --project tsconfig.json",
22
+ "fmt": "oxfmt",
23
+ "fmt:check": "oxfmt --check",
24
+ "watch": "tsc --watch",
25
+ "test": "node scripts/with-test-lock.mjs -- vitest run",
26
+ "test:unit": "node scripts/with-test-lock.mjs -- vitest run",
27
+ "test:integration": "node scripts/with-test-lock.mjs -- vitest run tests/index-integration.test.ts tests/clients/lsp/integration.test.ts",
28
+ "test:watch": "vitest",
29
+ "check": "node scripts/check-extensions.mjs",
30
+ "selftest:install": "node scripts/install-selftest.mjs",
31
+ "check:lockfile": "node scripts/check-lockfile-sync.mjs",
32
+ "check:grammars": "node scripts/check-grammar-provenance.mjs",
33
+ "check:grammar-load": "node scripts/check-grammar-load.mjs",
34
+ "audit:tree-sitter": "node scripts/audit-tree-sitter-rules.mjs",
35
+ "audit:rule-catalog": "node scripts/validate-rule-catalog.mjs",
36
+ "audit:astgrep-rule-pairs": "node scripts/audit-astgrep-rule-pairs.mjs",
37
+ "astgrep:self-scan": "node scripts/run-astgrep-pi-lens.mjs",
38
+ "astgrep:self-scan:update-baseline": "node scripts/run-astgrep-pi-lens.mjs --update-baseline",
39
+ "audit:playground": "node scripts/playground-verify-rule.mjs",
40
+ "bench:cascade-budget": "node scripts/bench-cascade-budget.mjs",
41
+ "logs:smells": "node scripts/analyze-pi-lens-logs.mjs",
42
+ "changelog:check": "node scripts/rollup-changelog.mjs --check",
43
+ "changelog:release": "node scripts/changelog-release.mjs",
44
+ "changelog:extract": "node scripts/changelog-extract.mjs",
45
+ "release:backfill-notes": "node scripts/backfill-github-releases.mjs",
46
+ "release:backfill-thanks": "node scripts/backfill-release-thanks.mjs",
47
+ "docs:rule-catalogs": "node scripts/gen-rule-catalogs.mjs",
48
+ "banner": "npx -y sharp-cli --input banner.svg --output banner.png resize 2200 620",
49
+ "download-grammars": "node scripts/download-grammars.js",
50
+ "harness:poc": "node scripts/run-harness.mjs cases/ts/pipeline-dispatch-poc",
51
+ "harness:python-poc": "node scripts/run-harness.mjs cases/python/pipeline-dispatch-poc",
52
+ "harness:ts-format-poc": "node scripts/run-harness.mjs cases/ts/format-default-poc",
53
+ "harness:python-autofix-poc": "node scripts/run-harness.mjs cases/python/autofix-default-poc",
54
+ "harness:go-poc": "node scripts/run-harness.mjs cases/go/pipeline-dispatch-poc"
55
+ },
56
+ "keywords": [
57
+ "pi",
58
+ "pi-extension",
59
+ "pi-package",
60
+ "linter",
61
+ "biome",
62
+ "ast-grep",
63
+ "ruff",
64
+ "typescript",
65
+ "code-quality",
66
+ "feedback",
67
+ "type-coverage",
68
+ "jscpd",
69
+ "knip"
70
+ ],
71
+ "author": "Apostolos Mantzaris",
72
+ "license": "MIT",
73
+ "files": [
74
+ "dist/",
75
+ "docs/",
76
+ "grammars/",
77
+ "vendor/grammars/",
78
+ "config/",
79
+ "rules/",
80
+ "skills/",
81
+ "scripts/download-grammars.js",
82
+ "scripts/grammars.lock.json",
83
+ "scripts/analyze-pi-lens-logs.mjs",
84
+ "scripts/install-selftest.mjs",
85
+ "scripts/lib/host-provided-deps.mjs",
86
+ "scripts/lib/warm-loader-cache.mjs",
87
+ "scripts/warm-loader-cache.mjs",
88
+ "scripts/rpc-load-check.mjs",
89
+ "README.md",
90
+ "CHANGELOG.md",
91
+ "banner.svg",
92
+ "banner.png"
93
+ ],
94
+ "dependencies": {
95
+ "@ast-grep/cli": "^0.45.0",
96
+ "@ast-grep/napi": "^0.45.0",
97
+ "js-yaml": "^5.2.2",
98
+ "minimatch": "^10.2.6",
99
+ "pidusage": "^4.0.1",
100
+ "vscode-jsonrpc": "^9.0.0"
101
+ },
102
+ "peerDependencies": {
103
+ "@earendil-works/pi-coding-agent": "*",
104
+ "@earendil-works/pi-tui": "^0.84.1",
105
+ "typebox": "^1.0.0"
106
+ },
107
+ "peerDependenciesMeta": {
108
+ "@earendil-works/pi-coding-agent": {
109
+ "optional": true
110
+ },
111
+ "@earendil-works/pi-tui": {
112
+ "optional": true
113
+ },
114
+ "typebox": {
115
+ "optional": true
116
+ }
117
+ },
118
+ "optionalDependencies": {
119
+ "jiti": "^2.7.0",
120
+ "web-tree-sitter": "0.25.10"
121
+ },
122
+ "devDependencies": {
123
+ "@biomejs/biome": "^2.4.10",
124
+ "@earendil-works/pi-coding-agent": "^0.84.1",
125
+ "@earendil-works/pi-tui": "^0.84.1",
126
+ "@types/node": "^26.0.0",
127
+ "@types/pidusage": "^2.0.5",
128
+ "@vitest/coverage-v8": "^4.1.5",
129
+ "husky": "^9.1.7",
130
+ "oxfmt": "0.64.0",
131
+ "oxlint": "1.79.0",
132
+ "typebox": "^1.0.0",
133
+ "typescript": "^7.0.2",
134
+ "typescript-language-server": "^6.0.0",
135
+ "vitest": "^4.1.1"
136
+ },
137
+ "pi": {
138
+ "extensions": [
139
+ "./dist/index.js"
140
+ ],
141
+ "skills": [
142
+ "../../skills"
143
+ ]
144
+ },
145
+ "knip": {
146
+ "entry": [
147
+ "index.ts"
148
+ ],
149
+ "project": [
150
+ "**/*.ts",
151
+ "!**/*.test.ts"
152
+ ],
153
+ "ignore": [
154
+ "**/*.test.ts"
155
+ ]
156
+ },
157
+ "allowScripts": {
158
+ "@ast-grep/cli@0.45.1": true,
159
+ "@google/genai@1.52.0": true,
160
+ "protobufjs@7.6.5": true
161
+ }
158
162
  }
@@ -13,5 +13,5 @@
13
13
  # dictionary here; every entry must have a provenance comment.
14
14
 
15
15
  [default.extend-identifiers]
16
- dito = "dito" # #967 — real model/vendor namespace (provider-failover normalization prefix), not a misspelling of "ditto"
17
- unparseable = "unparseable" # #967 — valid English spelling ("un-parseable"), not a typo of "unparsable"
16
+ dito = "dito" # #967 — real model/vendor namespace (provider-failover normalization prefix), not a misspelling of "ditto"
17
+ unparseable = "unparseable" # #967 — valid English spelling ("un-parseable"), not a typo of "unparsable"
@@ -25,7 +25,11 @@ import { minimatch } from "minimatch";
25
25
  const DEFAULT_ROOT = path.join(os.homedir(), ".pi-lens");
26
26
  const DEFAULT_SINCE = "2d";
27
27
  const DEFAULT_LIMIT = 12;
28
- const DEFAULT_EXCLUDE_GLOBS = ["**/AppData/Local/Temp/claude/**", "**/heap-corpus*/**", "**/.plegma/work/**"];
28
+ const DEFAULT_EXCLUDE_GLOBS = [
29
+ "**/AppData/Local/Temp/claude/**",
30
+ "**/heap-corpus*/**",
31
+ "**/.plegma/work/**",
32
+ ];
29
33
 
30
34
  const args = parseArgs(process.argv.slice(2));
31
35
  const root = path.resolve(expandHome(args.root ?? DEFAULT_ROOT));
@@ -36,7 +40,11 @@ const outputJson = Boolean(args.json);
36
40
  const includeArchived = Boolean(args.archived);
37
41
  const excludeGlobs = [
38
42
  ...DEFAULT_EXCLUDE_GLOBS,
39
- ...(Array.isArray(args.exclude) ? args.exclude : args.exclude ? [args.exclude] : []),
43
+ ...(Array.isArray(args.exclude)
44
+ ? args.exclude
45
+ : args.exclude
46
+ ? [args.exclude]
47
+ : []),
40
48
  ];
41
49
 
42
50
  const thresholds = {
@@ -390,10 +398,7 @@ async function analyzeLatency(files, state) {
390
398
  // Vintage-attribution fallback: no `unconfirmedByReason` means
391
399
  // this line predates #1618 — the absent field IS the signal,
392
400
  // not proof every file here was really a budget timeout.
393
- ws.unconfirmedByReason.inc(
394
- "budget (pre-#1618 build)",
395
- timedOut,
396
- );
401
+ ws.unconfirmedByReason.inc("budget (pre-#1618 build)", timedOut);
397
402
  }
398
403
  state.smellTotals.inc("lsp-workspace-file-timeouts");
399
404
  pushTop(
@@ -708,7 +713,9 @@ async function analyzeActionableWarnings(files, state) {
708
713
  state.actionable.reports++;
709
714
  const summary = meta.summary ?? {};
710
715
  state.actionable.suppressed += Number(summary.suppressed ?? 0);
711
- state.actionable.autoFixEligible += Number(summary.autoFixEligible ?? 0);
716
+ state.actionable.autoFixEligible += Number(
717
+ summary.autoFixEligible ?? 0,
718
+ );
712
719
  }
713
720
  if (event === "advisory_injected") {
714
721
  state.actionable.injected++;
@@ -758,8 +765,12 @@ async function analyzeAstGrepTools(files, state) {
758
765
  tool,
759
766
  errorKind: entry.errorKind,
760
767
  durationMs: entry.durationMs,
761
- message: String(entry.errorRaw ?? "").replace(/\s+/g, " ").slice(0, 180),
762
- pattern: String(entry.pattern ?? "").replace(/\s+/g, " ").slice(0, 80),
768
+ message: String(entry.errorRaw ?? "")
769
+ .replace(/\s+/g, " ")
770
+ .slice(0, 180),
771
+ pattern: String(entry.pattern ?? "")
772
+ .replace(/\s+/g, " ")
773
+ .slice(0, 80),
763
774
  },
764
775
  limit * 3,
765
776
  (a, b) => String(b.ts).localeCompare(String(a.ts)),
@@ -773,7 +784,9 @@ async function analyzeAstGrepTools(files, state) {
773
784
  tool,
774
785
  durationMs: entry.durationMs,
775
786
  matchCount: entry.matchCount,
776
- pattern: String(entry.pattern ?? "").replace(/\s+/g, " ").slice(0, 80),
787
+ pattern: String(entry.pattern ?? "")
788
+ .replace(/\s+/g, " ")
789
+ .slice(0, 80),
777
790
  },
778
791
  limit * 3,
779
792
  byDuration,
@@ -810,7 +823,8 @@ async function analyzeWorklog(files, state) {
810
823
  if (entry.autoFixed) row.autoFixed += 1;
811
824
  state.worklog.byRuleModel.set(key, row);
812
825
  state.worklog.byModel.inc(model || "(unknown)");
813
- if (entry.autoFixed) state.worklog.byModelAutoFixed.inc(model || "(unknown)");
826
+ if (entry.autoFixed)
827
+ state.worklog.byModelAutoFixed.inc(model || "(unknown)");
814
828
  state.worklog.byProvider.inc(provider || "(unknown)");
815
829
  });
816
830
  }
@@ -842,7 +856,9 @@ function isExcludedEntry(entry) {
842
856
 
843
857
  function pathValues(value, key = "") {
844
858
  if (typeof value === "string") {
845
- return /(file|path|cwd|root|project)/i.test(key) ? [normalizePath(value)] : [];
859
+ return /(file|path|cwd|root|project)/i.test(key)
860
+ ? [normalizePath(value)]
861
+ : [];
846
862
  }
847
863
  if (!value || typeof value !== "object") return [];
848
864
  return Object.entries(value).flatMap(([childKey, child]) =>
@@ -1259,7 +1275,9 @@ function buildReport(state) {
1259
1275
  "lsp-workspace-file-timeouts",
1260
1276
  smellCount("lsp-workspace-file-timeouts"),
1261
1277
  `Full LSP sweeps produced an unconfirmed file (${ws.timedOutFilesTotal} files across ${ws.timedOutSweeps} sweeps)` +
1262
- (unconfirmedReasonBreakdown ? ` — by reason: ${unconfirmedReasonBreakdown}` : ""),
1278
+ (unconfirmedReasonBreakdown
1279
+ ? ` — by reason: ${unconfirmedReasonBreakdown}`
1280
+ : ""),
1263
1281
  ws.sweeps.slice(0, limit),
1264
1282
  );
1265
1283
 
@@ -59,11 +59,15 @@ export const VENDORED_GRAMMARS = {
59
59
  export const VENDORED_DIR = "vendor/grammars";
60
60
  /** The package a grammar's sidecar records (override or the global aggregator). */
61
61
  export function expectedPackage(filename, manifest) {
62
- return manifest.overrides?.[filename]?.package ?? SOURCE_OVERRIDES[filename]?.package ?? manifest.package;
62
+ return (manifest.overrides?.[filename]?.package ??
63
+ SOURCE_OVERRIDES[filename]?.package ??
64
+ manifest.package);
63
65
  }
64
66
  /** The version a grammar's sidecar records (override or the global aggregator). */
65
67
  export function expectedVersion(filename, manifest) {
66
- return manifest.overrides?.[filename]?.version ?? SOURCE_OVERRIDES[filename]?.version ?? manifest.version;
68
+ return (manifest.overrides?.[filename]?.version ??
69
+ SOURCE_OVERRIDES[filename]?.version ??
70
+ manifest.version);
67
71
  }
68
72
  export const GRAMMARS = [
69
73
  // Core typed languages
@@ -227,7 +231,9 @@ async function regenerateManifest() {
227
231
  package: PACKAGE,
228
232
  version: TREE_SITTER_WASMS_VERSION,
229
233
  grammars: sorted,
230
- ...(Object.keys(SOURCE_OVERRIDES).length ? { overrides: SOURCE_OVERRIDES } : {}),
234
+ ...(Object.keys(SOURCE_OVERRIDES).length
235
+ ? { overrides: SOURCE_OVERRIDES }
236
+ : {}),
231
237
  // Re-emitted from the map above, not copied from the old manifest: a
232
238
  // `--write-manifest` run on a tree-sitter-wasms bump must not silently
233
239
  // drop the committed grammars' provenance, which would leave the guard
@@ -22,7 +22,8 @@ const pi = spawn(piBin, ["--mode", "rpc", "--no-session"], {
22
22
  env: {
23
23
  ...process.env,
24
24
  // RPC needs a provider configured to start; get_commands never calls it.
25
- ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY || "sk-ant-dummy-rpc-load-check",
25
+ ANTHROPIC_API_KEY:
26
+ process.env.ANTHROPIC_API_KEY || "sk-ant-dummy-rpc-load-check",
26
27
  },
27
28
  });
28
29
 
@@ -33,15 +34,27 @@ const finish = (code, msg) => {
33
34
  if (done) return;
34
35
  done = true;
35
36
  if (msg) console.log(msg);
36
- try { pi.kill("SIGKILL"); } catch {}
37
+ try {
38
+ pi.kill("SIGKILL");
39
+ } catch {}
37
40
  process.exit(code);
38
41
  };
39
- const timer = setTimeout(() => finish(2, "TIMEOUT waiting for get_commands response"), 30000);
42
+ const timer = setTimeout(
43
+ () => finish(2, "TIMEOUT waiting for get_commands response"),
44
+ 30000,
45
+ );
40
46
 
41
47
  function handle(line) {
42
48
  let m;
43
- try { m = JSON.parse(line); } catch { return; }
44
- if ((m.type === "event" && m.event === "extension_error") || m.type === "extension_error") {
49
+ try {
50
+ m = JSON.parse(line);
51
+ } catch {
52
+ return;
53
+ }
54
+ if (
55
+ (m.type === "event" && m.event === "extension_error") ||
56
+ m.type === "extension_error"
57
+ ) {
45
58
  extErrors.push(m);
46
59
  console.log("extension_error:", JSON.stringify(m).slice(0, 300));
47
60
  }
@@ -54,9 +67,15 @@ function handle(line) {
54
67
  `total commands: ${cmds.length}; pi-lens commands: ${lens.map((c) => c.name).join(", ") || "(none)"}`,
55
68
  );
56
69
  clearTimeout(timer);
57
- if (extErrors.length) finish(1, `FAIL: ${extErrors.length} extension_error event(s)`);
58
- else if (!lens.length) finish(1, "FAIL: pi-lens registered no commands (did it load?)");
59
- else finish(0, `PASS: pi-lens loaded — ${lens.length} lens-* commands registered`);
70
+ if (extErrors.length)
71
+ finish(1, `FAIL: ${extErrors.length} extension_error event(s)`);
72
+ else if (!lens.length)
73
+ finish(1, "FAIL: pi-lens registered no commands (did it load?)");
74
+ else
75
+ finish(
76
+ 0,
77
+ `PASS: pi-lens loaded — ${lens.length} lens-* commands registered`,
78
+ );
60
79
  }
61
80
  }
62
81
 
@@ -76,5 +95,7 @@ pi.on("exit", (c) => {
76
95
 
77
96
  // Give extensions a moment to register, then request the command list.
78
97
  setTimeout(() => {
79
- try { pi.stdin.write(`${JSON.stringify({ type: "get_commands" })}\n`); } catch {}
98
+ try {
99
+ pi.stdin.write(`${JSON.stringify({ type: "get_commands" })}\n`);
100
+ } catch {}
80
101
  }, 2500);
@@ -7,6 +7,40 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.28.0] - 2026-08-26
11
+
12
+ ### Highlights
13
+ - MCP connections are less fragile when servers fail, recover, move slowly, or refresh their catalogs.
14
+ - Direct MCP tools are safer to expose, with stricter input checks and bounded result details when hosts opt in.
15
+ - Other Pi extensions can register MCP servers at runtime without sharing module state.
16
+ - Proxy calls now show live server progress in the interactive UI.
17
+ - Package installs and public helper imports are easier to use from downstream hosts.
18
+
19
+ ### Added
20
+ - Persistent metadata cache entries now honor server `ttlMs` hints without extending the default max age. Thanks to [@Seinra](https://github.com/Seinra) for #431.
21
+ - Proxy tool calls now forward server progress notifications to the interactive UI. Thanks to [@Seinra](https://github.com/Seinra) for PR #440 and for mapping the area in #431.
22
+ - Added a pure `mcp:` reference resolver API for consumers that validate adapter tool names from explicit config and cache inputs. Thanks to [@abdwhb-png](https://github.com/abdwhb-png) for PR #420.
23
+ - Direct tools can opt into strict advertised-schema validation with one-layer JSON recovery for object and array properties. Thanks to [@4ndr3wxh1ll](https://github.com/4ndr3wxh1ll) for PR #430.
24
+ - Direct tools can opt into guarded raw MCP result details, retaining bounded structured fields while summarizing oversized values.
25
+ - Embedding hosts can import the configuration loader and metadata cache helpers from public package subpaths, and can validate cached metadata against an explicit private process environment.
26
+
27
+ ### Fixed
28
+ - Runtime MCP registration now works across separately loaded Pi extensions through a versioned shared event contract. Thanks to [@fmoda3](https://github.com/fmoda3) for #443.
29
+ - Stdio MCP startup errors now identify a configured missing or non-directory `cwd` instead of blaming the executable. Thanks to [@SoyElf](https://github.com/SoyElf) for #442.
30
+ - Package installs with `--omit=dev` no longer run the public helper build during `prepare`; Git installs and package tarballs still include the built public exports. Thanks to [@KripaMishra](https://github.com/KripaMishra) for #441.
31
+ - MCP gateway descriptions now stay stable across metadata-only refreshes and keep live counts behind `mcp({})`. Thanks to [@voidfreud](https://github.com/voidfreud) for PR #432.
32
+ - Failed MCP servers in active backoff no longer remain advertised through cached direct tools, gateway list/search/describe results, or status tool counts. Thanks to [@voidfreud](https://github.com/voidfreud) for PR #434.
33
+ - OAuth token invalidation now preserves credentials replaced by another Pi process instead of letting a stale refresh delete newly authorized shared credentials. Thanks to [@mjlbach](https://github.com/mjlbach) for PR #422.
34
+ - Failed first-time MCP initialization no longer leaves the session permanently stuck with only `MCP not initialized`; the gateway keeps the failure reason and retries initialization on the next `mcp(...)` call. Thanks to [@hara-seihun](https://github.com/hara-seihun) for #428.
35
+ - HTTP 202 and unauthenticated HTTP 401 endpoint probes now report ambiguous endpoint shape instead of claiming the URL is not MCP. Thanks to [@jayshah5696](https://github.com/jayshah5696) for #415.
36
+ - Expanded `mcpScript` calls now show bounded submitted code. Thanks to [@DenisBalan](https://github.com/DenisBalan) for #413.
37
+ - Gateway parameters nested inside `args` now fail with top-level guidance instead of dispatching inconsistently. Thanks to [@voidfreud](https://github.com/voidfreud) for PR #417.
38
+ - Large direct-tool advisories now explain how to hide them with `settings.warnOnLargeDirectTools: false`. Thanks to [@afrodao2394](https://github.com/afrodao2394) for #412.
39
+ - Namespace proxy tools now use valid cached metadata, include resource-only proxy servers, clean up only prior namespace registrations, follow `MCP_DIRECT_TOOLS` selection, and skip ambiguous normalized server names. Thanks to [@abdwhb-png](https://github.com/abdwhb-png) for PR #414.
40
+ - Kept transient HTTP 503 connection failures as availability errors without multiplying gateway retries or misdiagnosing the endpoint as non-MCP. Thanks to [@elkaix](https://github.com/elkaix) for PR #411.
41
+ - Preserved cached keep-alive catalogs during transient 503 refresh outages while deferred recovery continues with bounded backoff.
42
+ - Startup connections that fail with a transient HTTP 503 now surface one quiet "temporarily unavailable; retry later" warning instead of the full hard failure; documented lifecycle behavior is unchanged, and keep-alive health checks continue their existing self-healing path. Thanks to [@elkaix](https://github.com/elkaix) for PR #424.
43
+
10
44
  ## [2.27.0] - 2026-08-20
11
45
 
12
46
  ### Highlights