@duckmind/dm-linux-x64 0.65.5 → 0.65.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 (1208) hide show
  1. package/README.md +0 -8
  2. package/dm +2 -2
  3. package/extensions/.dm-extensions.json +677 -44
  4. package/extensions/dm-lens/clients/actionable-warnings-logger.js +0 -6
  5. package/extensions/dm-lens/clients/actionable-warnings.js +42 -13
  6. package/extensions/dm-lens/clients/advisory-provenance.js +129 -41
  7. package/extensions/dm-lens/clients/agent-behavior-client.js +1 -0
  8. package/extensions/dm-lens/clients/analysed-root.js +0 -0
  9. package/extensions/dm-lens/clients/ast-grep-client.js +38 -3
  10. package/extensions/dm-lens/clients/ast-grep-rule-manager.js +37 -5
  11. package/extensions/dm-lens/clients/ast-grep-tool-logger.js +1 -7
  12. package/extensions/dm-lens/clients/bash-file-access.js +138 -1
  13. package/extensions/dm-lens/clients/biome-client.js +9 -2
  14. package/extensions/dm-lens/clients/blocker-freshness.js +171 -21
  15. package/extensions/dm-lens/clients/bootstrap.js +9 -5
  16. package/extensions/dm-lens/clients/bounded-pid-file-lock.js +1 -1
  17. package/extensions/dm-lens/clients/bounded-telemetry.js +1 -4
  18. package/extensions/dm-lens/clients/bundled-resource-health.js +43 -0
  19. package/extensions/dm-lens/clients/bus-events-logger.js +0 -6
  20. package/extensions/dm-lens/clients/cache/rule-cache.js +11 -3
  21. package/extensions/dm-lens/clients/cache-manager.js +29 -5
  22. package/extensions/dm-lens/clients/cache-observability.js +104 -4
  23. package/extensions/dm-lens/clients/cargo-manifest.js +6 -3
  24. package/extensions/dm-lens/clients/cascade-format.js +87 -5
  25. package/extensions/dm-lens/clients/cascade-logger.js +0 -6
  26. package/extensions/dm-lens/clients/child-unref.js +5 -9
  27. package/extensions/dm-lens/clients/code-quality-warnings.js +4 -2
  28. package/extensions/dm-lens/clients/complexity-client.js +5 -1
  29. package/extensions/dm-lens/clients/config-core/index.js +2 -68
  30. package/extensions/dm-lens/clients/config-core/process-spec.js +1 -1
  31. package/extensions/dm-lens/clients/config-core/provenance.js +1 -2
  32. package/extensions/dm-lens/clients/config-core/records.js +1 -1
  33. package/extensions/dm-lens/clients/config-core/schema.js +3 -6
  34. package/extensions/dm-lens/clients/config-diagnostic-codes.js +5 -3
  35. package/extensions/dm-lens/clients/config-locations.js +125 -5
  36. package/extensions/dm-lens/clients/config-resolve.js +12 -6
  37. package/extensions/dm-lens/clients/config-schema.js +56 -3
  38. package/extensions/dm-lens/clients/config-warn.js +3 -2
  39. package/extensions/dm-lens/clients/dead-code-client.js +4 -1
  40. package/extensions/dm-lens/clients/dead-code-logger.js +0 -3
  41. package/extensions/dm-lens/clients/degradation-ledger.js +29 -4
  42. package/extensions/dm-lens/clients/dependency-checker.js +29 -50
  43. package/extensions/dm-lens/clients/diagnostic-dispositions.js +23 -4
  44. package/extensions/dm-lens/clients/diagnostic-logger.js +1 -1
  45. package/extensions/dm-lens/clients/dispatch/ast-grep-catalog.js +19 -0
  46. package/extensions/dm-lens/clients/dispatch/auxiliary-lsp.js +9 -0
  47. package/extensions/dm-lens/clients/dispatch/collect-later-tier.js +0 -3
  48. package/extensions/dm-lens/clients/dispatch/dispatcher.js +30 -27
  49. package/extensions/dm-lens/clients/dispatch/facts/function-facts.js +1 -1
  50. package/extensions/dm-lens/clients/dispatch/facts/import-facts.js +4 -1
  51. package/extensions/dm-lens/clients/dispatch/finding-policy.js +163 -0
  52. package/extensions/dm-lens/clients/dispatch/indent-detect.js +213 -13
  53. package/extensions/dm-lens/clients/dispatch/inline-suppressions.js +20 -1
  54. package/extensions/dm-lens/clients/dispatch/integration.js +77 -13
  55. package/extensions/dm-lens/clients/dispatch/lazy.js +0 -3
  56. package/extensions/dm-lens/clients/dispatch/pending-runner-findings.js +1 -1
  57. package/extensions/dm-lens/clients/dispatch/plan.js +0 -3
  58. package/extensions/dm-lens/clients/dispatch/rule-ignores.js +21 -0
  59. package/extensions/dm-lens/clients/dispatch/rules/high-complexity.js +2 -2
  60. package/extensions/dm-lens/clients/dispatch/rules/high-fan-out.js +1 -1
  61. package/extensions/dm-lens/clients/dispatch/runners/actionlint.js +25 -29
  62. package/extensions/dm-lens/clients/dispatch/runners/ast-grep-napi.js +8 -32
  63. package/extensions/dm-lens/clients/dispatch/runners/biome-check.js +39 -23
  64. package/extensions/dm-lens/clients/dispatch/runners/cpp-check.js +29 -48
  65. package/extensions/dm-lens/clients/dispatch/runners/credo.js +17 -14
  66. package/extensions/dm-lens/clients/dispatch/runners/cue-vet.js +9 -7
  67. package/extensions/dm-lens/clients/dispatch/runners/dart-analyze.js +21 -43
  68. package/extensions/dm-lens/clients/dispatch/runners/detekt.js +11 -5
  69. package/extensions/dm-lens/clients/dispatch/runners/dotnet-build.js +27 -23
  70. package/extensions/dm-lens/clients/dispatch/runners/elixir-check.js +23 -38
  71. package/extensions/dm-lens/clients/dispatch/runners/eslint.js +22 -35
  72. package/extensions/dm-lens/clients/dispatch/runners/fish-indent.js +2 -1
  73. package/extensions/dm-lens/clients/dispatch/runners/gleam-check.js +35 -12
  74. package/extensions/dm-lens/clients/dispatch/runners/go-vet.js +5 -3
  75. package/extensions/dm-lens/clients/dispatch/runners/golangci-lint.js +21 -22
  76. package/extensions/dm-lens/clients/dispatch/runners/hadolint.js +26 -16
  77. package/extensions/dm-lens/clients/dispatch/runners/helm-lint.js +3 -1
  78. package/extensions/dm-lens/clients/dispatch/runners/helm-render.js +3 -2
  79. package/extensions/dm-lens/clients/dispatch/runners/htmlhint.js +18 -9
  80. package/extensions/dm-lens/clients/dispatch/runners/javac.js +24 -23
  81. package/extensions/dm-lens/clients/dispatch/runners/ktlint.js +23 -54
  82. package/extensions/dm-lens/clients/dispatch/runners/lsp.js +17 -7
  83. package/extensions/dm-lens/clients/dispatch/runners/markdownlint.js +12 -6
  84. package/extensions/dm-lens/clients/dispatch/runners/mypy.js +2 -1
  85. package/extensions/dm-lens/clients/dispatch/runners/oxlint.js +24 -7
  86. package/extensions/dm-lens/clients/dispatch/runners/php-lint.js +26 -17
  87. package/extensions/dm-lens/clients/dispatch/runners/phpstan.js +2 -1
  88. package/extensions/dm-lens/clients/dispatch/runners/prisma-validate.js +2 -1
  89. package/extensions/dm-lens/clients/dispatch/runners/psscriptanalyzer.js +10 -11
  90. package/extensions/dm-lens/clients/dispatch/runners/pyright.js +2 -1
  91. package/extensions/dm-lens/clients/dispatch/runners/rubocop.js +22 -18
  92. package/extensions/dm-lens/clients/dispatch/runners/ruff.js +17 -22
  93. package/extensions/dm-lens/clients/dispatch/runners/rust-clippy.js +8 -11
  94. package/extensions/dm-lens/clients/dispatch/runners/shellcheck.js +9 -4
  95. package/extensions/dm-lens/clients/dispatch/runners/shfmt.js +4 -13
  96. package/extensions/dm-lens/clients/dispatch/runners/spellcheck.js +15 -5
  97. package/extensions/dm-lens/clients/dispatch/runners/spotbugs.js +2 -1
  98. package/extensions/dm-lens/clients/dispatch/runners/sqlfluff.js +10 -4
  99. package/extensions/dm-lens/clients/dispatch/runners/stylelint.js +9 -4
  100. package/extensions/dm-lens/clients/dispatch/runners/swiftlint.js +11 -3
  101. package/extensions/dm-lens/clients/dispatch/runners/taplo.js +13 -7
  102. package/extensions/dm-lens/clients/dispatch/runners/terragrunt.js +2 -1
  103. package/extensions/dm-lens/clients/dispatch/runners/tflint.js +26 -16
  104. package/extensions/dm-lens/clients/dispatch/runners/tree-sitter.js +12 -13
  105. package/extensions/dm-lens/clients/dispatch/runners/trivy-config.js +9 -3
  106. package/extensions/dm-lens/clients/dispatch/runners/utils/availability-policy.js +5 -0
  107. package/extensions/dm-lens/clients/dispatch/runners/utils/candidate-probe.js +2 -2
  108. package/extensions/dm-lens/clients/dispatch/runners/utils/diagnostic-parsers.js +8 -52
  109. package/extensions/dm-lens/clients/dispatch/runners/utils/runner-helpers.js +35 -3
  110. package/extensions/dm-lens/clients/dispatch/runners/utils.js +0 -17
  111. package/extensions/dm-lens/clients/dispatch/runners/vale.js +12 -4
  112. package/extensions/dm-lens/clients/dispatch/runners/yaml-rule-parser.js +2 -20
  113. package/extensions/dm-lens/clients/dispatch/runners/yamllint.js +16 -4
  114. package/extensions/dm-lens/clients/dispatch/runners/zig-check.js +26 -38
  115. package/extensions/dm-lens/clients/dispatch/suppress-writer.js +13 -3
  116. package/extensions/dm-lens/clients/dispatch/types.js +4 -1
  117. package/extensions/dm-lens/clients/dispatch/utils/format-utils.js +2 -2
  118. package/extensions/dm-lens/clients/disposition-logger.js +0 -6
  119. package/extensions/dm-lens/clients/disposition-publish.js +2 -1
  120. package/extensions/dm-lens/clients/effective-config.js +14 -4
  121. package/extensions/dm-lens/clients/event-loop-hold.js +123 -0
  122. package/extensions/dm-lens/clients/event-loop-monitor.js +2 -2
  123. package/extensions/dm-lens/clients/extension-log.js +6 -1
  124. package/extensions/dm-lens/clients/feature-hints.js +2 -1
  125. package/extensions/dm-lens/clients/file-kinds.js +17 -21
  126. package/extensions/dm-lens/clients/file-role.js +11 -2
  127. package/extensions/dm-lens/clients/file-time.js +1 -1
  128. package/extensions/dm-lens/clients/file-utils.js +93 -6
  129. package/extensions/dm-lens/clients/finding-delivery-gate.js +22 -26
  130. package/extensions/dm-lens/clients/format-service.js +33 -16
  131. package/extensions/dm-lens/clients/formatters.js +129 -92
  132. package/extensions/dm-lens/clients/generated-artifacts.js +2 -2
  133. package/extensions/dm-lens/clients/generation-guard.js +4 -0
  134. package/extensions/dm-lens/clients/git-guard.js +80 -26
  135. package/extensions/dm-lens/clients/gitleaks-client.js +26 -0
  136. package/extensions/dm-lens/clients/govulncheck-client.js +34 -6
  137. package/extensions/dm-lens/clients/gradle-ktfmt-style.js +96 -13
  138. package/extensions/dm-lens/clients/grammar-source.js +3 -3
  139. package/extensions/dm-lens/clients/host-edit-normalize.js +1 -1
  140. package/extensions/dm-lens/clients/indent-retarget.js +35 -5
  141. package/extensions/dm-lens/clients/inline-blocker-dispositions.js +107 -0
  142. package/extensions/dm-lens/clients/install-diagnostics.js +8 -6
  143. package/extensions/dm-lens/clients/installer/index.js +695 -183
  144. package/extensions/dm-lens/clients/installer/managed-tool-refresh.js +85 -25
  145. package/extensions/dm-lens/clients/instance-reaper-state.js +3 -0
  146. package/extensions/dm-lens/clients/instance-reaper.js +23 -16
  147. package/extensions/dm-lens/clients/instance-registry.js +34 -2
  148. package/extensions/dm-lens/clients/jscpd-client.js +11 -1
  149. package/extensions/dm-lens/clients/knip-client.js +2 -1
  150. package/extensions/dm-lens/clients/language-profile.js +18 -12
  151. package/extensions/dm-lens/clients/language-registry.js +3 -1
  152. package/extensions/dm-lens/clients/latency-logger.js +14 -4
  153. package/extensions/dm-lens/clients/ledger-bounds.js +13 -1
  154. package/extensions/dm-lens/clients/lens-config.js +74 -7
  155. package/extensions/dm-lens/clients/lens-engine.js +9 -10
  156. package/extensions/dm-lens/clients/lens-events.js +1 -1
  157. package/extensions/dm-lens/clients/lens-flag-registry.js +47 -2
  158. package/extensions/dm-lens/clients/lens-map.js +1 -1
  159. package/extensions/dm-lens/clients/log-cleanup.js +0 -28
  160. package/extensions/dm-lens/clients/lsp/cascade-tier.js +2 -1
  161. package/extensions/dm-lens/clients/lsp/client.js +70 -30
  162. package/extensions/dm-lens/clients/lsp/config.js +41 -15
  163. package/extensions/dm-lens/clients/lsp/content-limits.js +21 -0
  164. package/extensions/dm-lens/clients/lsp/diagnostic-binding.js +8 -0
  165. package/extensions/dm-lens/clients/lsp/document-drift.js +72 -1
  166. package/extensions/dm-lens/clients/lsp/edits.js +3 -3
  167. package/extensions/dm-lens/clients/lsp/index.js +435 -62
  168. package/extensions/dm-lens/clients/lsp/inferred-project.js +1 -1
  169. package/extensions/dm-lens/clients/lsp/language.js +0 -3
  170. package/extensions/dm-lens/clients/lsp/launch.js +12 -5
  171. package/extensions/dm-lens/clients/lsp/path-utils.js +0 -2
  172. package/extensions/dm-lens/clients/lsp/pending-aux-coverage.js +0 -1
  173. package/extensions/dm-lens/clients/lsp/server.js +125 -60
  174. package/extensions/dm-lens/clients/lsp/session-roots.js +26 -5
  175. package/extensions/dm-lens/clients/lsp/sync-kind.js +14 -1
  176. package/extensions/dm-lens/clients/lsp/tsserver-sync.js +5 -7
  177. package/extensions/dm-lens/clients/lsp/wait-policy/classification.js +3 -0
  178. package/extensions/dm-lens/clients/lsp/wait-policy/strategies.js +31 -2
  179. package/extensions/dm-lens/clients/lsp/workspace-diagnostics-cache.js +26 -4
  180. package/extensions/dm-lens/clients/lsp-document-symbols.js +1 -1
  181. package/extensions/dm-lens/clients/map-with-concurrency.js +7 -3
  182. package/extensions/dm-lens/clients/mcp/analyze.js +1 -1
  183. package/extensions/dm-lens/clients/mcp/ipc.js +104 -40
  184. package/extensions/dm-lens/clients/mcp/review.js +39 -7
  185. package/extensions/dm-lens/clients/mcp/session.js +38 -4
  186. package/extensions/dm-lens/clients/metrics-history.js +19 -84
  187. package/extensions/dm-lens/clients/middle-man-analysis.js +2 -4
  188. package/extensions/dm-lens/clients/module-report.js +1 -1
  189. package/extensions/dm-lens/clients/mutating-tool.js +3 -3
  190. package/extensions/dm-lens/clients/mutation-attribution.js +3 -3
  191. package/extensions/dm-lens/clients/ndjson-logger.js +17 -9
  192. package/extensions/dm-lens/clients/observed-mutation.js +42 -11
  193. package/extensions/dm-lens/clients/opaque-mutation-scan.js +17 -7
  194. package/extensions/dm-lens/clients/opengrep-client.js +92 -10
  195. package/extensions/dm-lens/clients/opengrep-config.js +1 -1
  196. package/extensions/dm-lens/clients/package-manager.js +2 -1
  197. package/extensions/dm-lens/clients/path-utils.js +199 -3
  198. package/extensions/dm-lens/clients/performance-report.js +3 -3
  199. package/extensions/dm-lens/clients/persistent-reverify.js +167 -0
  200. package/extensions/dm-lens/clients/php-cs-fixer-config.js +9 -4
  201. package/extensions/dm-lens/clients/pipeline.js +124 -68
  202. package/extensions/dm-lens/clients/project-changes.js +1 -1
  203. package/extensions/dm-lens/clients/project-diagnostics/cache.js +19 -5
  204. package/extensions/dm-lens/clients/project-diagnostics/extractors.js +1 -1
  205. package/extensions/dm-lens/clients/project-diagnostics/fresh-fetch.js +150 -18
  206. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/dead-code.js +4 -1
  207. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/gitleaks.js +3 -3
  208. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/jscpd.js +1 -1
  209. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/knip.js +1 -1
  210. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/madge.js +1 -1
  211. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/opengrep.js +1 -1
  212. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/runner-findings.js +19 -2
  213. package/extensions/dm-lens/clients/project-diagnostics/scanner.js +35 -4
  214. package/extensions/dm-lens/clients/project-lens-config.js +58 -4
  215. package/extensions/dm-lens/clients/project-scan-policy.js +0 -46
  216. package/extensions/dm-lens/clients/python-environment.js +80 -4
  217. package/extensions/dm-lens/clients/python-provenance.js +551 -0
  218. package/extensions/dm-lens/clients/read-guard-logger.js +3 -1
  219. package/extensions/dm-lens/clients/read-guard.js +29 -6
  220. package/extensions/dm-lens/clients/recent-touches.js +2 -2
  221. package/extensions/dm-lens/clients/resource-sampler.js +59 -9
  222. package/extensions/dm-lens/clients/review-graph/builder.js +39 -34
  223. package/extensions/dm-lens/clients/review-graph/git-identity.js +11 -7
  224. package/extensions/dm-lens/clients/review-graph/import-resolvers.js +1 -1
  225. package/extensions/dm-lens/clients/review-graph-logger.js +3 -1
  226. package/extensions/dm-lens/clients/ruff-client.js +11 -10
  227. package/extensions/dm-lens/clients/runtime-agent-end.js +41 -5
  228. package/extensions/dm-lens/clients/runtime-context.js +5 -2
  229. package/extensions/dm-lens/clients/runtime-coordinator.js +60 -6
  230. package/extensions/dm-lens/clients/runtime-session.js +52 -8
  231. package/extensions/dm-lens/clients/runtime-tool-call.js +27 -15
  232. package/extensions/dm-lens/clients/runtime-tool-result.js +279 -63
  233. package/extensions/dm-lens/clients/runtime-turn.js +453 -185
  234. package/extensions/dm-lens/clients/safe-spawn.js +248 -62
  235. package/extensions/dm-lens/clients/sanitize.js +0 -4
  236. package/extensions/dm-lens/clients/scan-utils.js +1 -39
  237. package/extensions/dm-lens/clients/scratch-tree-policy.js +2 -3
  238. package/extensions/dm-lens/clients/security-scan-client.js +2 -2
  239. package/extensions/dm-lens/clients/session-event-guard.js +59 -2
  240. package/extensions/dm-lens/clients/session-summary.js +0 -25
  241. package/extensions/dm-lens/clients/sg-runner.js +24 -12
  242. package/extensions/dm-lens/clients/sgconfig.js +58 -6
  243. package/extensions/dm-lens/clients/shared-checkout-guard.js +1 -1
  244. package/extensions/dm-lens/clients/situational-tool-telemetry.js +85 -0
  245. package/extensions/dm-lens/clients/skills-resolver.js +42 -0
  246. package/extensions/dm-lens/clients/smells-rollup.js +2 -2
  247. package/extensions/dm-lens/clients/spawn-output-cap.js +29 -0
  248. package/extensions/dm-lens/clients/startup-scan.js +1 -2
  249. package/extensions/dm-lens/clients/string-utils.js +3 -0
  250. package/extensions/dm-lens/clients/test-runner-client.js +118 -57
  251. package/extensions/dm-lens/clients/test-runner-delivery.js +118 -66
  252. package/extensions/dm-lens/clients/tool-agreement.js +403 -0
  253. package/extensions/dm-lens/clients/tool-config.js +218 -0
  254. package/extensions/dm-lens/clients/tool-cwd.js +248 -0
  255. package/extensions/dm-lens/clients/tool-definition.js +18 -1
  256. package/extensions/dm-lens/clients/tool-policy.js +138 -10
  257. package/extensions/dm-lens/clients/tool-probe.js +5 -0
  258. package/extensions/dm-lens/clients/tool-set-policy.js +35 -0
  259. package/extensions/dm-lens/clients/tree-sitter-client.js +201 -80
  260. package/extensions/dm-lens/clients/tree-sitter-query-loader.js +78 -130
  261. package/extensions/dm-lens/clients/trivy-client.js +8 -1
  262. package/extensions/dm-lens/clients/tui-fit.js +0 -3
  263. package/extensions/dm-lens/clients/turn-context.js +48 -0
  264. package/extensions/dm-lens/clients/turn-end/lane.js +0 -0
  265. package/extensions/dm-lens/clients/turn-end/lanes/govulncheck.js +54 -0
  266. package/extensions/dm-lens/clients/turn-end/lanes/secrets.js +140 -0
  267. package/extensions/dm-lens/clients/user-notify.js +0 -3
  268. package/extensions/dm-lens/clients/warm-attach.js +25 -0
  269. package/extensions/dm-lens/clients/widget-state.js +203 -13
  270. package/extensions/dm-lens/clients/word-index-logger.js +0 -6
  271. package/extensions/dm-lens/clients/word-index-store.js +1 -4
  272. package/extensions/dm-lens/clients/word-index.js +9 -5
  273. package/extensions/dm-lens/clients/workspace-topology.js +20 -3
  274. package/extensions/dm-lens/clients/write-ordering-guard.js +6 -0
  275. package/extensions/dm-lens/clients/zizmor-config.js +15 -11
  276. package/extensions/dm-lens/config/dependency-cruiser-eager-allowlist.json +8 -2
  277. package/extensions/dm-lens/dist/clients/actionable-warnings-logger.js +24 -0
  278. package/extensions/dm-lens/dist/clients/actionable-warnings.js +1014 -0
  279. package/extensions/dm-lens/dist/clients/advisory-provenance.js +385 -0
  280. package/extensions/dm-lens/dist/clients/agent-behavior-client.js +94 -0
  281. package/extensions/dm-lens/dist/clients/agent-nudge.js +151 -0
  282. package/extensions/dm-lens/dist/clients/analysed-root.js +1 -0
  283. package/extensions/dm-lens/dist/clients/ast-grep-client.js +576 -0
  284. package/extensions/dm-lens/dist/clients/ast-grep-rule-manager.js +114 -0
  285. package/extensions/dm-lens/dist/clients/ast-grep-tool-logger.js +85 -0
  286. package/extensions/dm-lens/dist/clients/ast-grep-types.js +1 -0
  287. package/extensions/dm-lens/dist/clients/ast-grep-yaml-synth.js +109 -0
  288. package/extensions/dm-lens/dist/clients/atomic-write-staging.js +66 -0
  289. package/extensions/dm-lens/dist/clients/atomic-write.js +37 -0
  290. package/extensions/dm-lens/dist/clients/availability-probe-flight.js +11 -0
  291. package/extensions/dm-lens/dist/clients/bash-file-access.js +830 -0
  292. package/extensions/dm-lens/dist/clients/biome-client.js +221 -0
  293. package/extensions/dm-lens/dist/clients/blocker-freshness.js +385 -0
  294. package/extensions/dm-lens/dist/clients/blocker-past-eof.js +49 -0
  295. package/extensions/dm-lens/dist/clients/bootstrap.js +246 -0
  296. package/extensions/dm-lens/dist/clients/bounded-cache.js +105 -0
  297. package/extensions/dm-lens/dist/clients/bounded-pid-file-lock.js +173 -0
  298. package/extensions/dm-lens/dist/clients/bounded-telemetry.js +104 -0
  299. package/extensions/dm-lens/dist/clients/build-identity.js +45 -0
  300. package/extensions/dm-lens/dist/clients/bundled-resource-health.js +41 -0
  301. package/extensions/dm-lens/dist/clients/bus-events-logger.js +48 -0
  302. package/extensions/dm-lens/dist/clients/bus-publish.js +117 -0
  303. package/extensions/dm-lens/dist/clients/cache/rule-cache.js +103 -0
  304. package/extensions/dm-lens/dist/clients/cache-manager.js +340 -0
  305. package/extensions/dm-lens/dist/clients/cache-observability.js +847 -0
  306. package/extensions/dm-lens/dist/clients/call-graph.js +628 -0
  307. package/extensions/dm-lens/dist/clients/cargo-manifest.js +151 -0
  308. package/extensions/dm-lens/dist/clients/cascade-budget.js +52 -0
  309. package/extensions/dm-lens/dist/clients/cascade-format.js +160 -0
  310. package/extensions/dm-lens/dist/clients/cascade-logger.js +22 -0
  311. package/extensions/dm-lens/dist/clients/cascade-types.js +1 -0
  312. package/extensions/dm-lens/dist/clients/child-unref.js +59 -0
  313. package/extensions/dm-lens/dist/clients/code-quality-warnings.js +192 -0
  314. package/extensions/dm-lens/dist/clients/codebase-model.js +110 -0
  315. package/extensions/dm-lens/dist/clients/collateral-test-role.js +8 -0
  316. package/extensions/dm-lens/dist/clients/complexity-client.js +398 -0
  317. package/extensions/dm-lens/dist/clients/config-core/deny.js +117 -0
  318. package/extensions/dm-lens/dist/clients/config-core/index.js +2 -0
  319. package/extensions/dm-lens/dist/clients/config-core/merge.js +228 -0
  320. package/extensions/dm-lens/dist/clients/config-core/normalize.js +217 -0
  321. package/extensions/dm-lens/dist/clients/config-core/process-spec.js +147 -0
  322. package/extensions/dm-lens/dist/clients/config-core/provenance.js +54 -0
  323. package/extensions/dm-lens/dist/clients/config-core/records.js +79 -0
  324. package/extensions/dm-lens/dist/clients/config-core/resolve.js +48 -0
  325. package/extensions/dm-lens/dist/clients/config-core/safe-object.js +22 -0
  326. package/extensions/dm-lens/dist/clients/config-core/schema.js +90 -0
  327. package/extensions/dm-lens/dist/clients/config-diagnostic-codes.js +90 -0
  328. package/extensions/dm-lens/dist/clients/config-locations.js +175 -0
  329. package/extensions/dm-lens/dist/clients/config-resolve.js +359 -0
  330. package/extensions/dm-lens/dist/clients/config-schema.js +128 -0
  331. package/extensions/dm-lens/dist/clients/config-warn.js +146 -0
  332. package/extensions/dm-lens/dist/clients/console-guard-install.js +4 -0
  333. package/extensions/dm-lens/dist/clients/cooperative-budget.js +36 -0
  334. package/extensions/dm-lens/dist/clients/dead-code-client.js +342 -0
  335. package/extensions/dm-lens/dist/clients/dead-code-logger.js +18 -0
  336. package/extensions/dm-lens/dist/clients/deadline-utils.js +117 -0
  337. package/extensions/dm-lens/dist/clients/debug-handles.js +121 -0
  338. package/extensions/dm-lens/dist/clients/debug-heap.js +80 -0
  339. package/extensions/dm-lens/dist/clients/deferred-lsp-work.js +33 -0
  340. package/extensions/dm-lens/dist/clients/degradation-ledger.js +272 -0
  341. package/extensions/dm-lens/dist/clients/demoted-finding-render.js +61 -0
  342. package/extensions/dm-lens/dist/clients/dependency-checker.js +525 -0
  343. package/extensions/dm-lens/dist/clients/deps/ast-grep-napi.js +17 -0
  344. package/extensions/dm-lens/dist/clients/deps/dm-host-deps.js +10 -0
  345. package/extensions/dm-lens/dist/clients/deps/dm-tui-compat.js +58 -0
  346. package/extensions/dm-lens/dist/clients/deps/js-yaml.js +7 -0
  347. package/extensions/dm-lens/dist/clients/deps/minimatch.js +6 -0
  348. package/extensions/dm-lens/dist/clients/deps/pidusage.js +5 -0
  349. package/extensions/dm-lens/dist/clients/deps/typebox.js +5 -0
  350. package/extensions/dm-lens/dist/clients/deps/vscode-jsonrpc.js +8 -0
  351. package/extensions/dm-lens/dist/clients/deps/web-tree-sitter.js +11 -0
  352. package/extensions/dm-lens/dist/clients/diagnostic-dispositions.js +318 -0
  353. package/extensions/dm-lens/dist/clients/diagnostic-line-freshness.js +144 -0
  354. package/extensions/dm-lens/dist/clients/diagnostic-logger.js +60 -0
  355. package/extensions/dm-lens/dist/clients/diagnostic-tracker.js +89 -0
  356. package/extensions/dm-lens/dist/clients/diagnostics-publish.js +134 -0
  357. package/extensions/dm-lens/dist/clients/dispatch/ast-grep-catalog.js +16 -0
  358. package/extensions/dm-lens/dist/clients/dispatch/auxiliary-lsp.js +158 -0
  359. package/extensions/dm-lens/dist/clients/dispatch/collect-later-tier.js +25 -0
  360. package/extensions/dm-lens/dist/clients/dispatch/diagnostic-taxonomy.js +58 -0
  361. package/extensions/dm-lens/dist/clients/dispatch/dispatcher.js +953 -0
  362. package/extensions/dm-lens/dist/clients/dispatch/fact-provider-types.js +1 -0
  363. package/extensions/dm-lens/dist/clients/dispatch/fact-rule-runner.js +17 -0
  364. package/extensions/dm-lens/dist/clients/dispatch/fact-runner.js +18 -0
  365. package/extensions/dm-lens/dist/clients/dispatch/fact-scheduler.js +52 -0
  366. package/extensions/dm-lens/dist/clients/dispatch/fact-store.js +199 -0
  367. package/extensions/dm-lens/dist/clients/dispatch/facts/comment-facts.js +20 -0
  368. package/extensions/dm-lens/dist/clients/dispatch/facts/file-content.js +18 -0
  369. package/extensions/dm-lens/dist/clients/dispatch/facts/function-facts.js +281 -0
  370. package/extensions/dm-lens/dist/clients/dispatch/facts/import-facts.js +169 -0
  371. package/extensions/dm-lens/dist/clients/dispatch/facts/tree-sitter-facts.js +19 -0
  372. package/extensions/dm-lens/dist/clients/dispatch/facts/try-catch-facts.js +95 -0
  373. package/extensions/dm-lens/dist/clients/dispatch/finding-policy.js +159 -0
  374. package/extensions/dm-lens/dist/clients/dispatch/indent-detect.js +227 -0
  375. package/extensions/dm-lens/dist/clients/dispatch/inline-suppressions.js +52 -0
  376. package/extensions/dm-lens/dist/clients/dispatch/integration.js +1463 -0
  377. package/extensions/dm-lens/dist/clients/dispatch/lazy.js +8 -0
  378. package/extensions/dm-lens/dist/clients/dispatch/pending-runner-findings.js +75 -0
  379. package/extensions/dm-lens/dist/clients/dispatch/plan.js +278 -0
  380. package/extensions/dm-lens/dist/clients/dispatch/priorities.js +14 -0
  381. package/extensions/dm-lens/dist/clients/dispatch/rule-id-normalize.js +42 -0
  382. package/extensions/dm-lens/dist/clients/dispatch/rule-ignores.js +21 -0
  383. package/extensions/dm-lens/dist/clients/dispatch/rule-policy.js +73 -0
  384. package/extensions/dm-lens/dist/clients/dispatch/rules/async-noise.js +31 -0
  385. package/extensions/dm-lens/dist/clients/dispatch/rules/async-unnecessary-wrapper.js +27 -0
  386. package/extensions/dm-lens/dist/clients/dispatch/rules/cors-wildcard.js +35 -0
  387. package/extensions/dm-lens/dist/clients/dispatch/rules/error-obscuring.js +29 -0
  388. package/extensions/dm-lens/dist/clients/dispatch/rules/error-swallowing.js +29 -0
  389. package/extensions/dm-lens/dist/clients/dispatch/rules/framework-call-noise.js +31 -0
  390. package/extensions/dm-lens/dist/clients/dispatch/rules/high-complexity.js +56 -0
  391. package/extensions/dm-lens/dist/clients/dispatch/rules/high-fan-out.js +45 -0
  392. package/extensions/dm-lens/dist/clients/dispatch/rules/high-import-coupling.js +31 -0
  393. package/extensions/dm-lens/dist/clients/dispatch/rules/missing-error-propagation.js +45 -0
  394. package/extensions/dm-lens/dist/clients/dispatch/rules/no-commented-credentials.js +46 -0
  395. package/extensions/dm-lens/dist/clients/dispatch/rules/pass-through-wrappers.js +38 -0
  396. package/extensions/dm-lens/dist/clients/dispatch/rules/placeholder-comments.js +40 -0
  397. package/extensions/dm-lens/dist/clients/dispatch/rules/unsafe-boundary.js +101 -0
  398. package/extensions/dm-lens/dist/clients/dispatch/runner-context.js +46 -0
  399. package/extensions/dm-lens/dist/clients/dispatch/runners/actionlint.js +98 -0
  400. package/extensions/dm-lens/dist/clients/dispatch/runners/ast-grep-napi.js +690 -0
  401. package/extensions/dm-lens/dist/clients/dispatch/runners/biome-check.js +202 -0
  402. package/extensions/dm-lens/dist/clients/dispatch/runners/cpp-check.js +190 -0
  403. package/extensions/dm-lens/dist/clients/dispatch/runners/credo.js +66 -0
  404. package/extensions/dm-lens/dist/clients/dispatch/runners/cue-vet.js +167 -0
  405. package/extensions/dm-lens/dist/clients/dispatch/runners/dart-analyze.js +151 -0
  406. package/extensions/dm-lens/dist/clients/dispatch/runners/detekt.js +157 -0
  407. package/extensions/dm-lens/dist/clients/dispatch/runners/dotnet-build.js +157 -0
  408. package/extensions/dm-lens/dist/clients/dispatch/runners/elixir-check.js +153 -0
  409. package/extensions/dm-lens/dist/clients/dispatch/runners/eslint.js +99 -0
  410. package/extensions/dm-lens/dist/clients/dispatch/runners/fact-rules.js +20 -0
  411. package/extensions/dm-lens/dist/clients/dispatch/runners/fish-indent.js +65 -0
  412. package/extensions/dm-lens/dist/clients/dispatch/runners/gleam-check.js +107 -0
  413. package/extensions/dm-lens/dist/clients/dispatch/runners/go-vet.js +51 -0
  414. package/extensions/dm-lens/dist/clients/dispatch/runners/golangci-lint.js +89 -0
  415. package/extensions/dm-lens/dist/clients/dispatch/runners/hadolint.js +83 -0
  416. package/extensions/dm-lens/dist/clients/dispatch/runners/helm-lint.js +144 -0
  417. package/extensions/dm-lens/dist/clients/dispatch/runners/helm-render.js +593 -0
  418. package/extensions/dm-lens/dist/clients/dispatch/runners/htmlhint.js +103 -0
  419. package/extensions/dm-lens/dist/clients/dispatch/runners/index.js +100 -0
  420. package/extensions/dm-lens/dist/clients/dispatch/runners/javac.js +82 -0
  421. package/extensions/dm-lens/dist/clients/dispatch/runners/ktlint.js +93 -0
  422. package/extensions/dm-lens/dist/clients/dispatch/runners/lsp.js +206 -0
  423. package/extensions/dm-lens/dist/clients/dispatch/runners/markdownlint.js +129 -0
  424. package/extensions/dm-lens/dist/clients/dispatch/runners/mypy.js +70 -0
  425. package/extensions/dm-lens/dist/clients/dispatch/runners/oxlint.js +305 -0
  426. package/extensions/dm-lens/dist/clients/dispatch/runners/php-lint.js +70 -0
  427. package/extensions/dm-lens/dist/clients/dispatch/runners/phpstan.js +90 -0
  428. package/extensions/dm-lens/dist/clients/dispatch/runners/prisma-validate.js +56 -0
  429. package/extensions/dm-lens/dist/clients/dispatch/runners/psscriptanalyzer.js +307 -0
  430. package/extensions/dm-lens/dist/clients/dispatch/runners/pyright.js +118 -0
  431. package/extensions/dm-lens/dist/clients/dispatch/runners/rubocop.js +79 -0
  432. package/extensions/dm-lens/dist/clients/dispatch/runners/ruff.js +69 -0
  433. package/extensions/dm-lens/dist/clients/dispatch/runners/rust-clippy.js +147 -0
  434. package/extensions/dm-lens/dist/clients/dispatch/runners/shellcheck.js +111 -0
  435. package/extensions/dm-lens/dist/clients/dispatch/runners/shfmt.js +81 -0
  436. package/extensions/dm-lens/dist/clients/dispatch/runners/spellcheck.js +74 -0
  437. package/extensions/dm-lens/dist/clients/dispatch/runners/spotbugs.js +208 -0
  438. package/extensions/dm-lens/dist/clients/dispatch/runners/sqlfluff.js +136 -0
  439. package/extensions/dm-lens/dist/clients/dispatch/runners/stylelint.js +118 -0
  440. package/extensions/dm-lens/dist/clients/dispatch/runners/swiftlint.js +143 -0
  441. package/extensions/dm-lens/dist/clients/dispatch/runners/taplo.js +97 -0
  442. package/extensions/dm-lens/dist/clients/dispatch/runners/terragrunt.js +110 -0
  443. package/extensions/dm-lens/dist/clients/dispatch/runners/tflint.js +104 -0
  444. package/extensions/dm-lens/dist/clients/dispatch/runners/tree-sitter.js +516 -0
  445. package/extensions/dm-lens/dist/clients/dispatch/runners/trivy-config.js +155 -0
  446. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/availability-policy.js +285 -0
  447. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +61 -0
  448. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/diagnostic-parsers.js +61 -0
  449. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/lazy-installer.js +130 -0
  450. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +1067 -0
  451. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/spawn-outcome.js +40 -0
  452. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/tool-failure.js +117 -0
  453. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/toolchain-availability.js +88 -0
  454. package/extensions/dm-lens/dist/clients/dispatch/runners/utils.js +8 -0
  455. package/extensions/dm-lens/dist/clients/dispatch/runners/vale.js +106 -0
  456. package/extensions/dm-lens/dist/clients/dispatch/runners/yaml-rule-parser.js +163 -0
  457. package/extensions/dm-lens/dist/clients/dispatch/runners/yamllint.js +83 -0
  458. package/extensions/dm-lens/dist/clients/dispatch/runners/zig-check.js +72 -0
  459. package/extensions/dm-lens/dist/clients/dispatch/suppress-writer.js +57 -0
  460. package/extensions/dm-lens/dist/clients/dispatch/tool-profile.js +30 -0
  461. package/extensions/dm-lens/dist/clients/dispatch/types.js +7 -0
  462. package/extensions/dm-lens/dist/clients/dispatch/utils/format-utils.js +45 -0
  463. package/extensions/dm-lens/dist/clients/dispatch/utils/lsp-diagnostics.js +31 -0
  464. package/extensions/dm-lens/dist/clients/disposition-logger.js +19 -0
  465. package/extensions/dm-lens/dist/clients/disposition-publish.js +88 -0
  466. package/extensions/dm-lens/dist/clients/durable-store.js +77 -0
  467. package/extensions/dm-lens/dist/clients/effective-config.js +160 -0
  468. package/extensions/dm-lens/dist/clients/env-utils.js +26 -0
  469. package/extensions/dm-lens/dist/clients/error-class.js +3 -0
  470. package/extensions/dm-lens/dist/clients/eval-timestamp.js +2 -0
  471. package/extensions/dm-lens/dist/clients/event-loop-hold.js +119 -0
  472. package/extensions/dm-lens/dist/clients/event-loop-monitor.js +84 -0
  473. package/extensions/dm-lens/dist/clients/extension-log.js +230 -0
  474. package/extensions/dm-lens/dist/clients/extension-mode.js +20 -0
  475. package/extensions/dm-lens/dist/clients/feature-hints.js +88 -0
  476. package/extensions/dm-lens/dist/clients/file-kinds.js +304 -0
  477. package/extensions/dm-lens/dist/clients/file-role.js +50 -0
  478. package/extensions/dm-lens/dist/clients/file-time.js +112 -0
  479. package/extensions/dm-lens/dist/clients/file-utils.js +630 -0
  480. package/extensions/dm-lens/dist/clients/finding-delivery-gate.js +129 -0
  481. package/extensions/dm-lens/dist/clients/finding-identity.js +23 -0
  482. package/extensions/dm-lens/dist/clients/fix-worklog.js +75 -0
  483. package/extensions/dm-lens/dist/clients/format-events-publish.js +230 -0
  484. package/extensions/dm-lens/dist/clients/format-service.js +154 -0
  485. package/extensions/dm-lens/dist/clients/formatters-lazy.js +8 -0
  486. package/extensions/dm-lens/dist/clients/formatters.js +1351 -0
  487. package/extensions/dm-lens/dist/clients/freshness-cadence.js +1 -0
  488. package/extensions/dm-lens/dist/clients/freshness.js +8 -0
  489. package/extensions/dm-lens/dist/clients/generated-artifacts.js +209 -0
  490. package/extensions/dm-lens/dist/clients/generation-guard.js +105 -0
  491. package/extensions/dm-lens/dist/clients/git-guard.js +770 -0
  492. package/extensions/dm-lens/dist/clients/git-tracked-ignore.js +120 -0
  493. package/extensions/dm-lens/dist/clients/gitleaks-client.js +282 -0
  494. package/extensions/dm-lens/dist/clients/go-client.js +47 -0
  495. package/extensions/dm-lens/dist/clients/govulncheck-client.js +411 -0
  496. package/extensions/dm-lens/dist/clients/gradle-ktfmt-style.js +177 -0
  497. package/extensions/dm-lens/dist/clients/grammar-source.js +224 -0
  498. package/extensions/dm-lens/dist/clients/gzip-stage-write.js +85 -0
  499. package/extensions/dm-lens/dist/clients/hashline-anchor.js +222 -0
  500. package/extensions/dm-lens/dist/clients/hook-budgets.js +16 -0
  501. package/extensions/dm-lens/dist/clients/host-edit-normalize.js +87 -0
  502. package/extensions/dm-lens/dist/clients/host-ports.js +35 -0
  503. package/extensions/dm-lens/dist/clients/indent-retarget.js +102 -0
  504. package/extensions/dm-lens/dist/clients/inline-blocker-dispositions.js +103 -0
  505. package/extensions/dm-lens/dist/clients/install-diagnostics.js +123 -0
  506. package/extensions/dm-lens/dist/clients/installer/index.js +3770 -0
  507. package/extensions/dm-lens/dist/clients/installer/managed-tool-refresh-session.js +17 -0
  508. package/extensions/dm-lens/dist/clients/installer/managed-tool-refresh.js +522 -0
  509. package/extensions/dm-lens/dist/clients/instance-reaper-state.js +3 -0
  510. package/extensions/dm-lens/dist/clients/instance-reaper.js +577 -0
  511. package/extensions/dm-lens/dist/clients/instance-registry-lock.js +131 -0
  512. package/extensions/dm-lens/dist/clients/instance-registry.js +452 -0
  513. package/extensions/dm-lens/dist/clients/jscpd-client.js +252 -0
  514. package/extensions/dm-lens/dist/clients/json-cache-read.js +25 -0
  515. package/extensions/dm-lens/dist/clients/knip-client.js +472 -0
  516. package/extensions/dm-lens/dist/clients/language-policy.js +242 -0
  517. package/extensions/dm-lens/dist/clients/language-profile.js +261 -0
  518. package/extensions/dm-lens/dist/clients/language-registry.js +424 -0
  519. package/extensions/dm-lens/dist/clients/latency-logger.js +192 -0
  520. package/extensions/dm-lens/dist/clients/lazy-import.js +14 -0
  521. package/extensions/dm-lens/dist/clients/ledger-bounds.js +21 -0
  522. package/extensions/dm-lens/dist/clients/lens-config.js +237 -0
  523. package/extensions/dm-lens/dist/clients/lens-engine.js +181 -0
  524. package/extensions/dm-lens/dist/clients/lens-events.js +105 -0
  525. package/extensions/dm-lens/dist/clients/lens-flag-registry.js +302 -0
  526. package/extensions/dm-lens/dist/clients/lens-map.js +980 -0
  527. package/extensions/dm-lens/dist/clients/live-bus-emitter.js +53 -0
  528. package/extensions/dm-lens/dist/clients/log-cleanup.js +138 -0
  529. package/extensions/dm-lens/dist/clients/lsp/aggregation.js +88 -0
  530. package/extensions/dm-lens/dist/clients/lsp/cascade-tier.js +203 -0
  531. package/extensions/dm-lens/dist/clients/lsp/client.js +2709 -0
  532. package/extensions/dm-lens/dist/clients/lsp/config.js +252 -0
  533. package/extensions/dm-lens/dist/clients/lsp/content-limits.js +21 -0
  534. package/extensions/dm-lens/dist/clients/lsp/diagnostic-binding.js +79 -0
  535. package/extensions/dm-lens/dist/clients/lsp/document-drift.js +312 -0
  536. package/extensions/dm-lens/dist/clients/lsp/edits.js +930 -0
  537. package/extensions/dm-lens/dist/clients/lsp/index.js +4448 -0
  538. package/extensions/dm-lens/dist/clients/lsp/inferred-project.js +121 -0
  539. package/extensions/dm-lens/dist/clients/lsp/jvm-runtime.js +194 -0
  540. package/extensions/dm-lens/dist/clients/lsp/language.js +23 -0
  541. package/extensions/dm-lens/dist/clients/lsp/launch.js +468 -0
  542. package/extensions/dm-lens/dist/clients/lsp/lombok.js +146 -0
  543. package/extensions/dm-lens/dist/clients/lsp/path-utils.js +1 -0
  544. package/extensions/dm-lens/dist/clients/lsp/pending-aux-coverage.js +90 -0
  545. package/extensions/dm-lens/dist/clients/lsp/position-encoding.js +28 -0
  546. package/extensions/dm-lens/dist/clients/lsp/ruby-drive-dirs.js +42 -0
  547. package/extensions/dm-lens/dist/clients/lsp/server.js +2422 -0
  548. package/extensions/dm-lens/dist/clients/lsp/session-roots.js +52 -0
  549. package/extensions/dm-lens/dist/clients/lsp/spawn-history.js +15 -0
  550. package/extensions/dm-lens/dist/clients/lsp/sync-kind.js +30 -0
  551. package/extensions/dm-lens/dist/clients/lsp/tsserver-sync.js +156 -0
  552. package/extensions/dm-lens/dist/clients/lsp/wait-policy/capability-snapshot.js +1 -0
  553. package/extensions/dm-lens/dist/clients/lsp/wait-policy/classification.js +36 -0
  554. package/extensions/dm-lens/dist/clients/lsp/wait-policy/index.js +3 -0
  555. package/extensions/dm-lens/dist/clients/lsp/wait-policy/strategies.js +175 -0
  556. package/extensions/dm-lens/dist/clients/lsp/watch-queue.js +40 -0
  557. package/extensions/dm-lens/dist/clients/lsp/workspace-diagnostics-cache.js +267 -0
  558. package/extensions/dm-lens/dist/clients/lsp/workspace-diagnostics-session.js +7 -0
  559. package/extensions/dm-lens/dist/clients/lsp/workspace-sweep-hold.js +93 -0
  560. package/extensions/dm-lens/dist/clients/lsp-budget.js +83 -0
  561. package/extensions/dm-lens/dist/clients/lsp-document-symbols.js +93 -0
  562. package/extensions/dm-lens/dist/clients/lsp-lazy.js +8 -0
  563. package/extensions/dm-lens/dist/clients/lsp-mutation.js +273 -0
  564. package/extensions/dm-lens/dist/clients/lsp-status.js +37 -0
  565. package/extensions/dm-lens/dist/clients/map-with-concurrency.js +20 -0
  566. package/extensions/dm-lens/dist/clients/mcp/analyze.js +251 -0
  567. package/extensions/dm-lens/dist/clients/mcp/host-shim.js +14 -0
  568. package/extensions/dm-lens/dist/clients/mcp/ipc.js +302 -0
  569. package/extensions/dm-lens/dist/clients/mcp/review.js +137 -0
  570. package/extensions/dm-lens/dist/clients/mcp/session.js +305 -0
  571. package/extensions/dm-lens/dist/clients/memory-sampler.js +107 -0
  572. package/extensions/dm-lens/dist/clients/message-end-attribution.js +18 -0
  573. package/extensions/dm-lens/dist/clients/metrics-client.js +80 -0
  574. package/extensions/dm-lens/dist/clients/metrics-history.js +255 -0
  575. package/extensions/dm-lens/dist/clients/middle-man-analysis.js +161 -0
  576. package/extensions/dm-lens/dist/clients/model-provider.js +31 -0
  577. package/extensions/dm-lens/dist/clients/module-report-lsp.js +140 -0
  578. package/extensions/dm-lens/dist/clients/module-report.js +1642 -0
  579. package/extensions/dm-lens/dist/clients/mutating-tool.js +377 -0
  580. package/extensions/dm-lens/dist/clients/mutation-attribution.js +168 -0
  581. package/extensions/dm-lens/dist/clients/mutation-bridge.js +102 -0
  582. package/extensions/dm-lens/dist/clients/ndjson-logger.js +471 -0
  583. package/extensions/dm-lens/dist/clients/observed-mutation-sources.js +43 -0
  584. package/extensions/dm-lens/dist/clients/observed-mutation.js +709 -0
  585. package/extensions/dm-lens/dist/clients/oldtext-autopatch.js +100 -0
  586. package/extensions/dm-lens/dist/clients/opaque-mutation-scan.js +313 -0
  587. package/extensions/dm-lens/dist/clients/opengrep-client.js +216 -0
  588. package/extensions/dm-lens/dist/clients/opengrep-config.js +52 -0
  589. package/extensions/dm-lens/dist/clients/package-manager.js +303 -0
  590. package/extensions/dm-lens/dist/clients/package-root.js +25 -0
  591. package/extensions/dm-lens/dist/clients/partial-edit-apply.js +337 -0
  592. package/extensions/dm-lens/dist/clients/path-attribution-telemetry.js +31 -0
  593. package/extensions/dm-lens/dist/clients/path-keyed-map.js +57 -0
  594. package/extensions/dm-lens/dist/clients/path-utils.js +476 -0
  595. package/extensions/dm-lens/dist/clients/performance-report.js +291 -0
  596. package/extensions/dm-lens/dist/clients/persist-debounce.js +37 -0
  597. package/extensions/dm-lens/dist/clients/persistent-reverify.js +165 -0
  598. package/extensions/dm-lens/dist/clients/php-cs-fixer-config.js +15 -0
  599. package/extensions/dm-lens/dist/clients/pipeline.js +1091 -0
  600. package/extensions/dm-lens/dist/clients/post-autofix-notice.js +19 -0
  601. package/extensions/dm-lens/dist/clients/print-mode.js +3 -0
  602. package/extensions/dm-lens/dist/clients/probe-home-state.js +62 -0
  603. package/extensions/dm-lens/dist/clients/process-bridge.js +20 -0
  604. package/extensions/dm-lens/dist/clients/process-singletons.js +69 -0
  605. package/extensions/dm-lens/dist/clients/process-snapshot.js +22 -0
  606. package/extensions/dm-lens/dist/clients/project-changes.js +112 -0
  607. package/extensions/dm-lens/dist/clients/project-conventions.js +152 -0
  608. package/extensions/dm-lens/dist/clients/project-diagnostics/cache.js +91 -0
  609. package/extensions/dm-lens/dist/clients/project-diagnostics/extractors.js +53 -0
  610. package/extensions/dm-lens/dist/clients/project-diagnostics/fresh-fetch.js +408 -0
  611. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +64 -0
  612. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/dead-code.js +38 -0
  613. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +21 -0
  614. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/govulncheck.js +23 -0
  615. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/jscpd.js +28 -0
  616. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/knip.js +45 -0
  617. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/madge.js +34 -0
  618. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/opengrep.js +32 -0
  619. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +79 -0
  620. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/trivy.js +41 -0
  621. package/extensions/dm-lens/dist/clients/project-diagnostics/scanner.js +349 -0
  622. package/extensions/dm-lens/dist/clients/project-diagnostics/types.js +1 -0
  623. package/extensions/dm-lens/dist/clients/project-lens-config.js +437 -0
  624. package/extensions/dm-lens/dist/clients/project-report.js +527 -0
  625. package/extensions/dm-lens/dist/clients/project-scale.js +60 -0
  626. package/extensions/dm-lens/dist/clients/project-scan-policy.js +4 -0
  627. package/extensions/dm-lens/dist/clients/project-snapshot-fingerprint.js +39 -0
  628. package/extensions/dm-lens/dist/clients/project-snapshot-persist-worker.js +14 -0
  629. package/extensions/dm-lens/dist/clients/project-snapshot.js +1178 -0
  630. package/extensions/dm-lens/dist/clients/project-trust.js +104 -0
  631. package/extensions/dm-lens/dist/clients/python-environment.js +120 -0
  632. package/extensions/dm-lens/dist/clients/python-provenance.js +551 -0
  633. package/extensions/dm-lens/dist/clients/quiet-window-config.js +16 -0
  634. package/extensions/dm-lens/dist/clients/quiet-window.js +126 -0
  635. package/extensions/dm-lens/dist/clients/read-bridge.js +46 -0
  636. package/extensions/dm-lens/dist/clients/read-expansion.js +218 -0
  637. package/extensions/dm-lens/dist/clients/read-guard-logger.js +178 -0
  638. package/extensions/dm-lens/dist/clients/read-guard-tool-lines.js +1042 -0
  639. package/extensions/dm-lens/dist/clients/read-guard.js +1096 -0
  640. package/extensions/dm-lens/dist/clients/recent-touches.js +126 -0
  641. package/extensions/dm-lens/dist/clients/redact/secrets.js +386 -0
  642. package/extensions/dm-lens/dist/clients/resource-sampler.js +344 -0
  643. package/extensions/dm-lens/dist/clients/reverse-deps.js +227 -0
  644. package/extensions/dm-lens/dist/clients/review-graph/builder.js +3635 -0
  645. package/extensions/dm-lens/dist/clients/review-graph/format.js +30 -0
  646. package/extensions/dm-lens/dist/clients/review-graph/git-identity.js +115 -0
  647. package/extensions/dm-lens/dist/clients/review-graph/import-resolvers.js +325 -0
  648. package/extensions/dm-lens/dist/clients/review-graph/persist-worker.js +8 -0
  649. package/extensions/dm-lens/dist/clients/review-graph/query.js +195 -0
  650. package/extensions/dm-lens/dist/clients/review-graph/revision-drift.js +3 -0
  651. package/extensions/dm-lens/dist/clients/review-graph/service.js +60 -0
  652. package/extensions/dm-lens/dist/clients/review-graph/shared-extraction-ir.js +54 -0
  653. package/extensions/dm-lens/dist/clients/review-graph/symbol-id.js +29 -0
  654. package/extensions/dm-lens/dist/clients/review-graph/tsconfig-paths.js +253 -0
  655. package/extensions/dm-lens/dist/clients/review-graph/types.js +1 -0
  656. package/extensions/dm-lens/dist/clients/review-graph/workspace-modules.js +374 -0
  657. package/extensions/dm-lens/dist/clients/review-graph-logger.js +51 -0
  658. package/extensions/dm-lens/dist/clients/ruff-client.js +109 -0
  659. package/extensions/dm-lens/dist/clients/rules-scanner.js +113 -0
  660. package/extensions/dm-lens/dist/clients/run-duration.js +9 -0
  661. package/extensions/dm-lens/dist/clients/runtime-agent-end.js +608 -0
  662. package/extensions/dm-lens/dist/clients/runtime-config.js +39 -0
  663. package/extensions/dm-lens/dist/clients/runtime-context.js +155 -0
  664. package/extensions/dm-lens/dist/clients/runtime-coordinator.js +817 -0
  665. package/extensions/dm-lens/dist/clients/runtime-session.js +1625 -0
  666. package/extensions/dm-lens/dist/clients/runtime-tool-call.js +868 -0
  667. package/extensions/dm-lens/dist/clients/runtime-tool-result.js +1317 -0
  668. package/extensions/dm-lens/dist/clients/runtime-turn.js +2333 -0
  669. package/extensions/dm-lens/dist/clients/rust-client.js +48 -0
  670. package/extensions/dm-lens/dist/clients/safe-spawn.js +1267 -0
  671. package/extensions/dm-lens/dist/clients/sanitize.js +174 -0
  672. package/extensions/dm-lens/dist/clients/scan-utils.js +7 -0
  673. package/extensions/dm-lens/dist/clients/scratch-tree-policy.js +57 -0
  674. package/extensions/dm-lens/dist/clients/search-read-registration.js +59 -0
  675. package/extensions/dm-lens/dist/clients/secret-findings.js +69 -0
  676. package/extensions/dm-lens/dist/clients/security-scan-client.js +208 -0
  677. package/extensions/dm-lens/dist/clients/session-event-guard.js +111 -0
  678. package/extensions/dm-lens/dist/clients/session-lifecycle.js +173 -0
  679. package/extensions/dm-lens/dist/clients/session-start-observability.js +47 -0
  680. package/extensions/dm-lens/dist/clients/session-state-store.js +63 -0
  681. package/extensions/dm-lens/dist/clients/session-summary.js +8 -0
  682. package/extensions/dm-lens/dist/clients/sessionstart-logger.js +22 -0
  683. package/extensions/dm-lens/dist/clients/sg-runner.js +627 -0
  684. package/extensions/dm-lens/dist/clients/sgconfig.js +280 -0
  685. package/extensions/dm-lens/dist/clients/shared-checkout-guard.js +177 -0
  686. package/extensions/dm-lens/dist/clients/single-flight.js +52 -0
  687. package/extensions/dm-lens/dist/clients/situational-tool-telemetry.js +85 -0
  688. package/extensions/dm-lens/dist/clients/skills-resolver.js +38 -0
  689. package/extensions/dm-lens/dist/clients/slow-fs.js +77 -0
  690. package/extensions/dm-lens/dist/clients/smells-rollup.js +118 -0
  691. package/extensions/dm-lens/dist/clients/source-filter.js +320 -0
  692. package/extensions/dm-lens/dist/clients/source-walker.js +96 -0
  693. package/extensions/dm-lens/dist/clients/spawn-output-cap.js +35 -0
  694. package/extensions/dm-lens/dist/clients/spawn-timeout-cooldown.js +51 -0
  695. package/extensions/dm-lens/dist/clients/stale-marker.js +1 -0
  696. package/extensions/dm-lens/dist/clients/startup-scan.js +222 -0
  697. package/extensions/dm-lens/dist/clients/startup-timing.js +67 -0
  698. package/extensions/dm-lens/dist/clients/string-utils.js +6 -0
  699. package/extensions/dm-lens/dist/clients/subagent-mode.js +40 -0
  700. package/extensions/dm-lens/dist/clients/symbol-containment.js +16 -0
  701. package/extensions/dm-lens/dist/clients/symbol-types.js +1 -0
  702. package/extensions/dm-lens/dist/clients/test-runner-client.js +1504 -0
  703. package/extensions/dm-lens/dist/clients/test-runner-delivery.js +260 -0
  704. package/extensions/dm-lens/dist/clients/todo-scanner.js +164 -0
  705. package/extensions/dm-lens/dist/clients/tool-agreement.js +377 -0
  706. package/extensions/dm-lens/dist/clients/tool-config.js +218 -0
  707. package/extensions/dm-lens/dist/clients/tool-cwd.js +235 -0
  708. package/extensions/dm-lens/dist/clients/tool-definition.js +22 -0
  709. package/extensions/dm-lens/dist/clients/tool-event.js +18 -0
  710. package/extensions/dm-lens/dist/clients/tool-policy.js +2393 -0
  711. package/extensions/dm-lens/dist/clients/tool-probe.js +5 -0
  712. package/extensions/dm-lens/dist/clients/tool-render.js +79 -0
  713. package/extensions/dm-lens/dist/clients/tool-set-policy.js +70 -0
  714. package/extensions/dm-lens/dist/clients/tree-sitter-cache.js +206 -0
  715. package/extensions/dm-lens/dist/clients/tree-sitter-client.js +2787 -0
  716. package/extensions/dm-lens/dist/clients/tree-sitter-logger.js +77 -0
  717. package/extensions/dm-lens/dist/clients/tree-sitter-navigator.js +198 -0
  718. package/extensions/dm-lens/dist/clients/tree-sitter-query-loader.js +318 -0
  719. package/extensions/dm-lens/dist/clients/tree-sitter-shared.js +87 -0
  720. package/extensions/dm-lens/dist/clients/tree-sitter-symbol-extractor.js +957 -0
  721. package/extensions/dm-lens/dist/clients/trivy-client.js +305 -0
  722. package/extensions/dm-lens/dist/clients/tui-fit.js +26 -0
  723. package/extensions/dm-lens/dist/clients/turn-context.js +48 -0
  724. package/extensions/dm-lens/dist/clients/turn-end/lane.js +1 -0
  725. package/extensions/dm-lens/dist/clients/turn-end/lanes/govulncheck.js +54 -0
  726. package/extensions/dm-lens/dist/clients/turn-end/lanes/secrets.js +131 -0
  727. package/extensions/dm-lens/dist/clients/turn-summary-render.js +56 -0
  728. package/extensions/dm-lens/dist/clients/turn-summary.js +84 -0
  729. package/extensions/dm-lens/dist/clients/typos-config.js +9 -0
  730. package/extensions/dm-lens/dist/clients/user-notify.js +15 -0
  731. package/extensions/dm-lens/dist/clients/vanished-instance-marker.js +18 -0
  732. package/extensions/dm-lens/dist/clients/warm-attach.js +210 -0
  733. package/extensions/dm-lens/dist/clients/widget-state.js +963 -0
  734. package/extensions/dm-lens/dist/clients/word-index-logger.js +21 -0
  735. package/extensions/dm-lens/dist/clients/word-index-store.js +222 -0
  736. package/extensions/dm-lens/dist/clients/word-index.js +1426 -0
  737. package/extensions/dm-lens/dist/clients/workspace-topology.js +261 -0
  738. package/extensions/dm-lens/dist/clients/write-ordering-guard.js +24 -0
  739. package/extensions/dm-lens/dist/clients/zizmor-config.js +160 -0
  740. package/extensions/dm-lens/dist/i18n.js +67 -0
  741. package/extensions/dm-lens/dist/index.js +1782 -0
  742. package/extensions/dm-lens/dist/mcp/analyze-cli.js +178 -0
  743. package/extensions/dm-lens/dist/mcp/build-staleness.js +55 -0
  744. package/extensions/dm-lens/dist/mcp/cli.js +78 -0
  745. package/extensions/dm-lens/dist/mcp/server.js +1208 -0
  746. package/extensions/dm-lens/dist/mcp/worker.js +33 -0
  747. package/extensions/dm-lens/dist/scripts/lib/process-scan.mjs +256 -0
  748. package/extensions/dm-lens/dist/scripts/lib/skills-predicate.mjs +53 -0
  749. package/extensions/dm-lens/dist/scripts/lib/web-tree-sitter-dir.mjs +45 -0
  750. package/extensions/dm-lens/dist/tools/activate-tools.js +61 -0
  751. package/extensions/dm-lens/dist/tools/ast-grep-outline.js +127 -0
  752. package/extensions/dm-lens/dist/tools/ast-grep-replace.js +226 -0
  753. package/extensions/dm-lens/dist/tools/ast-grep-search.js +687 -0
  754. package/extensions/dm-lens/dist/tools/effective-config.js +59 -0
  755. package/extensions/dm-lens/dist/tools/lens-diagnostic-mark.js +240 -0
  756. package/extensions/dm-lens/dist/tools/lens-diagnostics.js +1484 -0
  757. package/extensions/dm-lens/dist/tools/lsp-diagnostics.js +1088 -0
  758. package/extensions/dm-lens/dist/tools/lsp-navigation.js +1194 -0
  759. package/extensions/dm-lens/dist/tools/lsp-structured-output.js +277 -0
  760. package/extensions/dm-lens/dist/tools/module-report.js +332 -0
  761. package/extensions/dm-lens/dist/tools/project-report.js +72 -0
  762. package/extensions/dm-lens/dist/tools/render-compact.js +272 -0
  763. package/extensions/dm-lens/dist/tools/scan-progress.js +31 -0
  764. package/extensions/dm-lens/dist/tools/shared.js +26 -0
  765. package/extensions/dm-lens/dist/tools/symbol-search.js +133 -0
  766. package/extensions/dm-lens/index.js +278 -101
  767. package/extensions/dm-lens/mcp/analyze-cli.js +3 -2
  768. package/extensions/dm-lens/mcp/build-staleness.js +1 -1
  769. package/extensions/dm-lens/mcp/server.js +144 -73
  770. package/extensions/dm-lens/package.json +4 -4
  771. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/no-assert-tuple-test.yml +13 -0
  772. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/no-boolean-in-except-test.yml +26 -0
  773. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/no-http-headers-bracket-access-test.yml +10 -0
  774. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/unchecked-numeric-parse-python-test.yml +18 -0
  775. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/unchecked-throwing-call-python-test.yml +4 -3
  776. package/extensions/dm-lens/rules/ast-grep-rules/rules/go-no-fmt-println.yml +2 -2
  777. package/extensions/dm-lens/rules/ast-grep-rules/rules/no-assert-tuple.yml +23 -13
  778. package/extensions/dm-lens/rules/ast-grep-rules/rules/no-boolean-in-except.yml +7 -3
  779. package/extensions/dm-lens/rules/ast-grep-rules/rules/no-console-except-error-js.yml +2 -2
  780. package/extensions/dm-lens/rules/ast-grep-rules/rules/no-console-except-error.yml +2 -2
  781. package/extensions/dm-lens/rules/ast-grep-rules/rules/no-http-headers-bracket-access.yml +12 -7
  782. package/extensions/dm-lens/rules/ast-grep-rules/rules/unchecked-numeric-parse-python.yml +44 -0
  783. package/extensions/dm-lens/rules/ast-grep-rules/rules/unchecked-throwing-call-python.yml +5 -3
  784. package/extensions/dm-lens/rules/tree-sitter-queries/python/python-cross-language-method.yml +3 -3
  785. package/extensions/dm-lens/rules/tree-sitter-queries/python/python-hallucinated-import.yml +2 -2
  786. package/extensions/dm-lens/rules/tree-sitter-queries/python/python-sql-injection.yml +12 -2
  787. package/extensions/dm-lens/rules/tree-sitter-queries/typescript/console-statement.yml +2 -2
  788. package/extensions/dm-lens/rules/tree-sitter-queries/typescript/sql-injection.yml +23 -7
  789. package/extensions/dm-lens/rules/typos/_typos.toml +4 -2
  790. package/extensions/dm-lens/scripts/lib/process-scan.mjs +1 -1
  791. package/extensions/dm-lens/scripts/lib/skills-predicate.mjs +53 -0
  792. package/extensions/dm-lens/scripts/lib/web-tree-sitter-dir.mjs +45 -0
  793. package/extensions/dm-lens/skills/pi-lens-ast-grep/SKILL.md +23 -6
  794. package/extensions/dm-lens/skills/pi-lens-lsp-navigation/SKILL.md +26 -9
  795. package/extensions/dm-lens/tools/activate-tools.js +10 -7
  796. package/extensions/dm-lens/tools/ast-grep-outline.js +2 -6
  797. package/extensions/dm-lens/tools/ast-grep-replace.js +5 -16
  798. package/extensions/dm-lens/tools/ast-grep-search.js +83 -38
  799. package/extensions/dm-lens/tools/effective-config.js +5 -4
  800. package/extensions/dm-lens/tools/lens-diagnostic-mark.js +5 -3
  801. package/extensions/dm-lens/tools/lens-diagnostics.js +478 -106
  802. package/extensions/dm-lens/tools/lsp-diagnostics.js +317 -172
  803. package/extensions/dm-lens/tools/lsp-navigation.js +26 -56
  804. package/extensions/dm-lens/tools/lsp-structured-output.js +3 -3
  805. package/extensions/dm-lens/tools/module-report.js +5 -5
  806. package/extensions/dm-lens/tools/project-report.js +9 -15
  807. package/extensions/dm-lens/tools/render-compact.js +220 -1
  808. package/extensions/dm-lens/tools/symbol-search.js +3 -5
  809. package/extensions/dm-mcp-adapter/OAUTH.md +368 -2
  810. package/extensions/dm-mcp-adapter/THIRD_PARTY_NOTICES.md +1 -1
  811. package/extensions/dm-mcp-adapter/agent-plugin-loader.js +73 -30
  812. package/extensions/dm-mcp-adapter/agent-plugin-provenance.js +26 -0
  813. package/extensions/dm-mcp-adapter/bearer-command-resolver.js +182 -0
  814. package/extensions/dm-mcp-adapter/claude-plugin-loader.js +350 -0
  815. package/extensions/dm-mcp-adapter/cli.js +82 -5
  816. package/extensions/dm-mcp-adapter/commands.js +89 -15
  817. package/extensions/dm-mcp-adapter/config.js +283 -33
  818. package/extensions/dm-mcp-adapter/consent-manager.js +32 -8
  819. package/extensions/dm-mcp-adapter/direct-tool-surface.js +223 -0
  820. package/extensions/dm-mcp-adapter/direct-tools.js +21 -216
  821. package/extensions/dm-mcp-adapter/dist/abort.js +35 -0
  822. package/extensions/dm-mcp-adapter/dist/agent-plugin-loader.js +73 -30
  823. package/extensions/dm-mcp-adapter/dist/agent-plugin-provenance.js +26 -0
  824. package/extensions/dm-mcp-adapter/dist/bearer-command-resolver.js +182 -0
  825. package/extensions/dm-mcp-adapter/dist/claude-plugin-loader.js +350 -0
  826. package/extensions/dm-mcp-adapter/dist/config.js +283 -33
  827. package/extensions/dm-mcp-adapter/dist/consent-manager.js +84 -0
  828. package/extensions/dm-mcp-adapter/dist/elicitation-handler.js +308 -0
  829. package/extensions/dm-mcp-adapter/dist/errors.js +225 -0
  830. package/extensions/dm-mcp-adapter/dist/http-ca.js +71 -0
  831. package/extensions/dm-mcp-adapter/dist/jev-client.js +359 -0
  832. package/extensions/dm-mcp-adapter/dist/jev-contracts.js +1 -0
  833. package/extensions/dm-mcp-adapter/dist/jev-key-store.js +176 -0
  834. package/extensions/dm-mcp-adapter/dist/json-schema-validator.js +70 -0
  835. package/extensions/dm-mcp-adapter/dist/lifecycle.js +387 -0
  836. package/extensions/dm-mcp-adapter/dist/logger.js +115 -0
  837. package/extensions/dm-mcp-adapter/dist/mcp-auth-fetch.js +86 -0
  838. package/extensions/dm-mcp-adapter/dist/mcp-auth-flow.js +949 -0
  839. package/extensions/dm-mcp-adapter/dist/mcp-auth.js +997 -0
  840. package/extensions/dm-mcp-adapter/dist/mcp-bearer-store.js +7 -136
  841. package/extensions/dm-mcp-adapter/dist/mcp-callback-server.js +381 -0
  842. package/extensions/dm-mcp-adapter/dist/mcp-oauth-provider.js +524 -0
  843. package/extensions/dm-mcp-adapter/dist/mcp-probe.js +151 -0
  844. package/extensions/dm-mcp-adapter/dist/mcp-tasks.js +300 -0
  845. package/extensions/dm-mcp-adapter/dist/mcp-trace.js +215 -0
  846. package/extensions/dm-mcp-adapter/dist/metadata-cache.js +10 -28
  847. package/extensions/dm-mcp-adapter/dist/npx-resolver.js +465 -0
  848. package/extensions/dm-mcp-adapter/dist/package-mcp-loader.js +5 -16
  849. package/extensions/dm-mcp-adapter/dist/request-headers-command.js +294 -0
  850. package/extensions/dm-mcp-adapter/dist/runtime-owner.js +94 -0
  851. package/extensions/dm-mcp-adapter/dist/sampling-handler.js +213 -0
  852. package/extensions/dm-mcp-adapter/dist/secure-keyring.js +191 -0
  853. package/extensions/dm-mcp-adapter/dist/server-manager.js +1514 -0
  854. package/extensions/dm-mcp-adapter/dist/session-approvals.js +127 -0
  855. package/extensions/dm-mcp-adapter/dist/session-recovery.js +82 -0
  856. package/extensions/dm-mcp-adapter/dist/state.js +1 -0
  857. package/extensions/dm-mcp-adapter/dist/types.js +39 -0
  858. package/extensions/dm-mcp-adapter/dist/ui-resource-handler.js +204 -0
  859. package/extensions/dm-mcp-adapter/dist/unix-socket-transport.js +83 -0
  860. package/extensions/dm-mcp-adapter/dist/utils.js +84 -9
  861. package/extensions/dm-mcp-adapter/elicitation-handler.js +27 -22
  862. package/extensions/dm-mcp-adapter/host-html-template.js +17 -18
  863. package/extensions/dm-mcp-adapter/http-ca.js +71 -0
  864. package/extensions/dm-mcp-adapter/index.js +904 -167
  865. package/extensions/dm-mcp-adapter/init.js +53 -42
  866. package/extensions/dm-mcp-adapter/jev-client.js +359 -0
  867. package/extensions/dm-mcp-adapter/jev-contracts.js +0 -0
  868. package/extensions/dm-mcp-adapter/jev-key-store.js +176 -0
  869. package/extensions/dm-mcp-adapter/json-schema-validator.js +19 -2
  870. package/extensions/dm-mcp-adapter/lazy-loader.js +7 -0
  871. package/extensions/dm-mcp-adapter/lifecycle.js +8 -3
  872. package/extensions/dm-mcp-adapter/mcp-auth-fetch.js +86 -0
  873. package/extensions/dm-mcp-adapter/mcp-auth-flow.js +228 -75
  874. package/extensions/dm-mcp-adapter/mcp-auth.js +312 -47
  875. package/extensions/dm-mcp-adapter/mcp-bearer-store.js +7 -136
  876. package/extensions/dm-mcp-adapter/mcp-code.js +151 -20
  877. package/extensions/dm-mcp-adapter/mcp-install.js +40 -0
  878. package/extensions/dm-mcp-adapter/mcp-oauth-provider.js +52 -8
  879. package/extensions/dm-mcp-adapter/mcp-output-guard.js +42 -43
  880. package/extensions/dm-mcp-adapter/mcp-panel-theme.js +79 -0
  881. package/extensions/dm-mcp-adapter/mcp-panel.js +294 -286
  882. package/extensions/dm-mcp-adapter/mcp-references.js +13 -18
  883. package/extensions/dm-mcp-adapter/mcp-script-worker.mjs +5 -1
  884. package/extensions/dm-mcp-adapter/mcp-setup-panel.js +317 -282
  885. package/extensions/dm-mcp-adapter/mcp-status.js +2 -0
  886. package/extensions/dm-mcp-adapter/mcp-tasks.js +309 -0
  887. package/extensions/dm-mcp-adapter/metadata-cache.js +11 -28
  888. package/extensions/dm-mcp-adapter/namespace-tools.js +43 -7
  889. package/extensions/dm-mcp-adapter/oauth.js +1 -1
  890. package/extensions/dm-mcp-adapter/package-mcp-loader.js +5 -16
  891. package/extensions/dm-mcp-adapter/package.json +4 -1
  892. package/extensions/dm-mcp-adapter/prompts.js +31 -4
  893. package/extensions/dm-mcp-adapter/proxy-modes.js +394 -199
  894. package/extensions/dm-mcp-adapter/request-headers-command.js +3 -2
  895. package/extensions/dm-mcp-adapter/runtime-owner.js +16 -1
  896. package/extensions/dm-mcp-adapter/sampling-handler.js +16 -25
  897. package/extensions/dm-mcp-adapter/sandbox-proxy-template.js +14 -90
  898. package/extensions/dm-mcp-adapter/search-ranking.js +31 -6
  899. package/extensions/dm-mcp-adapter/secure-keyring.js +191 -0
  900. package/extensions/dm-mcp-adapter/semantic-search.js +160 -0
  901. package/extensions/dm-mcp-adapter/server-manager.js +406 -117
  902. package/extensions/dm-mcp-adapter/session-approvals.js +127 -0
  903. package/extensions/dm-mcp-adapter/skills/mcp-scripting/SKILL.md +11 -1
  904. package/extensions/dm-mcp-adapter/test-runner.mjs +3 -4
  905. package/extensions/dm-mcp-adapter/tool-approval.js +32 -22
  906. package/extensions/dm-mcp-adapter/tool-metadata.js +18 -11
  907. package/extensions/dm-mcp-adapter/tool-registrar.js +7 -4
  908. package/extensions/dm-mcp-adapter/tool-result-renderer.js +4 -2
  909. package/extensions/dm-mcp-adapter/types.js +39 -0
  910. package/extensions/dm-mcp-adapter/ui-server.js +51 -36
  911. package/extensions/dm-mcp-adapter/ui-session.js +57 -25
  912. package/extensions/dm-mcp-adapter/utils.js +84 -9
  913. package/extensions/dm-ponytail/hooks/cursor-hooks.json +17 -0
  914. package/extensions/dm-ponytail/hooks/ponytail-activate.js +14 -2
  915. package/extensions/dm-ponytail/hooks/ponytail-mode-tracker.js +21 -2
  916. package/extensions/dm-ponytail/hooks/ponytail-runtime.js +23 -0
  917. package/extensions/dm-ponytail/package.json +1 -1
  918. package/extensions/dm-subagents/agents/claude-code-writer.md +1 -0
  919. package/extensions/dm-subagents/agents/codex-exec-writer.md +1 -0
  920. package/extensions/dm-subagents/agents/cursor-agent-writer.md +1 -0
  921. package/extensions/dm-subagents/agents/evidence-auditor.md +34 -0
  922. package/extensions/dm-subagents/agents/researcher.md +23 -13
  923. package/extensions/dm-subagents/agents/reviewer.md +6 -4
  924. package/extensions/dm-subagents/agents/scout.md +1 -1
  925. package/extensions/dm-subagents/agents/worker.md +3 -2
  926. package/extensions/dm-subagents/index.js +3 -2
  927. package/extensions/dm-subagents/inspector-runner.mjs +2 -2
  928. package/extensions/dm-subagents/install.mjs +1 -2
  929. package/extensions/dm-subagents/package.json +35 -1
  930. package/extensions/dm-subagents/prompts/council.md +6 -3
  931. package/extensions/dm-subagents/prompts/parallel-review.md +1 -1
  932. package/extensions/dm-subagents/runner-peer-loader.mjs +18 -0
  933. package/extensions/dm-subagents/runner-peer-preload.mjs +29 -0
  934. package/extensions/dm-subagents/skills/dm-subagents/SKILL.md +35 -22
  935. package/extensions/dm-subagents/skills/dm-subagents/references/constraints-and-recipes.md +9 -5
  936. package/extensions/dm-subagents/skills/dm-subagents/references/execution-controls.md +40 -19
  937. package/extensions/dm-subagents/skills/dm-subagents/references/management-authoring-rpc.md +6 -6
  938. package/extensions/dm-subagents/skills/dm-subagents/references/multi-lane-orchestration.md +11 -1
  939. package/extensions/dm-subagents/skills/dm-subagents/references/prompting-and-roles.md +35 -30
  940. package/extensions/dm-subagents/skills/dm-subagents/references/review-and-validation.md +3 -3
  941. package/extensions/dm-subagents/src/agents/advertised-agent-prompt.js +70 -0
  942. package/extensions/dm-subagents/src/agents/agent-management.js +276 -172
  943. package/extensions/dm-subagents/src/agents/agent-memory.js +92 -3
  944. package/extensions/dm-subagents/src/agents/agent-serializer.js +17 -8
  945. package/extensions/dm-subagents/src/agents/agents.js +389 -207
  946. package/extensions/dm-subagents/src/agents/builtin-names.js +1 -0
  947. package/extensions/dm-subagents/src/agents/chain-serializer.js +7 -0
  948. package/extensions/dm-subagents/src/agents/global-npm-root.js +47 -0
  949. package/extensions/dm-subagents/src/agents/proactive-skills.js +1 -1
  950. package/extensions/dm-subagents/src/agents/runtime-agent-registry.js +17 -13
  951. package/extensions/dm-subagents/src/agents/skills.js +36 -10
  952. package/extensions/dm-subagents/src/api/capability-ceiling.js +0 -1
  953. package/extensions/dm-subagents/src/api/child-tool-plan.js +3 -0
  954. package/extensions/dm-subagents/src/api/preflight.js +75 -64
  955. package/extensions/dm-subagents/src/api/required-child-extensions.js +3 -0
  956. package/extensions/dm-subagents/src/api/workflow-resources.js +1 -0
  957. package/extensions/dm-subagents/src/extension/config.js +27 -18
  958. package/extensions/dm-subagents/src/extension/doctor.js +10 -13
  959. package/extensions/dm-subagents/src/extension/fanout-child.js +91 -14
  960. package/extensions/dm-subagents/src/extension/herdr-dm-bridge.js +258 -0
  961. package/extensions/dm-subagents/src/extension/index.js +202 -66
  962. package/extensions/dm-subagents/src/extension/public-execution.js +55 -4
  963. package/extensions/dm-subagents/src/extension/rpc.js +18 -27
  964. package/extensions/dm-subagents/src/extension/schemas.js +99 -84
  965. package/extensions/dm-subagents/src/extension/subagent-guide.js +14 -3
  966. package/extensions/dm-subagents/src/extension/tool-activation.js +157 -0
  967. package/extensions/dm-subagents/src/extension/tool-description.js +30 -78
  968. package/extensions/dm-subagents/src/inspectors/actions.js +145 -0
  969. package/extensions/dm-subagents/src/inspectors/ghostty/actions.js +60 -0
  970. package/extensions/dm-subagents/src/inspectors/ghostty/plugin.js +17 -0
  971. package/extensions/dm-subagents/src/inspectors/herdr/actions.js +94 -179
  972. package/extensions/dm-subagents/src/inspectors/herdr/plugin.js +13 -0
  973. package/extensions/dm-subagents/src/inspectors/herdr/project-panes.js +1 -1
  974. package/extensions/dm-subagents/src/inspectors/{herdr/inspector-runner.js → inspector-runner.js} +31 -25
  975. package/extensions/dm-subagents/src/inspectors/plugins.js +5 -0
  976. package/extensions/dm-subagents/src/inspectors/{herdr/session-roots-codec.js → session-roots-codec.js} +1 -6
  977. package/extensions/dm-subagents/src/inspectors/types.js +1 -0
  978. package/extensions/dm-subagents/src/integrations/dm-web-session-liveness.js +50 -0
  979. package/extensions/dm-subagents/src/intercom/intercom-bridge.js +39 -5
  980. package/extensions/dm-subagents/src/intercom/native-supervisor-channel.js +256 -151
  981. package/extensions/dm-subagents/src/intercom/result-intercom.js +6 -0
  982. package/extensions/dm-subagents/src/intercom/supervisor-ui.js +199 -0
  983. package/extensions/dm-subagents/src/missions/workflow-state.js +30 -17
  984. package/extensions/dm-subagents/src/policy/authority.js +6 -2
  985. package/extensions/dm-subagents/src/profiles/profiles.js +10 -5
  986. package/extensions/dm-subagents/src/runs/background/active-async-capacity.js +28 -35
  987. package/extensions/dm-subagents/src/runs/background/active-run-index.js +17 -0
  988. package/extensions/dm-subagents/src/runs/background/async-execution.js +580 -389
  989. package/extensions/dm-subagents/src/runs/background/async-job-tracker.js +71 -47
  990. package/extensions/dm-subagents/src/runs/background/async-resume.js +61 -26
  991. package/extensions/dm-subagents/src/runs/background/async-retention.js +8 -0
  992. package/extensions/dm-subagents/src/runs/background/async-status-snapshot.js +3 -4
  993. package/extensions/dm-subagents/src/runs/background/async-status.js +90 -13
  994. package/extensions/dm-subagents/src/runs/background/auto-drain.js +57 -33
  995. package/extensions/dm-subagents/src/runs/background/binary-bootstrap.js +54 -0
  996. package/extensions/dm-subagents/src/runs/background/chain-append.js +1 -1
  997. package/extensions/dm-subagents/src/runs/background/chain-root-attachment.js +11 -27
  998. package/extensions/dm-subagents/src/runs/background/control-channel.js +105 -256
  999. package/extensions/dm-subagents/src/runs/background/fleet-view.js +67 -10
  1000. package/extensions/dm-subagents/src/runs/background/notify.js +252 -17
  1001. package/extensions/dm-subagents/src/runs/background/owned-process-tree.js +33 -2
  1002. package/extensions/dm-subagents/src/runs/background/process-terminal-candidate.js +88 -0
  1003. package/extensions/dm-subagents/src/runs/background/process-terminal.js +29 -87
  1004. package/extensions/dm-subagents/src/runs/background/result-files.js +8 -4
  1005. package/extensions/dm-subagents/src/runs/background/result-watcher.js +15 -3
  1006. package/extensions/dm-subagents/src/runs/background/retained-children.js +3 -2
  1007. package/extensions/dm-subagents/src/runs/background/retained-nested-route-tracker.js +86 -0
  1008. package/extensions/dm-subagents/src/runs/background/run-child-session.js +574 -0
  1009. package/extensions/dm-subagents/src/runs/background/run-id-resolver.js +9 -5
  1010. package/extensions/dm-subagents/src/runs/background/run-status.js +114 -11
  1011. package/extensions/dm-subagents/src/runs/background/runner-aliases.js +129 -0
  1012. package/extensions/dm-subagents/src/runs/background/runner-child-launch.js +62 -0
  1013. package/extensions/dm-subagents/src/runs/background/runner-child-sessions.js +16 -0
  1014. package/extensions/dm-subagents/src/runs/background/runner-http-dispatcher.js +84 -0
  1015. package/extensions/dm-subagents/src/runs/background/runner-startup-failure.js +43 -0
  1016. package/extensions/dm-subagents/src/runs/background/scheduled-runs.js +119 -20
  1017. package/extensions/dm-subagents/src/runs/background/stale-run-reconciler.js +33 -10
  1018. package/extensions/dm-subagents/src/runs/background/steering.js +24 -3
  1019. package/extensions/dm-subagents/src/runs/background/subagent-runner-bootstrap.js +238 -0
  1020. package/extensions/dm-subagents/src/runs/background/subagent-runner.js +1008 -1344
  1021. package/extensions/dm-subagents/src/runs/background/subagent-wait.js +156 -26
  1022. package/extensions/dm-subagents/src/runs/background/wait-completions.js +91 -23
  1023. package/extensions/dm-subagents/src/runs/background/wait-subscriptions.js +10 -3
  1024. package/extensions/dm-subagents/src/runs/background/wait-tool.js +8 -12
  1025. package/extensions/dm-subagents/src/runs/background/workflow-terminal-proof.js +60 -0
  1026. package/extensions/dm-subagents/src/runs/foreground/async-steering-action.js +29 -26
  1027. package/extensions/dm-subagents/src/runs/foreground/async-stop-action.js +94 -2
  1028. package/extensions/dm-subagents/src/runs/foreground/execution.js +446 -648
  1029. package/extensions/dm-subagents/src/runs/foreground/foreground-control.js +4 -0
  1030. package/extensions/dm-subagents/src/runs/foreground/foreground-history.js +5 -2
  1031. package/extensions/dm-subagents/src/runs/foreground/prompt-audit.js +8 -4
  1032. package/extensions/dm-subagents/src/runs/foreground/subagent-executor.js +1337 -445
  1033. package/extensions/dm-subagents/src/runs/foreground/workflow-detach-reconcile.js +10 -5
  1034. package/extensions/dm-subagents/src/runs/foreground/workflow-foreground-steering.js +65 -90
  1035. package/extensions/dm-subagents/src/runs/shared/acceptance.js +265 -68
  1036. package/extensions/dm-subagents/src/runs/shared/agent-contract.js +1 -1
  1037. package/extensions/dm-subagents/src/runs/shared/async-status-projection.js +133 -76
  1038. package/extensions/dm-subagents/src/runs/shared/capability-ceiling.js +4 -2
  1039. package/extensions/dm-subagents/src/runs/shared/child-hooks.js +166 -0
  1040. package/extensions/dm-subagents/src/runs/shared/child-identity.js +10 -2
  1041. package/extensions/dm-subagents/src/runs/shared/child-launch-plan.js +19 -2
  1042. package/extensions/dm-subagents/src/runs/shared/child-launch.js +212 -0
  1043. package/extensions/dm-subagents/src/runs/shared/child-lifecycle.js +22 -0
  1044. package/extensions/dm-subagents/src/runs/shared/child-runtime-config.js +31 -0
  1045. package/extensions/dm-subagents/src/runs/shared/child-session.js +378 -0
  1046. package/extensions/dm-subagents/src/runs/shared/child-tool-plan.js +299 -0
  1047. package/extensions/dm-subagents/src/runs/shared/claude-code-adapter.js +1 -1
  1048. package/extensions/dm-subagents/src/runs/shared/dm-spawn.js +148 -32
  1049. package/extensions/dm-subagents/src/runs/shared/dynamic-fanout.js +6 -4
  1050. package/extensions/dm-subagents/src/runs/shared/effective-system-prompt.js +19 -0
  1051. package/extensions/dm-subagents/src/runs/shared/external-cli-contract.js +6 -1
  1052. package/extensions/dm-subagents/src/runs/shared/external-cli-preflight.js +14 -2
  1053. package/extensions/dm-subagents/src/runs/shared/external-cli-runner.js +6 -7
  1054. package/extensions/dm-subagents/src/runs/shared/external-job-bridge.js +60 -0
  1055. package/extensions/dm-subagents/src/runs/shared/git-environment.js +25 -0
  1056. package/extensions/dm-subagents/src/runs/shared/herdr-connection.js +341 -0
  1057. package/extensions/dm-subagents/src/runs/shared/herdr-dm-protocol.js +60 -0
  1058. package/extensions/dm-subagents/src/runs/shared/herdr-external-adapters.js +555 -0
  1059. package/extensions/dm-subagents/src/runs/shared/herdr-machine.js +239 -0
  1060. package/extensions/dm-subagents/src/runs/shared/herdr-placed-run.js +987 -0
  1061. package/extensions/dm-subagents/src/runs/shared/host-step-status.js +2 -0
  1062. package/extensions/dm-subagents/src/runs/shared/lane-metadata.js +23 -3
  1063. package/extensions/dm-subagents/src/runs/shared/mcp-direct-tool-allowlist.js +4 -3
  1064. package/extensions/dm-subagents/src/runs/shared/mcp-direct-tool-grant.js +15 -5
  1065. package/extensions/dm-subagents/src/runs/shared/model-resolution-diagnostic.js +43 -0
  1066. package/extensions/dm-subagents/src/runs/shared/{model-fallback.js → model-resolution.js} +44 -128
  1067. package/extensions/dm-subagents/src/runs/shared/nested-events.js +39 -49
  1068. package/extensions/dm-subagents/src/runs/shared/nested-path.js +0 -13
  1069. package/extensions/dm-subagents/src/runs/shared/orca-progress-tabs.js +22 -12
  1070. package/extensions/dm-subagents/src/runs/shared/parallel-handoff.js +78 -2
  1071. package/extensions/dm-subagents/src/runs/shared/permissions.js +1 -16
  1072. package/extensions/dm-subagents/src/runs/shared/process-signal.js +3 -0
  1073. package/extensions/dm-subagents/src/runs/shared/readonly-drain-observation.js +51 -0
  1074. package/extensions/dm-subagents/src/runs/shared/run-fanout-budget.js +0 -13
  1075. package/extensions/dm-subagents/src/runs/shared/runtime-acknowledged-extensions.js +0 -26
  1076. package/extensions/dm-subagents/src/runs/shared/single-output.js +20 -2
  1077. package/extensions/dm-subagents/src/runs/shared/structured-output.js +263 -10
  1078. package/extensions/dm-subagents/src/runs/shared/subagent-control.js +6 -14
  1079. package/extensions/dm-subagents/src/runs/shared/subagent-prompt-runtime.js +117 -370
  1080. package/extensions/dm-subagents/src/runs/shared/tool-availability.js +12 -50
  1081. package/extensions/dm-subagents/src/runs/shared/tool-budget.js +10 -13
  1082. package/extensions/dm-subagents/src/runs/shared/tool-timeout.js +1 -1
  1083. package/extensions/dm-subagents/src/runs/shared/usage-reconciliation.js +69 -0
  1084. package/extensions/dm-subagents/src/runs/shared/workflow-async-child-guidance.js +11 -0
  1085. package/extensions/dm-subagents/src/runs/shared/worktree-cleanup-plan.js +30 -10
  1086. package/extensions/dm-subagents/src/runs/shared/worktree-setup-command.js +195 -0
  1087. package/extensions/dm-subagents/src/runs/shared/worktree.js +814 -141
  1088. package/extensions/dm-subagents/src/shared/atomic-json.js +2 -1
  1089. package/extensions/dm-subagents/src/shared/child-cache-retention.js +19 -0
  1090. package/extensions/dm-subagents/src/shared/fork-context.js +40 -77
  1091. package/extensions/dm-subagents/src/shared/fork-session-cwd.js +24 -0
  1092. package/extensions/dm-subagents/src/shared/jsonl-writer.js +8 -0
  1093. package/extensions/dm-subagents/src/shared/launch-contract.js +37 -6
  1094. package/extensions/dm-subagents/src/shared/model-response-aliases.js +15 -0
  1095. package/extensions/dm-subagents/src/shared/opencode-session-headers.js +15 -0
  1096. package/extensions/dm-subagents/src/shared/pruned-fork.js +83 -76
  1097. package/extensions/dm-subagents/src/shared/required-child-extensions.js +72 -0
  1098. package/extensions/dm-subagents/src/shared/shortcuts.js +0 -2
  1099. package/extensions/dm-subagents/src/shared/thinking-ceiling.js +0 -6
  1100. package/extensions/dm-subagents/src/shared/types.js +16 -12
  1101. package/extensions/dm-subagents/src/shared/utils.js +22 -7
  1102. package/extensions/dm-subagents/src/shared/watch-strategy.js +2 -0
  1103. package/extensions/dm-subagents/src/shared/workflow-child-permit.js +70 -0
  1104. package/extensions/dm-subagents/src/slash/delegation-adapters.js +15 -1
  1105. package/extensions/dm-subagents/src/slash/delegation-request.js +13 -0
  1106. package/extensions/dm-subagents/src/slash/prompt-template-bridge.js +28 -1
  1107. package/extensions/dm-subagents/src/slash/prompt-workflows.js +15 -2
  1108. package/extensions/dm-subagents/src/slash/slash-commands.js +12 -269
  1109. package/extensions/dm-subagents/src/slash/subagent-cost.js +255 -0
  1110. package/extensions/dm-subagents/src/slash/subagents-admin.js +49 -25
  1111. package/extensions/dm-subagents/src/tui/fleet-status.js +224 -23
  1112. package/extensions/dm-subagents/src/tui/fleet.js +38 -25
  1113. package/extensions/dm-subagents/src/tui/render.js +636 -63
  1114. package/extensions/dm-subagents/src/watchdog/child-status.js +42 -23
  1115. package/extensions/dm-subagents/src/watchdog/diff-tool.js +86 -0
  1116. package/extensions/dm-subagents/src/watchdog/emission-guard.js +4 -3
  1117. package/extensions/dm-subagents/src/watchdog/guidance.js +19 -0
  1118. package/extensions/dm-subagents/src/watchdog/lsp-diagnostics.js +1 -1
  1119. package/extensions/dm-subagents/src/watchdog/model-selection.js +18 -1
  1120. package/extensions/dm-subagents/src/watchdog/permission-arbiter.js +16 -10
  1121. package/extensions/dm-subagents/src/watchdog/register-child.js +39 -26
  1122. package/extensions/dm-subagents/src/watchdog/register-main.js +51 -43
  1123. package/extensions/dm-subagents/src/watchdog/render.js +5 -7
  1124. package/extensions/dm-subagents/src/watchdog/review.js +142 -67
  1125. package/extensions/dm-subagents/src/watchdog/rules.js +55 -0
  1126. package/extensions/dm-subagents/src/watchdog/runtime.js +167 -109
  1127. package/extensions/dm-subagents/src/watchdog/scope.js +1 -9
  1128. package/extensions/dm-subagents/src/watchdog/settings.js +55 -99
  1129. package/extensions/dm-subagents/src/watchdog/tool-actions.js +11 -12
  1130. package/extensions/dm-subagents/src/watchdog/turn-delta.js +30 -5
  1131. package/extensions/dm-subagents/src/watchdog/types.js +2 -4
  1132. package/extensions/dm-subagents/src/watchdog/warning-format.js +2 -3
  1133. package/extensions/dm-subagents/src/workflows/chat-progress.js +4 -4
  1134. package/extensions/dm-subagents/src/workflows/scripted-workflow.js +482 -36
  1135. package/extensions/dm-subagents/src/workflows/workflow-checklist.js +303 -0
  1136. package/extensions/dm-subagents/src/workflows/workflow-child-summary.js +57 -5
  1137. package/extensions/dm-subagents/src/workflows/workflow-preflight.js +27 -1
  1138. package/extensions/dm-subagents/src/workflows/workflow-receipt.js +51 -3
  1139. package/extensions/dm-subagents/src/workflows/workflow-resources.js +226 -0
  1140. package/extensions/dm-subagents/src/workflows/workflow-settlement.js +5 -0
  1141. package/extensions/dm-web-access/abortable.js +19 -0
  1142. package/extensions/dm-web-access/anysearch.js +4 -13
  1143. package/extensions/dm-web-access/baizhi.js +123 -0
  1144. package/extensions/dm-web-access/bocha.js +3 -24
  1145. package/extensions/dm-web-access/brave.js +3 -23
  1146. package/extensions/dm-web-access/brightdata.js +5 -30
  1147. package/extensions/dm-web-access/content-find.js +181 -47
  1148. package/extensions/dm-web-access/crawl4ai.js +166 -0
  1149. package/extensions/dm-web-access/credential-source.js +1 -0
  1150. package/extensions/dm-web-access/curator-page.js +27 -2
  1151. package/extensions/dm-web-access/curator-run.js +36 -0
  1152. package/extensions/dm-web-access/curator-server.js +11 -2
  1153. package/extensions/dm-web-access/domain-filter-normalization.js +17 -0
  1154. package/extensions/dm-web-access/duckduckgo.js +4 -24
  1155. package/extensions/dm-web-access/extract.js +54 -12
  1156. package/extensions/dm-web-access/fetch-params.js +1 -1
  1157. package/extensions/dm-web-access/firecrawl.js +7 -45
  1158. package/extensions/dm-web-access/gemini-search.js +101 -46
  1159. package/extensions/dm-web-access/github-extract.js +2 -11
  1160. package/extensions/dm-web-access/index.js +382 -247
  1161. package/extensions/dm-web-access/jina-search.js +4 -13
  1162. package/extensions/dm-web-access/kagi.js +4 -13
  1163. package/extensions/dm-web-access/kimi-search.js +5 -30
  1164. package/extensions/dm-web-access/mistral-search.js +251 -0
  1165. package/extensions/dm-web-access/ollama.js +2 -7
  1166. package/extensions/dm-web-access/openai-search.js +204 -46
  1167. package/extensions/dm-web-access/opencode-session-headers.js +15 -0
  1168. package/extensions/dm-web-access/package.json +1 -1
  1169. package/extensions/dm-web-access/page-query.js +14 -4
  1170. package/extensions/dm-web-access/parallel.js +1 -17
  1171. package/extensions/dm-web-access/pdf-extract.js +1 -0
  1172. package/extensions/dm-web-access/perplexity.js +10 -1
  1173. package/extensions/dm-web-access/querit.js +5 -34
  1174. package/extensions/dm-web-access/query-rewrite.js +6 -2
  1175. package/extensions/dm-web-access/search-answer-formatting.js +6 -0
  1176. package/extensions/dm-web-access/search-result-count-normalization.js +5 -0
  1177. package/extensions/dm-web-access/search1api.js +5 -34
  1178. package/extensions/dm-web-access/searchinfinity.js +5 -34
  1179. package/extensions/dm-web-access/searxng.js +3 -23
  1180. package/extensions/dm-web-access/serpapi.js +183 -0
  1181. package/extensions/dm-web-access/serpbase.js +3 -24
  1182. package/extensions/dm-web-access/serpdive.js +3 -23
  1183. package/extensions/dm-web-access/serper.js +5 -30
  1184. package/extensions/dm-web-access/serply.js +184 -0
  1185. package/extensions/dm-web-access/source-check.js +10 -46
  1186. package/extensions/dm-web-access/ssrf-protection.js +3 -1
  1187. package/extensions/dm-web-access/storage.js +9 -0
  1188. package/extensions/dm-web-access/summary-review.js +36 -25
  1189. package/extensions/dm-web-access/tavily.js +3 -23
  1190. package/extensions/dm-web-access/tinyfish.js +5 -34
  1191. package/extensions/dm-web-access/tool-activation.js +112 -0
  1192. package/extensions/dm-web-access/utils.js +27 -10
  1193. package/extensions/dm-web-access/valyu.js +5 -30
  1194. package/extensions/dm-web-access/xai-search.js +78 -42
  1195. package/extensions/dm-web-access/xcrawl.js +5 -30
  1196. package/package.json +7 -4
  1197. package/extensions/dm-lens/tools/ast-dump.js +0 -101
  1198. package/extensions/dm-subagents/src/api/dm-args.js +0 -3
  1199. package/extensions/dm-subagents/src/runs/shared/child-protocol.js +0 -447
  1200. package/extensions/dm-subagents/src/runs/shared/completion-evidence.js +0 -40
  1201. package/extensions/dm-subagents/src/runs/shared/completion-guard.js +0 -173
  1202. package/extensions/dm-subagents/src/runs/shared/dm-args.js +0 -581
  1203. package/extensions/dm-subagents/src/runs/shared/llm-intent-arbiter.js +0 -190
  1204. package/extensions/dm-subagents/src/runs/shared/model-exclusions.js +0 -207
  1205. package/extensions/dm-subagents/src/runs/shared/subagent-startup-retry.js +0 -50
  1206. package/extensions/dm-subagents/src/runs/shared/task-intent.js +0 -130
  1207. package/extensions/dm-subagents/src/shared/post-exit-stdio-guard.js +0 -68
  1208. /package/extensions/dm-subagents/src/inspectors/{herdr/shell-command.js → shell-command.js} +0 -0
