@herbertgao/pi-extensions 2026.9.0 → 2026.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. package/node_modules/@czottmann/pi-automode/CHANGELOG.md +13 -1
  2. package/node_modules/@czottmann/pi-automode/README.md +20 -0
  3. package/node_modules/@czottmann/pi-automode/docs/GLOSSARY.md +1 -1
  4. package/node_modules/@czottmann/pi-automode/docs/automode-classifier-flow.md +2 -1
  5. package/node_modules/@czottmann/pi-automode/docs/defaults.md +3 -2
  6. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/classifier.ts +38 -2
  7. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/constants.ts +5 -3
  8. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/extension.ts +11 -3
  9. package/node_modules/@czottmann/pi-automode/package.json +1 -1
  10. package/node_modules/@narumitw/pi-btw/README.md +57 -141
  11. package/node_modules/@narumitw/pi-btw/dist/index.ts +466 -41
  12. package/node_modules/@narumitw/pi-btw/dist/index.ts.map +4 -4
  13. package/node_modules/@narumitw/pi-btw/docs/workflows.md +74 -0
  14. package/node_modules/@narumitw/pi-btw/package.json +2 -1
  15. package/node_modules/@narumitw/pi-btw/src/btw.ts +15 -1
  16. package/node_modules/@narumitw/pi-btw/src/fullscreen-ui.ts +32 -2
  17. package/node_modules/@narumitw/pi-btw/src/keybindings.ts +330 -0
  18. package/node_modules/@narumitw/pi-btw/src/menu.ts +136 -19
  19. package/node_modules/@narumitw/pi-btw/src/settings.ts +32 -0
  20. package/node_modules/@narumitw/pi-btw/src/side-thread.ts +57 -5
  21. package/node_modules/@narumitw/pi-btw/src/transcript-pager.ts +52 -30
  22. package/node_modules/@pi-plugins/fast-mode/README.md +5 -3
  23. package/node_modules/@pi-plugins/fast-mode/dist/index.d.mts.map +1 -1
  24. package/node_modules/@pi-plugins/fast-mode/dist/index.mjs +20 -55
  25. package/node_modules/@pi-plugins/fast-mode/dist/index.mjs.map +1 -1
  26. package/node_modules/@pi-plugins/fast-mode/package.json +1 -1
  27. package/node_modules/pi-lens/CHANGELOG.md +1072 -0
  28. package/node_modules/pi-lens/README.md +3 -0
  29. package/node_modules/pi-lens/config/biome/core.jsonc +11 -2
  30. package/node_modules/pi-lens/config/dependency-cruiser-eager-allowlist.json +13 -1
  31. package/node_modules/pi-lens/dist/clients/actionable-warnings-logger.js +2 -9
  32. package/node_modules/pi-lens/dist/clients/actionable-warnings.js +927 -80
  33. package/node_modules/pi-lens/dist/clients/advisory-provenance.js +1 -1
  34. package/node_modules/pi-lens/dist/clients/agent-behavior-client.js +13 -4
  35. package/node_modules/pi-lens/dist/clients/ast-grep-client.js +123 -3
  36. package/node_modules/pi-lens/dist/clients/ast-grep-rule-manager.js +60 -5
  37. package/node_modules/pi-lens/dist/clients/ast-grep-tool-logger.js +2 -9
  38. package/node_modules/pi-lens/dist/clients/ast-grep-types.js +2 -0
  39. package/node_modules/pi-lens/dist/clients/bash-file-access.js +133 -3
  40. package/node_modules/pi-lens/dist/clients/biome-client.js +9 -2
  41. package/node_modules/pi-lens/dist/clients/blocker-freshness.js +14 -6
  42. package/node_modules/pi-lens/dist/clients/bootstrap.js +509 -73
  43. package/node_modules/pi-lens/dist/clients/bounded-cache.js +152 -12
  44. package/node_modules/pi-lens/dist/clients/bounded-pid-file-lock.js +1 -1
  45. package/node_modules/pi-lens/dist/clients/bounded-telemetry.js +59 -9
  46. package/node_modules/pi-lens/dist/clients/bundled-resource-health.js +113 -0
  47. package/node_modules/pi-lens/dist/clients/bus-events-logger.js +3 -11
  48. package/node_modules/pi-lens/dist/clients/cache/rule-cache.js +31 -4
  49. package/node_modules/pi-lens/dist/clients/cache-manager.js +105 -6
  50. package/node_modules/pi-lens/dist/clients/cache-observability.js +40 -19
  51. package/node_modules/pi-lens/dist/clients/cargo-manifest.js +422 -0
  52. package/node_modules/pi-lens/dist/clients/cascade-logger.js +2 -9
  53. package/node_modules/pi-lens/dist/clients/child-unref.js +1 -19
  54. package/node_modules/pi-lens/dist/clients/code-quality-warnings.js +13 -3
  55. package/node_modules/pi-lens/dist/clients/complexity-client.js +16 -5
  56. package/node_modules/pi-lens/dist/clients/config-core/deny.js +221 -0
  57. package/node_modules/pi-lens/dist/clients/config-core/index.js +50 -0
  58. package/node_modules/pi-lens/dist/clients/config-core/merge.js +357 -0
  59. package/node_modules/pi-lens/dist/clients/config-core/normalize.js +340 -0
  60. package/node_modules/pi-lens/dist/clients/config-core/process-spec.js +248 -0
  61. package/node_modules/pi-lens/dist/clients/config-core/provenance.js +164 -0
  62. package/node_modules/pi-lens/dist/clients/config-core/records.js +218 -0
  63. package/node_modules/pi-lens/dist/clients/config-core/resolve.js +125 -0
  64. package/node_modules/pi-lens/dist/clients/config-core/safe-object.js +78 -0
  65. package/node_modules/pi-lens/dist/clients/config-core/schema.js +165 -0
  66. package/node_modules/pi-lens/dist/clients/config-diagnostic-codes.js +281 -0
  67. package/node_modules/pi-lens/dist/clients/config-locations.js +160 -0
  68. package/node_modules/pi-lens/dist/clients/config-resolve.js +789 -0
  69. package/node_modules/pi-lens/dist/clients/config-schema.js +234 -0
  70. package/node_modules/pi-lens/dist/clients/config-warn.js +407 -0
  71. package/node_modules/pi-lens/dist/clients/dead-code-client.js +19 -14
  72. package/node_modules/pi-lens/dist/clients/dead-code-logger.js +2 -6
  73. package/node_modules/pi-lens/dist/clients/deadline-utils.js +178 -0
  74. package/node_modules/pi-lens/dist/clients/debug-handles.js +2 -2
  75. package/node_modules/pi-lens/dist/clients/debug-heap.js +3 -3
  76. package/node_modules/pi-lens/dist/clients/deferred-lsp-work.js +106 -0
  77. package/node_modules/pi-lens/dist/clients/degradation-ledger.js +113 -7
  78. package/node_modules/pi-lens/dist/clients/dependency-checker.js +8 -19
  79. package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +1 -1
  80. package/node_modules/pi-lens/dist/clients/diagnostic-line-freshness.js +12 -9
  81. package/node_modules/pi-lens/dist/clients/diagnostic-logger.js +15 -5
  82. package/node_modules/pi-lens/dist/clients/dispatch/collect-later-tier.js +0 -4
  83. package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +162 -44
  84. package/node_modules/pi-lens/dist/clients/dispatch/fact-store.js +97 -0
  85. package/node_modules/pi-lens/dist/clients/dispatch/integration.js +27 -8
  86. package/node_modules/pi-lens/dist/clients/dispatch/lazy.js +0 -6
  87. package/node_modules/pi-lens/dist/clients/dispatch/pending-runner-findings.js +1 -1
  88. package/node_modules/pi-lens/dist/clients/dispatch/plan.js +0 -3
  89. package/node_modules/pi-lens/dist/clients/dispatch/rules/high-complexity.js +2 -2
  90. package/node_modules/pi-lens/dist/clients/dispatch/rules/high-fan-out.js +1 -1
  91. package/node_modules/pi-lens/dist/clients/dispatch/runners/actionlint.js +0 -1
  92. package/node_modules/pi-lens/dist/clients/dispatch/runners/ast-grep-napi.js +383 -27
  93. package/node_modules/pi-lens/dist/clients/dispatch/runners/biome-check.js +0 -1
  94. package/node_modules/pi-lens/dist/clients/dispatch/runners/cpp-check.js +4 -1
  95. package/node_modules/pi-lens/dist/clients/dispatch/runners/credo.js +0 -1
  96. package/node_modules/pi-lens/dist/clients/dispatch/runners/cue-vet.js +0 -1
  97. package/node_modules/pi-lens/dist/clients/dispatch/runners/dart-analyze.js +0 -1
  98. package/node_modules/pi-lens/dist/clients/dispatch/runners/detekt.js +0 -1
  99. package/node_modules/pi-lens/dist/clients/dispatch/runners/dotnet-build.js +0 -1
  100. package/node_modules/pi-lens/dist/clients/dispatch/runners/elixir-check.js +0 -1
  101. package/node_modules/pi-lens/dist/clients/dispatch/runners/eslint.js +0 -1
  102. package/node_modules/pi-lens/dist/clients/dispatch/runners/fact-rules.js +0 -1
  103. package/node_modules/pi-lens/dist/clients/dispatch/runners/fish-indent.js +0 -1
  104. package/node_modules/pi-lens/dist/clients/dispatch/runners/gleam-check.js +0 -1
  105. package/node_modules/pi-lens/dist/clients/dispatch/runners/go-vet.js +1 -3
  106. package/node_modules/pi-lens/dist/clients/dispatch/runners/golangci-lint.js +0 -1
  107. package/node_modules/pi-lens/dist/clients/dispatch/runners/hadolint.js +0 -1
  108. package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-lint.js +0 -1
  109. package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-render.js +1 -2
  110. package/node_modules/pi-lens/dist/clients/dispatch/runners/htmlhint.js +0 -1
  111. package/node_modules/pi-lens/dist/clients/dispatch/runners/javac.js +0 -1
  112. package/node_modules/pi-lens/dist/clients/dispatch/runners/ktlint.js +0 -1
  113. package/node_modules/pi-lens/dist/clients/dispatch/runners/lsp.js +0 -1
  114. package/node_modules/pi-lens/dist/clients/dispatch/runners/markdownlint.js +0 -1
  115. package/node_modules/pi-lens/dist/clients/dispatch/runners/mypy.js +0 -1
  116. package/node_modules/pi-lens/dist/clients/dispatch/runners/oxlint.js +14 -18
  117. package/node_modules/pi-lens/dist/clients/dispatch/runners/php-lint.js +0 -1
  118. package/node_modules/pi-lens/dist/clients/dispatch/runners/phpstan.js +0 -1
  119. package/node_modules/pi-lens/dist/clients/dispatch/runners/prisma-validate.js +0 -1
  120. package/node_modules/pi-lens/dist/clients/dispatch/runners/psscriptanalyzer.js +6 -3
  121. package/node_modules/pi-lens/dist/clients/dispatch/runners/pyright.js +7 -4
  122. package/node_modules/pi-lens/dist/clients/dispatch/runners/rubocop.js +0 -1
  123. package/node_modules/pi-lens/dist/clients/dispatch/runners/ruff.js +1 -2
  124. package/node_modules/pi-lens/dist/clients/dispatch/runners/rust-clippy.js +1 -3
  125. package/node_modules/pi-lens/dist/clients/dispatch/runners/shellcheck.js +1 -2
  126. package/node_modules/pi-lens/dist/clients/dispatch/runners/shfmt.js +0 -1
  127. package/node_modules/pi-lens/dist/clients/dispatch/runners/spellcheck.js +4 -3
  128. package/node_modules/pi-lens/dist/clients/dispatch/runners/spotbugs.js +0 -1
  129. package/node_modules/pi-lens/dist/clients/dispatch/runners/sqlfluff.js +0 -1
  130. package/node_modules/pi-lens/dist/clients/dispatch/runners/stylelint.js +0 -1
  131. package/node_modules/pi-lens/dist/clients/dispatch/runners/swiftlint.js +0 -1
  132. package/node_modules/pi-lens/dist/clients/dispatch/runners/taplo.js +0 -1
  133. package/node_modules/pi-lens/dist/clients/dispatch/runners/terragrunt.js +0 -1
  134. package/node_modules/pi-lens/dist/clients/dispatch/runners/tflint.js +0 -1
  135. package/node_modules/pi-lens/dist/clients/dispatch/runners/tree-sitter.js +0 -1
  136. package/node_modules/pi-lens/dist/clients/dispatch/runners/trivy-config.js +0 -1
  137. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/availability-policy.js +3 -0
  138. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/diagnostic-parsers.js +3 -67
  139. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +194 -80
  140. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/toolchain-availability.js +84 -15
  141. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils.js +0 -21
  142. package/node_modules/pi-lens/dist/clients/dispatch/runners/vale.js +0 -1
  143. package/node_modules/pi-lens/dist/clients/dispatch/runners/yaml-rule-parser.js +2 -20
  144. package/node_modules/pi-lens/dist/clients/dispatch/runners/yamllint.js +1 -1
  145. package/node_modules/pi-lens/dist/clients/dispatch/runners/zig-check.js +0 -1
  146. package/node_modules/pi-lens/dist/clients/dispatch/utils/format-utils.js +2 -2
  147. package/node_modules/pi-lens/dist/clients/disposition-logger.js +3 -10
  148. package/node_modules/pi-lens/dist/clients/effective-config.js +403 -0
  149. package/node_modules/pi-lens/dist/clients/error-class.js +23 -0
  150. package/node_modules/pi-lens/dist/clients/event-loop-hold.js +274 -0
  151. package/node_modules/pi-lens/dist/clients/event-loop-monitor.js +2 -2
  152. package/node_modules/pi-lens/dist/clients/extension-log.js +2 -2
  153. package/node_modules/pi-lens/dist/clients/feature-hints.js +2 -1
  154. package/node_modules/pi-lens/dist/clients/file-kinds.js +1 -38
  155. package/node_modules/pi-lens/dist/clients/file-time.js +7 -2
  156. package/node_modules/pi-lens/dist/clients/file-utils.js +117 -10
  157. package/node_modules/pi-lens/dist/clients/finding-delivery-gate.js +50 -13
  158. package/node_modules/pi-lens/dist/clients/format-service.js +6 -2
  159. package/node_modules/pi-lens/dist/clients/formatters.js +385 -104
  160. package/node_modules/pi-lens/dist/clients/freshness-cadence.js +17 -0
  161. package/node_modules/pi-lens/dist/clients/generated-artifacts.js +116 -22
  162. package/node_modules/pi-lens/dist/clients/generation-guard.js +4 -9
  163. package/node_modules/pi-lens/dist/clients/git-guard.js +6 -1
  164. package/node_modules/pi-lens/dist/clients/go-client.js +39 -0
  165. package/node_modules/pi-lens/dist/clients/gradle-ktfmt-style.js +252 -0
  166. package/node_modules/pi-lens/dist/clients/grammar-source.js +3 -3
  167. package/node_modules/pi-lens/dist/clients/hashline-anchor.js +424 -0
  168. package/node_modules/pi-lens/dist/clients/hook-budgets.js +76 -0
  169. package/node_modules/pi-lens/dist/clients/host-edit-normalize.js +5 -2
  170. package/node_modules/pi-lens/dist/clients/host-ports.js +1 -1
  171. package/node_modules/pi-lens/dist/clients/installer/index.js +289 -59
  172. package/node_modules/pi-lens/dist/clients/installer/managed-tool-refresh.js +84 -18
  173. package/node_modules/pi-lens/dist/clients/instance-reaper.js +110 -236
  174. package/node_modules/pi-lens/dist/clients/instance-registry.js +6 -3
  175. package/node_modules/pi-lens/dist/clients/language-profile.js +0 -9
  176. package/node_modules/pi-lens/dist/clients/language-registry.js +599 -0
  177. package/node_modules/pi-lens/dist/clients/latency-logger.js +165 -9
  178. package/node_modules/pi-lens/dist/clients/ledger-bounds.js +34 -1
  179. package/node_modules/pi-lens/dist/clients/lens-config.js +160 -30
  180. package/node_modules/pi-lens/dist/clients/lens-engine.js +33 -41
  181. package/node_modules/pi-lens/dist/clients/lens-events.js +1 -1
  182. package/node_modules/pi-lens/dist/clients/lens-flag-registry.js +77 -6
  183. package/node_modules/pi-lens/dist/clients/lens-map.js +1 -1
  184. package/node_modules/pi-lens/dist/clients/log-cleanup.js +2 -38
  185. package/node_modules/pi-lens/dist/clients/lsp/aggregation.js +3 -1
  186. package/node_modules/pi-lens/dist/clients/lsp/client.js +172 -33
  187. package/node_modules/pi-lens/dist/clients/lsp/config.js +484 -158
  188. package/node_modules/pi-lens/dist/clients/lsp/diagnostic-binding.js +1 -1
  189. package/node_modules/pi-lens/dist/clients/lsp/document-drift.js +1 -1
  190. package/node_modules/pi-lens/dist/clients/lsp/edits.js +18 -5
  191. package/node_modules/pi-lens/dist/clients/lsp/index.js +892 -96
  192. package/node_modules/pi-lens/dist/clients/lsp/inferred-project.js +1 -1
  193. package/node_modules/pi-lens/dist/clients/lsp/language.js +18 -177
  194. package/node_modules/pi-lens/dist/clients/lsp/launch.js +2 -1
  195. package/node_modules/pi-lens/dist/clients/lsp/path-utils.js +1 -1
  196. package/node_modules/pi-lens/dist/clients/lsp/pending-aux-coverage.js +5 -18
  197. package/node_modules/pi-lens/dist/clients/lsp/server.js +284 -147
  198. package/node_modules/pi-lens/dist/clients/lsp/session-roots.js +116 -23
  199. package/node_modules/pi-lens/dist/clients/lsp/spawn-history.js +2 -7
  200. package/node_modules/pi-lens/dist/clients/lsp/sync-kind.js +0 -1
  201. package/node_modules/pi-lens/dist/clients/lsp/tsserver-sync.js +14 -7
  202. package/node_modules/pi-lens/dist/clients/lsp/wait-policy/classification.js +6 -0
  203. package/node_modules/pi-lens/dist/clients/lsp/wait-policy/strategies.js +2 -1
  204. package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-cache.js +1 -1
  205. package/node_modules/pi-lens/dist/clients/lsp-document-symbols.js +1 -1
  206. package/node_modules/pi-lens/dist/clients/lsp-mutation.js +163 -21
  207. package/node_modules/pi-lens/dist/clients/map-with-concurrency.js +36 -0
  208. package/node_modules/pi-lens/dist/clients/mcp/analyze.js +33 -4
  209. package/node_modules/pi-lens/dist/clients/mcp/session.js +5 -16
  210. package/node_modules/pi-lens/dist/clients/memory-sampler.js +8 -3
  211. package/node_modules/pi-lens/dist/clients/metrics-history.js +28 -107
  212. package/node_modules/pi-lens/dist/clients/middle-man-analysis.js +3 -5
  213. package/node_modules/pi-lens/dist/clients/module-report.js +21 -46
  214. package/node_modules/pi-lens/dist/clients/mutating-tool.js +651 -0
  215. package/node_modules/pi-lens/dist/clients/mutation-attribution.js +368 -0
  216. package/node_modules/pi-lens/dist/clients/mutation-bridge.js +240 -0
  217. package/node_modules/pi-lens/dist/clients/ndjson-logger.js +247 -24
  218. package/node_modules/pi-lens/dist/clients/observed-mutation-sources.js +101 -0
  219. package/node_modules/pi-lens/dist/clients/observed-mutation.js +1215 -0
  220. package/node_modules/pi-lens/dist/clients/opaque-mutation-scan.js +70 -28
  221. package/node_modules/pi-lens/dist/clients/opengrep-config.js +5 -1
  222. package/node_modules/pi-lens/dist/clients/package-manager.js +195 -26
  223. package/node_modules/pi-lens/dist/clients/partial-edit-apply.js +359 -80
  224. package/node_modules/pi-lens/dist/clients/path-attribution-telemetry.js +23 -7
  225. package/node_modules/pi-lens/dist/clients/path-keyed-map.js +21 -2
  226. package/node_modules/pi-lens/dist/clients/path-utils.js +451 -15
  227. package/node_modules/pi-lens/dist/clients/performance-report.js +2 -2
  228. package/node_modules/pi-lens/dist/clients/persist-debounce.js +8 -1
  229. package/node_modules/pi-lens/dist/clients/php-cs-fixer-config.js +114 -0
  230. package/node_modules/pi-lens/dist/clients/pipeline.js +79 -18
  231. package/node_modules/pi-lens/dist/clients/probe-home-state.js +228 -0
  232. package/node_modules/pi-lens/dist/clients/process-bridge.js +66 -0
  233. package/node_modules/pi-lens/dist/clients/process-snapshot.js +68 -0
  234. package/node_modules/pi-lens/dist/clients/project-changes.js +1 -1
  235. package/node_modules/pi-lens/dist/clients/project-diagnostics/extractors.js +1 -1
  236. package/node_modules/pi-lens/dist/clients/project-diagnostics/fresh-fetch.js +4 -3
  237. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/jscpd.js +1 -1
  238. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/knip.js +1 -1
  239. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/madge.js +1 -1
  240. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/opengrep.js +1 -1
  241. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +28 -4
  242. package/node_modules/pi-lens/dist/clients/project-diagnostics/scanner.js +51 -20
  243. package/node_modules/pi-lens/dist/clients/project-lens-config.js +438 -122
  244. package/node_modules/pi-lens/dist/clients/project-scan-policy.js +3 -51
  245. package/node_modules/pi-lens/dist/clients/project-snapshot.js +52 -24
  246. package/node_modules/pi-lens/dist/clients/python-environment.js +217 -0
  247. package/node_modules/pi-lens/dist/clients/python-provenance.js +639 -0
  248. package/node_modules/pi-lens/dist/clients/quiet-window.js +6 -1
  249. package/node_modules/pi-lens/dist/clients/read-bridge.js +13 -21
  250. package/node_modules/pi-lens/dist/clients/read-expansion.js +9 -46
  251. package/node_modules/pi-lens/dist/clients/read-guard-logger.js +16 -5
  252. package/node_modules/pi-lens/dist/clients/read-guard-tool-lines.js +364 -212
  253. package/node_modules/pi-lens/dist/clients/read-guard.js +26 -2
  254. package/node_modules/pi-lens/dist/clients/recent-touches.js +2 -2
  255. package/node_modules/pi-lens/dist/clients/resource-sampler.js +195 -96
  256. package/node_modules/pi-lens/dist/clients/review-graph/builder.js +155 -114
  257. package/node_modules/pi-lens/dist/clients/review-graph/import-resolvers.js +1 -1
  258. package/node_modules/pi-lens/dist/clients/review-graph/service.js +55 -3
  259. package/node_modules/pi-lens/dist/clients/review-graph/shared-extraction-ir.js +7 -15
  260. package/node_modules/pi-lens/dist/clients/review-graph/workspace-modules.js +10 -74
  261. package/node_modules/pi-lens/dist/clients/review-graph-logger.js +9 -3
  262. package/node_modules/pi-lens/dist/clients/runtime-agent-end.js +19 -3
  263. package/node_modules/pi-lens/dist/clients/runtime-context.js +49 -16
  264. package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +25 -6
  265. package/node_modules/pi-lens/dist/clients/runtime-session.js +184 -32
  266. package/node_modules/pi-lens/dist/clients/runtime-tool-call.js +179 -36
  267. package/node_modules/pi-lens/dist/clients/runtime-tool-result.js +797 -243
  268. package/node_modules/pi-lens/dist/clients/runtime-turn.js +1028 -53
  269. package/node_modules/pi-lens/dist/clients/rust-client.js +31 -0
  270. package/node_modules/pi-lens/dist/clients/safe-spawn.js +33 -10
  271. package/node_modules/pi-lens/dist/clients/sanitize.js +7 -12
  272. package/node_modules/pi-lens/dist/clients/scan-utils.js +1 -56
  273. package/node_modules/pi-lens/dist/clients/scratch-tree-policy.js +1 -3
  274. package/node_modules/pi-lens/dist/clients/security-scan-client.js +3 -0
  275. package/node_modules/pi-lens/dist/clients/session-lifecycle.js +1 -1
  276. package/node_modules/pi-lens/dist/clients/session-start-observability.js +79 -0
  277. package/node_modules/pi-lens/dist/clients/session-summary.js +0 -24
  278. package/node_modules/pi-lens/dist/clients/sessionstart-logger.js +12 -3
  279. package/node_modules/pi-lens/dist/clients/sgconfig.js +7 -6
  280. package/node_modules/pi-lens/dist/clients/shared-checkout-guard.js +1 -1
  281. package/node_modules/pi-lens/dist/clients/skills-resolver.js +105 -0
  282. package/node_modules/pi-lens/dist/clients/smells-rollup.js +4 -4
  283. package/node_modules/pi-lens/dist/clients/startup-scan.js +2 -10
  284. package/node_modules/pi-lens/dist/clients/string-utils.js +13 -0
  285. package/node_modules/pi-lens/dist/clients/subagent-mode.js +17 -4
  286. package/node_modules/pi-lens/dist/clients/test-runner-client.js +176 -39
  287. package/node_modules/pi-lens/dist/clients/test-runner-delivery.js +244 -0
  288. package/node_modules/pi-lens/dist/clients/tool-definition.js +41 -1
  289. package/node_modules/pi-lens/dist/clients/tool-policy.js +92 -22
  290. package/node_modules/pi-lens/dist/clients/tree-sitter-cache.js +40 -40
  291. package/node_modules/pi-lens/dist/clients/tree-sitter-client.js +87 -100
  292. package/node_modules/pi-lens/dist/clients/tree-sitter-logger.js +2 -2
  293. package/node_modules/pi-lens/dist/clients/tree-sitter-query-loader.js +81 -1
  294. package/node_modules/pi-lens/dist/clients/tree-sitter-shared.js +51 -46
  295. package/node_modules/pi-lens/dist/clients/tree-sitter-symbol-extractor.js +28 -0
  296. package/node_modules/pi-lens/dist/clients/tui-fit.js +0 -4
  297. package/node_modules/pi-lens/dist/clients/typos-config.js +5 -0
  298. package/node_modules/pi-lens/dist/clients/user-notify.js +6 -6
  299. package/node_modules/pi-lens/dist/clients/widget-state.js +191 -26
  300. package/node_modules/pi-lens/dist/clients/word-index-logger.js +2 -9
  301. package/node_modules/pi-lens/dist/clients/word-index-store.js +23 -12
  302. package/node_modules/pi-lens/dist/clients/word-index.js +252 -47
  303. package/node_modules/pi-lens/dist/clients/workspace-topology.js +8 -1
  304. package/node_modules/pi-lens/dist/clients/zizmor-config.js +4 -1
  305. package/node_modules/pi-lens/dist/index.js +65899 -55340
  306. package/node_modules/pi-lens/dist/mcp/analyze-cli.js +3 -1
  307. package/node_modules/pi-lens/dist/mcp/build-staleness.js +1 -1
  308. package/node_modules/pi-lens/dist/mcp/server.js +127 -5
  309. package/node_modules/pi-lens/dist/scripts/lib/process-scan.mjs +583 -0
  310. package/node_modules/pi-lens/dist/scripts/lib/skills-predicate.mjs +129 -0
  311. package/node_modules/pi-lens/dist/tools/effective-config.js +89 -0
  312. package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +96 -25
  313. package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +104 -86
  314. package/node_modules/pi-lens/dist/tools/lsp-navigation.js +37 -16
  315. package/node_modules/pi-lens/dist/tools/lsp-structured-output.js +3 -3
  316. package/node_modules/pi-lens/dist/tools/render-compact.js +1 -1
  317. package/node_modules/pi-lens/dist/tools/shared.js +0 -1
  318. package/node_modules/pi-lens/dist/tools/symbol-search.js +1 -2
  319. package/node_modules/pi-lens/docs/agent-guide.md +64 -1
  320. package/node_modules/pi-lens/docs/configuration.md +222 -0
  321. package/node_modules/pi-lens/docs/dependencies.md +3 -3
  322. package/node_modules/pi-lens/docs/features.md +44 -5
  323. package/node_modules/pi-lens/docs/globalconfig.md +20 -0
  324. package/node_modules/pi-lens/docs/language-coverage.md +2 -2
  325. package/node_modules/pi-lens/docs/lsp-capability-matrix.md +9 -1
  326. package/node_modules/pi-lens/docs/pi-lens-fixer.md +25 -0
  327. package/node_modules/pi-lens/docs/pi-lens-investigator.md +25 -0
  328. package/node_modules/pi-lens/docs/pi-lens-reviewer.md +33 -0
  329. package/node_modules/pi-lens/docs/pi-lens-subagent.md +49 -0
  330. package/node_modules/pi-lens/docs/pi-lens-warden.md +55 -0
  331. package/node_modules/pi-lens/docs/public-api-stability.md +359 -0
  332. package/node_modules/pi-lens/docs/release-qa-baseline.md +190 -0
  333. package/node_modules/pi-lens/docs/servercapabilities.md +7 -3
  334. package/node_modules/pi-lens/docs/subagent-compat.md +110 -30
  335. package/node_modules/pi-lens/docs/tree-sitter_rules_catalog.md +2 -2
  336. package/node_modules/pi-lens/docs/word-index.md +1 -1
  337. package/node_modules/pi-lens/package.json +18 -35
  338. package/node_modules/pi-lens/rules/tree-sitter-queries/python/python-cross-language-method.yml +3 -3
  339. package/node_modules/pi-lens/rules/tree-sitter-queries/python/python-hallucinated-import.yml +2 -2
  340. package/node_modules/pi-lens/rules/tree-sitter-queries/python/python-sql-injection.yml +12 -2
  341. package/node_modules/pi-lens/rules/typos/_typos.toml +4 -2
  342. package/node_modules/pi-lens/scripts/analyze-pi-lens-logs.mjs +192 -1
  343. package/node_modules/pi-lens/scripts/install-selftest.mjs +58 -2
  344. package/node_modules/pi-lens/scripts/lib/skills-predicate.mjs +129 -0
  345. package/node_modules/pi-lens/scripts/lib/warm-loader-cache.mjs +1 -1
  346. package/node_modules/pi-lens/scripts/rpc-load-check.mjs +3 -1
  347. package/node_modules/pi-lens/scripts/warm-loader-cache.mjs +4 -2
  348. package/node_modules/pi-web-access/CHANGELOG.md +28 -0
  349. package/node_modules/pi-web-access/README.md +62 -15
  350. package/node_modules/pi-web-access/curator-page.ts +3 -1
  351. package/node_modules/pi-web-access/curator-server.ts +5 -1
  352. package/node_modules/pi-web-access/gemini-search.ts +8 -4
  353. package/node_modules/pi-web-access/github-extract.ts +242 -1
  354. package/node_modules/pi-web-access/index.ts +118 -64
  355. package/node_modules/pi-web-access/mistral-search.ts +281 -0
  356. package/node_modules/pi-web-access/package.json +2 -2
  357. package/node_modules/pi-web-access/perplexity.ts +14 -1
  358. package/node_modules/pi-web-access/utils.ts +23 -6
  359. package/node_modules/pi-web-access/xai-search.ts +96 -33
  360. package/package.json +6 -6
