@duckmind/dm-darwin-x64 0.66.4 → 0.66.6

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 (1115) hide show
  1. package/README.md +4 -0
  2. package/dm +2 -2
  3. package/extensions/.dm-extensions.json +755 -37
  4. package/extensions/dm-lens/clients/actionable-warnings.js +63 -11
  5. package/extensions/dm-lens/clients/advisory-provenance.js +5 -3
  6. package/extensions/dm-lens/clients/agent-nudge.js +106 -2
  7. package/extensions/dm-lens/clients/analysis-root.js +103 -0
  8. package/extensions/dm-lens/clients/ast-grep-client.js +18 -7
  9. package/extensions/dm-lens/clients/ast-grep-rule-manager.js +35 -12
  10. package/extensions/dm-lens/clients/biome-client.js +18 -12
  11. package/extensions/dm-lens/clients/blocker-freshness.js +1 -9
  12. package/extensions/dm-lens/clients/bounded-pid-file-lock.js +141 -30
  13. package/extensions/dm-lens/clients/bounded-telemetry.js +3 -0
  14. package/extensions/dm-lens/clients/cache/rule-cache.js +2 -17
  15. package/extensions/dm-lens/clients/cache-manager.js +105 -17
  16. package/extensions/dm-lens/clients/cargo-manifest.js +23 -3
  17. package/extensions/dm-lens/clients/complexity-client.js +1 -1
  18. package/extensions/dm-lens/clients/config-core/normalize.js +9 -0
  19. package/extensions/dm-lens/clients/config-core/schema.js +3 -0
  20. package/extensions/dm-lens/clients/config-schema.js +105 -2
  21. package/extensions/dm-lens/clients/confirmed-delete.js +11 -0
  22. package/extensions/dm-lens/clients/custom-rule-locations.js +28 -0
  23. package/extensions/dm-lens/clients/dead-code-client.js +81 -12
  24. package/extensions/dm-lens/clients/deferred-runner-blockers.js +108 -0
  25. package/extensions/dm-lens/clients/deferred-test-targets.js +31 -0
  26. package/extensions/dm-lens/clients/degradation-ledger.js +21 -3
  27. package/extensions/dm-lens/clients/demoted-finding-render.js +5 -2
  28. package/extensions/dm-lens/clients/dependency-checker.js +13 -4
  29. package/extensions/dm-lens/clients/diagnostic-line-freshness.js +3 -5
  30. package/extensions/dm-lens/clients/dispatch/adopted-root-runners.js +22 -0
  31. package/extensions/dm-lens/clients/dispatch/dispatcher.js +105 -27
  32. package/extensions/dm-lens/clients/dispatch/facts/comment-facts.js +5 -2
  33. package/extensions/dm-lens/clients/dispatch/facts/function-facts.js +1 -1
  34. package/extensions/dm-lens/clients/dispatch/facts/import-facts.js +2 -2
  35. package/extensions/dm-lens/clients/dispatch/facts/tree-sitter-facts.js +2 -2
  36. package/extensions/dm-lens/clients/dispatch/facts/try-catch-facts.js +1 -1
  37. package/extensions/dm-lens/clients/dispatch/finding-policy.js +12 -4
  38. package/extensions/dm-lens/clients/dispatch/integration.js +60 -15
  39. package/extensions/dm-lens/clients/dispatch/known-runner-ids.js +13 -0
  40. package/extensions/dm-lens/clients/dispatch/pending-runner-findings.js +66 -11
  41. package/extensions/dm-lens/clients/dispatch/plan.js +6 -0
  42. package/extensions/dm-lens/clients/dispatch/rule-id-normalize.js +9 -2
  43. package/extensions/dm-lens/clients/dispatch/rule-policy.js +33 -4
  44. package/extensions/dm-lens/clients/dispatch/runners/ast-grep-napi.js +9 -5
  45. package/extensions/dm-lens/clients/dispatch/runners/biome-check.js +5 -2
  46. package/extensions/dm-lens/clients/dispatch/runners/cue-vet.js +7 -3
  47. package/extensions/dm-lens/clients/dispatch/runners/detekt.js +3 -3
  48. package/extensions/dm-lens/clients/dispatch/runners/fact-rules.js +3 -3
  49. package/extensions/dm-lens/clients/dispatch/runners/fish-indent.js +10 -6
  50. package/extensions/dm-lens/clients/dispatch/runners/gleam-check.js +8 -5
  51. package/extensions/dm-lens/clients/dispatch/runners/go-vet.js +2 -1
  52. package/extensions/dm-lens/clients/dispatch/runners/lsp.js +28 -8
  53. package/extensions/dm-lens/clients/dispatch/runners/oxlint.js +2 -2
  54. package/extensions/dm-lens/clients/dispatch/runners/php-lint.js +6 -7
  55. package/extensions/dm-lens/clients/dispatch/runners/prisma-validate.js +18 -8
  56. package/extensions/dm-lens/clients/dispatch/runners/psscriptanalyzer.js +3 -3
  57. package/extensions/dm-lens/clients/dispatch/runners/pyright.js +1 -1
  58. package/extensions/dm-lens/clients/dispatch/runners/rust-clippy.js +25 -6
  59. package/extensions/dm-lens/clients/dispatch/runners/shellcheck.js +71 -4
  60. package/extensions/dm-lens/clients/dispatch/runners/shfmt.js +5 -1
  61. package/extensions/dm-lens/clients/dispatch/runners/spellcheck.js +3 -3
  62. package/extensions/dm-lens/clients/dispatch/runners/swiftlint.js +3 -3
  63. package/extensions/dm-lens/clients/dispatch/runners/taplo.js +17 -5
  64. package/extensions/dm-lens/clients/dispatch/runners/tree-sitter.js +12 -5
  65. package/extensions/dm-lens/clients/dispatch/runners/trivy-config.js +3 -3
  66. package/extensions/dm-lens/clients/dispatch/runners/utils/runner-helpers.js +127 -46
  67. package/extensions/dm-lens/clients/dispatch/runners/utils/tool-failure.js +11 -6
  68. package/extensions/dm-lens/clients/dispatch/runners/vale.js +3 -3
  69. package/extensions/dm-lens/clients/dispatch/runners/yaml-rule-parser.js +8 -1
  70. package/extensions/dm-lens/clients/dispatch/types.js +21 -1
  71. package/extensions/dm-lens/clients/dispatch/utils/format-utils.js +13 -0
  72. package/extensions/dm-lens/clients/effective-config.js +14 -3
  73. package/extensions/dm-lens/clients/ephemeral-root.js +71 -0
  74. package/extensions/dm-lens/clients/file-kinds.js +9 -0
  75. package/extensions/dm-lens/clients/file-mutation-queue.js +95 -0
  76. package/extensions/dm-lens/clients/file-utils.js +87 -8
  77. package/extensions/dm-lens/clients/finding-delivery-gate.js +5 -2
  78. package/extensions/dm-lens/clients/fix-run-restore.js +416 -0
  79. package/extensions/dm-lens/clients/format-events-publish.js +82 -2
  80. package/extensions/dm-lens/clients/format-service.js +10 -5
  81. package/extensions/dm-lens/clients/formatters.js +29 -12
  82. package/extensions/dm-lens/clients/generation-guard.js +50 -8
  83. package/extensions/dm-lens/clients/generation-lock.js +184 -0
  84. package/extensions/dm-lens/clients/git-guard.js +19 -1
  85. package/extensions/dm-lens/clients/gitleaks-client.js +13 -4
  86. package/extensions/dm-lens/clients/grammar-source.js +5 -0
  87. package/extensions/dm-lens/clients/grammar-wasm-imports.js +48 -0
  88. package/extensions/dm-lens/clients/gzip-stage-write.js +15 -7
  89. package/extensions/dm-lens/clients/hard-failure-summary.js +28 -0
  90. package/extensions/dm-lens/clients/hook-budgets.js +1 -0
  91. package/extensions/dm-lens/clients/inline-blocker-fields.js +8 -0
  92. package/extensions/dm-lens/clients/install-diagnostics.js +31 -16
  93. package/extensions/dm-lens/clients/installer/index.js +238 -58
  94. package/extensions/dm-lens/clients/instance-reaper.js +164 -52
  95. package/extensions/dm-lens/clients/instance-registry-lock.js +117 -76
  96. package/extensions/dm-lens/clients/instance-registry-tail.js +17 -0
  97. package/extensions/dm-lens/clients/instance-registry.js +248 -91
  98. package/extensions/dm-lens/clients/io-bridge-contract.js +7 -0
  99. package/extensions/dm-lens/clients/io-bridge.js +372 -0
  100. package/extensions/dm-lens/clients/jscpd-client.js +83 -35
  101. package/extensions/dm-lens/clients/knip-client.js +75 -6
  102. package/extensions/dm-lens/clients/knip-scan-roots.js +29 -0
  103. package/extensions/dm-lens/clients/language-policy.js +2 -0
  104. package/extensions/dm-lens/clients/language-profile.js +4 -1
  105. package/extensions/dm-lens/clients/language-registry.js +4 -1
  106. package/extensions/dm-lens/clients/latency-logger.js +11 -1
  107. package/extensions/dm-lens/clients/lens-config.js +10 -1
  108. package/extensions/dm-lens/clients/lens-engine.js +1 -1
  109. package/extensions/dm-lens/clients/lens-flag-registry.js +14 -24
  110. package/extensions/dm-lens/clients/lsp/aggregation.js +9 -8
  111. package/extensions/dm-lens/clients/lsp/auxiliary-lifecycle.js +23 -0
  112. package/extensions/dm-lens/clients/lsp/capabilities.js +98 -0
  113. package/extensions/dm-lens/clients/lsp/cascade-tier.js +8 -3
  114. package/extensions/dm-lens/clients/lsp/client.js +282 -48
  115. package/extensions/dm-lens/clients/lsp/config.js +247 -15
  116. package/extensions/dm-lens/clients/lsp/document-drift.js +23 -11
  117. package/extensions/dm-lens/clients/lsp/edits.js +137 -85
  118. package/extensions/dm-lens/clients/lsp/grouping.js +38 -0
  119. package/extensions/dm-lens/clients/lsp/index.js +484 -275
  120. package/extensions/dm-lens/clients/lsp/launch.js +106 -6
  121. package/extensions/dm-lens/clients/lsp/pending-aux-coverage.js +37 -7
  122. package/extensions/dm-lens/clients/lsp/resolved-config.js +188 -0
  123. package/extensions/dm-lens/clients/lsp/server-covers.js +8 -0
  124. package/extensions/dm-lens/clients/lsp/server-traits.js +39 -0
  125. package/extensions/dm-lens/clients/lsp/server.js +259 -34
  126. package/extensions/dm-lens/clients/lsp/service-singleton.js +59 -0
  127. package/extensions/dm-lens/clients/lsp/session-roots.js +1 -1
  128. package/extensions/dm-lens/clients/lsp/wait-policy/classification.js +2 -1
  129. package/extensions/dm-lens/clients/lsp/wait-policy/strategies.js +25 -4
  130. package/extensions/dm-lens/clients/lsp/workspace-diagnostics-cache.js +6 -3
  131. package/extensions/dm-lens/clients/lsp-budget.js +9 -5
  132. package/extensions/dm-lens/clients/lsp-document-symbols.js +1 -1
  133. package/extensions/dm-lens/clients/lsp-lazy.js +1 -1
  134. package/extensions/dm-lens/clients/lsp-mutation.js +44 -8
  135. package/extensions/dm-lens/clients/lsp-status.js +5 -7
  136. package/extensions/dm-lens/clients/mcp/analyze.js +24 -11
  137. package/extensions/dm-lens/clients/mcp/ipc.js +26 -7
  138. package/extensions/dm-lens/clients/mcp/session.js +1 -1
  139. package/extensions/dm-lens/clients/memory-sampler.js +48 -3
  140. package/extensions/dm-lens/clients/module-report-lsp.js +1 -1
  141. package/extensions/dm-lens/clients/module-report.js +9 -3
  142. package/extensions/dm-lens/clients/mutating-tool.js +12 -3
  143. package/extensions/dm-lens/clients/mutation-attribution.js +8 -0
  144. package/extensions/dm-lens/clients/mutation-bridge.js +181 -48
  145. package/extensions/dm-lens/clients/ndjson-logger.js +33 -0
  146. package/extensions/dm-lens/clients/observed-mutation-sources.js +1 -1
  147. package/extensions/dm-lens/clients/observed-mutation.js +40 -20
  148. package/extensions/dm-lens/clients/opaque-mutation-scan.js +40 -13
  149. package/extensions/dm-lens/clients/opengrep-client.js +6 -3
  150. package/extensions/dm-lens/clients/package-manager.js +61 -6
  151. package/extensions/dm-lens/clients/path-utils.js +77 -18
  152. package/extensions/dm-lens/clients/performance-report.js +1 -1
  153. package/extensions/dm-lens/clients/persist-worker-stats.js +8 -0
  154. package/extensions/dm-lens/clients/persistent-reverify.js +5 -1
  155. package/extensions/dm-lens/clients/pipeline.js +310 -114
  156. package/extensions/dm-lens/clients/probe-home-state.js +6 -1
  157. package/extensions/dm-lens/clients/process-bridge.js +28 -0
  158. package/extensions/dm-lens/clients/process-snapshot.js +115 -2
  159. package/extensions/dm-lens/clients/project-changes.js +81 -19
  160. package/extensions/dm-lens/clients/project-diagnostics/fresh-fetch.js +18 -13
  161. package/extensions/dm-lens/clients/project-lens-config.js +32 -5
  162. package/extensions/dm-lens/clients/project-scale.js +1 -1
  163. package/extensions/dm-lens/clients/project-snapshot-fingerprint.js +17 -12
  164. package/extensions/dm-lens/clients/project-snapshot-persist-worker.js +2 -3
  165. package/extensions/dm-lens/clients/project-snapshot.js +229 -64
  166. package/extensions/dm-lens/clients/python-environment.js +44 -2
  167. package/extensions/dm-lens/clients/quiet-window.js +6 -3
  168. package/extensions/dm-lens/clients/read-bridge.js +28 -20
  169. package/extensions/dm-lens/clients/read-expansion.js +1 -1
  170. package/extensions/dm-lens/clients/read-guard-branch.js +129 -0
  171. package/extensions/dm-lens/clients/read-guard-logger.js +11 -3
  172. package/extensions/dm-lens/clients/read-guard-tool-lines.js +16 -8
  173. package/extensions/dm-lens/clients/read-guard.js +516 -176
  174. package/extensions/dm-lens/clients/review-graph/builder.js +132 -54
  175. package/extensions/dm-lens/clients/review-graph/git-identity.js +59 -1
  176. package/extensions/dm-lens/clients/review-graph/import-resolvers.js +6 -8
  177. package/extensions/dm-lens/clients/runtime-agent-end.js +271 -68
  178. package/extensions/dm-lens/clients/runtime-coordinator.js +386 -74
  179. package/extensions/dm-lens/clients/runtime-session.js +174 -31
  180. package/extensions/dm-lens/clients/runtime-tool-call.js +92 -17
  181. package/extensions/dm-lens/clients/runtime-tool-result.js +477 -137
  182. package/extensions/dm-lens/clients/runtime-turn.js +949 -355
  183. package/extensions/dm-lens/clients/safe-spawn.js +12 -4
  184. package/extensions/dm-lens/clients/scanner-temp-root.js +8 -0
  185. package/extensions/dm-lens/clients/scratch-tree-policy.js +9 -0
  186. package/extensions/dm-lens/clients/search-read-registration.js +2 -1
  187. package/extensions/dm-lens/clients/session-lifecycle.js +120 -18
  188. package/extensions/dm-lens/clients/session-scope.js +456 -0
  189. package/extensions/dm-lens/clients/session-state-store.js +23 -20
  190. package/extensions/dm-lens/clients/sg-runner.js +24 -6
  191. package/extensions/dm-lens/clients/sgconfig.js +35 -5
  192. package/extensions/dm-lens/clients/startup-scan.js +10 -2
  193. package/extensions/dm-lens/clients/test-runner-client.js +258 -48
  194. package/extensions/dm-lens/clients/test-runner-delivery.js +46 -9
  195. package/extensions/dm-lens/clients/test-target-roots.js +20 -0
  196. package/extensions/dm-lens/clients/tool-agreement.js +282 -19
  197. package/extensions/dm-lens/clients/tool-config.js +1 -0
  198. package/extensions/dm-lens/clients/tool-event.js +6 -0
  199. package/extensions/dm-lens/clients/tool-probe.js +8 -0
  200. package/extensions/dm-lens/clients/tool-set-policy.js +36 -26
  201. package/extensions/dm-lens/clients/tree-sitter-client.js +304 -34
  202. package/extensions/dm-lens/clients/tree-sitter-query-loader.js +76 -2
  203. package/extensions/dm-lens/clients/tree-sitter-shared.js +2 -2
  204. package/extensions/dm-lens/clients/tree-sitter-symbol-extractor.js +3 -1
  205. package/extensions/dm-lens/clients/trivy-client.js +40 -7
  206. package/extensions/dm-lens/clients/turn-end/delivery-holds.js +59 -0
  207. package/extensions/dm-lens/clients/widget-state.js +36 -2
  208. package/extensions/dm-lens/clients/word-index.js +73 -5
  209. package/extensions/dm-lens/clients/workspace-topology.js +11 -4
  210. package/extensions/dm-lens/clients/write-ordering-guard.js +4 -0
  211. package/extensions/dm-lens/config/dependency-cruiser-eager-allowlist.json +9 -3
  212. package/extensions/dm-lens/dist/clients/actionable-warnings-logger.js +24 -0
  213. package/extensions/dm-lens/dist/clients/actionable-warnings.js +1062 -0
  214. package/extensions/dm-lens/dist/clients/advisory-provenance.js +387 -0
  215. package/extensions/dm-lens/dist/clients/agent-behavior-client.js +94 -0
  216. package/extensions/dm-lens/dist/clients/agent-nudge.js +253 -0
  217. package/extensions/dm-lens/dist/clients/analysed-root.js +1 -0
  218. package/extensions/dm-lens/dist/clients/analysis-root.js +100 -0
  219. package/extensions/dm-lens/dist/clients/ast-grep-client.js +587 -0
  220. package/extensions/dm-lens/dist/clients/ast-grep-rule-manager.js +137 -0
  221. package/extensions/dm-lens/dist/clients/ast-grep-tool-logger.js +85 -0
  222. package/extensions/dm-lens/dist/clients/ast-grep-types.js +1 -0
  223. package/extensions/dm-lens/dist/clients/ast-grep-yaml-synth.js +109 -0
  224. package/extensions/dm-lens/dist/clients/atomic-write-staging.js +66 -0
  225. package/extensions/dm-lens/dist/clients/atomic-write.js +37 -0
  226. package/extensions/dm-lens/dist/clients/availability-probe-flight.js +11 -0
  227. package/extensions/dm-lens/dist/clients/bash-file-access.js +830 -0
  228. package/extensions/dm-lens/dist/clients/biome-client.js +223 -0
  229. package/extensions/dm-lens/dist/clients/blocker-freshness.js +377 -0
  230. package/extensions/dm-lens/dist/clients/blocker-past-eof.js +49 -0
  231. package/extensions/dm-lens/dist/clients/bootstrap.js +246 -0
  232. package/extensions/dm-lens/dist/clients/bounded-cache.js +105 -0
  233. package/extensions/dm-lens/dist/clients/bounded-pid-file-lock.js +275 -0
  234. package/extensions/dm-lens/dist/clients/bounded-telemetry.js +107 -0
  235. package/extensions/dm-lens/dist/clients/build-identity.js +45 -0
  236. package/extensions/dm-lens/dist/clients/bundled-resource-health.js +41 -0
  237. package/extensions/dm-lens/dist/clients/bus-events-logger.js +48 -0
  238. package/extensions/dm-lens/dist/clients/bus-publish.js +117 -0
  239. package/extensions/dm-lens/dist/clients/cache/rule-cache.js +87 -0
  240. package/extensions/dm-lens/dist/clients/cache-manager.js +428 -0
  241. package/extensions/dm-lens/dist/clients/cache-observability.js +847 -0
  242. package/extensions/dm-lens/dist/clients/call-graph.js +628 -0
  243. package/extensions/dm-lens/dist/clients/cargo-manifest.js +171 -0
  244. package/extensions/dm-lens/dist/clients/cascade-budget.js +52 -0
  245. package/extensions/dm-lens/dist/clients/cascade-format.js +160 -0
  246. package/extensions/dm-lens/dist/clients/cascade-logger.js +22 -0
  247. package/extensions/dm-lens/dist/clients/cascade-types.js +1 -0
  248. package/extensions/dm-lens/dist/clients/child-unref.js +59 -0
  249. package/extensions/dm-lens/dist/clients/code-quality-warnings.js +192 -0
  250. package/extensions/dm-lens/dist/clients/codebase-model.js +110 -0
  251. package/extensions/dm-lens/dist/clients/collateral-test-role.js +8 -0
  252. package/extensions/dm-lens/dist/clients/complexity-client.js +398 -0
  253. package/extensions/dm-lens/dist/clients/config-core/deny.js +117 -0
  254. package/extensions/dm-lens/dist/clients/config-core/index.js +2 -0
  255. package/extensions/dm-lens/dist/clients/config-core/merge.js +228 -0
  256. package/extensions/dm-lens/dist/clients/config-core/normalize.js +226 -0
  257. package/extensions/dm-lens/dist/clients/config-core/process-spec.js +147 -0
  258. package/extensions/dm-lens/dist/clients/config-core/provenance.js +54 -0
  259. package/extensions/dm-lens/dist/clients/config-core/records.js +79 -0
  260. package/extensions/dm-lens/dist/clients/config-core/resolve.js +48 -0
  261. package/extensions/dm-lens/dist/clients/config-core/safe-object.js +22 -0
  262. package/extensions/dm-lens/dist/clients/config-core/schema.js +93 -0
  263. package/extensions/dm-lens/dist/clients/config-diagnostic-codes.js +90 -0
  264. package/extensions/dm-lens/dist/clients/config-locations.js +175 -0
  265. package/extensions/dm-lens/dist/clients/config-resolve.js +359 -0
  266. package/extensions/dm-lens/dist/clients/config-schema.js +230 -0
  267. package/extensions/dm-lens/dist/clients/config-warn.js +146 -0
  268. package/extensions/dm-lens/dist/clients/confirmed-delete.js +11 -0
  269. package/extensions/dm-lens/dist/clients/console-guard-install.js +4 -0
  270. package/extensions/dm-lens/dist/clients/cooperative-budget.js +36 -0
  271. package/extensions/dm-lens/dist/clients/custom-rule-locations.js +28 -0
  272. package/extensions/dm-lens/dist/clients/dead-code-client.js +408 -0
  273. package/extensions/dm-lens/dist/clients/dead-code-logger.js +18 -0
  274. package/extensions/dm-lens/dist/clients/deadline-utils.js +117 -0
  275. package/extensions/dm-lens/dist/clients/debug-handles.js +121 -0
  276. package/extensions/dm-lens/dist/clients/debug-heap.js +80 -0
  277. package/extensions/dm-lens/dist/clients/deferred-lsp-work.js +33 -0
  278. package/extensions/dm-lens/dist/clients/deferred-runner-blockers.js +106 -0
  279. package/extensions/dm-lens/dist/clients/deferred-test-targets.js +31 -0
  280. package/extensions/dm-lens/dist/clients/degradation-ledger.js +289 -0
  281. package/extensions/dm-lens/dist/clients/demoted-finding-render.js +64 -0
  282. package/extensions/dm-lens/dist/clients/dependency-checker.js +534 -0
  283. package/extensions/dm-lens/dist/clients/deps/ast-grep-napi.js +17 -0
  284. package/extensions/dm-lens/dist/clients/deps/dm-host-deps.js +10 -0
  285. package/extensions/dm-lens/dist/clients/deps/dm-tui-compat.js +58 -0
  286. package/extensions/dm-lens/dist/clients/deps/js-yaml.js +7 -0
  287. package/extensions/dm-lens/dist/clients/deps/minimatch.js +6 -0
  288. package/extensions/dm-lens/dist/clients/deps/pidusage.js +5 -0
  289. package/extensions/dm-lens/dist/clients/deps/typebox.js +5 -0
  290. package/extensions/dm-lens/dist/clients/deps/vscode-jsonrpc.js +8 -0
  291. package/extensions/dm-lens/dist/clients/deps/web-tree-sitter.js +11 -0
  292. package/extensions/dm-lens/dist/clients/diagnostic-dispositions.js +318 -0
  293. package/extensions/dm-lens/dist/clients/diagnostic-line-freshness.js +142 -0
  294. package/extensions/dm-lens/dist/clients/diagnostic-logger.js +60 -0
  295. package/extensions/dm-lens/dist/clients/diagnostic-tracker.js +89 -0
  296. package/extensions/dm-lens/dist/clients/diagnostics-publish.js +134 -0
  297. package/extensions/dm-lens/dist/clients/dispatch/adopted-root-runners.js +22 -0
  298. package/extensions/dm-lens/dist/clients/dispatch/ast-grep-catalog.js +16 -0
  299. package/extensions/dm-lens/dist/clients/dispatch/auxiliary-lsp.js +158 -0
  300. package/extensions/dm-lens/dist/clients/dispatch/collect-later-tier.js +25 -0
  301. package/extensions/dm-lens/dist/clients/dispatch/diagnostic-taxonomy.js +58 -0
  302. package/extensions/dm-lens/dist/clients/dispatch/dispatcher.js +1017 -0
  303. package/extensions/dm-lens/dist/clients/dispatch/fact-provider-types.js +1 -0
  304. package/extensions/dm-lens/dist/clients/dispatch/fact-rule-runner.js +17 -0
  305. package/extensions/dm-lens/dist/clients/dispatch/fact-runner.js +18 -0
  306. package/extensions/dm-lens/dist/clients/dispatch/fact-scheduler.js +52 -0
  307. package/extensions/dm-lens/dist/clients/dispatch/fact-store.js +199 -0
  308. package/extensions/dm-lens/dist/clients/dispatch/facts/comment-facts.js +23 -0
  309. package/extensions/dm-lens/dist/clients/dispatch/facts/file-content.js +18 -0
  310. package/extensions/dm-lens/dist/clients/dispatch/facts/function-facts.js +281 -0
  311. package/extensions/dm-lens/dist/clients/dispatch/facts/import-facts.js +169 -0
  312. package/extensions/dm-lens/dist/clients/dispatch/facts/tree-sitter-facts.js +19 -0
  313. package/extensions/dm-lens/dist/clients/dispatch/facts/try-catch-facts.js +95 -0
  314. package/extensions/dm-lens/dist/clients/dispatch/finding-policy.js +164 -0
  315. package/extensions/dm-lens/dist/clients/dispatch/indent-detect.js +227 -0
  316. package/extensions/dm-lens/dist/clients/dispatch/inline-suppressions.js +52 -0
  317. package/extensions/dm-lens/dist/clients/dispatch/integration.js +1502 -0
  318. package/extensions/dm-lens/dist/clients/dispatch/known-runner-ids.js +13 -0
  319. package/extensions/dm-lens/dist/clients/dispatch/lazy.js +8 -0
  320. package/extensions/dm-lens/dist/clients/dispatch/pending-runner-findings.js +130 -0
  321. package/extensions/dm-lens/dist/clients/dispatch/plan.js +284 -0
  322. package/extensions/dm-lens/dist/clients/dispatch/priorities.js +14 -0
  323. package/extensions/dm-lens/dist/clients/dispatch/rule-id-normalize.js +49 -0
  324. package/extensions/dm-lens/dist/clients/dispatch/rule-ignores.js +21 -0
  325. package/extensions/dm-lens/dist/clients/dispatch/rule-policy.js +102 -0
  326. package/extensions/dm-lens/dist/clients/dispatch/rules/async-noise.js +31 -0
  327. package/extensions/dm-lens/dist/clients/dispatch/rules/async-unnecessary-wrapper.js +27 -0
  328. package/extensions/dm-lens/dist/clients/dispatch/rules/cors-wildcard.js +35 -0
  329. package/extensions/dm-lens/dist/clients/dispatch/rules/error-obscuring.js +29 -0
  330. package/extensions/dm-lens/dist/clients/dispatch/rules/error-swallowing.js +29 -0
  331. package/extensions/dm-lens/dist/clients/dispatch/rules/framework-call-noise.js +31 -0
  332. package/extensions/dm-lens/dist/clients/dispatch/rules/high-complexity.js +56 -0
  333. package/extensions/dm-lens/dist/clients/dispatch/rules/high-fan-out.js +45 -0
  334. package/extensions/dm-lens/dist/clients/dispatch/rules/high-import-coupling.js +31 -0
  335. package/extensions/dm-lens/dist/clients/dispatch/rules/missing-error-propagation.js +45 -0
  336. package/extensions/dm-lens/dist/clients/dispatch/rules/no-commented-credentials.js +46 -0
  337. package/extensions/dm-lens/dist/clients/dispatch/rules/pass-through-wrappers.js +38 -0
  338. package/extensions/dm-lens/dist/clients/dispatch/rules/placeholder-comments.js +40 -0
  339. package/extensions/dm-lens/dist/clients/dispatch/rules/unsafe-boundary.js +101 -0
  340. package/extensions/dm-lens/dist/clients/dispatch/runner-context.js +46 -0
  341. package/extensions/dm-lens/dist/clients/dispatch/runners/actionlint.js +98 -0
  342. package/extensions/dm-lens/dist/clients/dispatch/runners/ast-grep-napi.js +694 -0
  343. package/extensions/dm-lens/dist/clients/dispatch/runners/biome-check.js +205 -0
  344. package/extensions/dm-lens/dist/clients/dispatch/runners/cpp-check.js +190 -0
  345. package/extensions/dm-lens/dist/clients/dispatch/runners/credo.js +66 -0
  346. package/extensions/dm-lens/dist/clients/dispatch/runners/cue-vet.js +171 -0
  347. package/extensions/dm-lens/dist/clients/dispatch/runners/dart-analyze.js +151 -0
  348. package/extensions/dm-lens/dist/clients/dispatch/runners/detekt.js +157 -0
  349. package/extensions/dm-lens/dist/clients/dispatch/runners/dotnet-build.js +157 -0
  350. package/extensions/dm-lens/dist/clients/dispatch/runners/elixir-check.js +153 -0
  351. package/extensions/dm-lens/dist/clients/dispatch/runners/eslint.js +99 -0
  352. package/extensions/dm-lens/dist/clients/dispatch/runners/fact-rules.js +20 -0
  353. package/extensions/dm-lens/dist/clients/dispatch/runners/fish-indent.js +66 -0
  354. package/extensions/dm-lens/dist/clients/dispatch/runners/gleam-check.js +110 -0
  355. package/extensions/dm-lens/dist/clients/dispatch/runners/go-vet.js +52 -0
  356. package/extensions/dm-lens/dist/clients/dispatch/runners/golangci-lint.js +89 -0
  357. package/extensions/dm-lens/dist/clients/dispatch/runners/hadolint.js +83 -0
  358. package/extensions/dm-lens/dist/clients/dispatch/runners/helm-lint.js +144 -0
  359. package/extensions/dm-lens/dist/clients/dispatch/runners/helm-render.js +593 -0
  360. package/extensions/dm-lens/dist/clients/dispatch/runners/htmlhint.js +103 -0
  361. package/extensions/dm-lens/dist/clients/dispatch/runners/index.js +100 -0
  362. package/extensions/dm-lens/dist/clients/dispatch/runners/javac.js +82 -0
  363. package/extensions/dm-lens/dist/clients/dispatch/runners/ktlint.js +93 -0
  364. package/extensions/dm-lens/dist/clients/dispatch/runners/lsp.js +226 -0
  365. package/extensions/dm-lens/dist/clients/dispatch/runners/markdownlint.js +129 -0
  366. package/extensions/dm-lens/dist/clients/dispatch/runners/mypy.js +70 -0
  367. package/extensions/dm-lens/dist/clients/dispatch/runners/oxlint.js +305 -0
  368. package/extensions/dm-lens/dist/clients/dispatch/runners/php-lint.js +66 -0
  369. package/extensions/dm-lens/dist/clients/dispatch/runners/phpstan.js +90 -0
  370. package/extensions/dm-lens/dist/clients/dispatch/runners/prisma-validate.js +66 -0
  371. package/extensions/dm-lens/dist/clients/dispatch/runners/psscriptanalyzer.js +307 -0
  372. package/extensions/dm-lens/dist/clients/dispatch/runners/pyright.js +118 -0
  373. package/extensions/dm-lens/dist/clients/dispatch/runners/rubocop.js +79 -0
  374. package/extensions/dm-lens/dist/clients/dispatch/runners/ruff.js +69 -0
  375. package/extensions/dm-lens/dist/clients/dispatch/runners/rust-clippy.js +166 -0
  376. package/extensions/dm-lens/dist/clients/dispatch/runners/shellcheck.js +177 -0
  377. package/extensions/dm-lens/dist/clients/dispatch/runners/shfmt.js +85 -0
  378. package/extensions/dm-lens/dist/clients/dispatch/runners/spellcheck.js +74 -0
  379. package/extensions/dm-lens/dist/clients/dispatch/runners/spotbugs.js +208 -0
  380. package/extensions/dm-lens/dist/clients/dispatch/runners/sqlfluff.js +136 -0
  381. package/extensions/dm-lens/dist/clients/dispatch/runners/stylelint.js +118 -0
  382. package/extensions/dm-lens/dist/clients/dispatch/runners/swiftlint.js +143 -0
  383. package/extensions/dm-lens/dist/clients/dispatch/runners/taplo.js +108 -0
  384. package/extensions/dm-lens/dist/clients/dispatch/runners/terragrunt.js +110 -0
  385. package/extensions/dm-lens/dist/clients/dispatch/runners/tflint.js +104 -0
  386. package/extensions/dm-lens/dist/clients/dispatch/runners/tree-sitter.js +521 -0
  387. package/extensions/dm-lens/dist/clients/dispatch/runners/trivy-config.js +155 -0
  388. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/availability-policy.js +285 -0
  389. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +61 -0
  390. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/diagnostic-parsers.js +61 -0
  391. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/lazy-installer.js +130 -0
  392. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +1143 -0
  393. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/spawn-outcome.js +40 -0
  394. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/tool-failure.js +120 -0
  395. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/toolchain-availability.js +88 -0
  396. package/extensions/dm-lens/dist/clients/dispatch/runners/utils.js +8 -0
  397. package/extensions/dm-lens/dist/clients/dispatch/runners/vale.js +106 -0
  398. package/extensions/dm-lens/dist/clients/dispatch/runners/yaml-rule-parser.js +170 -0
  399. package/extensions/dm-lens/dist/clients/dispatch/runners/yamllint.js +83 -0
  400. package/extensions/dm-lens/dist/clients/dispatch/runners/zig-check.js +72 -0
  401. package/extensions/dm-lens/dist/clients/dispatch/suppress-writer.js +57 -0
  402. package/extensions/dm-lens/dist/clients/dispatch/tool-profile.js +30 -0
  403. package/extensions/dm-lens/dist/clients/dispatch/types.js +27 -0
  404. package/extensions/dm-lens/dist/clients/dispatch/utils/format-utils.js +58 -0
  405. package/extensions/dm-lens/dist/clients/dispatch/utils/lsp-diagnostics.js +31 -0
  406. package/extensions/dm-lens/dist/clients/disposition-logger.js +19 -0
  407. package/extensions/dm-lens/dist/clients/disposition-publish.js +88 -0
  408. package/extensions/dm-lens/dist/clients/durable-store.js +77 -0
  409. package/extensions/dm-lens/dist/clients/effective-config.js +170 -0
  410. package/extensions/dm-lens/dist/clients/env-utils.js +26 -0
  411. package/extensions/dm-lens/dist/clients/ephemeral-root.js +67 -0
  412. package/extensions/dm-lens/dist/clients/error-class.js +3 -0
  413. package/extensions/dm-lens/dist/clients/eval-timestamp.js +2 -0
  414. package/extensions/dm-lens/dist/clients/event-loop-hold.js +119 -0
  415. package/extensions/dm-lens/dist/clients/event-loop-monitor.js +84 -0
  416. package/extensions/dm-lens/dist/clients/extension-log.js +230 -0
  417. package/extensions/dm-lens/dist/clients/extension-mode.js +20 -0
  418. package/extensions/dm-lens/dist/clients/feature-hints.js +88 -0
  419. package/extensions/dm-lens/dist/clients/file-kinds.js +313 -0
  420. package/extensions/dm-lens/dist/clients/file-mutation-queue.js +95 -0
  421. package/extensions/dm-lens/dist/clients/file-role.js +50 -0
  422. package/extensions/dm-lens/dist/clients/file-time.js +112 -0
  423. package/extensions/dm-lens/dist/clients/file-utils.js +706 -0
  424. package/extensions/dm-lens/dist/clients/finding-delivery-gate.js +132 -0
  425. package/extensions/dm-lens/dist/clients/finding-identity.js +23 -0
  426. package/extensions/dm-lens/dist/clients/fix-run-restore.js +413 -0
  427. package/extensions/dm-lens/dist/clients/fix-worklog.js +75 -0
  428. package/extensions/dm-lens/dist/clients/format-events-publish.js +310 -0
  429. package/extensions/dm-lens/dist/clients/format-service.js +159 -0
  430. package/extensions/dm-lens/dist/clients/formatters-lazy.js +8 -0
  431. package/extensions/dm-lens/dist/clients/formatters.js +1367 -0
  432. package/extensions/dm-lens/dist/clients/freshness-cadence.js +1 -0
  433. package/extensions/dm-lens/dist/clients/freshness.js +8 -0
  434. package/extensions/dm-lens/dist/clients/generated-artifacts.js +209 -0
  435. package/extensions/dm-lens/dist/clients/generation-guard.js +147 -0
  436. package/extensions/dm-lens/dist/clients/generation-lock.js +181 -0
  437. package/extensions/dm-lens/dist/clients/git-guard.js +786 -0
  438. package/extensions/dm-lens/dist/clients/git-tracked-ignore.js +120 -0
  439. package/extensions/dm-lens/dist/clients/gitleaks-client.js +290 -0
  440. package/extensions/dm-lens/dist/clients/go-client.js +47 -0
  441. package/extensions/dm-lens/dist/clients/govulncheck-client.js +411 -0
  442. package/extensions/dm-lens/dist/clients/gradle-ktfmt-style.js +177 -0
  443. package/extensions/dm-lens/dist/clients/grammar-source.js +229 -0
  444. package/extensions/dm-lens/dist/clients/grammar-wasm-imports.js +48 -0
  445. package/extensions/dm-lens/dist/clients/gzip-stage-write.js +93 -0
  446. package/extensions/dm-lens/dist/clients/hard-failure-summary.js +28 -0
  447. package/extensions/dm-lens/dist/clients/hashline-anchor.js +222 -0
  448. package/extensions/dm-lens/dist/clients/hook-budgets.js +17 -0
  449. package/extensions/dm-lens/dist/clients/host-edit-normalize.js +87 -0
  450. package/extensions/dm-lens/dist/clients/host-ports.js +35 -0
  451. package/extensions/dm-lens/dist/clients/indent-retarget.js +102 -0
  452. package/extensions/dm-lens/dist/clients/inline-blocker-dispositions.js +103 -0
  453. package/extensions/dm-lens/dist/clients/inline-blocker-fields.js +8 -0
  454. package/extensions/dm-lens/dist/clients/install-diagnostics.js +135 -0
  455. package/extensions/dm-lens/dist/clients/installer/index.js +3935 -0
  456. package/extensions/dm-lens/dist/clients/installer/managed-tool-refresh-session.js +17 -0
  457. package/extensions/dm-lens/dist/clients/installer/managed-tool-refresh.js +522 -0
  458. package/extensions/dm-lens/dist/clients/instance-reaper-state.js +3 -0
  459. package/extensions/dm-lens/dist/clients/instance-reaper.js +682 -0
  460. package/extensions/dm-lens/dist/clients/instance-registry-lock.js +166 -0
  461. package/extensions/dm-lens/dist/clients/instance-registry-tail.js +17 -0
  462. package/extensions/dm-lens/dist/clients/instance-registry.js +595 -0
  463. package/extensions/dm-lens/dist/clients/io-bridge-contract.js +7 -0
  464. package/extensions/dm-lens/dist/clients/io-bridge.js +357 -0
  465. package/extensions/dm-lens/dist/clients/jscpd-client.js +300 -0
  466. package/extensions/dm-lens/dist/clients/json-cache-read.js +25 -0
  467. package/extensions/dm-lens/dist/clients/knip-client.js +534 -0
  468. package/extensions/dm-lens/dist/clients/knip-scan-roots.js +26 -0
  469. package/extensions/dm-lens/dist/clients/language-policy.js +244 -0
  470. package/extensions/dm-lens/dist/clients/language-profile.js +263 -0
  471. package/extensions/dm-lens/dist/clients/language-registry.js +427 -0
  472. package/extensions/dm-lens/dist/clients/latency-logger.js +202 -0
  473. package/extensions/dm-lens/dist/clients/lazy-import.js +14 -0
  474. package/extensions/dm-lens/dist/clients/ledger-bounds.js +21 -0
  475. package/extensions/dm-lens/dist/clients/lens-config.js +246 -0
  476. package/extensions/dm-lens/dist/clients/lens-engine.js +181 -0
  477. package/extensions/dm-lens/dist/clients/lens-events.js +105 -0
  478. package/extensions/dm-lens/dist/clients/lens-flag-registry.js +292 -0
  479. package/extensions/dm-lens/dist/clients/lens-map.js +980 -0
  480. package/extensions/dm-lens/dist/clients/live-bus-emitter.js +53 -0
  481. package/extensions/dm-lens/dist/clients/log-cleanup.js +138 -0
  482. package/extensions/dm-lens/dist/clients/lsp/aggregation.js +89 -0
  483. package/extensions/dm-lens/dist/clients/lsp/auxiliary-lifecycle.js +23 -0
  484. package/extensions/dm-lens/dist/clients/lsp/capabilities.js +94 -0
  485. package/extensions/dm-lens/dist/clients/lsp/cascade-tier.js +208 -0
  486. package/extensions/dm-lens/dist/clients/lsp/client.js +2943 -0
  487. package/extensions/dm-lens/dist/clients/lsp/config.js +471 -0
  488. package/extensions/dm-lens/dist/clients/lsp/content-limits.js +21 -0
  489. package/extensions/dm-lens/dist/clients/lsp/diagnostic-binding.js +79 -0
  490. package/extensions/dm-lens/dist/clients/lsp/document-drift.js +324 -0
  491. package/extensions/dm-lens/dist/clients/lsp/edits.js +982 -0
  492. package/extensions/dm-lens/dist/clients/lsp/grouping.js +38 -0
  493. package/extensions/dm-lens/dist/clients/lsp/index.js +4639 -0
  494. package/extensions/dm-lens/dist/clients/lsp/inferred-project.js +121 -0
  495. package/extensions/dm-lens/dist/clients/lsp/jvm-runtime.js +194 -0
  496. package/extensions/dm-lens/dist/clients/lsp/language.js +23 -0
  497. package/extensions/dm-lens/dist/clients/lsp/launch.js +564 -0
  498. package/extensions/dm-lens/dist/clients/lsp/lombok.js +146 -0
  499. package/extensions/dm-lens/dist/clients/lsp/path-utils.js +1 -0
  500. package/extensions/dm-lens/dist/clients/lsp/pending-aux-coverage.js +120 -0
  501. package/extensions/dm-lens/dist/clients/lsp/position-encoding.js +28 -0
  502. package/extensions/dm-lens/dist/clients/lsp/resolved-config.js +183 -0
  503. package/extensions/dm-lens/dist/clients/lsp/ruby-drive-dirs.js +42 -0
  504. package/extensions/dm-lens/dist/clients/lsp/server-covers.js +8 -0
  505. package/extensions/dm-lens/dist/clients/lsp/server-traits.js +39 -0
  506. package/extensions/dm-lens/dist/clients/lsp/server.js +2640 -0
  507. package/extensions/dm-lens/dist/clients/lsp/service-singleton.js +59 -0
  508. package/extensions/dm-lens/dist/clients/lsp/session-roots.js +52 -0
  509. package/extensions/dm-lens/dist/clients/lsp/spawn-history.js +15 -0
  510. package/extensions/dm-lens/dist/clients/lsp/sync-kind.js +30 -0
  511. package/extensions/dm-lens/dist/clients/lsp/tsserver-sync.js +156 -0
  512. package/extensions/dm-lens/dist/clients/lsp/wait-policy/capability-snapshot.js +1 -0
  513. package/extensions/dm-lens/dist/clients/lsp/wait-policy/classification.js +37 -0
  514. package/extensions/dm-lens/dist/clients/lsp/wait-policy/index.js +3 -0
  515. package/extensions/dm-lens/dist/clients/lsp/wait-policy/strategies.js +196 -0
  516. package/extensions/dm-lens/dist/clients/lsp/watch-queue.js +40 -0
  517. package/extensions/dm-lens/dist/clients/lsp/workspace-diagnostics-cache.js +270 -0
  518. package/extensions/dm-lens/dist/clients/lsp/workspace-diagnostics-session.js +7 -0
  519. package/extensions/dm-lens/dist/clients/lsp/workspace-sweep-hold.js +93 -0
  520. package/extensions/dm-lens/dist/clients/lsp-budget.js +87 -0
  521. package/extensions/dm-lens/dist/clients/lsp-document-symbols.js +93 -0
  522. package/extensions/dm-lens/dist/clients/lsp-lazy.js +8 -0
  523. package/extensions/dm-lens/dist/clients/lsp-mutation.js +309 -0
  524. package/extensions/dm-lens/dist/clients/lsp-status.js +35 -0
  525. package/extensions/dm-lens/dist/clients/map-with-concurrency.js +20 -0
  526. package/extensions/dm-lens/dist/clients/mcp/analyze.js +265 -0
  527. package/extensions/dm-lens/dist/clients/mcp/host-shim.js +14 -0
  528. package/extensions/dm-lens/dist/clients/mcp/ipc.js +321 -0
  529. package/extensions/dm-lens/dist/clients/mcp/review.js +137 -0
  530. package/extensions/dm-lens/dist/clients/mcp/session.js +305 -0
  531. package/extensions/dm-lens/dist/clients/memory-sampler.js +145 -0
  532. package/extensions/dm-lens/dist/clients/message-end-attribution.js +18 -0
  533. package/extensions/dm-lens/dist/clients/metrics-client.js +80 -0
  534. package/extensions/dm-lens/dist/clients/metrics-history.js +255 -0
  535. package/extensions/dm-lens/dist/clients/middle-man-analysis.js +161 -0
  536. package/extensions/dm-lens/dist/clients/model-provider.js +31 -0
  537. package/extensions/dm-lens/dist/clients/module-report-lsp.js +140 -0
  538. package/extensions/dm-lens/dist/clients/module-report.js +1648 -0
  539. package/extensions/dm-lens/dist/clients/mutating-tool.js +386 -0
  540. package/extensions/dm-lens/dist/clients/mutation-attribution.js +176 -0
  541. package/extensions/dm-lens/dist/clients/mutation-bridge.js +231 -0
  542. package/extensions/dm-lens/dist/clients/ndjson-logger.js +504 -0
  543. package/extensions/dm-lens/dist/clients/observed-mutation-sources.js +43 -0
  544. package/extensions/dm-lens/dist/clients/observed-mutation.js +729 -0
  545. package/extensions/dm-lens/dist/clients/oldtext-autopatch.js +100 -0
  546. package/extensions/dm-lens/dist/clients/opaque-mutation-scan.js +340 -0
  547. package/extensions/dm-lens/dist/clients/opengrep-client.js +219 -0
  548. package/extensions/dm-lens/dist/clients/opengrep-config.js +52 -0
  549. package/extensions/dm-lens/dist/clients/package-manager.js +358 -0
  550. package/extensions/dm-lens/dist/clients/package-root.js +25 -0
  551. package/extensions/dm-lens/dist/clients/partial-edit-apply.js +337 -0
  552. package/extensions/dm-lens/dist/clients/path-attribution-telemetry.js +31 -0
  553. package/extensions/dm-lens/dist/clients/path-keyed-map.js +57 -0
  554. package/extensions/dm-lens/dist/clients/path-utils.js +535 -0
  555. package/extensions/dm-lens/dist/clients/performance-report.js +291 -0
  556. package/extensions/dm-lens/dist/clients/persist-debounce.js +37 -0
  557. package/extensions/dm-lens/dist/clients/persist-worker-stats.js +8 -0
  558. package/extensions/dm-lens/dist/clients/persistent-reverify.js +166 -0
  559. package/extensions/dm-lens/dist/clients/php-cs-fixer-config.js +15 -0
  560. package/extensions/dm-lens/dist/clients/pipeline.js +1279 -0
  561. package/extensions/dm-lens/dist/clients/post-autofix-notice.js +19 -0
  562. package/extensions/dm-lens/dist/clients/print-mode.js +3 -0
  563. package/extensions/dm-lens/dist/clients/probe-home-state.js +67 -0
  564. package/extensions/dm-lens/dist/clients/process-bridge.js +48 -0
  565. package/extensions/dm-lens/dist/clients/process-singletons.js +69 -0
  566. package/extensions/dm-lens/dist/clients/process-snapshot.js +130 -0
  567. package/extensions/dm-lens/dist/clients/project-changes.js +174 -0
  568. package/extensions/dm-lens/dist/clients/project-conventions.js +152 -0
  569. package/extensions/dm-lens/dist/clients/project-diagnostics/cache.js +91 -0
  570. package/extensions/dm-lens/dist/clients/project-diagnostics/extractors.js +53 -0
  571. package/extensions/dm-lens/dist/clients/project-diagnostics/fresh-fetch.js +413 -0
  572. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +64 -0
  573. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/dead-code.js +38 -0
  574. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +21 -0
  575. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/govulncheck.js +23 -0
  576. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/jscpd.js +28 -0
  577. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/knip.js +45 -0
  578. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/madge.js +34 -0
  579. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/opengrep.js +32 -0
  580. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +79 -0
  581. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/trivy.js +41 -0
  582. package/extensions/dm-lens/dist/clients/project-diagnostics/scanner.js +349 -0
  583. package/extensions/dm-lens/dist/clients/project-diagnostics/types.js +1 -0
  584. package/extensions/dm-lens/dist/clients/project-lens-config.js +464 -0
  585. package/extensions/dm-lens/dist/clients/project-report.js +527 -0
  586. package/extensions/dm-lens/dist/clients/project-scale.js +60 -0
  587. package/extensions/dm-lens/dist/clients/project-scan-policy.js +4 -0
  588. package/extensions/dm-lens/dist/clients/project-snapshot-fingerprint.js +44 -0
  589. package/extensions/dm-lens/dist/clients/project-snapshot-persist-worker.js +13 -0
  590. package/extensions/dm-lens/dist/clients/project-snapshot.js +1333 -0
  591. package/extensions/dm-lens/dist/clients/project-trust.js +104 -0
  592. package/extensions/dm-lens/dist/clients/python-environment.js +162 -0
  593. package/extensions/dm-lens/dist/clients/python-provenance.js +551 -0
  594. package/extensions/dm-lens/dist/clients/quiet-window-config.js +16 -0
  595. package/extensions/dm-lens/dist/clients/quiet-window.js +129 -0
  596. package/extensions/dm-lens/dist/clients/read-bridge.js +53 -0
  597. package/extensions/dm-lens/dist/clients/read-expansion.js +218 -0
  598. package/extensions/dm-lens/dist/clients/read-guard-branch.js +126 -0
  599. package/extensions/dm-lens/dist/clients/read-guard-logger.js +186 -0
  600. package/extensions/dm-lens/dist/clients/read-guard-tool-lines.js +1050 -0
  601. package/extensions/dm-lens/dist/clients/read-guard.js +1429 -0
  602. package/extensions/dm-lens/dist/clients/recent-touches.js +126 -0
  603. package/extensions/dm-lens/dist/clients/redact/secrets.js +386 -0
  604. package/extensions/dm-lens/dist/clients/resource-sampler.js +344 -0
  605. package/extensions/dm-lens/dist/clients/reverse-deps.js +227 -0
  606. package/extensions/dm-lens/dist/clients/review-graph/builder.js +3708 -0
  607. package/extensions/dm-lens/dist/clients/review-graph/format.js +30 -0
  608. package/extensions/dm-lens/dist/clients/review-graph/git-identity.js +168 -0
  609. package/extensions/dm-lens/dist/clients/review-graph/import-resolvers.js +323 -0
  610. package/extensions/dm-lens/dist/clients/review-graph/persist-worker.js +8 -0
  611. package/extensions/dm-lens/dist/clients/review-graph/query.js +195 -0
  612. package/extensions/dm-lens/dist/clients/review-graph/revision-drift.js +3 -0
  613. package/extensions/dm-lens/dist/clients/review-graph/service.js +60 -0
  614. package/extensions/dm-lens/dist/clients/review-graph/shared-extraction-ir.js +54 -0
  615. package/extensions/dm-lens/dist/clients/review-graph/symbol-id.js +29 -0
  616. package/extensions/dm-lens/dist/clients/review-graph/tsconfig-paths.js +253 -0
  617. package/extensions/dm-lens/dist/clients/review-graph/types.js +1 -0
  618. package/extensions/dm-lens/dist/clients/review-graph/workspace-modules.js +374 -0
  619. package/extensions/dm-lens/dist/clients/review-graph-logger.js +51 -0
  620. package/extensions/dm-lens/dist/clients/ruff-client.js +109 -0
  621. package/extensions/dm-lens/dist/clients/rules-scanner.js +113 -0
  622. package/extensions/dm-lens/dist/clients/run-duration.js +9 -0
  623. package/extensions/dm-lens/dist/clients/runtime-agent-end.js +800 -0
  624. package/extensions/dm-lens/dist/clients/runtime-config.js +39 -0
  625. package/extensions/dm-lens/dist/clients/runtime-context.js +155 -0
  626. package/extensions/dm-lens/dist/clients/runtime-coordinator.js +1117 -0
  627. package/extensions/dm-lens/dist/clients/runtime-session.js +1768 -0
  628. package/extensions/dm-lens/dist/clients/runtime-tool-call.js +935 -0
  629. package/extensions/dm-lens/dist/clients/runtime-tool-result.js +1630 -0
  630. package/extensions/dm-lens/dist/clients/runtime-turn.js +2900 -0
  631. package/extensions/dm-lens/dist/clients/rust-client.js +48 -0
  632. package/extensions/dm-lens/dist/clients/safe-spawn.js +1275 -0
  633. package/extensions/dm-lens/dist/clients/sanitize.js +174 -0
  634. package/extensions/dm-lens/dist/clients/scan-utils.js +7 -0
  635. package/extensions/dm-lens/dist/clients/scanner-temp-root.js +8 -0
  636. package/extensions/dm-lens/dist/clients/scratch-tree-policy.js +63 -0
  637. package/extensions/dm-lens/dist/clients/search-read-registration.js +60 -0
  638. package/extensions/dm-lens/dist/clients/secret-findings.js +69 -0
  639. package/extensions/dm-lens/dist/clients/security-scan-client.js +208 -0
  640. package/extensions/dm-lens/dist/clients/session-event-guard.js +111 -0
  641. package/extensions/dm-lens/dist/clients/session-lifecycle.js +269 -0
  642. package/extensions/dm-lens/dist/clients/session-scope.js +451 -0
  643. package/extensions/dm-lens/dist/clients/session-start-observability.js +47 -0
  644. package/extensions/dm-lens/dist/clients/session-state-store.js +66 -0
  645. package/extensions/dm-lens/dist/clients/session-summary.js +8 -0
  646. package/extensions/dm-lens/dist/clients/sessionstart-logger.js +22 -0
  647. package/extensions/dm-lens/dist/clients/sg-runner.js +645 -0
  648. package/extensions/dm-lens/dist/clients/sgconfig.js +306 -0
  649. package/extensions/dm-lens/dist/clients/shared-checkout-guard.js +177 -0
  650. package/extensions/dm-lens/dist/clients/single-flight.js +52 -0
  651. package/extensions/dm-lens/dist/clients/situational-tool-telemetry.js +85 -0
  652. package/extensions/dm-lens/dist/clients/skills-resolver.js +38 -0
  653. package/extensions/dm-lens/dist/clients/slow-fs.js +77 -0
  654. package/extensions/dm-lens/dist/clients/smells-rollup.js +118 -0
  655. package/extensions/dm-lens/dist/clients/source-filter.js +320 -0
  656. package/extensions/dm-lens/dist/clients/source-walker.js +96 -0
  657. package/extensions/dm-lens/dist/clients/spawn-output-cap.js +35 -0
  658. package/extensions/dm-lens/dist/clients/spawn-timeout-cooldown.js +51 -0
  659. package/extensions/dm-lens/dist/clients/stale-marker.js +1 -0
  660. package/extensions/dm-lens/dist/clients/startup-scan.js +230 -0
  661. package/extensions/dm-lens/dist/clients/startup-timing.js +67 -0
  662. package/extensions/dm-lens/dist/clients/string-utils.js +6 -0
  663. package/extensions/dm-lens/dist/clients/subagent-mode.js +40 -0
  664. package/extensions/dm-lens/dist/clients/symbol-containment.js +16 -0
  665. package/extensions/dm-lens/dist/clients/symbol-types.js +1 -0
  666. package/extensions/dm-lens/dist/clients/test-runner-client.js +1697 -0
  667. package/extensions/dm-lens/dist/clients/test-runner-delivery.js +293 -0
  668. package/extensions/dm-lens/dist/clients/test-target-roots.js +17 -0
  669. package/extensions/dm-lens/dist/clients/todo-scanner.js +164 -0
  670. package/extensions/dm-lens/dist/clients/tool-agreement.js +640 -0
  671. package/extensions/dm-lens/dist/clients/tool-config.js +219 -0
  672. package/extensions/dm-lens/dist/clients/tool-cwd.js +235 -0
  673. package/extensions/dm-lens/dist/clients/tool-definition.js +22 -0
  674. package/extensions/dm-lens/dist/clients/tool-event.js +24 -0
  675. package/extensions/dm-lens/dist/clients/tool-policy.js +2393 -0
  676. package/extensions/dm-lens/dist/clients/tool-probe.js +13 -0
  677. package/extensions/dm-lens/dist/clients/tool-render.js +79 -0
  678. package/extensions/dm-lens/dist/clients/tool-set-policy.js +77 -0
  679. package/extensions/dm-lens/dist/clients/tree-sitter-cache.js +206 -0
  680. package/extensions/dm-lens/dist/clients/tree-sitter-client.js +3057 -0
  681. package/extensions/dm-lens/dist/clients/tree-sitter-logger.js +77 -0
  682. package/extensions/dm-lens/dist/clients/tree-sitter-navigator.js +198 -0
  683. package/extensions/dm-lens/dist/clients/tree-sitter-query-loader.js +389 -0
  684. package/extensions/dm-lens/dist/clients/tree-sitter-shared.js +87 -0
  685. package/extensions/dm-lens/dist/clients/tree-sitter-symbol-extractor.js +959 -0
  686. package/extensions/dm-lens/dist/clients/trivy-client.js +335 -0
  687. package/extensions/dm-lens/dist/clients/tui-fit.js +26 -0
  688. package/extensions/dm-lens/dist/clients/turn-context.js +48 -0
  689. package/extensions/dm-lens/dist/clients/turn-end/delivery-holds.js +59 -0
  690. package/extensions/dm-lens/dist/clients/turn-end/lane.js +1 -0
  691. package/extensions/dm-lens/dist/clients/turn-end/lanes/govulncheck.js +54 -0
  692. package/extensions/dm-lens/dist/clients/turn-end/lanes/secrets.js +131 -0
  693. package/extensions/dm-lens/dist/clients/turn-summary-render.js +56 -0
  694. package/extensions/dm-lens/dist/clients/turn-summary.js +84 -0
  695. package/extensions/dm-lens/dist/clients/typos-config.js +9 -0
  696. package/extensions/dm-lens/dist/clients/user-notify.js +15 -0
  697. package/extensions/dm-lens/dist/clients/vanished-instance-marker.js +18 -0
  698. package/extensions/dm-lens/dist/clients/warm-attach.js +210 -0
  699. package/extensions/dm-lens/dist/clients/widget-state.js +997 -0
  700. package/extensions/dm-lens/dist/clients/word-index-logger.js +21 -0
  701. package/extensions/dm-lens/dist/clients/word-index-store.js +222 -0
  702. package/extensions/dm-lens/dist/clients/word-index.js +1494 -0
  703. package/extensions/dm-lens/dist/clients/workspace-topology.js +268 -0
  704. package/extensions/dm-lens/dist/clients/write-ordering-guard.js +28 -0
  705. package/extensions/dm-lens/dist/clients/zizmor-config.js +160 -0
  706. package/extensions/dm-lens/dist/i18n.js +67 -0
  707. package/extensions/dm-lens/dist/index.js +1973 -0
  708. package/extensions/dm-lens/dist/mcp/analyze-cli.js +205 -0
  709. package/extensions/dm-lens/dist/mcp/build-staleness.js +55 -0
  710. package/extensions/dm-lens/dist/mcp/cli.js +96 -0
  711. package/extensions/dm-lens/dist/mcp/server.js +1239 -0
  712. package/extensions/dm-lens/dist/mcp/tool-arguments.js +134 -0
  713. package/extensions/dm-lens/dist/mcp/worker.js +41 -0
  714. package/extensions/dm-lens/dist/scripts/lib/process-scan.mjs +375 -0
  715. package/extensions/dm-lens/dist/scripts/lib/skills-predicate.mjs +53 -0
  716. package/extensions/dm-lens/dist/scripts/lib/web-tree-sitter-dir.mjs +51 -0
  717. package/extensions/dm-lens/dist/tools/activate-tools.js +62 -0
  718. package/extensions/dm-lens/dist/tools/ast-grep-outline.js +126 -0
  719. package/extensions/dm-lens/dist/tools/ast-grep-replace.js +227 -0
  720. package/extensions/dm-lens/dist/tools/ast-grep-search.js +687 -0
  721. package/extensions/dm-lens/dist/tools/effective-config.js +59 -0
  722. package/extensions/dm-lens/dist/tools/lens-diagnostic-mark.js +251 -0
  723. package/extensions/dm-lens/dist/tools/lens-diagnostics.js +1518 -0
  724. package/extensions/dm-lens/dist/tools/lsp-diagnostics.js +1198 -0
  725. package/extensions/dm-lens/dist/tools/lsp-navigation.js +1249 -0
  726. package/extensions/dm-lens/dist/tools/lsp-structured-output.js +277 -0
  727. package/extensions/dm-lens/dist/tools/module-report.js +332 -0
  728. package/extensions/dm-lens/dist/tools/project-report.js +72 -0
  729. package/extensions/dm-lens/dist/tools/render-compact.js +272 -0
  730. package/extensions/dm-lens/dist/tools/scan-progress.js +31 -0
  731. package/extensions/dm-lens/dist/tools/shared.js +32 -0
  732. package/extensions/dm-lens/dist/tools/symbol-search.js +133 -0
  733. package/extensions/dm-lens/i18n.js +3 -3
  734. package/extensions/dm-lens/index.js +431 -214
  735. package/extensions/dm-lens/mcp/analyze-cli.js +63 -36
  736. package/extensions/dm-lens/mcp/cli.js +20 -0
  737. package/extensions/dm-lens/mcp/server.js +40 -3
  738. package/extensions/dm-lens/mcp/tool-arguments.js +134 -0
  739. package/extensions/dm-lens/mcp/worker.js +8 -0
  740. package/extensions/dm-lens/package.json +1 -1
  741. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/advisory-registry-subset-test.yml +41 -0
  742. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/no-identity-operator-on-literals-test.yml +12 -2
  743. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/throw-new-error-js-test.yml +2 -0
  744. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/throw-new-error-test.yml +2 -0
  745. package/extensions/dm-lens/rules/ast-grep-rules/rules/advisory-registry-subset.yml +50 -0
  746. package/extensions/dm-lens/rules/ast-grep-rules/rules/no-identity-operator-on-literals.yml +20 -12
  747. package/extensions/dm-lens/rules/ast-grep-rules/rules/throw-new-error-js.yml +2 -2
  748. package/extensions/dm-lens/rules/ast-grep-rules/rules/throw-new-error.yml +2 -2
  749. package/extensions/dm-lens/scripts/lib/process-scan.mjs +126 -7
  750. package/extensions/dm-lens/scripts/lib/web-tree-sitter-dir.mjs +6 -0
  751. package/extensions/dm-lens/tools/activate-tools.js +3 -2
  752. package/extensions/dm-lens/tools/ast-grep-outline.js +2 -3
  753. package/extensions/dm-lens/tools/ast-grep-replace.js +6 -5
  754. package/extensions/dm-lens/tools/ast-grep-search.js +2 -2
  755. package/extensions/dm-lens/tools/lens-diagnostic-mark.js +12 -1
  756. package/extensions/dm-lens/tools/lens-diagnostics.js +74 -37
  757. package/extensions/dm-lens/tools/lsp-diagnostics.js +140 -25
  758. package/extensions/dm-lens/tools/lsp-navigation.js +64 -7
  759. package/extensions/dm-lens/tools/module-report.js +6 -6
  760. package/extensions/dm-lens/tools/shared.js +6 -0
  761. package/extensions/dm-mcp-adapter/THIRD_PARTY_NOTICES.md +1 -1
  762. package/extensions/dm-mcp-adapter/cli.js +265 -23
  763. package/extensions/dm-mcp-adapter/commands.js +83 -17
  764. package/extensions/dm-mcp-adapter/config.js +517 -92
  765. package/extensions/dm-mcp-adapter/direct-tool-surface.js +10 -8
  766. package/extensions/dm-mcp-adapter/direct-tools.js +54 -36
  767. package/extensions/dm-mcp-adapter/dist/abort.js +35 -0
  768. package/extensions/dm-mcp-adapter/dist/agent-dir.js +45 -0
  769. package/extensions/dm-mcp-adapter/dist/agent-plugin-loader.js +392 -0
  770. package/extensions/dm-mcp-adapter/dist/agent-plugin-provenance.js +26 -0
  771. package/extensions/dm-mcp-adapter/dist/bearer-command-resolver.js +182 -0
  772. package/extensions/dm-mcp-adapter/dist/claude-plugin-loader.js +350 -0
  773. package/extensions/dm-mcp-adapter/dist/config.js +1735 -0
  774. package/extensions/dm-mcp-adapter/dist/consent-manager.js +84 -0
  775. package/extensions/dm-mcp-adapter/dist/elicitation-handler.js +370 -0
  776. package/extensions/dm-mcp-adapter/dist/errors.js +225 -0
  777. package/extensions/dm-mcp-adapter/dist/http-ca.js +75 -0
  778. package/extensions/dm-mcp-adapter/dist/jev-client.js +359 -0
  779. package/extensions/dm-mcp-adapter/dist/jev-contracts.js +1 -0
  780. package/extensions/dm-mcp-adapter/dist/jev-key-store.js +189 -0
  781. package/extensions/dm-mcp-adapter/dist/json-schema-validator.js +70 -0
  782. package/extensions/dm-mcp-adapter/dist/lifecycle.js +387 -0
  783. package/extensions/dm-mcp-adapter/dist/logger.js +115 -0
  784. package/extensions/dm-mcp-adapter/dist/mcp-auth-fetch.js +86 -0
  785. package/extensions/dm-mcp-adapter/dist/mcp-auth-flow.js +956 -0
  786. package/extensions/dm-mcp-adapter/dist/mcp-auth.js +998 -0
  787. package/extensions/dm-mcp-adapter/dist/mcp-bearer-store.js +182 -0
  788. package/extensions/dm-mcp-adapter/dist/mcp-callback-server.js +380 -0
  789. package/extensions/dm-mcp-adapter/dist/mcp-oauth-provider.js +525 -0
  790. package/extensions/dm-mcp-adapter/dist/mcp-probe.js +151 -0
  791. package/extensions/dm-mcp-adapter/dist/mcp-tasks.js +300 -0
  792. package/extensions/dm-mcp-adapter/dist/mcp-trace.js +220 -0
  793. package/extensions/dm-mcp-adapter/dist/metadata-cache.js +323 -0
  794. package/extensions/dm-mcp-adapter/dist/npx-resolver.js +465 -0
  795. package/extensions/dm-mcp-adapter/dist/output-shape.js +312 -0
  796. package/extensions/dm-mcp-adapter/dist/package-mcp-loader.js +144 -0
  797. package/extensions/dm-mcp-adapter/dist/project-server-trust.js +186 -0
  798. package/extensions/dm-mcp-adapter/dist/request-headers-command.js +294 -0
  799. package/extensions/dm-mcp-adapter/dist/resource-tools.js +7 -0
  800. package/extensions/dm-mcp-adapter/dist/runtime-owner.js +94 -0
  801. package/extensions/dm-mcp-adapter/dist/sampling-handler.js +213 -0
  802. package/extensions/dm-mcp-adapter/dist/secure-keyring.js +191 -0
  803. package/extensions/dm-mcp-adapter/dist/server-manager.js +1594 -0
  804. package/extensions/dm-mcp-adapter/dist/session-approvals.js +127 -0
  805. package/extensions/dm-mcp-adapter/dist/session-recovery.js +83 -0
  806. package/extensions/dm-mcp-adapter/dist/state.js +1 -0
  807. package/extensions/dm-mcp-adapter/dist/ts-shape.js +157 -0
  808. package/extensions/dm-mcp-adapter/dist/types.js +286 -0
  809. package/extensions/dm-mcp-adapter/dist/ui-app-bridge-helpers.js +36 -0
  810. package/extensions/dm-mcp-adapter/dist/ui-resource-handler.js +204 -0
  811. package/extensions/dm-mcp-adapter/dist/ui-stream-types.js +58 -0
  812. package/extensions/dm-mcp-adapter/dist/ui-tool-visibility.js +26 -0
  813. package/extensions/dm-mcp-adapter/dist/unix-socket-transport.js +83 -0
  814. package/extensions/dm-mcp-adapter/dist/utils.js +418 -0
  815. package/extensions/dm-mcp-adapter/elicitation-handler.js +67 -2
  816. package/extensions/dm-mcp-adapter/failure-backoff.js +9 -0
  817. package/extensions/dm-mcp-adapter/host-managed.js +400 -0
  818. package/extensions/dm-mcp-adapter/http-ca.js +4 -0
  819. package/extensions/dm-mcp-adapter/index.js +347 -57
  820. package/extensions/dm-mcp-adapter/init.js +92 -44
  821. package/extensions/dm-mcp-adapter/jev-client.js +5 -5
  822. package/extensions/dm-mcp-adapter/jev-key-store.js +15 -2
  823. package/extensions/dm-mcp-adapter/mcp-auth-flow.js +10 -2
  824. package/extensions/dm-mcp-adapter/mcp-auth.js +2 -1
  825. package/extensions/dm-mcp-adapter/mcp-callback-server.js +1 -1
  826. package/extensions/dm-mcp-adapter/mcp-code.js +174 -87
  827. package/extensions/dm-mcp-adapter/mcp-keyring-helper.cjs +1 -1
  828. package/extensions/dm-mcp-adapter/mcp-oauth-provider.js +3 -2
  829. package/extensions/dm-mcp-adapter/mcp-output-guard.js +19 -5
  830. package/extensions/dm-mcp-adapter/mcp-panel.js +59 -12
  831. package/extensions/dm-mcp-adapter/mcp-script-wasm.js +22 -0
  832. package/extensions/dm-mcp-adapter/mcp-script-worker.mjs +227 -111
  833. package/extensions/dm-mcp-adapter/mcp-setup-panel.js +500 -258
  834. package/extensions/dm-mcp-adapter/mcp-status.js +9 -2
  835. package/extensions/dm-mcp-adapter/mcp-trace.js +5 -0
  836. package/extensions/dm-mcp-adapter/metadata-cache.js +68 -11
  837. package/extensions/dm-mcp-adapter/namespace-tools.js +20 -5
  838. package/extensions/dm-mcp-adapter/onboarding-state.js +11 -1
  839. package/extensions/dm-mcp-adapter/output-shape.js +312 -0
  840. package/extensions/dm-mcp-adapter/package-mcp-loader.js +15 -6
  841. package/extensions/dm-mcp-adapter/package.json +6 -15
  842. package/extensions/dm-mcp-adapter/panel-keys.js +13 -0
  843. package/extensions/dm-mcp-adapter/pi-builtin-mcp.js +26 -0
  844. package/extensions/dm-mcp-adapter/pi-signin-import.js +121 -0
  845. package/extensions/dm-mcp-adapter/project-server-trust.js +186 -0
  846. package/extensions/dm-mcp-adapter/prompts.js +80 -7
  847. package/extensions/dm-mcp-adapter/proxy-modes.js +219 -158
  848. package/extensions/dm-mcp-adapter/runtime-protocol.js +342 -0
  849. package/extensions/dm-mcp-adapter/search-ranking.js +8 -6
  850. package/extensions/dm-mcp-adapter/semantic-search.js +5 -4
  851. package/extensions/dm-mcp-adapter/server-manager.js +108 -26
  852. package/extensions/dm-mcp-adapter/session-recovery.js +3 -2
  853. package/extensions/dm-mcp-adapter/skills/mcp-scripting/SKILL.md +24 -28
  854. package/extensions/dm-mcp-adapter/skills/mcp-scripting/references/jev.md +3 -0
  855. package/extensions/dm-mcp-adapter/test-runner.mjs +1 -1
  856. package/extensions/dm-mcp-adapter/tool-approval.js +17 -7
  857. package/extensions/dm-mcp-adapter/tool-metadata.js +4 -2
  858. package/extensions/dm-mcp-adapter/tool-parameters.js +4 -0
  859. package/extensions/dm-mcp-adapter/tool-result-renderer.js +68 -7
  860. package/extensions/dm-mcp-adapter/ts-shape.js +1 -1
  861. package/extensions/dm-mcp-adapter/ui-server.js +24 -20
  862. package/extensions/dm-mcp-adapter/unix-socket-transport.js +1 -1
  863. package/extensions/dm-mcp-adapter/utils.js +37 -1
  864. package/extensions/dm-ponytail/extensions/ponytail.mjs +37 -17
  865. package/extensions/dm-ponytail/hooks/claude-codex-hooks.json +3 -3
  866. package/extensions/dm-ponytail/hooks/copilot-hooks.json +4 -4
  867. package/extensions/dm-ponytail/hooks/ponytail-activate.js +46 -13
  868. package/extensions/dm-ponytail/hooks/ponytail-config.js +6 -5
  869. package/extensions/dm-ponytail/hooks/ponytail-instructions.js +29 -33
  870. package/extensions/dm-ponytail/hooks/ponytail-map.js +116 -0
  871. package/extensions/dm-ponytail/hooks/ponytail-mode-tracker.js +26 -13
  872. package/extensions/dm-ponytail/hooks/ponytail-runtime.js +23 -9
  873. package/extensions/dm-ponytail/hooks/ponytail-subagent.js +15 -3
  874. package/extensions/dm-ponytail/hooks/qoder-hooks.json +3 -3
  875. package/extensions/dm-ponytail/package.json +1 -1
  876. package/extensions/dm-ponytail/pi-extension/index.js +37 -17
  877. package/extensions/dm-ponytail/pi-extension/package.json +1 -1
  878. package/extensions/dm-ponytail/skills/plugin.json +5 -0
  879. package/extensions/dm-ponytail/skills/ponytail/SKILL.md +33 -101
  880. package/extensions/dm-ponytail/skills/ponytail-audit/SKILL.md +89 -27
  881. package/extensions/dm-ponytail/skills/ponytail-debt/SKILL.md +13 -12
  882. package/extensions/dm-ponytail/skills/ponytail-gain/SKILL.md +21 -18
  883. package/extensions/dm-ponytail/skills/ponytail-help/SKILL.md +13 -14
  884. package/extensions/dm-ponytail/skills/ponytail-review/SKILL.md +96 -52
  885. package/extensions/dm-subagents/agents/oracle.md +8 -19
  886. package/extensions/dm-subagents/agents/researcher.md +0 -3
  887. package/extensions/dm-subagents/agents/reviewer.md +17 -61
  888. package/extensions/dm-subagents/agents/scout.md +1 -4
  889. package/extensions/dm-subagents/agents/worker.md +8 -25
  890. package/extensions/dm-subagents/index.js +5 -0
  891. package/extensions/dm-subagents/install.mjs +47 -62
  892. package/extensions/dm-subagents/package.json +6 -5
  893. package/extensions/dm-subagents/prompts/council.md +1 -1
  894. package/extensions/dm-subagents/prompts/review-loop.md +1 -1
  895. package/extensions/dm-subagents/skills/council-mode/SKILL.md +1 -1
  896. package/extensions/dm-subagents/skills/dm-subagents/SKILL.md +13 -6
  897. package/extensions/dm-subagents/skills/dm-subagents/references/constraints-and-recipes.md +3 -3
  898. package/extensions/dm-subagents/skills/dm-subagents/references/execution-controls.md +79 -78
  899. package/extensions/dm-subagents/skills/dm-subagents/references/management-authoring-rpc.md +18 -14
  900. package/extensions/dm-subagents/skills/dm-subagents/references/multi-lane-orchestration.md +1 -1
  901. package/extensions/dm-subagents/skills/dm-subagents/references/prompting-and-roles.md +46 -49
  902. package/extensions/dm-subagents/src/agents/advertised-agent-prompt.js +18 -32
  903. package/extensions/dm-subagents/src/agents/agent-management.js +7 -2
  904. package/extensions/dm-subagents/src/agents/agent-memory.js +3 -3
  905. package/extensions/dm-subagents/src/agents/agent-scope.js +3 -0
  906. package/extensions/dm-subagents/src/agents/agent-serializer.js +12 -1
  907. package/extensions/dm-subagents/src/agents/agents.js +217 -120
  908. package/extensions/dm-subagents/src/api/inspectors.js +10 -0
  909. package/extensions/dm-subagents/src/api/preflight.js +43 -6
  910. package/extensions/dm-subagents/src/extension/config.js +35 -2
  911. package/extensions/dm-subagents/src/extension/control-notices.js +3 -7
  912. package/extensions/dm-subagents/src/extension/declaration-pinning.js +127 -0
  913. package/extensions/dm-subagents/src/extension/doctor.js +4 -7
  914. package/extensions/dm-subagents/src/extension/fanout-child.js +15 -7
  915. package/extensions/dm-subagents/src/extension/herdr-dm-bridge.js +2 -0
  916. package/extensions/dm-subagents/src/extension/index.js +231 -332
  917. package/extensions/dm-subagents/src/extension/public-execution.js +63 -33
  918. package/extensions/dm-subagents/src/extension/reply-workflow-script.js +65 -0
  919. package/extensions/dm-subagents/src/extension/rpc.js +42 -16
  920. package/extensions/dm-subagents/src/extension/schemas.js +73 -152
  921. package/extensions/dm-subagents/src/extension/subagent-guide.js +92 -7
  922. package/extensions/dm-subagents/src/extension/subagent-options.js +47 -0
  923. package/extensions/dm-subagents/src/extension/tool-activation.js +57 -89
  924. package/extensions/dm-subagents/src/extension/tool-description.js +56 -47
  925. package/extensions/dm-subagents/src/extension/upgrade-notice.js +36 -0
  926. package/extensions/dm-subagents/src/inspectors/actions.js +34 -11
  927. package/extensions/dm-subagents/src/inspectors/plugins.js +71 -2
  928. package/extensions/dm-subagents/src/inspectors/tmux/actions.js +173 -0
  929. package/extensions/dm-subagents/src/inspectors/tmux/client.js +63 -0
  930. package/extensions/dm-subagents/src/inspectors/tmux/plugin.js +14 -0
  931. package/extensions/dm-subagents/src/integrations/herdr-status.js +26 -49
  932. package/extensions/dm-subagents/src/integrations/program-status.js +179 -0
  933. package/extensions/dm-subagents/src/intercom/native-supervisor-channel.js +77 -4
  934. package/extensions/dm-subagents/src/intercom/result-intercom.js +3 -2
  935. package/extensions/dm-subagents/src/intercom/supervisor-ui.js +2 -152
  936. package/extensions/dm-subagents/src/missions/goal-driver.js +47 -34
  937. package/extensions/dm-subagents/src/missions/store.js +33 -4
  938. package/extensions/dm-subagents/src/profiles/profiles.js +22 -15
  939. package/extensions/dm-subagents/src/runs/background/active-async-capacity.js +49 -6
  940. package/extensions/dm-subagents/src/runs/background/async-execution.js +301 -139
  941. package/extensions/dm-subagents/src/runs/background/async-job-tracker.js +65 -24
  942. package/extensions/dm-subagents/src/runs/background/async-resume.js +9 -3
  943. package/extensions/dm-subagents/src/runs/background/async-retention.js +40 -15
  944. package/extensions/dm-subagents/src/runs/background/await-async-run.js +68 -0
  945. package/extensions/dm-subagents/src/runs/background/binary-bootstrap.js +2 -1
  946. package/extensions/dm-subagents/src/runs/background/calendar-schedule.js +90 -0
  947. package/extensions/dm-subagents/src/runs/background/chain-root-attachment.js +11 -8
  948. package/extensions/dm-subagents/src/runs/background/control-channel.js +89 -5
  949. package/extensions/dm-subagents/src/runs/background/fleet-view.js +5 -5
  950. package/extensions/dm-subagents/src/runs/background/notify.js +170 -11
  951. package/extensions/dm-subagents/src/runs/background/pid-namespace.js +17 -0
  952. package/extensions/dm-subagents/src/runs/background/result-files.js +80 -6
  953. package/extensions/dm-subagents/src/runs/background/result-watcher.js +92 -65
  954. package/extensions/dm-subagents/src/runs/background/resume-guidance.js +2 -2
  955. package/extensions/dm-subagents/src/runs/background/run-child-session.js +34 -10
  956. package/extensions/dm-subagents/src/runs/background/run-id-resolver.js +8 -6
  957. package/extensions/dm-subagents/src/runs/background/run-status.js +25 -15
  958. package/extensions/dm-subagents/src/runs/background/runner-aliases.js +6 -4
  959. package/extensions/dm-subagents/src/runs/background/runner-child-launch.js +3 -0
  960. package/extensions/dm-subagents/src/runs/background/runner-http-dispatcher.js +2 -1
  961. package/extensions/dm-subagents/src/runs/background/scheduled-runs.js +270 -79
  962. package/extensions/dm-subagents/src/runs/background/stale-run-reconciler.js +18 -3
  963. package/extensions/dm-subagents/src/runs/background/subagent-runner-bootstrap.js +4 -1
  964. package/extensions/dm-subagents/src/runs/background/subagent-runner.js +123 -33
  965. package/extensions/dm-subagents/src/runs/background/subagent-wait.js +33 -20
  966. package/extensions/dm-subagents/src/runs/background/terminal-run-index.js +42 -1
  967. package/extensions/dm-subagents/src/runs/background/wait-completions.js +1 -0
  968. package/extensions/dm-subagents/src/runs/background/wait-tool.js +36 -26
  969. package/extensions/dm-subagents/src/runs/background/workflow-terminal-proof.js +39 -26
  970. package/extensions/dm-subagents/src/runs/foreground/async-stop-action.js +58 -26
  971. package/extensions/dm-subagents/src/runs/foreground/command-action.js +37 -0
  972. package/extensions/dm-subagents/src/runs/foreground/execution.js +132 -32
  973. package/extensions/dm-subagents/src/runs/foreground/foreground-history.js +1 -0
  974. package/extensions/dm-subagents/src/runs/foreground/prompt-audit.js +5 -8
  975. package/extensions/dm-subagents/src/runs/foreground/subagent-executor.js +683 -325
  976. package/extensions/dm-subagents/src/runs/shared/async-status-projection.js +3 -0
  977. package/extensions/dm-subagents/src/runs/shared/child-commands.js +252 -0
  978. package/extensions/dm-subagents/src/runs/shared/child-hooks.js +6 -5
  979. package/extensions/dm-subagents/src/runs/shared/child-launch.js +13 -1
  980. package/extensions/dm-subagents/src/runs/shared/child-session.js +175 -28
  981. package/extensions/dm-subagents/src/runs/shared/child-tool-plan.js +17 -14
  982. package/extensions/dm-subagents/src/runs/shared/claude-code-adapter.js +87 -1
  983. package/extensions/dm-subagents/src/runs/shared/dm-spawn.js +11 -85
  984. package/extensions/dm-subagents/src/runs/shared/dynamic-fanout.js +3 -0
  985. package/extensions/dm-subagents/src/runs/shared/effective-system-prompt.js +1 -2
  986. package/extensions/dm-subagents/src/runs/shared/external-cli-preflight.js +57 -6
  987. package/extensions/dm-subagents/src/runs/shared/external-cli-runner.js +6 -3
  988. package/extensions/dm-subagents/src/runs/shared/herdr-placed-run.js +13 -6
  989. package/extensions/dm-subagents/src/runs/shared/mcp-config-sources.js +1 -1
  990. package/extensions/dm-subagents/src/runs/shared/mcp-direct-tool-allowlist.js +66 -14
  991. package/extensions/dm-subagents/src/runs/shared/model-resolution-diagnostic.js +25 -5
  992. package/extensions/dm-subagents/src/runs/shared/model-resolution.js +55 -11
  993. package/extensions/dm-subagents/src/runs/shared/model-scope.js +23 -10
  994. package/extensions/dm-subagents/src/runs/shared/nested-events.js +3 -0
  995. package/extensions/dm-subagents/src/runs/shared/parallel-handoff.js +55 -7
  996. package/extensions/dm-subagents/src/runs/shared/partial-output.js +26 -0
  997. package/extensions/dm-subagents/src/runs/shared/run-history.js +41 -0
  998. package/extensions/dm-subagents/src/runs/shared/runner-launcher.js +21 -0
  999. package/extensions/dm-subagents/src/runs/shared/single-output.js +67 -26
  1000. package/extensions/dm-subagents/src/runs/shared/structured-output.js +24 -7
  1001. package/extensions/dm-subagents/src/runs/shared/subagent-control.js +32 -20
  1002. package/extensions/dm-subagents/src/runs/shared/subagent-prompt-runtime.js +68 -29
  1003. package/extensions/dm-subagents/src/runs/shared/tool-availability.js +1 -1
  1004. package/extensions/dm-subagents/src/runs/shared/workflow-async-child-guidance.js +1 -1
  1005. package/extensions/dm-subagents/src/runs/shared/worktree-cleanup-apply.js +169 -0
  1006. package/extensions/dm-subagents/src/runs/shared/worktree-cleanup-plan.js +41 -20
  1007. package/extensions/dm-subagents/src/runs/shared/worktree-lock.js +38 -0
  1008. package/extensions/dm-subagents/src/runs/shared/worktree.js +10 -1
  1009. package/extensions/dm-subagents/src/shared/atomic-json.js +2 -1
  1010. package/extensions/dm-subagents/src/shared/disabled-features.js +101 -0
  1011. package/extensions/dm-subagents/src/shared/dm-declarations.js +14 -0
  1012. package/extensions/dm-subagents/src/shared/dm-safeguards.js +41 -0
  1013. package/extensions/dm-subagents/src/shared/dm-settlement.js +48 -0
  1014. package/extensions/dm-subagents/src/shared/edit-distance.js +23 -0
  1015. package/extensions/dm-subagents/src/shared/extension-context.js +4 -0
  1016. package/extensions/dm-subagents/src/shared/file-lease.js +89 -0
  1017. package/extensions/dm-subagents/src/shared/fork-context.js +0 -1
  1018. package/extensions/dm-subagents/src/shared/formatters.js +1 -6
  1019. package/extensions/dm-subagents/src/shared/model-info.js +23 -0
  1020. package/extensions/dm-subagents/src/shared/package-version.js +12 -0
  1021. package/extensions/dm-subagents/src/shared/parent-wake.js +67 -0
  1022. package/extensions/dm-subagents/src/shared/pruned-fork.js +6 -2
  1023. package/extensions/dm-subagents/src/shared/required-child-extensions.js +35 -5
  1024. package/extensions/dm-subagents/src/shared/runtime-module-path.js +9 -0
  1025. package/extensions/dm-subagents/src/shared/settings-file-lease.js +31 -0
  1026. package/extensions/dm-subagents/src/shared/types.js +3 -1
  1027. package/extensions/dm-subagents/src/shared/utils.js +7 -7
  1028. package/extensions/dm-subagents/src/slash/prompt-template-bridge.js +2 -2
  1029. package/extensions/dm-subagents/src/slash/slash-commands.js +25 -15
  1030. package/extensions/dm-subagents/src/slash/subagent-cost.js +38 -7
  1031. package/extensions/dm-subagents/src/slash/subagents-admin.js +1 -1
  1032. package/extensions/dm-subagents/src/tui/dm-mouse-region.js +12 -0
  1033. package/extensions/dm-subagents/src/tui/fleet-status.js +12 -6
  1034. package/extensions/dm-subagents/src/tui/fleet-transcript.js +6 -2
  1035. package/extensions/dm-subagents/src/tui/fleet.js +20 -6
  1036. package/extensions/dm-subagents/src/tui/render.js +126 -72
  1037. package/extensions/dm-subagents/src/tui/running-tone.js +20 -0
  1038. package/extensions/dm-subagents/src/tui/subagent-messages.js +249 -0
  1039. package/extensions/dm-subagents/src/watchdog/diff-tool.js +19 -11
  1040. package/extensions/dm-subagents/src/watchdog/permission-arbiter.js +3 -11
  1041. package/extensions/dm-subagents/src/watchdog/register-child.js +2 -2
  1042. package/extensions/dm-subagents/src/watchdog/register-main.js +4 -24
  1043. package/extensions/dm-subagents/src/watchdog/render.js +1 -19
  1044. package/extensions/dm-subagents/src/watchdog/review.js +4 -7
  1045. package/extensions/dm-subagents/src/watchdog/runtime.js +6 -2
  1046. package/extensions/dm-subagents/src/watchdog/settings.js +22 -17
  1047. package/extensions/dm-subagents/src/watchdog/tool-actions.js +2 -2
  1048. package/extensions/dm-subagents/src/watchdog/turn-delta.js +1 -1
  1049. package/extensions/dm-subagents/src/workflows/chat-progress.js +2 -2
  1050. package/extensions/dm-subagents/src/workflows/scripted-workflow.js +116 -45
  1051. package/extensions/dm-subagents/src/workflows/structured-workflow-scripts.js +154 -0
  1052. package/extensions/dm-subagents/src/workflows/workflow-checklist.js +3 -0
  1053. package/extensions/dm-subagents/src/workflows/workflow-receipt.js +7 -4
  1054. package/extensions/dm-subagents/src/workflows/workflow-resources.js +52 -17
  1055. package/extensions/dm-subagents/src/workflows/workflow-reuse.js +87 -0
  1056. package/extensions/dm-subagents/src/workflows/workflow-revival.js +80 -0
  1057. package/extensions/dm-tty/control.js +150 -0
  1058. package/extensions/dm-tty/index.js +122 -0
  1059. package/extensions/dm-tty/package.json +20 -0
  1060. package/extensions/dm-tty/pty.js +213 -0
  1061. package/extensions/dm-tty/pty_bridge.py +266 -0
  1062. package/extensions/dm-tty/server.js +438 -0
  1063. package/extensions/dm-tty/sessions.js +97 -0
  1064. package/extensions/dm-tty/standalone.js +75 -0
  1065. package/extensions/dm-tty/web/client.js +1141 -0
  1066. package/extensions/dm-tty/web/index.html +117 -0
  1067. package/extensions/dm-tty/web/style.css +73 -0
  1068. package/extensions/dm-web-access/brave-rate-limit.js +160 -0
  1069. package/extensions/dm-web-access/brave.js +62 -11
  1070. package/extensions/dm-web-access/ceramic.js +197 -0
  1071. package/extensions/dm-web-access/chrome-cookies.js +69 -21
  1072. package/extensions/dm-web-access/curator-page.js +12 -2
  1073. package/extensions/dm-web-access/curator-server.js +10 -0
  1074. package/extensions/dm-web-access/declared-web-links.js +1 -1
  1075. package/extensions/dm-web-access/degoog.js +288 -0
  1076. package/extensions/dm-web-access/dist/index.js +28404 -0
  1077. package/extensions/dm-web-access/dist/mcp-cli.js +28186 -0
  1078. package/extensions/dm-web-access/duckduckgo.js +6 -3
  1079. package/extensions/dm-web-access/endpoint-pdf-extract.js +210 -0
  1080. package/extensions/dm-web-access/exa.js +17 -35
  1081. package/extensions/dm-web-access/extract.js +63 -10
  1082. package/extensions/dm-web-access/firecrawl.js +30 -4
  1083. package/extensions/dm-web-access/gemini-search.js +117 -37
  1084. package/extensions/dm-web-access/gemini-web.js +7 -7
  1085. package/extensions/dm-web-access/github-extract.js +28 -2
  1086. package/extensions/dm-web-access/github-issue-pr.js +88 -73
  1087. package/extensions/dm-web-access/index.js +230 -1161
  1088. package/extensions/dm-web-access/keenable.js +197 -0
  1089. package/extensions/dm-web-access/mcp-cli.js +30 -0
  1090. package/extensions/dm-web-access/mcp-server.js +51 -0
  1091. package/extensions/dm-web-access/mcp-tool-definitions.js +93 -0
  1092. package/extensions/dm-web-access/openai-search.js +70 -20
  1093. package/extensions/dm-web-access/opencode-session-headers.js +1 -1
  1094. package/extensions/dm-web-access/package.json +4 -1
  1095. package/extensions/dm-web-access/page-query.js +5 -10
  1096. package/extensions/dm-web-access/parallel-mcp.js +2 -1
  1097. package/extensions/dm-web-access/pdf-extract.js +34 -1
  1098. package/extensions/dm-web-access/perplexity.js +68 -51
  1099. package/extensions/dm-web-access/query-rewrite.js +3 -4
  1100. package/extensions/dm-web-access/scripts/build.js +8 -0
  1101. package/extensions/dm-web-access/ssrf-protection.js +10 -8
  1102. package/extensions/dm-web-access/storage.js +79 -76
  1103. package/extensions/dm-web-access/summary-model-scope.js +5 -64
  1104. package/extensions/dm-web-access/summary-review.js +35 -9
  1105. package/extensions/dm-web-access/tavily.js +69 -22
  1106. package/extensions/dm-web-access/tool-activation.js +44 -26
  1107. package/extensions/dm-web-access/tool-arguments.js +21 -0
  1108. package/extensions/dm-web-access/utils.js +17 -7
  1109. package/extensions/dm-web-access/video-extract.js +1 -1
  1110. package/extensions/dm-web-access/web-tool-contract.js +0 -0
  1111. package/extensions/dm-web-access/web-tool-core.js +1312 -0
  1112. package/extensions/dm-web-access/you.js +155 -0
  1113. package/extensions/dm-web-access/youtube-extract.js +2 -2
  1114. package/extensions/dm-web-access/zai.js +159 -0
  1115. package/package.json +13 -9