@@ -0,0 +1,1317 @@
1
+ import * as nodeCrypto from "node:crypto";
2
+ import * as nodeFs from "node:fs";
3
+ import * as path from "node:path";
4
+ import { noteAuthoritativeContentAttachment } from "./agent-nudge.js";
5
+ import { captureFileStats, diffFileContent, getOpaqueBaselineStore, recoverOpaqueChangesViaGit } from "./opaque-mutation-scan.js";
6
+ import { normalizeMapKey } from "./path-utils.js";
7
+ import { detectFileKind } from "./file-kinds.js";
8
+ import { extractReadPathsFromCommand, extractDeletedPathsFromCommand, extractGrepSearchReadsFromOutput, extractWrittenPathsFromCommand, tokenizeShellCommand } from "./bash-file-access.js";
9
+ import { registerSearchReads } from "./search-read-registration.js";
10
+ import { createFileTime } from "./file-time.js";
11
+ import { publishFormatQueued } from "./format-events-publish.js";
12
+ import { invalidateProjectIgnoreMatcherForPath, isPathIgnoredByProject } from "./file-utils.js";
13
+ import { invalidateFormatterCacheForPath } from "./formatters.js";
14
+ import { getFormatService } from "./format-service.js";
15
+ import { isExternalOrVendorFile, normalizeEphemeralMapKey, pathsEqual } from "./path-utils.js";
16
+ import { PathKeyedMap } from "./path-keyed-map.js";
17
+ import { resolveLanguageRootForFile } from "./language-profile.js";
18
+ import { logLatency } from "./latency-logger.js";
19
+ import { classifyMutatingTool, DM_LENS_SYNTHETIC_MUTATION_FIELD } from "./mutating-tool.js";
20
+ import { hasPendingObservation, noteMutationHandled, settleObservedMutation } from "./observed-mutation.js";
21
+ import { replayThroughMutationBridge, storedLineHashesFor } from "./observed-mutation-sources.js";
22
+ import { getAmbientAbortSignal } from "./safe-spawn.js";
23
+ import { resolveToolCallCorrelationId } from "./tool-event.js";
24
+ import { boundedIndexesForCount, createReadGuardEditBatchSummary, getReadGuardCorrelationId, logReadGuardEvent } from "./read-guard-logger.js";
25
+ import { countFileLines } from "./read-guard-tool-lines.js";
26
+ import { notifyExternalFileChange, resyncGitChangedFiles } from "./lsp/index.js";
27
+ import { runPipeline } from "./pipeline.js";
28
+ import { renderPostAutofixNotice } from "./post-autofix-notice.js";
29
+ import { syncGitGuardRecord } from "./git-guard.js";
30
+ import { scheduleWordIndexPersist } from "./word-index.js";
31
+ import { RUNTIME_CONFIG } from "./runtime-config.js";
32
+ import { getActiveSessionId } from "./session-lifecycle.js";
33
+ import { requestBootstrapClients } from "./bootstrap.js";
34
+ import { bounded } from "./deadline-utils.js";
35
+ import { HOOK_WALL_BUDGET_MS } from "./hook-budgets.js";
36
+ import { incrementDegradationCount, recordDegradationOnce } from "./degradation-ledger.js";
37
+ const AUTHORITATIVE_CONTENT_MAX_BYTES = RUNTIME_CONFIG.pipeline.lspMaxFileBytes;
38
+ const OBSERVED_DISPATCH_MAX_PATHS = 32;
39
+ const GIT_INTEGRATION_SUBCOMMANDS = new Set([
40
+ "merge",
41
+ "rebase",
42
+ "cherry-pick",
43
+ "pull",
44
+ "revert",
45
+ "am"
46
+ ]);
47
+ const GIT_GLOBAL_OPTIONS_WITH_VALUE = new Set([
48
+ "-C",
49
+ "-c",
50
+ "--config-env",
51
+ "--git-dir",
52
+ "--namespace",
53
+ "--work-tree"
54
+ ]);
55
+ export function isFailedGitIntegrationCommand(command, isError) {
56
+ if (isError !== true)
57
+ return false;
58
+ return tokenizeShellCommand(command).some(({ tokens, unsupported }) => {
59
+ if (unsupported)
60
+ return false;
61
+ const executable = path.win32.basename(tokens[0] ?? "").toLowerCase().replace(/\.(?:cmd|exe)$/, "");
62
+ if (executable !== "git")
63
+ return false;
64
+ for (let index = 1;index < tokens.length; index += 1) {
65
+ const token = tokens[index] ?? "";
66
+ if (GIT_GLOBAL_OPTIONS_WITH_VALUE.has(token)) {
67
+ index += 1;
68
+ continue;
69
+ }
70
+ if (token.startsWith("-"))
71
+ continue;
72
+ return GIT_INTEGRATION_SUBCOMMANDS.has(token);
73
+ }
74
+ return false;
75
+ });
76
+ }
77
+ function ensureToolResultClients(deps) {
78
+ if (deps.biomeClient && deps.ruffClient && deps.metricsClient)
79
+ return true;
80
+ const request = {
81
+ reason: "tool-result-analysis",
82
+ hook: "tool_result_edit",
83
+ timeoutMs: HOOK_WALL_BUDGET_MS.tool_result_edit,
84
+ ...deps.signal === undefined ? {} : { signal: deps.signal }
85
+ };
86
+ return bounded(requestBootstrapClients(request), {
87
+ ms: HOOK_WALL_BUDGET_MS.tool_result_edit,
88
+ signal: deps.signal,
89
+ hook: "tool_result_edit",
90
+ label: "tool-result-bootstrap-demand"
91
+ }).then((clients) => {
92
+ if (!clients)
93
+ return false;
94
+ deps.biomeClient = clients.biomeClient;
95
+ deps.ruffClient = clients.ruffClient;
96
+ deps.metricsClient = clients.metricsClient;
97
+ return true;
98
+ });
99
+ }
100
+ function parseDiffRanges(diff) {
101
+ const changedLines = [];
102
+ for (const line of diff.split(`
103
+ `)) {
104
+ const match = line.match(/^[+-]\s*(\d+)\s/);
105
+ if (match) {
106
+ changedLines.push(Number.parseInt(match[1], 10));
107
+ }
108
+ }
109
+ if (changedLines.length === 0)
110
+ return [];
111
+ const sorted = [...new Set(changedLines)].sort((a, b) => a - b);
112
+ const ranges = [];
113
+ let rangeStart = sorted[0];
114
+ let rangeEnd = sorted[0];
115
+ for (const line of sorted.slice(1)) {
116
+ if (line <= rangeEnd + 1) {
117
+ rangeEnd = line;
118
+ } else {
119
+ ranges.push({ start: rangeStart, end: rangeEnd });
120
+ rangeStart = line;
121
+ rangeEnd = line;
122
+ }
123
+ }
124
+ ranges.push({ start: rangeStart, end: rangeEnd });
125
+ return ranges;
126
+ }
127
+ const inFlightPipelines = new PathKeyedMap(normalizeEphemeralMapKey);
128
+ const lastAnalyzedStateByFile = new PathKeyedMap(normalizeEphemeralMapKey);
129
+ export function clearLastAnalyzedStateCache() {
130
+ lastAnalyzedStateByFile.clear();
131
+ }
132
+ function registerInFlightPipeline(filePath, stateHash, pipeline) {
133
+ let filePipelines = inFlightPipelines.get(filePath);
134
+ if (!filePipelines) {
135
+ filePipelines = new Map;
136
+ inFlightPipelines.set(filePath, filePipelines);
137
+ }
138
+ filePipelines.set(stateHash, pipeline);
139
+ return filePipelines;
140
+ }
141
+ function releaseInFlightPipeline(filePath, stateHash, registered) {
142
+ registered.delete(stateHash);
143
+ if (registered.size === 0 && inFlightPipelines.get(filePath) === registered) {
144
+ inFlightPipelines.delete(filePath);
145
+ }
146
+ }
147
+ function claimPipelineDispatch(args) {
148
+ const { filePath, stateHash, turnIndex, participantId, dbg } = args;
149
+ const inFlight = inFlightPipelines.get(filePath)?.get(stateHash);
150
+ if (inFlight) {
151
+ dbg(`tool_result: skipping duplicate concurrent state for ${filePath}`);
152
+ if (inFlight.participantIds.length < 100) {
153
+ inFlight.participantIds.push(participantId);
154
+ }
155
+ inFlight.participantTotal += 1;
156
+ return { proceed: false, joined: inFlight.promise };
157
+ }
158
+ const lastAnalyzed = lastAnalyzedStateByFile.get(filePath);
159
+ if (lastAnalyzed?.turnIndex === turnIndex && lastAnalyzed.stateHash === stateHash) {
160
+ dbg(`tool_result: skipping already-analyzed file state this turn for ${filePath}`);
161
+ return { proceed: false, joined: undefined };
162
+ }
163
+ return { proceed: true };
164
+ }
165
+ const debouncedPipelines = new PathKeyedMap(normalizeEphemeralMapKey);
166
+ const DEFAULT_DEBOUNCE_MS = 0;
167
+ const MAX_DEBOUNCE_MS = 1000;
168
+ function getDebounceMs() {
169
+ const raw = Number(process.env.DM_LENS_TOOL_RESULT_DEBOUNCE_MS);
170
+ if (!Number.isFinite(raw) || raw < 0)
171
+ return DEFAULT_DEBOUNCE_MS;
172
+ return Math.min(raw, MAX_DEBOUNCE_MS);
173
+ }
174
+ export async function flushDebouncedToolResults(filePath) {
175
+ const entries = filePath ? debouncedPipelines.has(filePath) ? [
176
+ [
177
+ filePath,
178
+ debouncedPipelines.get(filePath)
179
+ ]
180
+ ] : [] : [...debouncedPipelines.entries()];
181
+ for (const [key, entry] of entries) {
182
+ clearTimeout(entry.timer);
183
+ debouncedPipelines.delete(key);
184
+ handleToolResult({ ...entry.latestDeps, _bypassDebounce: true }).then(entry.resolve, entry.reject);
185
+ }
186
+ if (entries.length > 0) {
187
+ await Promise.all(entries.map(([, entry]) => entry.promise.catch(() => {
188
+ return;
189
+ })));
190
+ }
191
+ }
192
+ function scheduleDebounced(filePath, debounceMs, deps) {
193
+ const existing = debouncedPipelines.get(filePath);
194
+ if (existing) {
195
+ clearTimeout(existing.timer);
196
+ const incomingId = deps._telemetryParticipantIds?.[0] ?? getReadGuardCorrelationId(deps.event);
197
+ const priorIds = existing.latestDeps._telemetryParticipantIds ?? [];
198
+ existing.latestDeps = {
199
+ ...deps,
200
+ _telemetryParticipantIds: [...priorIds, incomingId].slice(0, 100),
201
+ _telemetryParticipantTotal: (existing.latestDeps._telemetryParticipantTotal ?? priorIds.length) + 1
202
+ };
203
+ existing.coalescedCount += 1;
204
+ existing.timer = setTimeout(() => {
205
+ debouncedPipelines.delete(filePath);
206
+ deps.dbg(`tool_result: debounce fired after ${existing.coalescedCount} coalesced calls for ${filePath}`);
207
+ handleToolResult({ ...existing.latestDeps, _bypassDebounce: true }).then(existing.resolve, existing.reject);
208
+ }, debounceMs);
209
+ deps.dbg(`tool_result: coalesced into pending debounce for ${filePath} (count=${existing.coalescedCount})`);
210
+ return existing.promise;
211
+ }
212
+ let resolveFn;
213
+ let rejectFn;
214
+ const promise = new Promise((res, rej) => {
215
+ resolveFn = res;
216
+ rejectFn = rej;
217
+ });
218
+ const initialParticipantIds = deps._telemetryParticipantIds ?? [
219
+ getReadGuardCorrelationId(deps.event)
220
+ ];
221
+ const entry = {
222
+ timer: setTimeout(() => {
223
+ debouncedPipelines.delete(filePath);
224
+ handleToolResult({ ...entry.latestDeps, _bypassDebounce: true }).then(entry.resolve, entry.reject);
225
+ }, debounceMs),
226
+ promise,
227
+ resolve: resolveFn,
228
+ reject: rejectFn,
229
+ latestDeps: {
230
+ ...deps,
231
+ _telemetryParticipantIds: initialParticipantIds.slice(0, 100),
232
+ _telemetryParticipantTotal: deps._telemetryParticipantTotal ?? initialParticipantIds.length
233
+ },
234
+ scheduledAt: Date.now(),
235
+ coalescedCount: 1
236
+ };
237
+ debouncedPipelines.set(filePath, entry);
238
+ return promise;
239
+ }
240
+ function getFileStateHash(filePath) {
241
+ try {
242
+ const content = nodeFs.readFileSync(filePath);
243
+ return nodeCrypto.createHash("sha256").update(content).digest("hex");
244
+ } catch (err) {
245
+ const code = err.code ?? "unknown";
246
+ return `unreadable:${code}`;
247
+ }
248
+ }
249
+ function getRequestedEditCount(event, kind) {
250
+ if (kind === "write")
251
+ return 1;
252
+ const edits = event.input?.edits;
253
+ return Array.isArray(edits) && edits.length > 0 ? edits.length : 1;
254
+ }
255
+ function getRequestedEditIndexes(event, kind) {
256
+ return boundedIndexesForCount(getRequestedEditCount(event, kind));
257
+ }
258
+ function sourceForMutation(classification, details) {
259
+ if (details?.piLensPartialApply) {
260
+ return "partial-apply";
261
+ }
262
+ if (classification.provenance === "builtin" || classification.provenance === "bash-derived") {
263
+ return classification.kind === "write" ? "agent-write" : "agent-edit";
264
+ }
265
+ return `agent-tool:${classification.toolName}`;
266
+ }
267
+ function singleRange(ranges) {
268
+ return ranges?.length === 1 ? ranges[0] : undefined;
269
+ }
270
+ function recordProjectChange(args) {
271
+ args.runtime.recordProjectMutation?.({
272
+ filePath: args.filePath,
273
+ source: args.source,
274
+ cwd: args.cwd,
275
+ changedRange: args.changedRange,
276
+ onAppendError: (err) => args.dbg(`project change log append failed for ${args.filePath}: ${err}`)
277
+ });
278
+ }
279
+ function recordNativeAppliedPairs(args) {
280
+ const pairs = [];
281
+ if (args.kind !== "edit")
282
+ return pairs;
283
+ const appliedInput = args.input;
284
+ const record = (oldText, newText) => {
285
+ if (typeof oldText === "string" && oldText.length > 0) {
286
+ args.runtime.partialApplyRecords.record(args.filePath, oldText, newText, args.stateHash);
287
+ pairs.push({ oldText, newText });
288
+ }
289
+ };
290
+ if (Array.isArray(appliedInput.edits)) {
291
+ for (const edit of appliedInput.edits)
292
+ record(edit.oldText, edit.newText);
293
+ } else {
294
+ record(appliedInput.oldText, appliedInput.newText);
295
+ }
296
+ return pairs;
297
+ }
298
+ function refreshCachedExports(runtime, filePath) {
299
+ if (runtime.cachedExports.size === 0 || !nodeFs.existsSync(filePath))
300
+ return;
301
+ const exportRe = new RegExp("export\\s+(?:async\\s+)?(?:function|class|const|let|type|interface)\\s+(\\w+)", "g");
302
+ for (const [name, file] of runtime.cachedExports) {
303
+ if (path.resolve(file) === path.resolve(filePath)) {
304
+ runtime.cachedExports.delete(name);
305
+ }
306
+ }
307
+ try {
308
+ const freshContent = nodeFs.readFileSync(filePath, "utf-8");
309
+ for (const match of freshContent.matchAll(exportRe)) {
310
+ const name = match[1];
311
+ if (!runtime.cachedExports.has(name)) {
312
+ runtime.cachedExports.set(name, filePath);
313
+ }
314
+ }
315
+ } catch {}
316
+ }
317
+ async function dispatchPipelineAnalysis(args) {
318
+ const { deps, runtime, filePath, dispatchCwd, turnStateCwd, autofixMode, modifiedRanges, writeIndex, initialStateHash, readGuardCorrelationId, requestedEditIndexes, requestedEditTotal, isPartialApplyResult, toolResultStart, nativeAppliedPairs, allowAutonomousWriters } = args;
319
+ const { event, getFlag, getFlagSource, dbg, biomeClient, ruffClient, metricsClient, resetLSPService } = deps;
320
+ const pipelinePromise = runPipeline({
321
+ signal: deps.signal,
322
+ filePath,
323
+ cwd: dispatchCwd,
324
+ projectRoot: turnStateCwd,
325
+ toolName: event.toolName,
326
+ autofixMode,
327
+ allowAutonomousWriters,
328
+ modifiedRanges,
329
+ telemetry: {
330
+ model: runtime.telemetryModel,
331
+ sessionId: runtime.telemetrySessionId,
332
+ turnIndex: runtime.turnIndex,
333
+ writeIndex,
334
+ modelId: runtime.telemetryModelId,
335
+ provider: runtime.telemetryProviderId
336
+ },
337
+ getFlag,
338
+ getFlagSource,
339
+ dbg,
340
+ seqState: {
341
+ projectSeq: () => runtime.projectSeq,
342
+ getFilesChangedSince: (seq) => runtime.getFilesChangedSince(seq)
343
+ },
344
+ turnEndCascadeSettleStart: () => runtime.getTurnEndCascadeSettleStart(),
345
+ wordIndex: runtime.wordIndex,
346
+ onWordIndexUpdated: (index) => {
347
+ scheduleWordIndexPersist(dispatchCwd, index, dbg);
348
+ }
349
+ }, {
350
+ biomeClient,
351
+ ruffClient,
352
+ metricsClient,
353
+ getFormatService,
354
+ fixedThisTurn: runtime.fixedThisTurn
355
+ });
356
+ const pipelineTelemetry = {
357
+ promise: pipelinePromise,
358
+ participantIds: [...new Set(args.participantIds)].slice(0, 100),
359
+ participantTotal: args.participantTotal
360
+ };
361
+ const registeredPipelines = registerInFlightPipeline(filePath, initialStateHash, pipelineTelemetry);
362
+ let result;
363
+ try {
364
+ result = await pipelinePromise;
365
+ } catch (pipelineErr) {
366
+ if (getFlag("lens-guard")) {
367
+ runtime.markGitGuardCacheUnknown("pipeline_crash");
368
+ }
369
+ dbg(`runPipeline crashed: ${pipelineErr}`);
370
+ logReadGuardEvent({
371
+ event: "edit_post_edit_pipeline_failed",
372
+ correlationId: readGuardCorrelationId,
373
+ filePath,
374
+ metadata: {
375
+ tool: event.toolName,
376
+ commitStatus: "committed",
377
+ reasonCode: "pipeline_failed"
378
+ }
379
+ });
380
+ logReadGuardEvent({
381
+ event: "edit_batch_summary",
382
+ correlationId: readGuardCorrelationId,
383
+ filePath,
384
+ metadata: {
385
+ tool: event.toolName,
386
+ editBatchSummary: createReadGuardEditBatchSummary({
387
+ requestedIndexes: requestedEditIndexes,
388
+ requestedTotal: requestedEditTotal,
389
+ resolvedIndexes: requestedEditIndexes,
390
+ resolvedTotal: requestedEditTotal,
391
+ appliedIndexes: requestedEditIndexes,
392
+ appliedTotal: requestedEditTotal,
393
+ participantIds: pipelineTelemetry.participantIds,
394
+ participantTotal: pipelineTelemetry.participantTotal,
395
+ commitStatus: "committed",
396
+ postEditStatus: "failed",
397
+ terminalStatus: "failed",
398
+ durationMs: Date.now() - toolResultStart
399
+ })
400
+ }
401
+ });
402
+ dbg(`runPipeline crash stack: ${pipelineErr.stack}`);
403
+ const activePrimarySessionId = getActiveSessionId();
404
+ const crashBelongsToPrimary = activePrimarySessionId === undefined || activePrimarySessionId === runtime.telemetrySessionId;
405
+ if (!getFlag("no-lsp") && crashBelongsToPrimary) {
406
+ resetLSPService({ fast: true, reason: "pipeline_crash" });
407
+ }
408
+ logLatency({
409
+ type: "tool_result",
410
+ toolName: event.toolName,
411
+ filePath,
412
+ durationMs: Date.now() - toolResultStart,
413
+ result: "pipeline_crash"
414
+ });
415
+ const notice = runtime.formatPipelineCrashNotice(filePath, pipelineErr);
416
+ return {
417
+ crashed: true,
418
+ response: {
419
+ content: notice ? [...event.content, { type: "text", text: notice }] : event.content,
420
+ isError: true
421
+ }
422
+ };
423
+ } finally {
424
+ releaseInFlightPipeline(filePath, initialStateHash, registeredPipelines);
425
+ }
426
+ if (!isPartialApplyResult) {
427
+ const postEditStatus = result.isError ? "failed" : "succeeded";
428
+ if (result.isError) {
429
+ logReadGuardEvent({
430
+ event: "edit_post_edit_pipeline_failed",
431
+ correlationId: readGuardCorrelationId,
432
+ filePath,
433
+ metadata: {
434
+ tool: event.toolName,
435
+ commitStatus: "committed",
436
+ reasonCode: "pipeline_failed"
437
+ }
438
+ });
439
+ }
440
+ logReadGuardEvent({
441
+ event: "edit_batch_summary",
442
+ correlationId: readGuardCorrelationId,
443
+ filePath,
444
+ metadata: {
445
+ tool: event.toolName,
446
+ editBatchSummary: createReadGuardEditBatchSummary({
447
+ requestedIndexes: requestedEditIndexes,
448
+ requestedTotal: requestedEditTotal,
449
+ resolvedIndexes: requestedEditIndexes,
450
+ resolvedTotal: requestedEditTotal,
451
+ appliedIndexes: requestedEditIndexes,
452
+ appliedTotal: requestedEditTotal,
453
+ participantIds: pipelineTelemetry.participantIds,
454
+ participantTotal: pipelineTelemetry.participantTotal,
455
+ commitStatus: "committed",
456
+ postEditStatus,
457
+ terminalStatus: postEditStatus === "failed" ? "failed" : "success",
458
+ durationMs: Date.now() - toolResultStart
459
+ })
460
+ }
461
+ });
462
+ }
463
+ const pipelineOwnedWriteHash = result.fileModified ? result.postWriteStateHash : undefined;
464
+ const finalStateHash = pipelineOwnedWriteHash ?? initialStateHash;
465
+ if (!result.fileModified || pipelineOwnedWriteHash !== undefined) {
466
+ lastAnalyzedStateByFile.set(filePath, {
467
+ turnIndex: runtime.turnIndex,
468
+ stateHash: finalStateHash
469
+ });
470
+ }
471
+ if (pipelineOwnedWriteHash !== undefined) {
472
+ for (const pair of nativeAppliedPairs) {
473
+ runtime.partialApplyRecords.noteAfterWriteHash(filePath, pair.oldText, pair.newText, finalStateHash);
474
+ }
475
+ }
476
+ if (!getFlag("no-read-guard") && allowAutonomousWriters) {
477
+ const changedForReadGuard = new Set([
478
+ path.resolve(filePath),
479
+ ...(result.changedFiles ?? []).map((changedFile) => path.resolve(changedFile))
480
+ ]);
481
+ for (const changedFile of changedForReadGuard) {
482
+ if (nodeFs.existsSync(changedFile)) {
483
+ deps.readGuard?.recordWritten(changedFile);
484
+ }
485
+ }
486
+ }
487
+ return { crashed: false, result };
488
+ }
489
+ export async function handleToolResult(deps) {
490
+ const { event, getFlag, dbg, runtime, cacheManager, agentBehaviorRecord, formatBehaviorWarnings } = deps;
491
+ const rawFilePath = event.input.path;
492
+ const workspaceRoot = runtime.projectRoot || process.cwd();
493
+ let bashAuthorshipConfirmed = deps._allowAutonomousWriters ?? deps._readGuardAuthorship ?? event.toolName !== "bash";
494
+ const toolCallId = resolveToolCallCorrelationId(event);
495
+ const attribution = toolCallId !== undefined ? runtime.takeToolCallAttribution(toolCallId) : undefined;
496
+ let resolutionBasis;
497
+ if (attribution) {
498
+ resolutionBasis = attribution.originCwd;
499
+ } else if (toolCallId !== undefined && rawFilePath && !path.isAbsolute(rawFilePath)) {
500
+ const guessedPath = path.resolve(workspaceRoot, rawFilePath);
501
+ dbg(`path_attribution_missing: no recorded resolution basis for toolCallId=${toolCallId}, refusing relative path ${rawFilePath} (would have guessed ${guessedPath})`);
502
+ logLatency({
503
+ type: "phase",
504
+ toolName: event.toolName,
505
+ filePath: guessedPath,
506
+ phase: "path_attribution_missing",
507
+ durationMs: 0,
508
+ metadata: { toolCallId, rawFilePath, guessedPath }
509
+ });
510
+ return;
511
+ } else {
512
+ resolutionBasis = workspaceRoot;
513
+ }
514
+ const filePath = rawFilePath ? path.isAbsolute(rawFilePath) ? rawFilePath : path.resolve(resolutionBasis, rawFilePath) : rawFilePath;
515
+ if (filePath) {
516
+ invalidateProjectIgnoreMatcherForPath(filePath);
517
+ invalidateFormatterCacheForPath(filePath);
518
+ }
519
+ if (attribution?.skipped && filePath && attribution.resolvedPath && !pathsEqual(filePath, attribution.resolvedPath)) {
520
+ const message = `path_attribution_refused: call target ${attribution.resolvedPath} (originCwd=${attribution.originCwd}) vs tool_result resolved ${filePath}`;
521
+ dbg(message);
522
+ logLatency({
523
+ type: "phase",
524
+ toolName: event.toolName,
525
+ filePath,
526
+ phase: "path_attribution_refused",
527
+ durationMs: 0,
528
+ metadata: {
529
+ callTarget: attribution.resolvedPath,
530
+ resolvedPath: filePath,
531
+ originCwd: attribution.originCwd
532
+ }
533
+ });
534
+ }
535
+ const behaviorWarnings = agentBehaviorRecord(event.toolName, filePath);
536
+ const syntheticWriteContent = [];
537
+ const syntheticAttachmentBudget = {
538
+ remaining: AUTHORITATIVE_CONTENT_MAX_BYTES
539
+ };
540
+ if (event.toolName === "bash" && typeof event.input.command === "string") {
541
+ const command = event.input.command;
542
+ const recognized = extractWrittenPathsFromCommand(command, workspaceRoot);
543
+ let recognizedWritten = event.isError !== true ? recognized.filter((wp) => !isExternalOrVendorFile(wp, workspaceRoot) && !isPathIgnoredByProject(wp, workspaceRoot, false)) : [];
544
+ if (!getFlag("no-read-guard")) {
545
+ for (const recognizedPath of recognizedWritten)
546
+ deps.readGuard?.recordUnchanged?.(recognizedPath);
547
+ }
548
+ let opaquePaths = [];
549
+ let observedChangedKeys;
550
+ let recognizedAuthored = [];
551
+ if (workspaceRoot && !getFlag("no-read-guard")) {
552
+ const scanRoot = workspaceRoot;
553
+ const started = Date.now();
554
+ const pending = getOpaqueBaselineStore().take(`${normalizeMapKey(path.resolve(scanRoot))}:${runtime.sessionGeneration}`);
555
+ let unknownReason;
556
+ if (!pending && recognized.length > 0) {
557
+ unknownReason = "partial-recognition-no-baseline";
558
+ } else if (!pending) {
559
+ unknownReason = "no-pending-snapshot";
560
+ } else if (pending.strategy === "git") {
561
+ const recovery = await recoverOpaqueChangesViaGit(scanRoot, pending.startedAt, {
562
+ excludeIndexOnlyWhenUnmerged: isFailedGitIntegrationCommand(command, event.isError)
563
+ });
564
+ if (recovery.verdict === "recovered") {
565
+ opaquePaths = recovery.paths.filter((p) => !isExternalOrVendorFile(p, scanRoot) && !isPathIgnoredByProject(p, scanRoot, false));
566
+ observedChangedKeys = new Set(opaquePaths);
567
+ } else if (recovery.verdict === "unknown") {
568
+ unknownReason = recovery.unknownReason;
569
+ } else {
570
+ observedChangedKeys = new Set;
571
+ }
572
+ if ((recovery.excludedIncomingCount ?? 0) > 0) {
573
+ logLatency({
574
+ type: "phase",
575
+ phase: "opaque_mutation_incoming_excluded",
576
+ filePath: command.slice(0, 80),
577
+ durationMs: Date.now() - started,
578
+ result: `excluded:${recovery.excludedIncomingCount}`
579
+ });
580
+ }
581
+ if ((recovery.unknownStatusCount ?? 0) > 0) {
582
+ logLatency({
583
+ type: "phase",
584
+ phase: "opaque_mutation_status_pair_unknown",
585
+ filePath: command.slice(0, 80),
586
+ durationMs: Date.now() - started,
587
+ result: `kept:${recovery.unknownStatusCount}`
588
+ });
589
+ }
590
+ } else if (pending.stats) {
591
+ const outcome = await captureFileStats(scanRoot, {
592
+ withHashes: true,
593
+ ...deps._opaqueCaptureOptions
594
+ });
595
+ if (outcome.snapshot && !outcome.unknownReason) {
596
+ opaquePaths = diffFileContent(pending.stats, outcome.snapshot);
597
+ observedChangedKeys = new Set(opaquePaths);
598
+ } else {
599
+ unknownReason = outcome.unknownReason ?? pending.statsUnknownReason ?? "walk-failed";
600
+ }
601
+ } else {
602
+ unknownReason = pending.statsUnknownReason ?? "walk-failed";
603
+ }
604
+ if (opaquePaths.length > 0 && recognizedWritten.length > 0) {
605
+ const survivingKeys = new Set(recognizedWritten.map((p) => normalizeMapKey(path.resolve(p))));
606
+ opaquePaths = opaquePaths.filter((p) => !survivingKeys.has(p));
607
+ }
608
+ if (observedChangedKeys) {
609
+ recognizedAuthored = recognizedWritten.filter((file) => observedChangedKeys.has(normalizeMapKey(path.resolve(file))));
610
+ if (recognizedAuthored.length === 0)
611
+ recognizedWritten = [];
612
+ } else if (unknownReason) {
613
+ recognizedAuthored = [];
614
+ }
615
+ if (unknownReason) {
616
+ logLatency({
617
+ type: "phase",
618
+ phase: "opaque_mutation_coverage_unknown",
619
+ filePath: command.slice(0, 80),
620
+ durationMs: Date.now() - started,
621
+ result: unknownReason
622
+ });
623
+ }
624
+ if (opaquePaths.length > 0) {
625
+ logLatency({
626
+ type: "phase",
627
+ phase: "opaque_mutation_recovered",
628
+ filePath: opaquePaths.slice(0, 5).join(","),
629
+ durationMs: Date.now() - started,
630
+ result: `changed:${opaquePaths.length}`
631
+ });
632
+ resyncGitChangedFiles(opaquePaths).catch((err) => {
633
+ dbg(`git-change LSP resync failed: ${err}`);
634
+ });
635
+ }
636
+ }
637
+ const opaqueSet = new Set(opaquePaths);
638
+ const written = [...recognizedWritten, ...opaquePaths];
639
+ const recognizedAuthoredSet = new Set(recognizedAuthored);
640
+ bashAuthorshipConfirmed = recognizedAuthored.length > 0;
641
+ for (const wp of written) {
642
+ if (!getFlag("no-read-guard") && recognizedAuthoredSet.has(wp))
643
+ deps.readGuard?.recordWritten(wp);
644
+ else if (!getFlag("no-read-guard") && recognizedWritten.includes(wp))
645
+ deps.readGuard?.recordUnchanged?.(wp);
646
+ const receipt = runtime.recordMutationToolReceipt;
647
+ const autofixMode = receipt ? receipt.call(runtime, wp, "write").autofixMode : "immediate";
648
+ const isOpaque = opaqueSet.has(wp);
649
+ const syntheticEvent = {
650
+ ...event,
651
+ toolName: "write",
652
+ input: { path: wp },
653
+ isError: false,
654
+ [DM_LENS_SYNTHETIC_MUTATION_FIELD]: "bash"
655
+ };
656
+ const syntheticResult = await handleToolResult({
657
+ ...deps,
658
+ event: syntheticEvent,
659
+ _bypassDebounce: true,
660
+ _autofixMode: autofixMode,
661
+ _attachmentBudget: syntheticAttachmentBudget,
662
+ _mutationSourceOverride: isOpaque ? "opaque-script" : undefined,
663
+ _readGuardAuthorship: recognizedAuthoredSet.has(wp),
664
+ _allowAutonomousWriters: recognizedAuthoredSet.has(wp)
665
+ });
666
+ if (syntheticResult) {
667
+ syntheticWriteContent.push(...syntheticResult.content.slice(event.content.length));
668
+ }
669
+ }
670
+ if (event.isError !== true && !getFlag("no-read-guard")) {
671
+ const truncation = event.details?.truncation;
672
+ const parsedSpans = extractReadPathsFromCommand(command, workspaceRoot);
673
+ let spans = parsedSpans;
674
+ if (truncation?.truncated === true && typeof truncation.outputLines === "number") {
675
+ if (parsedSpans.length === 1) {
676
+ const span = parsedSpans[0];
677
+ if (span) {
678
+ const hasTrailingNewline = nodeFs.readFileSync(span.filePath, "utf8").endsWith(`
679
+ `);
680
+ const spanLineCount = hasTrailingNewline ? Math.max(1, span.limit - 1) : span.limit;
681
+ const shown = Math.min(truncation.outputLines, spanLineCount);
682
+ spans = shown > 0 ? [
683
+ {
684
+ ...span,
685
+ offset: span.offset + spanLineCount - shown,
686
+ limit: shown
687
+ }
688
+ ] : [];
689
+ }
690
+ } else if (parsedSpans.length > 1) {
691
+ recordDegradationOnce({
692
+ kind: "bash-view-clipped",
693
+ subject: "multi-span",
694
+ reason: "truncated bash view contained multiple spans"
695
+ });
696
+ spans = [];
697
+ }
698
+ if (parsedSpans.length === 1 && spans.length === 1 && (spans[0]?.offset !== parsedSpans[0]?.offset || spans[0]?.limit !== parsedSpans[0]?.limit)) {
699
+ recordDegradationOnce({
700
+ kind: "bash-view-clipped",
701
+ subject: parsedSpans[0]?.filePath ?? "unknown",
702
+ reason: "truncated bash view narrowed a single span"
703
+ });
704
+ }
705
+ }
706
+ for (const span of spans) {
707
+ if (isExternalOrVendorFile(span.filePath, workspaceRoot))
708
+ continue;
709
+ if (isPathIgnoredByProject(span.filePath, workspaceRoot, false))
710
+ continue;
711
+ deps.readGuard?.recordRead({
712
+ filePath: span.filePath,
713
+ requestedOffset: span.offset,
714
+ requestedLimit: span.limit,
715
+ effectiveOffset: span.offset,
716
+ effectiveLimit: span.limit,
717
+ expandedByLsp: false,
718
+ turnIndex: runtime.turnIndex,
719
+ writeIndex: runtime.peekWriteIndex(),
720
+ timestamp: Date.now()
721
+ });
722
+ }
723
+ }
724
+ if (event.isError !== true && !getFlag("no-lsp") && !getFlag("no-read-guard")) {
725
+ for (const dp of extractDeletedPathsFromCommand(command, workspaceRoot)) {
726
+ if (isExternalOrVendorFile(dp, workspaceRoot))
727
+ continue;
728
+ if (isPathIgnoredByProject(dp, workspaceRoot, false))
729
+ continue;
730
+ if (!deps.readGuard || !deps.readGuard.hasKnownPath(dp))
731
+ continue;
732
+ if (nodeFs.existsSync(dp))
733
+ continue;
734
+ deps.readGuard.forgetPath(dp);
735
+ notifyExternalFileChange(dp, 3).catch((err) => {
736
+ dbg(`tool_result: external-delete notify failed for ${dp}: ${err}`);
737
+ });
738
+ }
739
+ }
740
+ }
741
+ if (deps.readGuard && event.isError !== true && !getFlag("no-read-guard")) {
742
+ const searchReads = [];
743
+ const detailSearchReads = event.details?.searchReads;
744
+ if (Array.isArray(detailSearchReads))
745
+ searchReads.push(...detailSearchReads);
746
+ if (event.toolName === "bash" && typeof event.input.command === "string") {
747
+ const command = event.input.command;
748
+ const output = event.content.map((part) => typeof part.text === "string" ? part.text : "").join(`
749
+ `);
750
+ searchReads.push(...extractGrepSearchReadsFromOutput(command, workspaceRoot, output));
751
+ }
752
+ if (searchReads.length > 0) {
753
+ registerSearchReads(deps.readGuard, searchReads, {
754
+ projectRoot: workspaceRoot,
755
+ turnIndex: runtime.turnIndex,
756
+ writeIndex: runtime.peekWriteIndex()
757
+ });
758
+ }
759
+ }
760
+ if (deps.readGuard && event.toolName === "read" && event.isError !== true && filePath && !getFlag("no-read-guard") && !isExternalOrVendorFile(filePath, workspaceRoot)) {
761
+ const deliveredFilePath = attribution?.resolvedPath && nodeFs.existsSync(attribution.resolvedPath) ? attribution.resolvedPath : filePath;
762
+ if (nodeFs.existsSync(deliveredFilePath)) {
763
+ const nativeReadToolCallId = resolveToolCallCorrelationId(event);
764
+ const input = event.input;
765
+ const requestedOffset = input.offset ?? 1;
766
+ const requestedLimit = input.limit;
767
+ const truncation = event.details?.truncation;
768
+ const available = Math.max(0, countFileLines(deliveredFilePath) - requestedOffset + 1);
769
+ const deliveredLimit = Math.min(available, truncation?.outputLines ?? requestedLimit ?? available);
770
+ if (deliveredLimit > 0) {
771
+ if (truncation?.truncated === true && deliveredLimit < available) {
772
+ recordDegradationOnce({
773
+ kind: "native-read-clipped",
774
+ subject: deliveredFilePath,
775
+ reason: "native read result was clipped before delivery"
776
+ });
777
+ }
778
+ logReadGuardEvent({
779
+ event: "read_pattern",
780
+ sessionId: runtime.telemetrySessionId,
781
+ filePath: deliveredFilePath,
782
+ requestedOffset,
783
+ requestedLimit: requestedLimit ?? deliveredLimit,
784
+ effectiveOffset: requestedOffset,
785
+ effectiveLimit: deliveredLimit,
786
+ metadata: {
787
+ totalLines: countFileLines(deliveredFilePath),
788
+ isPartial: deliveredLimit < available,
789
+ fileKind: detectFileKind(deliveredFilePath) ?? "unknown",
790
+ fractionRead: available > 0 ? Math.round(deliveredLimit / available * 100) / 100 : 1,
791
+ expandedByTs: false
792
+ }
793
+ });
794
+ const deliveredRecord = {
795
+ filePath: deliveredFilePath,
796
+ requestedOffset,
797
+ requestedLimit: requestedLimit ?? deliveredLimit,
798
+ effectiveOffset: requestedOffset,
799
+ effectiveLimit: deliveredLimit,
800
+ expandedByLsp: false,
801
+ turnIndex: runtime.turnIndex,
802
+ writeIndex: runtime.peekWriteIndex(),
803
+ timestamp: Date.now()
804
+ };
805
+ if (nativeReadToolCallId) {
806
+ deps.readGuard.recordRead(deliveredRecord, {
807
+ supersedes: { toolCallId: nativeReadToolCallId }
808
+ });
809
+ } else {
810
+ deps.readGuard.recordRead(deliveredRecord);
811
+ }
812
+ }
813
+ }
814
+ }
815
+ const mutation = classifyMutatingTool(event, {
816
+ filePath: filePath || undefined,
817
+ sessionId: deps.sessionId,
818
+ recognizeOnly: true
819
+ });
820
+ const observationPending = !getFlag("no-read-guard") && hasPendingObservation(resolveToolCallCorrelationId(event));
821
+ const preSettleStateHash = observationPending && filePath ? getFileStateHash(filePath) : undefined;
822
+ let observedReplayed = 0;
823
+ let observedChangedPaths = [];
824
+ if (observationPending) {
825
+ const observed = await settleObservedMutation({
826
+ toolCallId: resolveToolCallCorrelationId(event),
827
+ toolName: event.toolName,
828
+ sessionGeneration: runtime.sessionGeneration,
829
+ turnIndex: runtime.turnIndex,
830
+ signal: getAmbientAbortSignal(),
831
+ record: replayThroughMutationBridge,
832
+ getStoredLineHashes: (candidate) => storedLineHashesFor(deps.readGuard, candidate),
833
+ isRecordable: (candidate) => !isExternalOrVendorFile(candidate, workspaceRoot) && !isPathIgnoredByProject(candidate, workspaceRoot, false),
834
+ dbg
835
+ });
836
+ observedReplayed = observed.replayed;
837
+ observedChangedPaths = observed.changedPaths;
838
+ if (observed.replayed > 0) {
839
+ dbg(`tool_result: observed ${observed.replayed} mutation(s) from tool "${event.toolName}"`);
840
+ } else if (observed.reason) {
841
+ dbg(`tool_result: observation for "${event.toolName}" did not settle: ${observed.reason}`);
842
+ }
843
+ }
844
+ const toolResultStart = Date.now();
845
+ if (observedReplayed > 0) {
846
+ if (filePath && !isExternalOrVendorFile(filePath, workspaceRoot)) {
847
+ const observedKind = mutation?.kind ?? "edit";
848
+ const observedStateHash = preSettleStateHash ?? getFileStateHash(filePath);
849
+ const observedAppliedPairs = recordNativeAppliedPairs({
850
+ runtime,
851
+ input: event.input,
852
+ kind: observedKind,
853
+ filePath,
854
+ stateHash: observedStateHash
855
+ });
856
+ const receiptOutcome = runtime.recordMutationToolReceipt?.call(runtime, filePath, observedKind);
857
+ refreshCachedExports(runtime, filePath);
858
+ const observedAutofixMode = receiptOutcome?.autofixMode ?? (observedKind === "edit" ? "deferred" : "immediate");
859
+ const observedDispatchPaths = observedChangedPaths.filter((candidate) => {
860
+ try {
861
+ return !nodeFs.statSync(candidate).isDirectory();
862
+ } catch {
863
+ return false;
864
+ }
865
+ }).slice(0, OBSERVED_DISPATCH_MAX_PATHS);
866
+ const observedDispatchDropped = observedChangedPaths.length - observedDispatchPaths.length;
867
+ if (observedDispatchDropped > 0) {
868
+ incrementDegradationCount({
869
+ kind: "observed-mutation-dispatch-cap",
870
+ subject: event.toolName,
871
+ reason: `observed mutation dispatch capped at ${OBSERVED_DISPATCH_MAX_PATHS}; ${observedDispatchDropped} path(s) not dispatched`
872
+ });
873
+ }
874
+ if (observedDispatchPaths.length > 0) {
875
+ const observedClients = ensureToolResultClients(deps);
876
+ if (observedClients !== true && !await bounded(Promise.resolve(observedClients), {
877
+ ms: HOOK_WALL_BUDGET_MS.tool_result_edit,
878
+ signal: deps.signal ?? undefined,
879
+ hook: "tool_result_edit",
880
+ label: "observed-tool-result-analysis"
881
+ }))
882
+ return;
883
+ const observedReadGuardCorrelationId = getReadGuardCorrelationId(event);
884
+ for (const observedPath of observedDispatchPaths) {
885
+ const observedDispatchSignal = deps.signal;
886
+ const observedJoinSignal = deps.signal;
887
+ const observedStateHashForPath = getFileStateHash(observedPath);
888
+ const observedClaim = claimPipelineDispatch({
889
+ filePath: observedPath,
890
+ stateHash: observedStateHashForPath,
891
+ turnIndex: runtime.turnIndex,
892
+ participantId: observedReadGuardCorrelationId,
893
+ dbg
894
+ });
895
+ if (!observedClaim.proceed) {
896
+ if (observedClaim.joined) {
897
+ await bounded(observedClaim.joined, {
898
+ ms: HOOK_WALL_BUDGET_MS.tool_result_edit,
899
+ signal: observedJoinSignal,
900
+ hook: "tool_result_edit",
901
+ label: "observed-tool-result-join"
902
+ });
903
+ }
904
+ continue;
905
+ }
906
+ const observedDispatchOutcome = await bounded(dispatchPipelineAnalysis({
907
+ deps,
908
+ runtime,
909
+ filePath: observedPath,
910
+ dispatchCwd: resolveLanguageRootForFile(observedPath, workspaceRoot),
911
+ turnStateCwd: path.resolve(workspaceRoot),
912
+ autofixMode: observedAutofixMode,
913
+ modifiedRanges: undefined,
914
+ writeIndex: runtime.nextWriteIndex(),
915
+ initialStateHash: observedStateHashForPath,
916
+ readGuardCorrelationId: observedReadGuardCorrelationId,
917
+ requestedEditIndexes: getRequestedEditIndexes(event, observedKind),
918
+ requestedEditTotal: getRequestedEditCount(event, observedKind),
919
+ isPartialApplyResult: (event.details ?? {}).piLensPartialApply === true,
920
+ participantIds: [observedReadGuardCorrelationId],
921
+ participantTotal: 1,
922
+ toolResultStart,
923
+ nativeAppliedPairs: observedAppliedPairs,
924
+ allowAutonomousWriters: true
925
+ }), {
926
+ ms: HOOK_WALL_BUDGET_MS.tool_result_edit,
927
+ signal: observedDispatchSignal,
928
+ hook: "tool_result_edit",
929
+ label: "observed-tool-result-analysis"
930
+ });
931
+ if (observedDispatchOutcome?.crashed) {
932
+ dbg(`tool_result: pipeline analysis crashed for the observed mutation on ${observedPath}; the recorded edit stands, analysis did not run this turn`);
933
+ return observedDispatchOutcome.response;
934
+ }
935
+ }
936
+ dbg(`tool_result: the observational settle already recorded ${observedReplayed} mutation(s) for "${event.toolName}"; kept the applied-edit records, mutation receipt, cachedExports refresh, and ran the pipeline dispatch (#2464); skipped the bridge-covered staleness stamp / turn-state ranges / change-log receipt / deferred autofix+format`);
937
+ } else {
938
+ dbg(`tool_result: the observational settle recorded ${observedReplayed} mutation(s) for "${event.toolName}", but no dispatchable changed paths remained`);
939
+ }
940
+ }
941
+ return syntheticWriteContent.length > 0 ? { content: [...event.content, ...syntheticWriteContent] } : undefined;
942
+ }
943
+ if (mutation === undefined) {
944
+ dbg(`tool_result: skipped turn tracking - toolName="${event.toolName}" is not a classified mutation`);
945
+ return syntheticWriteContent.length > 0 ? { content: [...event.content, ...syntheticWriteContent] } : undefined;
946
+ }
947
+ if (!filePath) {
948
+ dbg(`tool_result: skipped turn tracking - no filePath for toolName="${event.toolName}"`);
949
+ return;
950
+ }
951
+ if (isExternalOrVendorFile(filePath, workspaceRoot)) {
952
+ dbg(`tool_result: skipped pipeline - file outside project root or in node_modules: ${filePath}`);
953
+ return;
954
+ }
955
+ noteMutationHandled(filePath);
956
+ const readGuardCorrelationId = getReadGuardCorrelationId(event);
957
+ const resultDetails = event.details ?? {};
958
+ const isPartialApplyResult = resultDetails.piLensPartialApply === true;
959
+ const requestedEditIndexes = getRequestedEditIndexes(event, mutation.kind);
960
+ const requestedEditTotal = getRequestedEditCount(event, mutation.kind);
961
+ const participantIds = [
962
+ ...deps._telemetryParticipantIds ?? [],
963
+ readGuardCorrelationId
964
+ ].slice(0, 100);
965
+ const participantTotal = (deps._telemetryParticipantTotal ?? 0) + (deps._telemetryParticipantIds?.includes(readGuardCorrelationId) ? 0 : 1);
966
+ const hostToolResultFailed = event.isError === true || resultDetails.isError === true;
967
+ if (hostToolResultFailed) {
968
+ logReadGuardEvent({
969
+ event: "edit_batch_summary",
970
+ correlationId: readGuardCorrelationId,
971
+ filePath,
972
+ metadata: {
973
+ tool: event.toolName,
974
+ source: "host_tool_result",
975
+ editBatchSummary: createReadGuardEditBatchSummary({
976
+ requestedIndexes: requestedEditIndexes,
977
+ requestedTotal: requestedEditTotal,
978
+ rejectedReasons: requestedEditIndexes.map((index) => ({
979
+ index,
980
+ code: "write_failed"
981
+ })),
982
+ rejectedTotal: requestedEditTotal,
983
+ participantIds: [readGuardCorrelationId],
984
+ participantTotal: 1,
985
+ commitStatus: "failed",
986
+ terminalStatus: "failed"
987
+ })
988
+ }
989
+ });
990
+ return { content: event.content, isError: true };
991
+ }
992
+ const postWriteStateHash = preSettleStateHash ?? getFileStateHash(filePath);
993
+ const nativeAppliedPairs = recordNativeAppliedPairs({
994
+ runtime,
995
+ input: event.input,
996
+ kind: mutation.kind,
997
+ filePath,
998
+ stateHash: postWriteStateHash
999
+ });
1000
+ const receipt = runtime.recordMutationToolReceipt;
1001
+ const autofixMode = deps._bypassDebounce ? deps._autofixMode ?? (mutation.kind === "edit" ? "deferred" : "immediate") : receipt ? receipt.call(runtime, filePath, mutation.kind).autofixMode : mutation.kind === "edit" ? "deferred" : "immediate";
1002
+ if (!deps._bypassDebounce) {
1003
+ const debounceMs = getDebounceMs();
1004
+ if (debounceMs > 0) {
1005
+ return scheduleDebounced(filePath, debounceMs, {
1006
+ ...deps,
1007
+ _autofixMode: autofixMode,
1008
+ _telemetryParticipantIds: [readGuardCorrelationId],
1009
+ _telemetryParticipantTotal: 1
1010
+ });
1011
+ }
1012
+ }
1013
+ if (bashAuthorshipConfirmed)
1014
+ deps.readGuard?.recordWritten(filePath);
1015
+ refreshCachedExports(runtime, filePath);
1016
+ const initialStateHash = postWriteStateHash;
1017
+ const classifiedClaim = claimPipelineDispatch({
1018
+ filePath,
1019
+ stateHash: initialStateHash,
1020
+ turnIndex: runtime.turnIndex,
1021
+ participantId: readGuardCorrelationId,
1022
+ dbg
1023
+ });
1024
+ if (!classifiedClaim.proceed) {
1025
+ if (classifiedClaim.joined) {
1026
+ await classifiedClaim.joined;
1027
+ }
1028
+ return;
1029
+ }
1030
+ const sessionFileTime = createFileTime("default");
1031
+ sessionFileTime.read(filePath);
1032
+ if (!getFlag("no-read-guard") && bashAuthorshipConfirmed) {
1033
+ const readGuard = runtime.readGuard;
1034
+ readGuard?.recordWritten?.(filePath);
1035
+ }
1036
+ dbg(`tool_result: tracking turn state for ${event.toolName} on ${filePath}`);
1037
+ if (isPathIgnoredByProject(filePath, workspaceRoot, false)) {
1038
+ dbg(`tool_result: skipping gitignored file ${filePath}`);
1039
+ return;
1040
+ }
1041
+ const dispatchCwd = resolveLanguageRootForFile(filePath, workspaceRoot);
1042
+ const turnStateCwd = path.resolve(workspaceRoot);
1043
+ dbg(`tool_result: resolved dispatch cwd ${dispatchCwd} for ${filePath} (turnState cwd ${turnStateCwd})`);
1044
+ const writeIndex = runtime.nextWriteIndex();
1045
+ let modifiedRanges;
1046
+ const adapterRanges = mutation.editRanges && mutation.editRanges.length > 0 ? mutation.editRanges.map(([start, end]) => ({ start, end })) : mutation.touchedLines ? [{ start: mutation.touchedLines[0], end: mutation.touchedLines[1] }] : undefined;
1047
+ try {
1048
+ const details = event.details;
1049
+ dbg(`tool_result: details.diff=${details?.diff ? "present" : "missing"}, details keys: ${Object.keys(event.details || {}).join(", ")}`);
1050
+ if (mutation.kind === "edit" && details?.diff) {
1051
+ const diff = details.diff;
1052
+ dbg(`tool_result: diff content (first 500 chars): ${diff.substring(0, 500)}`);
1053
+ const ranges = parseDiffRanges(diff);
1054
+ modifiedRanges = ranges;
1055
+ const importsChanged = /import\s/.test(diff) || /from\s+['"]/.test(diff);
1056
+ dbg(`tool_result: parsed ${ranges.length} ranges, importsChanged=${importsChanged}`);
1057
+ for (const range of ranges) {
1058
+ dbg(`tool_result: adding range ${range.start}-${range.end} for ${filePath}`);
1059
+ cacheManager.addModifiedRange(filePath, range, importsChanged, turnStateCwd, runtime.telemetrySessionId);
1060
+ }
1061
+ dbg(`tool_result: turn state after add: ${JSON.stringify(cacheManager.readTurnState(turnStateCwd))}`);
1062
+ } else if (mutation.kind === "edit" && adapterRanges && nodeFs.existsSync(filePath)) {
1063
+ const content = nodeFs.readFileSync(filePath, "utf-8");
1064
+ const importsChanged = /^import\s/m.test(content);
1065
+ modifiedRanges = adapterRanges;
1066
+ for (const range of adapterRanges) {
1067
+ cacheManager.addModifiedRange(filePath, range, importsChanged, turnStateCwd, runtime.telemetrySessionId);
1068
+ }
1069
+ } else if (mutation.kind === "edit" && mutation.provenance === "declared" && nodeFs.existsSync(filePath)) {
1070
+ const content = nodeFs.readFileSync(filePath, "utf-8");
1071
+ const lineCount = content.split(`
1072
+ `).length;
1073
+ const importsChanged = /^import\s/m.test(content);
1074
+ modifiedRanges = [{ start: 1, end: lineCount }];
1075
+ cacheManager.addModifiedRange(filePath, { start: 1, end: lineCount }, importsChanged, turnStateCwd, runtime.telemetrySessionId);
1076
+ } else if (mutation.kind === "write" && nodeFs.existsSync(filePath)) {
1077
+ const content = nodeFs.readFileSync(filePath, "utf-8");
1078
+ const lineCount = content.split(`
1079
+ `).length;
1080
+ const hasImports = /^import\s/m.test(content);
1081
+ modifiedRanges = [{ start: 1, end: lineCount }];
1082
+ cacheManager.addModifiedRange(filePath, { start: 1, end: lineCount }, hasImports, turnStateCwd, runtime.telemetrySessionId);
1083
+ }
1084
+ } catch (err) {
1085
+ dbg(`turn state tracking error: ${err}`);
1086
+ dbg(`turn state tracking error stack: ${err.stack}`);
1087
+ }
1088
+ recordProjectChange({
1089
+ runtime,
1090
+ cwd: turnStateCwd,
1091
+ filePath,
1092
+ source: deps._mutationSourceOverride ?? sourceForMutation(mutation, event.details),
1093
+ changedRange: singleRange(modifiedRanges),
1094
+ dbg
1095
+ });
1096
+ const turnStateMs = Date.now() - toolResultStart;
1097
+ logLatency({
1098
+ type: "phase",
1099
+ toolName: event.toolName,
1100
+ filePath,
1101
+ phase: "turn_state_tracking",
1102
+ durationMs: turnStateMs
1103
+ });
1104
+ dbg(`tool_result fired for: ${filePath} (turn_state: ${turnStateMs}ms)`);
1105
+ const classifiedClients = ensureToolResultClients(deps);
1106
+ if (classifiedClients !== true && !await bounded(Promise.resolve(classifiedClients), {
1107
+ ms: HOOK_WALL_BUDGET_MS.tool_result_edit,
1108
+ signal: deps.signal,
1109
+ hook: "tool_result_edit",
1110
+ label: "classified-tool-result-analysis"
1111
+ }))
1112
+ return;
1113
+ const dispatchOutcome = await bounded(dispatchPipelineAnalysis({
1114
+ deps,
1115
+ runtime,
1116
+ filePath,
1117
+ dispatchCwd,
1118
+ turnStateCwd,
1119
+ autofixMode,
1120
+ modifiedRanges,
1121
+ writeIndex,
1122
+ initialStateHash,
1123
+ readGuardCorrelationId,
1124
+ requestedEditIndexes,
1125
+ requestedEditTotal,
1126
+ isPartialApplyResult,
1127
+ participantIds,
1128
+ participantTotal,
1129
+ toolResultStart,
1130
+ nativeAppliedPairs,
1131
+ allowAutonomousWriters: bashAuthorshipConfirmed
1132
+ }), {
1133
+ ms: HOOK_WALL_BUDGET_MS.tool_result_edit,
1134
+ signal: deps.signal || undefined,
1135
+ hook: "tool_result_edit",
1136
+ label: "pipeline-analysis"
1137
+ });
1138
+ if (!dispatchOutcome)
1139
+ return;
1140
+ if (dispatchOutcome.crashed) {
1141
+ return dispatchOutcome.response;
1142
+ }
1143
+ const result = dispatchOutcome.result;
1144
+ let autofixNewlyQueued = false;
1145
+ if (!result.isError && bashAuthorshipConfirmed && autofixMode === "deferred" && nodeFs.existsSync(filePath)) {
1146
+ autofixNewlyQueued = runtime.deferMutation?.call(runtime, filePath, dispatchCwd, event.toolName, turnStateCwd, "autofix", deps.sessionId, resolutionBasis) ?? false;
1147
+ dbg(`tool_result: queued deferred autofix for ${filePath}`);
1148
+ }
1149
+ let formatQueued = false;
1150
+ if (!result.isError && bashAuthorshipConfirmed && !getFlag("no-autoformat", filePath) && (autofixMode === "deferred" || !getFlag("immediate-format")) && nodeFs.existsSync(filePath)) {
1151
+ const isNewlyQueued = runtime.deferFormat(filePath, dispatchCwd, event.toolName, turnStateCwd, deps.sessionId, resolutionBasis);
1152
+ formatQueued = true;
1153
+ dbg(`tool_result: queued deferred format for ${filePath}`);
1154
+ logLatency({
1155
+ type: "phase",
1156
+ toolName: event.toolName,
1157
+ filePath,
1158
+ phase: "deferred_format_queued",
1159
+ durationMs: 0,
1160
+ metadata: { cwd: dispatchCwd }
1161
+ });
1162
+ if (isNewlyQueued || autofixNewlyQueued) {
1163
+ publishFormatQueued({
1164
+ filePath,
1165
+ cwd: dispatchCwd,
1166
+ tool: mutation.kind,
1167
+ dbg,
1168
+ kinds: autofixMode === "deferred" ? ["autofix", "format"] : ["format"]
1169
+ });
1170
+ }
1171
+ }
1172
+ if (autofixNewlyQueued && !formatQueued) {
1173
+ publishFormatQueued({
1174
+ filePath,
1175
+ cwd: dispatchCwd,
1176
+ tool: mutation.kind,
1177
+ kinds: ["autofix"],
1178
+ dbg
1179
+ });
1180
+ }
1181
+ for (const changedFile of result.changedFiles ?? []) {
1182
+ const resolvedChanged = path.resolve(changedFile);
1183
+ invalidateFormatterCacheForPath(resolvedChanged);
1184
+ if (!nodeFs.existsSync(resolvedChanged))
1185
+ continue;
1186
+ recordProjectChange({
1187
+ runtime,
1188
+ cwd: turnStateCwd,
1189
+ filePath: resolvedChanged,
1190
+ source: "autofix",
1191
+ dbg
1192
+ });
1193
+ if (pathsEqual(path.resolve(turnStateCwd, changedFile), path.resolve(filePath)))
1194
+ continue;
1195
+ try {
1196
+ const content = nodeFs.readFileSync(resolvedChanged, "utf-8");
1197
+ const lineCount = content.split(`
1198
+ `).length;
1199
+ const hasImports = /^import\s/m.test(content);
1200
+ cacheManager.addModifiedRange(resolvedChanged, { start: 1, end: lineCount }, hasImports, turnStateCwd);
1201
+ dbg(`tool_result: tracking dm-lens side-effect change for ${resolvedChanged}`);
1202
+ } catch (err) {
1203
+ dbg(`tool_result: side-effect tracking failed for ${resolvedChanged}: ${err}`);
1204
+ }
1205
+ }
1206
+ if (result.cascadePromise) {
1207
+ runtime.appendCascadePromise(result.cascadePromise);
1208
+ }
1209
+ if (result.actionableWarnings?.length) {
1210
+ runtime.recordActionableWarnings(result.actionableWarnings);
1211
+ }
1212
+ if (result.codeQualityWarnings?.length) {
1213
+ runtime.recordCodeQualityWarnings(result.codeQualityWarnings);
1214
+ }
1215
+ if (getFlag("lens-turn-summary")) {
1216
+ if (result.diagnostics?.length) {
1217
+ for (const d of result.diagnostics) {
1218
+ runtime.turnSummary.recordDiagnostic(d.filePath || filePath, {
1219
+ tool: d.tool,
1220
+ ruleId: d.rule ?? d.code,
1221
+ severity: d.severity,
1222
+ line: d.line,
1223
+ description: d.message
1224
+ });
1225
+ }
1226
+ }
1227
+ if (result.fixedCount && result.fixedCount > 0) {
1228
+ for (const label of result.autofixTools ?? []) {
1229
+ const [tool, countStr] = label.split(":");
1230
+ const count = Number.parseInt(countStr ?? "", 10);
1231
+ runtime.turnSummary.recordAutofix(filePath, {
1232
+ tool: tool || label,
1233
+ description: Number.isFinite(count) && count > 0 ? `${count} issue(s) fixed` : undefined
1234
+ });
1235
+ }
1236
+ }
1237
+ if (result.formattersUsed?.length) {
1238
+ for (const tool of result.formattersUsed) {
1239
+ runtime.turnSummary.recordFormat(filePath, { tool });
1240
+ }
1241
+ }
1242
+ }
1243
+ if (result.inlineBlockerSummary) {
1244
+ runtime.recordInlineBlockers(filePath, result.inlineBlockerSummary, writeIndex, result.inlineBlockerSources, result.inlineBlockerLines, result.inlineBlockerFileContent, result.inlineBlockerDiagnostics);
1245
+ } else {
1246
+ runtime.clearInlineBlockers(filePath);
1247
+ }
1248
+ runtime.updateGitGuardStatus(result.hasBlockers, result.output);
1249
+ if (getFlag("lens-guard")) {
1250
+ syncGitGuardRecord(runtime, cacheManager, turnStateCwd, filePath);
1251
+ if (result.isError && !result.hasBlockers) {
1252
+ runtime.markGitGuardCacheUnknown("pipeline_error");
1253
+ }
1254
+ }
1255
+ if (result.isError) {
1256
+ return {
1257
+ content: [...event.content, { type: "text", text: result.output }],
1258
+ isError: true
1259
+ };
1260
+ }
1261
+ let output = result.output;
1262
+ if (behaviorWarnings.length > 0 && !result.hasBlockers) {
1263
+ output += `
1264
+
1265
+ ${formatBehaviorWarnings(behaviorWarnings)}`;
1266
+ }
1267
+ const totalMs = Date.now() - toolResultStart;
1268
+ logLatency({
1269
+ type: "tool_result",
1270
+ toolName: event.toolName,
1271
+ filePath,
1272
+ durationMs: totalMs,
1273
+ result: output ? "completed" : "no_output"
1274
+ });
1275
+ runtime.reportedThisTurn.add(filePath);
1276
+ const postMutation = result.postMutation;
1277
+ const attachmentText = postMutation ? `dm-lens applied autofix to ${postMutation.filePath}. The following full content is authoritative for subsequent edits:
1278
+
1279
+ ${postMutation.content}` : "";
1280
+ const contentBytes = postMutation ? Buffer.byteLength(postMutation.content, "utf-8") : 0;
1281
+ const withinPerFileCap = contentBytes <= AUTHORITATIVE_CONTENT_MAX_BYTES;
1282
+ const budget = deps._attachmentBudget;
1283
+ const withinSharedBudget = !budget || Buffer.byteLength(attachmentText, "utf-8") <= budget.remaining;
1284
+ const attachAuthoritativeContent = postMutation !== undefined && withinPerFileCap && withinSharedBudget;
1285
+ const attachmentDecision = !postMutation ? "none" : attachAuthoritativeContent ? "attached" : withinPerFileCap ? "aggregate-budget-degraded" : "size-capped";
1286
+ const notice = result.postAutofixNotice ?? (postMutation ? { targetPath: postMutation.filePath, changedFiles: [] } : undefined);
1287
+ if (postMutation && attachAuthoritativeContent && budget) {
1288
+ budget.remaining -= Buffer.byteLength(attachmentText, "utf-8");
1289
+ }
1290
+ if (postMutation || notice) {
1291
+ logLatency({
1292
+ type: "phase",
1293
+ phase: "authoritative_content_attachment_decision",
1294
+ filePath: postMutation?.filePath ?? filePath,
1295
+ durationMs: 0,
1296
+ metadata: {
1297
+ path: postMutation?.filePath ?? filePath,
1298
+ bytes: contentBytes,
1299
+ decision: attachmentDecision
1300
+ }
1301
+ });
1302
+ }
1303
+ if (postMutation) {
1304
+ noteAuthoritativeContentAttachment(postMutation.filePath, attachAuthoritativeContent);
1305
+ }
1306
+ const returnedContent = attachAuthoritativeContent ? [...event.content, { type: "text", text: attachmentText }] : event.content;
1307
+ if (notice) {
1308
+ output = `${output ? `${output}
1309
+
1310
+ ` : ""}${renderPostAutofixNotice(notice, attachmentDecision)}`;
1311
+ }
1312
+ if (!output && !result.postMutation)
1313
+ return;
1314
+ return {
1315
+ content: output ? [...returnedContent, { type: "text", text: output }] : returnedContent
1316
+ };
1317
+ }