@duckmind/dm-linux-x64 0.65.5 → 0.65.7

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,1178 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { Worker } from "node:worker_threads";
5
+ import { gunzipSync, gzipSync } from "node:zlib";
6
+ import { writeFileAtomic } from "./atomic-write.js";
7
+ import { BoundedFifoMap } from "./bounded-cache.js";
8
+ import { getProjectDataDir } from "./file-utils.js";
9
+ import { incrementDegradationCount } from "./degradation-ledger.js";
10
+ import { readJsonCache } from "./json-cache-read.js";
11
+ import { logLatency } from "./latency-logger.js";
12
+ import { normalizeMapKey } from "./path-utils.js";
13
+ import { fingerprintProjectSnapshotJson } from "./project-snapshot-fingerprint.js";
14
+ import { detectProjectConventions } from "./project-conventions.js";
15
+ import { deserializeWordIndex, serializeWordIndex } from "./word-index.js";
16
+ export const PROJECT_SNAPSHOT_VERSION = 2;
17
+ function parseSequenceIndex(value) {
18
+ if (!value || typeof value !== "object")
19
+ return;
20
+ const index = value;
21
+ if (typeof index.projectSeq !== "number")
22
+ return;
23
+ if (!Array.isArray(index.fileSeqByPath))
24
+ return;
25
+ const fileSeqByPath = index.fileSeqByPath.filter((entry) => Array.isArray(entry) && typeof entry[0] === "string" && typeof entry[1] === "number");
26
+ return { projectSeq: index.projectSeq, fileSeqByPath };
27
+ }
28
+ export function getProjectSnapshotPath(cwd) {
29
+ return path.join(getProjectDataDir(cwd), "cache", "project-snapshot.json.gz");
30
+ }
31
+ export function getProjectSnapshotLegacyPath(cwd) {
32
+ return path.join(getProjectDataDir(cwd), "cache", "project-snapshot.json");
33
+ }
34
+ export function getProjectSnapshotMetaPath(cwd) {
35
+ return path.join(getProjectDataDir(cwd), "cache", "project-snapshot.meta.json");
36
+ }
37
+ export function isProjectSnapshotFresh(snapshot, currentProjectSeq) {
38
+ return !!snapshot && snapshot.version === PROJECT_SNAPSHOT_VERSION && snapshot.seq === currentProjectSeq;
39
+ }
40
+ function parseSnapshot(value) {
41
+ if (!value || typeof value !== "object")
42
+ return null;
43
+ const snapshot = value;
44
+ if (snapshot.version !== PROJECT_SNAPSHOT_VERSION)
45
+ return null;
46
+ if (typeof snapshot.projectRoot !== "string")
47
+ return null;
48
+ if (typeof snapshot.generatedAt !== "string")
49
+ return null;
50
+ if (typeof snapshot.seq !== "number")
51
+ return null;
52
+ if (!Array.isArray(snapshot.cachedExports))
53
+ return null;
54
+ return {
55
+ version: PROJECT_SNAPSHOT_VERSION,
56
+ projectRoot: snapshot.projectRoot,
57
+ generatedAt: snapshot.generatedAt,
58
+ seq: snapshot.seq,
59
+ files: snapshot.files ?? {},
60
+ symbols: snapshot.symbols ?? {},
61
+ reverseDeps: snapshot.reverseDeps ?? {},
62
+ cachedExports: snapshot.cachedExports.filter((entry) => Array.isArray(entry) && typeof entry[0] === "string" && typeof entry[1] === "string"),
63
+ sequenceIndex: parseSequenceIndex(snapshot.sequenceIndex),
64
+ wordIndex: snapshot.wordIndex,
65
+ projectRulesScan: snapshot.projectRulesScan,
66
+ startupScan: snapshot.startupScan,
67
+ languageProfile: snapshot.languageProfile,
68
+ conventions: snapshot.conventions
69
+ };
70
+ }
71
+ function parseSnapshotMeta(value) {
72
+ if (!value || typeof value !== "object")
73
+ return null;
74
+ const meta = value;
75
+ if (typeof meta.version !== "number")
76
+ return null;
77
+ if (typeof meta.seq !== "number")
78
+ return null;
79
+ return {
80
+ timestamp: typeof meta.timestamp === "string" ? meta.timestamp : "",
81
+ version: meta.version,
82
+ seq: meta.seq,
83
+ fingerprint: typeof meta.fingerprint === "string" && /^[a-f0-9]{64}$/.test(meta.fingerprint) ? meta.fingerprint : undefined,
84
+ gzBytes: typeof meta.gzBytes === "number" && Number.isInteger(meta.gzBytes) && meta.gzBytes > 0 ? meta.gzBytes : undefined,
85
+ sequenceIndex: parseSequenceIndex(meta.sequenceIndex)
86
+ };
87
+ }
88
+ export function readProjectSnapshotMeta(cwd) {
89
+ const meta = readJsonCache(getProjectSnapshotMetaPath(cwd), (parsed) => parseSnapshotMeta(parsed) ?? undefined);
90
+ return meta ?? null;
91
+ }
92
+ export function isProjectSnapshotMetaStale(meta, currentProjectSeq) {
93
+ return meta.version !== PROJECT_SNAPSHOT_VERSION || meta.seq !== currentProjectSeq;
94
+ }
95
+ export const SNAPSHOT_PARSE_CACHE_MAX = 4;
96
+ const SNAPSHOT_PARSE_CACHE_MAX_BYTES = 24 * 1024 * 1024;
97
+ const snapshotParseCache = new BoundedFifoMap(SNAPSHOT_PARSE_CACHE_MAX);
98
+ function withoutWordIndex(snapshot) {
99
+ if (!snapshot?.wordIndex)
100
+ return snapshot;
101
+ const { wordIndex: _releasedPostings, ...stripped } = snapshot;
102
+ return stripped;
103
+ }
104
+ function cacheParsedSnapshot(snapshotPath, entry) {
105
+ snapshotParseCache.delete(snapshotPath);
106
+ snapshotParseCache.set(snapshotPath, entry);
107
+ }
108
+ const authoritativeSnapshots = new Map;
109
+ export const PROJECT_SNAPSHOT_MAX_WARM_ROOTS = 8;
110
+ const PROJECT_SNAPSHOT_IDLE_EVICT_MS_DEFAULT = 20 * 60000;
111
+ function projectSnapshotIdleEvictMs() {
112
+ const value = Number.parseInt(process.env.DM_LENS_PROJECT_SNAPSHOT_IDLE_EVICT_MS ?? "", 10);
113
+ return Number.isSafeInteger(value) && value > 0 ? value : PROJECT_SNAPSHOT_IDLE_EVICT_MS_DEFAULT;
114
+ }
115
+ function clearAuthoritativeSnapshotTimer(entry) {
116
+ if (entry.idleTimer)
117
+ clearTimeout(entry.idleTimer);
118
+ entry.idleTimer = undefined;
119
+ }
120
+ function deleteAuthoritativeSnapshot(key) {
121
+ const entry = authoritativeSnapshots.get(key);
122
+ if (entry)
123
+ clearAuthoritativeSnapshotTimer(entry);
124
+ authoritativeSnapshots.delete(key);
125
+ }
126
+ function scheduleAuthoritativeSnapshotEviction(key, entry) {
127
+ clearAuthoritativeSnapshotTimer(entry);
128
+ const generation = entry.lastUsedAt;
129
+ entry.idleTimer = setTimeout(() => {
130
+ entry.idleTimer = undefined;
131
+ if (authoritativeSnapshots.get(key) !== entry || entry.lastUsedAt !== generation)
132
+ return;
133
+ deleteAuthoritativeSnapshot(key);
134
+ }, projectSnapshotIdleEvictMs());
135
+ entry.idleTimer.unref?.();
136
+ }
137
+ function touchAuthoritativeSnapshot(key, entry) {
138
+ entry.lastUsedAt = Date.now();
139
+ scheduleAuthoritativeSnapshotEviction(key, entry);
140
+ }
141
+ function enforceAuthoritativeSnapshotCap() {
142
+ while (authoritativeSnapshots.size > PROJECT_SNAPSHOT_MAX_WARM_ROOTS) {
143
+ const victim = [...authoritativeSnapshots.entries()].sort(([, a], [, b]) => a.lastUsedAt - b.lastUsedAt)[0];
144
+ if (!victim)
145
+ return;
146
+ clearAuthoritativeSnapshotTimer(victim[1]);
147
+ deleteAuthoritativeSnapshot(victim[0]);
148
+ }
149
+ }
150
+ export function _getAuthoritativeSnapshotCacheKeysForTests() {
151
+ return [...authoritativeSnapshots.entries()].sort(([, a], [, b]) => a.lastUsedAt - b.lastUsedAt).map(([key]) => key);
152
+ }
153
+ export function _resetProjectSnapshotParseCacheForTests() {
154
+ snapshotParseCache.clear();
155
+ for (const entry of authoritativeSnapshots.values())
156
+ clearAuthoritativeSnapshotTimer(entry);
157
+ authoritativeSnapshots.clear();
158
+ }
159
+ export function _projectSnapshotParseCacheRetainsWordIndexForTests() {
160
+ return [...snapshotParseCache.values()].some((entry) => entry.snapshot?.wordIndex !== undefined);
161
+ }
162
+ function resolveSnapshotBodyPath(cwd) {
163
+ const gzPath = getProjectSnapshotPath(cwd);
164
+ try {
165
+ const stat = fs.statSync(gzPath);
166
+ return { path: gzPath, gz: true, mtimeMs: stat.mtimeMs, size: stat.size };
167
+ } catch {}
168
+ const legacyPath = getProjectSnapshotLegacyPath(cwd);
169
+ try {
170
+ const stat = fs.statSync(legacyPath);
171
+ return {
172
+ path: legacyPath,
173
+ gz: false,
174
+ mtimeMs: stat.mtimeMs,
175
+ size: stat.size
176
+ };
177
+ } catch {
178
+ return null;
179
+ }
180
+ }
181
+ let _snapshotBodyReadCountForTests = 0;
182
+ export function getSnapshotBodyReadCountForTests() {
183
+ return _snapshotBodyReadCountForTests;
184
+ }
185
+ export function resetSnapshotBodyReadCountForTests() {
186
+ _snapshotBodyReadCountForTests = 0;
187
+ }
188
+ function readSnapshotBody(bodyPath, gz) {
189
+ _snapshotBodyReadCountForTests++;
190
+ if (!gz) {
191
+ const snapshot = readJsonCache(bodyPath, (parsed) => parseSnapshot(parsed) ?? undefined) ?? null;
192
+ let rawBytes = 0;
193
+ try {
194
+ rawBytes = fs.statSync(bodyPath).size;
195
+ } catch {}
196
+ return { snapshot, rawBytes };
197
+ }
198
+ try {
199
+ const json = gunzipSync(fs.readFileSync(bodyPath)).toString("utf-8");
200
+ const snapshot = parseSnapshot(JSON.parse(json)) ?? null;
201
+ return { snapshot, rawBytes: Buffer.byteLength(json) };
202
+ } catch (err) {
203
+ logLatency({
204
+ type: "phase",
205
+ phase: "project_snapshot_body_corrupt",
206
+ filePath: bodyPath,
207
+ durationMs: 0,
208
+ metadata: { error: err instanceof Error ? err.message : String(err) }
209
+ });
210
+ return { snapshot: null, rawBytes: 0 };
211
+ }
212
+ }
213
+ function skipJsonValue(text, start) {
214
+ let i = start;
215
+ while (i < text.length && /\s/.test(text[i]))
216
+ i++;
217
+ const ch = text[i];
218
+ if (ch === '"') {
219
+ i++;
220
+ while (i < text.length) {
221
+ if (text[i] === "\\") {
222
+ i += 2;
223
+ continue;
224
+ }
225
+ if (text[i] === '"') {
226
+ i++;
227
+ break;
228
+ }
229
+ i++;
230
+ }
231
+ return i;
232
+ }
233
+ if (ch === "{" || ch === "[") {
234
+ const open = ch;
235
+ const close = open === "{" ? "}" : "]";
236
+ let depth = 0;
237
+ let inString = false;
238
+ for (;i < text.length; i++) {
239
+ const c = text[i];
240
+ if (inString) {
241
+ if (c === "\\") {
242
+ i++;
243
+ continue;
244
+ }
245
+ if (c === '"')
246
+ inString = false;
247
+ continue;
248
+ }
249
+ if (c === '"') {
250
+ inString = true;
251
+ continue;
252
+ }
253
+ if (c === open)
254
+ depth++;
255
+ else if (c === close) {
256
+ depth--;
257
+ if (depth === 0) {
258
+ i++;
259
+ break;
260
+ }
261
+ }
262
+ }
263
+ return i;
264
+ }
265
+ while (i < text.length && !",}]".includes(text[i]))
266
+ i++;
267
+ return i;
268
+ }
269
+ function stripTopLevelJsonKeys(text, keysToStrip) {
270
+ const objStart = text.indexOf("{");
271
+ if (objStart === -1)
272
+ return text;
273
+ let out = text.slice(0, objStart + 1);
274
+ let i = objStart + 1;
275
+ let wroteField = false;
276
+ while (i < text.length) {
277
+ while (i < text.length && /\s/.test(text[i]))
278
+ i++;
279
+ if (text[i] === "}" || i >= text.length) {
280
+ out += text.slice(i);
281
+ break;
282
+ }
283
+ if (text[i] === ",") {
284
+ i++;
285
+ continue;
286
+ }
287
+ const keyStart = i;
288
+ const keyTextEnd = skipJsonValue(text, keyStart);
289
+ let key;
290
+ try {
291
+ key = JSON.parse(text.slice(keyStart, keyTextEnd));
292
+ } catch {
293
+ return text;
294
+ }
295
+ let j = keyTextEnd;
296
+ while (j < text.length && /\s/.test(text[j]))
297
+ j++;
298
+ const valueStart = j + 1;
299
+ const valueEnd = skipJsonValue(text, valueStart);
300
+ if (!keysToStrip.has(key)) {
301
+ out += (wroteField ? "," : "") + text.slice(keyStart, valueEnd);
302
+ wroteField = true;
303
+ }
304
+ i = valueEnd;
305
+ }
306
+ return out;
307
+ }
308
+ export function _stripTopLevelJsonKeysForTests(text, keysToStrip) {
309
+ return stripTopLevelJsonKeys(text, new Set(keysToStrip));
310
+ }
311
+ const HEAVY_SNAPSHOT_KEYS = new Set([
312
+ "wordIndex",
313
+ "files",
314
+ "symbols",
315
+ "reverseDeps"
316
+ ]);
317
+ const NARROW_DIGEST_HEAVY_KEY_LITERALS = [
318
+ "wordIndex",
319
+ "files",
320
+ "symbols",
321
+ "reverseDeps"
322
+ ];
323
+ let _lastNarrowParseDigestForTests;
324
+ export function getLastNarrowParseDigestForTests() {
325
+ return _lastNarrowParseDigestForTests;
326
+ }
327
+ export function resetLastNarrowParseDigestForTests() {
328
+ _lastNarrowParseDigestForTests = undefined;
329
+ }
330
+ function parseExportsAndRulesOnly(json) {
331
+ const narrowed = stripTopLevelJsonKeys(json, HEAVY_SNAPSHOT_KEYS);
332
+ _lastNarrowParseDigestForTests = {
333
+ length: narrowed.length,
334
+ containsHeavyKey: NARROW_DIGEST_HEAVY_KEY_LITERALS.some((key) => narrowed.includes(`"${key}":`))
335
+ };
336
+ const parsed = JSON.parse(narrowed);
337
+ if (parsed.version !== PROJECT_SNAPSHOT_VERSION)
338
+ return null;
339
+ if (typeof parsed.seq !== "number")
340
+ return null;
341
+ if (!Array.isArray(parsed.cachedExports))
342
+ return null;
343
+ return {
344
+ version: PROJECT_SNAPSHOT_VERSION,
345
+ seq: parsed.seq,
346
+ cachedExports: parsed.cachedExports.filter((entry) => Array.isArray(entry) && typeof entry[0] === "string" && typeof entry[1] === "string"),
347
+ projectRulesScan: parsed.projectRulesScan
348
+ };
349
+ }
350
+ function readSnapshotExportsAndRulesBody(bodyPath, gz) {
351
+ try {
352
+ const json = gz ? gunzipSync(fs.readFileSync(bodyPath)).toString("utf-8") : fs.readFileSync(bodyPath, "utf-8");
353
+ return parseExportsAndRulesOnly(json);
354
+ } catch (err) {
355
+ logLatency({
356
+ type: "phase",
357
+ phase: "project_snapshot_body_corrupt",
358
+ filePath: bodyPath,
359
+ durationMs: 0,
360
+ metadata: {
361
+ error: err instanceof Error ? err.message : String(err),
362
+ narrow: true
363
+ }
364
+ });
365
+ return null;
366
+ }
367
+ }
368
+ export function loadProjectSnapshotExportsAndRules(cwd) {
369
+ const key = normalizeMapKey(cwd);
370
+ const body = resolveSnapshotBodyPath(cwd);
371
+ const authoritative = authoritativeSnapshots.get(key);
372
+ if (authoritative) {
373
+ const notSuperseded = body === null || body.mtimeMs <= authoritative.knownMtime && body.size === authoritative.knownSize;
374
+ if (notSuperseded) {
375
+ const { version, seq, cachedExports, projectRulesScan } = authoritative.snapshot;
376
+ return { version, seq, cachedExports, projectRulesScan };
377
+ }
378
+ }
379
+ if (!body)
380
+ return null;
381
+ return readSnapshotExportsAndRulesBody(body.path, body.gz);
382
+ }
383
+ function loadProjectSnapshotInternal(cwd, requireWordIndex) {
384
+ const key = normalizeMapKey(cwd);
385
+ const body = resolveSnapshotBodyPath(cwd);
386
+ const authoritative = authoritativeSnapshots.get(key);
387
+ if (authoritative) {
388
+ const notSuperseded = body === null || body.mtimeMs <= authoritative.knownMtime && body.size === authoritative.knownSize;
389
+ if (notSuperseded) {
390
+ touchAuthoritativeSnapshot(key, authoritative);
391
+ return authoritative.snapshot;
392
+ }
393
+ deleteAuthoritativeSnapshot(key);
394
+ }
395
+ if (!body) {
396
+ snapshotParseCache.delete(getProjectSnapshotPath(cwd));
397
+ return null;
398
+ }
399
+ const cacheKey = body.path;
400
+ const cached = snapshotParseCache.get(cacheKey);
401
+ if (cached && cached.mtimeMs === body.mtimeMs && cached.size === body.size) {
402
+ if (!requireWordIndex || !cached.snapshot || cached.snapshot.wordIndex) {
403
+ return cached.snapshot;
404
+ }
405
+ }
406
+ const { snapshot, rawBytes } = readSnapshotBody(body.path, body.gz);
407
+ const cacheSnapshot = withoutWordIndex(snapshot);
408
+ if (rawBytes > 0 && (rawBytes <= SNAPSHOT_PARSE_CACHE_MAX_BYTES || snapshot?.wordIndex)) {
409
+ cacheParsedSnapshot(cacheKey, {
410
+ mtimeMs: body.mtimeMs,
411
+ size: body.size,
412
+ snapshot: cacheSnapshot
413
+ });
414
+ } else {
415
+ snapshotParseCache.delete(cacheKey);
416
+ }
417
+ return snapshot;
418
+ }
419
+ export function loadProjectSnapshot(cwd) {
420
+ return loadProjectSnapshotInternal(cwd, true);
421
+ }
422
+ export function loadProjectSnapshotWithoutWordIndex(cwd) {
423
+ return loadProjectSnapshotInternal(cwd, false);
424
+ }
425
+ const _snapshotGenerationStates = new Map;
426
+ const _successfulSnapshotPersists = new BoundedFifoMap(PROJECT_SNAPSHOT_MAX_WARM_ROOTS);
427
+ const _failedSnapshotPersists = new BoundedFifoMap(PROJECT_SNAPSHOT_MAX_WARM_ROOTS);
428
+ const _activeSnapshotPersists = new Map;
429
+ const _queuedSnapshotPersists = new Map;
430
+ const _snapshotWorkerRequests = new Map;
431
+ let _snapshotPersistWorker;
432
+ let _snapshotWorkerRequestId = 0;
433
+ let _snapshotWorkerDisabled = false;
434
+ let _snapshotGenerationGateEnabledForTests = true;
435
+ let _snapshotPromotionSeamForTests;
436
+ let _lastSnapshotPersistErrorForTests;
437
+ let _snapshotExiting = false;
438
+ let _snapshotWorkerBodyWritesForTests = 0;
439
+ function snapshotWorkerEnabled() {
440
+ const raw = process.env.DM_LENS_SNAPSHOT_PERSIST_SYNC;
441
+ return !(raw === "1" || raw === "true");
442
+ }
443
+ function pendingSnapshotIsCurrent(pending) {
444
+ return !_snapshotGenerationGateEnabledForTests || _snapshotGenerationStates.get(pending.key)?.generation === pending.generation;
445
+ }
446
+ function rememberSuccessfulSnapshotPersist(key, record) {
447
+ _successfulSnapshotPersists.delete(key);
448
+ _successfulSnapshotPersists.set(key, record);
449
+ }
450
+ function assessSnapshotBodyIntegrity(meta, body) {
451
+ if (meta.gzBytes === undefined) {
452
+ return { outcome: "legacy-meta", actualBytes: body.size };
453
+ }
454
+ if (!body.gz || body.size !== meta.gzBytes) {
455
+ return {
456
+ outcome: "size-mismatch",
457
+ expectedGzBytes: meta.gzBytes,
458
+ actualBytes: body.size
459
+ };
460
+ }
461
+ return {
462
+ outcome: "ok",
463
+ expectedGzBytes: meta.gzBytes,
464
+ actualBytes: body.size
465
+ };
466
+ }
467
+ function noteSnapshotBodyIntegrityWithheld(args) {
468
+ incrementDegradationCount({
469
+ kind: "snapshot-integrity",
470
+ subject: args.gzPath,
471
+ reason: args.verdict
472
+ });
473
+ logLatency({
474
+ type: "phase",
475
+ phase: "project_snapshot_body_integrity",
476
+ filePath: args.gzPath,
477
+ durationMs: 0,
478
+ metadata: {
479
+ outcome: "dedupe_withheld",
480
+ reason: args.verdict,
481
+ ...args.seq !== undefined ? { seq: args.seq } : {},
482
+ ...args.expectedGzBytes === undefined ? {} : { expectedGzBytes: args.expectedGzBytes },
483
+ actualBytes: args.actualBytes
484
+ }
485
+ });
486
+ }
487
+ function noteSnapshotSkipRefused(args) {
488
+ logLatency({
489
+ type: "phase",
490
+ phase: "project_snapshot_body_integrity",
491
+ filePath: args.gzPath,
492
+ durationMs: 0,
493
+ metadata: {
494
+ outcome: "skip_refused_rewrite",
495
+ reason: args.verdict,
496
+ seq: args.seq
497
+ }
498
+ });
499
+ }
500
+ function snapshotPersistBaselinesFor(cwd, key) {
501
+ const local = _successfulSnapshotPersists.get(key);
502
+ const meta = readProjectSnapshotMeta(cwd);
503
+ const body = resolveSnapshotBodyPath(cwd);
504
+ if (!meta?.fingerprint || !body) {
505
+ if (!body)
506
+ _successfulSnapshotPersists.delete(key);
507
+ return { fingerprints: [] };
508
+ }
509
+ const integrity = assessSnapshotBodyIntegrity(meta, body);
510
+ if (integrity.outcome !== "ok") {
511
+ noteSnapshotBodyIntegrityWithheld({
512
+ gzPath: getProjectSnapshotPath(cwd),
513
+ verdict: integrity.outcome,
514
+ seq: meta.seq,
515
+ expectedGzBytes: integrity.expectedGzBytes,
516
+ actualBytes: integrity.actualBytes
517
+ });
518
+ return { fingerprints: [] };
519
+ }
520
+ const durable = {
521
+ seq: meta.seq,
522
+ fingerprint: meta.fingerprint,
523
+ generatedAt: meta.timestamp,
524
+ generation: _snapshotGenerationStates.get(key)?.generation ?? 0,
525
+ gzBytes: meta.gzBytes
526
+ };
527
+ const fingerprints = [durable.fingerprint];
528
+ if (local && local.fingerprint !== durable.fingerprint) {
529
+ fingerprints.push(local.fingerprint);
530
+ }
531
+ return { durable, fingerprints, integrity: "ok" };
532
+ }
533
+ function seedSnapshotPersistBaselineFromDurable(key, durable) {
534
+ if (!durable || _successfulSnapshotPersists.has(key))
535
+ return;
536
+ rememberSuccessfulSnapshotPersist(key, durable);
537
+ }
538
+ function writeProjectSnapshotMeta(metaPath, snapshot, bodyRecord) {
539
+ writeFileAtomic(metaPath, JSON.stringify({
540
+ timestamp: bodyRecord?.generatedAt ?? snapshot.generatedAt,
541
+ version: snapshot.version,
542
+ seq: snapshot.seq,
543
+ ...bodyRecord ? {
544
+ fingerprint: bodyRecord.fingerprint,
545
+ ...bodyRecord.gzBytes === undefined ? {} : { gzBytes: bodyRecord.gzBytes }
546
+ } : {},
547
+ ...snapshot.sequenceIndex ? { sequenceIndex: snapshot.sequenceIndex } : {}
548
+ }), { bestEffort: false });
549
+ }
550
+ function recordSnapshotPersistFailure(pending, error, bodyPersisted = false) {
551
+ _lastSnapshotPersistErrorForTests = error;
552
+ _failedSnapshotPersists.set(pending.key, {
553
+ seq: pending.snapshot.seq,
554
+ generation: pending.generation
555
+ });
556
+ deleteAuthoritativeSnapshot(pending.key);
557
+ logLatency({
558
+ type: "phase",
559
+ phase: "project_snapshot_persist_failed",
560
+ filePath: pending.gzPath,
561
+ durationMs: 0,
562
+ metadata: {
563
+ error,
564
+ seq: pending.snapshot.seq,
565
+ outcome: bodyPersisted ? "metadata_repair_required" : "failed",
566
+ ...bodyPersisted ? { bodyPersisted: true } : {}
567
+ }
568
+ });
569
+ }
570
+ function logSnapshotPersistSuccess(pending, fingerprint, stats) {
571
+ rememberSuccessfulSnapshotPersist(pending.key, {
572
+ seq: pending.snapshot.seq,
573
+ fingerprint,
574
+ generatedAt: pending.snapshot.generatedAt,
575
+ generation: pending.generation,
576
+ rawBytes: stats.rawBytes,
577
+ gzBytes: stats.gzBytes
578
+ });
579
+ _failedSnapshotPersists.delete(pending.key);
580
+ logLatency({
581
+ type: "phase",
582
+ phase: "project_snapshot_persist",
583
+ filePath: pending.gzPath,
584
+ durationMs: stats.serializeMs + stats.writeMs,
585
+ metadata: { seq: pending.snapshot.seq, outcome: "executed", ...stats }
586
+ });
587
+ }
588
+ function logSnapshotPersistDecision(args) {
589
+ logLatency({
590
+ type: "phase",
591
+ phase: "project_snapshot_persist_decision",
592
+ filePath: getProjectSnapshotPath(args.cwd),
593
+ durationMs: 0,
594
+ metadata: {
595
+ seq: args.seq,
596
+ decision: args.decision,
597
+ ...args.fingerprint ? { fingerprint: args.fingerprint.slice(0, 12) } : {},
598
+ ...args.avoidedRawBytes === undefined ? {} : { avoidedRawBytes: args.avoidedRawBytes },
599
+ ...args.avoidedGzipBytes === undefined ? {} : { avoidedGzipBytes: args.avoidedGzipBytes }
600
+ }
601
+ });
602
+ }
603
+ function reconcileAuthoritativeAfterWrite(pending, rawBytes) {
604
+ const entry = authoritativeSnapshots.get(pending.key);
605
+ if (!entry || entry.snapshot !== pending.snapshot)
606
+ return;
607
+ if (pending.snapshot.wordIndex) {
608
+ try {
609
+ const stat = fs.statSync(pending.gzPath);
610
+ cacheParsedSnapshot(pending.gzPath, {
611
+ mtimeMs: stat.mtimeMs,
612
+ size: stat.size,
613
+ snapshot: withoutWordIndex(pending.snapshot)
614
+ });
615
+ } catch {}
616
+ deleteAuthoritativeSnapshot(pending.key);
617
+ logLatency({
618
+ type: "phase",
619
+ phase: "project_snapshot_word_index_released",
620
+ filePath: pending.gzPath,
621
+ durationMs: 0,
622
+ metadata: { rawBytes }
623
+ });
624
+ return;
625
+ }
626
+ if (rawBytes > SNAPSHOT_PARSE_CACHE_MAX_BYTES) {
627
+ logLatency({
628
+ type: "phase",
629
+ phase: "project_snapshot_authoritative_dropped_oversized",
630
+ filePath: pending.gzPath,
631
+ durationMs: 0,
632
+ metadata: { rawBytes, maxBytes: SNAPSHOT_PARSE_CACHE_MAX_BYTES }
633
+ });
634
+ deleteAuthoritativeSnapshot(pending.key);
635
+ return;
636
+ }
637
+ try {
638
+ const stat = fs.statSync(pending.gzPath);
639
+ entry.knownMtime = stat.mtimeMs;
640
+ entry.knownSize = stat.size;
641
+ } catch {}
642
+ }
643
+ function finalizeProjectSnapshotMeta(pending, record) {
644
+ try {
645
+ writeProjectSnapshotMeta(getProjectSnapshotMetaPath(pending.cwd), pending.snapshot, record);
646
+ return true;
647
+ } catch (err) {
648
+ recordSnapshotPersistFailure(pending, err instanceof Error ? err.message : String(err), true);
649
+ return false;
650
+ }
651
+ }
652
+ function completeSnapshotPersist(pending) {
653
+ if (_activeSnapshotPersists.get(pending.key) !== pending)
654
+ return;
655
+ _activeSnapshotPersists.delete(pending.key);
656
+ if (_snapshotExiting)
657
+ return;
658
+ const queued = _queuedSnapshotPersists.get(pending.key);
659
+ if (!queued)
660
+ return;
661
+ _queuedSnapshotPersists.delete(pending.key);
662
+ dispatchSnapshotPersist(queued);
663
+ }
664
+ function writeSnapshotBodyOnMainThread(pending, reason) {
665
+ if (!pendingSnapshotIsCurrent(pending)) {
666
+ completeSnapshotPersist(pending);
667
+ return;
668
+ }
669
+ if (reason) {
670
+ logLatency({
671
+ type: "phase",
672
+ phase: "project_snapshot_worker_fallback",
673
+ filePath: pending.gzPath,
674
+ durationMs: 0,
675
+ metadata: {
676
+ reason,
677
+ seq: pending.snapshot.seq,
678
+ degraded: reason !== "exit_hook"
679
+ }
680
+ });
681
+ }
682
+ try {
683
+ const serializeStarted = performance.now();
684
+ const json = JSON.stringify(pending.snapshot);
685
+ const serializeMs = performance.now() - serializeStarted;
686
+ const rawBytes = Buffer.byteLength(json);
687
+ const fingerprint = fingerprintProjectSnapshotJson(json, pending.snapshot.generatedAt);
688
+ if (pending.dedupeFingerprints.includes(fingerprint)) {
689
+ const current = snapshotPersistBaselinesFor(pending.cwd, pending.key);
690
+ if (current.integrity === "ok") {
691
+ const prior = current.durable ?? pending.durablePersist;
692
+ if (authoritativeSnapshots.get(pending.key)?.snapshot === pending.snapshot) {
693
+ deleteAuthoritativeSnapshot(pending.key);
694
+ }
695
+ logSnapshotPersistDecision({
696
+ cwd: pending.cwd,
697
+ seq: pending.snapshot.seq,
698
+ fingerprint,
699
+ decision: "skipped_unchanged",
700
+ avoidedRawBytes: rawBytes,
701
+ avoidedGzipBytes: prior?.gzBytes
702
+ });
703
+ return;
704
+ }
705
+ if (current.integrity !== undefined) {
706
+ noteSnapshotSkipRefused({
707
+ gzPath: pending.gzPath,
708
+ verdict: current.integrity,
709
+ seq: pending.snapshot.seq
710
+ });
711
+ }
712
+ }
713
+ const writeStarted = performance.now();
714
+ const gzip = gzipSync(json);
715
+ fs.mkdirSync(path.dirname(pending.gzPath), { recursive: true });
716
+ writeFileAtomic(pending.gzPath, gzip, { bestEffort: false });
717
+ fs.rmSync(pending.legacyPath, { force: true });
718
+ const metadataFinalized = finalizeProjectSnapshotMeta(pending, {
719
+ fingerprint,
720
+ generatedAt: pending.snapshot.generatedAt,
721
+ gzBytes: gzip.byteLength
722
+ });
723
+ if (!metadataFinalized)
724
+ return;
725
+ reconcileAuthoritativeAfterWrite(pending, rawBytes);
726
+ logSnapshotPersistSuccess(pending, fingerprint, {
727
+ rawBytes,
728
+ gzBytes: gzip.byteLength,
729
+ serializeMs,
730
+ writeMs: performance.now() - writeStarted,
731
+ offloaded: false
732
+ });
733
+ if (reason)
734
+ _lastSnapshotPersistErrorForTests = reason;
735
+ } catch (err) {
736
+ recordSnapshotPersistFailure(pending, err instanceof Error ? err.message : String(err));
737
+ } finally {
738
+ completeSnapshotPersist(pending);
739
+ }
740
+ }
741
+ function dispatchMainThreadWriteThroughSeam(pending, reason) {
742
+ if (_snapshotPromotionSeamForTests) {
743
+ _snapshotPromotionSeamForTests().then(() => writeSnapshotBodyOnMainThread(pending, reason));
744
+ return;
745
+ }
746
+ writeSnapshotBodyOnMainThread(pending, reason);
747
+ }
748
+ function handleSnapshotWorkerResult(result) {
749
+ const pending = _snapshotWorkerRequests.get(result.id);
750
+ if (!pending) {
751
+ fs.rmSync(result.stagePath, { force: true });
752
+ return;
753
+ }
754
+ _snapshotWorkerRequests.delete(result.id);
755
+ if (result.error || result.rawBytes === undefined || result.gzBytes === undefined || result.serializeMs === undefined || result.writeMs === undefined || result.semanticFingerprint === undefined) {
756
+ fs.rmSync(result.stagePath, { force: true });
757
+ dispatchMainThreadWriteThroughSeam(pending, result.error ?? "invalid worker result");
758
+ return;
759
+ }
760
+ if (!result.skippedUnchanged)
761
+ _snapshotWorkerBodyWritesForTests++;
762
+ if (_snapshotGenerationGateEnabledForTests && _snapshotGenerationStates.get(pending.key)?.generation !== result.generation) {
763
+ fs.rmSync(result.stagePath, { force: true });
764
+ completeSnapshotPersist(pending);
765
+ return;
766
+ }
767
+ if (result.skippedUnchanged) {
768
+ const baselines = snapshotPersistBaselinesFor(pending.cwd, pending.key);
769
+ if (baselines.integrity !== "ok") {
770
+ if (baselines.integrity !== undefined) {
771
+ noteSnapshotSkipRefused({
772
+ gzPath: pending.gzPath,
773
+ verdict: baselines.integrity,
774
+ seq: pending.snapshot.seq
775
+ });
776
+ }
777
+ dispatchMainThreadWriteThroughSeam(pending, "snapshot body integrity regressed");
778
+ return;
779
+ }
780
+ const prior = baselines.durable ?? pending.durablePersist;
781
+ if (authoritativeSnapshots.get(pending.key)?.snapshot === pending.snapshot) {
782
+ deleteAuthoritativeSnapshot(pending.key);
783
+ }
784
+ logSnapshotPersistDecision({
785
+ cwd: pending.cwd,
786
+ seq: pending.snapshot.seq,
787
+ fingerprint: result.semanticFingerprint,
788
+ decision: "skipped_unchanged",
789
+ avoidedRawBytes: result.rawBytes,
790
+ avoidedGzipBytes: prior?.gzBytes
791
+ });
792
+ completeSnapshotPersist(pending);
793
+ return;
794
+ }
795
+ try {
796
+ fs.renameSync(result.stagePath, pending.gzPath);
797
+ fs.rmSync(pending.legacyPath, { force: true });
798
+ const metadataFinalized = finalizeProjectSnapshotMeta(pending, {
799
+ fingerprint: result.semanticFingerprint,
800
+ generatedAt: pending.snapshot.generatedAt,
801
+ gzBytes: result.gzBytes
802
+ });
803
+ if (!metadataFinalized) {
804
+ completeSnapshotPersist(pending);
805
+ return;
806
+ }
807
+ reconcileAuthoritativeAfterWrite(pending, result.rawBytes);
808
+ logSnapshotPersistSuccess(pending, result.semanticFingerprint, {
809
+ rawBytes: result.rawBytes,
810
+ gzBytes: result.gzBytes,
811
+ serializeMs: result.serializeMs,
812
+ writeMs: result.writeMs,
813
+ offloaded: true
814
+ });
815
+ completeSnapshotPersist(pending);
816
+ } catch (err) {
817
+ fs.rm(result.stagePath, { force: true }, () => {});
818
+ dispatchMainThreadWriteThroughSeam(pending, err instanceof Error ? err.message : String(err));
819
+ }
820
+ }
821
+ function dispatchSnapshotPersist(pending) {
822
+ const baselines = snapshotPersistBaselinesFor(pending.cwd, pending.key);
823
+ pending.durablePersist = baselines.durable;
824
+ pending.dedupeFingerprints = baselines.fingerprints;
825
+ seedSnapshotPersistBaselineFromDurable(pending.key, baselines.durable);
826
+ _activeSnapshotPersists.set(pending.key, pending);
827
+ if (!snapshotWorkerEnabled()) {
828
+ dispatchMainThreadWriteThroughSeam(pending, undefined);
829
+ return;
830
+ }
831
+ const worker = getSnapshotPersistWorker();
832
+ if (!worker) {
833
+ dispatchMainThreadWriteThroughSeam(pending, "persist worker unavailable");
834
+ return;
835
+ }
836
+ const id = ++_snapshotWorkerRequestId;
837
+ _snapshotWorkerRequests.set(id, pending);
838
+ const request = {
839
+ id,
840
+ generation: pending.generation,
841
+ stagePath: pending.stagePath,
842
+ data: pending.snapshot,
843
+ priorFingerprints: pending.dedupeFingerprints,
844
+ testDelayMs: undefined
845
+ };
846
+ try {
847
+ worker.postMessage(request);
848
+ } catch (err) {
849
+ _snapshotWorkerRequests.delete(id);
850
+ dispatchMainThreadWriteThroughSeam(pending, err instanceof Error ? err.message : String(err));
851
+ }
852
+ }
853
+ function handleSnapshotWorkerDeath(reason) {
854
+ _snapshotPersistWorker = undefined;
855
+ _snapshotWorkerDisabled = true;
856
+ const requests = [..._snapshotWorkerRequests.values()];
857
+ _snapshotWorkerRequests.clear();
858
+ for (const pending of requests)
859
+ dispatchMainThreadWriteThroughSeam(pending, reason);
860
+ }
861
+ function resolveSnapshotPersistWorkerPath() {
862
+ const candidates = [
863
+ new URL("./project-snapshot-persist-worker.js", import.meta.url),
864
+ new URL("./clients/project-snapshot-persist-worker.js", import.meta.url)
865
+ ];
866
+ for (const url of candidates) {
867
+ try {
868
+ const resolved = fileURLToPath(url);
869
+ if (fs.existsSync(resolved))
870
+ return resolved;
871
+ } catch {}
872
+ }
873
+ return;
874
+ }
875
+ function getSnapshotPersistWorker() {
876
+ if (_snapshotWorkerDisabled)
877
+ return;
878
+ if (_snapshotPersistWorker)
879
+ return _snapshotPersistWorker;
880
+ try {
881
+ const workerPath = resolveSnapshotPersistWorkerPath();
882
+ if (workerPath === undefined) {
883
+ handleSnapshotWorkerDeath("persist worker script not found in any layout");
884
+ return;
885
+ }
886
+ const worker = new Worker(workerPath);
887
+ worker.on("message", (result) => {
888
+ if (_snapshotPromotionSeamForTests) {
889
+ _snapshotPromotionSeamForTests().then(() => handleSnapshotWorkerResult(result));
890
+ return;
891
+ }
892
+ handleSnapshotWorkerResult(result);
893
+ });
894
+ worker.on("error", (err) => handleSnapshotWorkerDeath(err.message));
895
+ worker.on("exit", (code) => {
896
+ if (_snapshotPersistWorker === worker)
897
+ _snapshotPersistWorker = undefined;
898
+ const stranded = [..._snapshotWorkerRequests.values()];
899
+ if (stranded.length > 0) {
900
+ _snapshotWorkerRequests.clear();
901
+ for (const pending of stranded) {
902
+ dispatchMainThreadWriteThroughSeam(pending, `persist worker exited with code ${code}`);
903
+ }
904
+ }
905
+ if (code !== 0)
906
+ _snapshotWorkerDisabled = true;
907
+ });
908
+ worker.unref();
909
+ _snapshotPersistWorker = worker;
910
+ return worker;
911
+ } catch (err) {
912
+ handleSnapshotWorkerDeath(err instanceof Error ? err.message : String(err));
913
+ return;
914
+ }
915
+ }
916
+ const _sweptSnapshotStageDirs = new Set;
917
+ function sweepStaleSnapshotStageFiles(cacheDir) {
918
+ if (_sweptSnapshotStageDirs.has(cacheDir))
919
+ return;
920
+ _sweptSnapshotStageDirs.add(cacheDir);
921
+ fs.readdir(cacheDir, (err, entries) => {
922
+ if (err)
923
+ return;
924
+ const ownMarker = `.stage-${process.pid}-`;
925
+ for (const entry of entries) {
926
+ if (!entry.startsWith("project-snapshot.json.gz.stage-"))
927
+ continue;
928
+ if (entry.includes(ownMarker))
929
+ continue;
930
+ fs.rm(path.join(cacheDir, entry), { force: true }, () => {});
931
+ }
932
+ });
933
+ }
934
+ let _snapshotExitHookInstalled = false;
935
+ function ensureSnapshotPersistExitHook() {
936
+ if (_snapshotExitHookInstalled)
937
+ return;
938
+ _snapshotExitHookInstalled = true;
939
+ process.once("exit", () => {
940
+ _snapshotExiting = true;
941
+ const latestByKey = new Map;
942
+ for (const pending of _snapshotWorkerRequests.values()) {
943
+ latestByKey.set(pending.key, pending);
944
+ }
945
+ for (const pending of _queuedSnapshotPersists.values()) {
946
+ const prior = latestByKey.get(pending.key);
947
+ if (!prior || prior.generation <= pending.generation) {
948
+ latestByKey.set(pending.key, pending);
949
+ }
950
+ }
951
+ _snapshotWorkerRequests.clear();
952
+ _queuedSnapshotPersists.clear();
953
+ _activeSnapshotPersists.clear();
954
+ for (const pending of latestByKey.values()) {
955
+ if (_snapshotGenerationStates.get(pending.key)?.generation !== pending.generation)
956
+ continue;
957
+ writeSnapshotBodyOnMainThread(pending, "exit_hook");
958
+ }
959
+ _snapshotPersistWorker?.terminate();
960
+ });
961
+ }
962
+ export function saveProjectSnapshot(cwd, snapshot) {
963
+ const gzPath = getProjectSnapshotPath(cwd);
964
+ const legacyPath = getProjectSnapshotLegacyPath(cwd);
965
+ const metaPath = getProjectSnapshotMetaPath(cwd);
966
+ const cacheDir = path.dirname(gzPath);
967
+ const key = normalizeMapKey(cwd);
968
+ fs.mkdirSync(cacheDir, { recursive: true });
969
+ const baselines = snapshotPersistBaselinesFor(cwd, key);
970
+ const priorPersist = baselines.durable;
971
+ logSnapshotPersistDecision({
972
+ cwd,
973
+ seq: snapshot.seq,
974
+ decision: "requested"
975
+ });
976
+ if (_failedSnapshotPersists.delete(key)) {
977
+ logSnapshotPersistDecision({ cwd, seq: snapshot.seq, decision: "retry" });
978
+ }
979
+ if (priorPersist?.seq !== snapshot.seq) {
980
+ writeProjectSnapshotMeta(metaPath, snapshot);
981
+ }
982
+ const priorBody = resolveSnapshotBodyPath(cwd);
983
+ const knownMtime = priorBody ? priorBody.mtimeMs : Number.NEGATIVE_INFINITY;
984
+ const knownSize = priorBody ? priorBody.size : Number.NEGATIVE_INFINITY;
985
+ const authoritativeEntry = {
986
+ snapshot,
987
+ knownMtime,
988
+ knownSize,
989
+ lastUsedAt: Date.now()
990
+ };
991
+ const previousAuthoritativeEntry = authoritativeSnapshots.get(key);
992
+ if (previousAuthoritativeEntry)
993
+ clearAuthoritativeSnapshotTimer(previousAuthoritativeEntry);
994
+ authoritativeSnapshots.set(key, authoritativeEntry);
995
+ scheduleAuthoritativeSnapshotEviction(key, authoritativeEntry);
996
+ enforceAuthoritativeSnapshotCap();
997
+ snapshotParseCache.delete(gzPath);
998
+ const generationState = _snapshotGenerationStates.get(key);
999
+ const generation = generationState?.seq === snapshot.seq ? generationState.generation : (generationState?.generation ?? 0) + 1;
1000
+ _snapshotGenerationStates.set(key, { generation, seq: snapshot.seq });
1001
+ const stagePath = `${gzPath}.stage-${process.pid}-${generation}`;
1002
+ const pending = {
1003
+ key,
1004
+ cwd,
1005
+ gzPath,
1006
+ legacyPath,
1007
+ stagePath,
1008
+ snapshot,
1009
+ generation,
1010
+ durablePersist: priorPersist,
1011
+ dedupeFingerprints: baselines.fingerprints
1012
+ };
1013
+ sweepStaleSnapshotStageFiles(cacheDir);
1014
+ ensureSnapshotPersistExitHook();
1015
+ if (_activeSnapshotPersists.has(key)) {
1016
+ _queuedSnapshotPersists.set(key, pending);
1017
+ logSnapshotPersistDecision({
1018
+ cwd,
1019
+ seq: snapshot.seq,
1020
+ decision: "coalesced"
1021
+ });
1022
+ return;
1023
+ }
1024
+ dispatchSnapshotPersist(pending);
1025
+ }
1026
+ export async function waitForProjectSnapshotPersistsForTests() {
1027
+ for (let attempts = 0;attempts < 200 && (_snapshotWorkerRequests.size > 0 || _activeSnapshotPersists.size > 0 || _queuedSnapshotPersists.size > 0); attempts++) {
1028
+ await new Promise((resolve) => setTimeout(resolve, 10));
1029
+ }
1030
+ }
1031
+ export function flushProjectSnapshotPersistsForTests() {
1032
+ const requests = [..._snapshotWorkerRequests.values()];
1033
+ _snapshotWorkerRequests.clear();
1034
+ for (const pending of requests) {
1035
+ dispatchMainThreadWriteThroughSeam(pending, undefined);
1036
+ }
1037
+ }
1038
+ export async function terminateProjectSnapshotPersistWorkerForTests() {
1039
+ const worker = _snapshotPersistWorker;
1040
+ if (worker)
1041
+ await worker.terminate();
1042
+ }
1043
+ export function resetProjectSnapshotPersistWorkerForTests() {
1044
+ _snapshotWorkerDisabled = false;
1045
+ _snapshotGenerationGateEnabledForTests = true;
1046
+ _snapshotPromotionSeamForTests = undefined;
1047
+ _snapshotPersistWorker = undefined;
1048
+ _snapshotWorkerRequests.clear();
1049
+ _snapshotGenerationStates.clear();
1050
+ _successfulSnapshotPersists.clear();
1051
+ _failedSnapshotPersists.clear();
1052
+ _activeSnapshotPersists.clear();
1053
+ _queuedSnapshotPersists.clear();
1054
+ _snapshotExiting = false;
1055
+ _snapshotWorkerBodyWritesForTests = 0;
1056
+ _lastSnapshotPersistErrorForTests = undefined;
1057
+ }
1058
+ export function getProjectSnapshotPersistStateForTests(cwd) {
1059
+ const key = normalizeMapKey(cwd);
1060
+ return {
1061
+ active: _activeSnapshotPersists.has(key),
1062
+ queued: _queuedSnapshotPersists.has(key),
1063
+ successfulFingerprint: _successfulSnapshotPersists.get(key)?.fingerprint,
1064
+ workerBodyWrites: _snapshotWorkerBodyWritesForTests
1065
+ };
1066
+ }
1067
+ export function setProjectSnapshotGenerationGateForTests(enabled) {
1068
+ _snapshotGenerationGateEnabledForTests = enabled;
1069
+ }
1070
+ export function setProjectSnapshotPromotionSeamForTests(seam) {
1071
+ _snapshotPromotionSeamForTests = seam;
1072
+ }
1073
+ export function getProjectSnapshotPersistErrorForTests() {
1074
+ return _lastSnapshotPersistErrorForTests;
1075
+ }
1076
+ export function _seedSnapshotParseCacheForTests(key, entry) {
1077
+ cacheParsedSnapshot(key, entry);
1078
+ }
1079
+ export function _snapshotParseCacheKeysForTests() {
1080
+ return [...snapshotParseCache.keys()];
1081
+ }
1082
+ export function _snapshotParseCacheGetForTests(key) {
1083
+ return snapshotParseCache.get(key) !== undefined;
1084
+ }
1085
+ export function _seedSuccessfulSnapshotPersistForTests(key, record) {
1086
+ rememberSuccessfulSnapshotPersist(key, record);
1087
+ }
1088
+ export function _successfulSnapshotPersistKeysForTests() {
1089
+ return [..._successfulSnapshotPersists.keys()];
1090
+ }
1091
+ export function _successfulSnapshotPersistGetForTests(key) {
1092
+ return _successfulSnapshotPersists.get(key) !== undefined;
1093
+ }
1094
+ export function _seedFailedSnapshotPersistForTests(key, record) {
1095
+ _failedSnapshotPersists.set(key, record);
1096
+ }
1097
+ export function _failedSnapshotPersistKeysForTests() {
1098
+ return [..._failedSnapshotPersists.keys()];
1099
+ }
1100
+ export function buildProjectSnapshotFromRuntime(args) {
1101
+ return {
1102
+ version: PROJECT_SNAPSHOT_VERSION,
1103
+ projectRoot: normalizeMapKey(path.resolve(args.cwd)),
1104
+ generatedAt: new Date().toISOString(),
1105
+ seq: args.runtime.projectSeq,
1106
+ files: {},
1107
+ symbols: {},
1108
+ reverseDeps: {},
1109
+ cachedExports: [...args.runtime.cachedExports.entries()].sort((a, b) => a[0].localeCompare(b[0])),
1110
+ sequenceIndex: {
1111
+ projectSeq: args.runtime.projectSeq,
1112
+ fileSeqByPath: args.runtime.getFileSeqEntries()
1113
+ },
1114
+ wordIndex: args.runtime.wordIndex ? serializeWordIndex(args.runtime.wordIndex) : undefined,
1115
+ projectRulesScan: args.runtime.projectRulesScan,
1116
+ startupScan: args.startupScan,
1117
+ languageProfile: args.languageProfile,
1118
+ conventions: args.conventions
1119
+ };
1120
+ }
1121
+ export function hydrateRuntimeFromProjectSnapshot(runtime, snapshot) {
1122
+ runtime.cachedExports.clear();
1123
+ for (const [name, filePath] of snapshot.cachedExports) {
1124
+ runtime.cachedExports.set(name, filePath);
1125
+ }
1126
+ if (snapshot.projectRulesScan) {
1127
+ runtime.projectRulesScan = snapshot.projectRulesScan;
1128
+ }
1129
+ runtime.wordIndex = deserializeWordIndex(snapshot.wordIndex);
1130
+ }
1131
+ export function hydrateRuntimeFromProjectSnapshotIfIdle(runtime, snapshot) {
1132
+ let hydratedAnything = false;
1133
+ if (runtime.cachedExports.size === 0 && snapshot.cachedExports.length > 0) {
1134
+ runtime.cachedExports.clear();
1135
+ for (const [name, filePath] of snapshot.cachedExports) {
1136
+ runtime.cachedExports.set(name, filePath);
1137
+ }
1138
+ hydratedAnything = true;
1139
+ }
1140
+ if (!runtime.projectRulesScan.hasCustomRules && runtime.projectRulesScan.rules.length === 0 && snapshot.projectRulesScan) {
1141
+ runtime.projectRulesScan = snapshot.projectRulesScan;
1142
+ hydratedAnything = true;
1143
+ }
1144
+ return hydratedAnything;
1145
+ }
1146
+ export function saveRuntimeProjectSnapshot(args) {
1147
+ try {
1148
+ if (typeof args.runtime.projectSeq !== "number")
1149
+ return;
1150
+ const existing = loadProjectSnapshot(args.cwd);
1151
+ let conventions = args.conventions ?? existing?.conventions;
1152
+ if (!conventions) {
1153
+ try {
1154
+ conventions = detectProjectConventions(args.cwd);
1155
+ } catch (err) {
1156
+ args.dbg?.(`project_snapshot: convention detection failed: ${err}`);
1157
+ }
1158
+ }
1159
+ const snapshot = buildProjectSnapshotFromRuntime({
1160
+ ...args,
1161
+ startupScan: args.startupScan ?? existing?.startupScan,
1162
+ languageProfile: args.languageProfile ?? existing?.languageProfile,
1163
+ conventions
1164
+ });
1165
+ if (existing) {
1166
+ snapshot.files = existing.files ?? {};
1167
+ snapshot.symbols = existing.symbols ?? {};
1168
+ snapshot.reverseDeps = existing.reverseDeps ?? {};
1169
+ if (!snapshot.wordIndex && existing.wordIndex && existing.seq === snapshot.seq) {
1170
+ snapshot.wordIndex = existing.wordIndex;
1171
+ }
1172
+ }
1173
+ saveProjectSnapshot(args.cwd, snapshot);
1174
+ args.dbg?.(`project_snapshot: saved seq=${snapshot.seq} exports=${snapshot.cachedExports.length}`);
1175
+ } catch (err) {
1176
+ args.dbg?.(`project_snapshot: save failed: ${err}`);
1177
+ }
1178
+ }