@@ -0,0 +1,1249 @@
1
+ import * as nodeFs from "node:fs";
2
+ import * as path from "node:path";
3
+ import { fileURLToPath, pathToFileURL } from "node:url";
4
+ import { Type } from "../clients/deps/typebox.js";
5
+ import { logLatency } from "../clients/latency-logger.js";
6
+ import { newLspMutationCorrelationId, recordLspMutationOutcome } from "../clients/lsp-mutation.js";
7
+ import { uriToPath } from "../clients/path-utils.js";
8
+ import { escapeRegExp } from "../clients/string-utils.js";
9
+ import { isRecordableProjectPath } from "../clients/file-utils.js";
10
+ import { compactRenderResult } from "./render-compact.js";
11
+ import { applyWorkspaceEdit, refuseStaleWorkspaceEdit, summarizeWorkspaceEdit, workspaceEditTextPaths } from "../clients/lsp/edits.js";
12
+ import { hashDiagnosticContent } from "../clients/lsp/diagnostic-binding.js";
13
+ import { getLSPService } from "../clients/lsp/capabilities.js";
14
+ import { buildLspNavigationEnvelope } from "./lsp-structured-output.js";
15
+ import { SYMBOL_KIND_NAMES } from "../clients/lsp-document-symbols.js";
16
+ const VALID_OPERATIONS = [
17
+ "definition",
18
+ "typeDefinition",
19
+ "declaration",
20
+ "references",
21
+ "hover",
22
+ "signatureHelp",
23
+ "documentSymbol",
24
+ "findSymbol",
25
+ "workspaceSymbol",
26
+ "codeAction",
27
+ "rename",
28
+ "rename_file",
29
+ "implementation",
30
+ "prepareCallHierarchy",
31
+ "incomingCalls",
32
+ "outgoingCalls",
33
+ "executeCommand",
34
+ "workspaceDiagnostics",
35
+ "capabilities"
36
+ ];
37
+ const NAVIGABLE_SYMBOL_KINDS = new Set([
38
+ 5,
39
+ 6,
40
+ 8,
41
+ 11,
42
+ 12,
43
+ 13,
44
+ 22,
45
+ 23
46
+ ]);
47
+ function normalizeOperation(value) {
48
+ if (typeof value !== "string")
49
+ return "";
50
+ return value.trim().replace(/^["']+|["']+$/g, "");
51
+ }
52
+ function isValidOperation(value) {
53
+ return VALID_OPERATIONS.includes(value);
54
+ }
55
+ function operationSupportStatus(operation, support) {
56
+ if (!support)
57
+ return null;
58
+ if (operation === "definition")
59
+ return support.definition;
60
+ if (operation === "typeDefinition")
61
+ return support.typeDefinition;
62
+ if (operation === "declaration")
63
+ return support.declaration;
64
+ if (operation === "references")
65
+ return support.references;
66
+ if (operation === "hover")
67
+ return support.hover;
68
+ if (operation === "signatureHelp")
69
+ return support.signatureHelp;
70
+ if (operation === "documentSymbol" || operation === "findSymbol")
71
+ return support.documentSymbol;
72
+ if (operation === "workspaceSymbol")
73
+ return support.workspaceSymbol;
74
+ if (operation === "codeAction")
75
+ return support.codeAction;
76
+ if (operation === "rename")
77
+ return support.rename;
78
+ if (operation === "implementation")
79
+ return support.implementation;
80
+ if (operation === "prepareCallHierarchy" || operation === "incomingCalls" || operation === "outgoingCalls")
81
+ return support.callHierarchy;
82
+ return null;
83
+ }
84
+ function emptyReasonForOperation(operation) {
85
+ if (operation === "signatureHelp")
86
+ return "position-sensitive-or-no-signature";
87
+ if (operation === "codeAction")
88
+ return "no-applicable-actions";
89
+ if (operation === "rename")
90
+ return "no-rename-edits-or-symbol-not-renamable";
91
+ if (operation === "rename_file")
92
+ return "no-file-rename-result";
93
+ if (operation === "findSymbol")
94
+ return "no-matching-symbols";
95
+ if (operation === "workspaceSymbol")
96
+ return "no-matching-symbols-or-server-index-unavailable";
97
+ if (operation === "capabilities")
98
+ return "no-active-lsp-servers";
99
+ if (operation === "executeCommand")
100
+ return "command-returned-no-result";
101
+ if (operation === "incomingCalls" || operation === "outgoingCalls")
102
+ return "no-call-hierarchy-results";
103
+ return "no-results";
104
+ }
105
+ function parseSymbolSelector(symbol) {
106
+ const trimmed = symbol.trim();
107
+ const match = /^([^#]*)(?:#(-?\d+))?$/.exec(trimmed);
108
+ const baseSymbol = (match?.[1] ?? trimmed).trim();
109
+ const rawOccurrence = match?.[2];
110
+ if (!rawOccurrence)
111
+ return { baseSymbol, occurrence: 1 };
112
+ const occurrence = Number.parseInt(rawOccurrence, 10);
113
+ if (!Number.isFinite(occurrence) || occurrence < 1) {
114
+ return {
115
+ baseSymbol,
116
+ occurrence: 1,
117
+ debug: `invalid occurrence selector #${rawOccurrence}; using #1`
118
+ };
119
+ }
120
+ return { baseSymbol, occurrence };
121
+ }
122
+ function findNthMatch(lineText, regex, occurrence) {
123
+ let seen = 0;
124
+ regex.lastIndex = 0;
125
+ let match;
126
+ while ((match = regex.exec(lineText)) !== null) {
127
+ seen += 1;
128
+ if (seen === occurrence)
129
+ return match;
130
+ if (match[0].length === 0)
131
+ regex.lastIndex += 1;
132
+ }
133
+ return null;
134
+ }
135
+ function firstNonWhitespaceCharacter(lineText) {
136
+ const match = /\S/.exec(lineText);
137
+ return (match?.index ?? 0) + 1;
138
+ }
139
+ function resolveSymbolColumn(content, line1, character, symbol) {
140
+ if (typeof character === "number" && character > 0) {
141
+ return { character, strategy: "explicit" };
142
+ }
143
+ const lineText = content.split(/\r?\n/)[line1 - 1] ?? "";
144
+ if (!symbol || symbol.trim().length === 0) {
145
+ return {
146
+ character: 1,
147
+ strategy: "fallback",
148
+ debug: "character omitted and no symbol supplied; using column 1"
149
+ };
150
+ }
151
+ const { baseSymbol, occurrence, debug } = parseSymbolSelector(symbol);
152
+ if (!baseSymbol) {
153
+ return {
154
+ character: firstNonWhitespaceCharacter(lineText),
155
+ requestedSymbol: symbol,
156
+ baseSymbol,
157
+ requestedOccurrence: occurrence,
158
+ usedOccurrence: 1,
159
+ strategy: "fallback",
160
+ debug: debug ?? "empty symbol selector; using first non-whitespace column"
161
+ };
162
+ }
163
+ const pattern = `\\b${escapeRegExp(baseSymbol)}\\b`;
164
+ const exactRegex = new RegExp(pattern, "g");
165
+ const exact = findNthMatch(lineText, exactRegex, occurrence);
166
+ if (exact) {
167
+ return {
168
+ character: exact.index + 1,
169
+ requestedSymbol: symbol,
170
+ baseSymbol,
171
+ requestedOccurrence: occurrence,
172
+ usedOccurrence: occurrence,
173
+ strategy: "word-boundary",
174
+ debug
175
+ };
176
+ }
177
+ const firstExact = findNthMatch(lineText, exactRegex, 1);
178
+ if (firstExact && occurrence !== 1) {
179
+ return {
180
+ character: firstExact.index + 1,
181
+ requestedSymbol: symbol,
182
+ baseSymbol,
183
+ requestedOccurrence: occurrence,
184
+ usedOccurrence: 1,
185
+ strategy: "word-boundary",
186
+ debug: `${debug ? `${debug}; ` : ""}occurrence #${occurrence} not found; using #1`
187
+ };
188
+ }
189
+ const insensitiveRegex = new RegExp(pattern, "gi");
190
+ const insensitive = findNthMatch(lineText, insensitiveRegex, occurrence);
191
+ if (insensitive) {
192
+ return {
193
+ character: insensitive.index + 1,
194
+ requestedSymbol: symbol,
195
+ baseSymbol,
196
+ requestedOccurrence: occurrence,
197
+ usedOccurrence: occurrence,
198
+ strategy: "case-insensitive",
199
+ debug: debug ?? "exact-case symbol not found; used case-insensitive match"
200
+ };
201
+ }
202
+ const firstInsensitive = findNthMatch(lineText, insensitiveRegex, 1);
203
+ if (firstInsensitive && occurrence !== 1) {
204
+ return {
205
+ character: firstInsensitive.index + 1,
206
+ requestedSymbol: symbol,
207
+ baseSymbol,
208
+ requestedOccurrence: occurrence,
209
+ usedOccurrence: 1,
210
+ strategy: "case-insensitive",
211
+ debug: `${debug ? `${debug}; ` : ""}occurrence #${occurrence} not found case-insensitively; using #1`
212
+ };
213
+ }
214
+ return {
215
+ character: firstNonWhitespaceCharacter(lineText),
216
+ requestedSymbol: symbol,
217
+ baseSymbol,
218
+ requestedOccurrence: occurrence,
219
+ usedOccurrence: 1,
220
+ strategy: "fallback",
221
+ debug: `${debug ? `${debug}; ` : ""}symbol not found on line; using first non-whitespace column`
222
+ };
223
+ }
224
+ function tokenAtPosition(content, line1, char1) {
225
+ const lines = content.split(/\r?\n/);
226
+ const line = lines[line1 - 1];
227
+ if (!line)
228
+ return;
229
+ const chars = [...line];
230
+ const idx = Math.max(0, Math.min(chars.length - 1, char1 - 1));
231
+ const isWord = (ch) => !!ch && /[A-Za-z0-9_?!]/.test(ch);
232
+ let left = idx;
233
+ let right = idx;
234
+ if (!isWord(chars[idx]) && isWord(chars[idx + 1])) {
235
+ left = idx + 1;
236
+ right = idx + 1;
237
+ }
238
+ while (left > 0 && isWord(chars[left - 1]))
239
+ left -= 1;
240
+ while (right < chars.length - 1 && isWord(chars[right + 1]))
241
+ right += 1;
242
+ const token = chars.slice(left, right + 1).join("").trim();
243
+ return token.length > 0 ? token : undefined;
244
+ }
245
+ function symbolKindLabel(kind) {
246
+ return kind == null ? "symbol" : SYMBOL_KIND_NAMES[kind] ?? "symbol";
247
+ }
248
+ function rangeStart(range) {
249
+ const start = range?.start;
250
+ return {
251
+ line: typeof start?.line === "number" ? start.line + 1 : undefined,
252
+ character: typeof start?.character === "number" ? start.character + 1 : undefined
253
+ };
254
+ }
255
+ function findSymbolMatches(symbols, query, options) {
256
+ const normalizedQuery = query.trim().toLowerCase();
257
+ if (!normalizedQuery)
258
+ return [];
259
+ const matches = [];
260
+ const matchesText = (symbol) => {
261
+ const values = [symbol.name, symbol.detail].filter((value) => Boolean(value)).map((value) => value.trim().toLowerCase());
262
+ return options.exactMatch ? values.some((value) => value === normalizedQuery) : values.some((value) => value.includes(normalizedQuery));
263
+ };
264
+ const matchesKind = (symbol) => {
265
+ if (options.kinds.size === 0)
266
+ return true;
267
+ return options.kinds.has(symbolKindLabel(symbol.kind).toLowerCase());
268
+ };
269
+ const visit = (entries, depth) => {
270
+ for (const symbol of entries) {
271
+ if (symbol.name && matchesText(symbol) && matchesKind(symbol)) {
272
+ const preferredRange = symbol.selectionRange ?? symbol.range;
273
+ const start = rangeStart(preferredRange);
274
+ matches.push({
275
+ name: symbol.name,
276
+ kind: symbolKindLabel(symbol.kind),
277
+ kindCode: symbol.kind,
278
+ detail: symbol.detail,
279
+ line: start.line,
280
+ character: start.character,
281
+ depth,
282
+ location: symbol.location,
283
+ range: preferredRange
284
+ });
285
+ if (matches.length >= options.maxResults)
286
+ return;
287
+ }
288
+ if (!options.topLevelOnly && symbol.children?.length) {
289
+ visit(symbol.children, depth + 1);
290
+ if (matches.length >= options.maxResults)
291
+ return;
292
+ }
293
+ }
294
+ };
295
+ visit(symbols, 1);
296
+ return matches;
297
+ }
298
+ function flattenSymbols(symbols) {
299
+ const all = [];
300
+ for (const symbol of symbols) {
301
+ all.push(symbol);
302
+ if (symbol.children && symbol.children.length > 0) {
303
+ all.push(...flattenSymbols(symbol.children));
304
+ }
305
+ }
306
+ return all;
307
+ }
308
+ function pickLocalSymbolLocation(symbols, token, filePath) {
309
+ const flat = flattenSymbols(symbols).filter((symbol) => symbol.name === token);
310
+ if (flat.length === 0)
311
+ return [];
312
+ const uri = pathToFileURL(filePath).href;
313
+ return flat.map((symbol) => {
314
+ if (symbol.location?.uri && symbol.location.range) {
315
+ return { uri: symbol.location.uri, range: symbol.location.range };
316
+ }
317
+ if (symbol.range) {
318
+ return { uri, range: symbol.range };
319
+ }
320
+ return;
321
+ }).filter((entry) => Boolean(entry));
322
+ }
323
+ function workspaceSymbolDedupeKey(symbol) {
324
+ const location = symbol.location;
325
+ const start = rangeStart(location?.range ?? symbol.range ?? symbol.selectionRange);
326
+ return [
327
+ symbol.name ?? "",
328
+ symbol.detail ?? "",
329
+ symbol.kind ?? "",
330
+ location?.uri ?? "",
331
+ start.line ?? "",
332
+ start.character ?? ""
333
+ ].join(":");
334
+ }
335
+ function dedupeWorkspaceSymbols(symbols) {
336
+ const out = [];
337
+ const seen = new Set;
338
+ for (const symbol of symbols) {
339
+ const key = workspaceSymbolDedupeKey(symbol);
340
+ if (seen.has(key))
341
+ continue;
342
+ seen.add(key);
343
+ out.push(symbol);
344
+ }
345
+ return out;
346
+ }
347
+ function asRecord(value) {
348
+ return typeof value === "object" && value !== null ? value : undefined;
349
+ }
350
+ function searchReadFromUriRange(uri, range) {
351
+ if (typeof uri !== "string" || !uri.startsWith("file:"))
352
+ return;
353
+ const rangeLike = asRecord(range);
354
+ const startLine = rangeLike?.start?.line;
355
+ if (typeof startLine !== "number" || !Number.isFinite(startLine)) {
356
+ return;
357
+ }
358
+ const endLine = rangeLike?.end?.line;
359
+ try {
360
+ return {
361
+ file: fileURLToPath(uri),
362
+ startLine: Math.max(1, Math.floor(startLine) + 1),
363
+ endLine: typeof endLine === "number" && Number.isFinite(endLine) ? Math.max(1, Math.floor(endLine) + 1) : undefined
364
+ };
365
+ } catch {
366
+ return;
367
+ }
368
+ }
369
+ function pushSearchRead(out, uri, range) {
370
+ const loc = searchReadFromUriRange(uri, range);
371
+ if (loc)
372
+ out.push(loc);
373
+ }
374
+ function collectLocationSearchReads(result) {
375
+ const out = [];
376
+ for (const entry of Array.isArray(result) ? result : [result]) {
377
+ const record = asRecord(entry);
378
+ if (!record)
379
+ continue;
380
+ pushSearchRead(out, record.uri, record.range);
381
+ pushSearchRead(out, record.targetUri, record.targetSelectionRange ?? record.targetRange);
382
+ }
383
+ return out;
384
+ }
385
+ function collectWorkspaceSymbolSearchReads(result) {
386
+ const out = [];
387
+ for (const entry of Array.isArray(result) ? result : [result]) {
388
+ const symbol = asRecord(entry);
389
+ const location = asRecord(symbol?.location);
390
+ if (!location)
391
+ continue;
392
+ pushSearchRead(out, location.uri, location.range);
393
+ pushSearchRead(out, location.targetUri, location.targetSelectionRange ?? location.targetRange);
394
+ }
395
+ return out;
396
+ }
397
+ function collectCallHierarchySearchReads(result, operation, callHierarchyItem) {
398
+ const out = [];
399
+ for (const entry of Array.isArray(result) ? result : [result]) {
400
+ const record = asRecord(entry);
401
+ if (!record)
402
+ continue;
403
+ const item = asRecord(operation === "incomingCalls" ? record.from : record.to);
404
+ pushSearchRead(out, item?.uri, item?.selectionRange ?? item?.range);
405
+ const rangeUri = operation === "incomingCalls" ? item?.uri : callHierarchyItem?.uri;
406
+ const fromRanges = record.fromRanges;
407
+ if (Array.isArray(fromRanges)) {
408
+ for (const range of fromRanges)
409
+ pushSearchRead(out, rangeUri, range);
410
+ }
411
+ }
412
+ return out;
413
+ }
414
+ function collectSearchReadsForOperation(operation, result, callHierarchyItem) {
415
+ if ([
416
+ "definition",
417
+ "typeDefinition",
418
+ "declaration",
419
+ "references",
420
+ "implementation"
421
+ ].includes(operation)) {
422
+ return collectLocationSearchReads(result);
423
+ }
424
+ if (operation === "workspaceSymbol") {
425
+ return collectWorkspaceSymbolSearchReads(result);
426
+ }
427
+ if (operation === "incomingCalls" || operation === "outgoingCalls") {
428
+ return collectCallHierarchySearchReads(result, operation, callHierarchyItem);
429
+ }
430
+ return [];
431
+ }
432
+ function formatCapabilities(snapshots, filePath) {
433
+ if (snapshots.length === 0) {
434
+ return filePath ? `No active LSP server for ${path.basename(filePath)}. Open/touch the file first or run another LSP operation to start the server.` : "No active LSP servers in this session.";
435
+ }
436
+ const rows = [
437
+ ["definition", (s) => !!s.operationSupport.definition],
438
+ ["typeDefinition", (s) => !!s.operationSupport.typeDefinition],
439
+ ["declaration", (s) => !!s.operationSupport.declaration],
440
+ ["references", (s) => !!s.operationSupport.references],
441
+ ["hover", (s) => !!s.operationSupport.hover],
442
+ ["rename", (s) => !!s.operationSupport.rename],
443
+ ["codeAction", (s) => !!s.operationSupport.codeAction],
444
+ ["codeAction/resolve", (s) => !!s.operationSupport.codeActionResolve],
445
+ ["workspace/willRenameFiles", (s) => !!s.operationSupport.willRenameFiles],
446
+ ["workspaceSymbol", (s) => !!s.operationSupport.workspaceSymbol],
447
+ ["implementation", (s) => !!s.operationSupport.implementation],
448
+ ["signatureHelp", (s) => !!s.operationSupport.signatureHelp],
449
+ ["incomingCalls", (s) => !!s.operationSupport.callHierarchy],
450
+ ["outgoingCalls", (s) => !!s.operationSupport.callHierarchy],
451
+ [
452
+ "workspaceDiagnostics",
453
+ (s) => s.workspaceDiagnosticsSupport.mode === "pull",
454
+ "pull diagnostics"
455
+ ],
456
+ [
457
+ "rename_file",
458
+ () => true,
459
+ "filesystem rename; preflight support shown above"
460
+ ]
461
+ ];
462
+ const lines = [];
463
+ for (const snapshot of snapshots) {
464
+ const label = filePath ? `${snapshot.serverId} (${path.basename(filePath)})` : `${snapshot.serverId} (${snapshot.root})`;
465
+ lines.push(label);
466
+ for (const [name, supported, note] of rows) {
467
+ const suffix = note ? ` (${note})` : "";
468
+ lines.push(` ${name} ${supported(snapshot) ? "✓" : "✗"}${suffix}`);
469
+ }
470
+ const commands = snapshot.advertisedCommands ?? [];
471
+ lines.push(` executeCommand ${commands.length > 0 ? "✓" : "✗"} (${commands.length} advertised command(s)` + (commands.length > 0 ? `: ${commands.slice(0, 20).join(", ")}` : "") + ")");
472
+ }
473
+ return lines.join(`
474
+ `);
475
+ }
476
+ function classifyCodeActions(actions) {
477
+ if (!actions || actions.length === 0)
478
+ return { quickfix: 0, refactor: 0, other: 0 };
479
+ let quickfix = 0;
480
+ let refactor = 0;
481
+ let other = 0;
482
+ for (const action of actions) {
483
+ const kind = action.kind ?? "";
484
+ if (kind.startsWith("quickfix"))
485
+ quickfix += 1;
486
+ else if (kind.startsWith("refactor"))
487
+ refactor += 1;
488
+ else
489
+ other += 1;
490
+ }
491
+ return { quickfix, refactor, other };
492
+ }
493
+ async function openFileBestEffort(lspService, filePath, waitForDiagnostics = false) {
494
+ let fileContent;
495
+ try {
496
+ fileContent = nodeFs.readFileSync(filePath, "utf-8");
497
+ } catch {
498
+ return;
499
+ }
500
+ if (fileContent === "")
501
+ return "";
502
+ try {
503
+ await lspService.touchFile(filePath, fileContent, {
504
+ diagnostics: waitForDiagnostics ? "document" : "none",
505
+ source: "lsp_navigation",
506
+ clientScope: waitForDiagnostics ? "all" : "primary"
507
+ });
508
+ } catch {}
509
+ return fileContent;
510
+ }
511
+ const RENAME_MTIME_MARGIN_MS = 2000;
512
+ function captureRenameExpectedContent(lspService, edit, cwd, targetFilePath, targetContent, requestedAtMs) {
513
+ const expected = new Map;
514
+ let targetRealPath;
515
+ if (targetContent !== undefined) {
516
+ try {
517
+ targetRealPath = nodeFs.realpathSync.native(targetFilePath);
518
+ } catch {
519
+ targetRealPath = undefined;
520
+ }
521
+ }
522
+ for (const diskPath of workspaceEditTextPaths(edit)) {
523
+ let realPath;
524
+ let content;
525
+ let mtimeMs;
526
+ try {
527
+ realPath = nodeFs.realpathSync.native(diskPath);
528
+ content = nodeFs.readFileSync(realPath, "utf-8");
529
+ mtimeMs = nodeFs.statSync(realPath).mtimeMs;
530
+ } catch {
531
+ continue;
532
+ }
533
+ if (targetContent !== undefined && realPath === targetRealPath) {
534
+ expected.set(realPath, targetContent);
535
+ continue;
536
+ }
537
+ const tracked = lspService.getTrackedContent(diskPath, cwd);
538
+ const firstOpenedAfterRequest = tracked !== undefined && (tracked.openedAtMs ?? 0) >= requestedAtMs;
539
+ const quietSinceClientStart = tracked?.clientStartedAtMs !== undefined && mtimeMs < tracked.clientStartedAtMs - RENAME_MTIME_MARGIN_MS;
540
+ const sent = firstOpenedAfterRequest && quietSinceClientStart ? undefined : tracked;
541
+ if (sent !== undefined) {
542
+ if (sent.hash !== hashDiagnosticContent(content) || (sent.changedAtMs ?? requestedAtMs) >= requestedAtMs) {
543
+ refuseStaleWorkspaceEdit(diskPath, "it changed after the language server computed the rename from it");
544
+ }
545
+ } else if (tracked !== undefined && (tracked.hash !== hashDiagnosticContent(content) || tracked.openedHash !== tracked.hash)) {
546
+ refuseStaleWorkspaceEdit(diskPath, "it changed after the language client first opened it, after the rename was requested");
547
+ } else if (mtimeMs >= requestedAtMs) {
548
+ refuseStaleWorkspaceEdit(diskPath, "it was written after the rename was requested and the language server has no open copy, so it may not have read these bytes");
549
+ } else if (mtimeMs >= requestedAtMs - RENAME_MTIME_MARGIN_MS) {
550
+ refuseStaleWorkspaceEdit(diskPath, `it was modified within ${RENAME_MTIME_MARGIN_MS / 1000} s of the rename request; retry`);
551
+ }
552
+ expected.set(realPath, content);
553
+ }
554
+ return expected;
555
+ }
556
+ export function createLspNavigationTool(getFlag, mutationDeps) {
557
+ return {
558
+ name: "lsp_navigation",
559
+ label: "LSP Navigate",
560
+ description: 'Navigate source with language-server operations such as definition, references, hover, and rename. Example: use `{operation: "references", path: "src/app.ts", line: 12}`.',
561
+ promptSnippet: "Navigate definitions and references with LSP",
562
+ renderResult: compactRenderResult(({ details, args, isError, text }) => {
563
+ const op = details?.operation ?? (typeof args.operation === "string" ? args.operation : "lsp");
564
+ if (isError || details?.supported === false) {
565
+ return `lsp_navigation ${op} — ${details?.emptyReason ?? text.split(`
566
+ `)[0] ?? "unavailable"}`;
567
+ }
568
+ const n = details?.resultCount ?? 0;
569
+ if (n === 0) {
570
+ return `lsp_navigation ${op} — ${details?.emptyReason ?? "no results"}`;
571
+ }
572
+ return `lsp_navigation ${op} — ${n} result${n === 1 ? "" : "s"}`;
573
+ }),
574
+ parameters: Type.Object({
575
+ operation: Type.String({
576
+ description: "LSP operation to perform. Valid values: definition, typeDefinition, declaration, references, hover, signatureHelp, documentSymbol, findSymbol, workspaceSymbol, codeAction, rename, rename_file, implementation, prepareCallHierarchy, incomingCalls, outgoingCalls, executeCommand, workspaceDiagnostics, capabilities."
577
+ }),
578
+ path: Type.Optional(Type.String({
579
+ description: "Target file path."
580
+ })),
581
+ line: Type.Optional(Type.Number({
582
+ description: "1-based line number."
583
+ })),
584
+ character: Type.Optional(Type.Number({
585
+ description: "1-based character offset."
586
+ })),
587
+ symbol: Type.Optional(Type.String({
588
+ description: "Symbol for automatic character resolution."
589
+ })),
590
+ endLine: Type.Optional(Type.Number({
591
+ description: "1-based range end line."
592
+ })),
593
+ endCharacter: Type.Optional(Type.Number({
594
+ description: "1-based range end character."
595
+ })),
596
+ newName: Type.Optional(Type.String({
597
+ description: "New symbol name."
598
+ })),
599
+ newFilePath: Type.Optional(Type.String({
600
+ description: "New file path."
601
+ })),
602
+ apply: Type.Optional(Type.Boolean({
603
+ description: "Apply a mutation instead of previewing it."
604
+ })),
605
+ command: Type.Optional(Type.String({
606
+ description: "Server command identifier."
607
+ })),
608
+ commandArguments: Type.Optional(Type.Array(Type.Unknown(), {
609
+ description: "Arguments for the server command."
610
+ })),
611
+ query: Type.Optional(Type.String({
612
+ description: "Symbol search query."
613
+ })),
614
+ kinds: Type.Optional(Type.Array(Type.String(), {
615
+ description: "Symbol-kind filters."
616
+ })),
617
+ exactMatch: Type.Optional(Type.Boolean({
618
+ description: "Require an exact symbol match."
619
+ })),
620
+ topLevelOnly: Type.Optional(Type.Boolean({
621
+ description: "Exclude nested symbols."
622
+ })),
623
+ maxResults: Type.Optional(Type.Number({
624
+ description: "Maximum symbol matches."
625
+ })),
626
+ callHierarchyItem: Type.Optional(Type.Object({
627
+ name: Type.String(),
628
+ kind: Type.Number(),
629
+ uri: Type.String(),
630
+ range: Type.Object({
631
+ start: Type.Object({
632
+ line: Type.Number(),
633
+ character: Type.Number()
634
+ }),
635
+ end: Type.Object({
636
+ line: Type.Number(),
637
+ character: Type.Number()
638
+ })
639
+ }),
640
+ selectionRange: Type.Object({
641
+ start: Type.Object({
642
+ line: Type.Number(),
643
+ character: Type.Number()
644
+ }),
645
+ end: Type.Object({
646
+ line: Type.Number(),
647
+ character: Type.Number()
648
+ })
649
+ })
650
+ }, {}))
651
+ }),
652
+ async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
653
+ const session = mutationDeps?.runtime?.captureSessionGeneration?.();
654
+ const startedAt = Date.now();
655
+ let supported = null;
656
+ let diagnosticsMode = "unknown";
657
+ let columnResolution;
658
+ let openedFileContent;
659
+ let renameRequestedAtMs = 0;
660
+ let mutationContext;
661
+ let requestedApply = false;
662
+ const workspaceScopeAttribution = {};
663
+ const finalize = (payload, meta) => {
664
+ if (payload.isError && requestedApply && mutationContext && ["rename", "rename_file", "executeCommand"].includes(meta.operation)) {
665
+ recordLspMutationOutcome(mutationContext, "failed");
666
+ }
667
+ const normalizedFilePath = meta.filePath.replace(/\\/g, "/");
668
+ logLatency({
669
+ type: "phase",
670
+ phase: "lsp_navigation_result",
671
+ filePath: normalizedFilePath,
672
+ durationMs: Date.now() - startedAt,
673
+ metadata: {
674
+ operation: meta.operation,
675
+ failureKind: meta.failureKind,
676
+ resultCount: meta.resultCount,
677
+ supported,
678
+ diagnosticsMode,
679
+ columnResolution,
680
+ ...Object.keys(workspaceScopeAttribution).length > 0 ? { workspaceScopeAttribution } : {}
681
+ }
682
+ });
683
+ const text = payload.content[0]?.text ?? "";
684
+ const envelope = buildLspNavigationEnvelope({
685
+ operation: meta.operation,
686
+ filePath: meta.filePath,
687
+ failureKind: meta.failureKind,
688
+ resultCount: meta.resultCount,
689
+ text,
690
+ isError: payload.isError,
691
+ details: payload.details
692
+ });
693
+ return {
694
+ ...payload,
695
+ content: [
696
+ {
697
+ type: "text",
698
+ text: JSON.stringify(envelope)
699
+ }
700
+ ],
701
+ details: {
702
+ ...payload.details,
703
+ failureKind: meta.failureKind
704
+ }
705
+ };
706
+ };
707
+ if (getFlag("no-lsp", ctx.cwd)) {
708
+ return finalize({
709
+ content: [
710
+ {
711
+ type: "text",
712
+ text: "lsp_navigation requires LSP to be enabled. Remove --no-lsp to use LSP navigation."
713
+ }
714
+ ],
715
+ isError: true
716
+ }, {
717
+ operation: "precheck",
718
+ filePath: "(workspace)",
719
+ failureKind: "lsp_disabled",
720
+ resultCount: 0
721
+ });
722
+ }
723
+ const { operation: rawOperation, path: rawPath, line, character, symbol, endLine, endCharacter, newName, newFilePath, apply, command, commandArguments, query, kinds, exactMatch, topLevelOnly, maxResults, callHierarchyItem } = params;
724
+ const normalizedOperation = normalizeOperation(rawOperation);
725
+ if (!isValidOperation(normalizedOperation)) {
726
+ return finalize({
727
+ content: [
728
+ {
729
+ type: "text",
730
+ text: `Unknown lsp_navigation operation "${normalizedOperation || String(rawOperation ?? "") || ""}". ` + `Valid operations: ${VALID_OPERATIONS.join(", ")}`
731
+ }
732
+ ],
733
+ isError: true,
734
+ details: {
735
+ rawOperation,
736
+ normalizedOperation,
737
+ validOperations: VALID_OPERATIONS
738
+ }
739
+ }, {
740
+ operation: normalizedOperation || "invalid",
741
+ filePath: "(workspace)",
742
+ failureKind: "invalid_operation",
743
+ resultCount: 0
744
+ });
745
+ }
746
+ const operation = normalizedOperation;
747
+ requestedApply = apply === true;
748
+ if (requestedApply && ["rename", "rename_file", "executeCommand"].includes(operation)) {
749
+ const cwd = ctx.cwd || ".";
750
+ const mutationSource = operation === "executeCommand" ? "lsp-execute-command" : "lsp-rename";
751
+ mutationContext = {
752
+ cwd,
753
+ sessionId: ctx.sessionManager?.getSessionId?.(),
754
+ correlationId: newLspMutationCorrelationId(_toolCallId),
755
+ toolCallId: _toolCallId,
756
+ tool: `lsp_navigation:${operation}`,
757
+ source: mutationSource,
758
+ ...mutationDeps,
759
+ session,
760
+ readGuard: getFlag("no-read-guard", cwd) ? undefined : mutationDeps?.readGuard,
761
+ isRecordable: (filePath) => {
762
+ return isRecordableProjectPath(filePath, mutationDeps?.runtime?.projectRoot ?? cwd);
763
+ }
764
+ };
765
+ }
766
+ const isCallHierarchyTraversal = operation === "incomingCalls" || operation === "outgoingCalls";
767
+ const needsFilePath = operation !== "workspaceDiagnostics" && operation !== "workspaceSymbol" && operation !== "executeCommand" && operation !== "capabilities" && !isCallHierarchyTraversal;
768
+ if (needsFilePath && (!rawPath || rawPath.trim().length === 0)) {
769
+ return finalize({
770
+ content: [
771
+ {
772
+ type: "text",
773
+ text: `path is required for ${operation}`
774
+ }
775
+ ],
776
+ isError: true
777
+ }, {
778
+ operation,
779
+ filePath: "(workspace)",
780
+ failureKind: "missing_file_path",
781
+ resultCount: 0
782
+ });
783
+ }
784
+ const filePath = rawPath ? path.isAbsolute(rawPath) ? rawPath : path.resolve(ctx.cwd || ".", rawPath) : "";
785
+ let filePathIsDirectory = false;
786
+ if (filePath) {
787
+ try {
788
+ filePathIsDirectory = nodeFs.statSync(filePath).isDirectory();
789
+ } catch {}
790
+ }
791
+ const lspService = getLSPService();
792
+ if (operation === "capabilities") {
793
+ const snapshots = rawPath ? await lspService.getCapabilitySnapshots(filePath) : await lspService.getCapabilitySnapshots(undefined, workspaceScopeAttribution);
794
+ const output = formatCapabilities(snapshots, rawPath ? filePath : undefined);
795
+ return finalize({
796
+ content: [{ type: "text", text: output }],
797
+ details: {
798
+ operation,
799
+ resultCount: snapshots.length,
800
+ servers: snapshots.map((snapshot) => snapshot.serverId)
801
+ }
802
+ }, {
803
+ operation,
804
+ filePath: rawPath ? filePath : "(workspace)",
805
+ failureKind: snapshots.length === 0 ? "empty_result" : "success",
806
+ resultCount: snapshots.length
807
+ });
808
+ }
809
+ if (operation === "workspaceDiagnostics") {
810
+ const wsDiagSupport = rawPath ? await lspService.getWorkspaceDiagnosticsSupport(filePath) : await lspService.getWorkspaceDiagnosticsSupport(undefined, workspaceScopeAttribution);
811
+ diagnosticsMode = wsDiagSupport?.mode ?? "unknown";
812
+ if (rawPath && !filePathIsDirectory) {
813
+ const hasLSP = lspService.supportsLSP(filePath);
814
+ if (!hasLSP) {
815
+ return finalize({
816
+ content: [
817
+ {
818
+ type: "text",
819
+ text: `No LSP server available for ${path.basename(filePath)}. Check that the language server is installed.`
820
+ }
821
+ ],
822
+ isError: true
823
+ }, {
824
+ operation,
825
+ filePath,
826
+ failureKind: "no_server",
827
+ resultCount: 0
828
+ });
829
+ }
830
+ await openFileBestEffort(lspService, filePath, true);
831
+ const diagnostics = await lspService.getDiagnostics(filePath);
832
+ const result = [
833
+ {
834
+ filePath,
835
+ diagnostics,
836
+ count: diagnostics.length
837
+ }
838
+ ];
839
+ const noteMap = {
840
+ pull: "Note: path mode requests pull diagnostics for this file and returns the aggregated result",
841
+ "push-only": "Note: server is push-only; result depends on published diagnostics for this file"
842
+ };
843
+ const note = noteMap[diagnosticsMode] ?? "Note: workspace diagnostics mode unknown (no active capability snapshot)";
844
+ const resultCount = diagnostics.length;
845
+ return finalize({
846
+ content: [
847
+ {
848
+ type: "text",
849
+ text: `${note}
850
+ ${JSON.stringify(result)}`
851
+ }
852
+ ],
853
+ details: {
854
+ operation,
855
+ resultCount,
856
+ diagnosticsMode,
857
+ coverage: "requested-file"
858
+ }
859
+ }, {
860
+ operation,
861
+ filePath,
862
+ failureKind: resultCount === 0 ? "empty_result" : "success",
863
+ resultCount
864
+ });
865
+ }
866
+ const allDiagnostics = await lspService.getAllDiagnostics();
867
+ const result = Array.from(allDiagnostics.entries()).map(([trackedFile, { diags }]) => ({
868
+ filePath: trackedFile,
869
+ diagnostics: diags,
870
+ count: diags.length
871
+ }));
872
+ const noteMap2 = {
873
+ "push-only": "Note: push-only tracked diagnostics snapshot (not full workspace pull diagnostics).",
874
+ pull: "Note: tracked diagnostics snapshot from active clients. Provide path to force file-level diagnostics collection"
875
+ };
876
+ const note = noteMap2[diagnosticsMode] ?? "Note: workspace diagnostics mode unknown (no active capability snapshot)";
877
+ return finalize({
878
+ content: [
879
+ {
880
+ type: "text",
881
+ text: `${note}
882
+ ${JSON.stringify(result)}`
883
+ }
884
+ ],
885
+ details: {
886
+ operation,
887
+ resultCount: result.length,
888
+ diagnosticsMode,
889
+ coverage: "tracked-open-files"
890
+ }
891
+ }, {
892
+ operation,
893
+ filePath: rawPath ? filePath : "(workspace)",
894
+ failureKind: diagnosticsMode === "push-only" ? "tracked_snapshot" : "success",
895
+ resultCount: result.length
896
+ });
897
+ }
898
+ if (needsFilePath && filePathIsDirectory) {
899
+ return finalize({
900
+ content: [
901
+ {
902
+ type: "text",
903
+ text: `path must be a source file, got directory: ${filePath}. Pass a source file path, or omit path for workspace-level operations.`
904
+ }
905
+ ],
906
+ isError: true
907
+ }, {
908
+ operation,
909
+ filePath,
910
+ failureKind: "filepath_is_directory",
911
+ resultCount: 0
912
+ });
913
+ }
914
+ const hasLSP = filePath ? lspService.supportsLSP(filePath) : false;
915
+ if (needsFilePath && !hasLSP) {
916
+ return finalize({
917
+ content: [
918
+ {
919
+ type: "text",
920
+ text: `No LSP server available for ${path.basename(filePath)}. Check that the language server is installed.`
921
+ }
922
+ ],
923
+ isError: true
924
+ }, {
925
+ operation,
926
+ filePath,
927
+ failureKind: "no_server",
928
+ resultCount: 0
929
+ });
930
+ }
931
+ if (needsFilePath) {
932
+ const support = await lspService.getOperationSupport(filePath);
933
+ supported = operationSupportStatus(operation, support);
934
+ if (supported === false) {
935
+ return finalize({
936
+ content: [
937
+ {
938
+ type: "text",
939
+ text: `LSP server for ${path.basename(filePath)} does not advertise support for ${operation}`
940
+ }
941
+ ],
942
+ isError: true,
943
+ details: {
944
+ operation,
945
+ supported: false,
946
+ emptyReason: "unsupported"
947
+ }
948
+ }, { operation, filePath, failureKind: "unsupported", resultCount: 0 });
949
+ }
950
+ openedFileContent = await openFileBestEffort(lspService, filePath);
951
+ }
952
+ const lspLine = (line ?? 1) - 1;
953
+ const needsPosition = [
954
+ "definition",
955
+ "typeDefinition",
956
+ "declaration",
957
+ "references",
958
+ "hover",
959
+ "signatureHelp",
960
+ "codeAction",
961
+ "rename",
962
+ "implementation",
963
+ "prepareCallHierarchy"
964
+ ].includes(operation);
965
+ const resolvedCharacter = needsPosition && filePath ? resolveSymbolColumn(nodeFs.existsSync(filePath) ? nodeFs.readFileSync(filePath, "utf-8") : "", line ?? 1, character, symbol) : {
966
+ character: character ?? 1,
967
+ strategy: "explicit"
968
+ };
969
+ columnResolution = resolvedCharacter;
970
+ const lspChar = resolvedCharacter.character - 1;
971
+ const lspEndLine = (endLine ?? line ?? 1) - 1;
972
+ const lspEndChar = (endCharacter ?? resolvedCharacter.character) - 1;
973
+ const runWorkspaceSymbolOperation = async () => {
974
+ const support = rawPath ? await lspService.getOperationSupport(filePath) : await lspService.getOperationSupport(undefined, workspaceScopeAttribution);
975
+ supported = operationSupportStatus(operation, support);
976
+ if (supported === false) {
977
+ throw new Error("__UNSUPPORTED__ Active LSP server does not advertise support for workspaceSymbol");
978
+ }
979
+ if (!query || query.trim().length === 0) {
980
+ throw new Error("__BADINPUT__ query parameter required for workspaceSymbol");
981
+ }
982
+ if (rawPath) {
983
+ await openFileBestEffort(lspService, filePath);
984
+ }
985
+ try {
986
+ const raw = rawPath ? await lspService.workspaceSymbol(query ?? "", filePath) : await lspService.workspaceSymbol(query ?? "", undefined, workspaceScopeAttribution);
987
+ const filtered = (Array.isArray(raw) ? raw : [raw]).filter((s) => typeof s === "object" && s !== null && (!s.kind || NAVIGABLE_SYMBOL_KINDS.has(s.kind)));
988
+ return dedupeWorkspaceSymbols(filtered).slice(0, 15);
989
+ } catch (err) {
990
+ const msg = err instanceof Error ? err.message : String(err);
991
+ if (rawPath && /No Project/i.test(msg)) {
992
+ await openFileBestEffort(lspService, filePath);
993
+ await new Promise((resolve) => setTimeout(resolve, 120));
994
+ const retryRaw = await lspService.workspaceSymbol(query ?? "", filePath);
995
+ const retrySymbols = (Array.isArray(retryRaw) ? retryRaw : [retryRaw]).filter((s) => typeof s === "object" && s !== null);
996
+ return dedupeWorkspaceSymbols(retrySymbols);
997
+ }
998
+ throw err;
999
+ }
1000
+ };
1001
+ const runOperation = async () => {
1002
+ switch (operation) {
1003
+ case "definition":
1004
+ return lspService.definition(filePath, lspLine, lspChar);
1005
+ case "typeDefinition":
1006
+ return lspService.typeDefinition(filePath, lspLine, lspChar);
1007
+ case "declaration":
1008
+ return lspService.declaration(filePath, lspLine, lspChar);
1009
+ case "references":
1010
+ return lspService.references(filePath, lspLine, lspChar);
1011
+ case "hover":
1012
+ return lspService.hover(filePath, lspLine, lspChar);
1013
+ case "signatureHelp":
1014
+ return lspService.signatureHelp(filePath, lspLine, lspChar);
1015
+ case "documentSymbol":
1016
+ return lspService.documentSymbol(filePath);
1017
+ case "findSymbol": {
1018
+ if (!query || query.trim().length === 0) {
1019
+ throw new Error("__BADINPUT__ query parameter required for findSymbol");
1020
+ }
1021
+ const symbols = await lspService.documentSymbol(filePath);
1022
+ return findSymbolMatches(symbols, query, {
1023
+ maxResults: Math.max(1, Math.min(100, maxResults ?? 20)),
1024
+ topLevelOnly: topLevelOnly ?? false,
1025
+ exactMatch: exactMatch ?? false,
1026
+ kinds: new Set((kinds ?? []).map((kind) => kind.trim().toLowerCase()).filter(Boolean))
1027
+ });
1028
+ }
1029
+ case "workspaceSymbol":
1030
+ return runWorkspaceSymbolOperation();
1031
+ case "codeAction":
1032
+ return lspService.codeAction(filePath, lspLine, lspChar, lspEndLine, lspEndChar);
1033
+ case "rename": {
1034
+ if (!newName || newName.trim().length === 0) {
1035
+ throw new Error("__BADINPUT__ newName parameter required for rename");
1036
+ }
1037
+ renameRequestedAtMs = Date.now();
1038
+ const edit = await lspService.rename(filePath, lspLine, lspChar, newName);
1039
+ if (!edit)
1040
+ return null;
1041
+ if (!apply) {
1042
+ return {
1043
+ applied: false,
1044
+ summary: summarizeWorkspaceEdit(edit, ctx.cwd || "."),
1045
+ edit
1046
+ };
1047
+ }
1048
+ const applied = await applyWorkspaceEdit(edit, ctx.cwd || ".", {
1049
+ mutationContext,
1050
+ expectedContent: captureRenameExpectedContent(lspService, edit, ctx.cwd || ".", filePath, openedFileContent, renameRequestedAtMs)
1051
+ });
1052
+ for (const touchedFile of applied.files) {
1053
+ try {
1054
+ await openFileBestEffort(lspService, touchedFile, false);
1055
+ } catch {}
1056
+ }
1057
+ return { applied: true, ...applied };
1058
+ }
1059
+ case "rename_file": {
1060
+ if (!newFilePath || newFilePath.trim().length === 0) {
1061
+ throw new Error("__BADINPUT__ newFilePath parameter required for rename_file");
1062
+ }
1063
+ const resolvedNewFilePath = path.isAbsolute(newFilePath) ? newFilePath : path.resolve(ctx.cwd || ".", newFilePath);
1064
+ const result = await lspService.renameFile(filePath, resolvedNewFilePath, {
1065
+ cwd: ctx.cwd || ".",
1066
+ apply: apply ?? false,
1067
+ ...mutationContext ? { mutationContext } : {}
1068
+ });
1069
+ if (result.applied) {
1070
+ for (const touchedFile of result.files ?? []) {
1071
+ try {
1072
+ await openFileBestEffort(lspService, touchedFile, false);
1073
+ } catch {}
1074
+ }
1075
+ }
1076
+ return result;
1077
+ }
1078
+ case "implementation":
1079
+ return lspService.implementation(filePath, lspLine, lspChar);
1080
+ case "prepareCallHierarchy":
1081
+ return lspService.prepareCallHierarchy(filePath, lspLine, lspChar);
1082
+ case "executeCommand": {
1083
+ if (!command || command.trim().length === 0) {
1084
+ throw new Error("__BADINPUT__ command parameter required for executeCommand");
1085
+ }
1086
+ const advertised = rawPath ? await lspService.getAdvertisedCommands(filePath) : await lspService.getAdvertisedCommands(undefined, workspaceScopeAttribution);
1087
+ const isAdvertised = advertised.includes(command);
1088
+ if (apply !== true) {
1089
+ return {
1090
+ executed: false,
1091
+ dryRun: true,
1092
+ command,
1093
+ advertised: isAdvertised,
1094
+ advertisedCommands: advertised,
1095
+ note: isAdvertised ? "Command is advertised. Re-run with apply:true to execute." : "Command is NOT advertised by the active server; execution would be refused."
1096
+ };
1097
+ }
1098
+ if (!isAdvertised) {
1099
+ throw new Error(`__UNSUPPORTED__ command "${command}" is not advertised by the active LSP server (advertised: ${advertised.join(", ") || "none"})`);
1100
+ }
1101
+ return rawPath ? lspService.executeCommand(filePath, command, commandArguments, mutationContext) : lspService.executeCommand(undefined, command, commandArguments, mutationContext, workspaceScopeAttribution);
1102
+ }
1103
+ case "incomingCalls": {
1104
+ if (!callHierarchyItem) {
1105
+ throw new Error("__BADINPUT__ callHierarchyItem parameter required for incomingCalls");
1106
+ }
1107
+ supported = operationSupportStatus(operation, await lspService.getOperationSupport(uriToPath(callHierarchyItem.uri)));
1108
+ if (supported === false) {
1109
+ throw new Error("__UNSUPPORTED__ Active LSP server does not advertise support for incomingCalls");
1110
+ }
1111
+ return lspService.incomingCalls(callHierarchyItem);
1112
+ }
1113
+ case "outgoingCalls": {
1114
+ if (!callHierarchyItem) {
1115
+ throw new Error("__BADINPUT__ callHierarchyItem parameter required for outgoingCalls");
1116
+ }
1117
+ supported = operationSupportStatus(operation, await lspService.getOperationSupport(uriToPath(callHierarchyItem.uri)));
1118
+ if (supported === false) {
1119
+ throw new Error("__UNSUPPORTED__ Active LSP server does not advertise support for outgoingCalls");
1120
+ }
1121
+ return lspService.outgoingCalls(callHierarchyItem);
1122
+ }
1123
+ default:
1124
+ return [];
1125
+ }
1126
+ };
1127
+ let result;
1128
+ let usedDocumentSymbolFallback = false;
1129
+ try {
1130
+ result = await runOperation();
1131
+ const isEmptyInitial = !result || Array.isArray(result) && result.length === 0;
1132
+ const shouldRetryOnEmpty = isEmptyInitial && needsFilePath && [
1133
+ "definition",
1134
+ "typeDefinition",
1135
+ "declaration",
1136
+ "references",
1137
+ "hover",
1138
+ "signatureHelp",
1139
+ "codeAction",
1140
+ "rename",
1141
+ "implementation"
1142
+ ].includes(operation);
1143
+ if (shouldRetryOnEmpty) {
1144
+ openedFileContent = await openFileBestEffort(lspService, filePath, true);
1145
+ result = await runOperation();
1146
+ }
1147
+ const stillEmpty = !result || Array.isArray(result) && result.length === 0;
1148
+ if (stillEmpty && needsFilePath && operation === "definition") {
1149
+ const content = nodeFs.readFileSync(filePath, "utf-8");
1150
+ const token = line && character ? tokenAtPosition(content, line, character) : undefined;
1151
+ if (token) {
1152
+ const docSymbols = await lspService.documentSymbol(filePath);
1153
+ const locations = pickLocalSymbolLocation(docSymbols, token, filePath);
1154
+ if (locations.length > 0) {
1155
+ result = locations;
1156
+ usedDocumentSymbolFallback = true;
1157
+ }
1158
+ }
1159
+ }
1160
+ if (mutationContext && requestedApply && !mutationContext.summaryEmitted) {
1161
+ const outcome = operation === "rename_file" && result && typeof result === "object" && "applied" in result && result.applied === false ? "failed" : operation === "executeCommand" && result && typeof result === "object" && ("executed" in result) && result.executed === false ? "failed" : "skipped";
1162
+ recordLspMutationOutcome(mutationContext, outcome);
1163
+ }
1164
+ } catch (err) {
1165
+ const msg = err instanceof Error ? err.message : String(err);
1166
+ if (msg.startsWith("__UNSUPPORTED__ ")) {
1167
+ return finalize({
1168
+ content: [
1169
+ {
1170
+ type: "text",
1171
+ text: msg.replace("__UNSUPPORTED__ ", "")
1172
+ }
1173
+ ],
1174
+ isError: true,
1175
+ details: {
1176
+ operation,
1177
+ supported: false,
1178
+ emptyReason: "unsupported"
1179
+ }
1180
+ }, { operation, filePath, failureKind: "unsupported", resultCount: 0 });
1181
+ }
1182
+ if (msg.startsWith("__BADINPUT__ ")) {
1183
+ return finalize({
1184
+ content: [
1185
+ {
1186
+ type: "text",
1187
+ text: msg.replace("__BADINPUT__ ", "")
1188
+ }
1189
+ ],
1190
+ isError: true,
1191
+ details: {}
1192
+ }, { operation, filePath, failureKind: "bad_input", resultCount: 0 });
1193
+ }
1194
+ return finalize({
1195
+ content: [
1196
+ {
1197
+ type: "text",
1198
+ text: `LSP error: ${err instanceof Error ? err.message : String(err)}`
1199
+ }
1200
+ ],
1201
+ isError: true,
1202
+ details: {}
1203
+ }, { operation, filePath, failureKind: "lsp_error", resultCount: 0 });
1204
+ }
1205
+ const isEmpty = !result || Array.isArray(result) && result.length === 0;
1206
+ const fileCtx = filePath ? " at " + path.basename(filePath) : "";
1207
+ const lineCtx = line ? ":" + line + ":" + character : "";
1208
+ let output = isEmpty ? "No results for " + operation + fileCtx + lineCtx : JSON.stringify(result);
1209
+ if (isEmpty && operation === "workspaceSymbol" && !rawPath) {
1210
+ output += `
1211
+ Hint: provide path to scope workspaceSymbol to the active language server/root.`;
1212
+ }
1213
+ if (usedDocumentSymbolFallback) {
1214
+ output += `
1215
+ Note: served from documentSymbol fallback due to empty primary result.`;
1216
+ }
1217
+ if (operation === "references" && Array.isArray(result) && result.length <= 2) {
1218
+ output += `
1219
+ Hint: references from usage sites can be partial; retry from the symbol definition for broader cross-file results.`;
1220
+ }
1221
+ const actionStats = operation === "codeAction" && Array.isArray(result) ? classifyCodeActions(result) : null;
1222
+ if (operation === "codeAction" && actionStats) {
1223
+ if (actionStats.quickfix === 0 && actionStats.refactor > 0) {
1224
+ output += `
1225
+ Note: no diagnostic quick fixes returned; refactor-only actions available.`;
1226
+ }
1227
+ }
1228
+ const resultCount = Array.isArray(result) ? result.length : result ? 1 : 0;
1229
+ const searchReads = collectSearchReadsForOperation(operation, result, callHierarchyItem);
1230
+ return finalize({
1231
+ content: [{ type: "text", text: output }],
1232
+ details: {
1233
+ operation,
1234
+ supported,
1235
+ searchReads: searchReads.length > 0 ? searchReads : undefined,
1236
+ emptyReason: isEmpty ? emptyReasonForOperation(operation) : undefined,
1237
+ codeActionKinds: actionStats ?? undefined,
1238
+ columnResolution: columnResolution?.strategy === "explicit" ? undefined : columnResolution,
1239
+ resultCount
1240
+ }
1241
+ }, {
1242
+ operation,
1243
+ filePath: rawPath ? filePath : "(workspace)",
1244
+ failureKind: isEmpty ? "empty_result" : usedDocumentSymbolFallback ? "fallback_success" : "success",
1245
+ resultCount
1246
+ });
1247
+ }
1248
+ };
1249
+ }