@herbertgao/pi-extensions 2026.8.11 → 2026.8.13

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 (476) hide show
  1. package/README.md +23 -10
  2. package/{node_modules/@herbertgao/pi-mermaid-open/LICENSE → THIRD_PARTY_NOTICES.md} +19 -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/@luxusai/pi-hindsight/CHANGELOG.md +376 -0
  47. package/node_modules/@luxusai/pi-hindsight/README.md +92 -0
  48. package/node_modules/@luxusai/pi-hindsight/docs/adr/001-memory-lifecycle-and-scope.md +56 -0
  49. package/node_modules/@luxusai/pi-hindsight/docs/adr/002-explicit-routing-strategy-seam.md +169 -0
  50. package/node_modules/@luxusai/pi-hindsight/docs/adr/003-tui-memory-mode-vocabulary.md +107 -0
  51. package/node_modules/@luxusai/pi-hindsight/docs/adr/004-lifeos-dual-bank-design.md +89 -0
  52. package/node_modules/@luxusai/pi-hindsight/docs/adr/005-domain-banks-and-agent-first-surface.md +189 -0
  53. package/node_modules/@luxusai/pi-hindsight/docs/assets/logos/pi-hindsight-logo-dark.webp +0 -0
  54. package/node_modules/@luxusai/pi-hindsight/docs/assets/logos/pi-hindsight-logo-dark@2x.webp +0 -0
  55. package/node_modules/@luxusai/pi-hindsight/docs/coding-memory-evaluation.md +54 -0
  56. package/node_modules/@luxusai/pi-hindsight/docs/compatibility.md +75 -0
  57. package/node_modules/@luxusai/pi-hindsight/docs/hindsight-core-functions.md +300 -0
  58. package/node_modules/@luxusai/pi-hindsight/docs/mission-and-mental-model-quality.md +158 -0
  59. package/node_modules/@luxusai/pi-hindsight/docs/next-opt-out-design.md +164 -0
  60. package/node_modules/@luxusai/pi-hindsight/docs/risky-memory-modes.md +139 -0
  61. package/node_modules/@luxusai/pi-hindsight/docs/starter-mental-model-suggestions.md +74 -0
  62. package/node_modules/@luxusai/pi-hindsight/docs/surface-reference.md +261 -0
  63. package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-operations.ts +151 -0
  64. package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-selection.ts +18 -0
  65. package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-settings-presenter.ts +46 -0
  66. package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-templates.ts +383 -0
  67. package/node_modules/@luxusai/pi-hindsight/extensions/banks/banking.ts +240 -0
  68. package/node_modules/@luxusai/pi-hindsight/extensions/banks/knowledge-page-seed.ts +176 -0
  69. package/node_modules/@luxusai/pi-hindsight/extensions/banks/retain-strategies.ts +178 -0
  70. package/node_modules/@luxusai/pi-hindsight/extensions/client/client-retry.ts +41 -0
  71. package/node_modules/@luxusai/pi-hindsight/extensions/client/client.ts +386 -0
  72. package/node_modules/@luxusai/pi-hindsight/extensions/client/fetch-compat.ts +39 -0
  73. package/node_modules/@luxusai/pi-hindsight/extensions/client/timeout.ts +34 -0
  74. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-defaults.ts +140 -0
  75. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-editing-model.ts +61 -0
  76. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-editing-registry.ts +925 -0
  77. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-field-paths.ts +247 -0
  78. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-normalize.ts +547 -0
  79. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-writer.ts +480 -0
  80. package/node_modules/@luxusai/pi-hindsight/extensions/config/config.ts +182 -0
  81. package/node_modules/@luxusai/pi-hindsight/extensions/config/setup-gate.ts +86 -0
  82. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-execute.ts +1010 -0
  83. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-parse.ts +175 -0
  84. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-plan.ts +425 -0
  85. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-presentation.ts +210 -0
  86. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-sessions.ts +817 -0
  87. package/node_modules/@luxusai/pi-hindsight/extensions/index.ts +25 -0
  88. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/git-seed.ts +319 -0
  89. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle-recall.ts +196 -0
  90. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle-retain.ts +189 -0
  91. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle-runtime.ts +65 -0
  92. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle.ts +260 -0
  93. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/mental-models.ts +244 -0
  94. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/observation-scopes.ts +59 -0
  95. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/recall-cleanup.ts +82 -0
  96. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/recall-visibility.ts +45 -0
  97. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/recall.ts +331 -0
  98. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain-cursor.ts +354 -0
  99. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain-job-builder.ts +66 -0
  100. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain-receipts.ts +132 -0
  101. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain.ts +228 -0
  102. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-bank-template-operations.ts +74 -0
  103. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-config-operations.ts +16 -0
  104. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-control-operations.ts +648 -0
  105. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-diagnostics-operations.ts +105 -0
  106. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-identity.ts +68 -0
  107. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-operation-service.ts +71 -0
  108. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-operation-types.ts +13 -0
  109. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-recall-operations.ts +162 -0
  110. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-retain-operations.ts +131 -0
  111. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-scope.ts +104 -0
  112. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-session-operations.ts +37 -0
  113. package/node_modules/@luxusai/pi-hindsight/extensions/operations/operation-catalog.ts +893 -0
  114. package/node_modules/@luxusai/pi-hindsight/extensions/operations/reflect-presenter.ts +35 -0
  115. package/node_modules/@luxusai/pi-hindsight/extensions/operations/scope-migrate.ts +177 -0
  116. package/node_modules/@luxusai/pi-hindsight/extensions/operations/tools.ts +7 -0
  117. package/node_modules/@luxusai/pi-hindsight/extensions/queue/flush-presenter.ts +21 -0
  118. package/node_modules/@luxusai/pi-hindsight/extensions/queue/jsonl-queue-store.ts +112 -0
  119. package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue-delivery.ts +111 -0
  120. package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue-lock.ts +214 -0
  121. package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue-operations.ts +70 -0
  122. package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue.ts +392 -0
  123. package/node_modules/@luxusai/pi-hindsight/extensions/tui/bank-template-presentation.ts +45 -0
  124. package/node_modules/@luxusai/pi-hindsight/extensions/tui/commands.ts +9 -0
  125. package/node_modules/@luxusai/pi-hindsight/extensions/tui/guided-setup.ts +860 -0
  126. package/node_modules/@luxusai/pi-hindsight/extensions/tui/prefill-input.ts +105 -0
  127. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-flow.ts +189 -0
  128. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-server-probe.ts +299 -0
  129. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-actions.ts +201 -0
  130. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-facts.ts +47 -0
  131. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-render.ts +239 -0
  132. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-types.ts +50 -0
  133. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui.ts +259 -0
  134. package/node_modules/@luxusai/pi-hindsight/extensions/tui/tool-presenters.ts +77 -0
  135. package/node_modules/@luxusai/pi-hindsight/extensions/types.ts +534 -0
  136. package/node_modules/@luxusai/pi-hindsight/extensions/utils/diagnostics.ts +319 -0
  137. package/node_modules/@luxusai/pi-hindsight/extensions/utils/messages.ts +325 -0
  138. package/node_modules/@luxusai/pi-hindsight/extensions/utils/sanitize.ts +42 -0
  139. package/node_modules/@luxusai/pi-hindsight/extensions/utils/session-memory-meta.ts +244 -0
  140. package/node_modules/@luxusai/pi-hindsight/extensions/utils/session-operations.ts +56 -0
  141. package/node_modules/@luxusai/pi-hindsight/extensions/utils/session.ts +50 -0
  142. package/node_modules/@luxusai/pi-hindsight/extensions/utils/status-fields.ts +167 -0
  143. package/node_modules/@luxusai/pi-hindsight/extensions/utils/status-health.ts +207 -0
  144. package/node_modules/@luxusai/pi-hindsight/extensions/utils/status.ts +120 -0
  145. package/node_modules/@luxusai/pi-hindsight/extensions/version.ts +8 -0
  146. package/node_modules/@luxusai/pi-hindsight/package.json +118 -0
  147. package/node_modules/@luxusai/pi-hindsight/skills/hindsight-memory-doctor/SKILL.md +75 -0
  148. package/node_modules/@narumitw/pi-btw/dist/index.ts +143 -46
  149. package/node_modules/@narumitw/pi-btw/dist/index.ts.map +3 -3
  150. package/node_modules/@narumitw/pi-btw/package.json +6 -6
  151. package/node_modules/@narumitw/pi-btw/src/fullscreen-ui.ts +136 -22
  152. package/node_modules/{@herbertgao → @tifan}/pi-copy-response/README.md +2 -4
  153. package/node_modules/{@herbertgao → @tifan}/pi-copy-response/package.json +5 -15
  154. package/node_modules/{@herbertgao → @tifan}/pi-handoff/README.md +4 -6
  155. package/node_modules/@tifan/pi-handoff/package.json +43 -0
  156. package/node_modules/{@herbertgao → @tifan}/pi-handoff/src/index.ts +1 -1
  157. package/node_modules/{@herbertgao → @tifan}/pi-inline-skills/README.md +2 -4
  158. package/node_modules/{@herbertgao → @tifan}/pi-inline-skills/package.json +5 -15
  159. package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/README.md +5 -7
  160. package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/package.json +5 -19
  161. package/node_modules/{@herbertgao → @tifan}/pi-preferred-thinking/README.md +4 -6
  162. package/node_modules/{@herbertgao → @tifan}/pi-preferred-thinking/package.json +6 -16
  163. package/node_modules/{@herbertgao → @tifan}/pi-preferred-thinking/src/index.ts +1 -6
  164. package/node_modules/{@herbertgao → @tifan}/pi-recap/README.md +4 -6
  165. package/node_modules/@tifan/pi-recap/package.json +42 -0
  166. package/node_modules/{@herbertgao → @tifan}/pi-recap/src/models.ts +1 -6
  167. package/node_modules/{@herbertgao → @tifan}/pi-rename/README.md +13 -8
  168. package/node_modules/@tifan/pi-rename/package.json +47 -0
  169. package/node_modules/@tifan/pi-rename/src/herdr-label.ts +4 -0
  170. package/node_modules/{@herbertgao → @tifan}/pi-rename/src/index.ts +4 -16
  171. package/node_modules/{@herbertgao → @tifan}/pi-rename/src/models.ts +1 -6
  172. package/node_modules/{@herbertgao → @tifan}/pi-titlebar-spinner/README.md +2 -4
  173. package/node_modules/{@herbertgao → @tifan}/pi-titlebar-spinner/package.json +5 -15
  174. package/node_modules/pi-lens/CHANGELOG.md +96 -1
  175. package/node_modules/pi-lens/dist/clients/actionable-warnings-logger.js +2 -1
  176. package/node_modules/pi-lens/dist/clients/actionable-warnings.js +14 -5
  177. package/node_modules/pi-lens/dist/clients/advisory-provenance.js +48 -18
  178. package/node_modules/pi-lens/dist/clients/ast-grep-client.js +1 -3
  179. package/node_modules/pi-lens/dist/clients/atomic-write-staging.js +16 -4
  180. package/node_modules/pi-lens/dist/clients/bash-file-access.js +3 -1
  181. package/node_modules/pi-lens/dist/clients/biome-client.js +1 -3
  182. package/node_modules/pi-lens/dist/clients/blocker-freshness.js +21 -8
  183. package/node_modules/pi-lens/dist/clients/bounded-cache.js +24 -8
  184. package/node_modules/pi-lens/dist/clients/bounded-pid-file-lock.js +4 -3
  185. package/node_modules/pi-lens/dist/clients/cache-manager.js +6 -7
  186. package/node_modules/pi-lens/dist/clients/cache-observability.js +461 -66
  187. package/node_modules/pi-lens/dist/clients/call-graph.js +238 -63
  188. package/node_modules/pi-lens/dist/clients/codebase-model.js +13 -5
  189. package/node_modules/pi-lens/dist/clients/complexity-client.js +1 -3
  190. package/node_modules/pi-lens/dist/clients/dead-code-client.js +19 -8
  191. package/node_modules/pi-lens/dist/clients/dead-code-logger.js +1 -2
  192. package/node_modules/pi-lens/dist/clients/deadline-utils.js +3 -1
  193. package/node_modules/pi-lens/dist/clients/debug-heap.js +8 -1
  194. package/node_modules/pi-lens/dist/clients/degradation-ledger.js +1 -1
  195. package/node_modules/pi-lens/dist/clients/dependency-checker.js +11 -7
  196. package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +39 -2
  197. package/node_modules/pi-lens/dist/clients/diagnostic-line-freshness.js +5 -1
  198. package/node_modules/pi-lens/dist/clients/dispatch/auxiliary-lsp.js +2 -3
  199. package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +13 -1
  200. package/node_modules/pi-lens/dist/clients/dispatch/facts/function-facts.js +3 -1
  201. package/node_modules/pi-lens/dist/clients/dispatch/facts/import-facts.js +2 -1
  202. package/node_modules/pi-lens/dist/clients/dispatch/facts/tree-sitter-facts.js +1 -1
  203. package/node_modules/pi-lens/dist/clients/dispatch/integration.js +9 -4
  204. package/node_modules/pi-lens/dist/clients/dispatch/rules/error-swallowing.js +3 -1
  205. package/node_modules/pi-lens/dist/clients/dispatch/rules/pass-through-wrappers.js +6 -2
  206. package/node_modules/pi-lens/dist/clients/dispatch/rules/unsafe-boundary.js +31 -7
  207. package/node_modules/pi-lens/dist/clients/dispatch/runners/actionlint.js +5 -2
  208. package/node_modules/pi-lens/dist/clients/dispatch/runners/biome-check.js +10 -14
  209. package/node_modules/pi-lens/dist/clients/dispatch/runners/cpp-check.js +5 -1
  210. package/node_modules/pi-lens/dist/clients/dispatch/runners/dotnet-build.js +1 -1
  211. package/node_modules/pi-lens/dist/clients/dispatch/runners/elixir-check.js +3 -1
  212. package/node_modules/pi-lens/dist/clients/dispatch/runners/eslint.js +25 -6
  213. package/node_modules/pi-lens/dist/clients/dispatch/runners/fish-indent.js +1 -1
  214. package/node_modules/pi-lens/dist/clients/dispatch/runners/gleam-check.js +1 -1
  215. package/node_modules/pi-lens/dist/clients/dispatch/runners/golangci-lint.js +3 -1
  216. package/node_modules/pi-lens/dist/clients/dispatch/runners/hadolint.js +13 -8
  217. package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-lint.js +4 -1
  218. package/node_modules/pi-lens/dist/clients/dispatch/runners/htmlhint.js +25 -10
  219. package/node_modules/pi-lens/dist/clients/dispatch/runners/javac.js +1 -1
  220. package/node_modules/pi-lens/dist/clients/dispatch/runners/ktlint.js +1 -1
  221. package/node_modules/pi-lens/dist/clients/dispatch/runners/lsp.js +1 -1
  222. package/node_modules/pi-lens/dist/clients/dispatch/runners/markdownlint.js +28 -4
  223. package/node_modules/pi-lens/dist/clients/dispatch/runners/mypy.js +6 -8
  224. package/node_modules/pi-lens/dist/clients/dispatch/runners/oxlint.js +212 -11
  225. package/node_modules/pi-lens/dist/clients/dispatch/runners/php-lint.js +1 -1
  226. package/node_modules/pi-lens/dist/clients/dispatch/runners/phpstan.js +8 -4
  227. package/node_modules/pi-lens/dist/clients/dispatch/runners/psscriptanalyzer.js +10 -6
  228. package/node_modules/pi-lens/dist/clients/dispatch/runners/pyright.js +23 -14
  229. package/node_modules/pi-lens/dist/clients/dispatch/runners/rust-clippy.js +1 -1
  230. package/node_modules/pi-lens/dist/clients/dispatch/runners/shellcheck.js +7 -9
  231. package/node_modules/pi-lens/dist/clients/dispatch/runners/shfmt.js +5 -2
  232. package/node_modules/pi-lens/dist/clients/dispatch/runners/sqlfluff.js +7 -7
  233. package/node_modules/pi-lens/dist/clients/dispatch/runners/stylelint.js +6 -8
  234. package/node_modules/pi-lens/dist/clients/dispatch/runners/terragrunt.js +13 -8
  235. package/node_modules/pi-lens/dist/clients/dispatch/runners/tflint.js +13 -8
  236. package/node_modules/pi-lens/dist/clients/dispatch/runners/tree-sitter.js +17 -3
  237. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +7 -1
  238. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +24 -1
  239. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/tool-failure.js +35 -0
  240. package/node_modules/pi-lens/dist/clients/dispatch/runners/yaml-rule-parser.js +1 -3
  241. package/node_modules/pi-lens/dist/clients/dispatch/runners/yamllint.js +6 -8
  242. package/node_modules/pi-lens/dist/clients/dispatch/runners/zig-check.js +1 -1
  243. package/node_modules/pi-lens/dist/clients/dispatch/suppress-writer.js +2 -1
  244. package/node_modules/pi-lens/dist/clients/dispatch/types.js +6 -1
  245. package/node_modules/pi-lens/dist/clients/dispatch/utils/lsp-diagnostics.js +6 -2
  246. package/node_modules/pi-lens/dist/clients/extension-log.js +5 -3
  247. package/node_modules/pi-lens/dist/clients/feature-hints.js +8 -1
  248. package/node_modules/pi-lens/dist/clients/file-kinds.js +34 -129
  249. package/node_modules/pi-lens/dist/clients/file-utils.js +17 -1
  250. package/node_modules/pi-lens/dist/clients/finding-delivery-gate.js +57 -2
  251. package/node_modules/pi-lens/dist/clients/formatters.js +144 -27
  252. package/node_modules/pi-lens/dist/clients/freshness.js +38 -0
  253. package/node_modules/pi-lens/dist/clients/git-guard.js +43 -13
  254. package/node_modules/pi-lens/dist/clients/go-client.js +1 -3
  255. package/node_modules/pi-lens/dist/clients/grammar-source.js +1 -1
  256. package/node_modules/pi-lens/dist/clients/gzip-stage-write.js +30 -4
  257. package/node_modules/pi-lens/dist/clients/host-edit-normalize.js +1 -3
  258. package/node_modules/pi-lens/dist/clients/install-diagnostics.js +4 -2
  259. package/node_modules/pi-lens/dist/clients/installer/index.js +86 -77
  260. package/node_modules/pi-lens/dist/clients/instance-reaper.js +5 -2
  261. package/node_modules/pi-lens/dist/clients/instance-registry.js +4 -2
  262. package/node_modules/pi-lens/dist/clients/jscpd-client.js +6 -1
  263. package/node_modules/pi-lens/dist/clients/knip-client.js +29 -15
  264. package/node_modules/pi-lens/dist/clients/language-profile.js +4 -1
  265. package/node_modules/pi-lens/dist/clients/latency-logger.js +13 -2
  266. package/node_modules/pi-lens/dist/clients/lens-config.js +1 -1
  267. package/node_modules/pi-lens/dist/clients/lens-map.js +8 -3
  268. package/node_modules/pi-lens/dist/clients/live-bus-emitter.js +1 -1
  269. package/node_modules/pi-lens/dist/clients/lsp/config.js +4 -6
  270. package/node_modules/pi-lens/dist/clients/lsp/edits.js +119 -32
  271. package/node_modules/pi-lens/dist/clients/lsp/index.js +94 -35
  272. package/node_modules/pi-lens/dist/clients/lsp/inferred-project.js +2 -1
  273. package/node_modules/pi-lens/dist/clients/lsp/jvm-runtime.js +4 -1
  274. package/node_modules/pi-lens/dist/clients/lsp/launch.js +11 -3
  275. package/node_modules/pi-lens/dist/clients/lsp/pending-aux-coverage.js +152 -0
  276. package/node_modules/pi-lens/dist/clients/lsp/server.js +19 -7
  277. package/node_modules/pi-lens/dist/clients/lsp/tsserver-sync.js +10 -2
  278. package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-cache.js +9 -4
  279. package/node_modules/pi-lens/dist/clients/lsp-document-symbols.js +1 -3
  280. package/node_modules/pi-lens/dist/clients/lsp-mutation.js +10 -20
  281. package/node_modules/pi-lens/dist/clients/mcp/host-shim.js +1 -1
  282. package/node_modules/pi-lens/dist/clients/memory-sampler.js +73 -7
  283. package/node_modules/pi-lens/dist/clients/metrics-client.js +1 -3
  284. package/node_modules/pi-lens/dist/clients/middle-man-analysis.js +8 -3
  285. package/node_modules/pi-lens/dist/clients/module-report-lsp.js +7 -1
  286. package/node_modules/pi-lens/dist/clients/module-report.js +14 -17
  287. package/node_modules/pi-lens/dist/clients/ndjson-logger.js +3 -5
  288. package/node_modules/pi-lens/dist/clients/opaque-mutation-scan.js +220 -0
  289. package/node_modules/pi-lens/dist/clients/package-manager.js +6 -1
  290. package/node_modules/pi-lens/dist/clients/pipeline.js +57 -9
  291. package/node_modules/pi-lens/dist/clients/project-conventions.js +2 -8
  292. package/node_modules/pi-lens/dist/clients/project-diagnostics/cache.js +10 -7
  293. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +2 -1
  294. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +3 -1
  295. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +13 -9
  296. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/trivy.js +3 -1
  297. package/node_modules/pi-lens/dist/clients/project-diagnostics/scanner.js +5 -2
  298. package/node_modules/pi-lens/dist/clients/project-lens-config.js +12 -5
  299. package/node_modules/pi-lens/dist/clients/project-snapshot-fingerprint.js +48 -0
  300. package/node_modules/pi-lens/dist/clients/project-snapshot-persist-worker.js +15 -1
  301. package/node_modules/pi-lens/dist/clients/project-snapshot.js +472 -66
  302. package/node_modules/pi-lens/dist/clients/read-expansion.js +12 -2
  303. package/node_modules/pi-lens/dist/clients/read-guard-logger.js +5 -4
  304. package/node_modules/pi-lens/dist/clients/read-guard-tool-lines.js +5 -2
  305. package/node_modules/pi-lens/dist/clients/read-guard.js +1 -1
  306. package/node_modules/pi-lens/dist/clients/resource-sampler.js +1 -1
  307. package/node_modules/pi-lens/dist/clients/reverse-deps.js +6 -5
  308. package/node_modules/pi-lens/dist/clients/review-graph/builder.js +42 -17
  309. package/node_modules/pi-lens/dist/clients/review-graph/git-identity.js +8 -2
  310. package/node_modules/pi-lens/dist/clients/review-graph/import-resolvers.js +10 -1
  311. package/node_modules/pi-lens/dist/clients/review-graph/query.js +2 -1
  312. package/node_modules/pi-lens/dist/clients/review-graph/tsconfig-paths.js +4 -2
  313. package/node_modules/pi-lens/dist/clients/review-graph/workspace-modules.js +2 -2
  314. package/node_modules/pi-lens/dist/clients/ruff-client.js +6 -5
  315. package/node_modules/pi-lens/dist/clients/runtime-agent-end.js +63 -31
  316. package/node_modules/pi-lens/dist/clients/runtime-context.js +12 -4
  317. package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +83 -4
  318. package/node_modules/pi-lens/dist/clients/runtime-session.js +14 -0
  319. package/node_modules/pi-lens/dist/clients/runtime-tool-call.js +59 -3
  320. package/node_modules/pi-lens/dist/clients/runtime-tool-result.js +148 -34
  321. package/node_modules/pi-lens/dist/clients/runtime-turn.js +147 -6
  322. package/node_modules/pi-lens/dist/clients/rust-client.js +1 -3
  323. package/node_modules/pi-lens/dist/clients/safe-spawn.js +150 -11
  324. package/node_modules/pi-lens/dist/clients/security-scan-client.js +1 -3
  325. package/node_modules/pi-lens/dist/clients/session-summary.js +3 -1
  326. package/node_modules/pi-lens/dist/clients/sg-runner.js +1 -3
  327. package/node_modules/pi-lens/dist/clients/source-filter.js +10 -6
  328. package/node_modules/pi-lens/dist/clients/source-walker.js +1 -1
  329. package/node_modules/pi-lens/dist/clients/spawn-timeout-cooldown.js +96 -0
  330. package/node_modules/pi-lens/dist/clients/startup-scan.js +4 -1
  331. package/node_modules/pi-lens/dist/clients/tool-definition.js +7 -0
  332. package/node_modules/pi-lens/dist/clients/tool-policy.js +26 -11
  333. package/node_modules/pi-lens/dist/clients/tool-render.js +2 -1
  334. package/node_modules/pi-lens/dist/clients/tree-sitter-client.js +10 -4
  335. package/node_modules/pi-lens/dist/clients/tree-sitter-logger.js +2 -2
  336. package/node_modules/pi-lens/dist/clients/tree-sitter-symbol-extractor.js +12 -5
  337. package/node_modules/pi-lens/dist/clients/warm-attach.js +12 -5
  338. package/node_modules/pi-lens/dist/clients/widget-state.js +27 -11
  339. package/node_modules/pi-lens/dist/clients/word-index.js +3 -1
  340. package/node_modules/pi-lens/dist/clients/workspace-topology.js +8 -2
  341. package/node_modules/pi-lens/dist/clients/zizmor-config.js +9 -1
  342. package/node_modules/pi-lens/dist/i18n.js +13 -5
  343. package/node_modules/pi-lens/dist/index.js +10797 -8627
  344. package/node_modules/pi-lens/dist/mcp/server.js +3 -1
  345. package/node_modules/pi-lens/dist/tools/ast-grep-replace.js +68 -12
  346. package/node_modules/pi-lens/dist/tools/lens-diagnostic-mark.js +21 -7
  347. package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +164 -35
  348. package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +24 -7
  349. package/node_modules/pi-lens/dist/tools/lsp-navigation.js +3 -1
  350. package/node_modules/pi-lens/dist/tools/module-report.js +1 -1
  351. package/node_modules/pi-lens/dist/tools/project-report.js +1 -1
  352. package/node_modules/pi-lens/dist/tools/symbol-search.js +5 -2
  353. package/node_modules/pi-lens/docs/durable-store-audit-1202.md +1 -1
  354. package/node_modules/pi-lens/docs/servercapabilities.md +1 -1
  355. package/node_modules/pi-lens/package.json +160 -156
  356. package/node_modules/pi-lens/rules/typos/_typos.toml +2 -2
  357. package/node_modules/pi-lens/scripts/analyze-pi-lens-logs.mjs +31 -13
  358. package/node_modules/pi-lens/scripts/download-grammars.js +9 -3
  359. package/node_modules/pi-lens/scripts/rpc-load-check.mjs +30 -9
  360. package/node_modules/pi-mcp-adapter/CHANGELOG.md +47 -0
  361. package/node_modules/pi-mcp-adapter/README.md +42 -13
  362. package/node_modules/pi-mcp-adapter/commands.ts +4 -2
  363. package/node_modules/pi-mcp-adapter/config.ts +45 -5
  364. package/node_modules/pi-mcp-adapter/direct-tools.ts +103 -92
  365. package/node_modules/pi-mcp-adapter/dist/agent-dir.d.ts +10 -0
  366. package/node_modules/pi-mcp-adapter/dist/agent-dir.js +63 -0
  367. package/node_modules/pi-mcp-adapter/dist/agent-dir.js.map +1 -0
  368. package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.d.ts +8 -0
  369. package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.js +356 -0
  370. package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.js.map +1 -0
  371. package/node_modules/pi-mcp-adapter/dist/config.d.ts +123 -0
  372. package/node_modules/pi-mcp-adapter/dist/config.js +1087 -0
  373. package/node_modules/pi-mcp-adapter/dist/config.js.map +1 -0
  374. package/node_modules/pi-mcp-adapter/dist/metadata-cache.d.ts +19 -0
  375. package/node_modules/pi-mcp-adapter/dist/metadata-cache.js +319 -0
  376. package/node_modules/pi-mcp-adapter/dist/metadata-cache.js.map +1 -0
  377. package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.d.ts +2 -0
  378. package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.js +156 -0
  379. package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.js.map +1 -0
  380. package/node_modules/pi-mcp-adapter/dist/resource-tools.d.ts +1 -0
  381. package/node_modules/pi-mcp-adapter/dist/resource-tools.js +15 -0
  382. package/node_modules/pi-mcp-adapter/dist/resource-tools.js.map +1 -0
  383. package/node_modules/pi-mcp-adapter/dist/types.d.ts +564 -0
  384. package/node_modules/pi-mcp-adapter/dist/types.js +287 -0
  385. package/node_modules/pi-mcp-adapter/dist/types.js.map +1 -0
  386. package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.d.ts +6 -0
  387. package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.js +37 -0
  388. package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.js.map +1 -0
  389. package/node_modules/pi-mcp-adapter/dist/ui-stream-types.d.ts +104 -0
  390. package/node_modules/pi-mcp-adapter/dist/ui-stream-types.js +59 -0
  391. package/node_modules/pi-mcp-adapter/dist/ui-stream-types.js.map +1 -0
  392. package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.d.ts +4 -0
  393. package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.js +27 -0
  394. package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.js.map +1 -0
  395. package/node_modules/pi-mcp-adapter/dist/utils.d.ts +32 -0
  396. package/node_modules/pi-mcp-adapter/dist/utils.js +338 -0
  397. package/node_modules/pi-mcp-adapter/dist/utils.js.map +1 -0
  398. package/node_modules/pi-mcp-adapter/failure-backoff.ts +23 -0
  399. package/node_modules/pi-mcp-adapter/index.ts +204 -82
  400. package/node_modules/pi-mcp-adapter/init.ts +41 -30
  401. package/node_modules/pi-mcp-adapter/lifecycle.ts +16 -8
  402. package/node_modules/pi-mcp-adapter/mcp-code.ts +2 -0
  403. package/node_modules/pi-mcp-adapter/mcp-oauth-provider.ts +66 -16
  404. package/node_modules/pi-mcp-adapter/mcp-output-guard.ts +95 -7
  405. package/node_modules/pi-mcp-adapter/mcp-probe.ts +18 -4
  406. package/node_modules/pi-mcp-adapter/mcp-references.ts +368 -0
  407. package/node_modules/pi-mcp-adapter/mcp-status.ts +8 -19
  408. package/node_modules/pi-mcp-adapter/metadata-cache.ts +20 -12
  409. package/node_modules/pi-mcp-adapter/namespace-tools.ts +276 -0
  410. package/node_modules/pi-mcp-adapter/package.json +24 -6
  411. package/node_modules/pi-mcp-adapter/proxy-modes.ts +66 -10
  412. package/node_modules/pi-mcp-adapter/search-ranking.ts +2 -0
  413. package/node_modules/pi-mcp-adapter/server-manager.ts +63 -12
  414. package/node_modules/pi-mcp-adapter/state.ts +1 -3
  415. package/node_modules/pi-mcp-adapter/tool-result-renderer.ts +16 -2
  416. package/node_modules/pi-mcp-adapter/types.ts +48 -1
  417. package/node_modules/pi-mcp-adapter/ui-server.ts +3 -19
  418. package/node_modules/pi-mcp-adapter/ui-session.ts +2 -1
  419. package/node_modules/pi-mcp-adapter/utils.ts +21 -19
  420. package/node_modules/pi-web-access/CHANGELOG.md +26 -0
  421. package/node_modules/pi-web-access/README.md +71 -14
  422. package/node_modules/pi-web-access/chrome-cookies.ts +115 -35
  423. package/node_modules/pi-web-access/credential-source.ts +6 -2
  424. package/node_modules/pi-web-access/curator-page.ts +5 -3
  425. package/node_modules/pi-web-access/curator-server.ts +2 -1
  426. package/node_modules/pi-web-access/extract.ts +89 -9
  427. package/node_modules/pi-web-access/fetch-params.ts +13 -0
  428. package/node_modules/pi-web-access/gemini-adc.ts +298 -0
  429. package/node_modules/pi-web-access/gemini-api.ts +59 -15
  430. package/node_modules/pi-web-access/gemini-search.ts +58 -18
  431. package/node_modules/pi-web-access/gemini-url-context.ts +3 -2
  432. package/node_modules/pi-web-access/gemini-web-config.ts +57 -7
  433. package/node_modules/pi-web-access/gemini-web.ts +9 -3
  434. package/node_modules/pi-web-access/github-api.ts +5 -4
  435. package/node_modules/pi-web-access/github-issue-pr.ts +700 -0
  436. package/node_modules/pi-web-access/index.ts +403 -297
  437. package/node_modules/pi-web-access/kimi-search.ts +234 -0
  438. package/node_modules/pi-web-access/openai-search.ts +118 -21
  439. package/node_modules/pi-web-access/package.json +3 -2
  440. package/node_modules/pi-web-access/ssrf-protection.ts +4 -1
  441. package/node_modules/pi-web-access/utils.ts +307 -1
  442. package/node_modules/pi-web-access/youtube-extract.ts +2 -2
  443. package/package.json +46 -37
  444. package/node_modules/@herbertgao/pi-copy-response/CHANGELOG.md +0 -49
  445. package/node_modules/@herbertgao/pi-copy-response/LICENSE +0 -22
  446. package/node_modules/@herbertgao/pi-handoff/CHANGELOG.md +0 -83
  447. package/node_modules/@herbertgao/pi-handoff/LICENSE +0 -22
  448. package/node_modules/@herbertgao/pi-handoff/package.json +0 -60
  449. package/node_modules/@herbertgao/pi-inline-skills/CHANGELOG.md +0 -57
  450. package/node_modules/@herbertgao/pi-inline-skills/LICENSE +0 -22
  451. package/node_modules/@herbertgao/pi-mermaid-open/CHANGELOG.md +0 -39
  452. package/node_modules/@herbertgao/pi-preferred-thinking/CHANGELOG.md +0 -63
  453. package/node_modules/@herbertgao/pi-preferred-thinking/LICENSE +0 -22
  454. package/node_modules/@herbertgao/pi-recap/CHANGELOG.md +0 -101
  455. package/node_modules/@herbertgao/pi-recap/LICENSE +0 -22
  456. package/node_modules/@herbertgao/pi-recap/package.json +0 -55
  457. package/node_modules/@herbertgao/pi-rename/CHANGELOG.md +0 -49
  458. package/node_modules/@herbertgao/pi-rename/LICENSE +0 -22
  459. package/node_modules/@herbertgao/pi-rename/package.json +0 -63
  460. package/node_modules/@herbertgao/pi-titlebar-spinner/CHANGELOG.md +0 -25
  461. package/node_modules/@herbertgao/pi-titlebar-spinner/LICENSE +0 -22
  462. /package/node_modules/{@herbertgao → @tifan}/pi-copy-response/src/index.ts +0 -0
  463. /package/node_modules/{@herbertgao → @tifan}/pi-handoff/src/complete-text.ts +0 -0
  464. /package/node_modules/{@herbertgao → @tifan}/pi-handoff/src/session-query.ts +0 -0
  465. /package/node_modules/{@herbertgao → @tifan}/pi-inline-skills/src/index.ts +0 -0
  466. /package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/herdr-plugin/herdr-plugin.toml +0 -0
  467. /package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/herdr-plugin/viewer.mjs +0 -0
  468. /package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/src/index.ts +0 -0
  469. /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/index.ts +0 -0
  470. /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/model-picker.ts +0 -0
  471. /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/sanitize.ts +0 -0
  472. /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/tui.ts +0 -0
  473. /package/node_modules/{@herbertgao → @tifan}/pi-rename/src/model-picker.ts +0 -0
  474. /package/node_modules/{@herbertgao → @tifan}/pi-rename/src/naming.ts +0 -0
  475. /package/node_modules/{@herbertgao → @tifan}/pi-rename/src/sanitize.ts +0 -0
  476. /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);