@@ -20,7 +20,7 @@ import * as crypto from "node:crypto";
20
20
  import * as fs from "node:fs";
21
21
  import * as path from "node:path";
22
22
  import { AstGrepClient } from "../ast-grep-client.js";
23
- import { loadBootstrapClients } from "../bootstrap.js";
23
+ import { loadBootstrapClients, residentBootstrapAccess, } from "../bootstrap.js";
24
24
  import { CacheManager, MCP_TURN_STATE_OWNER_ID, } from "../cache-manager.js";
25
25
  import { resetDispatchBaselines } from "../dispatch/integration.js";
26
26
  import { resetFormatService } from "../format-service.js";
@@ -96,23 +96,12 @@ export async function runSessionStart(cwd) {
96
96
  dbg: noop,
97
97
  log: noop,
98
98
  runtime: ctx.runtime,
99
- metricsClient: ctx.clients.metricsClient,
100
99
  cacheManager: ctx.cacheManager,
101
- todoScanner: ctx.clients.todoScanner,
102
100
  astGrepClient: ctx.astGrepClient,
103
- biomeClient: ctx.clients.biomeClient,
104
- ruffClient: ctx.clients.ruffClient,
105
- knipClient: ctx.clients.knipClient,
106
- jscpdClient: ctx.clients.jscpdClient,
107
- deadCodeClients: ctx.clients.deadCodeClients,
108
- govulncheckClient: ctx.clients.govulncheckClient,
109
- gitleaksClient: ctx.clients.gitleaksClient,
110
- trivyClient: ctx.clients.trivyClient,
111
- opengrepClient: ctx.clients.opengrepClient,
112
- depChecker: ctx.clients.depChecker,
113
- testRunnerClient: ctx.clients.testRunnerClient,
114
- goClient: ctx.clients.goClient,
115
- rustClient: ctx.clients.rustClient,
101
+ // The MCP server has already loaded the analyzer graph (an MCP call has
102
+ // nothing to defer to), so it hands the handler the same one-shape seam
103
+ // every other caller uses rather than a second, field-by-field shape.
104
+ bootstrap: residentBootstrapAccess(ctx.clients),
116
105
  ensureTool: async (name) => (await import("../installer/index.js")).ensureTool(name),
117
106
  cleanStaleTsBuildInfo: () => [],
118
107
  resetDispatchBaselines: (cwdArg) => resetDispatchBaselines(cwdArg ?? cwd),
@@ -106,6 +106,13 @@ export function toMemoryProcessUsage(mem, resourceUsage) {
106
106
  * process-global singletons) but every individual read is a `.size`/`.length`
107
107
  * access — see the module docstring's hard constraint.
108
108
  */
109
+ /** Byte attribution for `dispatchCaches`, from measured per-entry costs: three
110
+ * isolated-store runs put a recently-clean neighbor entry at 320 bytes, and
111
+ * #2282 measured a 500-file batch's 1,000 session-fact entries at 439,560
112
+ * bytes (~440 each). O(1) — the cache key and Map bookkeeping are included. */
113
+ export function estimateDispatchCacheBytes(stats) {
114
+ return (stats.recentlyCleanNeighborCacheSize * 320 + stats.sessionFactEntries * 440);
115
+ }
109
116
  export function collectMemorySampleSubsystems(wordIndex) {
110
117
  const reviewGraph = getReviewGraphWorkspaceCacheSnapshot();
111
118
  const treeSitterClient = getSharedTreeSitterClient();
@@ -149,9 +156,7 @@ export function collectMemorySampleSubsystems(wordIndex) {
149
156
  treeSitter,
150
157
  dispatchCaches: {
151
158
  ...dispatchCaches,
152
- // Three isolated-store runs measured 320 bytes per production entry.
153
- // Keep this O(1); the cache key and Map bookkeeping are included.
154
- estimatedBytes: dispatchCaches.recentlyCleanNeighborCacheSize * 320,
159
+ estimatedBytes: estimateDispatchCacheBytes(dispatchCaches),
155
160
  },
156
161
  };
157
162
  }
@@ -93,7 +93,7 @@ export function loadHistory() {
93
93
  /**
94
94
  * Save history to disk
95
95
  */
96
- export function saveHistory(history) {
96
+ function saveHistory(history) {
97
97
  const historyDir = getProjectDataDir(process.cwd());
98
98
  if (!fs.existsSync(historyDir)) {
99
99
  fs.mkdirSync(historyDir, { recursive: true });
@@ -161,10 +161,35 @@ export function captureSnapshot(filePath, metrics) {
161
161
  }, SAVE_DEBOUNCE_MS);
162
162
  saveTimer.unref?.();
163
163
  }
164
+ // --- Trend Analysis ---
164
165
  /**
165
- * Capture snapshots for multiple files (explicit, immediate save)
166
- * Used by /lens-metrics for batch capture
166
+ * Compute trend direction from history snapshots
167
+ * Uses last 3 snapshots for stability (or 2 if only 2 available)
167
168
  */
169
+ function computeTrend(history) {
170
+ if (history.length < 2)
171
+ return "stable";
172
+ const recent = history.slice(-3);
173
+ const first = recent[0];
174
+ const last = recent[recent.length - 1];
175
+ // Use MI as primary indicator, cognitive as secondary
176
+ const miDelta = last.mi - first.mi;
177
+ const cogDelta = last.cognitive - first.cognitive;
178
+ // Thresholds (MI changes < 2 are noise)
179
+ if (miDelta > 2)
180
+ return "improving";
181
+ if (miDelta < -2)
182
+ return "regressing";
183
+ // If MI is stable, check cognitive
184
+ if (cogDelta < -10)
185
+ return "improving";
186
+ if (cogDelta > 10)
187
+ return "regressing";
188
+ return "stable";
189
+ }
190
+ // --- Technical Debt Index (TDI) ---
191
+ // Test-reached through a child-process `require` string
192
+ /** @public — reached through a child-process `require` string in tests/clients/metrics-history-stderr.test.ts; knip cannot see it. */
168
193
  export function captureSnapshots(files) {
169
194
  const history = loadHistory();
170
195
  for (const file of files) {
@@ -200,110 +225,6 @@ export function captureSnapshots(files) {
200
225
  saveHistory(history);
201
226
  return history;
202
227
  }
203
- // --- Trend Analysis ---
204
- /**
205
- * Compute trend direction from history snapshots
206
- * Uses last 3 snapshots for stability (or 2 if only 2 available)
207
- */
208
- export function computeTrend(history) {
209
- if (history.length < 2)
210
- return "stable";
211
- const recent = history.slice(-3);
212
- const first = recent[0];
213
- const last = recent[recent.length - 1];
214
- // Use MI as primary indicator, cognitive as secondary
215
- const miDelta = last.mi - first.mi;
216
- const cogDelta = last.cognitive - first.cognitive;
217
- // Thresholds (MI changes < 2 are noise)
218
- if (miDelta > 2)
219
- return "improving";
220
- if (miDelta < -2)
221
- return "regressing";
222
- // If MI is stable, check cognitive
223
- if (cogDelta < -10)
224
- return "improving";
225
- if (cogDelta > 10)
226
- return "regressing";
227
- return "stable";
228
- }
229
- /**
230
- * Get delta between current snapshot and previous
231
- */
232
- export function getDelta(history) {
233
- if (!history || history.history.length < 2)
234
- return null;
235
- const current = history.history[history.history.length - 1];
236
- const previous = history.history[history.history.length - 2];
237
- return {
238
- mi: Math.round((current.mi - previous.mi) * 10) / 10,
239
- cognitive: current.cognitive - previous.cognitive,
240
- trend: history.trend,
241
- };
242
- }
243
- /**
244
- * Get trend emoji for display
245
- */
246
- export function getTrendEmoji(trend) {
247
- switch (trend) {
248
- case "improving":
249
- return "📈";
250
- case "regressing":
251
- return "📉";
252
- default:
253
- return "➡️";
254
- }
255
- }
256
- /**
257
- * Get trend summary across all files
258
- */
259
- export function getTrendSummary(history) {
260
- let improving = 0;
261
- let regressing = 0;
262
- let stable = 0;
263
- const regressions = [];
264
- for (const [file, fileHistory] of Object.entries(history.files)) {
265
- switch (fileHistory.trend) {
266
- case "improving":
267
- improving++;
268
- break;
269
- case "regressing": {
270
- regressing++;
271
- const delta = getDelta(fileHistory);
272
- if (delta) {
273
- regressions.push({ file, miDelta: delta.mi });
274
- }
275
- break;
276
- }
277
- default:
278
- stable++;
279
- }
280
- }
281
- // Sort regressions by MI delta (worst first)
282
- regressions.sort((a, b) => a.miDelta - b.miDelta);
283
- return {
284
- improving,
285
- regressing,
286
- stable,
287
- worstRegressions: regressions.slice(0, 5),
288
- };
289
- }
290
- /**
291
- * Format trend for metrics table
292
- */
293
- export function formatTrendCell(filePath, history) {
294
- const relativePath = path.relative(process.cwd(), filePath);
295
- const fileHistory = history.files[relativePath];
296
- if (!fileHistory || fileHistory.history.length < 2) {
297
- return "—"; // No history
298
- }
299
- const delta = getDelta(fileHistory);
300
- if (!delta)
301
- return "—";
302
- const emoji = getTrendEmoji(delta.trend);
303
- const miSign = delta.mi > 0 ? "+" : "";
304
- const miColor = delta.mi > 0 ? "🟢" : delta.mi < 0 ? "🔴" : "⚪";
305
- return `${emoji} ${miColor}${miSign}${delta.mi}`;
306
- }
307
228
  /**
308
229
  * Calculate Technical Debt Index for the project.
309
230
  * Score: 0 = perfect, 100 = maximum debt.
@@ -27,6 +27,7 @@
27
27
  * slice can add them once middle-man analysis has an AST-node entry point
28
28
  * rather than this text-based one.
29
29
  */
30
+ import { escapeRegExp } from "./string-utils.js";
30
31
  /** Self-reference token + member-access separator, per languageId. Both the
31
32
  * self→field and field→method hops use the SAME separator in every language
32
33
  * covered here (true even for PHP's `$this->field->method()`). */
@@ -65,9 +66,6 @@ const MIN_CANDIDATE_METHODS = 2;
65
66
  * "mostly" — a class with a couple of forwarding convenience methods among
66
67
  * real logic must NOT flag (the exact distinction #325 asks for). */
67
68
  const DELEGATION_RATIO_THRESHOLD = 0.9;
68
- function escapeRegExp(s) {
69
- return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
70
- }
71
69
  function buildForwardRegex(token, sep) {
72
70
  const t = escapeRegExp(token);
73
71
  const s = escapeRegExp(sep);
@@ -98,7 +96,7 @@ function paramNamesFromSignature(signature, languageId) {
98
96
  .map((raw) => {
99
97
  let name = raw;
100
98
  // Rest/spread params forward as themselves textually (`...args`).
101
- const isRest = /^\.\.\./.test(name);
99
+ const isRest = name.startsWith("...");
102
100
  name = name.replace(/^\.\.\./, "");
103
101
  name = name.split("=")[0].trim(); // strip default value
104
102
  name = name.split(":")[0].trim(); // strip type annotation
@@ -161,7 +159,7 @@ function isAccessorLine(rawLine) {
161
159
  * extracted data — no re-parsing, no file I/O beyond the lines already read
162
160
  * by the caller.
163
161
  */
164
- export function analyzeMiddleMan(classEntry, lines, languageId) {
162
+ function analyzeMiddleMan(classEntry, lines, languageId) {
165
163
  if (!languageId)
166
164
  return undefined;
167
165
  const selfSpec = SELF_TOKEN[languageId];
@@ -41,63 +41,36 @@ import { loadCallGraph, } from "./call-graph.js";
41
41
  import { resolveImportToFiles } from "./review-graph/import-resolvers.js";
42
42
  import { buildSymbolId } from "./review-graph/symbol-id.js";
43
43
  import { getSharedTreeSitterClient, resolveTreeSitterLanguage, } from "./tree-sitter-shared.js";
44
- import { TreeSitterSymbolExtractor, } from "./tree-sitter-symbol-extractor.js";
44
+ import { symbolExtractionGrammar, TreeSitterSymbolExtractor, } from "./tree-sitter-symbol-extractor.js";
45
45
  // NOTE: live-LSP enrichment is NO LONGER called on this read path (#256). Firing
46
46
  // LSP per read — speculatively, on the agent's fan-out path — repeatedly OOM'd
47
47
  // pi. The enrichment logic is kept as a separate module (clients/module-report-
48
48
  // lsp.ts) to be re-homed in #236, where LSP writes provenance-tagged edges INTO
49
49
  // the review graph (computed once, persisted) so this path just reads them.
50
50
  /** Hard payload bound for the per-symbol who-uses-this section. */
51
- export const MAX_MODULE_REPORT_REFS = 100;
51
+ const MAX_MODULE_REPORT_REFS = 100;
52
52
  function normalizeMaxRefsPerSymbol(value) {
53
53
  if (value === undefined || !Number.isFinite(value))
54
54
  return 10;
55
55
  return Math.min(MAX_MODULE_REPORT_REFS, Math.max(1, Math.floor(value)));
56
56
  }
57
- // kind -> tree-sitter languageId. The languageId keys BOTH the grammar map
58
- // (tree-sitter-client) and SYMBOL_QUERIES (tree-sitter-symbol-extractor), so it
59
- // must match a key present in both. jsts/cxx are extension-split kinds resolved
60
- // through the SHARED ext→grammar resolver below (never a local extension map —
61
- // #887). Using these gives the primary languages the same rich outline
62
- // (classes/interfaces/types/signatures) as every other language, not the
63
- // functions-only FunctionSummary.
64
- const KIND_TO_TS_LANG = {
65
- python: "python",
66
- go: "go",
67
- rust: "rust",
68
- ruby: "ruby",
69
- java: "java",
70
- kotlin: "kotlin",
71
- dart: "dart",
72
- elixir: "elixir",
73
- csharp: "csharp",
74
- php: "php",
75
- swift: "swift",
76
- lua: "lua",
77
- ocaml: "ocaml",
78
- zig: "zig",
79
- shell: "bash",
80
- // cxx resolved by extension below (c vs cpp)
81
- };
82
57
  export function tsLangForFile(filePath, kind) {
83
- // jsts/cxx are extension-split kinds: resolve them through the shared
84
- // ext→grammar authority (tree-sitter-shared.ts EXT_TO_LANG) — the SAME
85
- // resolver the dispatch tree-sitter runner, fact providers, project scanner
86
- // and read expansion use — so a file is parsed and TreeCache-keyed
87
- // (`languageId:path`) under exactly one grammar process-wide. #887: this
88
- // used to hand-roll a local map that sent .js/.mjs/.cjs to the typescript
89
- // grammar and .jsx to tsx, so every plain-JS file was parsed and cached
90
- // twice under two grammars and ran TS-grammar symbol queries on JS trees.
91
- // Extensions the shared map does not cover (.svelte/.vue for jsts; the
92
- // module-interface/Objective-C/CUDA tail for cxx) keep the historical
93
- // kind default.
58
+ // jsts is an extension-split kind with no single grammar: resolve it through
59
+ // the SHARED ext -> grammar authority (language-registry via
60
+ // tree-sitter-shared) so a file is parsed and TreeCache-keyed
61
+ // (`languageId:path`) under exactly one grammar process-wide. #887: this used
62
+ // to hand-roll a local map that sent .js/.mjs/.cjs to the typescript grammar
63
+ // and .jsx to tsx, so every plain-JS file was parsed and cached twice under
64
+ // two grammars and ran TS-grammar symbol queries on JS trees. .svelte/.vue
65
+ // have no grammar wiring and keep the historical kind default.
94
66
  if (kind === "jsts") {
95
67
  return resolveTreeSitterLanguage(filePath) ?? "typescript";
96
68
  }
97
- if (kind === "cxx") {
98
- return resolveTreeSitterLanguage(filePath) ?? "cpp";
99
- }
100
- return kind ? KIND_TO_TS_LANG[kind] : undefined;
69
+ // Every other kind goes through the registry-derived resolver, which handles
70
+ // the cxx `.c`/`.h`-vs-cpp split and only answers for grammars that have
71
+ // symbol queries. #2424 deleted the hand-kept kind -> languageId map that
72
+ // used to live here alongside review-graph's copy of the same thing.
73
+ return symbolExtractionGrammar(kind, filePath);
101
74
  }
102
75
  // Per-language extractor cache — extractors are cheap once their queries are
103
76
  // compiled. The shared TreeSitterClient (which memoizes grammar init) is obtained
@@ -867,7 +840,7 @@ const pythonCallbackRules = {
867
840
  include: true,
868
841
  };
869
842
  }
870
- if (/\.add_done_callback$/.test(callName)) {
843
+ if (callName.endsWith(".add_done_callback")) {
871
844
  return {
872
845
  kind: "future_callback",
873
846
  flags: withFlag(base.flags, "future completion"),
@@ -1012,7 +985,7 @@ const javaCallbackRules = {
1012
985
  const base = classifyGenericCallback(ctx);
1013
986
  const obj = ancestorOfType(ctx.node, new Set(["object_creation_expression"]), 3);
1014
987
  const created = obj?.children?.find((c) => c.type === "type_identifier");
1015
- if (created && /Thread$/.test(created.text)) {
988
+ if (created && created.text.endsWith("Thread")) {
1016
989
  return {
1017
990
  kind: "task",
1018
991
  flags: withFlag(base.flags, "thread"),
@@ -1734,8 +1707,10 @@ function levenshteinDistance(a, b) {
1734
1707
  return bl;
1735
1708
  if (bl === 0)
1736
1709
  return al;
1737
- let prev = new Array(bl + 1);
1738
- let curr = new Array(bl + 1);
1710
+ let prev = [];
1711
+ prev.length = bl + 1;
1712
+ let curr = [];
1713
+ curr.length = bl + 1;
1739
1714
  for (let j = 0; j <= bl; j++)
1740
1715
  prev[j] = j;
1741
1716
  for (let i = 1; i <= al; i++) {